/***************************************************************************** * 函 数 名 : crypto_hash * * 功能描述 : 计算输入的数据,输出16字节的HASH值,当前支持MD5、和SHA-1算法。 * * 输入参数 : data: 待计算HASH值的数据。 * len: 待计算HASH值的数据长度。(byte) * algorithm: 所要使用的HASH算法。 * hlen: 作为输入参数,存放HASH值的缓冲区的长度。(byte) * * 输出参数 : hash: 存放生成的HASH值。buffer必须大于16(MD5)/20(SHA-1)字节。 * hlen: 作为输出参数,存放生成的HASH值的长度。(byte) * * 返 回 值 : OK: 生成成功。 * ERROR: 生成失败。 * * 其它说明 : hlen为输入/输出参数,传入的hlen变量所用内存必须可写回。 * 所以避免直接传入类似sizeof()的函数调用结果。 * *****************************************************************************/ int crypto_hash_o(char *data, int len, CRYPTO_HASH_ALGORITHM algorithm, char *hash, int *hlen) { if(data == NULL || hash == NULL || hlen == NULL) { security_print("ERROR crypto_hash: param is NULL pointer!\n"); return BSP_ERROR; } if(len<=0 ) { security_print("ERROR crypto_hash: param is invalid!\n"); return BSP_ERROR; } switch(algorithm) { case CRYPTO_ALGORITHM_SHA256: if (*hlen < SHA256_DIGEST_LENGTH) { security_print("ERROR crypto_hash: param hlen is invalid!(hash bufsize is too small)\n"); return BSP_ERROR; } SHA256_Hash((const sha2_byte*)data, (size_t)len,(sha2_byte*)hash); *hlen = SHA256_DIGEST_LENGTH; break; case CRYPTO_ALGORITHM_MD5: case CRYPTO_ALGORITHM_SHA1: default: security_print("ERROR crypto_hash: unknown algorithm!\n"); return BSP_ERROR; } return BSP_OK; }/*lint !e429*/
/***************************************************************************** * 函 数 名 : crypto_hash * * 功能描述 : 计算输入的数据,输出16字节的HASH值,当前支持MD5、和SHA-1算法。 * * 输入参数 : data: 待计算HASH值的数据。 * len: 待计算HASH值的数据长度。(byte) * algorithm: 所要使用的HASH算法。 * hlen: 作为输入参数,存放HASH值的缓冲区的长度。(byte) * * 输出参数 : hash: 存放生成的HASH值。buffer必须大于16(MD5)/20(SHA-1)字节。 * hlen: 作为输出参数,存放生成的HASH值的长度。(byte) * * 返 回 值 : OK: 生成成功。 * ERROR: 生成失败。 * * 其它说明 : hlen为输入/输出参数,传入的hlen变量所用内存必须可写回。 * 所以避免直接传入类似sizeof()的函数调用结果。 * *****************************************************************************/ int crypto_hash_o(char *data, int len, CRYPTO_HASH_ALGORITHM algorithm, char *hash, int *hlen) { if(data == NULL || hash == NULL || hlen == NULL) { security_print("ERROR crypto_hash: param is NULL pointer!\n"); return BSP_ERROR; } if(len<=0 ) { security_print("ERROR crypto_hash: param is invalid!\n"); return BSP_ERROR; } switch(algorithm) { case CRYPTO_ALGORITHM_MD5: if(*hlen<16) { security_print("ERROR crypto_hash: param hlen is invalid!(hash bufsize is too small)\n"); return BSP_ERROR; } // FIXME: need rewrite MD5 function! NO return value! encrypt_lock_md5_data (data, len, hash); /* if(BSP_OK != encrypt_lock_md5_data (data, len, hash)) { security_print("ERROR crypto_hash: encrypt_lock_md5_data failed!\n"); return BSP_ERROR; } */ *hlen = MD5_HASH_LEN/8; break; case CRYPTO_ALGORITHM_SHA1: if(*hlen<20) { security_print("ERROR crypto_hash: param hlen is invalid!(hash bufsize is too small)\n"); return BSP_ERROR; } /*if(BSP_OK != SHA1Hash(data,len,(BSP_U32*)hash))*/ { security_print("ERROR crypto_hash: SHA1Hash not support!\n"); return BSP_ERROR; } /* *hlen = SHA1_HASH_LEN; */ break; case CRYPTO_ALGORITHM_SHA256: if (*hlen < SHA256_DIGEST_LENGTH) { security_print("ERROR crypto_hash: param hlen is invalid!(hash bufsize is too small)\n"); return BSP_ERROR; } SHA256_Hash((unsigned char*)data,len,(unsigned char*)hash); *hlen = SHA256_DIGEST_LENGTH; break; default: security_print("ERROR crypto_hash: unknown algorithm!\n"); return BSP_ERROR; } return BSP_OK; }/*lint !e429*/