Skip to content

Commit

Permalink
chore: tweaks
Browse files Browse the repository at this point in the history
  • Loading branch information
jxom committed Dec 18, 2024
1 parent a9a1be4 commit 12f8d49
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 1 deletion.
2 changes: 1 addition & 1 deletion contracts/src/utils/ECDSA.sol
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ library ECDSA {

if (signer == address(0)) return false;

bytes memory publicKeyBytes = abi.encodePacked(bytes1(0x04), publicKey.x, publicKey.y);
bytes memory publicKeyBytes = abi.encodePacked(publicKey.x, publicKey.y);

bytes32 publicKeyHash = keccak256(publicKeyBytes);

Expand Down
48 changes: 48 additions & 0 deletions contracts/test/account/ExperimentalDelegation.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,31 @@ contract ExperimentalDelegationTest is Test {
assertEq(expiry, 0);
}

function test_authorize_withSecp256k1Key() public {
vm.pauseGasMetering();

VmSafe.Wallet memory wallet = vm.createWallet("wallet");

ExperimentalDelegation.Key[] memory keys = new ExperimentalDelegation.Key[](1);
keys[0] = ExperimentalDelegation.Key(
0, ExperimentalDelegation.KeyType.Secp256k1, ECDSA.PublicKey(wallet.publicKeyX, wallet.publicKeyY)
);

vm.expectRevert();
delegation.keys(0);

vm.prank(address(delegation));
vm.resumeGasMetering();
delegation.authorize(keys);
vm.pauseGasMetering();

(uint256 expiry, ExperimentalDelegation.KeyType keyType, ECDSA.PublicKey memory authorizedPublicKey) =
delegation.keys(0);
assertEq(authorizedPublicKey.x, wallet.publicKeyX);
assertEq(authorizedPublicKey.y, wallet.publicKeyY);
assertEq(expiry, 0);
}

function test_authorize_withAuthorizedKey() public {
vm.pauseGasMetering();

Expand Down Expand Up @@ -322,4 +347,27 @@ contract ExperimentalDelegationTest is Test {
bytes4(keccak256("isValidSignature(bytes32,bytes)"))
);
}

function test_isValidSignature_forAuthorizingSecp256k1Key() public {
bytes32 hash = keccak256(abi.encodePacked(delegation.nonce(), keccak256("0xdeadbeef")));
VmSafe.Wallet memory wallet = vm.createWallet("wallet");

ExperimentalDelegation.Key[] memory keys = new ExperimentalDelegation.Key[](1);
keys[0] = ExperimentalDelegation.Key(
0, ExperimentalDelegation.KeyType.Secp256k1, ECDSA.PublicKey(wallet.publicKeyX, wallet.publicKeyY)
);

vm.prank(address(delegation));
delegation.authorize(keys);

(uint8 v, bytes32 r, bytes32 s) = vm.sign(wallet.privateKey, hash);
ExperimentalDelegation.WrappedSignature memory wrappedSignature = ExperimentalDelegation.WrappedSignature(
0, ECDSA.Signature(uint256(r), uint256(s), v == 27 ? 0 : 1), false, "0x"
);

assertEq(
delegation.isValidSignature(hash, abi.encode(wrappedSignature)),
bytes4(keccak256("isValidSignature(bytes32,bytes)"))
);
}
}

0 comments on commit 12f8d49

Please sign in to comment.