Correct d2i/i2d typos.
[oweals/openssl.git] / crypto / asn1 / ameth_lib.c
index 92e8d59ca61eee968b00abbe8599dfe0afd92c3b..cfaef87555892cb11fd6d569227b90428c9d8d52 100644 (file)
@@ -203,20 +203,17 @@ const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe,
                {
 #ifndef OPENSSL_NO_ENGINE
                ENGINE *e;
-               for (e = ENGINE_get_first(); e; e = ENGINE_get_next(e))
+               ameth = ENGINE_pkey_asn1_find_str(&e, str, len);
+               if (ameth)
                        {
-                       ameth = ENGINE_get_pkey_asn1_meth_str(e, str, len);
-                       if (ameth)
-                               {
-                               /* Convert structural into
-                                * functional reference
-                                */
-                               if (!ENGINE_init(e))
-                                       ameth = NULL;
-                               ENGINE_free(e);
-                               *pe = e;
-                               return ameth;
-                               }
+                       /* Convert structural into
+                        * functional reference
+                        */
+                       if (!ENGINE_init(e))
+                               ameth = NULL;
+                       ENGINE_free(e);
+                       *pe = e;
+                       return ameth;
                        }
 #endif
                *pe = NULL;
@@ -276,6 +273,11 @@ int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *ppkey_base_id, int *ppkey_flags,
        return 1;
        }
 
+const EVP_PKEY_ASN1_METHOD* EVP_PKEY_get0_asn1(EVP_PKEY *pkey)
+       {
+       return pkey->ameth;
+       }
+
 EVP_PKEY_ASN1_METHOD* EVP_PKEY_asn1_new(int id, int flags,
                                        const char *pem_str, const char *info)
        {
@@ -301,7 +303,7 @@ EVP_PKEY_ASN1_METHOD* EVP_PKEY_asn1_new(int id, int flags,
                if (!ameth->pem_str)
                        goto err;
                }
-       
+
        ameth->pub_decode = 0;
        ameth->pub_encode = 0;
        ameth->pub_cmp = 0;
@@ -336,6 +338,37 @@ EVP_PKEY_ASN1_METHOD* EVP_PKEY_asn1_new(int id, int flags,
 
        }
 
+void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, 
+                       const EVP_PKEY_ASN1_METHOD *src)
+       {
+
+       dst->pub_decode = src->pub_decode;
+       dst->pub_encode = src->pub_encode;
+       dst->pub_cmp = src->pub_cmp;
+       dst->pub_print = src->pub_print;
+
+       dst->priv_decode = src->priv_decode;
+       dst->priv_encode = src->priv_encode;
+       dst->priv_print = src->priv_print;
+
+       dst->old_priv_encode = src->old_priv_encode;
+       dst->old_priv_decode = src->old_priv_decode;
+
+       dst->pkey_size = src->pkey_size;
+       dst->pkey_bits = src->pkey_bits;
+
+       dst->param_decode = src->param_decode;
+       dst->param_encode = src->param_encode;
+       dst->param_missing = src->param_missing;
+       dst->param_copy = src->param_copy;
+       dst->param_cmp = src->param_cmp;
+       dst->param_print = src->param_print;
+
+       dst->pkey_free = src->pkey_free;
+       dst->pkey_ctrl = src->pkey_ctrl;
+
+       }
+
 void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth)
        {
        if (ameth && (ameth->pkey_flags & ASN1_PKEY_DYNAMIC))