1414def log (arg ):
1515 if (count == 1 ):
1616 print (arg )
17+
1718def b64e (arg ):
1819 import base64
1920 return base64 .urlsafe_b64encode (arg ).decode ()
2021
2122def rlen ():
22- return struct .unpack_from ('=H' , os .urandom (2 ))[0 ]
23+ return struct .unpack_from ("=H" , os .urandom (2 ))[0 ]
2324
2425def encryptDecrypt (length , encryptParams , decryptParams = None ):
2526 if decryptParams is None :
2627 decryptParams = encryptParams
27- log (' Salt: ' + b64e (encryptParams [' salt' ]))
28+ log (" Salt: " + b64e (encryptParams [" salt" ]))
2829 input = os .urandom (min (length , maxLen ))
29- # input = new Buffer(' I am the walrus' )
30- log (' Input: ' + b64e (input ))
31- encrypted = ece .encrypt (input , salt = encryptParams .get (' salt' ),
32- key = encryptParams .get (' key' ),
33- keyid = encryptParams .get (' keyid' ),
34- dh = encryptParams .get ('dh' ),
35- rs = encryptParams .get ('rs' ))
36- log (' Encrypted: ' + b64e (encrypted ))
37- decrypted = ece .decrypt (encrypted , salt = decryptParams .get (' salt' ),
38- key = decryptParams .get (' key' ),
39- keyid = decryptParams .get (' keyid' ),
40- dh = decryptParams .get ('dh' ),
41- rs = decryptParams .get ('rs' ))
42- log (' Decrypted: ' + b64e (decrypted ))
30+ # input = new Buffer(" I am the walrus" )
31+ log (" Input: " + b64e (input ))
32+ encrypted = ece .encrypt (input , salt = encryptParams .get (" salt" ),
33+ key = encryptParams .get (" key" ),
34+ keyid = encryptParams .get (" keyid" ),
35+ dh = encryptParams .get ("dh" ),
36+ rs = encryptParams .get ("rs" ))
37+ log (" Encrypted: " + b64e (encrypted ))
38+ decrypted = ece .decrypt (encrypted , salt = decryptParams .get (" salt" ),
39+ key = decryptParams .get (" key" ),
40+ keyid = decryptParams .get (" keyid" ),
41+ dh = decryptParams .get ("dh" ),
42+ rs = decryptParams .get ("rs" ))
43+ log (" Decrypted: " + b64e (decrypted ))
4344 assert input == decrypted
4445 log ("----- OK" );
4546
46-
4747def useExplicitKey ():
4848 params = {
49- ' key' : os .urandom (16 ),
50- ' salt' : os .urandom (16 ),
51- 'rs' : rlen () + 1
49+ " key" : os .urandom (16 ),
50+ " salt" : os .urandom (16 ),
51+ "rs" : rlen () + 1
5252 }
53- log (' Key: ' + b64e (params [' key' ]))
53+ log (" Key: " + b64e (params [" key" ]))
5454 encryptDecrypt (rlen () + 1 , params )
5555
5656
5757def exactlyOneRecord ():
5858 length = min (rlen (), maxLen )
5959 params = {
60- ' key' : os .urandom (16 ),
61- ' salt' : os .urandom (16 ),
62- 'rs' : length + 1
60+ " key" : os .urandom (16 ),
61+ " salt" : os .urandom (16 ),
62+ "rs" : length + 1
6363 }
6464 encryptDecrypt (length , params )
6565
66-
6766def detectTruncation ():
6867 length = min (rlen (), maxLen )
6968 key = os .urandom (16 )
@@ -75,73 +74,70 @@ def detectTruncation():
7574 try :
7675 ece .decrypt (encrypted [0 :length + 1 + 16 ], salt = salt , key = key , rs = rs )
7776 except Exception as e :
78- log (' Decryption error: %s' % e .args )
79- log (' ----- OK' )
77+ log (" Decryption error: %s" % e .args )
78+ log (" ----- OK" )
8079 ok = True
8180
8281 if not ok :
83- raise Exception ('Decryption succeeded, but should not have' )
84-
85-
82+ raise Exception ("Decryption succeeded, but should not have" )
8683
8784def useKeyId ():
8885 keyid = b64e (os .urandom (16 ))
8986 key = os .urandom (16 )
9087 ece .keys [keyid ] = key
9188 params = {
92- ' keyid' : keyid ,
93- ' salt' : os .urandom (16 ),
94- 'rs' : rlen () + 1
89+ " keyid" : keyid ,
90+ " salt" : os .urandom (16 ),
91+ "rs" : rlen () + 1
9592 }
9693 encryptDecrypt (rlen (), params )
9794
98-
99- # This is a complete crap-shoot: the pre-eminent crypto library in python
100- # doesn't even do ECDH; so this doesn't actually work
10195def useDH ():
10296 def isUncompressed (k ):
10397 b1 = k .get_pubkey ()[0 :1 ]
104- assert struct .unpack ("B" , b1 )[0 ] == 4 , ' is an uncompressed point'
98+ assert struct .unpack ("B" , b1 )[0 ] == 4 , " is an uncompressed point"
10599
106100 # the static key is used by the receiver
107- staticKey = pyelliptic .ECC (curve = ' prime256v1' )
101+ staticKey = pyelliptic .ECC (curve = " prime256v1" )
108102 isUncompressed (staticKey )
109103 staticKeyId = b64e (staticKey .get_pubkey ()[1 :])
110104 ece .keys [staticKeyId ] = staticKey
105+ ece .labels [staticKeyId ] = "P-256"
111106
112- log (' Receiver private: ' + b64e (staticKey .get_privkey ()))
113- log (' Receiver public: ' + b64e (staticKey .get_pubkey ()))
107+ log (" Receiver private: " + b64e (staticKey .get_privkey ()))
108+ log (" Receiver public: " + b64e (staticKey .get_pubkey ()))
114109
115110 # the ephemeral key is used by the sender
116- ephemeralKey = pyelliptic .ECC (curve = ' prime256v1' )
111+ ephemeralKey = pyelliptic .ECC (curve = " prime256v1" )
117112 isUncompressed (ephemeralKey )
118113 ephemeralKeyId = b64e (ephemeralKey .get_pubkey ()[1 :])
119114 ece .keys [ephemeralKeyId ] = ephemeralKey
115+ ece .labels [ephemeralKeyId ] = "P-256"
120116
121- log (' Sender private: ' + b64e (ephemeralKey .get_privkey ()))
122- log (' Sender public: ' + b64e (ephemeralKey .get_pubkey ()))
117+ log (" Sender private: " + b64e (ephemeralKey .get_privkey ()))
118+ log (" Sender public: " + b64e (ephemeralKey .get_pubkey ()))
123119
124120 encryptParams = {
125- ' keyid' : ephemeralKeyId ,
126- 'dh' : staticKey .get_pubkey (),
127- ' salt' : os .urandom (16 ),
128- 'rs' : rlen () + 1
121+ " keyid" : ephemeralKeyId ,
122+ "dh" : staticKey .get_pubkey (),
123+ " salt" : os .urandom (16 ),
124+ "rs" : rlen () + 1
129125 }
130126 decryptParams = {
131- ' keyid' : staticKeyId ,
132- 'dh' : ephemeralKey .get_pubkey (),
133- ' salt' : encryptParams [' salt' ],
134- 'rs' : encryptParams ['rs' ]
127+ " keyid" : staticKeyId ,
128+ "dh" : ephemeralKey .get_pubkey (),
129+ " salt" : encryptParams [" salt" ],
130+ "rs" : encryptParams ["rs" ]
135131 }
136132
137133 encryptDecrypt (rlen (), encryptParams , decryptParams )
138134
139- if __name__ == ' __main__' :
135+ if __name__ == " __main__" :
140136 for i in list (range (0 ,count )):
141137 useExplicitKey ()
142138 exactlyOneRecord ()
143139 detectTruncation ()
144140 useKeyId ()
145141 useDH ()
146142
147- print (' All tests passed.' )
143+ print (" All tests passed." )
0 commit comments