diff options
| author | Nagi5Yeq <nagi5yeq@gmail.com> | 2019-07-04 23:55:21 +0800 |
|---|---|---|
| committer | Nagi5Yeq <nagi5yeq@gmail.com> | 2019-07-04 23:55:21 +0800 |
| commit | 28bc016fb0dc11bf2a4c3e157daac24b2d9482f6 (patch) | |
| tree | 187edb3f152852940610e0cd09a5b2d16f83cc99 /sc448.c | |
| parent | 22aca24950b45892a70aef77a5f197e521fc11b5 (diff) | |
add ge448 and data
Diffstat (limited to 'sc448.c')
| -rw-r--r-- | sc448.c | 131 |
1 files changed, 46 insertions, 85 deletions
@@ -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 |
