소스 검색

cosmetic: s/tag/mac/

mac is a more specific term, tag is too general

of course it is only a real MAC if we have keys, otherwise it is a hash.
Thomas Waldmann 10 년 전
부모
커밋
3149f6a828
3개의 변경된 파일42개의 추가작업 그리고 42개의 파일을 삭제
  1. 11 11
      attic/crypto.pyx
  2. 22 22
      attic/key.py
  3. 9 9
      attic/testsuite/crypto.py

+ 11 - 11
attic/crypto.pyx

@@ -10,7 +10,7 @@ API_VERSION = 2
 AES_CTR_MODE = 1
 AES_CTR_MODE = 1
 AES_GCM_MODE = 2
 AES_GCM_MODE = 2
 
 
-TAG_SIZE = 16  # bytes; 128 bits is the maximum allowed value. see "hack" below.
+MAC_SIZE = 16  # bytes; 128 bits is the maximum allowed value. see "hack" below.
 IV_SIZE = 16  # bytes; 128 bits
 IV_SIZE = 16  # bytes; 128 bits
 
 
 cdef extern from "openssl/rand.h":
 cdef extern from "openssl/rand.h":
@@ -159,13 +159,13 @@ cdef class AES:
             if not EVP_DecryptUpdate(&self.ctx, NULL, &outl, aad, aadl):
             if not EVP_DecryptUpdate(&self.ctx, NULL, &outl, aad, aadl):
                 raise Exception('EVP_DecryptUpdate failed')
                 raise Exception('EVP_DecryptUpdate failed')
 
 
-    def compute_tag_and_encrypt(self, data):
+    def compute_mac_and_encrypt(self, data):
         cdef int inl = len(data)
         cdef int inl = len(data)
         cdef int ctl = 0
         cdef int ctl = 0
         cdef int outl = 0
         cdef int outl = 0
         # note: modes that use padding, need up to one extra AES block (16B)
         # note: modes that use padding, need up to one extra AES block (16B)
         cdef unsigned char *out = <unsigned char *>malloc(inl+16)
         cdef unsigned char *out = <unsigned char *>malloc(inl+16)
-        cdef unsigned char *tag = <unsigned char *>malloc(TAG_SIZE)
+        cdef unsigned char *mac = <unsigned char *>malloc(MAC_SIZE)
         if not out:
         if not out:
             raise MemoryError
             raise MemoryError
         try:
         try:
@@ -176,16 +176,16 @@ cdef class AES:
                 raise Exception('EVP_EncryptFinal failed')
                 raise Exception('EVP_EncryptFinal failed')
             ctl += outl
             ctl += outl
             if self.mode == AES_GCM_MODE:
             if self.mode == AES_GCM_MODE:
-                # Get tag (only GCM mode. for CTR, the returned tag is undefined)
-                if not EVP_CIPHER_CTX_ctrl(&self.ctx, EVP_CTRL_GCM_GET_TAG, TAG_SIZE, tag):
+                # Get tag (mac) - only GCM mode. for CTR, the returned mac is undefined
+                if not EVP_CIPHER_CTX_ctrl(&self.ctx, EVP_CTRL_GCM_GET_TAG, MAC_SIZE, mac):
                     raise Exception('EVP_CIPHER_CTX_ctrl GET TAG failed')
                     raise Exception('EVP_CIPHER_CTX_ctrl GET TAG failed')
             # hack: caller wants 32B tags (256b), so we give back that amount
             # hack: caller wants 32B tags (256b), so we give back that amount
-            return (tag[:TAG_SIZE] + b'\x00'*16), out[:ctl]
+            return (mac[:MAC_SIZE] + b'\x00'*16), out[:ctl]
         finally:
         finally:
-            free(tag)
+            free(mac)
             free(out)
             free(out)
 
 
-    def check_tag_and_decrypt(self, tag, data):
+    def check_mac_and_decrypt(self, mac, data):
         cdef int inl = len(data)
         cdef int inl = len(data)
         cdef int ptl = 0
         cdef int ptl = 0
         cdef int outl = 0
         cdef int outl = 0
@@ -200,11 +200,11 @@ cdef class AES:
                 raise Exception('EVP_DecryptUpdate failed')
                 raise Exception('EVP_DecryptUpdate failed')
             ptl = outl
             ptl = outl
             if self.mode == AES_GCM_MODE:
             if self.mode == AES_GCM_MODE:
-                # Set expected tag value.
-                if not EVP_CIPHER_CTX_ctrl(&self.ctx, EVP_CTRL_GCM_SET_TAG, TAG_SIZE, tag):
+                # Set expected tag (mac) value.
+                if not EVP_CIPHER_CTX_ctrl(&self.ctx, EVP_CTRL_GCM_SET_TAG, MAC_SIZE, mac):
                     raise Exception('EVP_CIPHER_CTX_ctrl SET TAG failed')
                     raise Exception('EVP_CIPHER_CTX_ctrl SET TAG failed')
             if EVP_DecryptFinal_ex(&self.ctx, out+ptl, &outl) <= 0:
             if EVP_DecryptFinal_ex(&self.ctx, out+ptl, &outl) <= 0:
-                # for GCM mode, a failure here means corrupted / tampered tag or data
+                # for GCM mode, a failure here means corrupted / tampered tag (mac) or data
                 raise Exception('EVP_DecryptFinal failed')
                 raise Exception('EVP_DecryptFinal failed')
             ptl += outl
             ptl += outl
             return out[:ptl]
             return out[:ptl]

+ 22 - 22
attic/key.py

@@ -111,8 +111,8 @@ class GHASH:
         mac_cipher = AES(mode=AES_GCM_MODE, is_encrypt=True, key=self.key, iv=b'\0' * 16)
         mac_cipher = AES(mode=AES_GCM_MODE, is_encrypt=True, key=self.key, iv=b'\0' * 16)
         # GMAC = aes-gcm with all data as AAD, no data as to-be-encrypted data
         # GMAC = aes-gcm with all data as AAD, no data as to-be-encrypted data
         mac_cipher.add(bytes(self.data))
         mac_cipher.add(bytes(self.data))
-        tag, _ = mac_cipher.compute_tag_and_encrypt(b'')
-        return tag
+        hash, _ = mac_cipher.compute_mac_and_encrypt(b'')
+        return hash
 
 
 
 
 class HMAC_SHA256(HMAC):
 class HMAC_SHA256(HMAC):
@@ -202,10 +202,10 @@ class PLAIN:
     def __init__(self, **kw):
     def __init__(self, **kw):
         pass
         pass
 
 
-    def compute_tag_and_encrypt(self, data):
+    def compute_mac_and_encrypt(self, data):
         return b'', b'', data
         return b'', b'', data
 
 
-    def check_tag_and_decrypt(self, tag, iv_last8, data):
+    def check_mac_and_decrypt(self, mac, iv_last8, data):
         return data
         return data
 
 
 
 
@@ -218,22 +218,22 @@ class AES_CTR_HMAC:
         self.enc_cipher = AES(mode=AES_CTR_MODE, is_encrypt=True, key=enc_key, iv=enc_iv)
         self.enc_cipher = AES(mode=AES_CTR_MODE, is_encrypt=True, key=enc_key, iv=enc_iv)
         self.dec_cipher = AES(mode=AES_CTR_MODE, is_encrypt=False, key=enc_key)
         self.dec_cipher = AES(mode=AES_CTR_MODE, is_encrypt=False, key=enc_key)
 
 
-    def compute_tag_and_encrypt(self, data):
+    def compute_mac_and_encrypt(self, data):
         self.enc_cipher.reset(iv=self.enc_iv)
         self.enc_cipher.reset(iv=self.enc_iv)
         iv_last8 = self.enc_iv[8:]
         iv_last8 = self.enc_iv[8:]
-        _, data = self.enc_cipher.compute_tag_and_encrypt(data)
+        _, data = self.enc_cipher.compute_mac_and_encrypt(data)
         # increase the IV (counter) value so same value is never used twice
         # increase the IV (counter) value so same value is never used twice
         current_iv = bytes_to_long(iv_last8)
         current_iv = bytes_to_long(iv_last8)
         self.enc_iv = PREFIX + long_to_bytes(current_iv + num_aes_blocks(len(data)))
         self.enc_iv = PREFIX + long_to_bytes(current_iv + num_aes_blocks(len(data)))
-        tag = HMAC(self.hmac_key, iv_last8 + data, sha256).digest()  # XXX mac / hash flexibility
-        return tag, iv_last8, data
+        mac = HMAC(self.hmac_key, iv_last8 + data, sha256).digest()  # XXX mac / hash flexibility
+        return mac, iv_last8, data
 
 
-    def check_tag_and_decrypt(self, tag, iv_last8, data):
+    def check_mac_and_decrypt(self, mac, iv_last8, data):
         iv = PREFIX + iv_last8
         iv = PREFIX + iv_last8
-        if HMAC(self.hmac_key, iv_last8 + data, sha256).digest() != tag:
+        if HMAC(self.hmac_key, iv_last8 + data, sha256).digest() != mac:
             raise IntegrityError('Encryption envelope checksum mismatch')
             raise IntegrityError('Encryption envelope checksum mismatch')
         self.dec_cipher.reset(iv=iv)
         self.dec_cipher.reset(iv=iv)
-        data = self.dec_cipher.check_tag_and_decrypt(None, data)
+        data = self.dec_cipher.check_mac_and_decrypt(None, data)
         return data
         return data
 
 
 
 
@@ -246,22 +246,22 @@ class AES_GCM:
         self.enc_cipher = AES(mode=AES_GCM_MODE, is_encrypt=True, key=enc_key, iv=enc_iv)
         self.enc_cipher = AES(mode=AES_GCM_MODE, is_encrypt=True, key=enc_key, iv=enc_iv)
         self.dec_cipher = AES(mode=AES_GCM_MODE, is_encrypt=False, key=enc_key)
         self.dec_cipher = AES(mode=AES_GCM_MODE, is_encrypt=False, key=enc_key)
 
 
-    def compute_tag_and_encrypt(self, data):
+    def compute_mac_and_encrypt(self, data):
         self.enc_cipher.reset(iv=self.enc_iv)
         self.enc_cipher.reset(iv=self.enc_iv)
         iv_last8 = self.enc_iv[8:]
         iv_last8 = self.enc_iv[8:]
         self.enc_cipher.add(iv_last8)
         self.enc_cipher.add(iv_last8)
-        tag, data = self.enc_cipher.compute_tag_and_encrypt(data)
+        mac, data = self.enc_cipher.compute_mac_and_encrypt(data)
         # increase the IV (counter) value so same value is never used twice
         # increase the IV (counter) value so same value is never used twice
         current_iv = bytes_to_long(iv_last8)
         current_iv = bytes_to_long(iv_last8)
         self.enc_iv = PREFIX + long_to_bytes(current_iv + num_aes_blocks(len(data)))
         self.enc_iv = PREFIX + long_to_bytes(current_iv + num_aes_blocks(len(data)))
-        return tag, iv_last8, data
+        return mac, iv_last8, data
 
 
-    def check_tag_and_decrypt(self, tag, iv_last8, data):
+    def check_mac_and_decrypt(self, mac, iv_last8, data):
         iv = PREFIX + iv_last8
         iv = PREFIX + iv_last8
         self.dec_cipher.reset(iv=iv)
         self.dec_cipher.reset(iv=iv)
         self.dec_cipher.add(iv_last8)
         self.dec_cipher.add(iv_last8)
         try:
         try:
-            data = self.dec_cipher.check_tag_and_decrypt(tag, data)
+            data = self.dec_cipher.check_mac_and_decrypt(mac, data)
         except Exception:
         except Exception:
             raise IntegrityError('Encryption envelope checksum mismatch')
             raise IntegrityError('Encryption envelope checksum mismatch')
         return data
         return data
@@ -300,7 +300,7 @@ class KeyBase(object):
 
 
     def encrypt(self, data):
     def encrypt(self, data):
         data = self.compressor.compress(data)
         data = self.compressor.compress(data)
-        mac, iv_last8, data = self.cipher.compute_tag_and_encrypt(data)
+        mac, iv_last8, data = self.cipher.compute_mac_and_encrypt(data)
         meta = Meta(compr_type=self.compressor.TYPE, key_type=self.TYPE,
         meta = Meta(compr_type=self.compressor.TYPE, key_type=self.TYPE,
                     mac_type=self.maccer_cls.TYPE, cipher_type=self.cipher.TYPE,
                     mac_type=self.maccer_cls.TYPE, cipher_type=self.cipher.TYPE,
                     stored_iv=iv_last8)
                     stored_iv=iv_last8)
@@ -312,7 +312,7 @@ class KeyBase(object):
         assert isinstance(self, keyer)
         assert isinstance(self, keyer)
         assert self.maccer_cls is maccer
         assert self.maccer_cls is maccer
         assert self.cipher_cls is cipher
         assert self.cipher_cls is cipher
-        data = self.cipher.check_tag_and_decrypt(mac, meta.stored_iv, data)
+        data = self.cipher.check_mac_and_decrypt(mac, meta.stored_iv, data)
         data = self.compressor.decompress(data)
         data = self.compressor.decompress(data)
         if id and self.id_hash(data) != id:
         if id and self.id_hash(data) != id:
             raise IntegrityError('Chunk id verification failed')
             raise IntegrityError('Chunk id verification failed')
@@ -486,7 +486,7 @@ class KeyfileKey(AESKeyBase):
         key = pbkdf2_sha256(passphrase.encode('utf-8'), d[b'salt'], d[b'iterations'], 32)
         key = pbkdf2_sha256(passphrase.encode('utf-8'), d[b'salt'], d[b'iterations'], 32)
         try:
         try:
             cipher = AES(mode=AES_GCM_MODE, is_encrypt=False, key=key, iv=b'\0'*16)
             cipher = AES(mode=AES_GCM_MODE, is_encrypt=False, key=key, iv=b'\0'*16)
-            data = cipher.check_tag_and_decrypt(d[b'hash'], d[b'data'])
+            data = cipher.check_mac_and_decrypt(d[b'hash'], d[b'data'])
             return data
             return data
         except Exception:
         except Exception:
             return None
             return None
@@ -496,13 +496,13 @@ class KeyfileKey(AESKeyBase):
         iterations = 100000
         iterations = 100000
         key = pbkdf2_sha256(passphrase.encode('utf-8'), salt, iterations, 32)
         key = pbkdf2_sha256(passphrase.encode('utf-8'), salt, iterations, 32)
         cipher = AES(mode=AES_GCM_MODE, is_encrypt=True, key=key, iv=b'\0'*16)
         cipher = AES(mode=AES_GCM_MODE, is_encrypt=True, key=key, iv=b'\0'*16)
-        tag, cdata = cipher.compute_tag_and_encrypt(data)
+        mac, cdata = cipher.compute_mac_and_encrypt(data)
         d = {
         d = {
             'version': 1,
             'version': 1,
             'salt': salt,
             'salt': salt,
             'iterations': iterations,
             'iterations': iterations,
             'algorithm': 'gmac',
             'algorithm': 'gmac',
-            'hash': tag,
+            'hash': mac,
             'data': cdata,
             'data': cdata,
         }
         }
         return msgpack.packb(d)
         return msgpack.packb(d)
@@ -655,7 +655,7 @@ def parser02(all_data):
 def parser03(all_data):  # new & flexible
 def parser03(all_data):  # new & flexible
     """
     """
     Payload layout:
     Payload layout:
-    always: TYPE(1) + MSGPACK((tag, meta, data))
+    always: TYPE(1) + MSGPACK((mac, meta, data))
 
 
     meta is a Meta namedtuple and contains all required information about data.
     meta is a Meta namedtuple and contains all required information about data.
     data is maybe compressed (see meta) and maybe encrypted (see meta).
     data is maybe compressed (see meta) and maybe encrypted (see meta).

+ 9 - 9
attic/testsuite/crypto.py

@@ -34,11 +34,11 @@ class CryptoTestCase(AtticTestCase):
         data = b'foo' * 10
         data = b'foo' * 10
         # encrypt
         # encrypt
         aes = AES(mode=AES_CTR_MODE, is_encrypt=True, key=key, iv=iv)
         aes = AES(mode=AES_CTR_MODE, is_encrypt=True, key=key, iv=iv)
-        _, cdata = aes.compute_tag_and_encrypt(data)
+        _, cdata = aes.compute_mac_and_encrypt(data)
         self.assert_equal(hexlify(cdata), b'c6efb702de12498f34a2c2bbc8149e759996d08bf6dc5c610aefc0c3a466')
         self.assert_equal(hexlify(cdata), b'c6efb702de12498f34a2c2bbc8149e759996d08bf6dc5c610aefc0c3a466')
-        # decrypt (correct tag/cdata)
+        # decrypt (correct mac/cdata)
         aes = AES(mode=AES_CTR_MODE, is_encrypt=False, key=key, iv=iv)
         aes = AES(mode=AES_CTR_MODE, is_encrypt=False, key=key, iv=iv)
-        pdata = aes.check_tag_and_decrypt(None, cdata)
+        pdata = aes.check_mac_and_decrypt(None, cdata)
         self.assert_equal(data, pdata)
         self.assert_equal(data, pdata)
 
 
     def test_aes_gcm(self):
     def test_aes_gcm(self):
@@ -47,14 +47,14 @@ class CryptoTestCase(AtticTestCase):
         data = b'foo' * 10
         data = b'foo' * 10
         # encrypt
         # encrypt
         aes = AES(mode=AES_GCM_MODE, is_encrypt=True, key=key, iv=iv)
         aes = AES(mode=AES_GCM_MODE, is_encrypt=True, key=key, iv=iv)
-        tag, cdata = aes.compute_tag_and_encrypt(data)
-        self.assert_equal(hexlify(tag), b'c98aa10eb6b7031bcc2160878d9438fb00000000000000000000000000000000')
+        mac, cdata = aes.compute_mac_and_encrypt(data)
+        self.assert_equal(hexlify(mac), b'c98aa10eb6b7031bcc2160878d9438fb00000000000000000000000000000000')
         self.assert_equal(hexlify(cdata), b'841bcce405df769d22ee9f7f012edf5dc7fb2594d924c7400ffd050f2741')
         self.assert_equal(hexlify(cdata), b'841bcce405df769d22ee9f7f012edf5dc7fb2594d924c7400ffd050f2741')
-        # decrypt (correct tag/cdata)
+        # decrypt (correct mac/cdata)
         aes = AES(mode=AES_GCM_MODE, is_encrypt=False, key=key, iv=iv)
         aes = AES(mode=AES_GCM_MODE, is_encrypt=False, key=key, iv=iv)
-        pdata = aes.check_tag_and_decrypt(tag, cdata)
+        pdata = aes.check_mac_and_decrypt(mac, cdata)
         self.assert_equal(data, pdata)
         self.assert_equal(data, pdata)
-        # decrypt (incorrect tag/cdata)
+        # decrypt (incorrect mac/cdata)
         aes = AES(mode=AES_GCM_MODE, is_encrypt=False, key=key, iv=iv)
         aes = AES(mode=AES_GCM_MODE, is_encrypt=False, key=key, iv=iv)
         cdata = b'x' + cdata[1:]  # corrupt cdata
         cdata = b'x' + cdata[1:]  # corrupt cdata
-        self.assertRaises(Exception, aes.check_tag_and_decrypt, tag, cdata)
+        self.assertRaises(Exception, aes.check_mac_and_decrypt, mac, cdata)