public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Michael D Kinney" <michael.d.kinney@intel.com>
To: devel@edk2.groups.io
Cc: Jiewen Yao <jiewen.yao@intel.com>,
	Jian J Wang <jian.j.wang@intel.com>,
	Xiaoyu Lu <xiaoyu1.lu@intel.com>,
	Guomin Jiang <guomin.jiang@intel.com>,
	Christopher Zurcher <christopher.zurcher@microsoft.com>
Subject: [Patch 07/12] CryptoPkg/Library/OpensslLib: Produce consistent set of APIs
Date: Tue, 11 Oct 2022 08:03:53 -0700	[thread overview]
Message-ID: <20221011150358.1332-8-michael.d.kinney@intel.com> (raw)
In-Reply-To: <20221011150358.1332-1-michael.d.kinney@intel.com>

Update all OpensslLib instances so they all produce all the APIs
used by the BaseCryptLib instances. Not producing the same set of
APIs for a library class does not follow the EDK II library class
rules and breaks the assumptions that consumers of the OpensslLib
may make about which services are present.

* Add missing declaration of the private library class OpensslLib
  to CryptoPkg.dec.
* Add SslNull.c with NULL implementations of SSL functions
* Add EcSm2Null.c with NULL implementations of EC/SM2 functions.
* Update OpensslLibCrypto.inf to include both SslNull.c and
  EcSm2Null.c so this library instance produces all the opensll
  APIs used by the BaseCryptLib instances.
* Update OpensslLib.inf and OpensslLibAccel.inf to include
  EcSm2Null.c so these library instances produce all the opensll
  APIs used by the BaseCryptLib instances.
* Add missing declaration of the private library class IntrinsicLib
  to CryptoPkg.dec

Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Xiaoyu Lu <xiaoyu1.lu@intel.com>
Cc: Guomin Jiang <guomin.jiang@intel.com>
Cc: Christopher Zurcher <christopher.zurcher@microsoft.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
 CryptoPkg/CryptoPkg.dec                       |   9 +
 CryptoPkg/Library/OpensslLib/EcSm2Null.c      | 291 +++++++++++++
 CryptoPkg/Library/OpensslLib/OpensslLib.inf   |   2 +
 .../Library/OpensslLib/OpensslLibAccel.inf    |   2 +
 .../Library/OpensslLib/OpensslLibCrypto.inf   |   2 +
 .../Library/OpensslLib/OpensslLibFull.inf     |   2 +
 .../OpensslLib/OpensslLibFullAccel.inf        |   2 +
 CryptoPkg/Library/OpensslLib/SslNull.c        | 405 ++++++++++++++++++
 CryptoPkg/Private/Library/IntrinsicLib.h      |  16 +
 CryptoPkg/Private/Library/OpensslLib.h        |  14 +
 10 files changed, 745 insertions(+)
 create mode 100644 CryptoPkg/Library/OpensslLib/EcSm2Null.c
 create mode 100644 CryptoPkg/Library/OpensslLib/SslNull.c
 create mode 100644 CryptoPkg/Private/Library/IntrinsicLib.h
 create mode 100644 CryptoPkg/Private/Library/OpensslLib.h

diff --git a/CryptoPkg/CryptoPkg.dec b/CryptoPkg/CryptoPkg.dec
index 217e73c3bcd2..f326c6324013 100644
--- a/CryptoPkg/CryptoPkg.dec
+++ b/CryptoPkg/CryptoPkg.dec
@@ -37,6 +37,15 @@ [LibraryClasses]
   #
   HashApiLib|Include/Library/HashApiLib.h
 
+[LibraryClasses.common.Private]
+  ##  @libraryclass  Provides library functions from the openssl project.
+  #
+  OpensslLib|Private/Library/OpensslLib.h
+
+  ##  @libraryclass  Provides compiler intrinsic functions required to link openssl project.
+  #
+  InstrinsicLib|Private/Library/IntrinsicLib.h
+
 [Protocols]
   ## EDK II Crypto DXE protocol
   # 2C2275C9-3A7B-426F-BE54-2D22BD9D1092
diff --git a/CryptoPkg/Library/OpensslLib/EcSm2Null.c b/CryptoPkg/Library/OpensslLib/EcSm2Null.c
new file mode 100644
index 000000000000..8c52626ab29d
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/EcSm2Null.c
@@ -0,0 +1,291 @@
+/** @file
+  Null implementation of EC and SM2 functions called by BaseCryptLib.
+
+  Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Base.h>
+#include <Library/DebugLib.h>
+
+#undef OPENSSL_NO_EC
+
+#include <openssl/objects.h>
+#include <openssl/bn.h>
+#include <openssl/ec.h>
+
+void
+EC_GROUP_free (
+  EC_GROUP  *group
+  )
+{
+  ASSERT (FALSE);
+}
+
+int
+EC_GROUP_get_order (
+  const EC_GROUP  *group,
+  BIGNUM          *order,
+  BN_CTX          *ctx
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+int
+EC_GROUP_get_curve_name (
+  const EC_GROUP  *group
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+int
+EC_GROUP_get_curve (
+  const EC_GROUP  *group,
+  BIGNUM          *p,
+  BIGNUM          *a,
+  BIGNUM          *b,
+  BN_CTX          *ctx
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+int
+EC_GROUP_get_degree (
+  const EC_GROUP  *group
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+EC_GROUP *
+EC_GROUP_new_by_curve_name (
+  int  nid
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
+
+EC_POINT *
+EC_POINT_new (
+  const EC_GROUP  *group
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
+
+void
+EC_POINT_free (
+  EC_POINT  *point
+  )
+{
+  ASSERT (FALSE);
+}
+
+void
+EC_POINT_clear_free (
+  EC_POINT  *point
+  )
+{
+  ASSERT (FALSE);
+}
+
+int
+EC_POINT_set_affine_coordinates (
+  const EC_GROUP  *group,
+  EC_POINT        *p,
+  const BIGNUM    *x,
+  const BIGNUM    *y,
+  BN_CTX          *ctx
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+int
+EC_POINT_get_affine_coordinates (
+  const EC_GROUP  *group,
+  const EC_POINT  *p,
+  BIGNUM          *x,
+  BIGNUM          *y,
+  BN_CTX          *ctx
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+int
+EC_POINT_set_compressed_coordinates (
+  const EC_GROUP  *group,
+  EC_POINT        *p,
+  const BIGNUM    *x,
+  int             y_bit,
+  BN_CTX          *ctx
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+int
+EC_POINT_add (
+  const EC_GROUP  *group,
+  EC_POINT        *r,
+  const EC_POINT  *a,
+  const EC_POINT  *b,
+  BN_CTX          *ctx
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+int
+EC_POINT_invert (
+  const EC_GROUP  *group,
+  EC_POINT        *a,
+  BN_CTX          *ctx
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+int
+EC_POINT_is_at_infinity (
+  const EC_GROUP  *group,
+  const EC_POINT  *p
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+int
+EC_POINT_is_on_curve (
+  const EC_GROUP  *group,
+  const EC_POINT  *point,
+  BN_CTX          *ctx
+  )
+{
+  ASSERT (FALSE);
+  return -1;
+}
+
+int
+EC_POINT_cmp (
+  const EC_GROUP  *group,
+  const EC_POINT  *a,
+  const EC_POINT  *b,
+  BN_CTX          *ctx
+  )
+{
+  ASSERT (FALSE);
+  return -1;
+}
+
+int
+EC_POINT_mul (
+  const EC_GROUP  *group,
+  EC_POINT        *r,
+  const BIGNUM    *n,
+  const EC_POINT  *q,
+  const BIGNUM    *m,
+  BN_CTX          *ctx
+  )
+{
+  ASSERT (FALSE);
+  return -0;
+}
+
+EC_KEY *
+EC_KEY_new_by_curve_name (
+  int  nid
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
+
+void
+EC_KEY_free (
+  EC_KEY  *key
+  )
+{
+  ASSERT (FALSE);
+}
+
+const EC_GROUP *
+EC_KEY_get0_group (
+  const EC_KEY  *key
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
+
+const EC_POINT *
+EC_KEY_get0_public_key (
+  const EC_KEY  *key
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
+
+int
+EC_KEY_set_public_key (
+  EC_KEY          *key,
+  const EC_POINT  *pub
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+int
+EC_KEY_generate_key (
+  EC_KEY  *key
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+int
+EC_KEY_check_key (
+  const EC_KEY  *key
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+int
+ECDH_compute_key (
+  void            *out,
+  size_t          outlen,
+  const EC_POINT  *pub_key,
+  const EC_KEY    *ecdh,
+  void *(*KDF)(
+  const void *in,
+  size_t inlen,
+  void *out,
+  size_t *outlen
+  )
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
diff --git a/CryptoPkg/Library/OpensslLib/OpensslLib.inf b/CryptoPkg/Library/OpensslLib/OpensslLib.inf
index 7d4b729bf7c7..9dc1dd23cf5a 100644
--- a/CryptoPkg/Library/OpensslLib/OpensslLib.inf
+++ b/CryptoPkg/Library/OpensslLib/OpensslLib.inf
@@ -627,6 +627,8 @@ [Sources]
   buildinf.h
   ossl_store.c
   rand_pool.c
+#  SslNull.c
+  EcSm2Null.c
 
 [Packages]
   MdePkg/MdePkg.dec
diff --git a/CryptoPkg/Library/OpensslLib/OpensslLibAccel.inf b/CryptoPkg/Library/OpensslLib/OpensslLibAccel.inf
index b552b011e2bf..256400bcc1b0 100644
--- a/CryptoPkg/Library/OpensslLib/OpensslLibAccel.inf
+++ b/CryptoPkg/Library/OpensslLib/OpensslLibAccel.inf
@@ -629,6 +629,8 @@ [Sources]
   buildinf.h
   ossl_store.c
   rand_pool.c
+#  SslNull.c
+  EcSm2Null.c
 
 [Sources.IA32]
   IA32/crypto/aes/aesni-x86.nasm    | MSFT
diff --git a/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf b/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf
index 5492865ddb2d..543487d53642 100644
--- a/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf
+++ b/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf
@@ -628,6 +628,8 @@ [Sources]
   buildinf.h
   ossl_store.c
   rand_pool.c
+  SslNull.c
+  EcSm2Null.c
 
 [Packages]
   MdePkg/MdePkg.dec
diff --git a/CryptoPkg/Library/OpensslLib/OpensslLibFull.inf b/CryptoPkg/Library/OpensslLib/OpensslLibFull.inf
index 1b5d9fa42405..c563ab13e4dc 100644
--- a/CryptoPkg/Library/OpensslLib/OpensslLibFull.inf
+++ b/CryptoPkg/Library/OpensslLib/OpensslLibFull.inf
@@ -633,6 +633,8 @@ [Sources]
   buildinf.h
   ossl_store.c
   rand_pool.c
+#  SslNull.c
+#  EcSm2Null.c
 
 [Packages]
   MdePkg/MdePkg.dec
diff --git a/CryptoPkg/Library/OpensslLib/OpensslLibFullAccel.inf b/CryptoPkg/Library/OpensslLib/OpensslLibFullAccel.inf
index 3c7b33f1e512..6ba05f23187c 100644
--- a/CryptoPkg/Library/OpensslLib/OpensslLibFullAccel.inf
+++ b/CryptoPkg/Library/OpensslLib/OpensslLibFullAccel.inf
@@ -634,6 +634,8 @@ [Sources]
   buildinf.h
   ossl_store.c
   rand_pool.c
+#  SslNull.c
+#  EcSm2Null.c
 
 [Sources.IA32]
   IA32/crypto/aes/aesni-x86.nasm    | MSFT
diff --git a/CryptoPkg/Library/OpensslLib/SslNull.c b/CryptoPkg/Library/OpensslLib/SslNull.c
new file mode 100644
index 000000000000..49f1405bc0f1
--- /dev/null
+++ b/CryptoPkg/Library/OpensslLib/SslNull.c
@@ -0,0 +1,405 @@
+/** @file
+  Null implementation of SSL functions called by BaseCryptLib.
+
+  Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Base.h>
+#include <Library/DebugLib.h>
+#include <openssl/ssl.h>
+#include <openssl/bio.h>
+#include <openssl/err.h>
+
+int
+OPENSSL_init_ssl (
+  uint64_t                     opts,
+  const OPENSSL_INIT_SETTINGS  *settings
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur uint32_t
+SSL_CIPHER_get_id (
+  const SSL_CIPHER  *c
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur int
+SSL_COMP_add_compression_method (
+  int          id,
+  COMP_METHOD  *cm
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+long
+SSL_CTX_ctrl (
+  SSL_CTX  *ctx,
+  int      cmd,
+  long     larg,
+  void     *parg
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+void
+SSL_CTX_free (
+  SSL_CTX  *x
+  )
+{
+  ASSERT (FALSE);
+  return;
+}
+
+__owur X509_STORE *
+SSL_CTX_get_cert_store (
+  const SSL_CTX  *x
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
+
+__owur SSL_CTX *
+SSL_CTX_new (
+  const SSL_METHOD  *meth
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
+
+unsigned long
+SSL_CTX_set_options (
+  SSL_CTX        *ctx,
+  unsigned long  op
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+const unsigned char *
+SSL_SESSION_get_id (
+  const SSL_SESSION  *s,
+  unsigned int       *len
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur size_t
+SSL_SESSION_get_master_key (
+  const SSL_SESSION  *sess,
+  unsigned char      *out,
+  size_t             outlen
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur int
+SSL_SESSION_set1_id (
+  SSL_SESSION          *s,
+  const unsigned char  *sid,
+  unsigned int         sid_len
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+long
+SSL_ctrl (
+  SSL   *ssl,
+  int   cmd,
+  long  larg,
+  void  *parg
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur int
+SSL_do_handshake (
+  SSL  *s
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+void
+SSL_free (
+  SSL  *ssl
+  )
+{
+  ASSERT (FALSE);
+  return;
+}
+
+__owur X509 *
+SSL_get_certificate (
+  const SSL  *ssl
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
+
+__owur size_t
+SSL_get_client_random (
+  const SSL      *ssl,
+  unsigned char  *out,
+  size_t         outlen
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur const SSL_CIPHER *
+SSL_get_current_cipher (
+  const SSL  *s
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
+
+__owur int
+SSL_get_error (
+  const SSL  *s,
+  int        ret_code
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur size_t
+SSL_get_server_random (
+  const SSL      *ssl,
+  unsigned char  *out,
+  size_t         outlen
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur SSL_SESSION *
+SSL_get_session (
+  const SSL  *ssl
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
+
+__owur SSL_CTX *
+SSL_get_SSL_CTX (
+  const SSL  *ssl
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
+
+__owur OSSL_HANDSHAKE_STATE
+SSL_get_state (
+  const SSL  *ssl
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur int
+SSL_get_verify_mode (
+  const SSL  *s
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur X509_VERIFY_PARAM *
+SSL_get0_param (
+  SSL  *ssl
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
+
+int
+SSL_is_init_finished (
+  const SSL  *s
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur int
+SSL_is_server (
+  const SSL  *s
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+SSL *
+SSL_new (
+  SSL_CTX  *ctx
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
+
+__owur int
+SSL_read (
+  SSL   *ssl,
+  void  *buf,
+  int   num
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+void
+SSL_set_bio (
+  SSL  *s,
+  BIO  *rbio,
+  BIO  *wbio
+  )
+{
+  ASSERT (FALSE);
+  return;
+}
+
+__owur int
+SSL_set_cipher_list (
+  SSL         *s,
+  const char  *str
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+void
+SSL_set_connect_state (
+  SSL  *s
+  )
+{
+  ASSERT (FALSE);
+  return;
+}
+
+void
+SSL_set_hostflags (
+  SSL           *s,
+  unsigned int  flags
+  )
+{
+  ASSERT (FALSE);
+  return;
+}
+
+void
+SSL_set_info_callback (
+  SSL *ssl,
+  void ( *cb )(const SSL *ssl, int type, int val)
+  )
+{
+  ASSERT (FALSE);
+  return;
+}
+
+void
+SSL_set_security_level (
+  SSL  *s,
+  int  level
+  )
+{
+  ASSERT (FALSE);
+  return;
+}
+
+void
+SSL_set_verify (
+  SSL            *s,
+  int            mode,
+  SSL_verify_cb  callback
+  )
+{
+  ASSERT (FALSE);
+  return;
+}
+
+int
+SSL_shutdown (
+  SSL  *s
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur int
+SSL_use_certificate (
+  SSL   *ssl,
+  X509  *x
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur int
+SSL_version (
+  const SSL  *ssl
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur int
+SSL_write (
+  SSL         *ssl,
+  const void  *buf,
+  int         num
+  )
+{
+  ASSERT (FALSE);
+  return 0;
+}
+
+__owur const SSL_METHOD *
+TLS_client_method (
+  void
+  )
+{
+  ASSERT (FALSE);
+  return NULL;
+}
diff --git a/CryptoPkg/Private/Library/IntrinsicLib.h b/CryptoPkg/Private/Library/IntrinsicLib.h
new file mode 100644
index 000000000000..69172a041949
--- /dev/null
+++ b/CryptoPkg/Private/Library/IntrinsicLib.h
@@ -0,0 +1,16 @@
+/** @file
+  InstrinsicLib class with intrinsic APIs generated by compilers.
+
+  Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef INTRINSTIC_LIB_H_
+#define INTRINSTIC_LIB_H_
+
+//
+// Compiler dependent intrinsic APIs.
+//
+
+#endif
diff --git a/CryptoPkg/Private/Library/OpensslLib.h b/CryptoPkg/Private/Library/OpensslLib.h
new file mode 100644
index 000000000000..005eb848724e
--- /dev/null
+++ b/CryptoPkg/Private/Library/OpensslLib.h
@@ -0,0 +1,14 @@
+/** @file
+  OpensslLib class with APIs from the openssl project
+
+  Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef OPENSSL_LIB_H_
+#define OPENSSL_LIB_H_
+
+#include <openssl/opensslv.h>
+
+#endif
-- 
2.37.1.windows.1


  parent reply	other threads:[~2022-10-11 15:05 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-11 15:03 [Patch 00/12] CryptoPkg: Remove EC PCD and merge perf opt OpensslLibs Michael D Kinney
2022-10-11 15:03 ` [Patch 01/12] CryptoPkg: Document and disable deprecated crypto services Michael D Kinney
2022-10-11 15:03 ` [Patch 02/12] CryptoPkg/Library/BaseCryptLib: Add missing UNI file and fix format Michael D Kinney
2022-10-11 15:03 ` [Patch 03/12] CryptoPkg/Library/BaseCryptLib: Update internal functions/variables Michael D Kinney
2022-10-11 15:03 ` [Patch 04/12] CryptoPkg/Test/UnitTest/Library/BaseCryptLib: Unit test fixes Michael D Kinney
2022-10-11 15:03 ` [Patch 05/12] CryptoPkg/Library: Cleanup BaseCryptLib and TlsLib Michael D Kinney
2022-10-11 15:03 ` [Patch 06/12] CryptoPkg/Library/OpensslLib: Combine all performance optimized INFs Michael D Kinney
2022-10-11 23:20   ` [edk2-devel] " Christopher Zurcher
2022-10-11 23:58     ` Michael D Kinney
2022-10-11 15:03 ` Michael D Kinney [this message]
2022-10-11 15:03 ` [Patch 08/12] CryptoPkg/Library/OpensslLib: Remove PrintLib from INF files Michael D Kinney
2022-10-11 15:03 ` [Patch 09/12] CryptoPkg: Remove PcdOpensslEcEnabled from CryptoPkg.dec Michael D Kinney
2022-10-11 15:03 ` [Patch 10/12] CryptoPkg: Update DSC to improve CI test coverage Michael D Kinney
2022-10-11 15:03 ` [Patch 11/12] CryptoPkg: Fixed host-based unit tests Michael D Kinney
2022-10-11 15:03 ` [Patch 12/12] CryptoPkg: Add Readme.md Michael D Kinney
2022-10-12  1:08 ` [Patch 00/12] CryptoPkg: Remove EC PCD and merge perf opt OpensslLibs Yao, Jiewen
2022-10-12  1:24   ` Michael D Kinney
2022-10-12  1:36     ` Yao, Jiewen
2022-10-12  1:55       ` Michael D Kinney
2022-10-12  2:07         ` Yao, Jiewen
2022-10-12  2:23           ` Michael D Kinney
2022-10-12  8:33             ` Yao, Jiewen
     [not found]         ` <171D30322FF3DC63.20882@groups.io>
2022-10-12  2:12           ` [edk2-devel] " Yao, Jiewen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221011150358.1332-8-michael.d.kinney@intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox