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;
 }
Пример #3
0
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;
 }
Пример #5
0
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;
}