d5e5e2ffaf
Move digest code into the relevant providers (fips, default, legacy). The headers are temporarily moved to be internal, and will be moved into providers after all external references are resolved. The deprecated digest code can not be removed until EVP_PKEY (signing) is supported by providers. EVP_MD data can also not yet be cleaned up for the same reasons. Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/8763)
52 lines
1.8 KiB
C
52 lines
1.8 KiB
C
/*
|
|
* Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
|
|
*
|
|
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
|
* this file except in compliance with the License. You can obtain a copy
|
|
* in the file LICENSE in the source distribution or at
|
|
* https://www.openssl.org/source/license.html
|
|
*/
|
|
|
|
/* TODO(3.0) Move this header into provider when dependencies are removed */
|
|
#ifndef HEADER_INTERNAL_SHA3_H
|
|
# define HEADER_INTERNAL_SHA3_H
|
|
|
|
# include <openssl/e_os2.h>
|
|
# include <stddef.h>
|
|
|
|
# define KECCAK1600_WIDTH 1600
|
|
# define SHA3_MDSIZE(bitlen) (bitlen / 8)
|
|
# define KMAC_MDSIZE(bitlen) 2 * (bitlen / 8)
|
|
# define SHA3_BLOCKSIZE(bitlen) (KECCAK1600_WIDTH - bitlen * 2) / 8
|
|
|
|
typedef struct keccak_st KECCAK1600_CTX;
|
|
|
|
typedef size_t (sha3_absorb_fn)(void *vctx, const void *inp, size_t len);
|
|
typedef int (sha3_final_fn)(unsigned char *md, void *vctx);
|
|
|
|
typedef struct prov_sha3_meth_st
|
|
{
|
|
sha3_absorb_fn *absorb;
|
|
sha3_final_fn *final;
|
|
} PROV_SHA3_METHOD;
|
|
|
|
struct keccak_st {
|
|
uint64_t A[5][5];
|
|
size_t block_size; /* cached ctx->digest->block_size */
|
|
size_t md_size; /* output length, variable in XOF */
|
|
size_t bufsz; /* used bytes in below buffer */
|
|
unsigned char buf[KECCAK1600_WIDTH / 8 - 32];
|
|
unsigned char pad;
|
|
PROV_SHA3_METHOD meth;
|
|
};
|
|
|
|
void sha3_reset(KECCAK1600_CTX *ctx);
|
|
int sha3_init(KECCAK1600_CTX *ctx, unsigned char pad, size_t bitlen);
|
|
int keccak_kmac_init(KECCAK1600_CTX *ctx, unsigned char pad, size_t bitlen);
|
|
int sha3_update(KECCAK1600_CTX *ctx, const void *_inp, size_t len);
|
|
int sha3_final(unsigned char *md, KECCAK1600_CTX *ctx);
|
|
|
|
size_t SHA3_absorb(uint64_t A[5][5], const unsigned char *inp, size_t len,
|
|
size_t r);
|
|
|
|
#endif /* HEADER_INTERNAL_SHA3_H */
|