@zkpassport/sdk 0.10.0 → 0.11.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +165 -42
- package/dist/cjs/public-input-checker.cjs +162 -36
- package/dist/cjs/public-input-checker.d.cts +1 -0
- package/dist/cjs/solidity-verifier.cjs +3 -6
- package/dist/esm/{chunk-O7ZONMCQ.js → chunk-6FIXE2II.js} +163 -37
- package/dist/esm/{chunk-I7PGO4XY.js → chunk-7UUZHRZ3.js} +3 -6
- package/dist/esm/index.js +2 -2
- package/dist/esm/public-input-checker.d.ts +1 -0
- package/dist/esm/public-input-checker.js +1 -1
- package/dist/esm/solidity-verifier.js +1 -1
- package/package.json +3 -3
package/dist/cjs/index.cjs
CHANGED
|
@@ -1035,6 +1035,36 @@ var PublicInputChecker = class {
|
|
|
1035
1035
|
}
|
|
1036
1036
|
return { isCorrect, queryResultErrors };
|
|
1037
1037
|
}
|
|
1038
|
+
static async checkCurrentDate(circuitName, proofData, validity, queryResultErrors) {
|
|
1039
|
+
const currentTime = /* @__PURE__ */ new Date();
|
|
1040
|
+
const today = new Date(
|
|
1041
|
+
currentTime.getFullYear(),
|
|
1042
|
+
currentTime.getMonth(),
|
|
1043
|
+
currentTime.getDate(),
|
|
1044
|
+
0,
|
|
1045
|
+
0,
|
|
1046
|
+
0,
|
|
1047
|
+
0
|
|
1048
|
+
);
|
|
1049
|
+
const currentDate = (0, import_utils.getCurrentDateFromDisclosureProof)(proofData);
|
|
1050
|
+
const todayToCurrentDate = today.getTime() - currentDate.getTime();
|
|
1051
|
+
const expectedDifference = validity ? validity * 1e3 : DEFAULT_VALIDITY * 1e3;
|
|
1052
|
+
const actualDifference = today.getTime() - (today.getTime() - expectedDifference);
|
|
1053
|
+
let isCorrect = true;
|
|
1054
|
+
if (todayToCurrentDate >= actualDifference) {
|
|
1055
|
+
console.warn("The date used to check the validity of the ID falls out of the validity period");
|
|
1056
|
+
isCorrect = false;
|
|
1057
|
+
if (!queryResultErrors[circuitName]) {
|
|
1058
|
+
queryResultErrors[circuitName] = {};
|
|
1059
|
+
}
|
|
1060
|
+
queryResultErrors[circuitName].date = {
|
|
1061
|
+
expected: `Difference: ${validity} seconds`,
|
|
1062
|
+
received: `Difference: ${Math.round(todayToCurrentDate / 1e3)} seconds`,
|
|
1063
|
+
message: "The date used to check the validity of the ID falls out of the validity period"
|
|
1064
|
+
};
|
|
1065
|
+
}
|
|
1066
|
+
return { isCorrect, queryResultErrors };
|
|
1067
|
+
}
|
|
1038
1068
|
static async checkPublicInputs(domain, proofs, queryResult, validity, scope) {
|
|
1039
1069
|
let commitmentIn;
|
|
1040
1070
|
let commitmentOut;
|
|
@@ -1163,14 +1193,9 @@ var PublicInputChecker = class {
|
|
|
1163
1193
|
if (!!committedInputs?.compare_age || !!committedInputs?.compare_age_evm) {
|
|
1164
1194
|
const ageCommittedInputs = committedInputs?.compare_age ?? committedInputs?.compare_age_evm;
|
|
1165
1195
|
const ageParameterCommitment = isForEVM ? await (0, import_utils.getAgeEVMParameterCommitment)(
|
|
1166
|
-
ageCommittedInputs.currentDateTimestamp,
|
|
1167
1196
|
ageCommittedInputs.minAge,
|
|
1168
1197
|
ageCommittedInputs.maxAge
|
|
1169
|
-
) : await (0, import_utils.getAgeParameterCommitment)(
|
|
1170
|
-
ageCommittedInputs.currentDateTimestamp,
|
|
1171
|
-
ageCommittedInputs.minAge,
|
|
1172
|
-
ageCommittedInputs.maxAge
|
|
1173
|
-
);
|
|
1198
|
+
) : await (0, import_utils.getAgeParameterCommitment)(ageCommittedInputs.minAge, ageCommittedInputs.maxAge);
|
|
1174
1199
|
if (!paramCommitments.includes(ageParameterCommitment)) {
|
|
1175
1200
|
console.warn("This proof does not verify the age");
|
|
1176
1201
|
isCorrect = false;
|
|
@@ -1194,16 +1219,12 @@ var PublicInputChecker = class {
|
|
|
1194
1219
|
const birthdateCommittedInputs = committedInputs?.compare_birthdate ?? committedInputs?.compare_birthdate_evm;
|
|
1195
1220
|
const birthdateParameterCommitment = isForEVM ? await (0, import_utils.getDateEVMParameterCommitment)(
|
|
1196
1221
|
import_utils.ProofType.BIRTHDATE,
|
|
1197
|
-
birthdateCommittedInputs.currentDateTimestamp,
|
|
1198
1222
|
birthdateCommittedInputs.minDateTimestamp,
|
|
1199
|
-
birthdateCommittedInputs.maxDateTimestamp
|
|
1200
|
-
0
|
|
1223
|
+
birthdateCommittedInputs.maxDateTimestamp
|
|
1201
1224
|
) : await (0, import_utils.getDateParameterCommitment)(
|
|
1202
1225
|
import_utils.ProofType.BIRTHDATE,
|
|
1203
|
-
birthdateCommittedInputs.currentDateTimestamp,
|
|
1204
1226
|
birthdateCommittedInputs.minDateTimestamp,
|
|
1205
|
-
birthdateCommittedInputs.maxDateTimestamp
|
|
1206
|
-
0
|
|
1227
|
+
birthdateCommittedInputs.maxDateTimestamp
|
|
1207
1228
|
);
|
|
1208
1229
|
if (!paramCommitments.includes(birthdateParameterCommitment)) {
|
|
1209
1230
|
console.warn("This proof does not verify the birthdate");
|
|
@@ -1233,7 +1254,6 @@ var PublicInputChecker = class {
|
|
|
1233
1254
|
expiryCommittedInputs.maxDateTimestamp
|
|
1234
1255
|
) : await (0, import_utils.getDateParameterCommitment)(
|
|
1235
1256
|
import_utils.ProofType.EXPIRY_DATE,
|
|
1236
|
-
expiryCommittedInputs.currentDateTimestamp,
|
|
1237
1257
|
expiryCommittedInputs.minDateTimestamp,
|
|
1238
1258
|
expiryCommittedInputs.maxDateTimestamp
|
|
1239
1259
|
);
|
|
@@ -1437,7 +1457,11 @@ var PublicInputChecker = class {
|
|
|
1437
1457
|
if (!!committedInputs?.exclusion_check_sanctions || !!committedInputs?.exclusion_check_sanctions_evm) {
|
|
1438
1458
|
const sanctionsBuilder = await import_utils.SanctionsBuilder.create();
|
|
1439
1459
|
const exclusionCheckSanctionsCommittedInputs = committedInputs?.exclusion_check_sanctions ?? committedInputs?.exclusion_check_sanctions_evm;
|
|
1440
|
-
const exclusionCheckSanctionsParameterCommitment = isForEVM ? await sanctionsBuilder.getSanctionsEvmParameterCommitment(
|
|
1460
|
+
const exclusionCheckSanctionsParameterCommitment = isForEVM ? await sanctionsBuilder.getSanctionsEvmParameterCommitment(
|
|
1461
|
+
exclusionCheckSanctionsCommittedInputs.isStrict
|
|
1462
|
+
) : await sanctionsBuilder.getSanctionsParameterCommitment(
|
|
1463
|
+
exclusionCheckSanctionsCommittedInputs.isStrict
|
|
1464
|
+
);
|
|
1441
1465
|
if (!paramCommitments.includes(exclusionCheckSanctionsParameterCommitment)) {
|
|
1442
1466
|
console.warn("This proof does not verify the exclusion from the sanction lists");
|
|
1443
1467
|
isCorrect = false;
|
|
@@ -1546,24 +1570,6 @@ var PublicInputChecker = class {
|
|
|
1546
1570
|
};
|
|
1547
1571
|
}
|
|
1548
1572
|
commitmentOut = (0, import_utils.getCommitmentOutFromIntegrityProof)(proofData);
|
|
1549
|
-
const currentDate = (0, import_utils.getCurrentDateFromIntegrityProof)(proofData);
|
|
1550
|
-
const todayToCurrentDate = today.getTime() - currentDate.getTime();
|
|
1551
|
-
const expectedDifference = validity ? validity * 1e3 : DEFAULT_VALIDITY * 1e3;
|
|
1552
|
-
const actualDifference = today.getTime() - (today.getTime() - expectedDifference);
|
|
1553
|
-
if (todayToCurrentDate >= actualDifference) {
|
|
1554
|
-
console.warn(
|
|
1555
|
-
`The date used to check the validity of the ID is older than the validity period`
|
|
1556
|
-
);
|
|
1557
|
-
isCorrect = false;
|
|
1558
|
-
queryResultErrors.data_check_integrity = {
|
|
1559
|
-
...queryResultErrors.data_check_integrity,
|
|
1560
|
-
date: {
|
|
1561
|
-
expected: `Difference: ${validity} seconds`,
|
|
1562
|
-
received: `Difference: ${Math.round(todayToCurrentDate / 1e3)} seconds`,
|
|
1563
|
-
message: "The date used to check the validity of the ID is older than the validity period"
|
|
1564
|
-
}
|
|
1565
|
-
};
|
|
1566
|
-
}
|
|
1567
1573
|
} else if (proof.name === "disclose_bytes") {
|
|
1568
1574
|
commitmentIn = (0, import_utils.getCommitmentInFromDisclosureProof)(proofData);
|
|
1569
1575
|
if (commitmentIn !== commitmentOut) {
|
|
@@ -1616,6 +1622,17 @@ var PublicInputChecker = class {
|
|
|
1616
1622
|
...queryResultErrorsDisclose,
|
|
1617
1623
|
...queryResultErrorsScope
|
|
1618
1624
|
};
|
|
1625
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1626
|
+
"disclose",
|
|
1627
|
+
proofData,
|
|
1628
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1629
|
+
queryResultErrors
|
|
1630
|
+
);
|
|
1631
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1632
|
+
queryResultErrors = {
|
|
1633
|
+
...queryResultErrors,
|
|
1634
|
+
...queryResultErrorsCurrentDate
|
|
1635
|
+
};
|
|
1619
1636
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1620
1637
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1621
1638
|
} else if (proof.name === "compare_age") {
|
|
@@ -1637,7 +1654,6 @@ var PublicInputChecker = class {
|
|
|
1637
1654
|
const paramCommitment = (0, import_utils.getParameterCommitmentFromDisclosureProof)(proofData);
|
|
1638
1655
|
const committedInputs = proof.committedInputs?.compare_age;
|
|
1639
1656
|
const calculatedParamCommitment = await (0, import_utils.getAgeParameterCommitment)(
|
|
1640
|
-
committedInputs.currentDateTimestamp,
|
|
1641
1657
|
committedInputs.minAge,
|
|
1642
1658
|
committedInputs.maxAge
|
|
1643
1659
|
);
|
|
@@ -1663,6 +1679,17 @@ var PublicInputChecker = class {
|
|
|
1663
1679
|
...queryResultErrorsAge,
|
|
1664
1680
|
...queryResultErrorsScope
|
|
1665
1681
|
};
|
|
1682
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1683
|
+
"age",
|
|
1684
|
+
proofData,
|
|
1685
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1686
|
+
queryResultErrors
|
|
1687
|
+
);
|
|
1688
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1689
|
+
queryResultErrors = {
|
|
1690
|
+
...queryResultErrors,
|
|
1691
|
+
...queryResultErrorsCurrentDate
|
|
1692
|
+
};
|
|
1666
1693
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1667
1694
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1668
1695
|
} else if (proof.name === "compare_birthdate") {
|
|
@@ -1685,7 +1712,6 @@ var PublicInputChecker = class {
|
|
|
1685
1712
|
const committedInputs = proof.committedInputs?.compare_birthdate;
|
|
1686
1713
|
const calculatedParamCommitment = await (0, import_utils.getDateParameterCommitment)(
|
|
1687
1714
|
import_utils.ProofType.BIRTHDATE,
|
|
1688
|
-
committedInputs.currentDateTimestamp,
|
|
1689
1715
|
committedInputs.minDateTimestamp,
|
|
1690
1716
|
committedInputs.maxDateTimestamp,
|
|
1691
1717
|
0
|
|
@@ -1718,6 +1744,17 @@ var PublicInputChecker = class {
|
|
|
1718
1744
|
...queryResultErrorsBirthdate,
|
|
1719
1745
|
...queryResultErrorsScope
|
|
1720
1746
|
};
|
|
1747
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1748
|
+
"birthdate",
|
|
1749
|
+
proofData,
|
|
1750
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1751
|
+
queryResultErrors
|
|
1752
|
+
);
|
|
1753
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1754
|
+
queryResultErrors = {
|
|
1755
|
+
...queryResultErrors,
|
|
1756
|
+
...queryResultErrorsCurrentDate
|
|
1757
|
+
};
|
|
1721
1758
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1722
1759
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1723
1760
|
} else if (proof.name === "compare_expiry") {
|
|
@@ -1740,7 +1777,6 @@ var PublicInputChecker = class {
|
|
|
1740
1777
|
const committedInputs = proof.committedInputs?.compare_expiry;
|
|
1741
1778
|
const calculatedParamCommitment = await (0, import_utils.getDateParameterCommitment)(
|
|
1742
1779
|
import_utils.ProofType.EXPIRY_DATE,
|
|
1743
|
-
committedInputs.currentDateTimestamp,
|
|
1744
1780
|
committedInputs.minDateTimestamp,
|
|
1745
1781
|
committedInputs.maxDateTimestamp
|
|
1746
1782
|
);
|
|
@@ -1772,6 +1808,17 @@ var PublicInputChecker = class {
|
|
|
1772
1808
|
...queryResultErrorsExpiryDate,
|
|
1773
1809
|
...queryResultErrorsScope
|
|
1774
1810
|
};
|
|
1811
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1812
|
+
"expiry_date",
|
|
1813
|
+
proofData,
|
|
1814
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1815
|
+
queryResultErrors
|
|
1816
|
+
);
|
|
1817
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1818
|
+
queryResultErrors = {
|
|
1819
|
+
...queryResultErrors,
|
|
1820
|
+
...queryResultErrorsCurrentDate
|
|
1821
|
+
};
|
|
1775
1822
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1776
1823
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1777
1824
|
} else if (proof.name === "exclusion_check_nationality") {
|
|
@@ -1828,6 +1875,17 @@ var PublicInputChecker = class {
|
|
|
1828
1875
|
...queryResultErrorsNationalityExclusion,
|
|
1829
1876
|
...queryResultErrorsScope
|
|
1830
1877
|
};
|
|
1878
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1879
|
+
"nationality",
|
|
1880
|
+
proofData,
|
|
1881
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1882
|
+
queryResultErrors
|
|
1883
|
+
);
|
|
1884
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1885
|
+
queryResultErrors = {
|
|
1886
|
+
...queryResultErrors,
|
|
1887
|
+
...queryResultErrorsCurrentDate
|
|
1888
|
+
};
|
|
1831
1889
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1832
1890
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1833
1891
|
} else if (proof.name === "exclusion_check_issuing_country") {
|
|
@@ -1884,6 +1942,17 @@ var PublicInputChecker = class {
|
|
|
1884
1942
|
...queryResultErrorsIssuingCountryExclusion,
|
|
1885
1943
|
...queryResultErrorsScope
|
|
1886
1944
|
};
|
|
1945
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1946
|
+
"issuing_country",
|
|
1947
|
+
proofData,
|
|
1948
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1949
|
+
queryResultErrors
|
|
1950
|
+
);
|
|
1951
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1952
|
+
queryResultErrors = {
|
|
1953
|
+
...queryResultErrors,
|
|
1954
|
+
...queryResultErrorsCurrentDate
|
|
1955
|
+
};
|
|
1887
1956
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1888
1957
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1889
1958
|
} else if (proof.name === "inclusion_check_nationality") {
|
|
@@ -1940,6 +2009,17 @@ var PublicInputChecker = class {
|
|
|
1940
2009
|
...queryResultErrorsNationalityInclusion,
|
|
1941
2010
|
...queryResultErrorsScope
|
|
1942
2011
|
};
|
|
2012
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
2013
|
+
"nationality",
|
|
2014
|
+
proofData,
|
|
2015
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2016
|
+
queryResultErrors
|
|
2017
|
+
);
|
|
2018
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2019
|
+
queryResultErrors = {
|
|
2020
|
+
...queryResultErrors,
|
|
2021
|
+
...queryResultErrorsCurrentDate
|
|
2022
|
+
};
|
|
1943
2023
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1944
2024
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1945
2025
|
} else if (proof.name === "inclusion_check_issuing_country") {
|
|
@@ -1996,6 +2076,17 @@ var PublicInputChecker = class {
|
|
|
1996
2076
|
...queryResultErrorsIssuingCountryInclusion,
|
|
1997
2077
|
...queryResultErrorsScope
|
|
1998
2078
|
};
|
|
2079
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
2080
|
+
"issuing_country",
|
|
2081
|
+
proofData,
|
|
2082
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2083
|
+
queryResultErrors
|
|
2084
|
+
);
|
|
2085
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2086
|
+
queryResultErrors = {
|
|
2087
|
+
...queryResultErrors,
|
|
2088
|
+
...queryResultErrorsCurrentDate
|
|
2089
|
+
};
|
|
1999
2090
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
2000
2091
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
2001
2092
|
} else if (proof.name === "bind") {
|
|
@@ -2022,12 +2113,25 @@ var PublicInputChecker = class {
|
|
|
2022
2113
|
...queryResultErrors,
|
|
2023
2114
|
...queryResultErrorsBind
|
|
2024
2115
|
};
|
|
2116
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
2117
|
+
"bind",
|
|
2118
|
+
proofData,
|
|
2119
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2120
|
+
queryResultErrors
|
|
2121
|
+
);
|
|
2122
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2123
|
+
queryResultErrors = {
|
|
2124
|
+
...queryResultErrors,
|
|
2125
|
+
...queryResultErrorsCurrentDate
|
|
2126
|
+
};
|
|
2025
2127
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
2026
2128
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
2027
2129
|
} else if (proof.name === "exclusion_check_sanctions") {
|
|
2028
2130
|
const sanctionsBuilder = await import_utils.SanctionsBuilder.create();
|
|
2029
2131
|
const exclusionCheckSanctionsCommittedInputs = proof.committedInputs?.exclusion_check_sanctions;
|
|
2030
|
-
const calculatedParamCommitment = await sanctionsBuilder.getSanctionsParameterCommitment(
|
|
2132
|
+
const calculatedParamCommitment = await sanctionsBuilder.getSanctionsParameterCommitment(
|
|
2133
|
+
exclusionCheckSanctionsCommittedInputs.isStrict
|
|
2134
|
+
);
|
|
2031
2135
|
const paramCommittment = (0, import_utils.getParameterCommitmentFromDisclosureProof)(proofData);
|
|
2032
2136
|
if (paramCommittment !== calculatedParamCommitment) {
|
|
2033
2137
|
console.warn(
|
|
@@ -2056,6 +2160,17 @@ var PublicInputChecker = class {
|
|
|
2056
2160
|
...queryResultErrors,
|
|
2057
2161
|
...queryResultErrorsSanctionsExclusion
|
|
2058
2162
|
};
|
|
2163
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
2164
|
+
"sanctions",
|
|
2165
|
+
proofData,
|
|
2166
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2167
|
+
queryResultErrors
|
|
2168
|
+
);
|
|
2169
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2170
|
+
queryResultErrors = {
|
|
2171
|
+
...queryResultErrors,
|
|
2172
|
+
...queryResultErrorsCurrentDate
|
|
2173
|
+
};
|
|
2059
2174
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
2060
2175
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
2061
2176
|
} else if (proof.name?.startsWith("facematch") && !proof.name?.endsWith("_evm")) {
|
|
@@ -2085,6 +2200,17 @@ var PublicInputChecker = class {
|
|
|
2085
2200
|
...queryResultErrors,
|
|
2086
2201
|
...queryResultErrorsFacematch
|
|
2087
2202
|
};
|
|
2203
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
2204
|
+
"facematch",
|
|
2205
|
+
proofData,
|
|
2206
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2207
|
+
queryResultErrors
|
|
2208
|
+
);
|
|
2209
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2210
|
+
queryResultErrors = {
|
|
2211
|
+
...queryResultErrors,
|
|
2212
|
+
...queryResultErrorsCurrentDate
|
|
2213
|
+
};
|
|
2088
2214
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
2089
2215
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
2090
2216
|
}
|
|
@@ -4555,20 +4681,17 @@ var SolidityVerifier = class {
|
|
|
4555
4681
|
).map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
4556
4682
|
} else if (circuitName === "compare_age_evm") {
|
|
4557
4683
|
const value = proof.committedInputs[circuitName];
|
|
4558
|
-
|
|
4559
|
-
compressedCommittedInputs2 = import_utils2.ProofType.AGE.toString(16).padStart(2, "0") + currentDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + value.minAge.toString(16).padStart(2, "0") + value.maxAge.toString(16).padStart(2, "0");
|
|
4684
|
+
compressedCommittedInputs2 = import_utils2.ProofType.AGE.toString(16).padStart(2, "0") + value.minAge.toString(16).padStart(2, "0") + value.maxAge.toString(16).padStart(2, "0");
|
|
4560
4685
|
} else if (circuitName === "compare_birthdate_evm") {
|
|
4561
4686
|
const value = proof.committedInputs[circuitName];
|
|
4562
|
-
const currentDateBytes = Array.from((0, import_utils2.numberToBytesBE)(value.currentDateTimestamp, 8));
|
|
4563
4687
|
const minDateBytes = Array.from((0, import_utils2.numberToBytesBE)(value.minDateTimestamp, 8));
|
|
4564
4688
|
const maxDateBytes = Array.from((0, import_utils2.numberToBytesBE)(value.maxDateTimestamp, 8));
|
|
4565
|
-
compressedCommittedInputs2 = import_utils2.ProofType.BIRTHDATE.toString(16).padStart(2, "0") +
|
|
4689
|
+
compressedCommittedInputs2 = import_utils2.ProofType.BIRTHDATE.toString(16).padStart(2, "0") + minDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + maxDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
4566
4690
|
} else if (circuitName === "compare_expiry_evm") {
|
|
4567
4691
|
const value = proof.committedInputs[circuitName];
|
|
4568
|
-
const currentDateBytes = Array.from((0, import_utils2.numberToBytesBE)(value.currentDateTimestamp, 8));
|
|
4569
4692
|
const minDateBytes = Array.from((0, import_utils2.numberToBytesBE)(value.minDateTimestamp, 8));
|
|
4570
4693
|
const maxDateBytes = Array.from((0, import_utils2.numberToBytesBE)(value.maxDateTimestamp, 8));
|
|
4571
|
-
compressedCommittedInputs2 = import_utils2.ProofType.EXPIRY_DATE.toString(16).padStart(2, "0") +
|
|
4694
|
+
compressedCommittedInputs2 = import_utils2.ProofType.EXPIRY_DATE.toString(16).padStart(2, "0") + minDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + maxDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
4572
4695
|
} else if (circuitName === "disclose_bytes_evm") {
|
|
4573
4696
|
const value = proof.committedInputs[circuitName];
|
|
4574
4697
|
compressedCommittedInputs2 = import_utils2.ProofType.DISCLOSE.toString(16).padStart(2, "0") + value.discloseMask.map((x) => x.toString(16).padStart(2, "0")).join("") + value.disclosedBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
@@ -996,6 +996,36 @@ var PublicInputChecker = class {
|
|
|
996
996
|
}
|
|
997
997
|
return { isCorrect, queryResultErrors };
|
|
998
998
|
}
|
|
999
|
+
static async checkCurrentDate(circuitName, proofData, validity, queryResultErrors) {
|
|
1000
|
+
const currentTime = /* @__PURE__ */ new Date();
|
|
1001
|
+
const today = new Date(
|
|
1002
|
+
currentTime.getFullYear(),
|
|
1003
|
+
currentTime.getMonth(),
|
|
1004
|
+
currentTime.getDate(),
|
|
1005
|
+
0,
|
|
1006
|
+
0,
|
|
1007
|
+
0,
|
|
1008
|
+
0
|
|
1009
|
+
);
|
|
1010
|
+
const currentDate = (0, import_utils.getCurrentDateFromDisclosureProof)(proofData);
|
|
1011
|
+
const todayToCurrentDate = today.getTime() - currentDate.getTime();
|
|
1012
|
+
const expectedDifference = validity ? validity * 1e3 : DEFAULT_VALIDITY * 1e3;
|
|
1013
|
+
const actualDifference = today.getTime() - (today.getTime() - expectedDifference);
|
|
1014
|
+
let isCorrect = true;
|
|
1015
|
+
if (todayToCurrentDate >= actualDifference) {
|
|
1016
|
+
console.warn("The date used to check the validity of the ID falls out of the validity period");
|
|
1017
|
+
isCorrect = false;
|
|
1018
|
+
if (!queryResultErrors[circuitName]) {
|
|
1019
|
+
queryResultErrors[circuitName] = {};
|
|
1020
|
+
}
|
|
1021
|
+
queryResultErrors[circuitName].date = {
|
|
1022
|
+
expected: `Difference: ${validity} seconds`,
|
|
1023
|
+
received: `Difference: ${Math.round(todayToCurrentDate / 1e3)} seconds`,
|
|
1024
|
+
message: "The date used to check the validity of the ID falls out of the validity period"
|
|
1025
|
+
};
|
|
1026
|
+
}
|
|
1027
|
+
return { isCorrect, queryResultErrors };
|
|
1028
|
+
}
|
|
999
1029
|
static async checkPublicInputs(domain, proofs, queryResult, validity, scope) {
|
|
1000
1030
|
let commitmentIn;
|
|
1001
1031
|
let commitmentOut;
|
|
@@ -1124,14 +1154,9 @@ var PublicInputChecker = class {
|
|
|
1124
1154
|
if (!!committedInputs?.compare_age || !!committedInputs?.compare_age_evm) {
|
|
1125
1155
|
const ageCommittedInputs = committedInputs?.compare_age ?? committedInputs?.compare_age_evm;
|
|
1126
1156
|
const ageParameterCommitment = isForEVM ? await (0, import_utils.getAgeEVMParameterCommitment)(
|
|
1127
|
-
ageCommittedInputs.currentDateTimestamp,
|
|
1128
|
-
ageCommittedInputs.minAge,
|
|
1129
|
-
ageCommittedInputs.maxAge
|
|
1130
|
-
) : await (0, import_utils.getAgeParameterCommitment)(
|
|
1131
|
-
ageCommittedInputs.currentDateTimestamp,
|
|
1132
1157
|
ageCommittedInputs.minAge,
|
|
1133
1158
|
ageCommittedInputs.maxAge
|
|
1134
|
-
);
|
|
1159
|
+
) : await (0, import_utils.getAgeParameterCommitment)(ageCommittedInputs.minAge, ageCommittedInputs.maxAge);
|
|
1135
1160
|
if (!paramCommitments.includes(ageParameterCommitment)) {
|
|
1136
1161
|
console.warn("This proof does not verify the age");
|
|
1137
1162
|
isCorrect = false;
|
|
@@ -1155,16 +1180,12 @@ var PublicInputChecker = class {
|
|
|
1155
1180
|
const birthdateCommittedInputs = committedInputs?.compare_birthdate ?? committedInputs?.compare_birthdate_evm;
|
|
1156
1181
|
const birthdateParameterCommitment = isForEVM ? await (0, import_utils.getDateEVMParameterCommitment)(
|
|
1157
1182
|
import_utils.ProofType.BIRTHDATE,
|
|
1158
|
-
birthdateCommittedInputs.currentDateTimestamp,
|
|
1159
1183
|
birthdateCommittedInputs.minDateTimestamp,
|
|
1160
|
-
birthdateCommittedInputs.maxDateTimestamp
|
|
1161
|
-
0
|
|
1184
|
+
birthdateCommittedInputs.maxDateTimestamp
|
|
1162
1185
|
) : await (0, import_utils.getDateParameterCommitment)(
|
|
1163
1186
|
import_utils.ProofType.BIRTHDATE,
|
|
1164
|
-
birthdateCommittedInputs.currentDateTimestamp,
|
|
1165
1187
|
birthdateCommittedInputs.minDateTimestamp,
|
|
1166
|
-
birthdateCommittedInputs.maxDateTimestamp
|
|
1167
|
-
0
|
|
1188
|
+
birthdateCommittedInputs.maxDateTimestamp
|
|
1168
1189
|
);
|
|
1169
1190
|
if (!paramCommitments.includes(birthdateParameterCommitment)) {
|
|
1170
1191
|
console.warn("This proof does not verify the birthdate");
|
|
@@ -1194,7 +1215,6 @@ var PublicInputChecker = class {
|
|
|
1194
1215
|
expiryCommittedInputs.maxDateTimestamp
|
|
1195
1216
|
) : await (0, import_utils.getDateParameterCommitment)(
|
|
1196
1217
|
import_utils.ProofType.EXPIRY_DATE,
|
|
1197
|
-
expiryCommittedInputs.currentDateTimestamp,
|
|
1198
1218
|
expiryCommittedInputs.minDateTimestamp,
|
|
1199
1219
|
expiryCommittedInputs.maxDateTimestamp
|
|
1200
1220
|
);
|
|
@@ -1398,7 +1418,11 @@ var PublicInputChecker = class {
|
|
|
1398
1418
|
if (!!committedInputs?.exclusion_check_sanctions || !!committedInputs?.exclusion_check_sanctions_evm) {
|
|
1399
1419
|
const sanctionsBuilder = await import_utils.SanctionsBuilder.create();
|
|
1400
1420
|
const exclusionCheckSanctionsCommittedInputs = committedInputs?.exclusion_check_sanctions ?? committedInputs?.exclusion_check_sanctions_evm;
|
|
1401
|
-
const exclusionCheckSanctionsParameterCommitment = isForEVM ? await sanctionsBuilder.getSanctionsEvmParameterCommitment(
|
|
1421
|
+
const exclusionCheckSanctionsParameterCommitment = isForEVM ? await sanctionsBuilder.getSanctionsEvmParameterCommitment(
|
|
1422
|
+
exclusionCheckSanctionsCommittedInputs.isStrict
|
|
1423
|
+
) : await sanctionsBuilder.getSanctionsParameterCommitment(
|
|
1424
|
+
exclusionCheckSanctionsCommittedInputs.isStrict
|
|
1425
|
+
);
|
|
1402
1426
|
if (!paramCommitments.includes(exclusionCheckSanctionsParameterCommitment)) {
|
|
1403
1427
|
console.warn("This proof does not verify the exclusion from the sanction lists");
|
|
1404
1428
|
isCorrect = false;
|
|
@@ -1507,24 +1531,6 @@ var PublicInputChecker = class {
|
|
|
1507
1531
|
};
|
|
1508
1532
|
}
|
|
1509
1533
|
commitmentOut = (0, import_utils.getCommitmentOutFromIntegrityProof)(proofData);
|
|
1510
|
-
const currentDate = (0, import_utils.getCurrentDateFromIntegrityProof)(proofData);
|
|
1511
|
-
const todayToCurrentDate = today.getTime() - currentDate.getTime();
|
|
1512
|
-
const expectedDifference = validity ? validity * 1e3 : DEFAULT_VALIDITY * 1e3;
|
|
1513
|
-
const actualDifference = today.getTime() - (today.getTime() - expectedDifference);
|
|
1514
|
-
if (todayToCurrentDate >= actualDifference) {
|
|
1515
|
-
console.warn(
|
|
1516
|
-
`The date used to check the validity of the ID is older than the validity period`
|
|
1517
|
-
);
|
|
1518
|
-
isCorrect = false;
|
|
1519
|
-
queryResultErrors.data_check_integrity = {
|
|
1520
|
-
...queryResultErrors.data_check_integrity,
|
|
1521
|
-
date: {
|
|
1522
|
-
expected: `Difference: ${validity} seconds`,
|
|
1523
|
-
received: `Difference: ${Math.round(todayToCurrentDate / 1e3)} seconds`,
|
|
1524
|
-
message: "The date used to check the validity of the ID is older than the validity period"
|
|
1525
|
-
}
|
|
1526
|
-
};
|
|
1527
|
-
}
|
|
1528
1534
|
} else if (proof.name === "disclose_bytes") {
|
|
1529
1535
|
commitmentIn = (0, import_utils.getCommitmentInFromDisclosureProof)(proofData);
|
|
1530
1536
|
if (commitmentIn !== commitmentOut) {
|
|
@@ -1577,6 +1583,17 @@ var PublicInputChecker = class {
|
|
|
1577
1583
|
...queryResultErrorsDisclose,
|
|
1578
1584
|
...queryResultErrorsScope
|
|
1579
1585
|
};
|
|
1586
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1587
|
+
"disclose",
|
|
1588
|
+
proofData,
|
|
1589
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1590
|
+
queryResultErrors
|
|
1591
|
+
);
|
|
1592
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1593
|
+
queryResultErrors = {
|
|
1594
|
+
...queryResultErrors,
|
|
1595
|
+
...queryResultErrorsCurrentDate
|
|
1596
|
+
};
|
|
1580
1597
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1581
1598
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1582
1599
|
} else if (proof.name === "compare_age") {
|
|
@@ -1598,7 +1615,6 @@ var PublicInputChecker = class {
|
|
|
1598
1615
|
const paramCommitment = (0, import_utils.getParameterCommitmentFromDisclosureProof)(proofData);
|
|
1599
1616
|
const committedInputs = proof.committedInputs?.compare_age;
|
|
1600
1617
|
const calculatedParamCommitment = await (0, import_utils.getAgeParameterCommitment)(
|
|
1601
|
-
committedInputs.currentDateTimestamp,
|
|
1602
1618
|
committedInputs.minAge,
|
|
1603
1619
|
committedInputs.maxAge
|
|
1604
1620
|
);
|
|
@@ -1624,6 +1640,17 @@ var PublicInputChecker = class {
|
|
|
1624
1640
|
...queryResultErrorsAge,
|
|
1625
1641
|
...queryResultErrorsScope
|
|
1626
1642
|
};
|
|
1643
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1644
|
+
"age",
|
|
1645
|
+
proofData,
|
|
1646
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1647
|
+
queryResultErrors
|
|
1648
|
+
);
|
|
1649
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1650
|
+
queryResultErrors = {
|
|
1651
|
+
...queryResultErrors,
|
|
1652
|
+
...queryResultErrorsCurrentDate
|
|
1653
|
+
};
|
|
1627
1654
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1628
1655
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1629
1656
|
} else if (proof.name === "compare_birthdate") {
|
|
@@ -1646,7 +1673,6 @@ var PublicInputChecker = class {
|
|
|
1646
1673
|
const committedInputs = proof.committedInputs?.compare_birthdate;
|
|
1647
1674
|
const calculatedParamCommitment = await (0, import_utils.getDateParameterCommitment)(
|
|
1648
1675
|
import_utils.ProofType.BIRTHDATE,
|
|
1649
|
-
committedInputs.currentDateTimestamp,
|
|
1650
1676
|
committedInputs.minDateTimestamp,
|
|
1651
1677
|
committedInputs.maxDateTimestamp,
|
|
1652
1678
|
0
|
|
@@ -1679,6 +1705,17 @@ var PublicInputChecker = class {
|
|
|
1679
1705
|
...queryResultErrorsBirthdate,
|
|
1680
1706
|
...queryResultErrorsScope
|
|
1681
1707
|
};
|
|
1708
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1709
|
+
"birthdate",
|
|
1710
|
+
proofData,
|
|
1711
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1712
|
+
queryResultErrors
|
|
1713
|
+
);
|
|
1714
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1715
|
+
queryResultErrors = {
|
|
1716
|
+
...queryResultErrors,
|
|
1717
|
+
...queryResultErrorsCurrentDate
|
|
1718
|
+
};
|
|
1682
1719
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1683
1720
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1684
1721
|
} else if (proof.name === "compare_expiry") {
|
|
@@ -1701,7 +1738,6 @@ var PublicInputChecker = class {
|
|
|
1701
1738
|
const committedInputs = proof.committedInputs?.compare_expiry;
|
|
1702
1739
|
const calculatedParamCommitment = await (0, import_utils.getDateParameterCommitment)(
|
|
1703
1740
|
import_utils.ProofType.EXPIRY_DATE,
|
|
1704
|
-
committedInputs.currentDateTimestamp,
|
|
1705
1741
|
committedInputs.minDateTimestamp,
|
|
1706
1742
|
committedInputs.maxDateTimestamp
|
|
1707
1743
|
);
|
|
@@ -1733,6 +1769,17 @@ var PublicInputChecker = class {
|
|
|
1733
1769
|
...queryResultErrorsExpiryDate,
|
|
1734
1770
|
...queryResultErrorsScope
|
|
1735
1771
|
};
|
|
1772
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1773
|
+
"expiry_date",
|
|
1774
|
+
proofData,
|
|
1775
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1776
|
+
queryResultErrors
|
|
1777
|
+
);
|
|
1778
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1779
|
+
queryResultErrors = {
|
|
1780
|
+
...queryResultErrors,
|
|
1781
|
+
...queryResultErrorsCurrentDate
|
|
1782
|
+
};
|
|
1736
1783
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1737
1784
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1738
1785
|
} else if (proof.name === "exclusion_check_nationality") {
|
|
@@ -1789,6 +1836,17 @@ var PublicInputChecker = class {
|
|
|
1789
1836
|
...queryResultErrorsNationalityExclusion,
|
|
1790
1837
|
...queryResultErrorsScope
|
|
1791
1838
|
};
|
|
1839
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1840
|
+
"nationality",
|
|
1841
|
+
proofData,
|
|
1842
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1843
|
+
queryResultErrors
|
|
1844
|
+
);
|
|
1845
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1846
|
+
queryResultErrors = {
|
|
1847
|
+
...queryResultErrors,
|
|
1848
|
+
...queryResultErrorsCurrentDate
|
|
1849
|
+
};
|
|
1792
1850
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1793
1851
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1794
1852
|
} else if (proof.name === "exclusion_check_issuing_country") {
|
|
@@ -1845,6 +1903,17 @@ var PublicInputChecker = class {
|
|
|
1845
1903
|
...queryResultErrorsIssuingCountryExclusion,
|
|
1846
1904
|
...queryResultErrorsScope
|
|
1847
1905
|
};
|
|
1906
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1907
|
+
"issuing_country",
|
|
1908
|
+
proofData,
|
|
1909
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1910
|
+
queryResultErrors
|
|
1911
|
+
);
|
|
1912
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1913
|
+
queryResultErrors = {
|
|
1914
|
+
...queryResultErrors,
|
|
1915
|
+
...queryResultErrorsCurrentDate
|
|
1916
|
+
};
|
|
1848
1917
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1849
1918
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1850
1919
|
} else if (proof.name === "inclusion_check_nationality") {
|
|
@@ -1901,6 +1970,17 @@ var PublicInputChecker = class {
|
|
|
1901
1970
|
...queryResultErrorsNationalityInclusion,
|
|
1902
1971
|
...queryResultErrorsScope
|
|
1903
1972
|
};
|
|
1973
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1974
|
+
"nationality",
|
|
1975
|
+
proofData,
|
|
1976
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1977
|
+
queryResultErrors
|
|
1978
|
+
);
|
|
1979
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1980
|
+
queryResultErrors = {
|
|
1981
|
+
...queryResultErrors,
|
|
1982
|
+
...queryResultErrorsCurrentDate
|
|
1983
|
+
};
|
|
1904
1984
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1905
1985
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1906
1986
|
} else if (proof.name === "inclusion_check_issuing_country") {
|
|
@@ -1957,6 +2037,17 @@ var PublicInputChecker = class {
|
|
|
1957
2037
|
...queryResultErrorsIssuingCountryInclusion,
|
|
1958
2038
|
...queryResultErrorsScope
|
|
1959
2039
|
};
|
|
2040
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
2041
|
+
"issuing_country",
|
|
2042
|
+
proofData,
|
|
2043
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2044
|
+
queryResultErrors
|
|
2045
|
+
);
|
|
2046
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2047
|
+
queryResultErrors = {
|
|
2048
|
+
...queryResultErrors,
|
|
2049
|
+
...queryResultErrorsCurrentDate
|
|
2050
|
+
};
|
|
1960
2051
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1961
2052
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1962
2053
|
} else if (proof.name === "bind") {
|
|
@@ -1983,12 +2074,25 @@ var PublicInputChecker = class {
|
|
|
1983
2074
|
...queryResultErrors,
|
|
1984
2075
|
...queryResultErrorsBind
|
|
1985
2076
|
};
|
|
2077
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
2078
|
+
"bind",
|
|
2079
|
+
proofData,
|
|
2080
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2081
|
+
queryResultErrors
|
|
2082
|
+
);
|
|
2083
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2084
|
+
queryResultErrors = {
|
|
2085
|
+
...queryResultErrors,
|
|
2086
|
+
...queryResultErrorsCurrentDate
|
|
2087
|
+
};
|
|
1986
2088
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
1987
2089
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
1988
2090
|
} else if (proof.name === "exclusion_check_sanctions") {
|
|
1989
2091
|
const sanctionsBuilder = await import_utils.SanctionsBuilder.create();
|
|
1990
2092
|
const exclusionCheckSanctionsCommittedInputs = proof.committedInputs?.exclusion_check_sanctions;
|
|
1991
|
-
const calculatedParamCommitment = await sanctionsBuilder.getSanctionsParameterCommitment(
|
|
2093
|
+
const calculatedParamCommitment = await sanctionsBuilder.getSanctionsParameterCommitment(
|
|
2094
|
+
exclusionCheckSanctionsCommittedInputs.isStrict
|
|
2095
|
+
);
|
|
1992
2096
|
const paramCommittment = (0, import_utils.getParameterCommitmentFromDisclosureProof)(proofData);
|
|
1993
2097
|
if (paramCommittment !== calculatedParamCommitment) {
|
|
1994
2098
|
console.warn(
|
|
@@ -2017,6 +2121,17 @@ var PublicInputChecker = class {
|
|
|
2017
2121
|
...queryResultErrors,
|
|
2018
2122
|
...queryResultErrorsSanctionsExclusion
|
|
2019
2123
|
};
|
|
2124
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
2125
|
+
"sanctions",
|
|
2126
|
+
proofData,
|
|
2127
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2128
|
+
queryResultErrors
|
|
2129
|
+
);
|
|
2130
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2131
|
+
queryResultErrors = {
|
|
2132
|
+
...queryResultErrors,
|
|
2133
|
+
...queryResultErrorsCurrentDate
|
|
2134
|
+
};
|
|
2020
2135
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
2021
2136
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
2022
2137
|
} else if (proof.name?.startsWith("facematch") && !proof.name?.endsWith("_evm")) {
|
|
@@ -2046,6 +2161,17 @@ var PublicInputChecker = class {
|
|
|
2046
2161
|
...queryResultErrors,
|
|
2047
2162
|
...queryResultErrorsFacematch
|
|
2048
2163
|
};
|
|
2164
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
2165
|
+
"facematch",
|
|
2166
|
+
proofData,
|
|
2167
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2168
|
+
queryResultErrors
|
|
2169
|
+
);
|
|
2170
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2171
|
+
queryResultErrors = {
|
|
2172
|
+
...queryResultErrors,
|
|
2173
|
+
...queryResultErrorsCurrentDate
|
|
2174
|
+
};
|
|
2049
2175
|
uniqueIdentifier = (0, import_utils.getNullifierFromDisclosureProof)(proofData).toString(10);
|
|
2050
2176
|
uniqueIdentifierType = (0, import_utils.getNullifierTypeFromDisclosureProof)(proofData);
|
|
2051
2177
|
}
|
|
@@ -58,6 +58,7 @@ declare class PublicInputChecker {
|
|
|
58
58
|
isCorrect: boolean;
|
|
59
59
|
queryResultErrors: Partial<QueryResultErrors>;
|
|
60
60
|
}>;
|
|
61
|
+
private static checkCurrentDate;
|
|
61
62
|
static checkPublicInputs(domain: string, proofs: Array<ProofResult>, queryResult: QueryResult, validity?: number, scope?: string): Promise<{
|
|
62
63
|
isCorrect: boolean;
|
|
63
64
|
uniqueIdentifier: string | undefined;
|
|
@@ -2489,20 +2489,17 @@ var SolidityVerifier = class {
|
|
|
2489
2489
|
).map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
2490
2490
|
} else if (circuitName === "compare_age_evm") {
|
|
2491
2491
|
const value = proof.committedInputs[circuitName];
|
|
2492
|
-
|
|
2493
|
-
compressedCommittedInputs2 = import_utils.ProofType.AGE.toString(16).padStart(2, "0") + currentDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + value.minAge.toString(16).padStart(2, "0") + value.maxAge.toString(16).padStart(2, "0");
|
|
2492
|
+
compressedCommittedInputs2 = import_utils.ProofType.AGE.toString(16).padStart(2, "0") + value.minAge.toString(16).padStart(2, "0") + value.maxAge.toString(16).padStart(2, "0");
|
|
2494
2493
|
} else if (circuitName === "compare_birthdate_evm") {
|
|
2495
2494
|
const value = proof.committedInputs[circuitName];
|
|
2496
|
-
const currentDateBytes = Array.from((0, import_utils.numberToBytesBE)(value.currentDateTimestamp, 8));
|
|
2497
2495
|
const minDateBytes = Array.from((0, import_utils.numberToBytesBE)(value.minDateTimestamp, 8));
|
|
2498
2496
|
const maxDateBytes = Array.from((0, import_utils.numberToBytesBE)(value.maxDateTimestamp, 8));
|
|
2499
|
-
compressedCommittedInputs2 = import_utils.ProofType.BIRTHDATE.toString(16).padStart(2, "0") +
|
|
2497
|
+
compressedCommittedInputs2 = import_utils.ProofType.BIRTHDATE.toString(16).padStart(2, "0") + minDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + maxDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
2500
2498
|
} else if (circuitName === "compare_expiry_evm") {
|
|
2501
2499
|
const value = proof.committedInputs[circuitName];
|
|
2502
|
-
const currentDateBytes = Array.from((0, import_utils.numberToBytesBE)(value.currentDateTimestamp, 8));
|
|
2503
2500
|
const minDateBytes = Array.from((0, import_utils.numberToBytesBE)(value.minDateTimestamp, 8));
|
|
2504
2501
|
const maxDateBytes = Array.from((0, import_utils.numberToBytesBE)(value.maxDateTimestamp, 8));
|
|
2505
|
-
compressedCommittedInputs2 = import_utils.ProofType.EXPIRY_DATE.toString(16).padStart(2, "0") +
|
|
2502
|
+
compressedCommittedInputs2 = import_utils.ProofType.EXPIRY_DATE.toString(16).padStart(2, "0") + minDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + maxDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
2506
2503
|
} else if (circuitName === "disclose_bytes_evm") {
|
|
2507
2504
|
const value = proof.committedInputs[circuitName];
|
|
2508
2505
|
compressedCommittedInputs2 = import_utils.ProofType.DISCLOSE.toString(16).padStart(2, "0") + value.discloseMask.map((x) => x.toString(16).padStart(2, "0")).join("") + value.disclosedBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
getCommitmentOutFromIntegrityProof,
|
|
19
19
|
getCommitmentInFromDisclosureProof,
|
|
20
20
|
getMerkleRootFromDSCProof,
|
|
21
|
-
|
|
21
|
+
getCurrentDateFromDisclosureProof,
|
|
22
22
|
DisclosedData,
|
|
23
23
|
formatName,
|
|
24
24
|
getNumberOfPublicInputs,
|
|
@@ -1021,6 +1021,36 @@ var PublicInputChecker = class {
|
|
|
1021
1021
|
}
|
|
1022
1022
|
return { isCorrect, queryResultErrors };
|
|
1023
1023
|
}
|
|
1024
|
+
static async checkCurrentDate(circuitName, proofData, validity, queryResultErrors) {
|
|
1025
|
+
const currentTime = /* @__PURE__ */ new Date();
|
|
1026
|
+
const today = new Date(
|
|
1027
|
+
currentTime.getFullYear(),
|
|
1028
|
+
currentTime.getMonth(),
|
|
1029
|
+
currentTime.getDate(),
|
|
1030
|
+
0,
|
|
1031
|
+
0,
|
|
1032
|
+
0,
|
|
1033
|
+
0
|
|
1034
|
+
);
|
|
1035
|
+
const currentDate = getCurrentDateFromDisclosureProof(proofData);
|
|
1036
|
+
const todayToCurrentDate = today.getTime() - currentDate.getTime();
|
|
1037
|
+
const expectedDifference = validity ? validity * 1e3 : DEFAULT_VALIDITY * 1e3;
|
|
1038
|
+
const actualDifference = today.getTime() - (today.getTime() - expectedDifference);
|
|
1039
|
+
let isCorrect = true;
|
|
1040
|
+
if (todayToCurrentDate >= actualDifference) {
|
|
1041
|
+
console.warn("The date used to check the validity of the ID falls out of the validity period");
|
|
1042
|
+
isCorrect = false;
|
|
1043
|
+
if (!queryResultErrors[circuitName]) {
|
|
1044
|
+
queryResultErrors[circuitName] = {};
|
|
1045
|
+
}
|
|
1046
|
+
queryResultErrors[circuitName].date = {
|
|
1047
|
+
expected: `Difference: ${validity} seconds`,
|
|
1048
|
+
received: `Difference: ${Math.round(todayToCurrentDate / 1e3)} seconds`,
|
|
1049
|
+
message: "The date used to check the validity of the ID falls out of the validity period"
|
|
1050
|
+
};
|
|
1051
|
+
}
|
|
1052
|
+
return { isCorrect, queryResultErrors };
|
|
1053
|
+
}
|
|
1024
1054
|
static async checkPublicInputs(domain, proofs, queryResult, validity, scope) {
|
|
1025
1055
|
let commitmentIn;
|
|
1026
1056
|
let commitmentOut;
|
|
@@ -1149,14 +1179,9 @@ var PublicInputChecker = class {
|
|
|
1149
1179
|
if (!!committedInputs?.compare_age || !!committedInputs?.compare_age_evm) {
|
|
1150
1180
|
const ageCommittedInputs = committedInputs?.compare_age ?? committedInputs?.compare_age_evm;
|
|
1151
1181
|
const ageParameterCommitment = isForEVM ? await getAgeEVMParameterCommitment(
|
|
1152
|
-
ageCommittedInputs.currentDateTimestamp,
|
|
1153
|
-
ageCommittedInputs.minAge,
|
|
1154
|
-
ageCommittedInputs.maxAge
|
|
1155
|
-
) : await getAgeParameterCommitment(
|
|
1156
|
-
ageCommittedInputs.currentDateTimestamp,
|
|
1157
1182
|
ageCommittedInputs.minAge,
|
|
1158
1183
|
ageCommittedInputs.maxAge
|
|
1159
|
-
);
|
|
1184
|
+
) : await getAgeParameterCommitment(ageCommittedInputs.minAge, ageCommittedInputs.maxAge);
|
|
1160
1185
|
if (!paramCommitments.includes(ageParameterCommitment)) {
|
|
1161
1186
|
console.warn("This proof does not verify the age");
|
|
1162
1187
|
isCorrect = false;
|
|
@@ -1180,16 +1205,12 @@ var PublicInputChecker = class {
|
|
|
1180
1205
|
const birthdateCommittedInputs = committedInputs?.compare_birthdate ?? committedInputs?.compare_birthdate_evm;
|
|
1181
1206
|
const birthdateParameterCommitment = isForEVM ? await getDateEVMParameterCommitment(
|
|
1182
1207
|
ProofType.BIRTHDATE,
|
|
1183
|
-
birthdateCommittedInputs.currentDateTimestamp,
|
|
1184
1208
|
birthdateCommittedInputs.minDateTimestamp,
|
|
1185
|
-
birthdateCommittedInputs.maxDateTimestamp
|
|
1186
|
-
0
|
|
1209
|
+
birthdateCommittedInputs.maxDateTimestamp
|
|
1187
1210
|
) : await getDateParameterCommitment(
|
|
1188
1211
|
ProofType.BIRTHDATE,
|
|
1189
|
-
birthdateCommittedInputs.currentDateTimestamp,
|
|
1190
1212
|
birthdateCommittedInputs.minDateTimestamp,
|
|
1191
|
-
birthdateCommittedInputs.maxDateTimestamp
|
|
1192
|
-
0
|
|
1213
|
+
birthdateCommittedInputs.maxDateTimestamp
|
|
1193
1214
|
);
|
|
1194
1215
|
if (!paramCommitments.includes(birthdateParameterCommitment)) {
|
|
1195
1216
|
console.warn("This proof does not verify the birthdate");
|
|
@@ -1219,7 +1240,6 @@ var PublicInputChecker = class {
|
|
|
1219
1240
|
expiryCommittedInputs.maxDateTimestamp
|
|
1220
1241
|
) : await getDateParameterCommitment(
|
|
1221
1242
|
ProofType.EXPIRY_DATE,
|
|
1222
|
-
expiryCommittedInputs.currentDateTimestamp,
|
|
1223
1243
|
expiryCommittedInputs.minDateTimestamp,
|
|
1224
1244
|
expiryCommittedInputs.maxDateTimestamp
|
|
1225
1245
|
);
|
|
@@ -1423,7 +1443,11 @@ var PublicInputChecker = class {
|
|
|
1423
1443
|
if (!!committedInputs?.exclusion_check_sanctions || !!committedInputs?.exclusion_check_sanctions_evm) {
|
|
1424
1444
|
const sanctionsBuilder = await SanctionsBuilder.create();
|
|
1425
1445
|
const exclusionCheckSanctionsCommittedInputs = committedInputs?.exclusion_check_sanctions ?? committedInputs?.exclusion_check_sanctions_evm;
|
|
1426
|
-
const exclusionCheckSanctionsParameterCommitment = isForEVM ? await sanctionsBuilder.getSanctionsEvmParameterCommitment(
|
|
1446
|
+
const exclusionCheckSanctionsParameterCommitment = isForEVM ? await sanctionsBuilder.getSanctionsEvmParameterCommitment(
|
|
1447
|
+
exclusionCheckSanctionsCommittedInputs.isStrict
|
|
1448
|
+
) : await sanctionsBuilder.getSanctionsParameterCommitment(
|
|
1449
|
+
exclusionCheckSanctionsCommittedInputs.isStrict
|
|
1450
|
+
);
|
|
1427
1451
|
if (!paramCommitments.includes(exclusionCheckSanctionsParameterCommitment)) {
|
|
1428
1452
|
console.warn("This proof does not verify the exclusion from the sanction lists");
|
|
1429
1453
|
isCorrect = false;
|
|
@@ -1532,24 +1556,6 @@ var PublicInputChecker = class {
|
|
|
1532
1556
|
};
|
|
1533
1557
|
}
|
|
1534
1558
|
commitmentOut = getCommitmentOutFromIntegrityProof(proofData);
|
|
1535
|
-
const currentDate = getCurrentDateFromIntegrityProof(proofData);
|
|
1536
|
-
const todayToCurrentDate = today.getTime() - currentDate.getTime();
|
|
1537
|
-
const expectedDifference = validity ? validity * 1e3 : DEFAULT_VALIDITY * 1e3;
|
|
1538
|
-
const actualDifference = today.getTime() - (today.getTime() - expectedDifference);
|
|
1539
|
-
if (todayToCurrentDate >= actualDifference) {
|
|
1540
|
-
console.warn(
|
|
1541
|
-
`The date used to check the validity of the ID is older than the validity period`
|
|
1542
|
-
);
|
|
1543
|
-
isCorrect = false;
|
|
1544
|
-
queryResultErrors.data_check_integrity = {
|
|
1545
|
-
...queryResultErrors.data_check_integrity,
|
|
1546
|
-
date: {
|
|
1547
|
-
expected: `Difference: ${validity} seconds`,
|
|
1548
|
-
received: `Difference: ${Math.round(todayToCurrentDate / 1e3)} seconds`,
|
|
1549
|
-
message: "The date used to check the validity of the ID is older than the validity period"
|
|
1550
|
-
}
|
|
1551
|
-
};
|
|
1552
|
-
}
|
|
1553
1559
|
} else if (proof.name === "disclose_bytes") {
|
|
1554
1560
|
commitmentIn = getCommitmentInFromDisclosureProof(proofData);
|
|
1555
1561
|
if (commitmentIn !== commitmentOut) {
|
|
@@ -1602,6 +1608,17 @@ var PublicInputChecker = class {
|
|
|
1602
1608
|
...queryResultErrorsDisclose,
|
|
1603
1609
|
...queryResultErrorsScope
|
|
1604
1610
|
};
|
|
1611
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1612
|
+
"disclose",
|
|
1613
|
+
proofData,
|
|
1614
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1615
|
+
queryResultErrors
|
|
1616
|
+
);
|
|
1617
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1618
|
+
queryResultErrors = {
|
|
1619
|
+
...queryResultErrors,
|
|
1620
|
+
...queryResultErrorsCurrentDate
|
|
1621
|
+
};
|
|
1605
1622
|
uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
|
|
1606
1623
|
uniqueIdentifierType = getNullifierTypeFromDisclosureProof(proofData);
|
|
1607
1624
|
} else if (proof.name === "compare_age") {
|
|
@@ -1623,7 +1640,6 @@ var PublicInputChecker = class {
|
|
|
1623
1640
|
const paramCommitment = getParameterCommitmentFromDisclosureProof(proofData);
|
|
1624
1641
|
const committedInputs = proof.committedInputs?.compare_age;
|
|
1625
1642
|
const calculatedParamCommitment = await getAgeParameterCommitment(
|
|
1626
|
-
committedInputs.currentDateTimestamp,
|
|
1627
1643
|
committedInputs.minAge,
|
|
1628
1644
|
committedInputs.maxAge
|
|
1629
1645
|
);
|
|
@@ -1649,6 +1665,17 @@ var PublicInputChecker = class {
|
|
|
1649
1665
|
...queryResultErrorsAge,
|
|
1650
1666
|
...queryResultErrorsScope
|
|
1651
1667
|
};
|
|
1668
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1669
|
+
"age",
|
|
1670
|
+
proofData,
|
|
1671
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1672
|
+
queryResultErrors
|
|
1673
|
+
);
|
|
1674
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1675
|
+
queryResultErrors = {
|
|
1676
|
+
...queryResultErrors,
|
|
1677
|
+
...queryResultErrorsCurrentDate
|
|
1678
|
+
};
|
|
1652
1679
|
uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
|
|
1653
1680
|
uniqueIdentifierType = getNullifierTypeFromDisclosureProof(proofData);
|
|
1654
1681
|
} else if (proof.name === "compare_birthdate") {
|
|
@@ -1671,7 +1698,6 @@ var PublicInputChecker = class {
|
|
|
1671
1698
|
const committedInputs = proof.committedInputs?.compare_birthdate;
|
|
1672
1699
|
const calculatedParamCommitment = await getDateParameterCommitment(
|
|
1673
1700
|
ProofType.BIRTHDATE,
|
|
1674
|
-
committedInputs.currentDateTimestamp,
|
|
1675
1701
|
committedInputs.minDateTimestamp,
|
|
1676
1702
|
committedInputs.maxDateTimestamp,
|
|
1677
1703
|
0
|
|
@@ -1704,6 +1730,17 @@ var PublicInputChecker = class {
|
|
|
1704
1730
|
...queryResultErrorsBirthdate,
|
|
1705
1731
|
...queryResultErrorsScope
|
|
1706
1732
|
};
|
|
1733
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1734
|
+
"birthdate",
|
|
1735
|
+
proofData,
|
|
1736
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1737
|
+
queryResultErrors
|
|
1738
|
+
);
|
|
1739
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1740
|
+
queryResultErrors = {
|
|
1741
|
+
...queryResultErrors,
|
|
1742
|
+
...queryResultErrorsCurrentDate
|
|
1743
|
+
};
|
|
1707
1744
|
uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
|
|
1708
1745
|
uniqueIdentifierType = getNullifierTypeFromDisclosureProof(proofData);
|
|
1709
1746
|
} else if (proof.name === "compare_expiry") {
|
|
@@ -1726,7 +1763,6 @@ var PublicInputChecker = class {
|
|
|
1726
1763
|
const committedInputs = proof.committedInputs?.compare_expiry;
|
|
1727
1764
|
const calculatedParamCommitment = await getDateParameterCommitment(
|
|
1728
1765
|
ProofType.EXPIRY_DATE,
|
|
1729
|
-
committedInputs.currentDateTimestamp,
|
|
1730
1766
|
committedInputs.minDateTimestamp,
|
|
1731
1767
|
committedInputs.maxDateTimestamp
|
|
1732
1768
|
);
|
|
@@ -1758,6 +1794,17 @@ var PublicInputChecker = class {
|
|
|
1758
1794
|
...queryResultErrorsExpiryDate,
|
|
1759
1795
|
...queryResultErrorsScope
|
|
1760
1796
|
};
|
|
1797
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1798
|
+
"expiry_date",
|
|
1799
|
+
proofData,
|
|
1800
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1801
|
+
queryResultErrors
|
|
1802
|
+
);
|
|
1803
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1804
|
+
queryResultErrors = {
|
|
1805
|
+
...queryResultErrors,
|
|
1806
|
+
...queryResultErrorsCurrentDate
|
|
1807
|
+
};
|
|
1761
1808
|
uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
|
|
1762
1809
|
uniqueIdentifierType = getNullifierTypeFromDisclosureProof(proofData);
|
|
1763
1810
|
} else if (proof.name === "exclusion_check_nationality") {
|
|
@@ -1814,6 +1861,17 @@ var PublicInputChecker = class {
|
|
|
1814
1861
|
...queryResultErrorsNationalityExclusion,
|
|
1815
1862
|
...queryResultErrorsScope
|
|
1816
1863
|
};
|
|
1864
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1865
|
+
"nationality",
|
|
1866
|
+
proofData,
|
|
1867
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1868
|
+
queryResultErrors
|
|
1869
|
+
);
|
|
1870
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1871
|
+
queryResultErrors = {
|
|
1872
|
+
...queryResultErrors,
|
|
1873
|
+
...queryResultErrorsCurrentDate
|
|
1874
|
+
};
|
|
1817
1875
|
uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
|
|
1818
1876
|
uniqueIdentifierType = getNullifierTypeFromDisclosureProof(proofData);
|
|
1819
1877
|
} else if (proof.name === "exclusion_check_issuing_country") {
|
|
@@ -1870,6 +1928,17 @@ var PublicInputChecker = class {
|
|
|
1870
1928
|
...queryResultErrorsIssuingCountryExclusion,
|
|
1871
1929
|
...queryResultErrorsScope
|
|
1872
1930
|
};
|
|
1931
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1932
|
+
"issuing_country",
|
|
1933
|
+
proofData,
|
|
1934
|
+
validity ?? DEFAULT_VALIDITY,
|
|
1935
|
+
queryResultErrors
|
|
1936
|
+
);
|
|
1937
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
1938
|
+
queryResultErrors = {
|
|
1939
|
+
...queryResultErrors,
|
|
1940
|
+
...queryResultErrorsCurrentDate
|
|
1941
|
+
};
|
|
1873
1942
|
uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
|
|
1874
1943
|
uniqueIdentifierType = getNullifierTypeFromDisclosureProof(proofData);
|
|
1875
1944
|
} else if (proof.name === "inclusion_check_nationality") {
|
|
@@ -1926,6 +1995,17 @@ var PublicInputChecker = class {
|
|
|
1926
1995
|
...queryResultErrorsNationalityInclusion,
|
|
1927
1996
|
...queryResultErrorsScope
|
|
1928
1997
|
};
|
|
1998
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
1999
|
+
"nationality",
|
|
2000
|
+
proofData,
|
|
2001
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2002
|
+
queryResultErrors
|
|
2003
|
+
);
|
|
2004
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2005
|
+
queryResultErrors = {
|
|
2006
|
+
...queryResultErrors,
|
|
2007
|
+
...queryResultErrorsCurrentDate
|
|
2008
|
+
};
|
|
1929
2009
|
uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
|
|
1930
2010
|
uniqueIdentifierType = getNullifierTypeFromDisclosureProof(proofData);
|
|
1931
2011
|
} else if (proof.name === "inclusion_check_issuing_country") {
|
|
@@ -1982,6 +2062,17 @@ var PublicInputChecker = class {
|
|
|
1982
2062
|
...queryResultErrorsIssuingCountryInclusion,
|
|
1983
2063
|
...queryResultErrorsScope
|
|
1984
2064
|
};
|
|
2065
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
2066
|
+
"issuing_country",
|
|
2067
|
+
proofData,
|
|
2068
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2069
|
+
queryResultErrors
|
|
2070
|
+
);
|
|
2071
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2072
|
+
queryResultErrors = {
|
|
2073
|
+
...queryResultErrors,
|
|
2074
|
+
...queryResultErrorsCurrentDate
|
|
2075
|
+
};
|
|
1985
2076
|
uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
|
|
1986
2077
|
uniqueIdentifierType = getNullifierTypeFromDisclosureProof(proofData);
|
|
1987
2078
|
} else if (proof.name === "bind") {
|
|
@@ -2008,12 +2099,25 @@ var PublicInputChecker = class {
|
|
|
2008
2099
|
...queryResultErrors,
|
|
2009
2100
|
...queryResultErrorsBind
|
|
2010
2101
|
};
|
|
2102
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
2103
|
+
"bind",
|
|
2104
|
+
proofData,
|
|
2105
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2106
|
+
queryResultErrors
|
|
2107
|
+
);
|
|
2108
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2109
|
+
queryResultErrors = {
|
|
2110
|
+
...queryResultErrors,
|
|
2111
|
+
...queryResultErrorsCurrentDate
|
|
2112
|
+
};
|
|
2011
2113
|
uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
|
|
2012
2114
|
uniqueIdentifierType = getNullifierTypeFromDisclosureProof(proofData);
|
|
2013
2115
|
} else if (proof.name === "exclusion_check_sanctions") {
|
|
2014
2116
|
const sanctionsBuilder = await SanctionsBuilder.create();
|
|
2015
2117
|
const exclusionCheckSanctionsCommittedInputs = proof.committedInputs?.exclusion_check_sanctions;
|
|
2016
|
-
const calculatedParamCommitment = await sanctionsBuilder.getSanctionsParameterCommitment(
|
|
2118
|
+
const calculatedParamCommitment = await sanctionsBuilder.getSanctionsParameterCommitment(
|
|
2119
|
+
exclusionCheckSanctionsCommittedInputs.isStrict
|
|
2120
|
+
);
|
|
2017
2121
|
const paramCommittment = getParameterCommitmentFromDisclosureProof(proofData);
|
|
2018
2122
|
if (paramCommittment !== calculatedParamCommitment) {
|
|
2019
2123
|
console.warn(
|
|
@@ -2042,6 +2146,17 @@ var PublicInputChecker = class {
|
|
|
2042
2146
|
...queryResultErrors,
|
|
2043
2147
|
...queryResultErrorsSanctionsExclusion
|
|
2044
2148
|
};
|
|
2149
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
2150
|
+
"sanctions",
|
|
2151
|
+
proofData,
|
|
2152
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2153
|
+
queryResultErrors
|
|
2154
|
+
);
|
|
2155
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2156
|
+
queryResultErrors = {
|
|
2157
|
+
...queryResultErrors,
|
|
2158
|
+
...queryResultErrorsCurrentDate
|
|
2159
|
+
};
|
|
2045
2160
|
uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
|
|
2046
2161
|
uniqueIdentifierType = getNullifierTypeFromDisclosureProof(proofData);
|
|
2047
2162
|
} else if (proof.name?.startsWith("facematch") && !proof.name?.endsWith("_evm")) {
|
|
@@ -2071,6 +2186,17 @@ var PublicInputChecker = class {
|
|
|
2071
2186
|
...queryResultErrors,
|
|
2072
2187
|
...queryResultErrorsFacematch
|
|
2073
2188
|
};
|
|
2189
|
+
const { isCorrect: isCorrectCurrentDate, queryResultErrors: queryResultErrorsCurrentDate } = await this.checkCurrentDate(
|
|
2190
|
+
"facematch",
|
|
2191
|
+
proofData,
|
|
2192
|
+
validity ?? DEFAULT_VALIDITY,
|
|
2193
|
+
queryResultErrors
|
|
2194
|
+
);
|
|
2195
|
+
isCorrect = isCorrect && isCorrectCurrentDate;
|
|
2196
|
+
queryResultErrors = {
|
|
2197
|
+
...queryResultErrors,
|
|
2198
|
+
...queryResultErrorsCurrentDate
|
|
2199
|
+
};
|
|
2074
2200
|
uniqueIdentifier = getNullifierFromDisclosureProof(proofData).toString(10);
|
|
2075
2201
|
uniqueIdentifierType = getNullifierTypeFromDisclosureProof(proofData);
|
|
2076
2202
|
}
|
|
@@ -2473,20 +2473,17 @@ var SolidityVerifier = class {
|
|
|
2473
2473
|
).map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
2474
2474
|
} else if (circuitName === "compare_age_evm") {
|
|
2475
2475
|
const value = proof.committedInputs[circuitName];
|
|
2476
|
-
|
|
2477
|
-
compressedCommittedInputs2 = ProofType.AGE.toString(16).padStart(2, "0") + currentDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + value.minAge.toString(16).padStart(2, "0") + value.maxAge.toString(16).padStart(2, "0");
|
|
2476
|
+
compressedCommittedInputs2 = ProofType.AGE.toString(16).padStart(2, "0") + value.minAge.toString(16).padStart(2, "0") + value.maxAge.toString(16).padStart(2, "0");
|
|
2478
2477
|
} else if (circuitName === "compare_birthdate_evm") {
|
|
2479
2478
|
const value = proof.committedInputs[circuitName];
|
|
2480
|
-
const currentDateBytes = Array.from(numberToBytesBE(value.currentDateTimestamp, 8));
|
|
2481
2479
|
const minDateBytes = Array.from(numberToBytesBE(value.minDateTimestamp, 8));
|
|
2482
2480
|
const maxDateBytes = Array.from(numberToBytesBE(value.maxDateTimestamp, 8));
|
|
2483
|
-
compressedCommittedInputs2 = ProofType.BIRTHDATE.toString(16).padStart(2, "0") +
|
|
2481
|
+
compressedCommittedInputs2 = ProofType.BIRTHDATE.toString(16).padStart(2, "0") + minDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + maxDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
2484
2482
|
} else if (circuitName === "compare_expiry_evm") {
|
|
2485
2483
|
const value = proof.committedInputs[circuitName];
|
|
2486
|
-
const currentDateBytes = Array.from(numberToBytesBE(value.currentDateTimestamp, 8));
|
|
2487
2484
|
const minDateBytes = Array.from(numberToBytesBE(value.minDateTimestamp, 8));
|
|
2488
2485
|
const maxDateBytes = Array.from(numberToBytesBE(value.maxDateTimestamp, 8));
|
|
2489
|
-
compressedCommittedInputs2 = ProofType.EXPIRY_DATE.toString(16).padStart(2, "0") +
|
|
2486
|
+
compressedCommittedInputs2 = ProofType.EXPIRY_DATE.toString(16).padStart(2, "0") + minDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + maxDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
2490
2487
|
} else if (circuitName === "disclose_bytes_evm") {
|
|
2491
2488
|
const value = proof.committedInputs[circuitName];
|
|
2492
2489
|
compressedCommittedInputs2 = ProofType.DISCLOSE.toString(16).padStart(2, "0") + value.discloseMask.map((x) => x.toString(16).padStart(2, "0")).join("") + value.disclosedBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
|
package/dist/esm/index.js
CHANGED
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
} from "./chunk-AFLQN3AC.js";
|
|
4
4
|
import {
|
|
5
5
|
PublicInputChecker
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-6FIXE2II.js";
|
|
7
7
|
import {
|
|
8
8
|
SolidityVerifier
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-7UUZHRZ3.js";
|
|
10
10
|
import {
|
|
11
11
|
DEFAULT_VALIDITY,
|
|
12
12
|
VERSION
|
|
@@ -58,6 +58,7 @@ declare class PublicInputChecker {
|
|
|
58
58
|
isCorrect: boolean;
|
|
59
59
|
queryResultErrors: Partial<QueryResultErrors>;
|
|
60
60
|
}>;
|
|
61
|
+
private static checkCurrentDate;
|
|
61
62
|
static checkPublicInputs(domain: string, proofs: Array<ProofResult>, queryResult: QueryResult, validity?: number, scope?: string): Promise<{
|
|
62
63
|
isCorrect: boolean;
|
|
63
64
|
uniqueIdentifier: string | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zkpassport/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0-beta.1",
|
|
4
4
|
"description": "Privacy-preserving identity verification using passports and ID cards",
|
|
5
5
|
"author": "ZKPassport",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
"@noble/ciphers": "^1.2.1",
|
|
36
36
|
"@noble/hashes": "^1.7.2",
|
|
37
37
|
"@noble/secp256k1": "^2.2.3",
|
|
38
|
-
"@obsidion/bridge": "
|
|
38
|
+
"@obsidion/bridge": "0.11.1",
|
|
39
39
|
"@zkpassport/registry": "0.11.1",
|
|
40
|
-
"@zkpassport/utils": "0.
|
|
40
|
+
"@zkpassport/utils": "0.28.0",
|
|
41
41
|
"buffer": "^6.0.3",
|
|
42
42
|
"i18n-iso-countries": "^7.12.0",
|
|
43
43
|
"pako": "^2.1.0",
|