OpenSSL wrapper for SHA3 and SHAKE non-incremental functions

This commit is contained in:
Douglas Stebila 2019-07-05 21:28:50 -04:00
parent 131580a029
commit 9c0bbbfa17
2 changed files with 49 additions and 0 deletions

View File

@ -21,7 +21,11 @@
#define sha3_256_inc_finalize OQS_SHA3_sha3_256_inc_finalize
#define SHA3_384_RATE OQS_SHA3_SHA3_384_RATE
#ifndef USE_SHA3_OPENSSL
#define sha3_384 OQS_SHA3_sha3_384
#else
#define sha3_384 oqs_unused_SHA3_sha3_384
#endif
#define sha3_384incctx OQS_SHA3_sha3_384_inc_ctx
#define sha3_384_inc_init OQS_SHA3_sha3_384_inc_init
@ -29,7 +33,11 @@
#define sha3_384_inc_finalize OQS_SHA3_sha3_384_inc_finalize
#define SHA3_512_RATE OQS_SHA3_SHA3_512_RATE
#ifndef USE_SHA3_OPENSSL
#define sha3_512 OQS_SHA3_sha3_512
#else
#define sha3_512 oqs_unused_SHA3_sha3_512
#endif
#define sha3_512incctx OQS_SHA3_sha3_512_inc_ctx
#define sha3_512_inc_init OQS_SHA3_sha3_512_inc_init
@ -37,7 +45,11 @@
#define sha3_512_inc_finalize OQS_SHA3_sha3_512_inc_finalize
#define SHAKE128_RATE OQS_SHA3_SHAKE128_RATE
#ifndef USE_SHA3_OPENSSL
#define shake128 OQS_SHA3_shake128
#else
#define shake128 oqs_unused_SHA3_shake128
#endif
#define shake128ctx OQS_SHA3_shake128_ctx
#define shake128_absorb OQS_SHA3_shake128_absorb
@ -50,7 +62,11 @@
#define shake128_inc_squeeze OQS_SHA3_shake128_inc_squeeze
#define SHAKE256_RATE OQS_SHA3_SHAKE256_RATE
#ifndef USE_SHA3_OPENSSL
#define shake256 OQS_SHA3_shake256
#else
#define shake256 oqs_unused_SHA3_shake256
#endif
#define shake256ctx OQS_SHA3_shake256_ctx
#define shake256_absorb OQS_SHA3_shake256_absorb

View File

@ -21,10 +21,43 @@ static void do_hash(uint8_t *output, const uint8_t *input, size_t inplen, const
EVP_MD_CTX_destroy(mdctx);
}
static void do_xof(uint8_t *output, size_t outlen, const uint8_t *input, size_t inplen, const EVP_MD *md) {
EVP_MD_CTX *mdctx;
mdctx = EVP_MD_CTX_create();
EVP_DigestInit_ex(mdctx, md, NULL);
EVP_DigestUpdate(mdctx, input, inplen);
EVP_DigestFinalXOF(mdctx, output, outlen);
EVP_MD_CTX_destroy(mdctx);
}
void OQS_SHA3_sha3_256(uint8_t *output, const uint8_t *input, size_t inplen) {
const EVP_MD *md;
md = EVP_sha3_256();
do_hash(output, input, inplen, md);
}
void OQS_SHA3_sha3_384(uint8_t *output, const uint8_t *input, size_t inplen) {
const EVP_MD *md;
md = EVP_sha3_384();
do_hash(output, input, inplen, md);
}
void OQS_SHA3_sha3_512(uint8_t *output, const uint8_t *input, size_t inplen) {
const EVP_MD *md;
md = EVP_sha3_512();
do_hash(output, input, inplen, md);
}
void OQS_SHA3_shake128(uint8_t *output, size_t outlen, const uint8_t *input, size_t inplen) {
const EVP_MD *md;
md = EVP_shake128();
do_xof(output, outlen, input, inplen, md);
}
void OQS_SHA3_shake256(uint8_t *output, size_t outlen, const uint8_t *input, size_t inplen) {
const EVP_MD *md;
md = EVP_shake256();
do_xof(output, outlen, input, inplen, md);
}
#endif