Rename functions for new convention.
[openssl.git] / crypto / evp / evp.h
index ccb7d51474d6bfa51ec61f532c134a073f487c3e..b391adce4a9d79fdf471a844b09c2b9980128c44 100644 (file)
@@ -109,6 +109,10 @@ extern "C" {
 #define EVP_MAX_KEY_LENGTH             24
 #define EVP_MAX_IV_LENGTH              8
 
+#define PKCS5_SALT_LEN                 8
+/* Default PKCS#5 iteration count */
+#define PKCS5_DEFAULT_ITER             2048
+
 #ifndef NO_RSA
 #include <openssl/rsa.h>
 #endif
@@ -145,7 +149,7 @@ extern "C" {
 
 /* Type needs to be a bit field
  * Sub-type needs to be for variations on the method, as in, can it do
- * arbitary encryption.... */
+ * arbitrary encryption.... */
 typedef struct evp_pkey_st
        {
        int type;
@@ -339,7 +343,7 @@ typedef struct evp_cipher_ctx_st
        unsigned char buf[EVP_MAX_IV_LENGTH];   /* saved partial block */
        int num;                                /* used by cfb/ofb mode */
 
-       char *app_data;         /* aplication stuff */
+       char *app_data;         /* application stuff */
        union   {
 #ifndef NO_RC4
                struct
@@ -353,8 +357,8 @@ typedef struct evp_cipher_ctx_st
                struct
                        {
                        des_key_schedule ks;/* key schedule */
-                       C_Block inw;
-                       C_Block outw;
+                       des_cblock inw;
+                       des_cblock outw;
                        } desx_cbc;
                struct
                        {
@@ -395,9 +399,9 @@ typedef struct evp_Encode_Ctx_st
        } EVP_ENCODE_CTX;
 
 /* Password based encryption function */
-typedef int (EVP_PBE_KEYGEN)(const char *pass, int passlen,
-         unsigned char *salt,  int saltlen, int iter, EVP_CIPHER *cipher,
-                EVP_MD *md, unsigned char *key, unsigned char *iv);
+typedef int (EVP_PBE_KEYGEN)(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
+               ASN1_TYPE *param, EVP_CIPHER *cipher,
+                EVP_MD *md, int en_de);
 
 #define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\
                                        (char *)(rsa))
@@ -417,9 +421,10 @@ typedef int (EVP_PBE_KEYGEN)(const char *pass, int passlen,
 #define EVP_MD_size(e)                 ((e)->md_size)
 #define EVP_MD_block_size(e)           ((e)->block_size)
 
+#define EVP_MD_CTX_md(e)               ((e)->digest)
 #define EVP_MD_CTX_size(e)             EVP_MD_size((e)->digest)
 #define EVP_MD_CTX_block_size(e)       EVP_MD_block_size((e)->digest)
-#define EVP_MD_CTX_type(e)             ((e)->digest)
+#define EVP_MD_CTX_type(e)             EVP_MD_type((e)->digest)
 
 #define EVP_CIPHER_nid(e)              ((e)->nid)
 #define EVP_CIPHER_block_size(e)       ((e)->block_size)
@@ -433,6 +438,7 @@ typedef int (EVP_PBE_KEYGEN)(const char *pass, int passlen,
 #define EVP_CIPHER_CTX_iv_length(e)    ((e)->cipher->iv_len)
 #define EVP_CIPHER_CTX_get_app_data(e) ((e)->app_data)
 #define EVP_CIPHER_CTX_set_app_data(e,d) ((e)->app_data=(char *)(d))
+#define EVP_CIPHER_CTX_type(c)         EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c))
 
 #define EVP_ENCODE_LENGTH(l)   (((l+2)/3*4)+(l/48+1)*2+80)
 #define EVP_DECODE_LENGTH(l)   ((l+3)/4*3+80)
@@ -468,7 +474,7 @@ void BIO_set_md(BIO *,const EVP_MD *md);
 
 int     EVP_MD_CTX_copy(EVP_MD_CTX *out,EVP_MD_CTX *in);  
 void   EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
-void   EVP_DigestUpdate(EVP_MD_CTX *ctx,const unsigned char *d,
+void   EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d,
                         unsigned int cnt);
 void   EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
 
@@ -516,15 +522,14 @@ void      EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
 void   EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,
                int *outl,unsigned char *in,int inl);
 void   EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl);
-int    EVP_EncodeBlock(unsigned char *t, unsigned char *f, int n);
+int    EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
 
 void   EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
 int    EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,
                unsigned char *in, int inl);
 int    EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned
                char *out, int *outl);
-int    EVP_DecodeBlock(unsigned char *t, unsigned
-               char *f, int n);
+int    EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
 
 void   ERR_load_EVP_strings(void );
 
@@ -589,9 +594,12 @@ EVP_CIPHER *EVP_rc5_32_12_16_ecb(void);
 EVP_CIPHER *EVP_rc5_32_12_16_cfb(void);
 EVP_CIPHER *EVP_rc5_32_12_16_ofb(void);
 
-void SSLeay_add_all_algorithms(void);
-void SSLeay_add_all_ciphers(void);
-void SSLeay_add_all_digests(void);
+void OpenSSL_add_all_algorithms(void);
+void OpenSSL_add_all_ciphers(void);
+void OpenSSL_add_all_digests(void);
+#define SSLeay_add_all_algorithms() OpenSSL_add_all_algorithms()
+#define SSLeay_add_all_ciphers() OpenSSL_add_all_ciphers()
+#define SSLeay_add_all_digests() OpenSSL_add_all_digests()
 
 int EVP_add_cipher(EVP_CIPHER *cipher);
 int EVP_add_digest(EVP_MD *digest);
@@ -608,6 +616,18 @@ int                EVP_PKEY_type(int type);
 int            EVP_PKEY_bits(EVP_PKEY *pkey);
 int            EVP_PKEY_size(EVP_PKEY *pkey);
 int            EVP_PKEY_assign(EVP_PKEY *pkey,int type,char *key);
+#ifndef NO_RSA
+int            EVP_PKEY_set1_RSA(EVP_PKEY *pkey,RSA *key);
+RSA *          EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
+#endif
+#ifndef NO_DSA
+int            EVP_PKEY_set1_DSA(EVP_PKEY *pkey,DSA *key);
+DSA *          EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
+#endif
+#ifndef NO_DH
+int            EVP_PKEY_set1_DH(EVP_PKEY *pkey,DH *key);
+DH *           EVP_PKEY_get1_DH(EVP_PKEY *pkey);
+#endif
 EVP_PKEY *     EVP_PKEY_new(void);
 void           EVP_PKEY_free(EVP_PKEY *pkey);
 EVP_PKEY *     d2i_PublicKey(int type,EVP_PKEY **a, unsigned char **pp,
@@ -616,6 +636,8 @@ int         i2d_PublicKey(EVP_PKEY *a, unsigned char **pp);
 
 EVP_PKEY *     d2i_PrivateKey(int type,EVP_PKEY **a, unsigned char **pp,
                        long length);
+EVP_PKEY *     d2i_AutoPrivateKey(EVP_PKEY **a, unsigned char **pp,
+                       long length);
 int            i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp);
 
 int EVP_PKEY_copy_parameters(EVP_PKEY *to,EVP_PKEY *from);
@@ -623,6 +645,8 @@ int EVP_PKEY_missing_parameters(EVP_PKEY *pkey);
 int EVP_PKEY_save_parameters(EVP_PKEY *pkey,int mode);
 int EVP_PKEY_cmp_parameters(EVP_PKEY *a,EVP_PKEY *b);
 
+int EVP_CIPHER_type(const EVP_CIPHER *ctx);
+
 /* calls methods */
 int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
 int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
@@ -631,6 +655,25 @@ int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
 int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c,ASN1_TYPE *type);
 int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c,ASN1_TYPE *type);
 
+/* PKCS5 password based encryption */
+int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
+                        ASN1_TYPE *param, EVP_CIPHER *cipher, EVP_MD *md,
+                        int en_de);
+int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
+                          unsigned char *salt, int saltlen, int iter,
+                          int keylen, unsigned char *out);
+int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
+                        ASN1_TYPE *param, EVP_CIPHER *cipher, EVP_MD *md,
+                        int en_de);
+
+void PKCS5_PBE_add(void);
+
+int EVP_PBE_CipherInit (ASN1_OBJECT *pbe_obj, const char *pass, int passlen,
+            ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de);
+int EVP_PBE_alg_add(int nid, EVP_CIPHER *cipher, EVP_MD *md,
+                   EVP_PBE_KEYGEN *keygen);
+void EVP_PBE_cleanup(void);
+
 /* BEGIN ERROR CODES */
 /* The following lines are auto generated by the script mkerr.pl. Any changes
  * made after this point may be overwritten when the script is next run.
@@ -643,7 +686,6 @@ int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c,ASN1_TYPE *type);
 #define EVP_F_EVP_DECRYPTFINAL                          101
 #define EVP_F_EVP_MD_CTX_COPY                           110
 #define EVP_F_EVP_OPENINIT                              102
-#define EVP_F_EVP_PBE_ALGOR_CIPHERINIT                  114
 #define EVP_F_EVP_PBE_ALG_ADD                           115
 #define EVP_F_EVP_PBE_CIPHERINIT                        116
 #define EVP_F_EVP_PKCS82PKEY                            111
@@ -653,22 +695,31 @@ int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c,ASN1_TYPE *type);
 #define EVP_F_EVP_PKEY_DECRYPT                          104
 #define EVP_F_EVP_PKEY_ENCRYPT                          105
 #define EVP_F_EVP_PKEY_NEW                              106
+#define EVP_F_EVP_PKEY_GET1_DH                          119
+#define EVP_F_EVP_PKEY_GET1_DSA                                 120
+#define EVP_F_EVP_PKEY_GET1_RSA                                 121
 #define EVP_F_EVP_SIGNFINAL                             107
 #define EVP_F_EVP_VERIFYFINAL                           108
+#define EVP_F_PKCS5_PBE_KEYIVGEN                        117
+#define EVP_F_PKCS5_V2_PBE_KEYIVGEN                     118
 #define EVP_F_RC2_MAGIC_TO_METH                                 109
 
 /* Reason codes. */
 #define EVP_R_BAD_DECRYPT                               100
 #define EVP_R_BN_DECODE_ERROR                           112
 #define EVP_R_BN_PUBKEY_ERROR                           113
+#define EVP_R_CIPHER_PARAMETER_ERROR                    122
 #define EVP_R_DECODE_ERROR                              114
 #define EVP_R_DIFFERENT_KEY_TYPES                       101
 #define EVP_R_ENCODE_ERROR                              115
 #define EVP_R_EVP_PBE_CIPHERINIT_ERROR                  119
+#define EVP_R_EXPECTING_AN_RSA_KEY                      127
+#define EVP_R_EXPECTING_A_DH_KEY                        128
+#define EVP_R_EXPECTING_A_DSA_KEY                       129
 #define EVP_R_INPUT_NOT_INITIALIZED                     111
 #define EVP_R_IV_TOO_LARGE                              102
 #define EVP_R_KEYGEN_FAILURE                            120
-#define EVP_R_MISSING_PARMATERS                                 103
+#define EVP_R_MISSING_PARAMETERS                        103
 #define EVP_R_NO_DSA_PARAMETERS                                 116
 #define EVP_R_NO_SIGN_FUNCTION_CONFIGURED               104
 #define EVP_R_NO_VERIFY_FUNCTION_CONFIGURED             105
@@ -676,8 +727,12 @@ int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c,ASN1_TYPE *type);
 #define EVP_R_PUBLIC_KEY_NOT_RSA                        106
 #define EVP_R_UNKNOWN_PBE_ALGORITHM                     121
 #define EVP_R_UNSUPPORTED_CIPHER                        107
+#define EVP_R_UNSUPPORTED_KEYLENGTH                     123
+#define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION       124
 #define EVP_R_UNSUPPORTED_KEY_SIZE                      108
+#define EVP_R_UNSUPPORTED_PRF                           125
 #define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM                 118
+#define EVP_R_UNSUPPORTED_SALT_TYPE                     126
 #define EVP_R_WRONG_FINAL_BLOCK_LENGTH                  109
 #define EVP_R_WRONG_PUBLIC_KEY_TYPE                     110