Skip to content

Commit

Permalink
port to P256 precompile support
Browse files Browse the repository at this point in the history
  • Loading branch information
code-z2 committed Jan 30, 2024
1 parent 9f2af8d commit c3b1200
Show file tree
Hide file tree
Showing 29 changed files with 1,029 additions and 476 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "lib/p256-verifier"]
path = lib/p256-verifier
url = https://github.com/daimo-eth/p256-verifier
88 changes: 88 additions & 0 deletions broadcast/AccountsFactory.s.sol/1337/run-1704421404.json

Large diffs are not rendered by default.

88 changes: 88 additions & 0 deletions broadcast/AccountsFactory.s.sol/1337/run-1704460317.json

Large diffs are not rendered by default.

49 changes: 49 additions & 0 deletions broadcast/AccountsFactory.s.sol/1337/run-1704468454.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{
"transactions": [
{
"hash": "0x33aa7edc97abcc44e5f9d70614e7429bcc19ce5b59c750fa52c30a8c49450725",
"transactionType": "CREATE",
"contractName": "Encoder",
"contractAddress": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0",
"function": null,
"arguments": [
"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"
],
"transaction": {
"type": "0x00",
"from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
"gas": "0x3e300",
"value": "0x0",
"data": "0x60a03461006a57601f61031238819003918201601f19168301916001600160401b0383118484101761006f5780849260209460405283398101031261006a57516001600160a01b038116810361006a5760805260405161028c908161008682396080518161020b0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b6000803560e01c63281ac9521461002857600080fd5b346100e0576101603660031901126100e0576100426100e7565b9067ffffffffffffffff906044358281116100e357610065903690600401610102565b9290916064358281116100e357610080903690600401610102565b929091610124359182116100e0576100dc6100cc88888888886100a63660048b01610102565b9490936101443596610104359460e4359460c4359460a435946084359460243590610185565b6040519081529081906020820190565b0390f35b80fd5b5080fd5b600435906001600160a01b03821682036100fd57565b600080fd5b9181601f840112156100fd5782359167ffffffffffffffff83116100fd57602083818601950101116100fd57565b610160810190811067ffffffffffffffff82111761014d57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff82111761014d57604052565b9a92809c929a989694999795919a60409d8e519182372098818d519182372091818c5191823720968a519860208a019a600160a01b60019003168b528b8a01526060890152608088015260a087015260c086015260e0850152610100840152610120830152610140908183015281526101fd81610130565b5190209051602081019182527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316604082015260608082019390935291825290610250608082610163565b5190209056fea26469706673582212201a156ac0972e20d2a52612eef1901e2a07edb980d37134ac7b55cbdec1a7f09764736f6c634300081400330000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789",
"nonce": "0x2"
},
"additionalContracts": [],
"isFixedGasLimit": false
}
],
"receipts": [
{
"transactionHash": "0x33aa7edc97abcc44e5f9d70614e7429bcc19ce5b59c750fa52c30a8c49450725",
"transactionIndex": "0x0",
"blockHash": "0x0f96d126d195fe8321d3ebf5d78079063b54fa3e275c7e60419ed4a36dfd822d",
"blockNumber": "0x7",
"from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
"to": null,
"cumulativeGasUsed": "0x2fd63",
"gasUsed": "0x2fd63",
"contractAddress": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0",
"logs": [],
"status": "0x1",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"type": "0x0",
"effectiveGasPrice": "0x173c3c1665"
}
],
"libraries": [],
"pending": [],
"returns": {},
"timestamp": 1704468454,
"chain": 1337,
"multi": false,
"commit": "9f2af8d"
}
88 changes: 88 additions & 0 deletions broadcast/AccountsFactory.s.sol/1337/run-1705144497.json

Large diffs are not rendered by default.

88 changes: 88 additions & 0 deletions broadcast/AccountsFactory.s.sol/1337/run-1705147789.json

Large diffs are not rendered by default.

88 changes: 88 additions & 0 deletions broadcast/AccountsFactory.s.sol/1337/run-1705217280.json

Large diffs are not rendered by default.

42 changes: 21 additions & 21 deletions broadcast/AccountsFactory.s.sol/1337/run-latest.json

Large diffs are not rendered by default.

47 changes: 47 additions & 0 deletions broadcast/AccountsFactory.s.sol/167007/run-1705313720.json

Large diffs are not rendered by default.

89 changes: 89 additions & 0 deletions broadcast/AccountsFactory.s.sol/167007/run-1705313765.json

Large diffs are not rendered by default.

89 changes: 89 additions & 0 deletions broadcast/AccountsFactory.s.sol/167007/run-latest.json

Large diffs are not rendered by default.

47 changes: 47 additions & 0 deletions broadcast/AccountsFactory.s.sol/84532/run-1705332654.json

Large diffs are not rendered by default.

89 changes: 89 additions & 0 deletions broadcast/AccountsFactory.s.sol/84532/run-1705332661.json

Large diffs are not rendered by default.

89 changes: 89 additions & 0 deletions broadcast/AccountsFactory.s.sol/84532/run-latest.json

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ libs = ['node_modules', 'lib']
gas_reports = ["*"]
optimizer = true
optimizer_runs = 200
solc_version = "0.8.20"
solc_version = "0.8.21"
via_ir = true

remappings = [
"@~/=src/",
"@aa/=lib/account-abstraction/",
"@safe-protocol/contracts/=lib/safe-core-protocol/contracts/",
"@chainlink/contracts/=node_modules/@chainlink/contracts/",
"@chainlink/contracts-ccip/=node_modules/@chainlink/contracts-ccip/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/"
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"@p256/verifier/=lib/p256-verifier/src/"
]
1 change: 1 addition & 0 deletions lib/openzeppelin-contracts-upgradeable
Submodule openzeppelin-contracts-upgradeable added at fbdb82
1 change: 1 addition & 0 deletions lib/p256-verifier
Submodule p256-verifier added at 29475a
28 changes: 28 additions & 0 deletions script/Debug.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.13;

import "forge-std/Script.sol";
import "account-abstraction/core/EntryPoint.sol";

contract DebugScript is Script {
function run() external {
UserOperation memory userOp = UserOperation({
sender: 0xdf9950701Ba33FC8e6C6be0414F6c61dD35EbF0F,
nonce: 0x0,
initCode: "0x690832791538ff4dd15407817b0dac54456631bce2bb0bd211443c760977081fa9e927b08cab268f6e6783621f2a40102d8cc586e6dee3bcf5dee907a9f28e50eab51b699ff6becf2783fa5f6cf0d83186e6c8a29f84e7a66e5794995bfe01a6166731db5de6caf5a9cf232364cb816ac6626d46abf8d7590000000000000000000000000000000000000000000000000000000000000000",
callData: hex"b61d27f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000",
callGasLimit: 0x989680,
verificationGasLimit: 0x989680,
preVerificationGas: 0x5208,
maxFeePerGas: 0x171f5b1180,
maxPriorityFeePerGas: 0x171f5b1180,
signature: "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c",
paymasterAndData: new bytes(0)
});
EntryPoint(payable(0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789)).simulateHandleOp(
userOp,
address(0),
""
);
}
}
32 changes: 16 additions & 16 deletions slither.config.json
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
{
"filter_paths": "(lib/|test/)",
"exclude_low": false,
"foundry_ignore_compile": false,
"exclude_informational": false,
"solc_disable_warnings": true,
"solc_remaps": [
"ds-test/=lib/forge-std/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/",
"mocks/=test/mocks/",
"@~/=src/",
"@aa/=lib/account-abstraction/",
"@chainlink/contracts/=node_modules/@chainlink/contracts/",
"@chainlink/contracts-ccip/=node_modules/@chainlink/contracts-ccip/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"@safe-protocol/contracts/=lib/safe-core-protocol/contracts/"
]
"filter_paths": "(lib/|test/)",
"exclude_low": false,
"foundry_ignore_compile": false,
"exclude_informational": false,
"solc_disable_warnings": true,
"solc_remaps": [
"ds-test/=lib/forge-std/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/",
"mocks/=test/mocks/",
"@~/=src/",
"@aa/=lib/account-abstraction/",
"@chainlink/contracts/=node_modules/@chainlink/contracts/",
"@chainlink/contracts-ccip/=node_modules/@chainlink/contracts-ccip/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"@safe-protocol/contracts/=lib/safe-core-protocol/contracts/"
]
}
2 changes: 1 addition & 1 deletion src/AccountsFactory.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.20;
pragma solidity ^0.8.21;

import "@openzeppelin/contracts/utils/Create2.sol";
import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
Expand Down
2 changes: 1 addition & 1 deletion src/SimpleAccount.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.20;
pragma solidity ^0.8.21;

/* solhint-disable avoid-low-level-calls */
/* solhint-disable no-inline-assembly */
Expand Down
13 changes: 7 additions & 6 deletions src/SimplePasskeyAccount.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.20;
pragma solidity ^0.8.21;

/* solhint-disable avoid-low-level-calls */
/* solhint-disable no-inline-assembly */
Expand All @@ -10,8 +10,8 @@ import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";

import "@aa/contracts/core/BaseAccount.sol";
import "@~/utils/TokenCallbackHandler.sol";
import "@~/library/Secp256r1.sol";
import "@~/library/Base64Url.sol";
import "@p256/verifier/P256.sol";
import "@p256/verifier/utils/Base64URL.sol";

/**
* minimal account.
Expand Down Expand Up @@ -116,7 +116,7 @@ contract SimplePasskeyAccount is BaseAccount, TokenCallbackHandler, UUPSUpgradea
string memory clientDataJSONPost
) = abi.decode(userOp.signature, (uint256, uint256, bytes, string, string));

string memory execHashBase64 = Base64Url.encode(bytes.concat(userOpHash));
string memory execHashBase64 = Base64URL.encode(bytes.concat(userOpHash));
string memory clientDataJSON = string.concat(
clientDataJSONPre,
execHashBase64,
Expand All @@ -125,7 +125,8 @@ contract SimplePasskeyAccount is BaseAccount, TokenCallbackHandler, UUPSUpgradea
bytes32 clientHash = sha256(bytes(clientDataJSON));
bytes32 sigHash = sha256(bytes.concat(authenticatorData, clientHash));

if (Secp256r1.Verify(publicKey, r, s, uint256(sigHash))) return 0;
bool valid = P256.verifySignatureAllowMalleability(sigHash, r, s, publicKey[0], publicKey[1]);
if (valid) return 0;
return SIG_VALIDATION_FAILED;
}

Expand Down Expand Up @@ -155,7 +156,7 @@ contract SimplePasskeyAccount is BaseAccount, TokenCallbackHandler, UUPSUpgradea
credentialBytes[i] = credentialBytes32[i + count];
}

string memory credentialIdBase64 = Base64Url.encode(credentialBytes);
string memory credentialIdBase64 = Base64URL.encode(credentialBytes);
return credentialIdBase64;
}

Expand Down
96 changes: 0 additions & 96 deletions src/library/Base64Url.sol

This file was deleted.

Loading

0 comments on commit c3b1200

Please sign in to comment.