Skip to content

Commit b72e3da

Browse files
authored
Bump forge-std to v1.9.3 (#5230)
1 parent e3cfe1c commit b72e3da

File tree

2 files changed

+6
-101
lines changed

2 files changed

+6
-101
lines changed

test/utils/cryptography/P256.t.sol

Lines changed: 5 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,23 @@ contract P256Test is Test {
1212
function testVerify(bytes32 digest, uint256 seed) public {
1313
uint256 privateKey = _asPrivateKey(seed);
1414

15-
(bytes32 x, bytes32 y) = P256PublicKey.getPublicKey(privateKey);
15+
(uint256 x, uint256 y) = vm.publicKeyP256(privateKey);
1616
(bytes32 r, bytes32 s) = vm.signP256(privateKey, digest);
1717
s = _ensureLowerS(s);
18-
assertTrue(P256.verify(digest, r, s, x, y));
19-
assertTrue(P256.verifySolidity(digest, r, s, x, y));
18+
assertTrue(P256.verify(digest, r, s, bytes32(x), bytes32(y)));
19+
assertTrue(P256.verifySolidity(digest, r, s, bytes32(x), bytes32(y)));
2020
}
2121

2222
/// forge-config: default.fuzz.runs = 512
2323
function testRecover(bytes32 digest, uint256 seed) public {
2424
uint256 privateKey = _asPrivateKey(seed);
2525

26-
(bytes32 x, bytes32 y) = P256PublicKey.getPublicKey(privateKey);
26+
(uint256 x, uint256 y) = vm.publicKeyP256(privateKey);
2727
(bytes32 r, bytes32 s) = vm.signP256(privateKey, digest);
2828
s = _ensureLowerS(s);
2929
(bytes32 qx0, bytes32 qy0) = P256.recovery(digest, 0, r, s);
3030
(bytes32 qx1, bytes32 qy1) = P256.recovery(digest, 1, r, s);
31-
assertTrue((qx0 == x && qy0 == y) || (qx1 == x && qy1 == y));
31+
assertTrue((qx0 == bytes32(x) && qy0 == bytes32(y)) || (qx1 == bytes32(x) && qy1 == bytes32(y)));
3232
}
3333

3434
function _asPrivateKey(uint256 seed) private pure returns (uint256) {
@@ -42,98 +42,3 @@ contract P256Test is Test {
4242
}
4343
}
4444
}
45-
46-
/**
47-
* @dev Library to derive P256 public key from private key
48-
* Should be removed if Foundry adds this functionality
49-
* See https://github.com/foundry-rs/foundry/issues/7908
50-
*/
51-
library P256PublicKey {
52-
function getPublicKey(uint256 privateKey) internal view returns (bytes32, bytes32) {
53-
(uint256 x, uint256 y, uint256 z) = _jMult(P256.GX, P256.GY, 1, privateKey);
54-
return _affineFromJacobian(x, y, z);
55-
}
56-
57-
function _jMult(
58-
uint256 x,
59-
uint256 y,
60-
uint256 z,
61-
uint256 k
62-
) private pure returns (uint256 rx, uint256 ry, uint256 rz) {
63-
unchecked {
64-
for (uint256 i = 0; i < 256; ++i) {
65-
if (rz > 0) {
66-
(rx, ry, rz) = _jDouble(rx, ry, rz);
67-
}
68-
if (k >> 255 > 0) {
69-
if (rz == 0) {
70-
(rx, ry, rz) = (x, y, z);
71-
} else {
72-
(rx, ry, rz) = _jAdd(rx, ry, rz, x, y, z);
73-
}
74-
}
75-
k <<= 1;
76-
}
77-
}
78-
}
79-
80-
/// From P256.sol
81-
82-
function _affineFromJacobian(uint256 jx, uint256 jy, uint256 jz) private view returns (bytes32 ax, bytes32 ay) {
83-
if (jz == 0) return (0, 0);
84-
uint256 zinv = Math.invModPrime(jz, P256.P);
85-
uint256 zzinv = mulmod(zinv, zinv, P256.P);
86-
uint256 zzzinv = mulmod(zzinv, zinv, P256.P);
87-
ax = bytes32(mulmod(jx, zzinv, P256.P));
88-
ay = bytes32(mulmod(jy, zzzinv, P256.P));
89-
}
90-
91-
function _jDouble(uint256 x, uint256 y, uint256 z) private pure returns (uint256 rx, uint256 ry, uint256 rz) {
92-
uint256 p = P256.P;
93-
uint256 a = P256.A;
94-
assembly ("memory-safe") {
95-
let yy := mulmod(y, y, p)
96-
let zz := mulmod(z, z, p)
97-
let s := mulmod(4, mulmod(x, yy, p), p) // s = 4*x*y²
98-
let m := addmod(mulmod(3, mulmod(x, x, p), p), mulmod(a, mulmod(zz, zz, p), p), p) // m = 3*x²+a*z⁴
99-
let t := addmod(mulmod(m, m, p), sub(p, mulmod(2, s, p)), p) // t = m²-2*s
100-
101-
// x' = t
102-
rx := t
103-
// y' = m*(s-t)-8*y⁴
104-
ry := addmod(mulmod(m, addmod(s, sub(p, t), p), p), sub(p, mulmod(8, mulmod(yy, yy, p), p)), p)
105-
// z' = 2*y*z
106-
rz := mulmod(2, mulmod(y, z, p), p)
107-
}
108-
}
109-
110-
function _jAdd(
111-
uint256 x1,
112-
uint256 y1,
113-
uint256 z1,
114-
uint256 x2,
115-
uint256 y2,
116-
uint256 z2
117-
) private pure returns (uint256 rx, uint256 ry, uint256 rz) {
118-
uint256 p = P256.P;
119-
assembly ("memory-safe") {
120-
let zz1 := mulmod(z1, z1, p) // zz1 = z1²
121-
let zz2 := mulmod(z2, z2, p) // zz2 = z2²
122-
let u1 := mulmod(x1, zz2, p) // u1 = x1*z2²
123-
let u2 := mulmod(x2, zz1, p) // u2 = x2*z1²
124-
let s1 := mulmod(y1, mulmod(zz2, z2, p), p) // s1 = y1*z2³
125-
let s2 := mulmod(y2, mulmod(zz1, z1, p), p) // s2 = y2*z1³
126-
let h := addmod(u2, sub(p, u1), p) // h = u2-u1
127-
let hh := mulmod(h, h, p) // h²
128-
let hhh := mulmod(h, hh, p) // h³
129-
let r := addmod(s2, sub(p, s1), p) // r = s2-s1
130-
131-
// x' = r²-h³-2*u1*h²
132-
rx := addmod(addmod(mulmod(r, r, p), sub(p, hhh), p), sub(p, mulmod(2, mulmod(u1, hh, p), p)), p)
133-
// y' = r*(u1*h²-x')-s1*h³
134-
ry := addmod(mulmod(r, addmod(mulmod(u1, hh, p), sub(p, rx), p), p), sub(p, mulmod(s1, hhh, p)), p)
135-
// z' = h*z1*z2
136-
rz := mulmod(h, mulmod(z1, z2, p), p)
137-
}
138-
}
139-
}

0 commit comments

Comments
 (0)