]> git.proxmox.com Git - mirror_edk2.git/blobdiff - CryptoPkg/Library/BaseCryptLib/Pk/CryptRsaExt.c
CryptoPkg: Clean up source files
[mirror_edk2.git] / CryptoPkg / Library / BaseCryptLib / Pk / CryptRsaExt.c
index b890704a2ee8c77215bd08db4393c70f7c430c46..51f045669620fb5938fc6c49621f58f74ac68cd4 100644 (file)
@@ -7,7 +7,7 @@
   3) RsaCheckKey\r
   4) RsaPkcs1Sign\r
 \r
-Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -20,6 +20,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include "InternalCryptLib.h"\r
 \r
+#include <openssl/bn.h>\r
 #include <openssl/rsa.h>\r
 #include <openssl/err.h>\r
 #include <openssl/objects.h>\r
@@ -73,6 +74,7 @@ RsaGetKey (
   RsaKey  = (RSA *) RsaContext;\r
   Size    = *BnSize;\r
   *BnSize = 0;\r
+  BnKey   = NULL;\r
 \r
   switch (KeyTag) {\r
 \r
@@ -80,86 +82,66 @@ RsaGetKey (
   // RSA Public Modulus (N)\r
   //\r
   case RsaKeyN:\r
-    if (RsaKey->n == NULL) {\r
-      return TRUE;\r
-    }\r
-    BnKey = RsaKey->n;\r
+    RSA_get0_key (RsaKey, (const BIGNUM **)&BnKey, NULL, NULL);\r
     break;\r
 \r
   //\r
   // RSA Public Exponent (e)\r
   //\r
   case RsaKeyE:\r
-    if (RsaKey->e == NULL) {\r
-      return TRUE;\r
-    }\r
-    BnKey = RsaKey->e;\r
+    RSA_get0_key (RsaKey, NULL, (const BIGNUM **)&BnKey, NULL);\r
     break;\r
 \r
   //\r
   // RSA Private Exponent (d)\r
   //\r
   case RsaKeyD:\r
-    if (RsaKey->d == NULL) {\r
-      return TRUE;\r
-    }\r
-    BnKey = RsaKey->d;\r
+    RSA_get0_key (RsaKey, NULL, NULL, (const BIGNUM **)&BnKey);\r
     break;\r
 \r
   //\r
   // RSA Secret Prime Factor of Modulus (p)\r
   //\r
   case RsaKeyP:\r
-    if (RsaKey->p == NULL) {\r
-      return TRUE;\r
-    }\r
-    BnKey = RsaKey->p;\r
+    RSA_get0_factors (RsaKey, (const BIGNUM **)&BnKey, NULL);\r
     break;\r
 \r
   //\r
   // RSA Secret Prime Factor of Modules (q)\r
   //\r
   case RsaKeyQ:\r
-    if (RsaKey->q == NULL) {\r
-      return TRUE;\r
-    }\r
-    BnKey = RsaKey->q;\r
+    RSA_get0_factors (RsaKey, NULL, (const BIGNUM **)&BnKey);\r
     break;\r
 \r
   //\r
   // p's CRT Exponent (== d mod (p - 1))\r
   //\r
   case RsaKeyDp:\r
-    if (RsaKey->dmp1 == NULL) {\r
-      return TRUE;\r
-    }\r
-    BnKey = RsaKey->dmp1;\r
+    RSA_get0_crt_params (RsaKey, (const BIGNUM **)&BnKey, NULL, NULL);\r
     break;\r
 \r
   //\r
   // q's CRT Exponent (== d mod (q - 1))\r
   //\r
   case RsaKeyDq:\r
-    if (RsaKey->dmq1 == NULL) {\r
-      return TRUE;\r
-    }\r
-    BnKey = RsaKey->dmq1;\r
+    RSA_get0_crt_params (RsaKey, NULL, (const BIGNUM **)&BnKey, NULL);\r
     break;\r
 \r
   //\r
   // The CRT Coefficient (== 1/q mod p)\r
   //\r
   case RsaKeyQInv:\r
-    if (RsaKey->iqmp == NULL) {\r
-      return TRUE;\r
-    }\r
-    BnKey = RsaKey->iqmp;\r
+    RSA_get0_crt_params (RsaKey, NULL, NULL, (const BIGNUM **)&BnKey);\r
     break;\r
 \r
   default:\r
     return FALSE;\r
   }\r
 \r
+  if (BnKey == NULL) {\r
+    return FALSE;\r
+  }\r
+\r
   *BnSize = Size;\r
   Size    = BN_num_bytes (BnKey);\r
 \r
@@ -169,10 +151,11 @@ RsaGetKey (
   }\r
 \r
   if (BigNumber == NULL) {\r
-    return FALSE;\r
+    *BnSize = Size;\r
+    return TRUE;\r
   }\r
   *BnSize = BN_bn2bin (BnKey, BigNumber) ;\r
-  \r
+\r
   return TRUE;\r
 }\r
 \r
@@ -191,7 +174,7 @@ RsaGetKey (
   @param[in, out]  RsaContext           Pointer to RSA context being set.\r
   @param[in]       ModulusLength        Length of RSA modulus N in bits.\r
   @param[in]       PublicExponent       Pointer to RSA public exponent.\r
-  @param[in]       PublicExponentSize   Size of RSA public exponent buffer in bytes. \r
+  @param[in]       PublicExponentSize   Size of RSA public exponent buffer in bytes.\r
 \r
   @retval  TRUE   RSA key component was generated successfully.\r
   @retval  FALSE  Invalid RSA key component tag.\r
@@ -215,14 +198,14 @@ RsaGenerateKey (
   if (RsaContext == NULL || ModulusLength > INT_MAX || PublicExponentSize > INT_MAX) {\r
     return FALSE;\r
   }\r
-  \r
+\r
   KeyE = BN_new ();\r
   if (KeyE == NULL) {\r
     return FALSE;\r
   }\r
 \r
   RetVal = FALSE;\r
-  \r
+\r
   if (PublicExponent == NULL) {\r
     if (BN_set_word (KeyE, 0x10001) == 0) {\r
       goto _Exit;\r
@@ -243,11 +226,11 @@ _Exit:
 }\r
 \r
 /**\r
-  Validates key components of RSA context. \r
+  Validates key components of RSA context.\r
   NOTE: This function performs integrity checks on all the RSA key material, so\r
         the RSA key structure must contain all the private key data.\r
 \r
-  This function validates key compoents of RSA context in following aspects:\r
+  This function validates key components of RSA context in following aspects:\r
   - Whether p is a prime\r
   - Whether q is a prime\r
   - Whether n = p * q\r
@@ -275,7 +258,7 @@ RsaCheckKey (
   if (RsaContext == NULL) {\r
     return FALSE;\r
   }\r
-  \r
+\r
   if  (RSA_check_key ((RSA *) RsaContext) != 1) {\r
     Reason = ERR_GET_REASON (ERR_peek_last_error ());\r
     if (Reason == RSA_R_P_NOT_PRIME ||\r
@@ -336,37 +319,37 @@ RsaPkcs1Sign (
   }\r
 \r
   Rsa = (RSA *) RsaContext;\r
-  Size = BN_num_bytes (Rsa->n);\r
+  Size = RSA_size (Rsa);\r
 \r
   if (*SigSize < Size) {\r
     *SigSize = Size;\r
     return FALSE;\r
   }\r
-  \r
+\r
   if (Signature == NULL) {\r
     return FALSE;\r
   }\r
-  \r
+\r
   //\r
   // Determine the message digest algorithm according to digest size.\r
-  //   Only MD5, SHA-1 or SHA-256 algorithm is supported. \r
+  //   Only MD5, SHA-1 or SHA-256 algorithm is supported.\r
   //\r
   switch (HashSize) {\r
   case MD5_DIGEST_SIZE:\r
     DigestType = NID_md5;\r
     break;\r
-    \r
+\r
   case SHA1_DIGEST_SIZE:\r
     DigestType = NID_sha1;\r
     break;\r
-    \r
+\r
   case SHA256_DIGEST_SIZE:\r
     DigestType = NID_sha256;\r
     break;\r
 \r
   default:\r
     return FALSE;\r
-  }  \r
+  }\r
 \r
   return (BOOLEAN) RSA_sign (\r
                      DigestType,\r