25#ifndef __LWS_GENHASH_H__
26#define __LWS_GENHASH_H__
39#if defined(LWS_WITH_AWSLC) || defined(LWS_WITH_BORINGSSL)
40#include <openssl/hmac.h>
61#define LWS_GENHASH_LARGEST 64
63#if defined(LWS_WITH_TLS) && defined(LWS_WITH_GENCRYPTO)
65struct lws_genhash_ctx {
67#if defined(LWS_WITH_MBEDTLS)
69 mbedtls_md5_context md5;
70 mbedtls_sha1_context sha1;
71 mbedtls_sha256_context sha256;
72 mbedtls_sha512_context sha512;
73 const mbedtls_md_info_t *hmac;
75#elif defined(LWS_WITH_SCHANNEL)
80#elif defined(LWS_WITH_GNUTLS)
84#elif defined(LWS_WITH_BEARSSL)
88 br_sha256_context sha256;
89 br_sha384_context sha384;
90 br_sha512_context sha512;
93 const EVP_MD *evp_type;
98struct lws_genhmac_ctx {
100#if defined(LWS_WITH_MBEDTLS)
101 const mbedtls_md_info_t *hmac;
102 mbedtls_md_context_t ctx;
103#elif defined(LWS_WITH_SCHANNEL)
108#elif defined(LWS_WITH_GNUTLS)
112#elif defined(LWS_WITH_BEARSSL)
113 br_hmac_key_context hmac_key;
116 const EVP_MD *evp_type;
118#if !defined(LWS_WITH_BORINGSSL) &&\
119 defined(LWS_HAVE_EVP_PKEY_new_raw_private_key)
123#if defined(LWS_HAVE_HMAC_CTX_new)
172lws_genhash_update(
struct lws_genhash_ctx *ctx,
const void *in,
size_t len);
186lws_genhash_destroy(
struct lws_genhash_ctx *ctx,
void *result);
231 const uint8_t *key,
size_t key_len);
244lws_genhmac_update(
struct lws_genhmac_ctx *ctx,
const void *in,
size_t len);
258lws_genhmac_destroy(
struct lws_genhmac_ctx *ctx,
void *result);
@ LWS_GENHASH_TYPE_SHA384
@ LWS_GENHASH_TYPE_UNKNOWN
@ LWS_GENHASH_TYPE_SHA512
@ LWS_GENHASH_TYPE_SHA256
@ LWS_GENHMAC_TYPE_SHA384
@ LWS_GENHMAC_TYPE_SHA512
@ LWS_GENHMAC_TYPE_UNKNOWN
@ LWS_GENHMAC_TYPE_SHA256
#define LWS_WARN_UNUSED_RESULT