diff options
Diffstat (limited to 'src/lib/libcrypto/curve25519/curve25519.c')
-rw-r--r-- | src/lib/libcrypto/curve25519/curve25519.c | 243 |
1 files changed, 127 insertions, 116 deletions
diff --git a/src/lib/libcrypto/curve25519/curve25519.c b/src/lib/libcrypto/curve25519/curve25519.c index 4e644c4280..0aa3d2855b 100644 --- a/src/lib/libcrypto/curve25519/curve25519.c +++ b/src/lib/libcrypto/curve25519/curve25519.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: curve25519.c,v 1.16 2023/07/08 15:12:49 beck Exp $ */ | 1 | /* $OpenBSD: curve25519.c,v 1.18 2025/07/29 10:52:20 tb Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2015, Google Inc. | 3 | * Copyright (c) 2015, Google Inc. |
4 | * | 4 | * |
@@ -3781,6 +3781,17 @@ ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a, | |||
3781 | } | 3781 | } |
3782 | } | 3782 | } |
3783 | 3783 | ||
3784 | /* | ||
3785 | * int64_lshift21 returns |a << 21| but is defined when shifting bits into the | ||
3786 | * sign bit. This works around a language flaw in C. | ||
3787 | * | ||
3788 | * XXX: This is a hack to avoid undefined behavior when shifting into the sign bit. | ||
3789 | * We match BoringSSL's implementation here. | ||
3790 | */ | ||
3791 | static inline int64_t int64_lshift21(int64_t a) { | ||
3792 | return (int64_t)((uint64_t)a << 21); | ||
3793 | } | ||
3794 | |||
3784 | /* The set of scalars is \Z/l | 3795 | /* The set of scalars is \Z/l |
3785 | * where l = 2^252 + 27742317777372353535851937790883648493. */ | 3796 | * where l = 2^252 + 27742317777372353535851937790883648493. */ |
3786 | 3797 | ||
@@ -3885,38 +3896,38 @@ x25519_sc_reduce(uint8_t *s) { | |||
3885 | 3896 | ||
3886 | carry6 = (s6 + (1 << 20)) >> 21; | 3897 | carry6 = (s6 + (1 << 20)) >> 21; |
3887 | s7 += carry6; | 3898 | s7 += carry6; |
3888 | s6 -= carry6 << 21; | 3899 | s6 -= int64_lshift21(carry6); |
3889 | carry8 = (s8 + (1 << 20)) >> 21; | 3900 | carry8 = (s8 + (1 << 20)) >> 21; |
3890 | s9 += carry8; | 3901 | s9 += carry8; |
3891 | s8 -= carry8 << 21; | 3902 | s8 -= int64_lshift21(carry8); |
3892 | carry10 = (s10 + (1 << 20)) >> 21; | 3903 | carry10 = (s10 + (1 << 20)) >> 21; |
3893 | s11 += carry10; | 3904 | s11 += carry10; |
3894 | s10 -= carry10 << 21; | 3905 | s10 -= int64_lshift21(carry10); |
3895 | carry12 = (s12 + (1 << 20)) >> 21; | 3906 | carry12 = (s12 + (1 << 20)) >> 21; |
3896 | s13 += carry12; | 3907 | s13 += carry12; |
3897 | s12 -= carry12 << 21; | 3908 | s12 -= int64_lshift21(carry12); |
3898 | carry14 = (s14 + (1 << 20)) >> 21; | 3909 | carry14 = (s14 + (1 << 20)) >> 21; |
3899 | s15 += carry14; | 3910 | s15 += carry14; |
3900 | s14 -= carry14 << 21; | 3911 | s14 -= int64_lshift21(carry14); |
3901 | carry16 = (s16 + (1 << 20)) >> 21; | 3912 | carry16 = (s16 + (1 << 20)) >> 21; |
3902 | s17 += carry16; | 3913 | s17 += carry16; |
3903 | s16 -= carry16 << 21; | 3914 | s16 -= int64_lshift21(carry16); |
3904 | 3915 | ||
3905 | carry7 = (s7 + (1 << 20)) >> 21; | 3916 | carry7 = (s7 + (1 << 20)) >> 21; |
3906 | s8 += carry7; | 3917 | s8 += carry7; |
3907 | s7 -= carry7 << 21; | 3918 | s7 -= int64_lshift21(carry7); |
3908 | carry9 = (s9 + (1 << 20)) >> 21; | 3919 | carry9 = (s9 + (1 << 20)) >> 21; |
3909 | s10 += carry9; | 3920 | s10 += carry9; |
3910 | s9 -= carry9 << 21; | 3921 | s9 -= int64_lshift21(carry9); |
3911 | carry11 = (s11 + (1 << 20)) >> 21; | 3922 | carry11 = (s11 + (1 << 20)) >> 21; |
3912 | s12 += carry11; | 3923 | s12 += carry11; |
3913 | s11 -= carry11 << 21; | 3924 | s11 -= int64_lshift21(carry11); |
3914 | carry13 = (s13 + (1 << 20)) >> 21; | 3925 | carry13 = (s13 + (1 << 20)) >> 21; |
3915 | s14 += carry13; | 3926 | s14 += carry13; |
3916 | s13 -= carry13 << 21; | 3927 | s13 -= int64_lshift21(carry13); |
3917 | carry15 = (s15 + (1 << 20)) >> 21; | 3928 | carry15 = (s15 + (1 << 20)) >> 21; |
3918 | s16 += carry15; | 3929 | s16 += carry15; |
3919 | s15 -= carry15 << 21; | 3930 | s15 -= int64_lshift21(carry15); |
3920 | 3931 | ||
3921 | s5 += s17 * 666643; | 3932 | s5 += s17 * 666643; |
3922 | s6 += s17 * 470296; | 3933 | s6 += s17 * 470296; |
@@ -3968,41 +3979,41 @@ x25519_sc_reduce(uint8_t *s) { | |||
3968 | 3979 | ||
3969 | carry0 = (s0 + (1 << 20)) >> 21; | 3980 | carry0 = (s0 + (1 << 20)) >> 21; |
3970 | s1 += carry0; | 3981 | s1 += carry0; |
3971 | s0 -= carry0 << 21; | 3982 | s0 -= int64_lshift21(carry0); |
3972 | carry2 = (s2 + (1 << 20)) >> 21; | 3983 | carry2 = (s2 + (1 << 20)) >> 21; |
3973 | s3 += carry2; | 3984 | s3 += carry2; |
3974 | s2 -= carry2 << 21; | 3985 | s2 -= int64_lshift21(carry2); |
3975 | carry4 = (s4 + (1 << 20)) >> 21; | 3986 | carry4 = (s4 + (1 << 20)) >> 21; |
3976 | s5 += carry4; | 3987 | s5 += carry4; |
3977 | s4 -= carry4 << 21; | 3988 | s4 -= int64_lshift21(carry4); |
3978 | carry6 = (s6 + (1 << 20)) >> 21; | 3989 | carry6 = (s6 + (1 << 20)) >> 21; |
3979 | s7 += carry6; | 3990 | s7 += carry6; |
3980 | s6 -= carry6 << 21; | 3991 | s6 -= int64_lshift21(carry6); |
3981 | carry8 = (s8 + (1 << 20)) >> 21; | 3992 | carry8 = (s8 + (1 << 20)) >> 21; |
3982 | s9 += carry8; | 3993 | s9 += carry8; |
3983 | s8 -= carry8 << 21; | 3994 | s8 -= int64_lshift21(carry8); |
3984 | carry10 = (s10 + (1 << 20)) >> 21; | 3995 | carry10 = (s10 + (1 << 20)) >> 21; |
3985 | s11 += carry10; | 3996 | s11 += carry10; |
3986 | s10 -= carry10 << 21; | 3997 | s10 -= int64_lshift21(carry10); |
3987 | 3998 | ||
3988 | carry1 = (s1 + (1 << 20)) >> 21; | 3999 | carry1 = (s1 + (1 << 20)) >> 21; |
3989 | s2 += carry1; | 4000 | s2 += carry1; |
3990 | s1 -= carry1 << 21; | 4001 | s1 -= int64_lshift21(carry1); |
3991 | carry3 = (s3 + (1 << 20)) >> 21; | 4002 | carry3 = (s3 + (1 << 20)) >> 21; |
3992 | s4 += carry3; | 4003 | s4 += carry3; |
3993 | s3 -= carry3 << 21; | 4004 | s3 -= int64_lshift21(carry3); |
3994 | carry5 = (s5 + (1 << 20)) >> 21; | 4005 | carry5 = (s5 + (1 << 20)) >> 21; |
3995 | s6 += carry5; | 4006 | s6 += carry5; |
3996 | s5 -= carry5 << 21; | 4007 | s5 -= int64_lshift21(carry5); |
3997 | carry7 = (s7 + (1 << 20)) >> 21; | 4008 | carry7 = (s7 + (1 << 20)) >> 21; |
3998 | s8 += carry7; | 4009 | s8 += carry7; |
3999 | s7 -= carry7 << 21; | 4010 | s7 -= int64_lshift21(carry7); |
4000 | carry9 = (s9 + (1 << 20)) >> 21; | 4011 | carry9 = (s9 + (1 << 20)) >> 21; |
4001 | s10 += carry9; | 4012 | s10 += carry9; |
4002 | s9 -= carry9 << 21; | 4013 | s9 -= int64_lshift21(carry9); |
4003 | carry11 = (s11 + (1 << 20)) >> 21; | 4014 | carry11 = (s11 + (1 << 20)) >> 21; |
4004 | s12 += carry11; | 4015 | s12 += carry11; |
4005 | s11 -= carry11 << 21; | 4016 | s11 -= int64_lshift21(carry11); |
4006 | 4017 | ||
4007 | s0 += s12 * 666643; | 4018 | s0 += s12 * 666643; |
4008 | s1 += s12 * 470296; | 4019 | s1 += s12 * 470296; |
@@ -4014,40 +4025,40 @@ x25519_sc_reduce(uint8_t *s) { | |||
4014 | 4025 | ||
4015 | carry0 = s0 >> 21; | 4026 | carry0 = s0 >> 21; |
4016 | s1 += carry0; | 4027 | s1 += carry0; |
4017 | s0 -= carry0 << 21; | 4028 | s0 -= int64_lshift21(carry0); |
4018 | carry1 = s1 >> 21; | 4029 | carry1 = s1 >> 21; |
4019 | s2 += carry1; | 4030 | s2 += carry1; |
4020 | s1 -= carry1 << 21; | 4031 | s1 -= int64_lshift21(carry1); |
4021 | carry2 = s2 >> 21; | 4032 | carry2 = s2 >> 21; |
4022 | s3 += carry2; | 4033 | s3 += carry2; |
4023 | s2 -= carry2 << 21; | 4034 | s2 -= int64_lshift21(carry2); |
4024 | carry3 = s3 >> 21; | 4035 | carry3 = s3 >> 21; |
4025 | s4 += carry3; | 4036 | s4 += carry3; |
4026 | s3 -= carry3 << 21; | 4037 | s3 -= int64_lshift21(carry3); |
4027 | carry4 = s4 >> 21; | 4038 | carry4 = s4 >> 21; |
4028 | s5 += carry4; | 4039 | s5 += carry4; |
4029 | s4 -= carry4 << 21; | 4040 | s4 -= int64_lshift21(carry4); |
4030 | carry5 = s5 >> 21; | 4041 | carry5 = s5 >> 21; |
4031 | s6 += carry5; | 4042 | s6 += carry5; |
4032 | s5 -= carry5 << 21; | 4043 | s5 -= int64_lshift21(carry5); |
4033 | carry6 = s6 >> 21; | 4044 | carry6 = s6 >> 21; |
4034 | s7 += carry6; | 4045 | s7 += carry6; |
4035 | s6 -= carry6 << 21; | 4046 | s6 -= int64_lshift21(carry6); |
4036 | carry7 = s7 >> 21; | 4047 | carry7 = s7 >> 21; |
4037 | s8 += carry7; | 4048 | s8 += carry7; |
4038 | s7 -= carry7 << 21; | 4049 | s7 -= int64_lshift21(carry7); |
4039 | carry8 = s8 >> 21; | 4050 | carry8 = s8 >> 21; |
4040 | s9 += carry8; | 4051 | s9 += carry8; |
4041 | s8 -= carry8 << 21; | 4052 | s8 -= int64_lshift21(carry8); |
4042 | carry9 = s9 >> 21; | 4053 | carry9 = s9 >> 21; |
4043 | s10 += carry9; | 4054 | s10 += carry9; |
4044 | s9 -= carry9 << 21; | 4055 | s9 -= int64_lshift21(carry9); |
4045 | carry10 = s10 >> 21; | 4056 | carry10 = s10 >> 21; |
4046 | s11 += carry10; | 4057 | s11 += carry10; |
4047 | s10 -= carry10 << 21; | 4058 | s10 -= int64_lshift21(carry10); |
4048 | carry11 = s11 >> 21; | 4059 | carry11 = s11 >> 21; |
4049 | s12 += carry11; | 4060 | s12 += carry11; |
4050 | s11 -= carry11 << 21; | 4061 | s11 -= int64_lshift21(carry11); |
4051 | 4062 | ||
4052 | s0 += s12 * 666643; | 4063 | s0 += s12 * 666643; |
4053 | s1 += s12 * 470296; | 4064 | s1 += s12 * 470296; |
@@ -4059,37 +4070,37 @@ x25519_sc_reduce(uint8_t *s) { | |||
4059 | 4070 | ||
4060 | carry0 = s0 >> 21; | 4071 | carry0 = s0 >> 21; |
4061 | s1 += carry0; | 4072 | s1 += carry0; |
4062 | s0 -= carry0 << 21; | 4073 | s0 -= int64_lshift21(carry0); |
4063 | carry1 = s1 >> 21; | 4074 | carry1 = s1 >> 21; |
4064 | s2 += carry1; | 4075 | s2 += carry1; |
4065 | s1 -= carry1 << 21; | 4076 | s1 -= int64_lshift21(carry1); |
4066 | carry2 = s2 >> 21; | 4077 | carry2 = s2 >> 21; |
4067 | s3 += carry2; | 4078 | s3 += carry2; |
4068 | s2 -= carry2 << 21; | 4079 | s2 -= int64_lshift21(carry2); |
4069 | carry3 = s3 >> 21; | 4080 | carry3 = s3 >> 21; |
4070 | s4 += carry3; | 4081 | s4 += carry3; |
4071 | s3 -= carry3 << 21; | 4082 | s3 -= int64_lshift21(carry3); |
4072 | carry4 = s4 >> 21; | 4083 | carry4 = s4 >> 21; |
4073 | s5 += carry4; | 4084 | s5 += carry4; |
4074 | s4 -= carry4 << 21; | 4085 | s4 -= int64_lshift21(carry4); |
4075 | carry5 = s5 >> 21; | 4086 | carry5 = s5 >> 21; |
4076 | s6 += carry5; | 4087 | s6 += carry5; |
4077 | s5 -= carry5 << 21; | 4088 | s5 -= int64_lshift21(carry5); |
4078 | carry6 = s6 >> 21; | 4089 | carry6 = s6 >> 21; |
4079 | s7 += carry6; | 4090 | s7 += carry6; |
4080 | s6 -= carry6 << 21; | 4091 | s6 -= int64_lshift21(carry6); |
4081 | carry7 = s7 >> 21; | 4092 | carry7 = s7 >> 21; |
4082 | s8 += carry7; | 4093 | s8 += carry7; |
4083 | s7 -= carry7 << 21; | 4094 | s7 -= int64_lshift21(carry7); |
4084 | carry8 = s8 >> 21; | 4095 | carry8 = s8 >> 21; |
4085 | s9 += carry8; | 4096 | s9 += carry8; |
4086 | s8 -= carry8 << 21; | 4097 | s8 -= int64_lshift21(carry8); |
4087 | carry9 = s9 >> 21; | 4098 | carry9 = s9 >> 21; |
4088 | s10 += carry9; | 4099 | s10 += carry9; |
4089 | s9 -= carry9 << 21; | 4100 | s9 -= int64_lshift21(carry9); |
4090 | carry10 = s10 >> 21; | 4101 | carry10 = s10 >> 21; |
4091 | s11 += carry10; | 4102 | s11 += carry10; |
4092 | s10 -= carry10 << 21; | 4103 | s10 -= int64_lshift21(carry10); |
4093 | 4104 | ||
4094 | s[0] = s0 >> 0; | 4105 | s[0] = s0 >> 0; |
4095 | s[1] = s0 >> 8; | 4106 | s[1] = s0 >> 8; |
@@ -4257,74 +4268,74 @@ sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b, | |||
4257 | 4268 | ||
4258 | carry0 = (s0 + (1 << 20)) >> 21; | 4269 | carry0 = (s0 + (1 << 20)) >> 21; |
4259 | s1 += carry0; | 4270 | s1 += carry0; |
4260 | s0 -= carry0 << 21; | 4271 | s0 -= int64_lshift21(carry0); |
4261 | carry2 = (s2 + (1 << 20)) >> 21; | 4272 | carry2 = (s2 + (1 << 20)) >> 21; |
4262 | s3 += carry2; | 4273 | s3 += carry2; |
4263 | s2 -= carry2 << 21; | 4274 | s2 -= int64_lshift21(carry2); |
4264 | carry4 = (s4 + (1 << 20)) >> 21; | 4275 | carry4 = (s4 + (1 << 20)) >> 21; |
4265 | s5 += carry4; | 4276 | s5 += carry4; |
4266 | s4 -= carry4 << 21; | 4277 | s4 -= int64_lshift21(carry4); |
4267 | carry6 = (s6 + (1 << 20)) >> 21; | 4278 | carry6 = (s6 + (1 << 20)) >> 21; |
4268 | s7 += carry6; | 4279 | s7 += carry6; |
4269 | s6 -= carry6 << 21; | 4280 | s6 -= int64_lshift21(carry6); |
4270 | carry8 = (s8 + (1 << 20)) >> 21; | 4281 | carry8 = (s8 + (1 << 20)) >> 21; |
4271 | s9 += carry8; | 4282 | s9 += carry8; |
4272 | s8 -= carry8 << 21; | 4283 | s8 -= int64_lshift21(carry8); |
4273 | carry10 = (s10 + (1 << 20)) >> 21; | 4284 | carry10 = (s10 + (1 << 20)) >> 21; |
4274 | s11 += carry10; | 4285 | s11 += carry10; |
4275 | s10 -= carry10 << 21; | 4286 | s10 -= int64_lshift21(carry10); |
4276 | carry12 = (s12 + (1 << 20)) >> 21; | 4287 | carry12 = (s12 + (1 << 20)) >> 21; |
4277 | s13 += carry12; | 4288 | s13 += carry12; |
4278 | s12 -= carry12 << 21; | 4289 | s12 -= int64_lshift21(carry12); |
4279 | carry14 = (s14 + (1 << 20)) >> 21; | 4290 | carry14 = (s14 + (1 << 20)) >> 21; |
4280 | s15 += carry14; | 4291 | s15 += carry14; |
4281 | s14 -= carry14 << 21; | 4292 | s14 -= int64_lshift21(carry14); |
4282 | carry16 = (s16 + (1 << 20)) >> 21; | 4293 | carry16 = (s16 + (1 << 20)) >> 21; |
4283 | s17 += carry16; | 4294 | s17 += carry16; |
4284 | s16 -= carry16 << 21; | 4295 | s16 -= int64_lshift21(carry16); |
4285 | carry18 = (s18 + (1 << 20)) >> 21; | 4296 | carry18 = (s18 + (1 << 20)) >> 21; |
4286 | s19 += carry18; | 4297 | s19 += carry18; |
4287 | s18 -= carry18 << 21; | 4298 | s18 -= int64_lshift21(carry18); |
4288 | carry20 = (s20 + (1 << 20)) >> 21; | 4299 | carry20 = (s20 + (1 << 20)) >> 21; |
4289 | s21 += carry20; | 4300 | s21 += carry20; |
4290 | s20 -= carry20 << 21; | 4301 | s20 -= int64_lshift21(carry20); |
4291 | carry22 = (s22 + (1 << 20)) >> 21; | 4302 | carry22 = (s22 + (1 << 20)) >> 21; |
4292 | s23 += carry22; | 4303 | s23 += carry22; |
4293 | s22 -= carry22 << 21; | 4304 | s22 -= int64_lshift21(carry22); |
4294 | 4305 | ||
4295 | carry1 = (s1 + (1 << 20)) >> 21; | 4306 | carry1 = (s1 + (1 << 20)) >> 21; |
4296 | s2 += carry1; | 4307 | s2 += carry1; |
4297 | s1 -= carry1 << 21; | 4308 | s1 -= int64_lshift21(carry1); |
4298 | carry3 = (s3 + (1 << 20)) >> 21; | 4309 | carry3 = (s3 + (1 << 20)) >> 21; |
4299 | s4 += carry3; | 4310 | s4 += carry3; |
4300 | s3 -= carry3 << 21; | 4311 | s3 -= int64_lshift21(carry3); |
4301 | carry5 = (s5 + (1 << 20)) >> 21; | 4312 | carry5 = (s5 + (1 << 20)) >> 21; |
4302 | s6 += carry5; | 4313 | s6 += carry5; |
4303 | s5 -= carry5 << 21; | 4314 | s5 -= int64_lshift21(carry5); |
4304 | carry7 = (s7 + (1 << 20)) >> 21; | 4315 | carry7 = (s7 + (1 << 20)) >> 21; |
4305 | s8 += carry7; | 4316 | s8 += carry7; |
4306 | s7 -= carry7 << 21; | 4317 | s7 -= int64_lshift21(carry7); |
4307 | carry9 = (s9 + (1 << 20)) >> 21; | 4318 | carry9 = (s9 + (1 << 20)) >> 21; |
4308 | s10 += carry9; | 4319 | s10 += carry9; |
4309 | s9 -= carry9 << 21; | 4320 | s9 -= int64_lshift21(carry9); |
4310 | carry11 = (s11 + (1 << 20)) >> 21; | 4321 | carry11 = (s11 + (1 << 20)) >> 21; |
4311 | s12 += carry11; | 4322 | s12 += carry11; |
4312 | s11 -= carry11 << 21; | 4323 | s11 -= int64_lshift21(carry11); |
4313 | carry13 = (s13 + (1 << 20)) >> 21; | 4324 | carry13 = (s13 + (1 << 20)) >> 21; |
4314 | s14 += carry13; | 4325 | s14 += carry13; |
4315 | s13 -= carry13 << 21; | 4326 | s13 -= int64_lshift21(carry13); |
4316 | carry15 = (s15 + (1 << 20)) >> 21; | 4327 | carry15 = (s15 + (1 << 20)) >> 21; |
4317 | s16 += carry15; | 4328 | s16 += carry15; |
4318 | s15 -= carry15 << 21; | 4329 | s15 -= int64_lshift21(carry15); |
4319 | carry17 = (s17 + (1 << 20)) >> 21; | 4330 | carry17 = (s17 + (1 << 20)) >> 21; |
4320 | s18 += carry17; | 4331 | s18 += carry17; |
4321 | s17 -= carry17 << 21; | 4332 | s17 -= int64_lshift21(carry17); |
4322 | carry19 = (s19 + (1 << 20)) >> 21; | 4333 | carry19 = (s19 + (1 << 20)) >> 21; |
4323 | s20 += carry19; | 4334 | s20 += carry19; |
4324 | s19 -= carry19 << 21; | 4335 | s19 -= int64_lshift21(carry19); |
4325 | carry21 = (s21 + (1 << 20)) >> 21; | 4336 | carry21 = (s21 + (1 << 20)) >> 21; |
4326 | s22 += carry21; | 4337 | s22 += carry21; |
4327 | s21 -= carry21 << 21; | 4338 | s21 -= int64_lshift21(carry21); |
4328 | 4339 | ||
4329 | s11 += s23 * 666643; | 4340 | s11 += s23 * 666643; |
4330 | s12 += s23 * 470296; | 4341 | s12 += s23 * 470296; |
@@ -4376,38 +4387,38 @@ sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b, | |||
4376 | 4387 | ||
4377 | carry6 = (s6 + (1 << 20)) >> 21; | 4388 | carry6 = (s6 + (1 << 20)) >> 21; |
4378 | s7 += carry6; | 4389 | s7 += carry6; |
4379 | s6 -= carry6 << 21; | 4390 | s6 -= int64_lshift21(carry6); |
4380 | carry8 = (s8 + (1 << 20)) >> 21; | 4391 | carry8 = (s8 + (1 << 20)) >> 21; |
4381 | s9 += carry8; | 4392 | s9 += carry8; |
4382 | s8 -= carry8 << 21; | 4393 | s8 -= int64_lshift21(carry8); |
4383 | carry10 = (s10 + (1 << 20)) >> 21; | 4394 | carry10 = (s10 + (1 << 20)) >> 21; |
4384 | s11 += carry10; | 4395 | s11 += carry10; |
4385 | s10 -= carry10 << 21; | 4396 | s10 -= int64_lshift21(carry10); |
4386 | carry12 = (s12 + (1 << 20)) >> 21; | 4397 | carry12 = (s12 + (1 << 20)) >> 21; |
4387 | s13 += carry12; | 4398 | s13 += carry12; |
4388 | s12 -= carry12 << 21; | 4399 | s12 -= int64_lshift21(carry12); |
4389 | carry14 = (s14 + (1 << 20)) >> 21; | 4400 | carry14 = (s14 + (1 << 20)) >> 21; |
4390 | s15 += carry14; | 4401 | s15 += carry14; |
4391 | s14 -= carry14 << 21; | 4402 | s14 -= int64_lshift21(carry14); |
4392 | carry16 = (s16 + (1 << 20)) >> 21; | 4403 | carry16 = (s16 + (1 << 20)) >> 21; |
4393 | s17 += carry16; | 4404 | s17 += carry16; |
4394 | s16 -= carry16 << 21; | 4405 | s16 -= int64_lshift21(carry16); |
4395 | 4406 | ||
4396 | carry7 = (s7 + (1 << 20)) >> 21; | 4407 | carry7 = (s7 + (1 << 20)) >> 21; |
4397 | s8 += carry7; | 4408 | s8 += carry7; |
4398 | s7 -= carry7 << 21; | 4409 | s7 -= int64_lshift21(carry7); |
4399 | carry9 = (s9 + (1 << 20)) >> 21; | 4410 | carry9 = (s9 + (1 << 20)) >> 21; |
4400 | s10 += carry9; | 4411 | s10 += carry9; |
4401 | s9 -= carry9 << 21; | 4412 | s9 -= int64_lshift21(carry9); |
4402 | carry11 = (s11 + (1 << 20)) >> 21; | 4413 | carry11 = (s11 + (1 << 20)) >> 21; |
4403 | s12 += carry11; | 4414 | s12 += carry11; |
4404 | s11 -= carry11 << 21; | 4415 | s11 -= int64_lshift21(carry11); |
4405 | carry13 = (s13 + (1 << 20)) >> 21; | 4416 | carry13 = (s13 + (1 << 20)) >> 21; |
4406 | s14 += carry13; | 4417 | s14 += carry13; |
4407 | s13 -= carry13 << 21; | 4418 | s13 -= int64_lshift21(carry13); |
4408 | carry15 = (s15 + (1 << 20)) >> 21; | 4419 | carry15 = (s15 + (1 << 20)) >> 21; |
4409 | s16 += carry15; | 4420 | s16 += carry15; |
4410 | s15 -= carry15 << 21; | 4421 | s15 -= int64_lshift21(carry15); |
4411 | 4422 | ||
4412 | s5 += s17 * 666643; | 4423 | s5 += s17 * 666643; |
4413 | s6 += s17 * 470296; | 4424 | s6 += s17 * 470296; |
@@ -4459,41 +4470,41 @@ sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b, | |||
4459 | 4470 | ||
4460 | carry0 = (s0 + (1 << 20)) >> 21; | 4471 | carry0 = (s0 + (1 << 20)) >> 21; |
4461 | s1 += carry0; | 4472 | s1 += carry0; |
4462 | s0 -= carry0 << 21; | 4473 | s0 -= int64_lshift21(carry0); |
4463 | carry2 = (s2 + (1 << 20)) >> 21; | 4474 | carry2 = (s2 + (1 << 20)) >> 21; |
4464 | s3 += carry2; | 4475 | s3 += carry2; |
4465 | s2 -= carry2 << 21; | 4476 | s2 -= int64_lshift21(carry2); |
4466 | carry4 = (s4 + (1 << 20)) >> 21; | 4477 | carry4 = (s4 + (1 << 20)) >> 21; |
4467 | s5 += carry4; | 4478 | s5 += carry4; |
4468 | s4 -= carry4 << 21; | 4479 | s4 -= int64_lshift21(carry4); |
4469 | carry6 = (s6 + (1 << 20)) >> 21; | 4480 | carry6 = (s6 + (1 << 20)) >> 21; |
4470 | s7 += carry6; | 4481 | s7 += carry6; |
4471 | s6 -= carry6 << 21; | 4482 | s6 -= int64_lshift21(carry6); |
4472 | carry8 = (s8 + (1 << 20)) >> 21; | 4483 | carry8 = (s8 + (1 << 20)) >> 21; |
4473 | s9 += carry8; | 4484 | s9 += carry8; |
4474 | s8 -= carry8 << 21; | 4485 | s8 -= int64_lshift21(carry8); |
4475 | carry10 = (s10 + (1 << 20)) >> 21; | 4486 | carry10 = (s10 + (1 << 20)) >> 21; |
4476 | s11 += carry10; | 4487 | s11 += carry10; |
4477 | s10 -= carry10 << 21; | 4488 | s10 -= int64_lshift21(carry10); |
4478 | 4489 | ||
4479 | carry1 = (s1 + (1 << 20)) >> 21; | 4490 | carry1 = (s1 + (1 << 20)) >> 21; |
4480 | s2 += carry1; | 4491 | s2 += carry1; |
4481 | s1 -= carry1 << 21; | 4492 | s1 -= int64_lshift21(carry1); |
4482 | carry3 = (s3 + (1 << 20)) >> 21; | 4493 | carry3 = (s3 + (1 << 20)) >> 21; |
4483 | s4 += carry3; | 4494 | s4 += carry3; |
4484 | s3 -= carry3 << 21; | 4495 | s3 -= int64_lshift21(carry3); |
4485 | carry5 = (s5 + (1 << 20)) >> 21; | 4496 | carry5 = (s5 + (1 << 20)) >> 21; |
4486 | s6 += carry5; | 4497 | s6 += carry5; |
4487 | s5 -= carry5 << 21; | 4498 | s5 -= int64_lshift21(carry5); |
4488 | carry7 = (s7 + (1 << 20)) >> 21; | 4499 | carry7 = (s7 + (1 << 20)) >> 21; |
4489 | s8 += carry7; | 4500 | s8 += carry7; |
4490 | s7 -= carry7 << 21; | 4501 | s7 -= int64_lshift21(carry7); |
4491 | carry9 = (s9 + (1 << 20)) >> 21; | 4502 | carry9 = (s9 + (1 << 20)) >> 21; |
4492 | s10 += carry9; | 4503 | s10 += carry9; |
4493 | s9 -= carry9 << 21; | 4504 | s9 -= int64_lshift21(carry9); |
4494 | carry11 = (s11 + (1 << 20)) >> 21; | 4505 | carry11 = (s11 + (1 << 20)) >> 21; |
4495 | s12 += carry11; | 4506 | s12 += carry11; |
4496 | s11 -= carry11 << 21; | 4507 | s11 -= int64_lshift21(carry11); |
4497 | 4508 | ||
4498 | s0 += s12 * 666643; | 4509 | s0 += s12 * 666643; |
4499 | s1 += s12 * 470296; | 4510 | s1 += s12 * 470296; |
@@ -4505,40 +4516,40 @@ sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b, | |||
4505 | 4516 | ||
4506 | carry0 = s0 >> 21; | 4517 | carry0 = s0 >> 21; |
4507 | s1 += carry0; | 4518 | s1 += carry0; |
4508 | s0 -= carry0 << 21; | 4519 | s0 -= int64_lshift21(carry0); |
4509 | carry1 = s1 >> 21; | 4520 | carry1 = s1 >> 21; |
4510 | s2 += carry1; | 4521 | s2 += carry1; |
4511 | s1 -= carry1 << 21; | 4522 | s1 -= int64_lshift21(carry1); |
4512 | carry2 = s2 >> 21; | 4523 | carry2 = s2 >> 21; |
4513 | s3 += carry2; | 4524 | s3 += carry2; |
4514 | s2 -= carry2 << 21; | 4525 | s2 -= int64_lshift21(carry2); |
4515 | carry3 = s3 >> 21; | 4526 | carry3 = s3 >> 21; |
4516 | s4 += carry3; | 4527 | s4 += carry3; |
4517 | s3 -= carry3 << 21; | 4528 | s3 -= int64_lshift21(carry3); |
4518 | carry4 = s4 >> 21; | 4529 | carry4 = s4 >> 21; |
4519 | s5 += carry4; | 4530 | s5 += carry4; |
4520 | s4 -= carry4 << 21; | 4531 | s4 -= int64_lshift21(carry4); |
4521 | carry5 = s5 >> 21; | 4532 | carry5 = s5 >> 21; |
4522 | s6 += carry5; | 4533 | s6 += carry5; |
4523 | s5 -= carry5 << 21; | 4534 | s5 -= int64_lshift21(carry5); |
4524 | carry6 = s6 >> 21; | 4535 | carry6 = s6 >> 21; |
4525 | s7 += carry6; | 4536 | s7 += carry6; |
4526 | s6 -= carry6 << 21; | 4537 | s6 -= int64_lshift21(carry6); |
4527 | carry7 = s7 >> 21; | 4538 | carry7 = s7 >> 21; |
4528 | s8 += carry7; | 4539 | s8 += carry7; |
4529 | s7 -= carry7 << 21; | 4540 | s7 -= int64_lshift21(carry7); |
4530 | carry8 = s8 >> 21; | 4541 | carry8 = s8 >> 21; |
4531 | s9 += carry8; | 4542 | s9 += carry8; |
4532 | s8 -= carry8 << 21; | 4543 | s8 -= int64_lshift21(carry8); |
4533 | carry9 = s9 >> 21; | 4544 | carry9 = s9 >> 21; |
4534 | s10 += carry9; | 4545 | s10 += carry9; |
4535 | s9 -= carry9 << 21; | 4546 | s9 -= int64_lshift21(carry9); |
4536 | carry10 = s10 >> 21; | 4547 | carry10 = s10 >> 21; |
4537 | s11 += carry10; | 4548 | s11 += carry10; |
4538 | s10 -= carry10 << 21; | 4549 | s10 -= int64_lshift21(carry10); |
4539 | carry11 = s11 >> 21; | 4550 | carry11 = s11 >> 21; |
4540 | s12 += carry11; | 4551 | s12 += carry11; |
4541 | s11 -= carry11 << 21; | 4552 | s11 -= int64_lshift21(carry11); |
4542 | 4553 | ||
4543 | s0 += s12 * 666643; | 4554 | s0 += s12 * 666643; |
4544 | s1 += s12 * 470296; | 4555 | s1 += s12 * 470296; |
@@ -4550,37 +4561,37 @@ sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b, | |||
4550 | 4561 | ||
4551 | carry0 = s0 >> 21; | 4562 | carry0 = s0 >> 21; |
4552 | s1 += carry0; | 4563 | s1 += carry0; |
4553 | s0 -= carry0 << 21; | 4564 | s0 -= int64_lshift21(carry0); |
4554 | carry1 = s1 >> 21; | 4565 | carry1 = s1 >> 21; |
4555 | s2 += carry1; | 4566 | s2 += carry1; |
4556 | s1 -= carry1 << 21; | 4567 | s1 -= int64_lshift21(carry1); |
4557 | carry2 = s2 >> 21; | 4568 | carry2 = s2 >> 21; |
4558 | s3 += carry2; | 4569 | s3 += carry2; |
4559 | s2 -= carry2 << 21; | 4570 | s2 -= int64_lshift21(carry2); |
4560 | carry3 = s3 >> 21; | 4571 | carry3 = s3 >> 21; |
4561 | s4 += carry3; | 4572 | s4 += carry3; |
4562 | s3 -= carry3 << 21; | 4573 | s3 -= int64_lshift21(carry3); |
4563 | carry4 = s4 >> 21; | 4574 | carry4 = s4 >> 21; |
4564 | s5 += carry4; | 4575 | s5 += carry4; |
4565 | s4 -= carry4 << 21; | 4576 | s4 -= int64_lshift21(carry4); |
4566 | carry5 = s5 >> 21; | 4577 | carry5 = s5 >> 21; |
4567 | s6 += carry5; | 4578 | s6 += carry5; |
4568 | s5 -= carry5 << 21; | 4579 | s5 -= int64_lshift21(carry5); |
4569 | carry6 = s6 >> 21; | 4580 | carry6 = s6 >> 21; |
4570 | s7 += carry6; | 4581 | s7 += carry6; |
4571 | s6 -= carry6 << 21; | 4582 | s6 -= int64_lshift21(carry6); |
4572 | carry7 = s7 >> 21; | 4583 | carry7 = s7 >> 21; |
4573 | s8 += carry7; | 4584 | s8 += carry7; |
4574 | s7 -= carry7 << 21; | 4585 | s7 -= int64_lshift21(carry7); |
4575 | carry8 = s8 >> 21; | 4586 | carry8 = s8 >> 21; |
4576 | s9 += carry8; | 4587 | s9 += carry8; |
4577 | s8 -= carry8 << 21; | 4588 | s8 -= int64_lshift21(carry8); |
4578 | carry9 = s9 >> 21; | 4589 | carry9 = s9 >> 21; |
4579 | s10 += carry9; | 4590 | s10 += carry9; |
4580 | s9 -= carry9 << 21; | 4591 | s9 -= int64_lshift21(carry9); |
4581 | carry10 = s10 >> 21; | 4592 | carry10 = s10 >> 21; |
4582 | s11 += carry10; | 4593 | s11 += carry10; |
4583 | s10 -= carry10 << 21; | 4594 | s10 -= int64_lshift21(carry10); |
4584 | 4595 | ||
4585 | s[0] = s0 >> 0; | 4596 | s[0] = s0 >> 0; |
4586 | s[1] = s0 >> 8; | 4597 | s[1] = s0 >> 8; |