diff --git a/framework/demuxer/CMakeLists.txt b/framework/demuxer/CMakeLists.txt index 99e5e69ad..ca261069c 100644 --- a/framework/demuxer/CMakeLists.txt +++ b/framework/demuxer/CMakeLists.txt @@ -66,13 +66,16 @@ set(SOURCE_FILES demuxer_service.cpp sample_decrypt/ISampleDecrypt2c.cpp sample_decrypt/ISampleDecrypt2c.h decrypto/IAESDecrypt.h - decrypto/avAESDecrypt.cpp decrypto/avAESDecrypt.h + decrypto/avAESDecrypt.cpp + decrypto/avAESDecrypt.h ) if (USE_OPENSSL) list(APPEND ${SOURCE_FILES} decrypto/OpenSSAESDecrypt.cpp decrypto/OpenSSAESDecrypt.h + decrypto/OpenSSAESEncrypt.cpp + decrypto/OpenSSAESEncrypt.h ) endif () diff --git a/framework/demuxer/decrypto/IAESDecrypt.h b/framework/demuxer/decrypto/IAESDecrypt.h index 3b3eaddfc..88051d9a8 100644 --- a/framework/demuxer/decrypto/IAESDecrypt.h +++ b/framework/demuxer/decrypto/IAESDecrypt.h @@ -6,10 +6,10 @@ #define CICADAMEDIA_IAESDECRYPT_H #include - +#include namespace Cicada { - class IAESDecrypt { + class CICADA_CPLUS_EXTERN IAESDecrypt { public: const static int BLOCK_SIZE = 16; @@ -22,6 +22,19 @@ namespace Cicada { virtual void decrypt(uint8_t *dst, const uint8_t *src, int count, uint8_t *iv) = 0; }; + + class CICADA_CPLUS_EXTERN IAESEncrypt { + public: + const static int BLOCK_SIZE = 16; + + IAESEncrypt() = default; + + virtual ~IAESEncrypt() = default; + + virtual int setKey(const uint8_t *key, int key_bits) = 0; + + virtual void encrypt(uint8_t *dst, const uint8_t *src, int count, uint8_t *iv) = 0; + }; } diff --git a/framework/demuxer/decrypto/OpenSSAESDecrypt.cpp b/framework/demuxer/decrypto/OpenSSAESDecrypt.cpp index 8bfa64212..75ea0e3a1 100644 --- a/framework/demuxer/decrypto/OpenSSAESDecrypt.cpp +++ b/framework/demuxer/decrypto/OpenSSAESDecrypt.cpp @@ -2,7 +2,6 @@ // Created by moqi on 2020/2/20. // -#include #include "OpenSSAESDecrypt.h" using namespace Cicada; diff --git a/framework/demuxer/decrypto/OpenSSAESDecrypt.h b/framework/demuxer/decrypto/OpenSSAESDecrypt.h index 8ab4b21aa..48985f186 100644 --- a/framework/demuxer/decrypto/OpenSSAESDecrypt.h +++ b/framework/demuxer/decrypto/OpenSSAESDecrypt.h @@ -5,6 +5,7 @@ #ifndef CICADAMEDIA_OPENSSAESDECRYPT_H #define CICADAMEDIA_OPENSSAESDECRYPT_H +#include #include "IAESDecrypt.h" namespace Cicada { diff --git a/framework/demuxer/decrypto/OpenSSAESEncrypt.cpp b/framework/demuxer/decrypto/OpenSSAESEncrypt.cpp new file mode 100644 index 000000000..dd3f53c6a --- /dev/null +++ b/framework/demuxer/decrypto/OpenSSAESEncrypt.cpp @@ -0,0 +1,21 @@ +// +// Created by lifujun on 2020/3/13. +// + +#include "OpenSSAESEncrypt.h" + +using namespace Cicada ; +OpenSSAESEncrypt::OpenSSAESEncrypt() = default; + +OpenSSAESEncrypt::~OpenSSAESEncrypt() = default; + +int OpenSSAESEncrypt::setKey(const uint8_t *key, int key_bits) +{ + return AES_set_decrypt_key(key, 8 * AES_BLOCK_SIZE/*128*/, &mAesKey); +} + +void OpenSSAESEncrypt::encrypt(uint8_t *dst, const uint8_t *src, int count, uint8_t *iv) +{ + AES_cbc_encrypt(src, dst, count * AES_BLOCK_SIZE, &mAesKey, iv, AES_ENCRYPT); +} + diff --git a/framework/demuxer/decrypto/OpenSSAESEncrypt.h b/framework/demuxer/decrypto/OpenSSAESEncrypt.h new file mode 100644 index 000000000..97b0ec8ff --- /dev/null +++ b/framework/demuxer/decrypto/OpenSSAESEncrypt.h @@ -0,0 +1,28 @@ +// +// Created by lifujun on 2020/3/13. +// + +#ifndef SOURCE_OPENSSAESENCRYPT_H +#define SOURCE_OPENSSAESENCRYPT_H + +#include +#include "IAESDecrypt.h" + +namespace Cicada { + class OpenSSAESEncrypt : public IAESEncrypt{ + public: + OpenSSAESEncrypt(); + + ~OpenSSAESEncrypt() override; + + int setKey(const uint8_t *key, int key_bits) override; + + void encrypt(uint8_t *dst, const uint8_t *src, int count, uint8_t *iv) override; + + private: + AES_KEY mAesKey{}; + }; +} + + +#endif //SOURCE_OPENSSAESENCRYPT_H diff --git a/framework/demuxer/decrypto/avAESDecrypt.cpp b/framework/demuxer/decrypto/avAESDecrypt.cpp index e55235771..acfd0e9af 100644 --- a/framework/demuxer/decrypto/avAESDecrypt.cpp +++ b/framework/demuxer/decrypto/avAESDecrypt.cpp @@ -29,3 +29,24 @@ int avAESDecrypt::setKey(const uint8_t *key, int key_bits) { return av_aes_init(mAes, key, key_bits, 1); } + + +avAESEncrypt::avAESEncrypt() +{ + mAes = av_aes_alloc(); +} + +avAESEncrypt::~avAESEncrypt() +{ + av_free(mAes); +} + +int avAESEncrypt::setKey(const uint8_t *key, int key_bits) +{ + return av_aes_init(mAes, key, key_bits, 0); +} + +void avAESEncrypt::encrypt(uint8_t *dst, const uint8_t *src, int count, uint8_t *iv) +{ + av_aes_crypt(mAes, dst, src, count, iv, 0); +} diff --git a/framework/demuxer/decrypto/avAESDecrypt.h b/framework/demuxer/decrypto/avAESDecrypt.h index 5e6c1edf7..48b6970a6 100644 --- a/framework/demuxer/decrypto/avAESDecrypt.h +++ b/framework/demuxer/decrypto/avAESDecrypt.h @@ -6,9 +6,10 @@ #define CICADAMEDIA_AVAESDECRYPT_H #include "IAESDecrypt.h" +#include namespace Cicada { - class avAESDecrypt : public IAESDecrypt { + class CICADA_CPLUS_EXTERN avAESDecrypt : public IAESDecrypt { public: avAESDecrypt(); @@ -22,6 +23,20 @@ namespace Cicada { struct AVAES *mAes{nullptr}; }; + + class CICADA_CPLUS_EXTERN avAESEncrypt : public IAESEncrypt { + public: + avAESEncrypt(); + + ~avAESEncrypt() override; + + int setKey(const uint8_t *key, int key_bits) override; + + void encrypt(uint8_t *dst, const uint8_t *src, int count, uint8_t *iv) override; + + private: + struct AVAES *mAes{nullptr}; + }; } diff --git a/framework/utils/Md5Utils.cpp b/framework/utils/Md5Utils.cpp index da7f3b8fe..932260d50 100644 --- a/framework/utils/Md5Utils.cpp +++ b/framework/utils/Md5Utils.cpp @@ -66,4 +66,23 @@ unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md) av_sha_final(sha, md); av_free(sha); return md; +} + +void MD5(unsigned char *src, int len, unsigned char *dst) +{ + static unsigned char outTmp[16] = {0}; + + if (dst == nullptr) { + dst = outTmp; + } + + struct AVMD5 *ctx = av_md5_alloc(); + + av_md5_init(ctx); + + av_md5_update(ctx, src, len); + + av_md5_final(ctx, dst); + + av_free(ctx); } \ No newline at end of file diff --git a/framework/utils/Md5Utils.h b/framework/utils/Md5Utils.h index 41884b1f1..6d4643ea4 100644 --- a/framework/utils/Md5Utils.h +++ b/framework/utils/Md5Utils.h @@ -6,6 +6,7 @@ #define SOURCE_MD5UTILS_H #include + namespace Cicada { class Md5Utils { @@ -18,6 +19,9 @@ namespace Cicada { // }; } + unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); +void MD5(unsigned char *src, int len, unsigned char *dst); + #endif //SOURCE_MD5UTILS_H