Exemple #1
0
def new(key, mode, IV=None):
    if mode == MODE_ECB:
        return ECBMode(AES(key))
    elif mode == MODE_CBC:
        if IV is None:
            raise ValueError, "CBC mode needs an IV value!"

        return CBCMode(AES(key), IV)
    else:
        raise NotImplementedError
Exemple #2
0
def aes_ecb_decrypt(ctext, key, unpad=True):
    if HAVE_CRYPTO:
        cipher = AES.new(key, mode=AES.MODE_ECB)
    else:
        cipher = AES(key, mode="ECB")
    ptext = cipher.decrypt(ctext)
    return unpad_pkcs7_aes(ptext) if unpad else ptext
Exemple #3
0
 def _get_cipher(self):
     try:
         from Crypto.Cipher import AES
         return AES.new(self.key)
     except ImportError:
         from aescbc import AES, noPadding
         return AES(self.key, padding=noPadding())
Exemple #4
0
def encrypt(input_message, user_id):

    master_key = long(user_id)
    print master_key
    a = AES(master_key)
    print a.encrypt(int(input_message.encode("hex")))
    aes_key_cipher = rsa_encrypt(user_id, n, e, 15)
    print aes_key_cipher
Exemple #5
0
def decrypt(cipher_text, aes_cipher_key):

    aes_key = rsa_decrypt(aes_cipher_key, n, d, 15)
    aes_key = aes_key[0:5]
    master_key = long(aes_key)
    a = AES(master_key)
    result = a.decrypt(cipher_text)
    print str(result).decode("hex")
def create_decryptor(self, key, sequence):
    if key.method != "AES-128":
        raise StreamError("Unable to decrypt cipher {0}", key.method)

    if not key.uri:
        raise StreamError("Missing URI to decryption key")

    if self.key_uri != key.uri:
        zoom_key = self.reader.stream.session.options.get("zoom-key")
        saw_key = self.reader.stream.session.options.get("saw-key")
        your_key = self.reader.stream.session.options.get("your-key")

        if zoom_key:
            uri = 'http://www.zoomtv.me/k.php?q=' + base64.urlsafe_b64encode(
                zoom_key + base64.urlsafe_b64encode(key.uri))
        elif saw_key:
            if 'foxsportsgo' in key.uri:
                _tmp = key.uri.split('/')
                uri = urljoin(saw_key,
                              '/m/fream?p=' + _tmp[-4] + '&k=' + _tmp[-1])
            elif 'nlsk.neulion' in key.uri:
                _tmp = key.uri.split('?')
                uri = urljoin(saw_key, '/m/stream?' + _tmp[-1])
            elif 'nhl.com' in key.uri:
                _tmp = key.uri.split('/')
                uri = urljoin(saw_key,
                              '/m/streams?ci=' + _tmp[-3] + '&k=' + _tmp[-1])

        elif your_key:
            if 'mlb.com' in key.uri:
                _tmp = key.uri.split('?')
                uri = urljoin(your_key, '/mlb/get_key/' + _tmp[-1])
            elif 'espn3/auth' in key.uri:
                _tmp = key.uri.split('?')
                uri = urljoin(your_key, '/ncaa/get_key/' + _tmp[-1])
            elif 'nhl.com' in key.uri:
                _tmp = key.uri.split('nhl.com/')
                uri = urljoin(your_key, '/nhl/get_key/' + _tmp[-1])
            else:
                uri = key.uri
        else:
            uri = key.uri

        res = self.session.http.get(uri,
                                    exception=StreamError,
                                    **self.reader.request_params)
        self.key_data = res.content
        self.key_uri = key.uri

    iv = key.iv or num_to_iv(sequence)
    if _android_ssl:
        return enc(self.key_data, iv)
    elif _oscrypto:
        return AES(self.key_data, iv)
    else:
        return AES.new(self.key_data, AES.MODE_CBC, iv)
Exemple #7
0
def pyOCB_encrypt(text):
    aes = AES(128)
    ocb = OCB(aes)
    key = bytearray().fromhex('A45F5FDEA5C088D1D7C8BE37CABC8C5C')
    ocb.setKey(key)
    nonce = bytearray(range(16))
    ocb.setNonce(nonce)
    plaintext = bytearray('The Magic Words are Squeamish Ossifrage')
    header = bytearray('Recipient: [email protected]')
    (tag,ciphertext) = ocb.encrypt(plaintext, header)
    (is_authentic, plaintext2) = ocb.decrypt(header, ciphertext, tag)
    return True
Exemple #8
0
def aes_cbc_encrypt(ptext, key, iv=b"\x00" * 16):
    if HAVE_CRYPTO:
        # `AES.MODE_ECB` isn't a typo; we're implementing CBC by hand.
        cipher = AES.new(key, AES.MODE_ECB)
        ptext, ctext, ct_block = pad_pkcs7(ptext), bytearray(), iv

        for i in range(0, len(ptext), 16):
            pt_block = repeating_key_xor(ptext[i:i + 16], ct_block)
            ct_block = cipher.encrypt(pt_block)
            ctext.extend(ct_block)

        return bytes(ctext)
    else:
        cipher = AES(key, mode="CBC", iv=iv)
        return cipher.encrypt(pad_pkcs7(ptext))
Exemple #9
0
def AES_ECB_keysize(AES: callable) -> int:
    """
    Returns keysize used by an AES ECB encryption function.
    """

    text = "A random key long enough to decode the key size used in the encryption"

    # Checks repetition of blocks.
    # Looks for increase in cipher length because the moment text length goes over blocksize, a new block is created of blocksize, padded.
    # Thus we can infer block size from the increase in length observed.
    for i in range(1, len(text)):
        plaintext = text[:i] + text[:i]
        cipher = AES(plaintext.encode())
        if cipher[:i] == cipher[i:2 * i]:
            print("Key size used for the given ciphertext is {}".format(i))
            return i
Exemple #10
0
def aes_ctr(bstream, key, nonce=0):
    nonce = aes_ctr_pack(nonce)

    if HAVE_CRYPTO:
        # `AES.MODE_ECB` isn't a typo; we're implementing CTR by hand.
        cipher = AES.new(key, mode=AES.MODE_ECB)
    else:
        cipher = AES(key, mode="ECB")

    result = bytearray()

    for count, i in enumerate(range(0, len(bstream), 16)):
        key_block = cipher.encrypt(nonce + aes_ctr_pack(count))
        result.extend(kb ^ sb for kb, sb in zip(key_block, bstream[i:i + 16]))

    return bytes(result)
Exemple #11
0
def decrypt_pass(cpassword):
    '''
    AES key for cpassword decryption: http://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be%28v=PROT.13%29#endNote2
    '''
    key = (b'\x4e\x99\x06\xe8'
           b'\xfc\xb6\x6c\xc9'
           b'\xfa\xf4\x93\x10'
           b'\x62\x0f\xfe\xe8'
           b'\xf4\x96\xe8\x06'
           b'\xcc\x05\x79\x90'
           b'\x20\x9b\x09\xa4'
           b'\x33\xb6\x6c\x1b')
    cpass_len = len(cpassword)
    padded_pass = (cpassword + "=" * ((4 - cpass_len % 4) % 4))
    password = b64decode(padded_pass)
    decrypter = AES(key, AES.MODE_CBC, '\x00' * 16)

    return decrypter.decrypt(password)
Exemple #12
0
def aes_cbc_decrypt(ctext, key, iv=b"\x00" * 16, unpad=True):
    if HAVE_CRYPTO:
        # `AES.MODE_ECB` isn't a typo; we're implementing CBC by hand.
        cipher = AES.new(key, AES.MODE_ECB)
        ptext, ct_block = bytearray(), iv

        for i in range(0, len(ctext), 16):
            next_ct_block = ctext[i:i + 16]
            pt_block = repeating_key_xor(cipher.decrypt(next_ct_block),
                                         ct_block)
            ct_block = next_ct_block
            ptext.extend(pt_block)

        ptext = bytes(ptext)
    else:
        cipher = AES(key, mode="CBC", iv=iv)
        ptext = cipher.decrypt(ctext)

    return unpad_pkcs7_aes(ptext) if unpad else ptext
Exemple #13
0
    def aes_encipher_block(self, key, block):

        #print('KEY',key)
        key=key[0].to_bytes(4,'big')+ \
            key[1].to_bytes(4,'big')+ \
            key[2].to_bytes(4,'big')+ \
            key[3].to_bytes(4,'big')
        #print('key',binascii.hexlify(key))
        if os.__name__ == 'os':
            my_aes = AES.new(key, AES.MODE_ECB)
        else:
            my_aes = AES(key, AES.MODE_ECB)
        result = my_aes.encrypt(block[0].to_bytes(4, 'big') +
                                block[1].to_bytes(4, 'big') +
                                block[2].to_bytes(4, 'big') +
                                block[3].to_bytes(4, 'big'))
        result = (int.from_bytes(result[0:4],
                                 'big'), int.from_bytes(result[4:8], 'big'),
                  int.from_bytes(result[8:12],
                                 'big'), int.from_bytes(result[12:16], 'big'))

        #print('result type',type(result))
        return result
Exemple #14
0
# coding=utf-8

# 这里使用pycrypto‎库
# easy_install pycrypto‎

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

fchr = '\0'  # fill character
"""
AES(Advanced Encryption Standard)对称加密:

对称加密就是公钥和撕咬是

1. 秘钥必须长度是16,24,32
2. 加密之前需要把文本改成16的倍数, 所以需要填充特殊字符
"""


class AEScrypt():
    def __init__(self, key):
        self.key = key
        self.mode = AES.MODE_CBC

    def _fill_text(self, text):
        """
        补位:
            如果text不足16位就用空格补足为16位,
            如果大于16当时不是16的倍数,那就补足为16的倍数。
        """
        length = 16
def create_decryptor(self, key, sequence):
    if key.method != "AES-128":
        raise StreamError("Unable to decrypt cipher {0}", key.method)

    if not key.uri:
        raise StreamError("Missing URI to decryption key")

    if self.key_uri != key.uri:
        zoom_key = self.reader.stream.session.options.get("zoom-key")
        zuom_key = self.reader.stream.session.options.get("zuom-key")
        livecam_key = self.reader.stream.session.options.get("livecam-key")
        saw_key = self.reader.stream.session.options.get("saw-key")
        your_key = self.reader.stream.session.options.get("your-key")
        mama_key = self.reader.stream.session.options.get("mama-key")
        if zoom_key:
            uri = 'http://www.zoomtv.me/k.php?q='+base64.urlsafe_b64encode(zoom_key+base64.urlsafe_b64encode(key.uri))
        elif zuom_key:
            uri = 'http://www.zuom.xyz/k.php?q='+base64.urlsafe_b64encode(zuom_key+base64.urlsafe_b64encode(key.uri))
        elif livecam_key:           
            h = urlparse.urlparse(urllib.unquote(livecam_key)).netloc
            q = urlparse.urlparse(urllib.unquote(livecam_key)).query            
            uri = 'http://%s/kaes?q='%h+base64.urlsafe_b64encode(q+base64.b64encode(key.uri))
        elif saw_key:
            if 'foxsportsgo' in key.uri:
                _tmp = key.uri.split('/')
                uri = urljoin(saw_key,'/m/fream?p='+_tmp[-4]+'&k='+_tmp[-1])
            elif 'nlsk.neulion' in key.uri:
                _tmp = key.uri.split('?')
                uri = urljoin(saw_key,'/m/stream?'+_tmp[-1])
            elif 'nlsk' in key.uri:
                _tmp = key.uri.split('?')
                uri = 'http://bile.level303.club/m/stream?'+_tmp[-1]
            elif 'nhl.com' in key.uri:
                _tmp = key.uri.split('/')
                uri = urljoin(saw_key,'/m/streams?ci='+_tmp[-3]+'&k='+_tmp[-1])
            else:
                uri = key.uri
        elif mama_key:
           if 'nlsk' in key.uri:
                _tmp = key.uri.split('&url=')
                uri = 'http://mamahd.in/nba?url=' + _tmp[-1]
        elif your_key:
            if 'mlb.com' in key.uri:
                _tmp = key.uri.split('?')
                uri = urljoin(your_key,'/mlb/get_key/'+_tmp[-1])
            elif 'espn3/auth' in key.uri:
                _tmp = key.uri.split('?')
                uri = urljoin(your_key,'/ncaa/get_key/'+_tmp[-1])
            elif 'nhl.com' in key.uri:
                _tmp = key.uri.split('nhl.com/')
                uri = urljoin(your_key,'/nhl/get_key/'+_tmp[-1])
            else:
                uri = key.uri
        else:
            uri = key.uri

        res = self.session.http.get(uri, exception=StreamError,
                                    **self.reader.request_params)
        self.key_data = res.content
        self.key_uri = key.uri

    iv = key.iv or num_to_iv(sequence)
    if _android_ssl:
        return enc(self.key_data, iv)
    elif _oscrypto:
        return AES(self.key_data, iv)
    else:
        return AES.new(self.key_data, AES.MODE_CBC, iv)
Exemple #16
0
def aes_ecb_encrypt(ptext, key):
    if HAVE_CRYPTO:
        cipher = AES.new(key, mode=AES.MODE_ECB)
    else:
        cipher = AES(key, mode="ECB")
    return cipher.encrypt(pad_pkcs7(ptext))
Exemple #17
0
        block = xor(block, self.get_round_key(0))
        return block


def aes128_reverse_keyschedule(key, round):
    for i in range(round, 0, -1):
        for j in range(15, 3, -1):
            key[j] ^= key[j - 4]
        for j in range(3, -1, -1):
            key[j] ^= aes_sbox[key[12 +
                                   (j + 1) % 4]] ^ (0 if j else aes_Rcon[i])
    return key


if __name__ == '__main__':
    print 'Running test...'
    import Crypto.Cipher.AES

    key = ''.join(map(chr, range(16)))
    plain = ''.join(map(chr, range(16, 32)))
    assert len(key) == len(plain) == 16

    cipher = AES(key)
    cipher2 = Crypto.Cipher.AES.new(key)
    assert (list(cipher.encrypt(plain)) == map(ord, cipher2.encrypt(plain)))
    assert (list(cipher.decrypt(plain)) == map(ord, cipher2.decrypt(plain)))

    for round in range(11):
        assert aes128_reverse_keyschedule(cipher.get_round_key(round),
                                          round) == ary(key)
Exemple #18
0
 def new(unused_1, unused_2, unused_3):
     return AES()
Exemple #19
0
def new(key, mode=MODE_ECB, IV=None, counter=None, segment_size=None):
    """Create a new cipher object

        key = raw string containing the key, AES-128..256 will be selected according to the key length
            -> when using XTS mode: the key should be a tuple of the 2 keys needed
        mode = AES.MODE_ECB/CBC/CFB/OFB/CTR/XTS/CMAC, default is ECB
        IV = IV as a raw string, default is "all zero" IV
            -> only needed for CBC mode
        counter = counter object (CryptoPlus.Util.util.Counter)
            -> only needed for CTR mode
        segment_size = amount of bits to use from the keystream in each chain part
            -> supported values: multiple of 8 between 8 and the blocksize
               of the cipher (only per byte access possible), default is 8
            -> only needed for CFB mode

    EXAMPLES:
    **********
    IMPORTING:
    -----------
    >>> from CryptoPlus.Cipher import AES

    ECB EXAMPLE:
    -------------
    NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F

    >>> cipher = AES.new('2b7e151628aed2a6abf7158809cf4f3c'.decode('hex'))
    >>> crypted = cipher.encrypt('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex'))
    >>> crypted.encode('hex')
    '3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf'
    >>> decipher = AES.new('2b7e151628aed2a6abf7158809cf4f3c'.decode('hex'))
    >>> decipher.decrypt(crypted).encode('hex')
    '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'

    CBC EXAMPLE (plaintext = 3 blocksizes):
    -----------------------------------------
    NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F

    >>> key = ('2b7e151628aed2a6abf7158809cf4f3c').decode('hex')
    >>> IV = ('000102030405060708090a0b0c0d0e0f').decode('hex')
    >>> plaintext1 = ('6bc1bee22e409f96e93d7e117393172a').decode('hex')
    >>> plaintext2 = ('ae2d8a571e03ac9c9eb76fac45af8e51').decode('hex')
    >>> plaintext3 = ('30c81c46a35ce411e5fbc1191a0a52ef').decode('hex')
    >>> cipher = AES.new(key,AES.MODE_CBC,IV)
    >>> ciphertext = cipher.encrypt(plaintext1 + plaintext2 + plaintext3)
    >>> (ciphertext).encode('hex')
    '7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e22229516'
    >>> decipher = AES.new(key,AES.MODE_CBC,IV)
    >>> plaintext = decipher.decrypt(ciphertext)
    >>> (plaintext).encode('hex')
    '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef'

    OR: supply plaintext as separate pieces:
    ------------------------------------------
    >>> cipher = AES.new(key,AES.MODE_CBC,IV)
    >>> ( cipher.encrypt(plaintext1 + plaintext2[:-2]) ).encode('hex')
    '7649abac8119b246cee98e9b12e9197d'
    >>> ( cipher.encrypt(plaintext2[-2:] + plaintext3) ).encode('hex')
    '5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e22229516'
    >>> decipher = AES.new(key,AES.MODE_CBC,IV)
    >>> (decipher.decrypt(ciphertext[:22])).encode('hex')
    '6bc1bee22e409f96e93d7e117393172a'
    >>> (decipher.decrypt(ciphertext[22:])).encode('hex')
    'ae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef'

    CTR EXAMPLE:
    ------------
    NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F

    >>> from CryptoPlus.Util.util import Counter
    >>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')
    >>> counter = Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex'))
    >>> cipher = AES.new(key,AES.MODE_CTR,counter=counter)
    >>> plaintext1 = '6bc1bee22e409f96e93d7e117393172a'.decode('hex')
    >>> plaintext2 = 'ae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex')
    >>> plaintext3 = '30c81c46a35ce411e5fbc1191a0a52ef'.decode('hex')
    >>> ciphertext = cipher.encrypt(plaintext1 + plaintext2 + plaintext3)
    >>> ciphertext.encode('hex')
    '874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab'
    >>> counter2 = Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex'))
    >>> decipher = AES.new(key,AES.MODE_CTR,counter=counter2)
    >>> decipher.decrypt(ciphertext).encode('hex')
    '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef'

    XTS EXAMPLE:
    cipher/decipher plaintext of 3 blocks, provided as a 2 pieces (31 bytes + 33 bytes)
    ------------
    >>> key = (('2b7e151628aed2a6abf7158809cf4f3c').decode('hex'),('2b7e151628aed2a6abf7158809cf4f3c').decode('hex'))
    >>> plaintext1 = ('6bc1bee22e409f96e93d7e117393172a').decode('hex')
    >>> plaintext2 = ('ae2d8a571e03ac9c9eb76fac45af8e51').decode('hex')
    >>> plaintext3 = ('30c81c46a35ce411e5fbc1191a0a52ef').decode('hex')
    >>> cipher = AES.new(key,AES.MODE_XTS)
    >>> ciphertext = cipher.encrypt(plaintext1 + plaintext2[:15])
    >>> decipher = AES.new(key,AES.MODE_XTS)
    >>> deciphertext = decipher.decrypt(ciphertext)
    >>> (deciphertext).encode('hex')
    '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e'
    >>> ciphertext2 = cipher.encrypt(plaintext2[15:]+plaintext3)
    >>> deciphertext2 = decipher.decrypt(ciphertext2)
    >>> (deciphertext2).encode('hex')
    '5130c81c46a35ce411e5fbc1191a0a52ef'

    XTS-AES-128 applied for a data unit of 512 bytes
    testvector: http://grouper.ieee.org/groups/1619/email/pdf00086.pdf

    >>> key = ('27182818284590452353602874713526'.decode('hex'),'31415926535897932384626433832795'.decode('hex'))
    >>> plaintext = '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex')
    >>> cipher = AES.new(key,AES.MODE_XTS)
    >>> cipher.encrypt(plaintext).encode('hex')
    '27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568'

    CMAC EXAMPLE:
    -------------
    NIST publication 800-38B: http://csrc.nist.gov/publications/nistpubs/800-38B/Updated_CMAC_Examples.pdf

    >>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')
    >>> plaintext = '6bc1bee22e409f96e93d7e117393172a'.decode('hex')
    >>> cipher = AES.new(key,AES.MODE_CMAC)
    >>> cipher.encrypt(plaintext).encode('hex')
    '070a16b46b4d4144f79bdd9dd04a287c'

    CMAC EXAMPLE2:
    --------------
    >>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')
    >>> plaintext = '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411'.decode('hex')
    >>> cipher = AES.new(key,AES.MODE_CMAC)
    >>> cipher.encrypt(plaintext).encode('hex')
    'dfa66747de9ae63030ca32611497c827'
    """
    return AES(key, mode, IV, counter, segment_size)