__all__ = [ "ENCRYPT", "DECRYPT"
, "AES_GCM_context"
- , "hdr_make", "hdr_read", "hdr_write"
+ , "hdr_make", "hdr_read", "hdr_fmt", "hdr_fmt_pretty"
, "I2N_HDR_SIZE" ]
###############################################################################
# tag : [u8; 16]
#
# fn hdr_read (f : handle) -> hdrinfo;
-# fn hdr_write (f : handle, h : hdrinfo) -> IOResult<usize>;
+# fn hdr_make (f : handle, h : hdrinfo) -> IOResult<usize>;
# fn hdr_fmt (h : hdrinfo) -> String;
#
import os
import pylibscrypt
import pytest
+import struct
import unittest
import deltatar.crypto as crypto
}
+def fill_mod (n):
+ buf = bytearray (n)
+ bufv = memoryview (buf)
+ for i in range (n):
+ c = i % 64 + 32
+ struct.pack_into ("c", bufv, i, chr(c).encode("UTF-8"))
+ return bytes (buf)
+
+
def faux_payload ():
return "abcd" * 42
ok, _, _ = dec.done (tag)
+ def test_crypto_aes_gcm_enc_multicnk (self):
+ cnksiz = 1 << 10
+ orig_pt = fill_mod (1 << 14)
+ NaCl = os.urandom (CRYPTO_NACL_SIZE)
+ key = os.urandom (CRYPTO_KEY_SIZE)
+ enc = crypto.AES_GCM_context (crypto.ENCRYPT, key, TEST_AES_GCM_AAD)
+ iv = enc.iv
+ dec = crypto.AES_GCM_context (crypto.DECRYPT, key, TEST_AES_GCM_AAD, iv = iv)
+
+ off = 0
+ ct = b""
+ while off < len (orig_pt):
+ upto = min (off + cnksiz, len (orig_pt))
+ ok, cnk = enc.process_chunk (orig_pt [off:upto])
+ assert ok
+ ct += cnk
+ off += cnksiz
+ ok, _, tag = enc.done ()
+ assert ok
+ assert tag
+ assert len (ct) == len (orig_pt)
+
+
+ def test_crypto_aes_gcm_dec_multicnk (self):
+ cnksiz = 1 << 10
+ orig_pt = fill_mod (1 << 14)
+ NaCl = os.urandom (CRYPTO_NACL_SIZE)
+ key = os.urandom (CRYPTO_KEY_SIZE)
+ enc = crypto.AES_GCM_context (crypto.ENCRYPT, key, TEST_AES_GCM_AAD)
+ iv = enc.iv
+ dec = crypto.AES_GCM_context (crypto.DECRYPT, key, TEST_AES_GCM_AAD, iv = iv)
+
+ off = 0
+ ct = b""
+ while off < len (orig_pt):
+ upto = min (off + cnksiz, len (orig_pt))
+ ok, cnk = enc.process_chunk (orig_pt [off:upto])
+ ct += cnk
+ off += cnksiz
+ ok, _, tag = enc.done ()
+
+ off = 0
+ pt = b""
+ while off < len (orig_pt):
+ upto = min (off + cnksiz, len (orig_pt))
+ ok, cnk = dec.process_chunk (ct [off:upto])
+ pt += cnk
+ off += cnksiz
+ ok, _, _ = dec.done (tag)
+
+ assert pt == orig_pt
+
+
def test_crypto_fmt_hdr_make (self):
meta = faux_hdr()
ok, hdr = crypto.hdr_make (meta)