#include #include #include #include #include "aes_core.h" #include "hash_md5.h" #include "hash_sha1.h" #include "hash_sha256.h" #include "hash_sha512.h" #include "hash_sm3.h" #define PARTITION_BYTE_SIZE 64 typedef int (*hash_f)(const unsigned char *in, unsigned int in_len, unsigned char *out, unsigned int *out_len); #if 0 static int rk_hmac_64(unsigned char *key, unsigned int key_len, const unsigned char *in, unsigned int in_len, unsigned char *out, unsigned int *out_len, hash_f hash) { int res = -1; unsigned int i, hash_len, tmp_key_len; unsigned char *tmp = NULL; unsigned char tmp_key[PARTITION_BYTE_SIZE]; unsigned char ipad[PARTITION_BYTE_SIZE], opad[PARTITION_BYTE_SIZE]; unsigned char istr[PARTITION_BYTE_SIZE], ostr[PARTITION_BYTE_SIZE]; if(key == NULL || in == NULL || out == NULL || out_len == NULL) return -1; memset(ipad, 0x36, sizeof(ipad)); memset(opad, 0x5c, sizeof(opad)); memset(istr, 0x00, sizeof(istr)); memset(ostr, 0x00, sizeof(ostr)); memset(tmp_key, 0x00, sizeof(tmp_key)); tmp_key_len = key_len; if(key_len > PARTITION_BYTE_SIZE){ res = (*hash)(key, key_len, tmp_key, &tmp_key_len); if(res != 0){ goto exit; } }else{ memcpy(tmp_key, key, key_len); } memcpy(istr, tmp_key, tmp_key_len); memcpy(ostr, tmp_key, tmp_key_len); for(i=0; i b) { res = (*hash)(key, key_length, digest, &tmp_len); if(res != 0){ goto exit; } for (i=0;i b) { res = (*hash)(key, key_length, digest, &tmp_len); if(res != 0){ goto exit; } for (i=0;i 64) return -1; return rk_hmac_64(key, key_len, in, in_len, out, out_len, rk_hash_md5); } int rk_hmac_sha1(const unsigned char *key, unsigned int key_len, const unsigned char *in, unsigned int in_len, unsigned char *out, unsigned int *out_len) { if(key_len > 64) return -1; return rk_hmac_64(key, key_len, in, in_len, out, out_len, rk_hash_sha1); } int rk_hmac_sha256(const unsigned char *key, unsigned int key_len, const unsigned char *in, unsigned int in_len, unsigned char *out, unsigned int *out_len) { if(key_len > 64) return -1; return rk_hmac_64(key, key_len, in, in_len, out, out_len, rk_hash_sha256); } int rk_hmac_sha512(const unsigned char *key, unsigned int key_len, const unsigned char *in, unsigned int in_len, unsigned char *out, unsigned int *out_len) { if(key_len > 128) return -1; return rk_hmac_128(key, key_len, in, in_len, out, out_len, rk_hash_sha512); } int rk_hmac_sm3(const unsigned char *key, unsigned int key_len, const unsigned char *in, unsigned int in_len, unsigned char *out, unsigned int *out_len) { if(key_len > 64) return -1; return rk_hmac_64(key, key_len, in, in_len, out, out_len, rk_hash_sm3); }