示例#1
0
def decrypt_cdata(data: bytes) -> Tuple[bool, int, int, int]:
    decrypted = tgcrypto.ige256_decrypt(data, key, bytes(32))
    return (
        bool(decrypted[0]),
        decrypted[1],
        decrypted[2],
        int.from_bytes(decrypted[3:7], "little"),
    )
示例#2
0
 def decrypt(self, ciphertext, message_key, mode):
     if mode == "org":
         mode = 8
     else:
         mode = 0
     msg_key_from_cipher = message_key
     kdf = KDF(self.secret_key, msg_key_from_cipher, mode)
     aes_key, aes_iv = kdf.KD()
     ige_decrypted = tgcrypto.ige256_decrypt(ciphertext[16:], aes_key, aes_iv)
     msg_key_large = hashlib.sha256(self.secret_key[88 + mode:120] + ige_decrypted).digest()
     msg_key = msg_key_large[8:24]
     length = int(ige_decrypted[:32], 2)
     if msg_key == msg_key_from_cipher:
         plaintext = ige_decrypted[32:32 + length]
         return plaintext
     else:
         print("msg_key mismatch!!!")
示例#3
0
    def decrypt_ige(cipher_text, key, iv):
        """
        Decrypts the given text in 16-bytes blocks by using the
        given key and 32-bytes initialization vector.
        """
        # print('using tgcrypto')
        return tgcrypto.ige256_decrypt(cipher_text, key, iv)

        if cryptg:
            return cryptg.decrypt_ige(cipher_text, key, iv)
        if libssl.decrypt_ige:
            return libssl.decrypt_ige(cipher_text, key, iv)

        iv1 = iv[:len(iv) // 2]
        iv2 = iv[len(iv) // 2:]

        aes = pyaes.AES(key)

        plain_text = []
        blocks_count = len(cipher_text) // 16

        cipher_text_block = [0] * 16
        for block_index in range(blocks_count):
            for i in range(16):
                cipher_text_block[i] = \
                    cipher_text[block_index * 16 + i] ^ iv2[i]

            plain_text_block = aes.decrypt(cipher_text_block)

            for i in range(16):
                plain_text_block[i] ^= iv1[i]

            iv1 = cipher_text[block_index * 16:block_index * 16 + 16]
            iv2 = plain_text_block

            plain_text.extend(plain_text_block)

        return bytes(plain_text)
示例#4
0
 def test_ige256_decrypt_invalid_args_count(self):
     with self.assertRaisesRegex(
             TypeError,
             r"function takes exactly \d arguments \(\d given\)"):
         tgcrypto.ige256_decrypt(os.urandom(16), os.urandom(32))