[BACK]Return to patch-crypto.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / pkgsrc / security / yafic / patches

File: [cvs.NetBSD.org] / pkgsrc / security / yafic / patches / patch-crypto.c (download)

Revision 1.1, Sat Apr 25 13:57:48 2020 UTC (3 years, 4 months ago) by nia
Branch: MAIN
CVS Tags: pkgsrc-2023Q2-base, pkgsrc-2023Q2, pkgsrc-2023Q1-base, pkgsrc-2023Q1, pkgsrc-2022Q4-base, pkgsrc-2022Q4, pkgsrc-2022Q3-base, pkgsrc-2022Q3, pkgsrc-2022Q2-base, pkgsrc-2022Q2, pkgsrc-2022Q1-base, pkgsrc-2022Q1, pkgsrc-2021Q4-base, pkgsrc-2021Q4, pkgsrc-2021Q3-base, pkgsrc-2021Q3, pkgsrc-2021Q2-base, pkgsrc-2021Q2, pkgsrc-2021Q1-base, pkgsrc-2021Q1, pkgsrc-2020Q4-base, pkgsrc-2020Q4, pkgsrc-2020Q3-base, pkgsrc-2020Q3, pkgsrc-2020Q2-base, pkgsrc-2020Q2, HEAD

yafic: Unbreak with OpenSSL 1.1. Patch taken from FreeBSD Ports.

$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: