From 5f8a5f46e4e83735bb5ad384d8d7df771d2aa4b3 Mon Sep 17 00:00:00 2001
From: Richard Levitte <levitte@openssl.org>
Date: Thu, 13 Dec 2018 12:04:26 +0100
Subject: [PATCH] Adapt OPENSSL_DEBUG_DECRYPT to the new generic trace API

Co-authored-by: Dr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>

Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/8198)
---
 crypto/pkcs12/p12_decr.c | 23 ++++++-----------------
 crypto/trace.c           |  1 +
 include/openssl/trace.h  |  5 +++--
 3 files changed, 10 insertions(+), 19 deletions(-)

diff --git a/crypto/pkcs12/p12_decr.c b/crypto/pkcs12/p12_decr.c
index 67a9305438..b9d13d9cf5 100644
--- a/crypto/pkcs12/p12_decr.c
+++ b/crypto/pkcs12/p12_decr.c
@@ -10,11 +10,7 @@
 #include <stdio.h>
 #include "internal/cryptlib.h"
 #include <openssl/pkcs12.h>
-
-/* Define this to dump decrypted output to files called DERnnn */
-/*
- * #define OPENSSL_DEBUG_DECRYPT
- */
+#include <openssl/trace.h>
 
 /*
  * Encrypt/Decrypt a buffer based on password and algor, result in a
@@ -95,18 +91,11 @@ void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it,
         return NULL;
     }
     p = out;
-#ifdef OPENSSL_DEBUG_DECRYPT
-    {
-        FILE *op;
-
-        char fname[30];
-        static int fnm = 1;
-        sprintf(fname, "DER%d", fnm++);
-        op = fopen(fname, "wb");
-        fwrite(p, 1, outlen, op);
-        fclose(op);
-    }
-#endif
+    OSSL_TRACE_BEGIN(PKCS12_DECRYPT) {
+        BIO_printf(trc_out, "\n");
+        BIO_dump(trc_out, out, outlen);
+        BIO_printf(trc_out, "\n");
+    } OSSL_TRACE_END(PKCS12_DECRYPT);
     ret = ASN1_item_d2i(NULL, &p, outlen, it);
     if (zbuf)
         OPENSSL_cleanse(out, outlen);
diff --git a/crypto/trace.c b/crypto/trace.c
index 8020a58e68..3790619d0c 100644
--- a/crypto/trace.c
+++ b/crypto/trace.c
@@ -128,6 +128,7 @@ static const struct trace_category_st trace_categories[] = {
     TRACE_CATEGORY_(ENGINE_REF_COUNT),
     TRACE_CATEGORY_(PKCS5V2),
     TRACE_CATEGORY_(PKCS12_KEYGEN),
+    TRACE_CATEGORY_(PKCS12_DECRYPT),
     TRACE_CATEGORY_(X509V3_POLICY),
 };
 
diff --git a/include/openssl/trace.h b/include/openssl/trace.h
index 865fba0c2c..7c1244595c 100644
--- a/include/openssl/trace.h
+++ b/include/openssl/trace.h
@@ -41,8 +41,9 @@ extern "C" {
 # define OSSL_TRACE_CATEGORY_ENGINE_REF_COUNT    6
 # define OSSL_TRACE_CATEGORY_PKCS5V2             7
 # define OSSL_TRACE_CATEGORY_PKCS12_KEYGEN       8
-# define OSSL_TRACE_CATEGORY_X509V3_POLICY       9
-# define OSSL_TRACE_CATEGORY_NUM                10
+# define OSSL_TRACE_CATEGORY_PKCS12_DECRYPT      9
+# define OSSL_TRACE_CATEGORY_X509V3_POLICY      10
+# define OSSL_TRACE_CATEGORY_NUM                11
 
 /* Returns the trace category number for the given |name| */
 int OSSL_trace_get_category_num(const char *name);