@@ -113,339 +113,13 @@ impl Field for Scalar {
113113 /// https://eprint.iacr.org/2012/685.pdf (page 12, algorithm 5)
114114 #[ allow( clippy:: many_single_char_names) ]
115115 fn sqrt ( & self ) -> CtOption < Self > {
116- // TODO(tarcieri): replace with `self.pow((t - 1) >> 1)`
117- let w = {
118- let t0 = self ;
119- let t1 = t0. square ( ) ;
120- let t2 = t1 * t0;
121- let t3 = t1. square ( ) ;
122- let t4 = t3. square ( ) ;
123- let t5 = t4 * t2;
124- let t6 = t5 * t3;
125- let t7 = t6. square ( ) ;
126- let t8 = t7 * t6;
127- let t9 = t8. square ( ) ;
128- let t10 = t9 * t6;
129- let t11 = t10 * t5;
130- let t12 = t11 * t6;
131- let t13 = t12. square ( ) ;
132- let t14 = t13 * t11;
133- let t15 = t14. square ( ) ;
134- let t16 = t15 * t12;
135- let t17 = t16. square ( ) ;
136- let t18 = t17 * t16;
137- let t19 = t18. square ( ) ;
138- let t21 = t19. square ( ) ;
139- let t22 = t21 * t16;
140- let t23 = t22 * t14;
141- let t24 = t23 * t16;
142- let t25 = t24. square ( ) ;
143- let t26 = t25 * t23;
144- let t27 = t26 * t24;
145- let t28 = t27. square ( ) ;
146- let t29 = t28 * t27;
147- let t30 = t29. square ( ) ;
148- let t31 = t30 * t28;
149- let t32 = t31. square ( ) ;
150- let t33 = t32. square ( ) ;
151- let t34 = t33 * t29;
152- let t35 = t34 * t26;
153- let t36 = t35 * t27;
154- let t37 = t36. square ( ) ;
155- let t38 = t37. square ( ) ;
156- let t39 = t38 * t36;
157- let t40 = t39. square ( ) ;
158- let t41 = t40. square ( ) ;
159- let t43 = t41 * t35;
160- let t44 = t43 * t36;
161- let t45 = t44. square ( ) ;
162- let t46 = t45 * t43;
163- let t47 = t46 * t44;
164- let t48 = t47. square ( ) ;
165- let t49 = t48 * t46;
166- let t50 = t49. square ( ) ;
167- let t51 = t50 * t49;
168- let t52 = t51. square ( ) ;
169- let t53 = t52 * t50;
170- let t54 = t53. square ( ) ;
171- let t55 = t54. square ( ) ;
172- let t56 = t55 * t51;
173- let t57 = t56 * t47;
174- let t58 = t57. square ( ) ;
175- let t59 = t58. square ( ) ;
176- let t60 = t59 * t57;
177- let t61 = t60 * t49;
178- let t62 = t61. square ( ) ;
179- let t63 = t62. square ( ) ;
180- let t64 = t63. square ( ) ;
181- let t65 = t64 * t61;
182- let t66 = t65 * t57;
183- let t67 = t66. square ( ) ;
184- let t68 = t67. square ( ) ;
185- let t69 = t68 * t67;
186- let t70 = t69. square ( ) ;
187- let t71 = t70 * t67;
188- let t72 = t71 * t66;
189- let t73 = t72. square ( ) ;
190- let t74 = t73. square ( ) ;
191- let t75 = t74 * t67;
192- let t76 = t75 * t61;
193- let t77 = t76 * t66;
194- let t78 = t77. square ( ) ;
195- let t79 = t78. square ( ) ;
196- let t80 = t79 * t77;
197- let t81 = t80 * t76;
198- let t82 = t81. square ( ) ;
199- let t83 = t82 * t77;
200- let t84 = t83. square ( ) ;
201- let t85 = t84. square ( ) ;
202- let t87 = t85. square ( ) ;
203- let t88 = t87. square ( ) ;
204- let t89 = t88 * t84;
205- let t90 = t89 * t81;
206- let t91 = t90. square ( ) ;
207- let t92 = t91 * t83;
208- let t93 = t92. square ( ) ;
209- let t94 = t93 * t92;
210- let t95 = t94. square ( ) ;
211- let t96 = t95 * t92;
212- let t97 = t96. square ( ) ;
213- let t99 = t97. square ( ) ;
214- let t100 = t99. square ( ) ;
215- let t101 = t100. square ( ) ;
216- let t103 = t101 * t90;
217- let t104 = t103. square ( ) ;
218- let t105 = t104. square ( ) ;
219- let t106 = t105. square ( ) ;
220- let t107 = t106 * t103;
221- let t108 = t107 * t92;
222- let t109 = t108. square ( ) ;
223- let t110 = t109 * t103;
224- let t111 = t110. square ( ) ;
225- let t112 = t111. square ( ) ;
226- let t113 = t112. square ( ) ;
227- let t114 = t113 * t110;
228- let t115 = t114 * t108;
229- let t116 = t115 * t110;
230- let t117 = t116. square ( ) ;
231- let t118 = t117. square ( ) ;
232- let t119 = t118 * t116;
233- let t120 = t119 * t115;
234- let t121 = t120. square ( ) ;
235- let t122 = t121 * t116;
236- let t123 = t122 * t120;
237- let t124 = t123. square ( ) ;
238- let t125 = t124 * t123;
239- let t126 = t125. square ( ) ;
240- let t128 = t126. square ( ) ;
241- let t130 = t128 * t122;
242- let t131 = t130 * t123;
243- let t132 = t131. square ( ) ;
244- let t133 = t132. square ( ) ;
245- let t134 = t133. square ( ) ;
246- let t135 = t134 * t131;
247- let t136 = t135. square ( ) ;
248- let t137 = t136. square ( ) ;
249- let t138 = t137. square ( ) ;
250- let t139 = t138 * t132;
251- let t140 = t139 * t130;
252- let t141 = t140 * t131;
253- let t142 = t141. square ( ) ;
254- let t143 = t142. square ( ) ;
255- let t144 = t143 * t141;
256- let t145 = t144 * t140;
257- let t146 = t145. square ( ) ;
258- let t147 = t146 * t145;
259- let t148 = t147. square ( ) ;
260- let t149 = t148 * t145;
261- let t150 = t149 * t141;
262- let t151 = t150. square ( ) ;
263- let t152 = t151 * t145;
264- let t153 = t152 * t150;
265- let t154 = t153. square ( ) ;
266- let t155 = t154 * t153;
267- let t156 = t155. square ( ) ;
268- let t157 = t156 * t153;
269- let t158 = t157 * t152;
270- let t159 = t158 * t153;
271- let t160 = t159. square ( ) ;
272- let t161 = t160 * t159;
273- let t162 = t161 * t158;
274- let t163 = t162 * t159;
275- let t164 = t163. square ( ) ;
276- let t165 = t164 * t163;
277- let t166 = t165 * t162;
278- let t167 = t166 * t163;
279- let t168 = t167. square ( ) ;
280- let t169 = t168. square ( ) ;
281- let t170 = t169 * t167;
282- let t171 = t170. square ( ) ;
283- let t173 = t171 * t166;
284- let t174 = t173 * t167;
285- let t175 = t174. square ( ) ;
286- let t176 = t175 * t174;
287- let t177 = t176. square ( ) ;
288- let t178 = t177 * t174;
289- let t179 = t178. square ( ) ;
290- let t180 = t179. square ( ) ;
291- let t182 = t180 * t173;
292- let t183 = t182. square ( ) ;
293- let t184 = t183 * t182;
294- let t185 = t184 * t174;
295- let t186 = t185 * t182;
296- let t187 = t186 * t185;
297- let t188 = t187 * t186;
298- let t189 = t188. square ( ) ;
299- let t190 = t189 * t188;
300- let t191 = t190. square ( ) ;
301- let t192 = t191 * t188;
302- let t193 = t192 * t187;
303- let t194 = t193. square ( ) ;
304- let t195 = t194 * t188;
305- let t196 = t195. square ( ) ;
306- let t197 = t196. square ( ) ;
307- let t198 = t197 * t193;
308- let t199 = t198. square ( ) ;
309- let t200 = t199. square ( ) ;
310- let t201 = t200 * t198;
311- let t202 = t201 * t195;
312- let t203 = t202. square ( ) ;
313- let t204 = t203. square ( ) ;
314- let t205 = t204 * t202;
315- let t206 = t205 * t198;
316- let t207 = t206 * t202;
317- let t208 = t207 * t206;
318- let t209 = t208 * t207;
319- let t210 = t209. square ( ) ;
320- let t211 = t210 * t208;
321- let t212 = t211. square ( ) ;
322- let t213 = t212 * t209;
323- let t214 = t213. square ( ) ;
324- let t215 = t214. square ( ) ;
325- let t216 = t215. square ( ) ;
326- let t217 = t216. square ( ) ;
327- let t218 = t217. square ( ) ;
328- let t219 = t218. square ( ) ;
329- let t220 = t219. square ( ) ;
330- let t221 = t220. square ( ) ;
331- let t222 = t221. square ( ) ;
332- let t223 = t222. square ( ) ;
333- let t224 = t223. square ( ) ;
334- let t225 = t224. square ( ) ;
335- let t226 = t225. square ( ) ;
336- let t227 = t226. square ( ) ;
337- let t228 = t227. square ( ) ;
338- let t229 = t228. square ( ) ;
339- let t230 = t229. square ( ) ;
340- let t231 = t230. square ( ) ;
341- let t232 = t231. square ( ) ;
342- let t233 = t232. square ( ) ;
343- let t234 = t233. square ( ) ;
344- let t235 = t234. square ( ) ;
345- let t236 = t235. square ( ) ;
346- let t237 = t236. square ( ) ;
347- let t238 = t237. square ( ) ;
348- let t239 = t238. square ( ) ;
349- let t240 = t239. square ( ) ;
350- let t241 = t240. square ( ) ;
351- let t242 = t241. square ( ) ;
352- let t243 = t242. square ( ) ;
353- let t244 = t243. square ( ) ;
354- let t245 = t244. square ( ) ;
355- let t246 = t245. square ( ) ;
356- let t247 = t246. square ( ) ;
357- let t248 = t247. square ( ) ;
358- let t249 = t248. square ( ) ;
359- let t250 = t249. square ( ) ;
360- let t251 = t250. square ( ) ;
361- let t252 = t251. square ( ) ;
362- let t253 = t252. square ( ) ;
363- let t254 = t253. square ( ) ;
364- let t255 = t254. square ( ) ;
365- let t256 = t255. square ( ) ;
366- let t257 = t256. square ( ) ;
367- let t258 = t257. square ( ) ;
368- let t259 = t258. square ( ) ;
369- let t260 = t259. square ( ) ;
370- let t261 = t260. square ( ) ;
371- let t262 = t261. square ( ) ;
372- let t263 = t262. square ( ) ;
373- let t264 = t263. square ( ) ;
374- let t265 = t264. square ( ) ;
375- let t266 = t265. square ( ) ;
376- let t267 = t266. square ( ) ;
377- let t268 = t267. square ( ) ;
378- let t269 = t268. square ( ) ;
379- let t270 = t269. square ( ) ;
380- let t271 = t270. square ( ) ;
381- let t272 = t271. square ( ) ;
382- let t273 = t272. square ( ) ;
383- let t274 = t273. square ( ) ;
384- let t275 = t274. square ( ) ;
385- let t276 = t275. square ( ) ;
386- let t277 = t276. square ( ) ;
387- let t278 = t277. square ( ) ;
388- let t279 = t278. square ( ) ;
389- let t280 = t279. square ( ) ;
390- let t281 = t280. square ( ) ;
391- let t282 = t281. square ( ) ;
392- let t283 = t282. square ( ) ;
393- let t284 = t283. square ( ) ;
394- let t285 = t284. square ( ) ;
395- let t286 = t285. square ( ) ;
396- let t287 = t286. square ( ) ;
397- let t288 = t287. square ( ) ;
398- let t289 = t288. square ( ) ;
399- let t290 = t289. square ( ) ;
400- let t291 = t290. square ( ) ;
401- let t292 = t291. square ( ) ;
402- let t293 = t292. square ( ) ;
403- let t294 = t293. square ( ) ;
404- let t295 = t294. square ( ) ;
405- let t296 = t295. square ( ) ;
406- let t297 = t296. square ( ) ;
407- let t298 = t297. square ( ) ;
408- let t299 = t298. square ( ) ;
409- let t300 = t299. square ( ) ;
410- let t301 = t300. square ( ) ;
411- let t302 = t301. square ( ) ;
412- let t303 = t302. square ( ) ;
413- let t304 = t303. square ( ) ;
414- let t305 = t304. square ( ) ;
415- let t306 = t305. square ( ) ;
416- let t307 = t306. square ( ) ;
417- let t308 = t307. square ( ) ;
418- let t309 = t308. square ( ) ;
419- let t310 = t309. square ( ) ;
420- let t311 = t310. square ( ) ;
421- let t312 = t311. square ( ) ;
422- let t313 = t312. square ( ) ;
423- let t314 = t313. square ( ) ;
424- let t315 = t314. square ( ) ;
425- let t316 = t315. square ( ) ;
426- let t317 = t316. square ( ) ;
427- let t318 = t317. square ( ) ;
428- let t319 = t318. square ( ) ;
429- let t320 = t319. square ( ) ;
430- let t321 = t320. square ( ) ;
431- let t322 = t321. square ( ) ;
432- let t323 = t322. square ( ) ;
433- let t324 = t323. square ( ) ;
434- let t325 = t324. square ( ) ;
435- let t326 = t325. square ( ) ;
436- let t327 = t326. square ( ) ;
437- let t328 = t327. square ( ) ;
438- let t329 = t328. square ( ) ;
439- let t330 = t329. square ( ) ;
440- let t331 = t330. square ( ) ;
441- let t332 = t331. square ( ) ;
442- let t333 = t332. square ( ) ;
443- let t334 = t333. square ( ) ;
444- let t335 = t334. square ( ) ;
445- let t336 = t335. square ( ) ;
446- let t337 = t336. square ( ) ;
447- t337 * t211
448- } ;
116+ // Note: `pow_vartime` is constant-time with respect to `self`
117+ let w = self . pow_vartime ( & [
118+ 0x777fa4bd19a06c82 ,
119+ 0xfd755db9cd5e9140 ,
120+ 0xffffffffffffffff ,
121+ 0x1ffffffffffffff ,
122+ ] ) ;
449123
450124 let mut v = Self :: S ;
451125 let mut x = * self * w;
0 commit comments