@@ -4,15 +4,13 @@ include "es256.circom";
44include " keyless_zk_proofs/hashtofield.circom" ;
55include " @zk-email/circuits/lib/sha.circom" ;
66include " claim-decoder.circom" ;
7- include " age-verifier.circom" ;
87include " utils.circom" ;
98include " payload_matcher.circom" ;
109include " ec-extractor.circom" ;
1110
1211// Prepare Circuit
1312template JWT(
1413 maxMessageLength,
15- maxB64HeaderLength,
1614 maxB64PayloadLength,
1715
1816 maxMatches,
@@ -45,40 +43,29 @@ template JWT(
4543 signal claimHashes[maxMatches][32 ] <== ClaimHasher(maxMatches, maxClaimsLength)(claims);
4644 ClaimComparator(maxMatches, maxSubstringLength)(claimHashes ,claimLengths, matchSubstring, matchLength);
4745
48- component es256 = ES256(maxMessageLength);
49- es256.message <== message;
50- es256.messageLength <== messageLength;
51- es256.sig_r <== sig_r;
52- es256.sig_s_inverse <== sig_s_inverse;
53- es256.pubKeyX <== pubKeyX;
54- es256.pubKeyY <== pubKeyY;
55-
56- component extractor = HeaderPayloadExtractor(maxMessageLength,maxB64HeaderLength, maxB64PayloadLength);
57- extractor.message <== message;
58- extractor.messageLength <== messageLength;
59- extractor.periodIndex <== periodIndex;
46+ // Verify the signature
47+ ES256(maxMessageLength)(message, messageLength, sig_r, sig_s_inverse, pubKeyX, pubKeyY);
6048
49+ signal payload[maxPayloadLength] <== PayloadExtractor(maxMessageLength, maxB64PayloadLength)(message, messageLength, periodIndex);
6150
6251 signal payloadHash <== PayloadSubstringMatcher(maxPayloadLength, maxMatches, maxSubstringLength)(
63- extractor. payload,
52+ payload,
6453 matchesCount,
6554 matchSubstring,
6655 matchLength,
6756 matchIndex
6857 );
6958
70- signal xValueStart <== matchIndex[0 ] + matchLength[0 ];
71- signal yValueStart <== matchIndex[1 ] + matchLength[1 ];
72-
73- // 32-byte coordinate -> 44 base64 characters (padding optional -> 43 or 44)
74- signal xValueEnd <== xValueStart + 43 ;
75- signal yValueEnd <== yValueStart + 43 ;
59+
60+ component ecExtractor = ECPublicKeyExtractor_Optimized(maxPayloadLength, 32 );
61+ ecExtractor.payload <== payload;
62+ ecExtractor.xStartIndex <== matchIndex[0 ] + matchLength[0 ];
63+ ecExtractor.yStartIndex <== matchIndex[1 ] + matchLength[1 ];
7664
77- component ecExtractor = ECPublicKeyExtractor(maxPayloadLength, maxClaimsLength, 44 , 32 );
78- ecExtractor.payload <== extractor.payload;
79- ecExtractor.xStartIndex <== xValueStart;
80- ecExtractor.yStartIndex <== yValueStart;
8165
8266 signal output KeyBindingX <== ecExtractor.pubKeyX;
8367 signal output KeyBindingY <== ecExtractor.pubKeyY;
68+
69+ signal output messages[maxMatches][decodedLen];
70+ messages <== decodedClaims;
8471}
0 commit comments