Git fork
at reftables-rust 51 lines 1.2 kB view raw
1/* wrappers for the EVP API of OpenSSL 3+ */ 2#ifndef SHA1_OPENSSL_H 3#define SHA1_OPENSSL_H 4#include <openssl/evp.h> 5 6struct openssl_SHA1_CTX { 7 EVP_MD_CTX *ectx; 8}; 9 10typedef struct openssl_SHA1_CTX openssl_SHA1_CTX; 11 12static inline void openssl_SHA1_Init(struct openssl_SHA1_CTX *ctx) 13{ 14 const EVP_MD *type = EVP_sha1(); 15 16 ctx->ectx = EVP_MD_CTX_new(); 17 if (!ctx->ectx) 18 die("EVP_MD_CTX_new: out of memory"); 19 20 EVP_DigestInit_ex(ctx->ectx, type, NULL); 21} 22 23static inline void openssl_SHA1_Update(struct openssl_SHA1_CTX *ctx, 24 const void *data, 25 size_t len) 26{ 27 EVP_DigestUpdate(ctx->ectx, data, len); 28} 29 30static inline void openssl_SHA1_Final(unsigned char *digest, 31 struct openssl_SHA1_CTX *ctx) 32{ 33 EVP_DigestFinal_ex(ctx->ectx, digest, NULL); 34 EVP_MD_CTX_free(ctx->ectx); 35} 36 37static inline void openssl_SHA1_Clone(struct openssl_SHA1_CTX *dst, 38 const struct openssl_SHA1_CTX *src) 39{ 40 EVP_MD_CTX_copy_ex(dst->ectx, src->ectx); 41} 42 43#ifndef platform_SHA_CTX 44#define platform_SHA_CTX openssl_SHA1_CTX 45#define platform_SHA1_Init openssl_SHA1_Init 46#define platform_SHA1_Clone openssl_SHA1_Clone 47#define platform_SHA1_Update openssl_SHA1_Update 48#define platform_SHA1_Final openssl_SHA1_Final 49#endif 50 51#endif /* SHA1_OPENSSL_H */