mirror of
https://github.com/torvalds/linux.git
synced 2026-05-13 08:39:31 +02:00
Update one driver that used sizeof(struct sm3_state) to use sizeof(struct sm3_ctx) instead. Then, remove struct sm3_state and SM3_STATE_SIZE. This completes the replacement of struct sm3_state with struct sm3_ctx. Acked-by: Ard Biesheuvel <ardb@kernel.org> Link: https://lore.kernel.org/r/20260321040935.410034-13-ebiggers@kernel.org Signed-off-by: Eric Biggers <ebiggers@kernel.org>
88 lines
2.2 KiB
C
88 lines
2.2 KiB
C
/* 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>
|
|
|
|
#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_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 */
|