Skip to content
Open
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[workspace]
members = [
"sig_check_dsc_720",
"sig_check_dsc_1300_hash",
"sig_check_dsc_1300_verify",
"sig_check_id_data_720",
"sig_check_id_data_1300",
"data_check_integrity_sa",
"compare_age",
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Fragmented zkPassport Age Verification

This directory contains two approaches for zkPassport age verification, optimized based on TBS certificate size.

## Approach 1: 4-Circuit Chain

**Used when**: TBS certificate actual length < 720 bytes (padded to exactly 720 bytes)

**Circuits**:
1. [sig_check_dsc_720](sig_check_dsc_720/) - Verify CSCA signed DSC certificate
2. [sig_check_id_data_720](sig_check_id_data_720/) - Verify DSC signed passport data
3. [data_check_integrity_sa](data_check_integrity_sa/) - Verify data integrity (DG1 → eContent → SignedAttributes)
4. [compare_age](compare_age/) - Extract DOB from MRZ, compute age, generate nullifier

## Approach 2: 5-Circuit Chain

**Used when**: TBS certificate actual length >= 720 bytes (padded to exactly 1300 bytes)

**Circuits**:
1. [sig_check_dsc_1300_hash](sig_check_dsc_1300_hash/) - Process first 640 bytes of DSC certificate (SHA256 start)
2. [sig_check_dsc_1300_verify](sig_check_dsc_1300_verify/) - Complete SHA256 and verify CSCA signature
3. [sig_check_id_data_1300](sig_check_id_data_1300/) - Verify DSC signed passport data
4. [data_check_integrity_sa](data_check_integrity_sa/) - Verify data integrity (DG1 → eContent → SignedAttributes)
5. [compare_age](compare_age/) - Extract DOB from MRZ, compute age, generate nullifier

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
comm_in = "0x13ddc00c81d5d01bc387262c471bba35c357a93b0b6dd5afd493e6ca3a332ffd"
current_date = 1758300539
salted_private_nullifier = { salt = "0x3", value = "0x1926a3c576ec5e1ca8b46ce0926cb03dd74461874126a1ba1a5d8c7d30408695", hash = "0x0" }
salted_expiry_date = { salt = "0x3", value = [51, 50, 48, 49, 48, 49], hash = "0x0" }
salted_dg1 = { salt = "0x3", value = [60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 48, 55, 48, 49, 48, 49, 60, 60, 51, 50, 48, 49, 48, 49, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 0, 0], hash = "0x0" }
min_age_required = 18
max_age_required = 70
nullifier_secret = "0x0"
service_scope = "0x0"
service_subscope = "0x0"
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
comm_in = "0x0474e94cd1216de623c7e80e47a315d3d00c52a22bda4f331f5fdfd999da21be"
salt_in = "0x2"
salted_dg1 = { salt = "0x3", value = [60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 48, 55, 48, 49, 48, 49, 60, 60, 51, 50, 48, 49, 48, 49, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 0, 0], hash = "0x0" }
expiry_date_salt = "0x3"
dg1_hash_offset= 0
dg1_padded_length=95
signed_attributes = [213, 19, 219, 127, 44, 247, 154, 190, 26, 122, 188, 163, 73, 227, 191, 71, 139, 129, 120, 193, 5, 130, 52, 127, 40, 83, 242, 75, 244, 200, 248, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
e_content = [54, 197, 174, 86, 62, 194, 237, 211, 184, 91, 92, 169, 195, 149, 233, 156, 60, 80, 224, 124, 161, 170, 204, 239, 154, 92, 165, 10, 81, 42, 90, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
e_content_len = 32
signed_attributes_size = 32
salted_private_nullifier = { salt = "0x3", value = "0x1926a3c576ec5e1ca8b46ce0926cb03dd74461874126a1ba1a5d8c7d30408695", hash = "0x0" }
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
csc_pubkey = [191, 56, 52, 58, 68, 102, 237, 183, 171, 195, 84, 11, 3, 233, 51, 203, 74, 37, 42, 68, 152, 19, 154, 192, 131, 19, 113, 213, 124, 239, 224, 225, 165, 80, 127, 141, 153, 142, 67, 27, 80, 195, 133, 114, 240, 90, 185, 199, 165, 202, 176, 89, 69, 36, 65, 105, 30, 110, 4, 208, 12, 242, 135, 138, 112, 0, 112, 23, 63, 255, 106, 101, 85, 230, 227, 208, 200, 233, 85, 158, 57, 216, 198, 32, 116, 4, 181, 10, 208, 243, 151, 165, 147, 187, 14, 133, 61, 31, 15, 146, 160, 16, 91, 221, 65, 81, 131, 77, 250, 8, 5, 30, 244, 110, 139, 157, 228, 250, 47, 54, 46, 153, 235, 164, 201, 64, 61, 171, 152, 23, 115, 253, 143, 134, 106, 100, 221, 126, 124, 29, 158, 68, 169, 153, 8, 134, 19, 141, 243, 173, 103, 176, 135, 248, 179, 254, 74, 187, 86, 47, 12, 204, 128, 145, 46, 121, 60, 229, 217, 220, 247, 135, 186, 158, 69, 91, 128, 116, 92, 152, 233, 139, 249, 106, 63, 203, 217, 86, 113, 2, 78, 165, 244, 86, 152, 213, 164, 36, 24, 179, 100, 67, 182, 69, 30, 5, 131, 11, 129, 211, 171, 52, 237, 148, 104, 197, 107, 44, 64, 38, 244, 242, 170, 3, 191, 182, 145, 129, 165, 236, 217, 97, 192, 75, 17, 254, 254, 33, 68, 205, 70, 79, 134, 69, 244, 176, 24, 133, 19, 70, 24, 170, 161, 72, 171, 48, 146, 75, 134, 119, 13, 39, 217, 189, 2, 173, 141, 136, 176, 140, 220, 230, 94, 151, 182, 4, 120, 218, 39, 115, 34, 78, 139, 102, 230, 227, 223, 78, 72, 133, 59, 224, 128, 79, 71, 67, 133, 171, 11, 66, 200, 133, 21, 76, 125, 126, 111, 212, 29, 7, 92, 4, 5, 189, 41, 21, 15, 96, 31, 28, 233, 156, 44, 254, 47, 121, 82, 71, 133, 69, 3, 135, 247, 237, 29, 140, 111, 2, 232, 200, 129, 234, 113, 146, 243, 148, 127, 227, 183, 110, 190, 65, 93, 136, 180, 104, 17, 121, 45, 128, 216, 192, 95, 111, 75, 47, 182, 96, 41, 126, 100, 40, 129, 43, 154, 14, 220, 192, 8, 64, 47, 153, 2, 244, 140, 51, 4, 212, 105, 249, 255, 60, 143, 2, 60, 86, 176, 65, 253, 132, 133, 84, 56, 165, 169, 121, 182, 176, 237, 210, 209, 119, 253, 138, 95, 127, 194, 72, 248, 212, 91, 87, 203, 173, 38, 80, 222, 101, 163, 252, 86, 186, 143, 161, 184, 70, 24, 248, 230, 196, 157, 35, 205, 39, 49, 136, 8, 204, 176, 116, 68, 167, 1, 10, 217, 82, 208, 215, 28, 231, 252, 203, 70, 240, 62, 4, 211, 209, 148, 141, 44, 246, 215, 112, 162, 20, 129, 94, 123, 230, 126, 128, 33, 41, 231, 119, 64, 51, 253, 166, 145, 64, 10, 158, 141, 43, 193, 20, 69, 15, 194, 35, 139, 233, 28, 240, 166, 131, 61, 187, 241, 129]
salt = "0x1"
country = "<<<"
tbs_certificate = [48, 130, 1, 10, 2, 130, 1, 1, 0, 144, 96, 22, 98, 202, 23, 238, 6, 187, 83, 246, 10, 141, 149, 39, 62, 150, 207, 25, 76, 254, 121, 159, 193, 25, 17, 64, 229, 112, 170, 152, 94, 212, 213, 4, 191, 8, 183, 225, 184, 213, 181, 211, 100, 210, 60, 155, 26, 13, 219, 11, 116, 84, 236, 33, 212, 47, 5, 187, 226, 120, 161, 57, 97, 200, 250, 174, 139, 216, 171, 95, 178, 148, 109, 3, 137, 151, 245, 142, 53, 177, 251, 74, 202, 2, 157, 33, 55, 30, 189, 239, 243, 101, 183, 43, 68, 245, 198, 9, 90, 109, 89, 109, 33, 98, 32, 173, 121, 203, 2, 79, 68, 150, 135, 158, 72, 76, 223, 55, 66, 30, 45, 33, 16, 91, 153, 158, 127, 64, 221, 31, 151, 241, 93, 105, 235, 153, 176, 146, 221, 20, 231, 141, 2, 146, 77, 209, 30, 90, 33, 33, 232, 176, 145, 244, 229, 221, 43, 101, 10, 210, 55, 50, 200, 103, 87, 18, 82, 53, 193, 130, 124, 69, 96, 179, 87, 245, 203, 181, 205, 57, 67, 181, 80, 198, 57, 101, 151, 179, 103, 201, 243, 52, 68, 91, 122, 137, 209, 141, 39, 68, 73, 244, 200, 211, 125, 2, 176, 12, 80, 77, 81, 225, 169, 34, 209, 187, 212, 47, 56, 92, 220, 159, 89, 236, 133, 200, 211, 11, 237, 217, 129, 115, 191, 208, 39, 198, 179, 16, 28, 59, 121, 160, 48, 239, 81, 144, 102, 168, 122, 158, 59, 83, 54, 91, 211, 2, 3, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
csc_pubkey_redc_param = [21, 107, 159, 157, 72, 119, 18, 0, 27, 71, 177, 110, 89, 195, 140, 32, 0, 81, 204, 142, 10, 42, 57, 174, 56, 49, 20, 174, 40, 168, 13, 110, 119, 62, 130, 206, 113, 131, 163, 69, 216, 148, 52, 169, 100, 129, 114, 255, 46, 231, 61, 14, 80, 203, 136, 94, 50, 194, 33, 127, 20, 160, 234, 71, 20, 201, 8, 231, 223, 0, 192, 38, 138, 232, 188, 101, 68, 103, 102, 81, 27, 78, 37, 96, 11, 135, 61, 12, 158, 37, 141, 215, 151, 25, 176, 135, 41, 133, 163, 113, 221, 161, 175, 226, 9, 113, 252, 229, 239, 48, 55, 162, 33, 178, 224, 94, 18, 161, 220, 186, 163, 10, 133, 85, 127, 74, 95, 74, 192, 164, 69, 236, 121, 95, 224, 115, 181, 169, 156, 121, 161, 180, 127, 61, 26, 113, 65, 35, 241, 87, 67, 152, 40, 160, 29, 190, 249, 119, 178, 40, 99, 198, 222, 102, 162, 68, 138, 169, 237, 193, 199, 151, 159, 80, 118, 20, 141, 97, 224, 76, 212, 29, 80, 238, 32, 234, 172, 151, 141, 134, 227, 177, 61, 106, 9, 105, 194, 149, 232, 171, 165, 135, 244, 24, 214, 213, 28, 115, 68, 75, 160, 198, 129, 73, 238, 59, 59, 4, 45, 101, 235, 220, 224, 224, 5, 76, 13, 218, 137, 189, 174, 52, 38, 192, 245, 127, 138, 81, 96, 255, 162, 119, 44, 210, 247, 66, 99, 3, 202, 110, 26, 174, 27, 157, 15, 85, 81, 115, 162, 35, 217, 73, 84, 139, 198, 206, 205, 93, 221, 207, 182, 126, 20, 211, 178, 23, 232, 95, 253, 252, 254, 211, 143, 149, 130, 102, 69, 47, 230, 141, 23, 107, 148, 35, 98, 85, 98, 111, 238, 85, 148, 111, 251, 83, 220, 88, 156, 81, 27, 196, 8, 5, 66, 216, 111, 3, 226, 212, 80, 151, 38, 164, 172, 189, 112, 224, 225, 98, 165, 86, 180, 31, 32, 249, 202, 127, 244, 142, 127, 17, 239, 16, 41, 1, 191, 113, 134, 18, 66, 251, 227, 254, 73, 53, 180, 104, 27, 133, 32, 198, 218, 159, 226, 32, 79, 136, 115, 52, 110, 242, 239, 204, 109, 154, 29, 180, 85, 142, 244, 160, 90, 14, 37, 236, 159, 130, 229, 169, 11, 37, 132, 37, 49, 124, 225, 206, 164, 202, 94, 34, 8, 5, 49, 56, 17, 171, 65, 211, 126, 42, 109, 62, 176, 132, 107, 62, 190, 141, 214, 11, 217, 6, 52, 198, 157, 181, 22, 107, 245, 249, 222, 4, 71, 63, 54, 104, 23, 171, 180, 131, 16, 230, 23, 94, 39, 61, 149, 204, 15, 42, 7, 187, 147, 37, 55, 67, 188, 147, 194, 254, 154, 193, 95, 227, 162, 216, 3, 127, 116, 248, 115, 121, 126, 176, 253, 175, 7, 245, 175, 129, 254, 70, 151, 36, 174, 235, 172, 158, 244, 206, 119, 184, 231, 1, 14, 162, 152, 159, 97, 136, 82, 216, 75, 161, 36, 208, 59, 62, 13, 12, 35, 82, 236]
dsc_signature = [71, 151, 90, 104, 225, 194, 204, 189, 133, 238, 99, 243, 154, 33, 179, 225, 16, 61, 209, 231, 178, 20, 10, 41, 218, 115, 35, 100, 165, 196, 140, 201, 144, 176, 84, 28, 141, 196, 127, 247, 234, 183, 55, 102, 230, 157, 209, 2, 35, 235, 82, 126, 131, 245, 25, 60, 149, 44, 150, 113, 186, 83, 136, 220, 43, 195, 6, 82, 238, 87, 88, 26, 60, 14, 243, 84, 14, 216, 239, 139, 152, 108, 134, 184, 173, 109, 237, 100, 24, 132, 38, 204, 127, 184, 90, 12, 227, 198, 79, 121, 169, 157, 218, 114, 132, 153, 147, 135, 226, 41, 192, 253, 62, 55, 119, 193, 65, 236, 77, 150, 118, 245, 136, 133, 203, 25, 230, 208, 134, 31, 17, 236, 182, 20, 70, 47, 91, 177, 122, 182, 76, 118, 84, 27, 190, 39, 67, 47, 52, 98, 17, 1, 150, 87, 160, 226, 171, 189, 227, 205, 208, 166, 141, 43, 118, 39, 191, 146, 241, 176, 225, 178, 255, 101, 1, 133, 35, 103, 203, 147, 147, 0, 113, 6, 206, 134, 199, 64, 203, 248, 203, 174, 35, 99, 123, 223, 212, 70, 122, 213, 0, 61, 125, 205, 220, 136, 58, 37, 190, 26, 19, 13, 37, 2, 221, 152, 255, 89, 57, 1, 157, 72, 232, 84, 206, 221, 206, 233, 94, 247, 117, 227, 208, 206, 13, 245, 63, 195, 75, 224, 26, 99, 230, 232, 223, 90, 87, 170, 117, 216, 105, 241, 124, 246, 47, 60, 221, 159, 152, 20, 196, 235, 232, 25, 135, 174, 18, 204, 240, 11, 146, 51, 210, 235, 198, 119, 167, 232, 219, 28, 70, 181, 132, 138, 192, 18, 42, 80, 147, 168, 185, 248, 224, 26, 70, 116, 133, 150, 215, 250, 195, 165, 232, 18, 157, 24, 179, 22, 109, 4, 201, 236, 206, 25, 153, 44, 208, 222, 136, 39, 38, 13, 141, 115, 72, 114, 49, 0, 61, 247, 155, 211, 23, 75, 229, 128, 29, 13, 80, 236, 170, 80, 70, 219, 165, 106, 2, 37, 84, 29, 12, 10, 201, 238, 100, 237, 79, 214, 192, 228, 170, 181, 160, 211, 210, 215, 220, 139, 100, 142, 13, 161, 118, 52, 92, 141, 84, 237, 130, 139, 203, 97, 153, 234, 43, 11, 106, 168, 246, 146, 82, 212, 6, 149, 196, 166, 223, 219, 24, 57, 187, 219, 3, 3, 216, 191, 187, 147, 172, 35, 226, 142, 231, 79, 180, 17, 78, 102, 57, 160, 169, 45, 233, 40, 195, 137, 241, 24, 151, 228, 107, 125, 154, 227, 25, 213, 59, 124, 200, 183, 64, 181, 82, 47, 227, 146, 95, 48, 65, 34, 165, 28, 66, 162, 46, 175, 59, 108, 183, 153, 205, 48, 95, 165, 78, 18, 88, 154, 121, 211, 8, 125, 152, 120, 225, 237, 37, 49, 215, 93, 174, 197, 33, 189, 51, 30, 225, 223, 26, 30, 39, 143, 49, 74, 95, 227, 205, 194, 79, 72, 94, 254, 55, 197, 85, 69, 148, 242, 124, 64, 251, 186]
exponent = 65537
tbs_certificate_len = 270
Loading
Loading