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