diff --git a/examples/nettle-openssl.c b/examples/nettle-openssl.c index 00345188e344f9429a8a144e0c9bb52b87d09f2e..59b636c5d75925fe99716024f2be16380d8898c3 100644 --- a/examples/nettle-openssl.c +++ b/examples/nettle-openssl.c @@ -43,6 +43,9 @@ #include <openssl/cast.h> #include <openssl/rc4.h> +#include <openssl/md5.h> +#include <openssl/sha.h> + #include "nettle-internal.h" @@ -294,4 +297,74 @@ nettle_openssl_cast128 = { openssl_cast_encrypt, openssl_cast_decrypt }; +/* Hash functions */ + +/* md5 */ + +static void +openssl_md5_init(void *ctx) +{ + MD5_Init(ctx); +} + +static void +openssl_md5_update(void *ctx, + unsigned length, + const uint8_t *src) +{ + MD5_Update(ctx, src, length); +} + +static void +openssl_md5_digest(void *ctx, + unsigned length, uint8_t *dst) +{ + assert(length == SHA_DIGEST_LENGTH); + MD5_Final(dst, ctx); + MD5_Init(ctx); +} + +const struct nettle_hash +nettle_openssl_md5 = { + "openssl md5", sizeof(SHA_CTX), + SHA_DIGEST_LENGTH, SHA_CBLOCK, + openssl_md5_init, + openssl_md5_update, + openssl_md5_digest +}; + +/* sha1 */ + +static void +openssl_sha1_init(void *ctx) +{ + SHA1_Init(ctx); +} + +static void +openssl_sha1_update(void *ctx, + unsigned length, + const uint8_t *src) +{ + SHA1_Update(ctx, src, length); +} + +static void +openssl_sha1_digest(void *ctx, + unsigned length, uint8_t *dst) +{ + assert(length == SHA_DIGEST_LENGTH); + SHA1_Final(dst, ctx); + SHA1_Init(ctx); +} + +const struct nettle_hash +nettle_openssl_sha1 = { + "openssl sha1", sizeof(SHA_CTX), + SHA_DIGEST_LENGTH, SHA_CBLOCK, + openssl_sha1_init, + openssl_sha1_update, + openssl_sha1_digest +}; + #endif /* WITH_OPENSSL */