gitee.com/lh-her-team/common@v1.5.1/opencrypto/gmssl/gmssl/include/openssl/sm3.h (about) 1 /* ==================================================================== 2 * Copyright (c) 2014 - 2017 The GmSSL Project. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in 13 * the documentation and/or other materials provided with the 14 * distribution. 15 * 16 * 3. All advertising materials mentioning features or use of this 17 * software must display the following acknowledgment: 18 * "This product includes software developed by the GmSSL Project. 19 * (http://gmssl.org/)" 20 * 21 * 4. The name "GmSSL Project" must not be used to endorse or promote 22 * products derived from this software without prior written 23 * permission. For written permission, please contact 24 * guanzhi1980@gmail.com. 25 * 26 * 5. Products derived from this software may not be called "GmSSL" 27 * nor may "GmSSL" appear in their names without prior written 28 * permission of the GmSSL Project. 29 * 30 * 6. Redistributions of any form whatsoever must retain the following 31 * acknowledgment: 32 * "This product includes software developed by the GmSSL Project 33 * (http://gmssl.org/)" 34 * 35 * THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY 36 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 37 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 38 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR 39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 41 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 42 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 43 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 44 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 45 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 46 * OF THE POSSIBILITY OF SUCH DAMAGE. 47 * ==================================================================== 48 */ 49 50 #ifndef HEADER_SM3_H 51 #define HEADER_SM3_H 52 53 #include <openssl/opensslconf.h> 54 #ifndef OPENSSL_NO_SM3 55 56 #define SM3_DIGEST_LENGTH 32 57 #define SM3_BLOCK_SIZE 64 58 #define SM3_CBLOCK (SM3_BLOCK_SIZE) 59 #define SM3_HMAC_SIZE (SM3_DIGEST_LENGTH) 60 61 62 #include <string.h> 63 #include <sys/types.h> 64 #include <openssl/e_os2.h> 65 66 #ifdef __cplusplus 67 extern "C" { 68 #endif 69 70 71 typedef struct { 72 uint32_t digest[8]; 73 uint64_t nblocks; 74 unsigned char block[64]; 75 int num; 76 } sm3_ctx_t; 77 78 void sm3_init(sm3_ctx_t *ctx); 79 void sm3_update(sm3_ctx_t *ctx, const unsigned char* data, size_t data_len); 80 void sm3_final(sm3_ctx_t *ctx, unsigned char digest[SM3_DIGEST_LENGTH]); 81 void sm3_compress(uint32_t digest[8], const unsigned char block[SM3_BLOCK_SIZE]); 82 void sm3(const unsigned char *data, size_t datalen, 83 unsigned char digest[SM3_DIGEST_LENGTH]); 84 85 int sm3_sm2_init(sm3_ctx_t *ctx, const char *id, 86 const unsigned char x[32], const unsigned char y[32]); 87 void sm3_compute_id_digest(unsigned char z[32], const char *id, 88 const unsigned char x[32], const unsigned char y[32]); 89 90 typedef struct { 91 sm3_ctx_t sm3_ctx; 92 unsigned char key[SM3_BLOCK_SIZE]; 93 } sm3_hmac_ctx_t; 94 95 void sm3_hmac_init(sm3_hmac_ctx_t *ctx, const unsigned char *key, size_t key_len); 96 void sm3_hmac_update(sm3_hmac_ctx_t *ctx, const unsigned char *data, size_t data_len); 97 void sm3_hmac_final(sm3_hmac_ctx_t *ctx, unsigned char mac[SM3_HMAC_SIZE]); 98 void sm3_hmac(const unsigned char *data, size_t data_len, 99 const unsigned char *key, size_t key_len, unsigned char mac[SM3_HMAC_SIZE]); 100 101 #ifdef __cplusplus 102 } 103 #endif 104 #endif 105 #endif