33import shutil
44import tempfile
55from binascii import hexlify
6- from attic .crypto import bytes_to_long
6+ from attic .crypto import bytes_to_long , num_aes_blocks
77from attic .testsuite import AtticTestCase
88from attic .key import PlaintextKey , PassphraseKey , KeyfileKey
99from attic .helpers import Location , unhexlify
@@ -54,10 +54,15 @@ def test_keyfile(self):
5454 os .environ ['ATTIC_PASSPHRASE' ] = 'test'
5555 key = KeyfileKey .create (self .MockRepository (), self .MockArgs ())
5656 self .assert_equal (bytes_to_long (key .enc_cipher .iv , 8 ), 0 )
57- manifest = key .encrypt (b'' )
58- iv = key .extract_iv (manifest )
57+ manifest = key .encrypt (b'XXX' )
58+ self .assert_equal (key .extract_nonce (manifest ), 0 )
59+ manifest2 = key .encrypt (b'XXX' )
60+ self .assert_not_equal (manifest , manifest2 )
61+ self .assert_equal (key .decrypt (None , manifest ), key .decrypt (None , manifest2 ))
62+ self .assert_equal (key .extract_nonce (manifest2 ), 1 )
63+ iv = key .extract_nonce (manifest )
5964 key2 = KeyfileKey .detect (self .MockRepository (), manifest )
60- self .assert_equal (bytes_to_long (key2 .enc_cipher .iv , 8 ), iv + 1000 )
65+ self .assert_equal (bytes_to_long (key2 .enc_cipher .iv , 8 ), iv + num_aes_blocks ( len ( manifest ) - KeyfileKey . PAYLOAD_OVERHEAD ) )
6166 # Key data sanity check
6267 self .assert_equal (len (set ([key2 .id_key , key2 .enc_key , key2 .enc_hmac_key ])), 3 )
6368 self .assert_equal (key2 .chunk_seed == 0 , False )
@@ -79,10 +84,15 @@ def test_passphrase(self):
7984 self .assert_equal (hexlify (key .enc_hmac_key ), b'b885a05d329a086627412a6142aaeb9f6c54ab7950f996dd65587251f6bc0901' )
8085 self .assert_equal (hexlify (key .enc_key ), b'2ff3654c6daf7381dbbe718d2b20b4f1ea1e34caa6cc65f6bb3ac376b93fed2a' )
8186 self .assert_equal (key .chunk_seed , - 775740477 )
82- manifest = key .encrypt (b'' )
83- iv = key .extract_iv (manifest )
87+ manifest = key .encrypt (b'XXX' )
88+ self .assert_equal (key .extract_nonce (manifest ), 0 )
89+ manifest2 = key .encrypt (b'XXX' )
90+ self .assert_not_equal (manifest , manifest2 )
91+ self .assert_equal (key .decrypt (None , manifest ), key .decrypt (None , manifest2 ))
92+ self .assert_equal (key .extract_nonce (manifest2 ), 1 )
93+ iv = key .extract_nonce (manifest )
8494 key2 = PassphraseKey .detect (self .MockRepository (), manifest )
85- self .assert_equal (bytes_to_long (key2 .enc_cipher .iv , 8 ), iv + 1000 )
95+ self .assert_equal (bytes_to_long (key2 .enc_cipher .iv , 8 ), iv + num_aes_blocks ( len ( manifest ) - PassphraseKey . PAYLOAD_OVERHEAD ) )
8696 self .assert_equal (key .id_key , key2 .id_key )
8797 self .assert_equal (key .enc_hmac_key , key2 .enc_hmac_key )
8898 self .assert_equal (key .enc_key , key2 .enc_key )
0 commit comments