int c1s1::calc_c1_digest(char*& digest) { int ret = ERROR_SUCCESS; srs_assert(schema == srs_schema0 || schema == srs_schema1); char* c1s1_joined_bytes = NULL; if (schema == srs_schema0) { c1s1_joined_bytes = srs_bytes_join_schema0(time, version, &block0.key, &block1.digest); } else { c1s1_joined_bytes = srs_bytes_join_schema1(time, version, &block0.digest, &block1.key); } srs_assert(c1s1_joined_bytes != NULL); SrsAutoFree(char, c1s1_joined_bytes); digest = new char[__SRS_OpensslHashSize]; if ((ret = openssl_HMACsha256(c1s1_joined_bytes, 1536 - 32, SrsGenuineFPKey, 30, digest)) != ERROR_SUCCESS) { srs_error("calc digest for c1 failed. ret=%d", ret); return ret; } srs_verbose("digest calculated for c1"); return ret; }
int c2s2::s2_create(c1s1* c1) { int ret = ERROR_SUCCESS; char temp_key[__SRS_OpensslHashSize]; if ((ret = openssl_HMACsha256(c1->get_digest(), 32, SrsGenuineFMSKey, 68, temp_key)) != ERROR_SUCCESS) { srs_error("create s2 temp key failed. ret=%d", ret); return ret; } srs_verbose("generate s2 temp key success."); char _digest[__SRS_OpensslHashSize]; if ((ret = openssl_HMACsha256(random, 1504, temp_key, 32, _digest)) != ERROR_SUCCESS) { srs_error("create s2 digest failed. ret=%d", ret); return ret; } srs_verbose("generate s2 digest success."); memcpy(digest, _digest, 32); return ret; }
int c2s2::c2_create(c1s1 *s1) { int ret = ERROR_SUCCESS; char temp_key[OpensslHashSize]; if ((ret = openssl_HMACsha256(s1->get_digest(), 32, SrsGenuineFPKey, 62, temp_key)) != ERROR_SUCCESS) { log_error("create c2 temp key failed. ret=%d", ret); return ret; } log_verbose("generate c2 temp key success."); char _digest[OpensslHashSize]; if ((ret = openssl_HMACsha256(random, 1504, temp_key, 32, _digest)) != ERROR_SUCCESS) { log_error("create c2 digest failed. ret=%d", ret); return ret; } log_verbose("generate c2 digest success."); memcpy(digest, _digest, 32); return ret; }
int c2s2::c2_validate(c1s1* s1, bool& is_valid) { is_valid = false; int ret = ERROR_SUCCESS; char temp_key[__SRS_OpensslHashSize]; if ((ret = openssl_HMACsha256(s1->get_digest(), 32, SrsGenuineFPKey, 62, temp_key)) != ERROR_SUCCESS) { srs_error("create c2 temp key failed. ret=%d", ret); return ret; } srs_verbose("generate c2 temp key success."); char _digest[__SRS_OpensslHashSize]; if ((ret = openssl_HMACsha256(random, 1504, temp_key, 32, _digest)) != ERROR_SUCCESS) { srs_error("create c2 digest failed. ret=%d", ret); return ret; } srs_verbose("generate c2 digest success."); is_valid = srs_bytes_equals(digest, _digest, 32); return ret; }
int Init_RC4_Encryption(u_int8_t *secretKey,u_int8_t *pubKeyIn,u_int8_t *pubKeyOut, RC4_handle *rc4keyIn, RC4_handle *rc4keyOut) { int ret = ERROR_SUCCESS; u_int8_t digest[32]; RC4_alloc(rc4keyIn); RC4_alloc(rc4keyOut); if((ret = openssl_HMACsha256(pubKeyIn,128,secretKey,128,digest)) != ERROR_SUCCESS){ return ret; } RC4_setkey(*rc4keyOut, 16, digest); if((ret = openssl_HMACsha256(pubKeyOut,128,secretKey,128,digest)) != ERROR_SUCCESS){ return ret; } RC4_setkey(*rc4keyIn, 16, digest); return ret; }