-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathOwnershipProofVerifier.sol
44 lines (39 loc) · 1.36 KB
/
OwnershipProofVerifier.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
pragma solidity >=0.5.3 <0.6.0;
pragma experimental ABIEncoderV2;
import "./AbstractClaimsVerifier.sol";
import "./claimTypes/OwnershipProofTypes.sol";
contract OwnershipProofVerifier is AbstractClaimsVerifier, OwnershipProofTypes {
constructor (address _registryAddress, address _revocations)
AbstractClaimsVerifier(
"EIP712IdentityClaims",
"1",
1,
address(this),
_registryAddress,
_revocations
) public {}
function ownedAddress(OwnershipProof memory claim, uint8 v, bytes32 r, bytes32 s) public view returns (address) {
bytes32 digest = keccak256(
abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR,
hash(claim)
)
);
require(valid(claim.validFrom, claim.validTo), "invalid issuance timestamps");
address issuer = ecrecover(digest, v, r, s);
require(!revocations.revoked(issuer, digest), "claim was revoked by issuer");
require(!revocations.revoked(claim.subject, digest), "claim was revoked subject");
return issuer;
}
function verify(ContractOwnershipProof memory claim, uint8 v, bytes32 r, bytes32 s) public view returns (bool) {
bytes32 digest = keccak256(
abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR,
hash(claim)
)
);
return verifyIssuer(digest, claim.issuer, claim.subject, v, r, s) && valid(claim.validFrom, claim.validTo);
}
}