@@ -45,6 +45,8 @@ contract CECDSASHA2Signer is ICertificateSigner, Initializable {
45
45
(inputs.r, inputs.s) = U384.init2 (icaoMemberSignature_);
46
46
(inputs.x, inputs.y) = U384.init2 (icaoMemberKey_);
47
47
48
+ uint256 p = hex "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF "
49
+ .init ();
48
50
// secp384r1 parameters
49
51
Parameters memory params = Parameters ({
50
52
a: hex "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC "
@@ -55,13 +57,12 @@ contract CECDSASHA2Signer is ICertificateSigner, Initializable {
55
57
.init (),
56
58
gy: hex "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f "
57
59
.init (),
58
- p: hex "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF "
59
- .init (),
60
+ p: p,
60
61
n: hex "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973 "
61
62
.init (),
62
63
lowSmax: hex "7fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b9 "
63
64
.init (),
64
- call: U384.initCall (),
65
+ call: U384.initCall (p ),
65
66
three: U384.init (3 )
66
67
});
67
68
@@ -127,15 +128,15 @@ contract CECDSASHA2Signer is ICertificateSigner, Initializable {
127
128
return false ;
128
129
}
129
130
130
- uint256 LHS = U384.modexp (call, y, 2 , p );
131
- uint256 RHS = U384.modexp (call, x, 3 , p );
131
+ uint256 LHS = U384.modexp (call, y, 2 );
132
+ uint256 RHS = U384.modexp (call, x, 3 );
132
133
133
134
if (! U384.eqInteger (a, 0 )) {
134
- RHS = U384.modadd (call, RHS, U384.modmul (call, x, a, p), p ); // x^3 + a*x
135
+ RHS = U384.modadd (call, RHS, U384.modmul (call, x, a) ); // x^3 + a*x
135
136
}
136
137
137
138
if (! U384.eqInteger (b, 0 )) {
138
- RHS = U384.modadd (call, RHS, b, p ); // x^3 + a*x + b
139
+ RHS = U384.modadd (call, RHS, b); // x^3 + a*x + b
139
140
}
140
141
141
142
return U384.eq (LHS, RHS);
@@ -259,42 +260,42 @@ contract CECDSASHA2Signer is ICertificateSigner, Initializable {
259
260
return (U384.init (0 ), U384.init (1 ), U384.init (0 )); // zero proj
260
261
}
261
262
262
- uint256 u = U384.modmul (call, y0, z0, p );
263
- U384.modshl1Assign (call, u, p );
263
+ uint256 u = U384.modmul (call, y0, z0);
264
+ U384.modshl1Assign (call, u);
264
265
265
- x1 = U384.modmul (call, u, x0, p );
266
- U384.modmulAssign (call, x1, y0, p );
267
- U384.modshl1Assign (call, x1, p );
266
+ x1 = U384.modmul (call, u, x0);
267
+ U384.modmulAssign (call, x1, y0);
268
+ U384.modshl1Assign (call, x1);
268
269
269
- x0 = U384.modexp (call, x0, 2 , p );
270
+ x0 = U384.modexp (call, x0, 2 );
270
271
271
- y1 = U384.modmul (call, x0, three, p );
272
+ y1 = U384.modmul (call, x0, three);
272
273
273
- z0 = U384.modexp (call, z0, 2 , p );
274
- U384.modmulAssign (call, z0, a, p );
275
- U384.modaddAssign (call, y1, z0, p );
274
+ z0 = U384.modexp (call, z0, 2 );
275
+ U384.modmulAssign (call, z0, a);
276
+ U384.modaddAssign (call, y1, z0);
276
277
277
- z1 = U384.modexp (call, y1, 2 , p );
278
- U384.modshl1AssignTo (call, x0, x1, p );
278
+ z1 = U384.modexp (call, y1, 2 );
279
+ U384.modshl1AssignTo (call, x0, x1);
279
280
280
281
uint256 diff = U384.sub (p, x0);
281
- U384.modaddAssign (call, z1, diff, p );
282
+ U384.modaddAssign (call, z1, diff);
282
283
283
284
U384.subAssignTo (diff, p, z1);
284
- U384.modaddAssignTo (call, x0, x1, diff, p );
285
- U384.modmulAssign (call, x0, y1, p );
285
+ U384.modaddAssignTo (call, x0, x1, diff);
286
+ U384.modmulAssign (call, x0, y1);
286
287
287
- y0 = U384.modmul (call, y0, u, p );
288
- U384.modexpAssign (call, y0, 2 , p );
289
- U384.modshl1Assign (call, y0, p );
288
+ y0 = U384.modmul (call, y0, u);
289
+ U384.modexpAssign (call, y0, 2 );
290
+ U384.modshl1Assign (call, y0);
290
291
291
292
U384.subAssignTo (diff, p, y0);
292
- U384.modaddAssignTo (call, y1, x0, diff, p );
293
+ U384.modaddAssignTo (call, y1, x0, diff);
293
294
294
- U384.modmulAssignTo (call, x1, u, z1, p );
295
+ U384.modmulAssignTo (call, x1, u, z1);
295
296
296
- U384.modexpAssignTo (call, z1, u, 2 , p );
297
- U384.modmulAssign (call, z1, u, p );
297
+ U384.modexpAssignTo (call, z1, u, 2 );
298
+ U384.modmulAssign (call, z1, u);
298
299
}
299
300
}
300
301
@@ -321,10 +322,10 @@ contract CECDSASHA2Signer is ICertificateSigner, Initializable {
321
322
return (x0, y0, z0);
322
323
}
323
324
324
- x2 = U384.modmul (call, y0, z1, p );
325
- y2 = U384.modmul (call, y1, z0, p );
326
- z2 = U384.modmul (call, x0, z1, p );
327
- y1 = U384.modmul (call, x1, z0, p );
325
+ x2 = U384.modmul (call, y0, z1);
326
+ y2 = U384.modmul (call, y1, z0);
327
+ z2 = U384.modmul (call, x0, z1);
328
+ y1 = U384.modmul (call, x1, z0);
328
329
329
330
if (U384.eq (z2, y1)) {
330
331
if (U384.eq (x2, y2)) {
@@ -334,7 +335,7 @@ contract CECDSASHA2Signer is ICertificateSigner, Initializable {
334
335
}
335
336
}
336
337
337
- a = U384.modmul (call, z0, z1, p );
338
+ a = U384.modmul (call, z0, z1);
338
339
339
340
return _addProj2 (call, a, z2, p, y1, y2, x2);
340
341
}
@@ -354,35 +355,35 @@ contract CECDSASHA2Signer is ICertificateSigner, Initializable {
354
355
) internal view returns (uint256 x2 , uint256 y2 , uint256 z2 ) {
355
356
unchecked {
356
357
uint256 diff = U384.sub (p, t1);
357
- y2 = U384.modadd (call, t0, diff, p );
358
+ y2 = U384.modadd (call, t0, diff);
358
359
359
360
U384.subAssignTo (diff, p, u1);
360
- x2 = U384.modadd (call, u0, diff, p );
361
- uint256 u2 = U384.modexp (call, x2, 2 , p );
361
+ x2 = U384.modadd (call, u0, diff);
362
+ uint256 u2 = U384.modexp (call, x2, 2 );
362
363
363
- z2 = U384.modexp (call, y2, 2 , p );
364
+ z2 = U384.modexp (call, y2, 2 );
364
365
365
- U384.modmulAssign (call, z2, v, p );
366
- u1 = U384.modadd (call, u1, u0, p );
367
- U384.modmulAssign (call, u1, u2, p );
366
+ U384.modmulAssign (call, z2, v);
367
+ u1 = U384.modadd (call, u1, u0);
368
+ U384.modmulAssign (call, u1, u2);
368
369
U384.subAssignTo (diff, p, u1);
369
- U384.modaddAssign (call, z2, diff, p );
370
+ U384.modaddAssign (call, z2, diff);
370
371
371
- uint256 u3 = U384.modmul (call, u2, x2, p );
372
+ uint256 u3 = U384.modmul (call, u2, x2);
372
373
373
- U384.modmulAssign (call, x2, z2, p );
374
+ U384.modmulAssign (call, x2, z2);
374
375
375
- u0 = U384.modmul (call, u0, u2, p );
376
+ u0 = U384.modmul (call, u0, u2);
376
377
377
378
U384.subAssignTo (diff, p, z2);
378
- U384.modaddAssign (call, u0, diff, p );
379
- U384.modmulAssign (call, y2, u0, p );
380
- t0 = U384.modmul (call, t0, u3, p );
379
+ U384.modaddAssign (call, u0, diff);
380
+ U384.modmulAssign (call, y2, u0);
381
+ t0 = U384.modmul (call, t0, u3);
381
382
382
383
U384.subAssignTo (diff, p, t0);
383
- U384.modaddAssign (call, y2, diff, p );
384
+ U384.modaddAssign (call, y2, diff);
384
385
385
- U384.modmulAssignTo (call, z2, u3, v, p );
386
+ U384.modmulAssignTo (call, z2, u3, v);
386
387
}
387
388
}
388
389
}
0 commit comments