Skip to content
Merged
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
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@
- `Z_NOIR_PASSPORT_21_256_3_7_336_264_21_3072_6_2008`
- `Z_NOIR_PASSPORT_25_384_3_5_576_248_20_3768_3_2008`
- `Z_NOIR_PASSPORT_2_256_3_5_336_248_22_1808_7_2408`
- `Z_NOIR_PASSPORT_1_256_3_4_336_232_1_1480_4_256`
- `Z_NOIR_PASSPORT_1_256_3_4_336_248_1_560_4_256`
- `Z_NOIR_PASSPORT_1_256_3_5_336_232_NA`
- `Z_NOIR_PASSPORT_1_256_3_7_336_264_20_2760_6_2008`

## [0.4.3]

Expand Down
3,416 changes: 3,416 additions & 0 deletions contracts/passport/verifiers2/ligh-id/RegisterIdentityLightID160Verifier.sol

Large diffs are not rendered by default.

3,416 changes: 3,416 additions & 0 deletions contracts/passport/verifiers2/ligh-id/RegisterIdentityLightID224Verifier.sol

Large diffs are not rendered by default.

3,416 changes: 3,416 additions & 0 deletions contracts/passport/verifiers2/ligh-id/RegisterIdentityLightID256Verifier.sol

Large diffs are not rendered by default.

3,416 changes: 3,416 additions & 0 deletions contracts/passport/verifiers2/ligh-id/RegisterIdentityLightID384Verifier.sol

Large diffs are not rendered by default.

3,416 changes: 3,416 additions & 0 deletions contracts/passport/verifiers2/ligh-id/RegisterIdentityLightID512Verifier.sol

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

55 changes: 55 additions & 0 deletions contracts/registration/RegistrationSimple.sol
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import {MessageHashUtils} from "@openzeppelin/contracts/utils/cryptography/Messa
import {SetHelper} from "@solarity/solidity-lib/libs/arrays/SetHelper.sol";
import {Groth16VerifierHelper} from "@solarity/solidity-lib/libs/zkp/Groth16VerifierHelper.sol";

import {INoirVerifier} from "../interfaces/verifiers/INoirVerifier.sol";

import {StateKeeper} from "../state/StateKeeper.sol";

contract RegistrationSimple is Initializable, UUPSUpgradeable {
Expand Down Expand Up @@ -95,6 +97,40 @@ contract RegistrationSimple is Initializable, UUPSUpgradeable {
);
}

function registerSimpleViaNoir(
uint256 identityKey_,
Passport memory passport_,
bytes memory signature_,
bytes memory zkPoints_
) external virtual {
require(identityKey_ > 0, "RegistrationSimple: identity can not be zero");

bytes32 signedData_ = _buildSignedData(passport_);
address dataSigner_ = ECDSA.recover(
MessageHashUtils.toEthSignedMessageHash(signedData_),
signature_
);

_requireSigner(dataSigner_);

stateKeeper.useSignature(keccak256(signature_));

_verifyNoirZKProof(
passport_.verifier,
passport_.dg1Hash,
bytes32(passport_.dgCommit),
bytes32(identityKey_),
zkPoints_
);

stateKeeper.addBond(
passport_.publicKey,
passport_.passportHash,
bytes32(identityKey_),
passport_.dgCommit
);
}

function updateSignerList(bytes calldata data_) external {
_onlyOwner();

Expand Down Expand Up @@ -159,6 +195,25 @@ contract RegistrationSimple is Initializable, UUPSUpgradeable {
);
}

function _verifyNoirZKProof(
address verifier_,
bytes32 dg1Hash_,
bytes32 dg1Commitment_,
bytes32 pkIdentityHash_,
bytes memory zkPoints_
) internal view {
bytes32[] memory pubSignals_ = new bytes32[](_PROOF_SIGNALS_COUNT);

pubSignals_[0] = dg1Commitment_; // output
pubSignals_[1] = dg1Hash_; // output
pubSignals_[2] = pkIdentityHash_; // output

require(
INoirVerifier(verifier_).verify(zkPoints_, pubSignals_),
"RegistrationSimple: invalid noir zk proof"
);
}

function _requireSigner(address account_) private view {
require(_signers.contains(account_), "RegistrationSimple: caller is not a signer");
}
Expand Down
38 changes: 38 additions & 0 deletions deploy/10_setup.migration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,10 @@ import {
NoirRegisterIdentity_21_256_3_7_336_264_21_3072_6_2008__factory,
NoirRegisterIdentity_25_384_3_5_576_248_20_3768_3_2008__factory,
NoirRegisterIdentity_2_256_3_5_336_248_22_1808_7_2408__factory,
NoirRegisterIdentity_1_256_3_4_336_232_1_1480_4_256__factory,
NoirRegisterIdentity_1_256_3_4_336_248_1_560_4_256__factory,
NoirRegisterIdentity_1_256_3_5_336_232_NA__factory,
NoirRegisterIdentity_1_256_3_7_336_264_20_2760_6_2008__factory,
} from "@ethers-v6";

import {
Expand Down Expand Up @@ -280,6 +284,10 @@ import {
Z_NOIR_PASSPORT_21_256_3_7_336_264_21_3072_6_2008,
Z_NOIR_PASSPORT_25_384_3_5_576_248_20_3768_3_2008,
Z_NOIR_PASSPORT_2_256_3_5_336_248_22_1808_7_2408,
Z_NOIR_PASSPORT_1_256_3_4_336_232_1_1480_4_256,
Z_NOIR_PASSPORT_1_256_3_4_336_248_1_560_4_256,
Z_NOIR_PASSPORT_1_256_3_5_336_232_NA,
Z_NOIR_PASSPORT_1_256_3_7_336_264_20_2760_6_2008,
} from "@/scripts/utils/types";

import { getConfig } from "./config/config";
Expand Down Expand Up @@ -756,6 +764,19 @@ export = async (deployer: Deployer) => {
NoirRegisterIdentity_2_256_3_5_336_248_22_1808_7_2408__factory,
);

const pNoirPassport_1_256_3_4_336_232_1_1480_4_256 = await deployer.deployed(
NoirRegisterIdentity_1_256_3_4_336_232_1_1480_4_256__factory,
);
const pNoirPassport_1_256_3_4_336_248_1_560_4_256 = await deployer.deployed(
NoirRegisterIdentity_1_256_3_4_336_248_1_560_4_256__factory,
);
const pNoirPassport_1_256_3_5_336_232_NA = await deployer.deployed(
NoirRegisterIdentity_1_256_3_5_336_232_NA__factory,
);
const pNoirPassport_1_256_3_7_336_264_20_2760_6_2008 = await deployer.deployed(
NoirRegisterIdentity_1_256_3_7_336_264_20_2760_6_2008__factory,
);

// ------------------------ CERTIFICATE ------------------------

await registration.mockAddCertificateDispatcher(C_RSA_SHA1_4096, await cRsa4096Sha1Dispatcher.getAddress());
Expand Down Expand Up @@ -1309,6 +1330,23 @@ export = async (deployer: Deployer) => {
await pNoirPassport_2_256_3_5_336_248_22_1808_7_2408.getAddress(),
);

await registration.mockAddPassportVerifier(
Z_NOIR_PASSPORT_1_256_3_4_336_232_1_1480_4_256,
await pNoirPassport_1_256_3_4_336_232_1_1480_4_256.getAddress(),
);
await registration.mockAddPassportVerifier(
Z_NOIR_PASSPORT_1_256_3_4_336_248_1_560_4_256,
await pNoirPassport_1_256_3_4_336_248_1_560_4_256.getAddress(),
);
await registration.mockAddPassportVerifier(
Z_NOIR_PASSPORT_1_256_3_5_336_232_NA,
await pNoirPassport_1_256_3_5_336_232_NA.getAddress(),
);
await registration.mockAddPassportVerifier(
Z_NOIR_PASSPORT_1_256_3_7_336_264_20_2760_6_2008,
await pNoirPassport_1_256_3_7_336_264_20_2760_6_2008.getAddress(),
);

await stateKeeper.mockAddRegistrations([config.registrationName], [await registration.getAddress()]);
await stateKeeper.mockAddRegistrations([config.simpleRegistrationName], [await registrationSimple.getAddress()]);
};
25 changes: 25 additions & 0 deletions deploy/13_light-verifiers-id.migration.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { Deployer, Reporter } from "@solarity/hardhat-migrate";

import {
RegisterIdentityLightID160Verifier__factory,
RegisterIdentityLightID224Verifier__factory,
RegisterIdentityLightID256Verifier__factory,
RegisterIdentityLightID384Verifier__factory,
RegisterIdentityLightID512Verifier__factory,
} from "@/generated-types/ethers";

export = async (deployer: Deployer) => {
const identityLight160Verifier = await deployer.deploy(RegisterIdentityLightID160Verifier__factory);
const identityLight224Verifier = await deployer.deploy(RegisterIdentityLightID224Verifier__factory);
const identityLight256Verifier = await deployer.deploy(RegisterIdentityLightID256Verifier__factory);
const identityLight384Verifier = await deployer.deploy(RegisterIdentityLightID384Verifier__factory);
const identityLight512Verifier = await deployer.deploy(RegisterIdentityLightID512Verifier__factory);

Reporter.reportContracts(
["RegisterIdentityLightID160Verifier", `${await identityLight160Verifier.getAddress()}`],
["RegisterIdentityLightID224Verifier", `${await identityLight224Verifier.getAddress()}`],
["RegisterIdentityLightID256Verifier", `${await identityLight256Verifier.getAddress()}`],
["RegisterIdentityLightID384Verifier", `${await identityLight384Verifier.getAddress()}`],
["RegisterIdentityLightID512Verifier", `${await identityLight512Verifier.getAddress()}`],
);
};
9 changes: 9 additions & 0 deletions deploy/helpers/verifiers/passport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,10 @@ import {
NoirRegisterIdentity_21_256_3_7_336_264_21_3072_6_2008__factory,
NoirRegisterIdentity_25_384_3_5_576_248_20_3768_3_2008__factory,
NoirRegisterIdentity_2_256_3_5_336_248_22_1808_7_2408__factory,
NoirRegisterIdentity_1_256_3_4_336_232_1_1480_4_256__factory,
NoirRegisterIdentity_1_256_3_4_336_248_1_560_4_256__factory,
NoirRegisterIdentity_1_256_3_5_336_232_NA__factory,
NoirRegisterIdentity_1_256_3_7_336_264_20_2760_6_2008__factory,
} from "@ethers-v6";

export const deployPVerifiers = async (deployer: Deployer) => {
Expand Down Expand Up @@ -246,4 +250,9 @@ export const deployPVerifiers = async (deployer: Deployer) => {
await deployer.deploy(NoirRegisterIdentity_21_256_3_7_336_264_21_3072_6_2008__factory);
await deployer.deploy(NoirRegisterIdentity_25_384_3_5_576_248_20_3768_3_2008__factory);
await deployer.deploy(NoirRegisterIdentity_2_256_3_5_336_248_22_1808_7_2408__factory);

await deployer.deploy(NoirRegisterIdentity_1_256_3_4_336_232_1_1480_4_256__factory);
await deployer.deploy(NoirRegisterIdentity_1_256_3_4_336_248_1_560_4_256__factory);
await deployer.deploy(NoirRegisterIdentity_1_256_3_5_336_232_NA__factory);
await deployer.deploy(NoirRegisterIdentity_1_256_3_7_336_264_20_2760_6_2008__factory);
};
14 changes: 14 additions & 0 deletions scripts/utils/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -347,3 +347,17 @@ export const Z_NOIR_PASSPORT_2_256_3_5_336_248_22_1808_7_2408 = keccak256(
["string"],
["Z_NOIR_PASSPORT_2_256_3_5_336_248_22_1808_7_2408"],
);

export const Z_NOIR_PASSPORT_1_256_3_4_336_232_1_1480_4_256 = keccak256(
["string"],
["Z_NOIR_PASSPORT_1_256_3_4_336_232_1_1480_4_256"],
);
export const Z_NOIR_PASSPORT_1_256_3_4_336_248_1_560_4_256 = keccak256(
["string"],
["Z_NOIR_PASSPORT_1_256_3_4_336_248_1_560_4_256"],
);
export const Z_NOIR_PASSPORT_1_256_3_5_336_232_NA = keccak256(["string"], ["Z_NOIR_PASSPORT_1_256_3_5_336_232_NA"]);
export const Z_NOIR_PASSPORT_1_256_3_7_336_264_20_2760_6_2008 = keccak256(
["string"],
["Z_NOIR_PASSPORT_1_256_3_7_336_264_20_2760_6_2008"],
);