X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FAS_DCP_AES.cpp;h=dbaa3d541d383c4c7e43a514a8a15c75e7f5840e;hb=a26997a57c206312a334cc59d0d0347da2d1a580;hp=cd3e41bbee1b12881c9796080790ecb0368ab0e3;hpb=57ddb7894042229bbc5f14e9257068afcc6f8725;p=asdcplib.git diff --git a/src/AS_DCP_AES.cpp b/src/AS_DCP_AES.cpp index cd3e41b..dbaa3d5 100755 --- a/src/AS_DCP_AES.cpp +++ b/src/AS_DCP_AES.cpp @@ -241,11 +241,19 @@ ASDCP::AESDecContext::DecryptBlock(const byte_t* ct_buf, byte_t* pt_buf, ui32_t static const ui32_t B_len = 64; // rfc 2104, Sec. 2 -static byte_t ipad[KeyLen] = { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }; +static byte_t ipad[B_len] = { + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 +}; -static byte_t opad[KeyLen] = { 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, - 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c }; +static byte_t opad[B_len] = { + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, + 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c +}; class HMACContext::h__HMACContext { @@ -255,7 +263,6 @@ class HMACContext::h__HMACContext public: byte_t m_SHAValue[HMAC_SIZE]; - LabelSet_t m_SetType; bool m_Final; h__HMACContext() : m_Final(false) {} @@ -267,7 +274,6 @@ public: byte_t rng_buf[SHA_DIGEST_LENGTH*2]; Kumu::Gen_FIPS_186_Value(key, KeyLen, rng_buf, SHA_DIGEST_LENGTH*2); memcpy(m_key, rng_buf+SHA_DIGEST_LENGTH, KeyLen); - m_SetType = LS_MXF_SMPTE; Reset(); } @@ -285,7 +291,6 @@ public: SHA1_Update(&SHA, key_nonce, KeyLen); SHA1_Final(sha_buf, &SHA); memcpy(m_key, sha_buf, KeyLen); - m_SetType = LS_MXF_INTEROP; Reset(); } @@ -294,28 +299,19 @@ public: Reset() { byte_t xor_buf[B_len]; + memset(xor_buf, 0, B_len); + memcpy(xor_buf, m_key, KeyLen); + memset(m_SHAValue, 0, HMAC_SIZE); m_Final = false; SHA1_Init(&m_SHA); // H(K XOR opad, H(K XOR ipad, text)) // ^^^^^^^^^^ - ui32_t i = 0; - - for ( ; i < KeyLen; i++ ) - xor_buf[i] = m_key[i] ^ ipad[i]; - - if ( m_SetType == LS_MXF_SMPTE ) - { - for ( ; i < B_len; i++ ) - xor_buf[i] = 0 ^ ipad[0]; - - SHA1_Update(&m_SHA, xor_buf, B_len); - } - else - { - SHA1_Update(&m_SHA, xor_buf, KeyLen); - } + for ( ui32_t i = 0; i < B_len; i++ ) + xor_buf[i] ^= ipad[i]; + + SHA1_Update(&m_SHA, xor_buf, B_len); } // @@ -331,34 +327,29 @@ public: void Finalize() { - // H(K XOR opad, H(K XOR ipad, text)) - // ^^^^^^^^^^^^^^^ - SHA1_Final(m_SHAValue, &m_SHA); - SHA_CTX SHA; SHA1_Init(&SHA); byte_t xor_buf[B_len]; - ui32_t i = 0; - - for ( ; i < KeyLen; i++ ) - xor_buf[i] = m_key[i] ^ opad[i]; - - if ( m_SetType == LS_MXF_SMPTE ) - { - for ( ; i < B_len; i++ ) - xor_buf[i] = 0 ^ opad[0]; - - SHA1_Update(&m_SHA, xor_buf, B_len); - } - else - { - SHA1_Update(&m_SHA, xor_buf, KeyLen); - } - - SHA1_Update(&SHA, xor_buf, KeyLen); + memset(xor_buf, 0, B_len); + memcpy(xor_buf, m_key, KeyLen); + + SHA1_Init(&SHA); + + // H(K XOR opad, H(K XOR ipad, text)) + // ^^^^^^^^^^ + for ( ui32_t i = 0; i < B_len; i++ ) + xor_buf[i] ^= opad[i]; + + SHA1_Update(&SHA, xor_buf, B_len); + + // H(K XOR opad, H(K XOR ipad, text)) + // ^ + SHA1_Final(m_SHAValue, &m_SHA); SHA1_Update(&SHA, m_SHAValue, HMAC_SIZE); + // H(K XOR opad, H(K XOR ipad, text)) + // ^ SHA1_Final(m_SHAValue, &SHA); m_Final = true; }