Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
14 changes: 12 additions & 2 deletions src/signers/ECDSASigner.sol
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ import {
} from "src/types/Constants.sol";

contract ECDSASigner is SignerBase, IStatelessValidator, IStatelessValidatorWithSender {
error InvalidDataLength();
error ZeroAddressSigner();

mapping(bytes32 id => mapping(address wallet => address)) public signer;

function isModuleType(uint256 typeID) external pure override(IModule, SignerBase) returns (bool) {
Expand All @@ -38,6 +41,8 @@ contract ECDSASigner is SignerBase, IStatelessValidator, IStatelessValidatorWith
returns (uint256)
{
address owner = signer[id][msg.sender];
// Fail if signer is not installed (prevents matching with failed recovery)
if (owner == address(0)) return SIG_VALIDATION_FAILED_UINT;
return _verifySignature(userOpHash, userOp.signature, owner)
? SIG_VALIDATION_SUCCESS_UINT
: SIG_VALIDATION_FAILED_UINT;
Expand All @@ -50,12 +55,17 @@ contract ECDSASigner is SignerBase, IStatelessValidator, IStatelessValidatorWith
returns (bytes4)
{
address owner = signer[id][msg.sender];
// Fail if signer is not installed (prevents matching with failed recovery)
if (owner == address(0)) return ERC1271_INVALID;
return _verifySignature(hash, sig, owner) ? ERC1271_MAGICVALUE : ERC1271_INVALID;
}

function _signerOninstall(bytes32 id, bytes calldata _data) internal override {
require(signer[id][msg.sender] == address(0));
signer[id][msg.sender] = address(bytes20(_data[0:20]));
require(signer[id][msg.sender] == address(0), "Already installed");
if (_data.length != 20) revert InvalidDataLength();
address signerAddr = address(bytes20(_data[0:20]));
if (signerAddr == address(0)) revert ZeroAddressSigner();
signer[id][msg.sender] = signerAddr;
}

function _signerOnUninstall(bytes32 id, bytes calldata) internal override {
Expand Down
5 changes: 5 additions & 0 deletions src/validators/ECDSAValidator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,14 @@ contract ECDSAValidator is IValidator, IHook, IStatelessValidator, IStatelessVal

mapping(address => ECDSAValidatorStorage) public ecdsaValidatorStorage;

error InvalidDataLength();
error ZeroAddressOwner();

function onInstall(bytes calldata _data) external payable override {
if (_isInitialized(msg.sender)) revert AlreadyInitialized(msg.sender);
if (_data.length != 20) revert InvalidDataLength();
address owner = address(bytes20(_data[0:20]));
if (owner == address(0)) revert ZeroAddressOwner();
ecdsaValidatorStorage[msg.sender].owner = owner;
emit OwnerRegistered(msg.sender, owner);
}
Expand Down
Loading