ERC7913RSAVerifier.sol 774 B

12345678910111213141516171819202122
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.20;
  3. import {RSA} from "../../../utils/cryptography/RSA.sol";
  4. import {IERC7913SignatureVerifier} from "../../../interfaces/IERC7913.sol";
  5. /**
  6. * @dev ERC-7913 signature verifier that support RSA keys.
  7. *
  8. * @custom:stateless
  9. */
  10. contract ERC7913RSAVerifier is IERC7913SignatureVerifier {
  11. /// @inheritdoc IERC7913SignatureVerifier
  12. function verify(bytes calldata key, bytes32 hash, bytes calldata signature) public view virtual returns (bytes4) {
  13. (bytes memory e, bytes memory n) = abi.decode(key, (bytes, bytes));
  14. return
  15. RSA.pkcs1Sha256(abi.encodePacked(hash), signature, e, n)
  16. ? IERC7913SignatureVerifier.verify.selector
  17. : bytes4(0xFFFFFFFF);
  18. }
  19. }