Replace the macros in asn1.h with function equivalents. Also make UTF8Strings
[openssl.git] / crypto / evp / evp_pkey.c
index 0046d8e84bad2e471cd6b7ff1d3b1e3949382ec0..396862767f3ddb3dd305990ba53a32044772858c 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 #include "cryptlib.h"
-#include "x509.h"
-#include "rand.h"
+#include <openssl/x509.h>
+#include <openssl/rand.h>
 
 /* Extract a private key from a PKCS8 structure */
 
-EVP_PKEY *EVP_PKCS82PKEY (p8)
-PKCS8_PRIV_KEY_INFO *p8;
+EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8)
 {
        EVP_PKEY *pkey;
+#ifndef NO_RSA
        RSA *rsa;
+#endif
+#ifndef NO_DSA
        DSA *dsa;
        ASN1_INTEGER *dsapriv;
-       X509_ALGOR *a;
        STACK *ndsa;
        BN_CTX *ctx;
+       int plen;
+#endif
+       X509_ALGOR *a;
        unsigned char *p;
-       int plen, pkeylen;
+       int pkeylen;
        char obj_tmp[80];
 
        switch (p8->broken) {
@@ -101,6 +105,7 @@ PKCS8_PRIV_KEY_INFO *p8;
        a = p8->pkeyalg;
        switch (OBJ_obj2nid(a->algorithm))
        {
+#ifndef NO_RSA
                case NID_rsaEncryption:
                if (!(rsa = d2i_RSAPrivateKey (NULL, &p, pkeylen))) {
                        EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR);
@@ -108,7 +113,8 @@ PKCS8_PRIV_KEY_INFO *p8;
                }
                EVP_PKEY_assign_RSA (pkey, rsa);
                break;
-               
+#endif
+#ifndef NO_DSA
                case NID_dsa:
                /* PKCS#8 DSA is weird: you just get a private key integer
                 * and parameters in the AlgorithmIdentifier the pubkey must
@@ -175,7 +181,7 @@ PKCS8_PRIV_KEY_INFO *p8;
                EVP_PKEY_assign_DSA (pkey, dsa);
                BN_CTX_free (ctx);
                break;
-
+#endif
                default:
                EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM);
                if (!a->algorithm) strcpy (obj_tmp, "NULL");
@@ -189,13 +195,14 @@ PKCS8_PRIV_KEY_INFO *p8;
 
 /* Turn a private key into a PKCS8 structure */
 
-PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(pkey)
-EVP_PKEY *pkey;
+PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey)
 {
        PKCS8_PRIV_KEY_INFO *p8;
+#ifndef NO_DSA
        ASN1_INTEGER *dpkey;
        unsigned char *p, *q;
        int len;
+#endif
        if (!(p8 = PKCS8_PRIV_KEY_INFO_new())) {        
                EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
                return NULL;
@@ -207,6 +214,7 @@ EVP_PKEY *pkey;
                return NULL;
        }
        switch (EVP_PKEY_type(pkey->type)) {
+#ifndef NO_RSA
                case EVP_PKEY_RSA:
 
                p8->pkeyalg->algorithm = OBJ_nid2obj(NID_rsaEncryption);
@@ -218,7 +226,8 @@ EVP_PKEY *pkey;
                        return NULL;
                }
                break;
-
+#endif
+#ifndef NO_DSA
                case EVP_PKEY_DSA:
                p8->pkeyalg->algorithm = OBJ_nid2obj(NID_dsa);
 
@@ -245,13 +254,13 @@ EVP_PKEY *pkey;
                if (!ASN1_pack_string((char *)dpkey, i2d_ASN1_INTEGER,
                                         &p8->pkey->value.octet_string)) {
                        EVPerr(EVP_F_EVP_PKEY2PKCS8,ERR_R_MALLOC_FAILURE);
-                       ASN1_INTEGER_free (dpkey);
+                       M_ASN1_INTEGER_free (dpkey);
                        PKCS8_PRIV_KEY_INFO_free (p8);
                        return NULL;
                }
-               ASN1_INTEGER_free (dpkey);
+               M_ASN1_INTEGER_free (dpkey);
                break;
-
+#endif
                default:
                EVPerr(EVP_F_EVP_PKEY2PKCS8, EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM);
                PKCS8_PRIV_KEY_INFO_free (p8);
@@ -263,9 +272,7 @@ EVP_PKEY *pkey;
        return p8;
 }
 
-PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(p8, broken)
-PKCS8_PRIV_KEY_INFO *p8;
-int broken;
+PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken)
 {
        switch (broken) {