Make EVP_PKEY_ASN1_METHOD opaque. Add application level functions to
[openssl.git] / crypto / asn1 / asn1_locl.h
index 3f24f1bd484d0190e93960b72ad68d20c5c547ba..1328cdb106914f6dbd1d3f053f7dda0e4aa5047c 100644 (file)
@@ -68,3 +68,40 @@ struct asn1_pctx_st
        unsigned long oid_flags;
        unsigned long str_flags;
        } /* ASN1_PCTX */;
+
+/* ASN1 public key method structure */
+
+#define ASN1_PKEY_ALIAS                0x1
+#define ASN1_PKEY_DYNAMIC      0x2
+
+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, 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, const EVP_PKEY *pk);
+       int (*priv_print)(BIO *out, const 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 */;