Skip to content

Commit

Permalink
use ipfs context
Browse files Browse the repository at this point in the history
  • Loading branch information
ilya-korotya committed Feb 5, 2025
1 parent c80722a commit 3eb2d34
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 26 deletions.
21 changes: 14 additions & 7 deletions contracts/lib/groth16-verifiers/Groth16VerifierAnonAadhaarV1.sol
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ contract Groth16VerifierAnonAadhaarV1 {
uint256 constant gammax2 = 10857046999023057135944570762232829481370756359578518086990519993285655852781;
uint256 constant gammay1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531;
uint256 constant gammay2 = 8495653923123431417604973247489272438418190587263600148770280649306958101930;
uint256 constant deltax1 = 6478079098059644794955489442566644082399176810697800518011658098436917498892;
uint256 constant deltax2 = 20533572760095723474804352875860557301543433536962581034908820797172322919807;
uint256 constant deltay1 = 21245386610249170698116968675572587783674227146275757743664420681565081182869;
uint256 constant deltay2 = 10386730275318211024690558808663725078794784230034325529798577332498117576072;
uint256 constant deltax1 = 8714491636001512183974848009522037087986439833683496272914108441283982642202;
uint256 constant deltax2 = 1342478522038625466554976093314764068847901149151916280424275422660650819835;
uint256 constant deltay1 = 10682687026063186384624310848433780296724595425556848898884456649855420803943;
uint256 constant deltay2 = 15032912513304630738868168260198683639206278495373347911195304763697255752628;


uint256 constant IC0x = 17202926283251598065231527376648019777623479314208943009386780888674303306367;
uint256 constant IC0y = 275122378331887271415548857816654626631770508982339731839029501536657326428;
uint256 constant IC0x = 7890351244965062735032213295864757484110410603798625964524327154567479711054;
uint256 constant IC0y = 2240756804532160213369957456159606731501538357738494693219656810163481897869;

uint256 constant IC1x = 6793065755890846769340018862424041607459712744183098712209475459344516081736;
uint256 constant IC1y = 9071617632382870191496047914286194606374346215985030020661707710600804984468;
Expand Down Expand Up @@ -73,14 +73,17 @@ contract Groth16VerifierAnonAadhaarV1 {
uint256 constant IC9x = 14814413443159487223931208725152452842059865722271281787555352116049799452733;
uint256 constant IC9y = 17373462594478087004748496082618076921959076827177568046785097901984202939893;

uint256 constant IC10x = 9872112649314645178070944895144674985396981370598481657876135030735211298874;
uint256 constant IC10y = 2228491222560521151657122086349540624901664959348738442009496846304489869314;


// Memory data
uint16 constant pVk = 0;
uint16 constant pPairing = 128;

uint16 constant pLastMem = 896;

function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[9] calldata _pubSignals) public view returns (bool) {
function verifyProof(uint[2] calldata _pA, uint[2][2] calldata _pB, uint[2] calldata _pC, uint[10] calldata _pubSignals) public view returns (bool) {
assembly {
function checkField(v) {
if iszero(lt(v, r)) {
Expand Down Expand Up @@ -142,6 +145,8 @@ contract Groth16VerifierAnonAadhaarV1 {

g1_mulAccC(_pVk, IC9x, IC9y, calldataload(add(pubSignals, 256)))

g1_mulAccC(_pVk, IC10x, IC10y, calldataload(add(pubSignals, 288)))


// -A
mstore(_pPairing, calldataload(pA))
Expand Down Expand Up @@ -215,6 +220,8 @@ contract Groth16VerifierAnonAadhaarV1 {

checkField(calldataload(add(_pubSignals, 288)))

checkField(calldataload(add(_pubSignals, 320)))


// Validate all evaluations
let isValid := checkPairing(_pA, _pB, _pC, _pubSignals, pMem)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ contract Groth16VerifierAnonAadhaarV1Wrapper is Groth16VerifierAnonAadhaarV1, IV
/**
* @dev Number of public signals for atomic mtp circuit
*/
uint256 constant PUBSIGNALS_LENGTH = 9;
uint256 constant PUBSIGNALS_LENGTH = 10;

/**
* @dev Verify the circuit with the groth16 proof π=([πa]1,[πb]2,[πc]1).
Expand All @@ -48,7 +48,7 @@ contract Groth16VerifierAnonAadhaarV1Wrapper is Groth16VerifierAnonAadhaarV1, IV
) public view returns (bool r) {
uint[PUBSIGNALS_LENGTH] memory pubSignals;

require(input.length == PUBSIGNALS_LENGTH, "expected array length is 9");
require(input.length == PUBSIGNALS_LENGTH, "expected array length is 10");

for (uint256 i = 0; i < PUBSIGNALS_LENGTH; i++) {
pubSignals[i] = input[i];
Expand Down
8 changes: 6 additions & 2 deletions contracts/validators/AnonAadhaarV1Validator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ contract AnonAadhaarV1Validator is CredentialAtomicQueryValidatorBase {
uint256 nullifierSeed;
uint256 signalHash;
uint256 templateRoot;
uint256 issuerDidHash;
}
/**
* @dev Version of contract
Expand All @@ -46,6 +47,7 @@ contract AnonAadhaarV1Validator is CredentialAtomicQueryValidatorBase {
_setInputToIndex("nullifierSeed", 6);
_setInputToIndex("signalHash", 7);
_setInputToIndex("templateRoot", 8);
_setInputToIndex("issuerDidHash", 9);

_initDefaultStateVariables(_stateContractAddr, _verifierContractAddr, CIRCUIT_ID, owner);
}
Expand Down Expand Up @@ -73,7 +75,8 @@ contract AnonAadhaarV1Validator is CredentialAtomicQueryValidatorBase {
expirationDate: inputs[5],
nullifierSeed: inputs[6],
signalHash: inputs[7],
templateRoot: inputs[8]
templateRoot: inputs[8],
issuerDidHash: inputs[9]
});

return pubSignals;
Expand Down Expand Up @@ -129,7 +132,7 @@ contract AnonAadhaarV1Validator is CredentialAtomicQueryValidatorBase {

PubSignals memory pubSignals = parsePubSignals(inputs);
_verifyZKP(inputs, a, b, c);
ICircuitValidator.Signal[] memory signals = new ICircuitValidator.Signal[](9);
ICircuitValidator.Signal[] memory signals = new ICircuitValidator.Signal[](10);
signals[0] = ICircuitValidator.Signal({name: "pubKeyHash", value: pubSignals.pubKeyHash});
signals[1] = ICircuitValidator.Signal({name: "nullifier", value: pubSignals.nullifier});
signals[2] = ICircuitValidator.Signal({name: "hashIndex", value: pubSignals.hashIndex});
Expand All @@ -139,6 +142,7 @@ contract AnonAadhaarV1Validator is CredentialAtomicQueryValidatorBase {
signals[6] = ICircuitValidator.Signal({name: "nullifierSeed", value: pubSignals.nullifierSeed});
signals[7] = ICircuitValidator.Signal({name: "signalHash", value: pubSignals.signalHash});
signals[8] = ICircuitValidator.Signal({name: "templateRoot", value: pubSignals.templateRoot});
signals[9] = ICircuitValidator.Signal({name: "issuerDidHash", value: pubSignals.issuerDidHash});
return signals;
}

Expand Down
15 changes: 12 additions & 3 deletions contracts/verifiers/AnonAadhaarCredentialIssuing.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ contract AnonAadhaarCredentialIssuing is IdentityBase, EmbeddedZKPVerifier {
uint256 publicKeysHash;
uint256 expirationTime;
uint256 templateRoot;
uint256 issuerDidHash;
mapping(uint256 => bool) nullifiers;
}

Expand Down Expand Up @@ -56,6 +57,11 @@ contract AnonAadhaarCredentialIssuing is IdentityBase, EmbeddedZKPVerifier {
super.__EmbeddedZKPVerifier_init(_msgSender(), IState(_stateContractAddr));
}

function setIssuerDidHash(uint256 issuerDidHash) public onlyOwner {
AnonAadhaarCredentialIssuingStorage storage $ = _getAnonAadhaarCredentialIssuingStorage();
$.issuerDidHash = issuerDidHash;
}

function _validatePublicInputs(
uint256 hashIndex,
uint256 hashValue,
Expand All @@ -64,16 +70,17 @@ contract AnonAadhaarCredentialIssuing is IdentityBase, EmbeddedZKPVerifier {
uint256 nullifierSeed,
uint256 issuanceDate,
uint256 expirationDate,
uint256 templateRoot
uint256 templateRoot,
uint256 issuerDidHash
) private view {
AnonAadhaarCredentialIssuingStorage storage $ = _getAnonAadhaarCredentialIssuingStorage();
require(hashIndex != 0, "Invalid hashIndex");
require(hashValue != 0, "Invalid hashValue");

require(nullifierSeed == $.nullifierSeed, "Invalid nullifierSeed");
require(pubKeyHash == $.publicKeysHash, "Invalid pubKeyHash");

require(templateRoot == $.templateRoot, "Invalid templateRoot");
require(issuerDidHash == $.issuerDidHash, "Invalid issuerDidHash");

uint256 expectedExpiration = issuanceDate + $.expirationTime;
require(expirationDate == expectedExpiration, "Invalid expirationDate");
Expand Down Expand Up @@ -102,6 +109,7 @@ contract AnonAadhaarCredentialIssuing is IdentityBase, EmbeddedZKPVerifier {
uint256 issuanceDate = super.getProofStorageField(_msgSender(), responses[0].requestId, "issuanceDate");
uint256 expirationDate = super.getProofStorageField(_msgSender(), responses[0].requestId, "expirationDate");
uint256 templateRoot = super.getProofStorageField(_msgSender(), responses[0].requestId, "templateRoot");
uint256 issuerDidHash = super.getProofStorageField(_msgSender(), responses[0].requestId, "issuerDidHash");


_validatePublicInputs(
Expand All @@ -112,7 +120,8 @@ contract AnonAadhaarCredentialIssuing is IdentityBase, EmbeddedZKPVerifier {
nullifierSeed,
issuanceDate,
expirationDate,
templateRoot
templateRoot,
issuerDidHash
);
_setNullifier(nullifier);
_addHashAndTransit(hashIndex, hashValue);
Expand Down
7 changes: 6 additions & 1 deletion helpers/DeployAnonAadharV1Validator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ export class AnonAadhaarDeployHelper {
12345678,
BigInt("15134874015316324267425466444584014077184337590635665158241104437045239495873"),
15776640,
BigInt("19885546056720838706860449020869651677281577675447204956487418402102594191373"),
BigInt("3760048933127269188109079349507397743444241277603345236696660118069105661581"),
stateContractAddress,
defaultIdType,
);
Expand All @@ -77,6 +77,11 @@ export class AnonAadhaarDeployHelper {
return deployment;
}

public async setIssuerDidHash(issuer: Contract, didHash: string): Promise<void> {
const tx = await issuer.setIssuerDidHash(didHash);
await tx.wait();
}

public async setZKPRequest(
issuer: Contract,
requestId: number,
Expand Down
4 changes: 4 additions & 0 deletions scripts/deploy/deployAnonAadhaarIssuer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ async function main() {
defaultIdType,
);
await f.setZKPRequest(issuer, 23095784, stateContractAddress);
await f.setIssuerDidHash(
issuer,
"12146166192964646439780403715116050536535442384123009131510511003232108502337",
);

console.log("AnonAadhaar deployed at: ", await issuer.getAddress());
}
Expand Down
21 changes: 11 additions & 10 deletions test/validators/sig/data/anon_aadhaar_proof.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,38 @@
"pub_signals": [
"15134874015316324267425466444584014077184337590635665158241104437045239495873",
"21757637725804557105145673996425001348443365012102601099132628620689700248520",
"17583699629297087435396747947464104801390496987348590937346068476255878224190",
"20008781613607235787098460385428097258549451388500663812133073420193366503613",
"11011149991037021719606390653883695507172517046012692737863092331336195927706",
"1737635400",
"1753412040",
"12345678",
"1001",
"19885546056720838706860449020869651677281577675447204956487418402102594191373"
"3760048933127269188109079349507397743444241277603345236696660118069105661581",
"12146166192964646439780403715116050536535442384123009131510511003232108502337"
],
"proof": {
"pi_a": [
"12487121249606992194230478436044089973576822593478466000565174611663948074158",
"15590504958674151786029026096032455225587475546725060953718647279837828243194",
"11869196442996267025030749068394371786805657678760160654907174484987766907808",
"17686928328597164736381254494606463552765837286202875121793576543156601665033",
"1"
],
"pi_b": [
[
"13402987638855931287006008937152285833534447856496191421752989954432404156611",
"14526586495636946138920550458682115724329743553293332534538201663911090069840"
"13515452321003691064483184534207150975586450724315769991316479905974402241378",
"14716023562095913622339108043716409588231805556962353607875636779763985884134"
],
[
"1949307931881352616288038803798309135657871994128018698835805495204275405038",
"16182465157694128275643558591706620112581904519510730926662012536552246962676"
"11062225030730594551989027016765291985799597937078371473746074386386140311937",
"5551008115035485953503647795333702782806892987391710330736585983343608719780"
],
[
"1",
"0"
]
],
"pi_c": [
"8428148849298891551853291732196324429726324933780176160987580144345147637657",
"11858812461761192279572418794629613870239351794238943967711208732975260881088",
"21355862083613512715224222769968438713345551844846167814261998738579221496847",
"12098560135080106937431139965107750441369627135951966553398163439256469136025",
"1"
],
"protocol": "groth16",
Expand Down
6 changes: 5 additions & 1 deletion test/verifier/anonAadhaarVerifier.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,13 @@ describe("Verify anon aadhaar proof onchain", async () => {
basicContracts.defaultIdType,
);
await f.setZKPRequest(issuer, requestId, await basicContracts.state.getAddress());
await f.setIssuerDidHash(
issuer,
"12146166192964646439780403715116050536535442384123009131510511003232108502337",
);
});

it("Verify proof and issuer a credential", async () => {
it("Issue a credential and verify proof", async () => {
const { inputs, pi_a, pi_b, pi_c } = prepareInputs(proofJson);
const inputsBytes = packZKProof(inputs, pi_a, pi_b, pi_c);

Expand Down

0 comments on commit 3eb2d34

Please sign in to comment.