diff --git a/framework/demuxer/CMakeLists.txt b/framework/demuxer/CMakeLists.txt index ece815328..0c6d24eba 100644 --- a/framework/demuxer/CMakeLists.txt +++ b/framework/demuxer/CMakeLists.txt @@ -64,7 +64,7 @@ set(SOURCE_FILES demuxer_service.cpp sample_decrypt/SampleDecryptDemuxer.h sample_decrypt/sampleDecryptDec.c sample_decrypt/ISampleDecrypt2c.cpp - sample_decrypt/ISampleDecrypt2c.h) + sample_decrypt/ISampleDecrypt2c.h decrypto/IAESDecrypt.h decrypto/avAESDecrypt.cpp decrypto/avAESDecrypt.h decrypto/OpenSSAESDecrypt.cpp decrypto/OpenSSAESDecrypt.h) include_directories( #${CICADA_FRAMEWORK_DIR}/inc diff --git a/framework/demuxer/decrypto/IAESDecrypt.h b/framework/demuxer/decrypto/IAESDecrypt.h new file mode 100644 index 000000000..3b3eaddfc --- /dev/null +++ b/framework/demuxer/decrypto/IAESDecrypt.h @@ -0,0 +1,28 @@ +// +// Created by moqi on 2020/2/20. +// + +#ifndef CICADAMEDIA_IAESDECRYPT_H +#define CICADAMEDIA_IAESDECRYPT_H + +#include + + +namespace Cicada { + class IAESDecrypt { + public: + const static int BLOCK_SIZE = 16; + + IAESDecrypt() = default; + + virtual ~IAESDecrypt() = default; + + virtual int setKey(const uint8_t *key, int key_bits) = 0; + + virtual void decrypt(uint8_t *dst, const uint8_t *src, int count, uint8_t *iv) = 0; + + }; +} + + +#endif //CICADAMEDIA_IAESDECRYPT_H diff --git a/framework/demuxer/decrypto/OpenSSAESDecrypt.cpp b/framework/demuxer/decrypto/OpenSSAESDecrypt.cpp new file mode 100644 index 000000000..8bfa64212 --- /dev/null +++ b/framework/demuxer/decrypto/OpenSSAESDecrypt.cpp @@ -0,0 +1,22 @@ +// +// Created by moqi on 2020/2/20. +// + +#include +#include "OpenSSAESDecrypt.h" + +using namespace Cicada; + +OpenSSAESDecrypt::OpenSSAESDecrypt() = default; + +OpenSSAESDecrypt::~OpenSSAESDecrypt() = default; + +int OpenSSAESDecrypt::setKey(const uint8_t *key, int key_bits) +{ + return AES_set_decrypt_key(key, 8 * AES_BLOCK_SIZE/*128*/, &mAesKey); +} + +void OpenSSAESDecrypt::decrypt(uint8_t *dst, const uint8_t *src, int count, uint8_t *iv) +{ + AES_cbc_encrypt(src, dst, count * AES_BLOCK_SIZE, &mAesKey, iv, AES_DECRYPT); +} diff --git a/framework/demuxer/decrypto/OpenSSAESDecrypt.h b/framework/demuxer/decrypto/OpenSSAESDecrypt.h new file mode 100644 index 000000000..8ab4b21aa --- /dev/null +++ b/framework/demuxer/decrypto/OpenSSAESDecrypt.h @@ -0,0 +1,28 @@ +// +// Created by moqi on 2020/2/20. +// + +#ifndef CICADAMEDIA_OPENSSAESDECRYPT_H +#define CICADAMEDIA_OPENSSAESDECRYPT_H + +#include "IAESDecrypt.h" + +namespace Cicada { + class OpenSSAESDecrypt : public IAESDecrypt { + public: + OpenSSAESDecrypt(); + + ~OpenSSAESDecrypt() override; + + int setKey(const uint8_t *key, int key_bits) override; + + void decrypt(uint8_t *dst, const uint8_t *src, int count, uint8_t *iv) override; + + private: + AES_KEY mAesKey{}; + + }; +} + + +#endif //CICADAMEDIA_OPENSSAESDECRYPT_H diff --git a/framework/demuxer/decrypto/avAESDecrypt.cpp b/framework/demuxer/decrypto/avAESDecrypt.cpp new file mode 100644 index 000000000..e55235771 --- /dev/null +++ b/framework/demuxer/decrypto/avAESDecrypt.cpp @@ -0,0 +1,31 @@ +// +// Created by moqi on 2020/2/20. +// +extern "C" { +#include +#include +} + +#include "avAESDecrypt.h" + +using namespace Cicada; + +avAESDecrypt::avAESDecrypt() +{ + mAes = av_aes_alloc(); +} + +avAESDecrypt::~avAESDecrypt() +{ + av_free(mAes); +} + +void avAESDecrypt::decrypt(uint8_t *dst, const uint8_t *src, int count, uint8_t *iv) +{ + av_aes_crypt(mAes, dst, src, count, iv, 1); +} + +int avAESDecrypt::setKey(const uint8_t *key, int key_bits) +{ + return av_aes_init(mAes, key, key_bits, 1); +} diff --git a/framework/demuxer/decrypto/avAESDecrypt.h b/framework/demuxer/decrypto/avAESDecrypt.h new file mode 100644 index 000000000..5e6c1edf7 --- /dev/null +++ b/framework/demuxer/decrypto/avAESDecrypt.h @@ -0,0 +1,28 @@ +// +// Created by moqi on 2020/2/20. +// + +#ifndef CICADAMEDIA_AVAESDECRYPT_H +#define CICADAMEDIA_AVAESDECRYPT_H + +#include "IAESDecrypt.h" + +namespace Cicada { + class avAESDecrypt : public IAESDecrypt { + public: + avAESDecrypt(); + + ~avAESDecrypt() override; + + int setKey(const uint8_t *key, int key_bits) override; + + void decrypt(uint8_t *dst, const uint8_t *src, int count, uint8_t *iv) override; + + private: + struct AVAES *mAes{nullptr}; + + }; +} + + +#endif //CICADAMEDIA_AVAESDECRYPT_H