summaryrefslogtreecommitdiff
path: root/sc448.c
diff options
context:
space:
mode:
authorNagi5Yeq <nagi5yeq@gmail.com>2019-07-04 23:55:21 +0800
committerNagi5Yeq <nagi5yeq@gmail.com>2019-07-04 23:55:21 +0800
commit28bc016fb0dc11bf2a4c3e157daac24b2d9482f6 (patch)
tree187edb3f152852940610e0cd09a5b2d16f83cc99 /sc448.c
parent22aca24950b45892a70aef77a5f197e521fc11b5 (diff)
add ge448 and data
Diffstat (limited to 'sc448.c')
-rw-r--r--sc448.c131
1 files changed, 46 insertions, 85 deletions
diff --git a/sc448.c b/sc448.c
index 75ea623..9a0f58c 100644
--- a/sc448.c
+++ b/sc448.c
@@ -198,94 +198,55 @@ void sc448_mul(sc448 *r, const sc448 *x, const sc448 *y)
barrett_reduce(r, t);
}
- /* not implemented yet */
-#if 0
-void sc25519_window3(signed char r[85], const sc25519 *s)
-{
- char carry;
- int i;
- for (i = 0; i < 10; i++)
- {
- r[8 * i + 0] = s->v[3 * i + 0] & 7;
- r[8 * i + 1] = (s->v[3 * i + 0] >> 3) & 7;
- r[8 * i + 2] = (s->v[3 * i + 0] >> 6) & 7;
- r[8 * i + 2] ^= (s->v[3 * i + 1] << 2) & 7;
- r[8 * i + 3] = (s->v[3 * i + 1] >> 1) & 7;
- r[8 * i + 4] = (s->v[3 * i + 1] >> 4) & 7;
- r[8 * i + 5] = (s->v[3 * i + 1] >> 7) & 7;
- r[8 * i + 5] ^= (s->v[3 * i + 2] << 1) & 7;
- r[8 * i + 6] = (s->v[3 * i + 2] >> 2) & 7;
- r[8 * i + 7] = (s->v[3 * i + 2] >> 5) & 7;
- }
- r[8 * i + 0] = s->v[3 * i + 0] & 7;
- r[8 * i + 1] = (s->v[3 * i + 0] >> 3) & 7;
- r[8 * i + 2] = (s->v[3 * i + 0] >> 6) & 7;
- r[8 * i + 2] ^= (s->v[3 * i + 1] << 2) & 7;
- r[8 * i + 3] = (s->v[3 * i + 1] >> 1) & 7;
- r[8 * i + 4] = (s->v[3 * i + 1] >> 4) & 7;
-
- /* Making it signed */
- carry = 0;
- for (i = 0; i < 84; i++)
- {
- r[i] += carry;
- r[i + 1] += r[i] >> 3;
- r[i] &= 7;
- carry = r[i] >> 2;
- r[i] -= carry << 3;
- }
- r[84] += carry;
-}
-void sc25519_window5(signed char r[51], const sc25519 *s)
+void sc448_window3(signed char r[149], const sc448 *s)
{
- char carry;
- int i;
- for (i = 0; i < 6; i++)
- {
- r[8 * i + 0] = s->v[5 * i + 0] & 31;
- r[8 * i + 1] = (s->v[5 * i + 0] >> 5) & 31;
- r[8 * i + 1] ^= (s->v[5 * i + 1] << 3) & 31;
- r[8 * i + 2] = (s->v[5 * i + 1] >> 2) & 31;
- r[8 * i + 3] = (s->v[5 * i + 1] >> 7) & 31;
- r[8 * i + 3] ^= (s->v[5 * i + 2] << 1) & 31;
- r[8 * i + 4] = (s->v[5 * i + 2] >> 4) & 31;
- r[8 * i + 4] ^= (s->v[5 * i + 3] << 4) & 31;
- r[8 * i + 5] = (s->v[5 * i + 3] >> 1) & 31;
- r[8 * i + 6] = (s->v[5 * i + 3] >> 6) & 31;
- r[8 * i + 6] ^= (s->v[5 * i + 4] << 2) & 31;
- r[8 * i + 7] = (s->v[5 * i + 4] >> 3) & 31;
- }
- r[8 * i + 0] = s->v[5 * i + 0] & 31;
- r[8 * i + 1] = (s->v[5 * i + 0] >> 5) & 31;
- r[8 * i + 1] ^= (s->v[5 * i + 1] << 3) & 31;
- r[8 * i + 2] = (s->v[5 * i + 1] >> 2) & 31;
-
- /* Making it signed */
- carry = 0;
- for (i = 0; i < 50; i++)
- {
- r[i] += carry;
- r[i + 1] += r[i] >> 5;
- r[i] &= 31;
- carry = r[i] >> 4;
- r[i] -= carry << 5;
- }
- r[50] += carry;
+ char carry;
+ int i;
+ for (i = 0; i < 18; i++)
+ {
+ r[8 * i + 0] = s->v[3 * i + 0] & 7;
+ r[8 * i + 1] = (s->v[3 * i + 0] >> 3) & 7;
+ r[8 * i + 2] = (s->v[3 * i + 0] >> 6) & 7;
+ r[8 * i + 2] ^= (s->v[3 * i + 1] << 2) & 7;
+ r[8 * i + 3] = (s->v[3 * i + 1] >> 1) & 7;
+ r[8 * i + 4] = (s->v[3 * i + 1] >> 4) & 7;
+ r[8 * i + 5] = (s->v[3 * i + 1] >> 7) & 7;
+ r[8 * i + 5] ^= (s->v[3 * i + 2] << 1) & 7;
+ r[8 * i + 6] = (s->v[3 * i + 2] >> 2) & 7;
+ r[8 * i + 7] = (s->v[3 * i + 2] >> 5) & 7;
+ }
+ r[8 * i + 0] = s->v[3 * i + 0] & 7;
+ r[8 * i + 1] = (s->v[3 * i + 0] >> 3) & 7;
+ r[8 * i + 2] = (s->v[3 * i + 0] >> 6) & 7;
+ r[8 * i + 2] ^= (s->v[3 * i + 1] << 2) & 7;
+ r[8 * i + 3] = (s->v[3 * i + 1] >> 1) & 7;
+ r[8 * i + 4] = (s->v[3 * i + 1] >> 4) & 7;
+
+ /* Making it signed */
+ carry = 0;
+ for (i = 0; i < 148; i++)
+ {
+ r[i] += carry;
+ r[i + 1] += r[i] >> 3;
+ r[i] &= 7;
+ carry = r[i] >> 2;
+ r[i] -= carry << 3;
+ }
+ r[148] += carry;
}
-void sc25519_2interleave2(unsigned char r[127], const sc25519 *s1, const sc25519 *s2)
+void sc448_2interleave2(unsigned char r[223], const sc448 *s1, const sc448 *s2)
{
- int i;
- for (i = 0; i < 31; i++)
- {
- r[4 * i] = (s1->v[i] & 3) ^ ((s2->v[i] & 3) << 2);
- r[4 * i + 1] = ((s1->v[i] >> 2) & 3) ^ (((s2->v[i] >> 2) & 3) << 2);
- r[4 * i + 2] = ((s1->v[i] >> 4) & 3) ^ (((s2->v[i] >> 4) & 3) << 2);
- r[4 * i + 3] = ((s1->v[i] >> 6) & 3) ^ (((s2->v[i] >> 6) & 3) << 2);
- }
- r[124] = (s1->v[31] & 3) ^ ((s2->v[31] & 3) << 2);
- r[125] = ((s1->v[31] >> 2) & 3) ^ (((s2->v[31] >> 2) & 3) << 2);
- r[126] = ((s1->v[31] >> 4) & 3) ^ (((s2->v[31] >> 4) & 3) << 2);
+ int i;
+ for (i = 0; i < 55; i++)
+ {
+ r[4 * i] = (s1->v[i] & 3) ^ ((s2->v[i] & 3) << 2);
+ r[4 * i + 1] = ((s1->v[i] >> 2) & 3) ^ (((s2->v[i] >> 2) & 3) << 2);
+ r[4 * i + 2] = ((s1->v[i] >> 4) & 3) ^ (((s2->v[i] >> 4) & 3) << 2);
+ r[4 * i + 3] = ((s1->v[i] >> 6) & 3) ^ (((s2->v[i] >> 6) & 3) << 2);
+ }
+ r[220] = (s1->v[55] & 3) ^ ((s2->v[55] & 3) << 2);
+ r[221] = ((s1->v[55] >> 2) & 3) ^ (((s2->v[55] >> 2) & 3) << 2);
+ r[222] = ((s1->v[55] >> 4) & 3) ^ (((s2->v[55] >> 4) & 3) << 2);
}
-#endif