194 lines
5 KiB
C
194 lines
5 KiB
C
$NetBSD: patch-crypto.c,v 1.1 2020/04/25 13:57:48 nia Exp $
|
|
|
|
Fix build with OpenSSL >=1.1.
|
|
|
|
From FreeBSD Ports.
|
|
|
|
--- crypto.c.orig 2004-03-21 12:02:32.000000000 +0000
|
|
+++ crypto.c
|
|
@@ -56,6 +56,30 @@ static const char rcsid[] =
|
|
|
|
static EVP_PKEY *pkey;
|
|
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
+
|
|
+static void *OPENSSL_zalloc (size_t num)
|
|
+{
|
|
+ void *ret = OPENSSL_malloc (num);
|
|
+
|
|
+ if (ret != NULL)
|
|
+ memset (ret, 0, num);
|
|
+ return ret;
|
|
+}
|
|
+
|
|
+EVP_MD_CTX *EVP_MD_CTX_new (void)
|
|
+{
|
|
+ return OPENSSL_zalloc (sizeof (EVP_MD_CTX));
|
|
+}
|
|
+
|
|
+void EVP_MD_CTX_free (EVP_MD_CTX *ctx)
|
|
+{
|
|
+ EVP_MD_CTX_cleanup (ctx);
|
|
+ OPENSSL_free (ctx);
|
|
+}
|
|
+
|
|
+#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */
|
|
+
|
|
static void
|
|
opensslError (const char *what)
|
|
{
|
|
@@ -100,7 +124,7 @@ void
|
|
SignFile (int fd, const char *filename, const char *sigfile)
|
|
{
|
|
const EVP_MD *mdType;
|
|
- EVP_MD_CTX ctx;
|
|
+ EVP_MD_CTX *ctx;
|
|
ssize_t len;
|
|
unsigned char *sig = NULL;
|
|
unsigned int sigLen;
|
|
@@ -111,8 +135,12 @@ SignFile (int fd, const char *filename,
|
|
if (!pkey)
|
|
return;
|
|
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
mdType = EVP_PKEY_type (pkey->type) == EVP_PKEY_DSA ? EVP_dss1 () :
|
|
EVP_sha1 ();
|
|
+#else
|
|
+ mdType = EVP_sha1 ();
|
|
+#endif
|
|
|
|
if (!sigfile) {
|
|
int tlen = strlen (filename) + 4 + 1;
|
|
@@ -122,21 +150,23 @@ SignFile (int fd, const char *filename,
|
|
sigfile = tsigfile;
|
|
}
|
|
|
|
+ if ((ctx = EVP_MD_CTX_new ()) == NULL)
|
|
+ opensslError ("EVP_MD_CTX_new");
|
|
#ifdef HAVE_EVP_MD_CTX_INIT
|
|
- EVP_MD_CTX_init (&ctx);
|
|
+ EVP_MD_CTX_init (ctx);
|
|
#endif
|
|
#ifdef EVP_DIGESTINIT_VOID
|
|
- EVP_SignInit (&ctx, mdType);
|
|
+ EVP_SignInit (ctx, mdType);
|
|
#else
|
|
- if (!EVP_SignInit (&ctx, mdType))
|
|
+ if (!EVP_SignInit (ctx, mdType))
|
|
opensslError ("EVP_SignInit");
|
|
#endif
|
|
|
|
while ((len = read (fd, HashBuffer, HASH_BUFFER_SIZE)) > 0) {
|
|
#ifdef EVP_DIGESTINIT_VOID
|
|
- EVP_SignUpdate (&ctx, HashBuffer, len);
|
|
+ EVP_SignUpdate (ctx, HashBuffer, len);
|
|
#else
|
|
- if (!EVP_SignUpdate (&ctx, HashBuffer, len))
|
|
+ if (!EVP_SignUpdate (ctx, HashBuffer, len))
|
|
opensslError ("EVP_SignUpdate");
|
|
#endif
|
|
}
|
|
@@ -146,7 +176,7 @@ SignFile (int fd, const char *filename,
|
|
|
|
sig = mymalloc (EVP_PKEY_size (pkey));
|
|
|
|
- if (EVP_SignFinal (&ctx, sig, &sigLen, pkey)) {
|
|
+ if (EVP_SignFinal (ctx, sig, &sigLen, pkey)) {
|
|
if ((f = open (sigfile, O_CREAT|O_WRONLY|O_TRUNC, 0600)) != -1) {
|
|
if (write (f, sig, sigLen) != sigLen)
|
|
yaficError (sigfile);
|
|
@@ -162,15 +192,16 @@ SignFile (int fd, const char *filename,
|
|
if (sig) free (sig);
|
|
if (tsigfile) free (tsigfile);
|
|
#ifdef HAVE_EVP_MD_CTX_CLEANUP
|
|
- EVP_MD_CTX_cleanup (&ctx);
|
|
+ EVP_MD_CTX_cleanup (ctx);
|
|
#endif
|
|
+ EVP_MD_CTX_free (ctx);
|
|
}
|
|
|
|
void
|
|
VerifyFile (int fd, const char *filename, const char *sigfile)
|
|
{
|
|
const EVP_MD *mdType;
|
|
- EVP_MD_CTX ctx;
|
|
+ EVP_MD_CTX *ctx;
|
|
ssize_t len;
|
|
unsigned char *sig = NULL;
|
|
int f;
|
|
@@ -181,8 +212,12 @@ VerifyFile (int fd, const char *filename
|
|
if (!pkey)
|
|
return;
|
|
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
mdType = EVP_PKEY_type (pkey->type) == EVP_PKEY_DSA ? EVP_dss1 () :
|
|
EVP_sha1 ();
|
|
+#else
|
|
+ mdType = EVP_sha1 ();
|
|
+#endif
|
|
|
|
if (!sigfile) {
|
|
int tlen = strlen (filename) + 4 + 1;
|
|
@@ -195,13 +230,15 @@ VerifyFile (int fd, const char *filename
|
|
fprintf (stderr, "Verifying %s: ", filename);
|
|
fflush (stderr);
|
|
|
|
+ if ((ctx = EVP_MD_CTX_new ()) == NULL)
|
|
+ opensslError ("EVP_MD_CTX_new");
|
|
#ifdef HAVE_EVP_MD_CTX_INIT
|
|
- EVP_MD_CTX_init (&ctx);
|
|
+ EVP_MD_CTX_init (ctx);
|
|
#endif
|
|
#ifdef EVP_DIGESTINIT_VOID
|
|
- EVP_VerifyInit (&ctx, mdType);
|
|
+ EVP_VerifyInit (ctx, mdType);
|
|
#else
|
|
- if (!EVP_VerifyInit (&ctx, mdType)) {
|
|
+ if (!EVP_VerifyInit (ctx, mdType)) {
|
|
fprintf (stderr, "Error\n");
|
|
opensslError ("EVP_VerifyInit");
|
|
}
|
|
@@ -209,9 +246,9 @@ VerifyFile (int fd, const char *filename
|
|
|
|
while ((len = read (fd, HashBuffer, HASH_BUFFER_SIZE)) > 0) {
|
|
#ifdef EVP_DIGESTINIT_VOID
|
|
- EVP_VerifyUpdate (&ctx, HashBuffer, len);
|
|
+ EVP_VerifyUpdate (ctx, HashBuffer, len);
|
|
#else
|
|
- if (!EVP_VerifyUpdate (&ctx, HashBuffer, len)) {
|
|
+ if (!EVP_VerifyUpdate (ctx, HashBuffer, len)) {
|
|
fprintf (stderr, "Error\n");
|
|
opensslError ("EVP_SignUpdate");
|
|
}
|
|
@@ -233,7 +270,7 @@ VerifyFile (int fd, const char *filename
|
|
|
|
close (f);
|
|
|
|
- ret = EVP_VerifyFinal (&ctx, sig, len, pkey);
|
|
+ ret = EVP_VerifyFinal (ctx, sig, len, pkey);
|
|
if (ret < 0) {
|
|
fprintf (stderr, "Error\n");
|
|
opensslError ("EVP_VerifyFinal");
|
|
@@ -254,8 +291,9 @@ VerifyFile (int fd, const char *filename
|
|
if (sig) free (sig);
|
|
if (tsigfile) free (tsigfile);
|
|
#ifdef HAVE_EVP_MD_CTX_CLEANUP
|
|
- EVP_MD_CTX_cleanup (&ctx);
|
|
+ EVP_MD_CTX_cleanup (ctx);
|
|
#endif
|
|
+ EVP_MD_CTX_free (ctx);
|
|
}
|
|
|
|
const char *
|
|
@@ -265,7 +303,11 @@ KeyTypeStr (void)
|
|
|
|
if (pkey) {
|
|
int bits = EVP_PKEY_bits (pkey);
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
int type = EVP_PKEY_type (pkey->type);
|
|
+#else
|
|
+ int type = EVP_PKEY_base_id (pkey);
|
|
+#endif
|
|
|
|
switch (type) {
|
|
case EVP_PKEY_RSA:
|