Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Certora Prover setup and properties for the audit of Passkey module #495

Closed
wants to merge 133 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
e2dca84
Added first batch of setup confs
yoav-el-certora Apr 25, 2024
512eb51
Small fixes
yoav-el-certora Apr 25, 2024
ff3c325
Reorganize all folders, Added specific spec file for each contract, A…
yoav-el-certora May 2, 2024
7070a09
Merge branch 'main' of github.com:Certora/safe-modules into certora
nivcertora May 12, 2024
cedccec
Merge branch 'safe-global:main' into certora
yoav-el-certora May 12, 2024
5ef533b
Merge branch 'certora' of github.com:Certora/safe-modules into certora
nivcertora May 12, 2024
aca3afc
Merge branch 'main' of github.com:Certora/safe-modules into certora
nivcertora May 15, 2024
da59212
.
nivcertora May 15, 2024
9488e45
Add webAuthn conf
nivcertora May 15, 2024
9545b45
Merge pull request #1 from Certora/niv/Orgenazie-Files
nivcertora May 15, 2024
8ba3831
Fix sanity using alex parameters
nivcertora May 15, 2024
26fd77b
Merge pull request #2 from Certora/niv/Handle-signer-methods
nivcertora May 15, 2024
b8989c3
Add property list
nivcertora May 15, 2024
d71c9a8
Add property list
nivcertora May 15, 2024
d132793
Add property list
nivcertora May 15, 2024
dc842ad
Add property list
nivcertora May 16, 2024
f247607
Add property list
nivcertora May 16, 2024
5aa3bac
Add property list
nivcertora May 16, 2024
39e5159
Add property list
nivcertora May 16, 2024
f50532f
Add property list
nivcertora May 16, 2024
896c24b
Add property list
nivcertora May 16, 2024
64a6083
Updated properties and priorities.
yoav-el-certora May 19, 2024
20f659b
.
nivcertora May 19, 2024
589a626
Update SafeWebAuthnSignerProxy.spec
liav-certora May 19, 2024
66b5fcb
Update SafeWebAuthnSignerProxy.spec
liav-certora May 20, 2024
6242d48
.
nivcertora May 20, 2024
4714c04
Added all properties.
yoav-el-certora May 20, 2024
e5c5e70
Merge pull request #3 from Certora/liav/property
liav-certora May 20, 2024
c9d1532
Added the harness file
yoav-el-certora May 21, 2024
958f508
.
nivcertora May 21, 2024
db36204
Removed commented code.
yoav-el-certora May 21, 2024
89bd20e
Merge pull request #4 from Certora/Singleton_Rules
yoav-el-certora May 21, 2024
8dd8ec3
.
nivcertora May 21, 2024
6dbea47
Clean munging
nivcertora May 21, 2024
9858608
Add sanity basic
nivcertora May 21, 2024
a8f1793
Comment out
nivcertora May 22, 2024
657f413
Try to fix
nivcertora May 22, 2024
4ad1bf0
Try to fix
nivcertora May 22, 2024
761f58b
Add ticket
nivcertora May 23, 2024
24cf1df
For nurit
nivcertora May 23, 2024
d15faf8
more rules
liav-certora May 26, 2024
ba92c5b
comments
liav-certora May 26, 2024
fc88173
Start webauth
nivcertora May 26, 2024
d723451
Merge pull request #5 from Certora/niv/Factory
nivcertora May 26, 2024
dca8c02
Fix rule condition
nivcertora May 26, 2024
76d0729
Nurit CR
liav-certora May 27, 2024
bf0ff62
Add webAuth rules
nivcertora May 27, 2024
a1aad3b
Merge pull request #7 from Certora/niv/WebAuth
nivcertora May 27, 2024
3e1758f
Fix assert
nivcertora May 27, 2024
82aef3a
Cleaning
nivcertora May 27, 2024
3a7ecc2
Improve deterministic signer
nivcertora May 28, 2024
34d557b
Fix summary rule is still violated
nivcertora May 28, 2024
caf2a10
Apply smt suggestion to avoid timeout on Encoding message
nivcertora May 28, 2024
1a90bed
Remove summary apply bitvector
nivcertora May 29, 2024
8643c6f
Improve consistent rule for cast signature
nivcertora May 29, 2024
9fa9ac8
Split between BitVector theory conf and regular
nivcertora May 29, 2024
a2ef981
Replace cast signature rules
nivcertora May 29, 2024
294f1e7
Merge pull request #6 from Certora/liav/property
liav-certora May 29, 2024
a932fab
.
liav-certora May 29, 2024
6ad4b5e
Merge pull request #8 from Certora/liav/reverting-conditions
liav-certora May 29, 2024
6c7348e
Added summaries and additional fixes
yoav-el-certora May 30, 2024
82cecef
Added Jochen suggestion
yoav-el-certora May 30, 2024
f9251a9
.
liav-certora May 30, 2024
3983d89
Small updates and improved castSignatureLengthCheckValidity condition
yoav-el-certora Jun 3, 2024
6a21c3f
Fix uniqueSigner and createAndGetSignerEquivalence rules
nivcertora Jun 4, 2024
6ba6742
Add summary for getsiner
nivcertora Jun 4, 2024
80a64da
Add summary for getsiner
nivcertora Jun 4, 2024
8e82a69
Merge pull request #10 from Certora/liav/reverting-conditions
liav-certora Jun 4, 2024
bde14d6
Addressed Hristo comments
yoav-el-certora Jun 4, 2024
299cd29
Merge branch 'certora' into yoav/Singleton
yoav-el-certora Jun 4, 2024
d668c41
Add munging for hasNoCode
nivcertora Jun 4, 2024
1523c06
revert verifyIsValidSignatureWillContinueToSucceed changes
yoav-el-certora Jun 4, 2024
3345b5c
Merge remote-tracking branch 'origin/yoav/Singleton' into yoav/Singleton
yoav-el-certora Jun 4, 2024
a43568d
Fix verifySignatureEq
nivcertora Jun 5, 2024
6e49f86
Fix castSignatureDeterministicDecoding and castSignatureLengthCheckVa…
nivcertora Jun 5, 2024
a346a51
Add verifySignatureConsistent
nivcertora Jun 5, 2024
10473cf
.
nivcertora Jun 5, 2024
d3e5471
.
nivcertora Jun 5, 2024
80ab0d5
Organize files
nivcertora Jun 5, 2024
f56b19c
Removed harness and cleaned both spec and conf file.
yoav-el-certora Jun 5, 2024
7d58f27
.
nivcertora Jun 5, 2024
741bb38
Merge pull request #9 from Certora/yoav/Singleton
yoav-el-certora Jun 5, 2024
a9e97ea
.
nivcertora Jun 6, 2024
4d3d0f4
.
nivcertora Jun 6, 2024
34450e2
Add munging remove changes from safe source code
nivcertora Jun 6, 2024
c4ec5eb
Merge branch 'certora' of github.com:Certora/safe-modules into niv/Fi…
nivcertora Jun 6, 2024
dc899e6
Clean
nivcertora Jun 6, 2024
7cdc8ac
remove munging
nivcertora Jun 6, 2024
2e1aaf7
.
liav-certora Jun 6, 2024
8a5a2c7
move signer rules
nivcertora Jun 6, 2024
df3b264
.
nivcertora Jun 6, 2024
ccab47a
Merge pull request #12 from Certora/niv/snapshot-to-certora
nivcertora Jun 6, 2024
051e154
Add missing rules
nivcertora Jun 6, 2024
7db212d
Small clean
nivcertora Jun 6, 2024
c81f4a6
Update SafeWebAuthnSignerSingleton.conf
liav-certora Jun 9, 2024
d208c5a
Update SafeWebAuthnSignerFactory.spec
liav-certora Jun 9, 2024
021d60d
Fix proxy return rule at least on john branch
nivcertora Jun 10, 2024
dba6d97
Merge branch 'certora' into liav/more-reverting-conditions
liav-certora Jun 10, 2024
08594cc
Merge pull request #15 from Certora/liav/more-reverting-conditions
liav-certora Jun 10, 2024
ac7fd70
Merge branch 'certora' of github.com:Certora/safe-modules into niv/Ad…
nivcertora Jun 13, 2024
aebe38c
Add summaries to factory
nivcertora Jun 13, 2024
b50be18
Fix
nivcertora Jun 13, 2024
321c050
Try to fix unresolved call to isValidSignature via proxy fallback wit…
nivcertora Jun 13, 2024
ed1bf4d
cleanup
liav-certora Jun 13, 2024
37050dd
proxy duplicate
liav-certora Jun 13, 2024
e6f8e21
.
liav-certora Jun 13, 2024
dd5d83c
Add john requirements, proving the rule only for the first time proxy…
nivcertora Jun 16, 2024
306ff0d
small fix
nivcertora Jun 16, 2024
2568691
Add conf with john configuration for createAndVerifyEQtoIsValidSignat…
nivcertora Jun 16, 2024
3b5bfd2
Update on progress
nivcertora Jun 18, 2024
3d670eb
Fix isValidSignerVerifyFor signure
nivcertora Jun 19, 2024
e81f28b
Some small changes and verifyIsValidSignatureWillContinueToSucceed wo…
yoav-el-certora Jun 23, 2024
99c9c6c
Added getConfiguration Rule
yoav-el-certora Jun 23, 2024
a05a177
Merge branch 'certora' into yoav/Singleton
yoav-el-certora Jun 23, 2024
95be4cc
Merge pull request #16 from Certora/yoav/Singleton
yoav-el-certora Jun 23, 2024
767bfcc
remove munging
yoav-el-certora Aug 21, 2024
d96881d
remove john branch
yoav-el-certora Aug 21, 2024
9747600
Merge pull request #18 from Certora/yoav/Singleton_GetConfiguration
yoav-el-certora Aug 21, 2024
2299bce
Merge branch 'certora' of github.com:Certora/safe-modules into niv/Ad…
nivcertora Aug 21, 2024
d4a9be6
Add john fixes
nivcertora Aug 21, 2024
6df348c
Merge pull request #14 from Certora/niv/Add-ALL-Rules
yoav-el-certora Aug 21, 2024
62742d0
Added conf files and fixed all issues
yoav-el-certora Aug 22, 2024
161d059
Last fixes
yoav-el-certora Aug 22, 2024
b8427fc
Add munge
yoav-el-certora Aug 27, 2024
91fce2c
Add munge
yoav-el-certora Aug 27, 2024
78e74a1
Add munge
yoav-el-certora Aug 27, 2024
9fa6a17
Merge pull request #20 from Certora/Yoav_Work_On_createAndVerifyEQtoI…
yoav-el-certora Aug 28, 2024
7de765d
Add munge
yoav-el-certora Aug 28, 2024
3c7c57b
Merge pull request #21 from Certora/Yoav_Work_On_createAndVerifyEQtoI…
yoav-el-certora Aug 28, 2024
7f56a64
Merge pull request #19 from Certora/Yoav_Safe_For_Delivery
yoav-el-certora Aug 28, 2024
4616e1d
restore private to public munge of modules/passkey/contracts/librarie…
Sep 11, 2024
0862df2
Merge pull request #22 from Certora/Yoav_Safe_For_Delivery
hristo-grigorov Sep 11, 2024
a1eab8a
WebAuthnHarness to WebAuthnHarnessWithMunge fix
hristo-grigorov Sep 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions certora/confs/GetConfigurationConf.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"assert_autofinder_success": true,
"files": [
"certora/munged/SafeWebAuthnSignerSingleton.sol",
"certora/harnesses/GetConfigurationProxyHarness.sol",
"modules/passkey/contracts/SafeWebAuthnSignerFactory.sol"
],
"link": [
"GetConfigurationProxyHarness:_SINGLETON=SafeWebAuthnSignerSingleton"
],
"loop_iter": "6",
"optimistic_hashing": true,
"optimistic_loop": true,
"packages": [
"@safe-global=node_modules/@safe-global",
"@account-abstraction=node_modules/@account-abstraction"
],
"process": "emv",
"prover_args": [
" -split false"
],
"rule_sanity": "basic",
"solc": "solc8.23",
"verify": "GetConfigurationProxyHarness:certora/specs/GetConfigurationSpec.spec"
}
23 changes: 23 additions & 0 deletions certora/confs/GetSigner.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"assert_autofinder_success": true,
"files": [
"certora/harnesses/GetSignerHarness.sol",
"modules/passkey/contracts/SafeWebAuthnSignerSingleton.sol",
"modules/passkey/contracts/SafeWebAuthnSignerProxy.sol"
],
"hashing_length_bound": "4694",
"link": [
"GetSignerHarness:SINGLETON=SafeWebAuthnSignerSingleton"
],
"loop_iter": "144",
"optimistic_hashing": true,
"optimistic_loop": true,
"packages": [
"@safe-global=node_modules/@safe-global",
"@account-abstraction=node_modules/@account-abstraction"
],
"process": "emv",
"rule_sanity": "basic",
"solc": "solc8.23",
"verify": "GetSignerHarness:certora/specs/GetSigner.spec"
}
27 changes: 27 additions & 0 deletions certora/confs/ProxySimulator.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"assert_autofinder_success": true,
"files": [
"certora/harnesses/ProxySimulator.sol",
"modules/passkey/contracts/SafeWebAuthnSignerProxy.sol",
"modules/passkey/contracts/SafeWebAuthnSignerSingleton.sol",
"modules/passkey/contracts/libraries/P256.sol",
"certora/harnesses/WebAuthnHarnessWithMunge.sol"
],
"hashing_length_bound": "2048",
"link": [
"ProxySimulator:_proxy=SafeWebAuthnSignerProxy",
"SafeWebAuthnSignerProxy:_VERIFIERS=P256",
"SafeWebAuthnSignerProxy:_SINGLETON=SafeWebAuthnSignerSingleton"
],
"loop_iter": "6",
"optimistic_hashing": true,
"optimistic_loop": true,
"packages": [
"@safe-global=node_modules/@safe-global",
"@account-abstraction=node_modules/@account-abstraction"
],
"process": "emv",
"rule_sanity": "basic",
"solc": "solc8.23",
"verify": "ProxySimulator:certora/specs/ProxySimulator.spec"
}
30 changes: 30 additions & 0 deletions certora/confs/SafeWebAuthnSignerFactory.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"assert_autofinder_success": true,
"files": [
"certora/harnesses/FactoryHarnessForSignerConsistency.sol",
"certora/harnesses/WebAuthnHarnessWithMunge.sol",
"modules/passkey/contracts/SafeWebAuthnSignerSingleton.sol",
"modules/passkey/contracts/SafeWebAuthnSignerProxy.sol"
],
"link": [
"FactoryHarnessForSignerConsistency:SINGLETON=SafeWebAuthnSignerSingleton"
],
"loop_iter": "6",
"optimistic_hashing": true,
"optimistic_loop": true,
"packages": [
"@safe-global=node_modules/@safe-global",
"@account-abstraction=node_modules/@account-abstraction"
],
"rule": [
"createAndGetSignerEquivalence",
"getSignerRevertingConditions",
"hasNoCodeIntegrity",
"isValidSignatureForSignerConsistency",
"singletonNeverChanges"
],
"process": "emv",
"rule_sanity": "basic",
"solc": "solc8.23",
"verify": "FactoryHarnessForSignerConsistency:certora/specs/SafeWebAuthnSignerFactoryWithMunge.spec"
}
23 changes: 23 additions & 0 deletions certora/confs/SafeWebAuthnSignerProxy.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"assert_autofinder_success": true,
"files": [
"modules/passkey/contracts/SafeWebAuthnSignerProxy.sol",
"modules/passkey/contracts/SafeWebAuthnSignerSingleton.sol",
"modules/passkey/contracts/libraries/P256.sol"
],
"link": [
"SafeWebAuthnSignerProxy:_VERIFIERS=P256",
"SafeWebAuthnSignerProxy:_SINGLETON=SafeWebAuthnSignerSingleton"
],
"loop_iter": "6",
"optimistic_hashing": true,
"optimistic_loop": true,
"packages": [
"@safe-global=node_modules/@safe-global",
"@account-abstraction=node_modules/@account-abstraction"
],
"process": "emv",
"rule_sanity": "basic",
"solc": "solc8.23",
"verify": "SafeWebAuthnSignerProxy:certora/specs/SafeWebAuthnSignerProxy.spec"
}
23 changes: 23 additions & 0 deletions certora/confs/SafeWebAuthnSignerSingleton.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"assert_autofinder_success": true,
"files": [
"modules/passkey/contracts/SafeWebAuthnSignerFactory.sol",
"modules/passkey/contracts/SafeWebAuthnSignerSingleton.sol",
"modules/passkey/contracts/libraries/P256.sol",
"certora/harnesses/WebAuthnHarnessWithMunge.sol"
],
"link": [
"SafeWebAuthnSignerFactory:SINGLETON=SafeWebAuthnSignerSingleton"
],
"loop_iter": "6",
"optimistic_hashing": true,
"optimistic_loop": true,
"packages": [
"@safe-global=node_modules/@safe-global",
"@account-abstraction=node_modules/@account-abstraction"
],
"process": "emv",
"rule_sanity": "basic",
"solc": "solc8.23",
"verify": "SafeWebAuthnSignerSingleton:certora/specs/SafeWebAuthnSignerSingleton.spec"
}
31 changes: 31 additions & 0 deletions certora/confs/SignerCreationCantOverride.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"assert_autofinder_success": true,
"exclude_rule": [
"createAndVerifyEQtoIsValidSignatureForSigner"
],
"files": [
"certora/harnesses/SafeWebAuthnSignerFactoryHarness.sol",
"modules/passkey/contracts/SafeWebAuthnSignerSingleton.sol",
"modules/passkey/contracts/SafeWebAuthnSignerProxy.sol",
"modules/passkey/contracts/libraries/P256.sol",
"certora/harnesses/WebAuthnHarnessWithMunge.sol"
],
"hashing_length_bound": "912",
"link": [
"SafeWebAuthnSignerFactoryHarness:SINGLETON=SafeWebAuthnSignerSingleton"
],
"loop_iter": "6",
"optimistic_hashing": true,
"optimistic_loop": true,
"packages": [
"@safe-global=node_modules/@safe-global",
"@account-abstraction=node_modules/@account-abstraction"
],
"process": "emv",
"rule": [
"SignerCreationCantOverride"
],
"rule_sanity": "basic",
"solc": "solc8.23",
"verify": "SafeWebAuthnSignerFactoryHarness:certora/specs/SafeWebAuthnSignerFactory.spec"
}
23 changes: 23 additions & 0 deletions certora/confs/SingletonIsValidSignatureRevertingConditions.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"assert_autofinder_success": true,
"files": [
"modules/passkey/contracts/SafeWebAuthnSignerFactory.sol",
"modules/passkey/contracts/SafeWebAuthnSignerSingleton.sol",
"modules/passkey/contracts/libraries/P256.sol",
"certora/harnesses/WebAuthnHarnessWithMunge.sol"
],
"loop_iter": "6",
"optimistic_hashing": true,
"optimistic_loop": true,
"packages": [
"@safe-global=node_modules/@safe-global",
"@account-abstraction=node_modules/@account-abstraction"
],
"process": "emv",
"rule": [
"isValidSignatureRevertingConditions"
],
"rule_sanity": "basic",
"solc": "solc8.23",
"verify": "SafeWebAuthnSignerSingleton:certora/specs/SafeWebAuthnSignerSingleton.spec"
}
26 changes: 26 additions & 0 deletions certora/confs/ValidSignatureForSignerIntegrity.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"assert_autofinder_success": true,
"files": [
"certora/harnesses/SafeWebAuthnSignerFactoryHarness.sol",
"certora/harnesses/WebAuthnHarnessWithMunge.sol",
"modules/passkey/contracts/SafeWebAuthnSignerSingleton.sol",
"modules/passkey/contracts/SafeWebAuthnSignerProxy.sol"
],
"link": [
"SafeWebAuthnSignerFactoryHarness:SINGLETON=SafeWebAuthnSignerSingleton"
],
"loop_iter": "6",
"optimistic_hashing": true,
"optimistic_loop": true,
"packages": [
"@safe-global=node_modules/@safe-global",
"@account-abstraction=node_modules/@account-abstraction"
],
"process": "emv",
"rule": [
"isValidSignatureForSignerIntegrity"
],
"rule_sanity": "basic",
"solc": "solc8.23",
"verify": "SafeWebAuthnSignerFactoryHarness:certora/specs/SafeWebAuthnSignerFactory.spec"
}
33 changes: 33 additions & 0 deletions certora/confs/VerifyEQtoIsValidSignatureForSigner.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"assert_autofinder_success": true,
"dynamic_bound": "1",
"files": [
"certora/harnesses/SafeWebAuthnSignerFactoryHarness.sol",
"modules/passkey/contracts/SafeWebAuthnSignerSingleton.sol",
"certora/munged/SafeWebAuthnSignerProxy.sol",
"certora/munged/WebAuthn.sol",
"certora/harnesses/WebAuthnHarnessWithMunge.sol"
],
"hashing_length_bound": "906",
"link": [
"SafeWebAuthnSignerFactoryHarness:SINGLETON=SafeWebAuthnSignerSingleton"
],
"loop_iter": "6",
"optimistic_hashing": true,
"optimistic_loop": true,
"packages": [
"@safe-global=node_modules/@safe-global",
"@account-abstraction=node_modules/@account-abstraction"
],
"process": "emv",
"prover_args": [
"-depth 12"
],
"rule": [
"createAndVerifyEQtoIsValidSignatureForSigner"
],
"rule_sanity": "basic",
"smt_timeout": "600",
"solc": "solc8.23",
"verify": "SafeWebAuthnSignerFactoryHarness:certora/specs/SafeWebAuthnSignerFactoryWithMunge.spec"
}
17 changes: 17 additions & 0 deletions certora/confs/WebAuthn.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"assert_autofinder_success": true,
"files": [
"certora/harnesses/WebAuthnHarnessWithMunge.sol"
],
"loop_iter": "6",
"optimistic_hashing": true,
"optimistic_loop": true,
"packages": [
"@safe-global=node_modules/@safe-global",
"@account-abstraction=node_modules/@account-abstraction"
],
"process": "emv",
"rule_sanity": "basic",
"solc": "solc8.23",
"verify": "WebAuthnHarnessWithMunge:certora/specs/WebAuthn.spec"
}
39 changes: 39 additions & 0 deletions certora/harnesses/FactoryHarnessForSignerConsistency.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity >=0.8.0;

import {SafeWebAuthnSignerFactory} from "../munged/FactoryForSignerConsistency.sol";
import {P256} from "../../modules/passkey/contracts/libraries/P256.sol";
import {SafeWebAuthnSignerProxy} from "../../modules/passkey/contracts/SafeWebAuthnSignerProxy.sol";

contract FactoryHarnessForSignerConsistency is SafeWebAuthnSignerFactory {

//Harness
function hasNoCode(address account) external view returns (bool result) {
// solhint-disable-next-line no-inline-assembly
return SafeWebAuthnSignerFactory._hasNoCode(account);
}

function createAndVerify(
bytes32 message,
bytes calldata signature,
uint256 x,
uint256 y,
P256.Verifiers verifiers
) external returns (bytes4 magicValue) {
address signer = this.createSigner(x, y, verifiers);

bytes memory data = abi.encodeWithSignature("isValidSignature(bytes32,bytes)", message, signature);

// Use low-level call to invoke isValidSignature on the signer address
(bool success, bytes memory result) = signer.staticcall(data);
require(success);
magicValue = abi.decode(result, (bytes4));
}

/**
munge to pass the SignerCreationCantOverride rule.
*/
function _hasNoCode(address account) internal view override returns (bool result) {
return account.code.length == 0;
}
}
Loading
Loading