1 /* 2 * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. 3 * Copyright 2017 Ribose Inc. All Rights Reserved. 4 * 5 * Licensed under the OpenSSL license (the "License"). You may not use 6 * this file except in compliance with the License. You can obtain a copy 7 * in the file LICENSE in the source distribution or at 8 * https://www.openssl.org/source/license.html 9 */ 10 11 #include "internal/cryptlib.h" 12 13 #ifndef OPENSSL_NO_SM3 14 # include <openssl/evp.h> 15 # include "crypto/evp.h" 16 # include "crypto/sm3.h" 17 18 static int init(EVP_MD_CTX *ctx) 19 { 20 return sm3_init(EVP_MD_CTX_md_data(ctx)); 21 } 22 23 static int update(EVP_MD_CTX *ctx, const void *data, size_t count) 24 { 25 return sm3_update(EVP_MD_CTX_md_data(ctx), data, count); 26 } 27 28 static int final(EVP_MD_CTX *ctx, unsigned char *md) 29 { 30 return sm3_final(md, EVP_MD_CTX_md_data(ctx)); 31 } 32 33 static const EVP_MD sm3_md = { 34 NID_sm3, 35 NID_sm3WithRSAEncryption, 36 SM3_DIGEST_LENGTH, 37 0, 38 init, 39 update, 40 final, 41 NULL, 42 NULL, 43 SM3_CBLOCK, 44 sizeof(EVP_MD *) + sizeof(SM3_CTX), 45 }; 46 47 const EVP_MD *EVP_sm3(void) 48 { 49 return &sm3_md; 50 } 51 52 #endif 53