@@ -10,7 +10,8 @@ import {
1010 SaverEncryptionGens ,
1111 SaverEncryptionGensUncompressed ,
1212 SaverEncryptionKeyUncompressed ,
13- SaverProvingKeyUncompressed , SaverSecretKey ,
13+ SaverProvingKeyUncompressed ,
14+ SaverSecretKey ,
1415 SaverVerifyingKeyUncompressed ,
1516 SetupParam ,
1617 SignatureG1 ,
@@ -24,9 +25,9 @@ import {
2425import { getRevealedUnrevealed , stringToBytes } from '../utils' ;
2526
2627describe ( 'Verifiable encryption of signed messages' , ( ) => {
27- const messageCount = 5 ;
28- const chunkBitSize = 8 ;
28+ const chunkBitSize = 16 ;
2929 const encMsgIdx = 1 ;
30+ let messageCount ;
3031
3132 let snarkProvingKey : SaverProvingKeyUncompressed ,
3233 snarkVerifyingKey : SaverVerifyingKeyUncompressed ,
@@ -41,6 +42,7 @@ describe('Verifiable encryption of signed messages', () => {
4142 sigParams2 : SignatureParamsG1 ,
4243 sigSk2 : Uint8Array ,
4344 sigPk2 : Uint8Array ;
45+ let messages1AsStrings : string [ ] , messages2AsStrings : string [ ] ;
4446 let messages1 : Uint8Array [ ] , messages2 : Uint8Array [ ] , sig1 : SignatureG1 , sig2 : SignatureG1 ;
4547
4648 beforeAll ( async ( ) => {
@@ -50,15 +52,51 @@ describe('Verifiable encryption of signed messages', () => {
5052 it ( 'do decryptor setup' , ( ) => {
5153 const gens = SaverEncryptionGens . generate ( ) ;
5254 const [ snarkPk , sk , ek , dk ] = SaverDecryptor . setup ( gens , chunkBitSize ) ;
55+ console . log ( snarkPk . value . length , ek . value . length , gens . value . length ) ;
5356 saverEncGens = gens . decompress ( ) ;
5457 snarkProvingKey = snarkPk . decompress ( ) ;
5558 snarkVerifyingKey = snarkPk . getVerifyingKeyUncompressed ( ) ;
5659 saverSk = sk ;
5760 saverEk = ek . decompress ( ) ;
5861 saverDk = dk . decompress ( ) ;
62+ console . log (
63+ snarkProvingKey . value . length ,
64+ snarkVerifyingKey . value . length ,
65+ saverEk . value . length ,
66+ saverDk . value . length ,
67+ saverEncGens . value . length
68+ ) ;
5969 } , 300000 ) ;
6070
6171 it ( 'do signers setup' , ( ) => {
72+ // Setup the messages, its important to use a reversible encoding for the messages used in verifiable encryption as
73+ // the decryptor should be able to decrypt the message without the holder's help.
74+
75+ messages1AsStrings = [
76+ 'John Jacob Smith Sr.' ,
77+ 'San Francisco, California' ,
78+ 'john.jacob.smith.1971@gmail.com' ,
79+ '+1 123-4567890009' ,
80+ 'user-id:1234567890012134'
81+ ] ;
82+
83+ messages2AsStrings = [
84+ 'Alice Jr. from Wonderland' ,
85+ 'Wonderland' ,
86+ 'alice.wonderland.1980@gmail.com' ,
87+ '+1 456-7891230991' ,
88+ 'user-id:9876543210987654'
89+ ] ;
90+
91+ messageCount = messages1AsStrings . length ;
92+
93+ messages1 = [ ] ;
94+ messages2 = [ ] ;
95+ for ( let i = 0 ; i < messageCount ; i ++ ) {
96+ messages1 . push ( SignatureG1 . reversibleEncodeStringMessageForSigning ( messages1AsStrings [ i ] ) ) ;
97+ messages2 . push ( SignatureG1 . reversibleEncodeStringMessageForSigning ( messages2AsStrings [ i ] ) ) ;
98+ }
99+
62100 sigParams1 = SignatureParamsG1 . generate ( messageCount ) ;
63101 const sigKeypair1 = KeypairG2 . generate ( sigParams1 ) ;
64102 sigSk1 = sigKeypair1 . secretKey ;
@@ -69,13 +107,6 @@ describe('Verifiable encryption of signed messages', () => {
69107 sigSk2 = sigKeypair2 . secretKey ;
70108 sigPk2 = sigKeypair2 . publicKey ;
71109
72- messages1 = [ ] ;
73- messages2 = [ ] ;
74- for ( let i = 0 ; i < messageCount ; i ++ ) {
75- messages1 . push ( generateRandomFieldElement ( ) ) ;
76- messages2 . push ( generateRandomFieldElement ( ) ) ;
77- }
78-
79110 sig1 = SignatureG1 . generate ( messages1 , sigSk1 , sigParams1 , false ) ;
80111 sig2 = SignatureG1 . generate ( messages2 , sigSk2 , sigParams2 , false ) ;
81112 expect ( sig1 . verify ( messages1 , sigPk1 , sigParams1 , false ) . verified ) . toEqual ( true ) ;
@@ -95,6 +126,7 @@ describe('Verifiable encryption of signed messages', () => {
95126 sigParams : SignatureParamsG1 ,
96127 sigPk : Uint8Array ,
97128 messages : Uint8Array [ ] ,
129+ messagesAsStrings : string [ ] ,
98130 sig : SignatureG1 ,
99131 label : string
100132 ) {
@@ -133,14 +165,16 @@ describe('Verifiable encryption of signed messages', () => {
133165 expect ( proof . verifyWithDeconstructedProofSpec ( verifierStatements , metaStatements ) . verified ) . toEqual ( true ) ;
134166
135167 decryptAndVerify ( proof , 1 , messages [ encMsgIdx ] ) ;
168+ const decoded = SignatureG1 . reversibleDecodeStringMessageForSigning ( messages [ encMsgIdx ] ) ;
169+ expect ( decoded ) . toEqual ( messagesAsStrings [ encMsgIdx ] ) ;
136170 }
137171
138172 it ( 'prove knowledge of verifiable encryption of 1 message from 1st signature' , ( ) => {
139- proveAndVerifySingle ( sigParams1 , sigPk1 , messages1 , sig1 , 'public test label 1' ) ;
173+ proveAndVerifySingle ( sigParams1 , sigPk1 , messages1 , messages1AsStrings , sig1 , 'public test label 1' ) ;
140174 } , 20000 ) ;
141175
142176 it ( 'prove knowledge of verifiable encryption of 1 message from 2nd signature' , ( ) => {
143- proveAndVerifySingle ( sigParams2 , sigPk2 , messages2 , sig2 , 'public test label 2' ) ;
177+ proveAndVerifySingle ( sigParams2 , sigPk2 , messages2 , messages2AsStrings , sig2 , 'public test label 2' ) ;
144178 } , 20000 ) ;
145179
146180 it ( 'prove knowledge of verifiable encryption of 1 message from both signatures' , ( ) => {
0 commit comments