Parcourir la source

add iv as optional encrypt() param

Thomas Waldmann il y a 8 ans
Parent
commit
ef880de64c
1 fichiers modifiés avec 8 ajouts et 4 suppressions
  1. 8 4
      src/borg/crypto/low_level.pyx

+ 8 - 4
src/borg/crypto/low_level.pyx

@@ -224,12 +224,14 @@ cdef class AES256_CTR_HMAC_SHA256:
         EVP_CIPHER_CTX_free(self.ctx)
         HMAC_CTX_free(self.hmac_ctx)
 
-    def encrypt(self, data, header=b'', aad_offset=0):
+    def encrypt(self, data, header=b'', aad_offset=0, iv=None):
         """
         encrypt data, compute mac over aad + iv + cdata, prepend header.
         aad_offset is the offset into the header where aad starts.
         """
-        assert self.blocks == 0, 'set_iv needs to be called before encrypt'
+        if iv is not None:
+            self.set_iv(iv)
+        assert self.blocks == 0, 'iv needs to be set before encrypt is called'
         cdef int ilen = len(data)
         cdef int hlen = len(header)
         cdef int aoffset = aad_offset
@@ -382,12 +384,14 @@ cdef class _AEAD_BASE:
     def __dealloc__(self):
         EVP_CIPHER_CTX_free(self.ctx)
 
-    def encrypt(self, data, header=b'', aad_offset=0):
+    def encrypt(self, data, header=b'', aad_offset=0, iv=None):
         """
         encrypt data, compute mac over aad + iv + cdata, prepend header.
         aad_offset is the offset into the header where aad starts.
         """
-        assert self.blocks == 0, 'set_iv needs to be called before encrypt'
+        if iv is not None:
+            self.set_iv(iv)
+        assert self.blocks == 0, 'iv needs to be set before encrypt is called'
         cdef int ilen = len(data)
         cdef int hlen = len(header)
         cdef int aoffset = aad_offset