1*47645577SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */ 2*47645577SJerome Forissier /* 3*47645577SJerome Forissier * Copyright (c) 2019 Huawei Technologies Co., Ltd 4*47645577SJerome Forissier */ 5*47645577SJerome Forissier /** 6*47645577SJerome Forissier * \file sm3.h 7*47645577SJerome Forissier * thanks to Xyssl 8*47645577SJerome Forissier * author:goldboar 9*47645577SJerome Forissier * email:goldboar@163.com 10*47645577SJerome Forissier * 2011-10-26 11*47645577SJerome Forissier */ 12*47645577SJerome Forissier #ifndef CORE_CRYPTO_SM3_H 13*47645577SJerome Forissier #define CORE_CRYPTO_SM3_H 14*47645577SJerome Forissier 15*47645577SJerome Forissier #include <stddef.h> 16*47645577SJerome Forissier #include <stdint.h> 17*47645577SJerome Forissier 18*47645577SJerome Forissier struct sm3_context { 19*47645577SJerome Forissier uint32_t total[2]; /* number of bytes processed */ 20*47645577SJerome Forissier uint32_t state[8]; /* intermediate digest state */ 21*47645577SJerome Forissier uint8_t buffer[64]; /* data block being processed */ 22*47645577SJerome Forissier uint8_t ipad[64]; /* HMAC: inner padding */ 23*47645577SJerome Forissier uint8_t opad[64]; /* HMAC: outer padding */ 24*47645577SJerome Forissier }; 25*47645577SJerome Forissier 26*47645577SJerome Forissier void sm3_init(struct sm3_context *ctx); 27*47645577SJerome Forissier void sm3_update(struct sm3_context *ctx, const uint8_t *input, size_t ilen); 28*47645577SJerome Forissier void sm3_final(struct sm3_context *ctx, uint8_t output[32]); 29*47645577SJerome Forissier void sm3(const uint8_t *input, size_t ilen, uint8_t output[32]); 30*47645577SJerome Forissier 31*47645577SJerome Forissier void sm3_hmac_init(struct sm3_context *ctx, const uint8_t *key, size_t keylen); 32*47645577SJerome Forissier void sm3_hmac_update(struct sm3_context *ctx, const uint8_t *input, 33*47645577SJerome Forissier size_t ilen); 34*47645577SJerome Forissier void sm3_hmac_final(struct sm3_context *ctx, uint8_t output[32]); 35*47645577SJerome Forissier void sm3_hmac(const uint8_t *key, size_t keylen, const uint8_t *input, 36*47645577SJerome Forissier size_t ilen, uint8_t output[32]); 37*47645577SJerome Forissier 38*47645577SJerome Forissier #endif /* CORE_CRYPTO_SM3_H */ 39