Skip to content
Closed
2 changes: 1 addition & 1 deletion circuits/scripts/build/build_disclose_circuits.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ OUTPUT_DIR="build/${CIRCUIT_TYPE}"
CIRCUITS=(
# "vc_and_disclose:20:true"
# "vc_and_disclose_id:20:true"
"vc_and_disclose_aadhaar:20:true"
"vc_and_disclose_aadhaar:17:true"
)

build_circuits "$CIRCUIT_TYPE" "$OUTPUT_DIR" "${CIRCUITS[@]}"
Expand Down
118 changes: 74 additions & 44 deletions circuits/tests/register/pubkeys.ts
Original file line number Diff line number Diff line change
@@ -1,49 +1,5 @@
export const pubkeys = [
`-----BEGIN CERTIFICATE-----
MIIHwjCCBqqgAwIBAgIEU5laMzANBgkqhkiG9w0BAQsFADCB/DELMAkGA1UEBhMC
SU4xQTA/BgNVBAoTOEd1amFyYXQgTmFybWFkYSBWYWxsZXkgRmVydGlsaXplcnMg
YW5kIENoZW1pY2FscyBMaW1pdGVkMR0wGwYDVQQLExRDZXJ0aWZ5aW5nIEF1dGhv
cml0eTEPMA0GA1UEERMGMzgwMDU0MRAwDgYDVQQIEwdHdWphcmF0MSYwJAYDVQQJ
Ex1Cb2Rha2RldiwgUyBHIFJvYWQsIEFobWVkYWJhZDEcMBoGA1UEMxMTMzAxLCBH
TkZDIEluZm90b3dlcjEiMCAGA1UEAxMZKG4pQ29kZSBTb2x1dGlvbnMgQ0EgMjAx
NDAeFw0yMTAyMjYxMTU0MjRaFw0yNDAyMjcwMDI3MTFaMIHdMQswCQYDVQQGEwJJ
TjExMC8GA1UEChMoVU5JUVVFIElERU5USUZJQ0FUSU9OIEFVVEhPUklUWSBPRiBJ
TkRJQTEPMA0GA1UEERMGMTEwMDAxMQ4wDAYDVQQIEwVEZWxoaTEbMBkGA1UECRMS
QkVISU5EIEtBTEkgTUFORElSMSQwIgYDVQQzExtBQURIQVIgSFEgQkFOR0xBIFNB
SElCIFJPQUQxNzA1BgNVBAMTLkRTIFVOSVFVRSBJREVOVElGSUNBVElPTiBBVVRI
T1JJVFkgT0YgSU5ESUEgMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQCiciwOXy3lunB+2T8DbsKx8LlVkyOQ+swPC8vyDIChXAiLSIaGa3LrJasL9Vov
4Gtp7b1cyDt0x3CdshQebAfGi834WdPa9/P87SQdByBV3BVIhHS0XCyYL6lUqlKq
b/+ySBhhxlCF2EtkFY6fQ9nzXKabSM6TAFIhAqTK4JO//UdLCNMtHQQG9of35VvS
JqI4S/WKQcOEw5dPHHxRFYGckm3jrfPsu5kExIbx9dUwOXe+pjWENnMptcFor9yV
Ehcx9/SNQ6988x9pseO755Sdx6ixDAvd66ur3r6gdqHPgWat8GqKQd7fFDv/g129
K9W7C2HSRywjSm1EEbybU2CVAgMBAAGjggNnMIIDYzAOBgNVHQ8BAf8EBAMCBsAw
KgYDVR0lBCMwIQYIKwYBBQUHAwQGCisGAQQBgjcKAwwGCSqGSIb3LwEBBTCCAQIG
A1UdIASB+jCB9zCBhgYGYIJkZAICMHwwegYIKwYBBQUHAgIwbgxsQ2xhc3MgMiBj
ZXJ0aWZpY2F0ZXMgYXJlIHVzZWQgZm9yIGZvcm0gc2lnbmluZywgZm9ybSBhdXRo
ZW50aWNhdGlvbiBhbmQgc2lnbmluZyBvdGhlciBsb3cgcmlzayB0cmFuc2FjdGlv
bnMuMGwGBmCCZGQKATBiMGAGCCsGAQUFBwICMFQMUlRoaXMgY2VydGlmaWNhdGUg
cHJvdmlkZXMgaGlnaGVyIGxldmVsIG9mIGFzc3VyYW5jZSBmb3IgZG9jdW1lbnQg
c2lnbmluZyBmdW5jdGlvbi4wDAYDVR0TAQH/BAIwADAjBgNVHREEHDAagRhyYWh1
bC5rdW1hckB1aWRhaS5uZXQuaW4wggFuBgNVHR8EggFlMIIBYTCCAR6gggEaoIIB
FqSCARIwggEOMQswCQYDVQQGEwJJTjFBMD8GA1UEChM4R3VqYXJhdCBOYXJtYWRh
IFZhbGxleSBGZXJ0aWxpemVycyBhbmQgQ2hlbWljYWxzIExpbWl0ZWQxHTAbBgNV
BAsTFENlcnRpZnlpbmcgQXV0aG9yaXR5MQ8wDQYDVQQREwYzODAwNTQxEDAOBgNV
BAgTB0d1amFyYXQxJjAkBgNVBAkTHUJvZGFrZGV2LCBTIEcgUm9hZCwgQWhtZWRh
YmFkMRwwGgYDVQQzExMzMDEsIEdORkMgSW5mb3Rvd2VyMSIwIAYDVQQDExkobilD
b2RlIFNvbHV0aW9ucyBDQSAyMDE0MRAwDgYDVQQDEwdDUkw1Njk0MD2gO6A5hjdo
dHRwczovL3d3dy5uY29kZXNvbHV0aW9ucy5jb20vcmVwb3NpdG9yeS9uY29kZWNh
MTQuY3JsMCsGA1UdEAQkMCKADzIwMjEwMjI2MTE1NDI0WoEPMjAyNDAyMjcwMDI3
MTFaMBMGA1UdIwQMMAqACE0HvvGenfu9MB0GA1UdDgQWBBTpS5Cfqf2zdwqjupLA
qMwk/bqX9DAZBgkqhkiG9n0HQQAEDDAKGwRWOC4xAwIDKDANBgkqhkiG9w0BAQsF
AAOCAQEAbTlOC4sonzb44+u5+VZ3wGz3OFg0uJGsufbBu5efh7kO2DlYnx7okdEf
ayQQs6AUzDvsH1yBSBjsaZo3fwBgQUIMaNKdKSrRI0eOTDqilizldHqj113f4eUz
U2j4okcNSF7TxQWMjxwyM86QsQ6vxZK7arhBhVjwp443+pxfSIdFUu428K6yH4JB
GhZSzWuqD6GNhOhDzS+sS23MkwHFq0GX4erhVfN/W7XLeSjzF4zmjg+O77vTySCN
e2VRYDrfFS8EAOcO4q7szc7+6xdg8RlgzoZHoRG/GqUp9inpJUn7OIzhHi2e8Mll
aMdtXo0nbr150tMe8ZSvY2fMiTCY1w==
-----END CERTIFICATE-----`,
`-----BEGIN CERTIFICATE-----
MIIHCjCCBfKgAwIBAgIEYklh9TANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UEBhMC
SU4xQTA/BgNVBAoTOEd1amFyYXQgTmFybWFkYSBWYWxsZXkgRmVydGlsaXplcnMg
YW5kIENoZW1pY2FscyBMaW1pdGVkMQ8wDQYDVQQLEwZTdWItQ0ExLjAsBgNVBAMT
Expand Down Expand Up @@ -122,6 +78,51 @@ d5PKhaNTJUCnoF6djlW8cf6eten7l21iBtFNAvKBfikmBOMZXe6cB+9ShOCOKz5zSzUwW+eZHSM4
3qCQ9G39img=
-----END CERTIFICATE-----`,
`-----BEGIN CERTIFICATE-----
MIIHwjCCBqqgAwIBAgIEU5laMzANBgkqhkiG9w0BAQsFADCB/DELMAkGA1UEBhMC
SU4xQTA/BgNVBAoTOEd1amFyYXQgTmFybWFkYSBWYWxsZXkgRmVydGlsaXplcnMg
YW5kIENoZW1pY2FscyBMaW1pdGVkMR0wGwYDVQQLExRDZXJ0aWZ5aW5nIEF1dGhv
cml0eTEPMA0GA1UEERMGMzgwMDU0MRAwDgYDVQQIEwdHdWphcmF0MSYwJAYDVQQJ
Ex1Cb2Rha2RldiwgUyBHIFJvYWQsIEFobWVkYWJhZDEcMBoGA1UEMxMTMzAxLCBH
TkZDIEluZm90b3dlcjEiMCAGA1UEAxMZKG4pQ29kZSBTb2x1dGlvbnMgQ0EgMjAx
NDAeFw0yMTAyMjYxMTU0MjRaFw0yNDAyMjcwMDI3MTFaMIHdMQswCQYDVQQGEwJJ
TjExMC8GA1UEChMoVU5JUVVFIElERU5USUZJQ0FUSU9OIEFVVEhPUklUWSBPRiBJ
TkRJQTEPMA0GA1UEERMGMTEwMDAxMQ4wDAYDVQQIEwVEZWxoaTEbMBkGA1UECRMS
QkVISU5EIEtBTEkgTUFORElSMSQwIgYDVQQzExtBQURIQVIgSFEgQkFOR0xBIFNB
SElCIFJPQUQxNzA1BgNVBAMTLkRTIFVOSVFVRSBJREVOVElGSUNBVElPTiBBVVRI
T1JJVFkgT0YgSU5ESUEgMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQCiciwOXy3lunB+2T8DbsKx8LlVkyOQ+swPC8vyDIChXAiLSIaGa3LrJasL9Vov
4Gtp7b1cyDt0x3CdshQebAfGi834WdPa9/P87SQdByBV3BVIhHS0XCyYL6lUqlKq
b/+ySBhhxlCF2EtkFY6fQ9nzXKabSM6TAFIhAqTK4JO//UdLCNMtHQQG9of35VvS
JqI4S/WKQcOEw5dPHHxRFYGckm3jrfPsu5kExIbx9dUwOXe+pjWENnMptcFor9yV
Ehcx9/SNQ6988x9pseO755Sdx6ixDAvd66ur3r6gdqHPgWat8GqKQd7fFDv/g129
K9W7C2HSRywjSm1EEbybU2CVAgMBAAGjggNnMIIDYzAOBgNVHQ8BAf8EBAMCBsAw
KgYDVR0lBCMwIQYIKwYBBQUHAwQGCisGAQQBgjcKAwwGCSqGSIb3LwEBBTCCAQIG
A1UdIASB+jCB9zCBhgYGYIJkZAICMHwwegYIKwYBBQUHAgIwbgxsQ2xhc3MgMiBj
ZXJ0aWZpY2F0ZXMgYXJlIHVzZWQgZm9yIGZvcm0gc2lnbmluZywgZm9ybSBhdXRo
ZW50aWNhdGlvbiBhbmQgc2lnbmluZyBvdGhlciBsb3cgcmlzayB0cmFuc2FjdGlv
bnMuMGwGBmCCZGQKATBiMGAGCCsGAQUFBwICMFQMUlRoaXMgY2VydGlmaWNhdGUg
cHJvdmlkZXMgaGlnaGVyIGxldmVsIG9mIGFzc3VyYW5jZSBmb3IgZG9jdW1lbnQg
c2lnbmluZyBmdW5jdGlvbi4wDAYDVR0TAQH/BAIwADAjBgNVHREEHDAagRhyYWh1
bC5rdW1hckB1aWRhaS5uZXQuaW4wggFuBgNVHR8EggFlMIIBYTCCAR6gggEaoIIB
FqSCARIwggEOMQswCQYDVQQGEwJJTjFBMD8GA1UEChM4R3VqYXJhdCBOYXJtYWRh
IFZhbGxleSBGZXJ0aWxpemVycyBhbmQgQ2hlbWljYWxzIExpbWl0ZWQxHTAbBgNV
BAsTFENlcnRpZnlpbmcgQXV0aG9yaXR5MQ8wDQYDVQQREwYzODAwNTQxEDAOBgNV
BAgTB0d1amFyYXQxJjAkBgNVBAkTHUJvZGFrZGV2LCBTIEcgUm9hZCwgQWhtZWRh
YmFkMRwwGgYDVQQzExMzMDEsIEdORkMgSW5mb3Rvd2VyMSIwIAYDVQQDExkobilD
b2RlIFNvbHV0aW9ucyBDQSAyMDE0MRAwDgYDVQQDEwdDUkw1Njk0MD2gO6A5hjdo
dHRwczovL3d3dy5uY29kZXNvbHV0aW9ucy5jb20vcmVwb3NpdG9yeS9uY29kZWNh
MTQuY3JsMCsGA1UdEAQkMCKADzIwMjEwMjI2MTE1NDI0WoEPMjAyNDAyMjcwMDI3
MTFaMBMGA1UdIwQMMAqACE0HvvGenfu9MB0GA1UdDgQWBBTpS5Cfqf2zdwqjupLA
qMwk/bqX9DAZBgkqhkiG9n0HQQAEDDAKGwRWOC4xAwIDKDANBgkqhkiG9w0BAQsF
AAOCAQEAbTlOC4sonzb44+u5+VZ3wGz3OFg0uJGsufbBu5efh7kO2DlYnx7okdEf
ayQQs6AUzDvsH1yBSBjsaZo3fwBgQUIMaNKdKSrRI0eOTDqilizldHqj113f4eUz
U2j4okcNSF7TxQWMjxwyM86QsQ6vxZK7arhBhVjwp443+pxfSIdFUu428K6yH4JB
GhZSzWuqD6GNhOhDzS+sS23MkwHFq0GX4erhVfN/W7XLeSjzF4zmjg+O77vTySCN
e2VRYDrfFS8EAOcO4q7szc7+6xdg8RlgzoZHoRG/GqUp9inpJUn7OIzhHi2e8Mll
aMdtXo0nbr150tMe8ZSvY2fMiTCY1w==
-----END CERTIFICATE-----
`,
`-----BEGIN CERTIFICATE-----
MIIHbjCCBlagAwIBAgIEU2dtwjANBgkqhkiG9w0BAQsFADCB/DELMAkGA1UEBhMCSU4xQTA/BgNV
BAoTOEd1amFyYXQgTmFybWFkYSBWYWxsZXkgRmVydGlsaXplcnMgYW5kIENoZW1pY2FscyBMaW1p
dGVkMR0wGwYDVQQLExRDZXJ0aWZ5aW5nIEF1dGhvcml0eTEPMA0GA1UEERMGMzgwMDU0MRAwDgYD
Expand Down Expand Up @@ -158,4 +159,33 @@ Mr+7aekDj/As2OJW793WNdJ6Xx4hPQt5TYsS1UvL9Q6ykuIXd9njj/KjMsw1RvJ5prvugdPqNOMp
Rf63zec3hTCKWm5YI7NBirwrBd1K14DVBQ==
-----END CERTIFICATE-----
`,
`-----BEGIN CERTIFICATE-----
MIIF+jCCBOKgAwIBAgIEANbI0DANBgkqhkiG9w0BAQsFADCBkzELMAkGA1UEBhMCSU4xKjAoBgNV
BAoTIWVNdWRocmEgQ29uc3VtZXIgU2VydmljZXMgTGltaXRlZDEdMBsGA1UECxMUQ2VydGlmeWlu
ZyBBdXRob3JpdHkxOTA3BgNVBAMTMGUtTXVkaHJhIFN1YiBDQSBDbGFzcyAzIGZvciBEb2N1bWVu
dCBTaWduZXIgMjAxNDAeFw0xNzA2MDgxMDQ2MjZaFw0yMDA2MDcxMDQ2MjZaMIHmMQswCQYDVQQG
EwJJTjEOMAwGA1UEChMFVUlEQUkxGjAYBgNVBAsTEVRlY2hub2xvZ3kgQ2VudHJlMQ8wDQYDVQQR
EwY1NjAwOTIxEjAQBgNVBAgTCUthcm5hdGFrYTESMBAGA1UECRMJQmFuZ2Fsb3JlMTowOAYDVQQz
EzFBYWRoYWFyIENvbXBsZXggTnRpIExheW91dCBUYXRhIE5hZ2FyIEtvZGlnZWhhbGxpMTYwNAYD
VQQDEy1EUyBVTklRVUUgSURFTlRJRklDQVRJT04gQVVUSE9SSVRZIE9GIElORElBIDQwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/QeNsWm+7+RH6BMjb6y8Y2Zbh5keFNUEb835vJqrc
YfRIMz6M7lFbgFtc3NpIpzQjmYjI3W9B/YqY1X/ddqLoyiSKJmsFF8zxrj3vMIy14dMDNI/UvQOa
iFS4FCH+zWF+pEghal8S7uehbYby2grRk5BHUTQW2KdY22oR67GU0QqB/GQ3j+9HOC8YXD489ygb
m4x1x3v8OMMTWLbTOZP7nkOAgGud4LCtbucgzQx3cE85NXyIHDON1Vx0MeEy1KmL1QpQfDzSwNFm
nvKAHhnRCaFLEIwKD2Dso8dhj49VELawWt5kELqu2Ygv4cxQ9yJEIKoxkvHd/rFFIP3uVmv/AgMB
AAGjggH/MIIB+zATBgNVHSMEDDAKgAhNwzpf6teP5DAdBgNVHQ4EFgQU4bPxBMKwkzTqo4vmPEOl
CI3hHGswDgYDVR0PAQH/BAQDAgbAMCIGA1UdEQQbMBmBF2FudXAua3VtYXJAdWlkYWkubmV0Lmlu
MIHSBgNVHSAEgcowgccwLQYGYIJkZAIDMCMwIQYIKwYBBQUHAgIwFRoTQ2xhc3MgMyBDZXJ0aWZp
Y2F0ZTBEBgZggmRkCgEwOjA4BggrBgEFBQcCAjAsGipPcmdhbmlzYXRpb25hbCBEb2N1bWVudCBT
aWduZXIgQ2VydGlmaWNhdGUwUAYHYIJkZAEIAjBFMEMGCCsGAQUFBwIBFjdodHRwOi8vd3d3LmUt
bXVkaHJhLmNvbS9yZXBvc2l0b3J5L2Nwcy9lLU11ZGhyYV9DUFMucGRmMHcGCCsGAQUFBwEBBGsw
aTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZS1tdWRocmEuY29tMEEGCCsGAQUFBzAChjVodHRw
Oi8vd3d3LmUtbXVkaHJhLmNvbS9yZXBvc2l0b3J5L2NhY2VydHMvZG9jY2wzLmNydDBDBgNVHR8E
PDA6MDigNqA0hjJodHRwOi8vd3d3LmUtbXVkaHJhLmNvbS9yZXBvc2l0b3J5L2NybHMvZG9jY2wz
LmNybDANBgkqhkiG9w0BAQsFAAOCAQEAX0V86YeUnK8Jg+MrH86PJLchcJ4tvBE99M2/Jz59Qi4f
dykOfrmi+DMQ3JjEHTebCcYsj8bLgSxbSQAnm2GOGiF3IzyyBr5Lx+ktsuP39900QNuQ36eMqCNy
liItPMXBJM+dSpolry/OjIsD4x75XDS7GLZi2ZpSBwQRaslxVdB403FD709eimEQ9GfBr8kDx+ff
a8RdwIZ7eEzPpsu+vwmwQTYVBU1AvMWNlyxw+5bA2YMx17rtpCx3n3wZOgCjXScTYJgDkQTLGMss
lhr6Td1Tj4+b49a1KQrtOgmjrwq0/fZOflrjFg4dWtAPfcP69sjdWgYn6XmquMeUcRpxXA==
-----END CERTIFICATE-----`
];
14 changes: 13 additions & 1 deletion circuits/tests/register/register_aadhaar.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { bufferToHex, Uint8ArrayToCharArray } from '@zk-email/helpers/dist/binar
import { convertBigIntToByteArray, decompressByteArray, splitToWords } from '@anon-aadhaar/core';
import assert from 'assert';
import { customHasher } from '@selfxyz/common/utils/hash';
import forge from 'node-forge';
import {
prepareAadhaarRegisterTestData,
generateTestData,
Expand Down Expand Up @@ -184,8 +185,19 @@ describe('REGISTER AADHAAR Circuit Tests', function () {
const w = await circuit.calculateWitness(inputs);
await circuit.checkConstraints(w);

const out = await circuit.getOutput(w, ['nullifier', 'commitment']);
const out = await circuit.getOutput(w, ['nullifier', 'commitment', 'pubKeyHash']);
assert(BigInt(out.nullifier) === BigInt(nullifier));
assert(BigInt(out.commitment) === BigInt(commitment));
});

it.skip("should log all pubkey commitments", async function () {
this.timeout(0);
for (const cert of pubkeys) {
const certObj = forge.pki.certificateFromPem(cert);
const modulusHex = (certObj.publicKey as forge.pki.rsa.PublicKey).n.toString(16);
const pubkey = BigInt('0x' + modulusHex);
const pubkeyCommitment = customHasher(splitToWords(pubkey, BigInt(121), BigInt(17)));
console.log(pubkeyCommitment);
}
});
});
9 changes: 8 additions & 1 deletion contracts/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,17 @@ ignition/deployed_addresses.json
ignition/parameters.json

# Ignore all deployment folders except important ones
ignition/deployments/*
!ignition/deployments/prod/
!ignition/deployments/staging/

# For chain-11142220, keep only essential files
ignition/deployments/chain-11142220/*
!ignition/deployments/chain-11142220/deployed_addresses.json

# For chain-42220, keep only essential files
ignition/deployments/chain-42220/*
!ignition/deployments/chain-42220/deployed_addresses.json

# For important environments, keep only essential files
ignition/deployments/{prod,staging}/*
!ignition/deployments/{prod,staging}/deployed_addresses.json
Expand Down
40 changes: 29 additions & 11 deletions contracts/contracts/IdentityVerificationHubImplV2.sol
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ contract IdentityVerificationHubImplV2 is ImplRoot {
bytes32 private constant IDENTITYVERIFICATIONHUBV2_STORAGE_LOCATION =
0xf9b5980dcec1a8b0609576a1f453bb2cad4732a0ea02bb89154d44b14a306c00;

/// @notice The AADHAAR registration window around the current block timestamp.
uint256 public AADHAAR_REGISTRATION_WINDOW = 20;

/**
* @notice Returns the storage struct for the main IdentityVerificationHub.
* @dev Uses ERC-7201 storage pattern for upgradeable contracts.
Expand Down Expand Up @@ -197,7 +200,7 @@ contract IdentityVerificationHubImplV2 is ImplRoot {

/// @notice Thrown when the timestamp is invalid.
/// @dev Ensures that the timestamp is within 20 minutes of the current block timestamp.
error InvalidUidaiTimestamp();
error InvalidUidaiTimestamp(uint256 blockTimestamp, uint256 timestamp);

/// @notice Thrown when the attestationId in the proof doesn't match the header.
/// @dev Ensures that the attestationId in the proof matches the header.
Expand Down Expand Up @@ -225,12 +228,12 @@ contract IdentityVerificationHubImplV2 is ImplRoot {
// ====================================================

/**
* @notice Initializes the Identity Verification Hub V2 contract.
* @notice Initializes the Identity Verification Hub V2 contract for upgrade.
* @dev Sets up the contract state including circuit version and emits initialization event.
* This function can only be called once due to the initializer modifier.
* This function is used when upgrading from V1 to V2, hence uses reinitializer(2).
* The circuit version is set to 2 for V2 hub compatibility.
*/
function initialize() external initializer {
function initialize() external reinitializer(11) {
__ImplRoot_init();

// Initialize circuit version to 2 for V2 hub
Expand Down Expand Up @@ -322,6 +325,14 @@ contract IdentityVerificationHubImplV2 is ImplRoot {
emit VerificationConfigV2Set(configId, config);
}

/**
* @notice Updates the AADHAAR registration window.
* @param window The new AADHAAR registration window.
*/
function setAadhaarRegistrationWindow(uint256 window) external virtual onlyProxy onlyOwner {
AADHAAR_REGISTRATION_WINDOW = window;
}

/**
* @notice Main verification function with new structured input format.
* @dev Orchestrates the complete verification process including proof validation and result handling.
Expand Down Expand Up @@ -751,12 +762,11 @@ contract IdentityVerificationHubImplV2 is ImplRoot {
}
} else if (attestationId == AttestationId.AADHAAR) {
uint256 timestamp = registerCircuitProof.pubSignals[CircuitConstantsV2.AADHAAR_TIMESTAMP_INDEX];
if (timestamp < (block.timestamp - 20 minutes)) {
revert InvalidUidaiTimestamp();
if (timestamp < (block.timestamp - (AADHAAR_REGISTRATION_WINDOW * 1 minutes))) {
revert InvalidUidaiTimestamp(block.timestamp, timestamp);
}

if (timestamp > (block.timestamp + 20 minutes)) {
revert InvalidUidaiTimestamp();
if (timestamp > (block.timestamp + (AADHAAR_REGISTRATION_WINDOW * 1 minutes))) {
revert InvalidUidaiTimestamp(block.timestamp, timestamp);
}

if (
Expand Down Expand Up @@ -984,8 +994,9 @@ contract IdentityVerificationHubImplV2 is ImplRoot {

uint256 currentTimestamp = Formatter.proofDateToUnixTimestamp(dateNum);
uint256 startOfDay = _getStartOfDayTimestamp();
uint256 endOfDay = startOfDay + 1 days - 1;

if (currentTimestamp < startOfDay - 1 days + 1 || currentTimestamp > startOfDay + 1 days - 1) {
if (currentTimestamp < startOfDay - 1 days + 1 || currentTimestamp > endOfDay + 1 days) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Date Validation Error Extends Future Range

The date validation in _performCurrentDateCheck and _performNumericCurrentDateCheck incorrectly extends the valid range. Changing the upper bound from startOfDay + 1 days - 1 to endOfDay + 1 days (where endOfDay is startOfDay + 1 days - 1) effectively allows proofs with dates one day further in the future than intended.

Additional Locations (1)

Fix in Cursor Fix in Web

revert CurrentDateNotInValidRange();
}
}
Expand All @@ -1002,8 +1013,9 @@ contract IdentityVerificationHubImplV2 is ImplRoot {

uint256 currentTimestamp = Formatter.proofDateToUnixTimestampNumeric(dateNum);
uint256 startOfDay = _getStartOfDayTimestamp();
uint256 endOfDay = startOfDay + 1 days - 1;

if (currentTimestamp < startOfDay - 1 days + 1 || currentTimestamp > startOfDay + 1 days - 1) {
if (currentTimestamp < startOfDay - 1 days + 1 || currentTimestamp > endOfDay + 1 days) {
revert CurrentDateNotInValidRange();
}
}
Expand Down Expand Up @@ -1232,6 +1244,12 @@ contract IdentityVerificationHubImplV2 is ImplRoot {
}
aadhaarOutput.revealedDataPacked = Formatter.fieldElementsToBytesAadhaar(revealedDataPacked);

for (uint256 i = 0; i < 4; i++) {
aadhaarOutput.forbiddenCountriesListPacked[i] = vcAndDiscloseProof.pubSignals[
indices.forbiddenCountriesListPackedIndex + i
];
}

return abi.encode(aadhaarOutput);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,6 @@ interface IIdentityRegistryAadhaarV1 {
* @notice Registers a new UIDAI pubkey commitment.
* @dev Must be called by the identity verification hub. Reverts if the UIDAI pubkey commitment is already registered.
* @param commitment The UIDAI pubkey commitment to register.
* @param expiryTimestamp The expiry timestamp of the commitment.
*/
function registerUidaiPubkeyCommitment(uint256 commitment, uint256 expiryTimestamp) external;
function registerUidaiPubkeyCommitment(uint256 commitment) external;
}
Loading
Loading