Skip to content

Commit b3a63fe

Browse files
committed
Use EVP with OpenSSL; suppress CommonCrypto MD5/SHA1 warnings
1 parent ad3af4e commit b3a63fe

1 file changed

Lines changed: 44 additions & 14 deletions

File tree

src/uuid.c

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,51 @@ SQLITE_EXTENSION_INIT1
1919
#include <string.h>
2020

2121
#ifdef USE_OPENSSL
22-
#include <openssl/md5.h>
23-
#include <openssl/sha.h>
22+
#include <openssl/evp.h>
23+
24+
static void digest_md5(const void *a, size_t alen, const void *b, size_t blen, unsigned char out[16]) {
25+
EVP_MD_CTX *ctx = EVP_MD_CTX_new();
26+
unsigned int len;
27+
EVP_DigestInit_ex(ctx, EVP_md5(), NULL);
28+
EVP_DigestUpdate(ctx, a, alen);
29+
EVP_DigestUpdate(ctx, b, blen);
30+
EVP_DigestFinal_ex(ctx, out, &len);
31+
EVP_MD_CTX_free(ctx);
32+
}
33+
34+
static void digest_sha1(const void *a, size_t alen, const void *b, size_t blen, unsigned char out[20]) {
35+
EVP_MD_CTX *ctx = EVP_MD_CTX_new();
36+
unsigned int len;
37+
EVP_DigestInit_ex(ctx, EVP_sha1(), NULL);
38+
EVP_DigestUpdate(ctx, a, alen);
39+
EVP_DigestUpdate(ctx, b, blen);
40+
EVP_DigestFinal_ex(ctx, out, &len);
41+
EVP_MD_CTX_free(ctx);
42+
}
2443
#endif
2544

2645
#ifdef USE_COMMONCRYPTO
2746
#define COMMON_DIGEST_FOR_OPENSSL
2847
#include <CommonCrypto/CommonDigest.h>
48+
49+
#pragma clang diagnostic push
50+
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
51+
static void digest_md5(const void *a, size_t alen, const void *b, size_t blen, unsigned char out[16]) {
52+
MD5_CTX ctx;
53+
MD5_Init(&ctx);
54+
MD5_Update(&ctx, a, alen);
55+
MD5_Update(&ctx, b, blen);
56+
MD5_Final(out, &ctx);
57+
}
58+
59+
static void digest_sha1(const void *a, size_t alen, const void *b, size_t blen, unsigned char out[20]) {
60+
SHA_CTX ctx;
61+
SHA1_Init(&ctx);
62+
SHA1_Update(&ctx, a, alen);
63+
SHA1_Update(&ctx, b, blen);
64+
SHA1_Final(out, &ctx);
65+
}
66+
#pragma clang diagnostic pop
2967
#endif
3068

3169
#ifdef USE_DEFAULT_ENTRY_POINT
@@ -85,12 +123,8 @@ static void uuid3(
85123

86124
uuid_t uu;
87125

88-
MD5_CTX mdctx;
89-
unsigned char md_value[MD5_DIGEST_LENGTH];
90-
MD5_Init(&mdctx);
91-
MD5_Update(&mdctx, namespace_uuid, sizeof(uuid_t));
92-
MD5_Update(&mdctx, name, strlen((const char *)name));
93-
MD5_Final(md_value, &mdctx);
126+
unsigned char md_value[16];
127+
digest_md5(namespace_uuid, sizeof(uuid_t), name, strlen((const char *)name), md_value);
94128

95129
SET_VARIANT(md_value);
96130
SET_VERSION(md_value, 3);
@@ -139,12 +173,8 @@ static void uuid5(
139173

140174
uuid_t uu;
141175

142-
SHA_CTX mdctx;
143-
unsigned char md_value[SHA_DIGEST_LENGTH];
144-
SHA1_Init(&mdctx);
145-
SHA1_Update(&mdctx, namespace_uuid, sizeof(uuid_t));
146-
SHA1_Update(&mdctx, name, strlen((const char *)name));
147-
SHA1_Final(md_value, &mdctx);
176+
unsigned char md_value[20];
177+
digest_sha1(namespace_uuid, sizeof(uuid_t), name, strlen((const char *)name), md_value);
148178

149179
SET_VARIANT(md_value);
150180
SET_VERSION(md_value, 5);

0 commit comments

Comments
 (0)