195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * All rights reserved. 395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * This package is an SSL implementation written 595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * by Eric Young (eay@cryptsoft.com). 695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * The implementation was written so as to conform with Netscapes SSL. 795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * This library is free for commercial and non-commercial use as long as 995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * the following conditions are aheared to. The following conditions 1095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * apply to all code found in this distribution, be it the RC4, RSA, 1195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * lhash, DES, etc., code; not just the SSL code. The SSL documentation 1295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * included with this distribution is covered by the same copyright terms 1395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * except that the holder is Tim Hudson (tjh@cryptsoft.com). 1495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 1595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Copyright remains Eric Young's, and as such any Copyright notices in 1695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * the code are not to be removed. 1795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * If this package is used in a product, Eric Young should be given attribution 1895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * as the author of the parts of the library used. 1995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * This can be in the form of a textual message at program startup or 2095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * in documentation (online or textual) provided with the package. 2195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 2295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Redistribution and use in source and binary forms, with or without 2395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * modification, are permitted provided that the following conditions 2495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * are met: 2595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 1. Redistributions of source code must retain the copyright 2695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * notice, this list of conditions and the following disclaimer. 2795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 2. Redistributions in binary form must reproduce the above copyright 2895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * notice, this list of conditions and the following disclaimer in the 2995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * documentation and/or other materials provided with the distribution. 3095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 3. All advertising materials mentioning features or use of this software 3195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * must display the following acknowledgement: 3295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * "This product includes cryptographic software written by 3395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * Eric Young (eay@cryptsoft.com)" 3495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * The word 'cryptographic' can be left out if the rouines from the library 3595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * being used are not cryptographic related :-). 3695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 4. If you include any Windows specific code (or a derivative thereof) from 3795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * the apps directory (application code) you must include an acknowledgement: 3895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 3995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 4095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 4195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 4295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 4395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 4495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 4595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 4695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 4795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 4895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 4995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 5095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * SUCH DAMAGE. 5195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * 5295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * The licence and distribution terms for any publically available version or 5395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * derivative of this code cannot be changed. i.e. this code cannot simply be 5495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * copied and put under another distribution licence 5595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley * [including the GNU Public Licence.] */ 5695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 5795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifndef OPENSSL_HEADER_EVP_INTERNAL_H 5895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define OPENSSL_HEADER_EVP_INTERNAL_H 5995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 6095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <openssl/base.h> 6195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 6295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if defined(__cplusplus) 6395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyextern "C" { 6495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 6595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 6695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 6795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley/* These values are flags for EVP_PKEY_ASN1_METHOD.flags. */ 6895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define ASN1_PKEY_ALIAS 0x1 6995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define ASN1_PKEY_DYNAMIC 0x2 7095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define ASN1_PKEY_SIGPARAM_NULL 0x4 7195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 7295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleystruct evp_pkey_asn1_method_st { 7395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int pkey_id; 7495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int pkey_base_id; 7595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley unsigned long pkey_flags; 7695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 7795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley char *pem_str; 7895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley char *info; 7995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 8095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*pub_decode)(EVP_PKEY *pk, X509_PUBKEY *pub); 8195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*pub_encode)(X509_PUBKEY *pub, const EVP_PKEY *pk); 8295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*pub_cmp)(const EVP_PKEY *a, const EVP_PKEY *b); 8395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*pub_print)(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); 8495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 8595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*priv_decode)(EVP_PKEY *pk, PKCS8_PRIV_KEY_INFO *p8inf); 8695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*priv_encode)(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk); 8795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*priv_print)(BIO *out, const EVP_PKEY *pkey, int indent, 8895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ASN1_PCTX *pctx); 8995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 90ecc0ce7e67b7dcfdfc57ffa99d70c9a04996e15bDavid Benjamin /* pkey_opaque returns 1 if the |pk| is opaque. Opaque keys are backed by 91ecc0ce7e67b7dcfdfc57ffa99d70c9a04996e15bDavid Benjamin * custom implementations which do not expose key material and parameters.*/ 92ecc0ce7e67b7dcfdfc57ffa99d70c9a04996e15bDavid Benjamin int (*pkey_opaque)(const EVP_PKEY *pk); 93ecc0ce7e67b7dcfdfc57ffa99d70c9a04996e15bDavid Benjamin 9495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*pkey_size)(const EVP_PKEY *pk); 9595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*pkey_bits)(const EVP_PKEY *pk); 9695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 9795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*param_decode)(EVP_PKEY *pkey, const unsigned char **pder, int derlen); 9895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*param_encode)(const EVP_PKEY *pkey, unsigned char **pder); 9995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*param_missing)(const EVP_PKEY *pk); 10095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*param_copy)(EVP_PKEY *to, const EVP_PKEY *from); 10195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*param_cmp)(const EVP_PKEY *a, const EVP_PKEY *b); 10295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*param_print)(BIO *out, const EVP_PKEY *pkey, int indent, 10395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ASN1_PCTX *pctx); 10495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*sig_print)(BIO *out, const X509_ALGOR *sigalg, const ASN1_STRING *sig, 10595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int indent, ASN1_PCTX *pctx); 10695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 10795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 10895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley void (*pkey_free)(EVP_PKEY *pkey); 10995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*pkey_ctrl)(EVP_PKEY *pkey, int op, long arg1, void *arg2); 11095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 11195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Legacy functions for old PEM */ 11295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 11395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*old_priv_decode)(EVP_PKEY *pkey, const unsigned char **pder, 11495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int derlen); 11595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*old_priv_encode)(const EVP_PKEY *pkey, unsigned char **pder); 11695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Custom ASN1 signature verification */ 11795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*item_verify)(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, 11895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley X509_ALGOR *a, ASN1_BIT_STRING *sig, EVP_PKEY *pkey); 11995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*item_sign)(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, 12095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig); 12195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 12295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} /* EVP_PKEY_ASN1_METHOD */; 12395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 12495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 12595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleytypedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); 12695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 12795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_UNDEFINED 0 12895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_PARAMGEN (1 << 1) 12995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_KEYGEN (1 << 2) 13095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_SIGN (1 << 3) 13195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_VERIFY (1 << 4) 13295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_VERIFYRECOVER (1 << 5) 13395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_SIGNCTX (1 << 6) 13495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_VERIFYCTX (1 << 7) 13595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_ENCRYPT (1 << 8) 13695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_DECRYPT (1 << 9) 13795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_DERIVE (1 << 10) 13895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 13995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_TYPE_SIG \ 14095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER | \ 14195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX) 14295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 14395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_TYPE_CRYPT (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT) 14495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 14595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_TYPE_NOGEN \ 14695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley (EVP_PKEY_OP_SIG | EVP_PKEY_OP_CRYPT | EVP_PKEY_OP_DERIVE) 14795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 14895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_OP_TYPE_GEN (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) 14995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 15095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_MD 1 15195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_GET_MD 2 15295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) 15395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 2) 15495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 3) 15595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 4) 15695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 5) 15795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 6) 15895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 7) 15995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 8) 16095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 9) 16195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 10) 16295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 11) 16395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12) 16495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 16595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleystruct evp_pkey_ctx_st { 16695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Method associated with this operation */ 16795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley const EVP_PKEY_METHOD *pmeth; 16895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Engine that implements this method or NULL if builtin */ 16995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ENGINE *engine; 17095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Key: may be NULL */ 17195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY *pkey; 17295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Peer key for key agreement, may be NULL */ 17395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_PKEY *peerkey; 17495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* operation contains one of the |EVP_PKEY_OP_*| values. */ 17595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int operation; 17695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Algorithm specific data */ 17795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley void *data; 17895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley /* Application specific data */ 17995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley void *app_data; 18095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} /* EVP_PKEY_CTX */; 18195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 18295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleystruct evp_pkey_method_st { 18395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int pkey_id; 18495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int flags; 18595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 18695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*init)(EVP_PKEY_CTX *ctx); 18795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*copy)(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src); 18895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley void (*cleanup)(EVP_PKEY_CTX *ctx); 18995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 19095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*paramgen_init)(EVP_PKEY_CTX *ctx); 19195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*paramgen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey); 19295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 19395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*keygen_init)(EVP_PKEY_CTX *ctx); 19495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*keygen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey); 19595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 19695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*sign_init)(EVP_PKEY_CTX *ctx); 19795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*sign)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, 19895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley const unsigned char *tbs, size_t tbslen); 19995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 20095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*verify_init)(EVP_PKEY_CTX *ctx); 20195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*verify)(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, 20295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley const unsigned char *tbs, size_t tbslen); 20395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 20495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*signctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx); 20595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*signctx)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, 20695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_MD_CTX *mctx); 20795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 20895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*verifyctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx); 20995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*verifyctx)(EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen, 21095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley EVP_MD_CTX *mctx); 21195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 21295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*encrypt_init)(EVP_PKEY_CTX *ctx); 21395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*encrypt)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, 21495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley const unsigned char *in, size_t inlen); 21595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 21695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*decrypt_init)(EVP_PKEY_CTX *ctx); 21795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*decrypt)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, 21895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley const unsigned char *in, size_t inlen); 21995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 22095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*derive_init)(EVP_PKEY_CTX *ctx); 22195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*derive)(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); 22295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 22395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*ctrl)(EVP_PKEY_CTX *ctx, int type, int p1, void *p2); 22495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley int (*ctrl_str)(EVP_PKEY_CTX *ctx, const char *type, const char *value); 22595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} /* EVP_PKEY_METHOD */; 22695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 22795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 22895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if defined(__cplusplus) 22995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} /* extern C */ 23095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 23195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 23295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif /* OPENSSL_HEADER_EVP_INTERNAL_H */ 233