OpenEuler-OpenSSL测试
1) sm3hash.h
#ifndef HEADER_C_FILE_SM3_HASH_H
#define HEADER_C_FILE_SM3_HASH_H
#ifdef __cplusplus
extern "C" {
#endif
int sm3_hash(const unsigned char *message, size_t len, unsigned char *hash, unsigned int *hash_len);
#ifdef __cplusplus
}
#endif
#endif /* end of HEADER_C_FILE_SM3_HASH_H */
2) sm3hash.c
#include "openssl/evp.h"
#include "sm3hash.h"
int sm3_hash(const unsigned char *message, size_t len, unsigned char *hash, unsigned int *hash_len)
{
EVP_MD_CTX *md_ctx;
const EVP_MD *md;
md = EVP_sm3();
md_ctx = EVP_MD_CTX_new();
EVP_DigestInit_ex(md_ctx, md, NULL);
EVP_DigestUpdate(md_ctx, message, len);
EVP_DigestFinal_ex(md_ctx, hash, hash_len);
EVP_MD_CTX_free(md_ctx);
return 0;
}
3) demo.c
#include <stdio.h>
#include <string.h>
#include "sm3hash.h"
int main(void)
{
const unsigned char sample1[] = {'a', 'b', 'c', 0};
unsigned int sample1_len = strlen((char *)sample1);
const unsigned char sample2[] = {0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64,
0x61, 0x62, 0x63, 0x64, 0x61, 0x62, 0x63, 0x64};
unsigned int sample2_len = sizeof(sample2);
unsigned char hash_value[64];
unsigned int i, hash_len;
sm3_hash(sample1, sample1_len, hash_value, &hash_len);
printf("raw data: %s\n", sample1);
printf("hash length: %d bytes.\n", hash_len);
printf("hash value:\n");
for (i = 0; i < hash_len; i++)
{
printf("0x%x ", hash_value[i]);
}
printf("\n\n");
sm3_hash(sample2, sample2_len, hash_value, &hash_len);
printf("raw data:\n");
for (i = 0; i < sample2_len; i++)
{
printf("0x%x ", sample2[i]);
}
printf("\n");
printf("hash length: %d bytes.\n", hash_len);
printf("hash value:\n");
for (i = 0; i < hash_len; i++)
{
printf("0x%x ", hash_value[i]);
}
printf("\n");
return 0;
}

浙公网安备 33010602011771号