Transfer parameter handling and key comparison to algorithm methods.
[openssl.git] / crypto / asn1 / asn1.h
index 32653eb..f0756b1 100644 (file)
@@ -291,13 +291,29 @@ struct evp_pkey_asn1_method_st
        int pkey_id;
        int pkey_base_id;
        unsigned long pkey_flags;
+
        int (*pub_decode)(EVP_PKEY *pk, X509_PUBKEY *pub);
-       int (*pub_encode)(X509_PUBKEY *pub, EVP_PKEY *pk);
-       int (*pub_print)(BIO *out, EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx);
+       int (*pub_encode)(X509_PUBKEY *pub, const EVP_PKEY *pk);
+       int (*pub_cmp)(const EVP_PKEY *a, const EVP_PKEY *b);
+       int (*pub_print)(BIO *out, const EVP_PKEY *pkey, int indent,
+                                                       ASN1_PCTX *pctx);
+
        int (*priv_decode)(EVP_PKEY *pk, PKCS8_PRIV_KEY_INFO *p8inf);
-       int (*priv_encode)(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pk);
+       int (*priv_encode)(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk);
        int (*priv_print)(BIO *out, EVP_PKEY *pkey, int indent,
                                                        ASN1_PCTX *pctx);
+
+       int (*pkey_size)(const EVP_PKEY *pk);
+       int (*pkey_bits)(const EVP_PKEY *pk);
+
+       int (*param_decode)(const EVP_PKEY *pk, X509_PUBKEY *pub);
+       int (*param_encode)(X509_PUBKEY *pub, const EVP_PKEY *pk);
+       int (*param_missing)(const EVP_PKEY *pk);
+       int (*param_copy)(EVP_PKEY *to, const EVP_PKEY *from);
+       int (*param_cmp)(const EVP_PKEY *a, const EVP_PKEY *b);
+       int (*param_print)(BIO *out, const EVP_PKEY *pkey, int indent,
+                                                       ASN1_PCTX *pctx);
+
        void (*pkey_free)(EVP_PKEY *pkey);
        void (*pkey_ctrl)(EVP_PKEY *pkey, int op, long arg1, void *arg2);
        } /* EVP_PKEY_ASN1_METHOD */;