当前位置: 首页>>代码示例>>Python>>正文


Python CMAC.new方法代码示例

本文整理汇总了Python中Crypto.Hash.CMAC.new方法的典型用法代码示例。如果您正苦于以下问题:Python CMAC.new方法的具体用法?Python CMAC.new怎么用?Python CMAC.new使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Crypto.Hash.CMAC的用法示例。


在下文中一共展示了CMAC.new方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: runTest

# 需要导入模块: from Crypto.Hash import CMAC [as 别名]
# 或者: from Crypto.Hash.CMAC import new [as 别名]
    def runTest(self):

        key = b"0" * 16
        data = b"\x00\x01\x02"

        def get_mv_ro(data):
            return memoryview(data)

        def get_mv_rw(data):
            return memoryview(bytearray(data))

        for get_mv in (get_mv_ro, get_mv_rw):

            # Data and key can be a memoryview (during initialization)
            key_mv = get_mv(key)
            data_mv = get_mv(data)

            h1 = CMAC.new(key, data, ciphermod=AES)
            h2 = CMAC.new(key_mv, data_mv, ciphermod=AES)
            if not data_mv.readonly:
                key_mv[:1] = b'\xFF'
                data_mv[:1] = b'\xFF'
            self.assertEqual(h1.digest(), h2.digest())

            # Data can be a memoryview (during operation)
            data_mv = get_mv(data)

            h1 = CMAC.new(key, ciphermod=AES)
            h2 = CMAC.new(key, ciphermod=AES)
            h1.update(data)
            h2.update(data_mv)
            if not data_mv.readonly:
                data_mv[:1] = b'\xFF'
            self.assertEqual(h1.digest(), h2.digest())
开发者ID:Legrandin,项目名称:pycryptodome,代码行数:36,代码来源:test_CMAC.py

示例2: _start_eax

# 需要导入模块: from Crypto.Hash import CMAC [as 别名]
# 或者: from Crypto.Hash.CMAC import new [as 别名]
    def _start_eax(self, factory, key, *args, **kwargs):

        self.nonce = _getParameter('nonce', 1, args, kwargs)
        if not self.nonce:
            raise TypeError("MODE_EAX requires a nonce")

        # Allowed transitions after initialization
        self._next = [self.update, self.encrypt, self.decrypt,
                      self.digest, self.verify]

        self._mac_len = kwargs.get('mac_len', self.block_size)
        if not (self._mac_len and 4 <= self._mac_len <= self.block_size):
            raise ValueError("Parameter 'mac_len' must not be larger than %d"
                             % self.block_size)

        self._omac = [
                CMAC.new(key, bchr(0) * (self.block_size - 1) + bchr(i),
                         ciphermod=factory)
                for i in xrange(0, 3)
                ]

        # Compute MAC of nonce
        self._omac[0].update(self.nonce)

        self._cipherMAC = self._omac[1]

        # MAC of the nonce is also the initial counter for CTR encryption
        counter_int = bytes_to_long(self._omac[0].digest())
        counter_obj = Crypto.Util.Counter.new(
                        self.block_size * 8,
                        initial_value=counter_int,
                        allow_wraparound=True)
        self._cipher = factory.new(key, MODE_CTR, counter=counter_obj)
开发者ID:Legrandin,项目名称:pycrypto,代码行数:35,代码来源:blockalgo.py

示例3: update

# 需要导入模块: from Crypto.Hash import CMAC [as 别名]
# 或者: from Crypto.Hash.CMAC import new [as 别名]
    def update(self, item):
        """Pass the next component of the vector.

        The maximum number of components you can pass is equal to the block
        length of the cipher (in bits) minus 1.

        :Parameters:
          item : byte string
            The next component of the vector.
        :Raise TypeError: when the limit on the number of components has been reached.
        :Raise ValueError: when the component is empty
        """

        if not item:
            raise ValueError("A component cannot be empty")

        if self._n_updates==0:
            raise TypeError("Too many components passed to S2V")
        self._n_updates -= 1

        mac = CMAC.new(self._key,
                       msg=self._last_string,
                       ciphermod=self._ciphermod,
                       cipher_params=self._cipher_params)
        self._cache = strxor(self._double(self._cache), mac.digest())
        self._last_string = item
开发者ID:shubhanus,项目名称:taiga,代码行数:28,代码来源:KDF.py

示例4: runTest

# 需要导入模块: from Crypto.Hash import CMAC [as 别名]
# 或者: from Crypto.Hash.CMAC import new [as 别名]
    def runTest(self):

        data_to_mac = get_tag_random("data_to_mac", 128)
        key = get_tag_random("key", 16)
        ref_mac = CMAC.new(key, msg=data_to_mac, ciphermod=AES).digest()

        # Break up in chunks of different length
        # The result must always be the same
        for chunk_length in 1, 2, 3, 7, 10, 13, 16, 40, 80, 128:

            chunks = [data_to_mac[i : i + chunk_length] for i in range(0, len(data_to_mac), chunk_length)]

            mac = CMAC.new(key, ciphermod=AES)
            for chunk in chunks:
                mac.update(chunk)
            self.assertEqual(ref_mac, mac.digest())
开发者ID:dongweigogo,项目名称:pycryptodome,代码行数:18,代码来源:test_CMAC.py

示例5: test_update_after_digest

# 需要导入模块: from Crypto.Hash import CMAC [as 别名]
# 或者: from Crypto.Hash.CMAC import new [as 别名]
    def test_update_after_digest(self):
        msg = b"rrrrttt"
        key = b"4" * 16

        # Normally, update() cannot be done after digest()
        h = CMAC.new(key, msg[:4], ciphermod=AES)
        dig1 = h.digest()
        self.assertRaises(TypeError, h.update, msg[4:])
        dig2 = CMAC.new(key, msg, ciphermod=AES).digest()

        # With the proper flag, it is allowed
        h2 = CMAC.new(key, msg[:4], ciphermod=AES, update_after_digest=True)
        self.assertEquals(h2.digest(), dig1)
        # ... and the subsequent digest applies to the entire message
        # up to that point
        h2.update(msg[4:])
        self.assertEquals(h2.digest(), dig2)
开发者ID:Legrandin,项目名称:pycryptodome,代码行数:19,代码来源:test_CMAC.py

示例6: test_internal_caching

# 需要导入模块: from Crypto.Hash import CMAC [as 别名]
# 或者: from Crypto.Hash.CMAC import new [as 别名]
    def test_internal_caching(self):
        """Verify that internal caching is implemented correctly"""

        data_to_mac = get_tag_random("data_to_mac", 128)
        key = get_tag_random("key", 16)
        ref_mac = CMAC.new(key, msg=data_to_mac, ciphermod=AES).digest()

        # Break up in chunks of different length
        # The result must always be the same
        for chunk_length in 1, 2, 3, 7, 10, 13, 16, 40, 80, 128:

            chunks = [data_to_mac[i:i+chunk_length] for i in
                      range(0, len(data_to_mac), chunk_length)]

            mac = CMAC.new(key, ciphermod=AES)
            for chunk in chunks:
                mac.update(chunk)
            self.assertEqual(ref_mac, mac.digest())
开发者ID:Legrandin,项目名称:pycryptodome,代码行数:20,代码来源:test_CMAC.py

示例7: test_create_mac

# 需要导入模块: from Crypto.Hash import CMAC [as 别名]
# 或者: from Crypto.Hash.CMAC import new [as 别名]
 def test_create_mac(self, tv):
     self._id = "Wycheproof MAC creation Test #" + str(tv.id)
     
     try:
         tag = CMAC.new(tv.key, tv.msg, ciphermod=AES, mac_len=tv.tag_size).digest()
     except ValueError as e:
         if len(tv.key) not in (16, 24, 32) and "key length" in str(e):
             return
         raise e
     if tv.valid:
         self.assertEqual(tag, tv.tag)
         self.warn(tv)
开发者ID:Legrandin,项目名称:pycryptodome,代码行数:14,代码来源:test_CMAC.py

示例8: derive

# 需要导入模块: from Crypto.Hash import CMAC [as 别名]
# 或者: from Crypto.Hash.CMAC import new [as 别名]
 def derive(self):
     """"Derive a secret from the vector of components.
     
     :Return: a byte string, as long as the block length of the cipher.
     """
     if len(self._last_string) >= 16:
         final = self._last_string[:-16] + strxor(self._last_string[-16:], self._cache)
     else:
         padded = (self._last_string + bchr(128) + bchr(0) * 15)[:16]
         final = strxor(padded, self._double(self._cache))
     mac = CMAC.new(self._key, msg=final, ciphermod=self._ciphermod)
     return mac.digest()
开发者ID:webiumsk,项目名称:WOT-0.9.12-CT,代码行数:14,代码来源:kdf.py

示例9: cal_mic

# 需要导入模块: from Crypto.Hash import CMAC [as 别名]
# 或者: from Crypto.Hash.CMAC import new [as 别名]
 def cal_mic(key, typ='normal', **kwargs):
     if typ == 'normal':
         msg = '{MHDR}{FHDR}{FPort}{FRMPayload}'.format(**kwargs)
         msg_bytes = bytearray.fromhex(msg)
         msg_length = '{:0>2x}'.format(len(msg_bytes))
         B0 = DeviceOp._B0(msg_length=msg_length, **kwargs)
         obj_msg = B0 + msg
         obj_msg = bytearray.fromhex(obj_msg)
     else:
         msg = '{MHDR}{AppEUI}{DevEUI}{DevNonce}'.format(**kwargs)
         obj_msg = bytearray.fromhex(msg)
     cobj = CMAC.new(key, ciphermod=AES)
     cobj.update(obj_msg)
     return cobj.hexdigest()[:8]
开发者ID:houluy,项目名称:lora-tester,代码行数:16,代码来源:phy_parser.py

示例10: test_verify_mac

# 需要导入模块: from Crypto.Hash import CMAC [as 别名]
# 或者: from Crypto.Hash.CMAC import new [as 别名]
 def test_verify_mac(self, tv):
     self._id = "Wycheproof MAC verification Test #" + str(tv.id)
    
     try:
         mac = CMAC.new(tv.key, tv.msg, ciphermod=AES, mac_len=tv.tag_size)
     except ValueError as e:
         if len(tv.key) not in (16, 24, 32) and "key length" in str(e):
             return
         raise e
     try:
         mac.verify(tv.tag)
     except ValueError:
         assert not tv.valid
     else:
         assert tv.valid
         self.warn(tv)
开发者ID:Legrandin,项目名称:pycryptodome,代码行数:18,代码来源:test_CMAC.py

示例11: __init__

# 需要导入模块: from Crypto.Hash import CMAC [as 别名]
# 或者: from Crypto.Hash.CMAC import new [as 别名]
    def __init__(self, factory, key, nonce, mac_len, cipher_params):
        """EAX cipher mode"""

        self.block_size = factory.block_size
        """The block size of the underlying cipher, in bytes."""

        self.nonce = nonce
        """The nonce originally used to create the object."""

        self._mac_len = mac_len
        self._mac_tag = None  # Cache for MAC tag

        # Allowed transitions after initialization
        self._next = [self.update, self.encrypt, self.decrypt,
                      self.digest, self.verify]

        # MAC tag length
        if not (4 <= self._mac_len <= self.block_size):
            raise ValueError("Parameter 'mac_len' must not be larger than %d"
                             % self.block_size)

        # Nonce cannot be empty and must be a byte string
        if len(nonce) == 0:
            raise ValueError("Nonce cannot be empty in EAX mode")
        if not byte_string(nonce):
            raise TypeError("Nonce must be a byte string")

        self._omac = [
                CMAC.new(key,
                         bchr(0) * (self.block_size - 1) + bchr(i),
                         ciphermod=factory,
                         cipher_params=cipher_params)
                for i in range(0, 3)
                ]

        # Compute MAC of nonce
        self._omac[0].update(nonce)
        self._signer = self._omac[1]

        # MAC of the nonce is also the initial counter for CTR encryption
        counter_int = bytes_to_long(self._omac[0].digest())
        self._cipher = factory.new(key,
                                   factory.MODE_CTR,
                                   initial_value=counter_int,
                                   nonce=b(""),
                                   **cipher_params)
开发者ID:erics8,项目名称:wwqLyParse,代码行数:48,代码来源:_mode_eax.py

示例12: derive

# 需要导入模块: from Crypto.Hash import CMAC [as 别名]
# 或者: from Crypto.Hash.CMAC import new [as 别名]
    def derive(self):
        """"Derive a secret from the vector of components.

        :Return: a byte string, as long as the block length of the cipher.
        """

        if len(self._last_string) >= 16:
            # xorend
            final = self._last_string[:-16] + strxor(self._last_string[-16:], self._cache)
        else:
            # zero-pad & xor
            padded = (self._last_string + b'\x80' + b'\x00' * 15)[:16]
            final = strxor(padded, self._double(self._cache))
        mac = CMAC.new(self._key,
                       msg=final,
                       ciphermod=self._ciphermod,
                       cipher_params=self._cipher_params)
        return mac.digest()
开发者ID:shotgunsoftware,项目名称:tk-framework-desktopserver,代码行数:20,代码来源:KDF.py


注:本文中的Crypto.Hash.CMAC.new方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。