Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798/* SPDX-License-Identifier: GPL-2.0-only *//* * SM3 hash algorithm * * Copyright (C) 2017 ARM Limited or its affiliates. * Copyright (C) 2017 Gilad Ben-Yossef <gilad@benyossef.com> * Copyright (C) 2021 Tianjia Zhang <tianjia.zhang@linux.alibaba.com> */
#ifndef _CRYPTO_SM3_H#define _CRYPTO_SM3_H
#include <linux/types.h>#include <linux/string.h>
#define SM3_DIGEST_SIZE 32#define SM3_BLOCK_SIZE 64
#define SM3_IVA 0x7380166f#define SM3_IVB 0x4914b2b9#define SM3_IVC 0x172442d7#define SM3_IVD 0xda8a0600#define SM3_IVE 0xa96f30bc#define SM3_IVF 0x163138aa#define SM3_IVG 0xe38dee4d#define SM3_IVH 0xb0fb0e4e
/* State for the SM3 compression function */struct sm3_block_state { u32 h[SM3_DIGEST_SIZE / 4];};
/** * struct sm3_ctx - Context for hashing a message with SM3 * @state: the compression function state * @bytecount: number of bytes processed so far * @buf: partial block buffer; bytecount % SM3_BLOCK_SIZE bytes are valid */struct sm3_ctx { struct sm3_block_state state; u64 bytecount; u8 buf[SM3_BLOCK_SIZE] __aligned(__alignof__(__be64));};
/** * sm3_zeroize_ctx() - Zeroize an sm3_ctx structure * @ctx: The sm3_ctx to zeroize */static inline void sm3_zeroize_ctx(struct sm3_ctx *ctx){ memzero_explicit(ctx, sizeof(*ctx));}
/** * sm3_init() - Initialize an SM3 context for a new message * @ctx: the context to initialize * * If you don't need incremental computation, consider sm3() instead. * * Context: Any context. */void sm3_init(struct sm3_ctx *ctx);
/** * sm3_update() - Update an SM3 context with message data * @ctx: the context to update; must have been initialized * @data: the message data * @len: the data length in bytes * * This can be called any number of times. * * Context: Any context. */void sm3_update(struct sm3_ctx *ctx, const u8 *data, size_t len);
/** * sm3_final() - Finish computing an SM3 message digest * @ctx: the context to finalize; must have been initialized * @out: (output) the resulting SM3 message digest * * After finishing, this zeroizes @ctx. So the caller does not need to do it. * * Context: Any context. */void sm3_final(struct sm3_ctx *ctx, u8 out[at_least SM3_DIGEST_SIZE]);
/** * sm3() - Compute SM3 message digest in one shot * @data: the message data * @len: the data length in bytes * @out: (output) the resulting SM3 message digest * * Context: Any context. */void sm3(const u8 *data, size_t len, u8 out[at_least SM3_DIGEST_SIZE]);
#endif /* _CRYPTO_SM3_H */