Portability patch for HP MPE/iX. Submitted by Mark Bixby <mark_bixby@hp.com>
[oweals/openssl.git] / crypto / evp / evp.h
index 110e02f41bf52ee09b8bd84ac839aa60c5a71189..f5b938d2f848c7af711cd2553adcc048a6ddbcd7 100644 (file)
 # undef OPENSSL_ALGORITHM_DEFINES
 #endif
 
+#ifndef NO_BIO
+#include <openssl/bio.h>
+#endif
 #ifndef NO_MD2
 #include <openssl/md2.h>
 #endif
+#ifndef NO_MD4
+#include <openssl/md4.h>
+#endif
 #ifndef NO_MD5
 #include <openssl/md5.h>
 #endif
@@ -306,6 +312,9 @@ typedef struct env_md_ctx_st
 #ifndef NO_MD5
                MD5_CTX md5;
 #endif
+#ifndef NO_MD4
+               MD4_CTX md4;
+#endif
 #ifndef NO_RIPEMD
                RIPEMD160_CTX ripemd160;
 #endif
@@ -328,27 +337,47 @@ struct evp_cipher_st
        int key_len;            /* Default value for variable length ciphers */
        int iv_len;
        unsigned long flags;    /* Various flags */
-       int (*init)(EVP_CIPHER_CTX *, unsigned char *, unsigned char *, int);   /* init key */
-       int (*do_cipher)(EVP_CIPHER_CTX *, unsigned char *, unsigned char *, unsigned int);/* encrypt/decrypt data */
+       int (*init)(EVP_CIPHER_CTX *ctx, const unsigned char *key,
+                   const unsigned char *iv, int enc);  /* init key */
+       int (*do_cipher)(EVP_CIPHER_CTX *ctx, unsigned char *out,
+                        const unsigned char *in, unsigned int inl);/* encrypt/decrypt data */
        int (*cleanup)(EVP_CIPHER_CTX *); /* cleanup ctx */
        int ctx_size;           /* how big the ctx needs to be */
        int (*set_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); /* Populate a ASN1_TYPE with parameters */
        int (*get_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); /* Get parameters from a ASN1_TYPE */
        int (*ctrl)(EVP_CIPHER_CTX *, int type, int arg, void *ptr); /* Miscellaneous operations */
+       void *app_data;         /* Application data */
        };
 
 /* Values for cipher flags */
 
-/* Modes for block ciphers */
+/* Modes for ciphers */
 
+#define                EVP_CIPH_STREAM_CIPHER          0x0
 #define                EVP_CIPH_ECB_MODE               0x1
 #define                EVP_CIPH_CBC_MODE               0x2
 #define                EVP_CIPH_CFB_MODE               0x3
 #define                EVP_CIPH_OFB_MODE               0x4
-#define        EVP_CIPH_BLOCK_MODES            0x7
+#define        EVP_CIPH_MODE                   0x7
 /* Set if variable length cipher */
 #define        EVP_CIPH_VARIABLE_LENGTH        0x8
-
+/* Set if the iv handling should be done by the cipher itself */
+#define        EVP_CIPH_CUSTOM_IV              0x10
+/* Set if the cipher's init() function should be called if key is NULL */
+#define        EVP_CIPH_ALWAYS_CALL_INIT       0x20
+/* Call ctrl() to init cipher parameters */
+#define        EVP_CIPH_CTRL_INIT              0x40
+/* Don't use standard key length function */
+#define        EVP_CIPH_CUSTOM_KEY_LENGTH      0x80
+
+/* ctrl() values */
+
+#define                EVP_CTRL_INIT                   0x0
+#define        EVP_CTRL_SET_KEY_LENGTH         0x1
+#define        EVP_CTRL_GET_RC2_KEY_BITS       0x2
+#define        EVP_CTRL_SET_RC2_KEY_BITS       0x3
+#define        EVP_CTRL_GET_RC5_ROUNDS         0x4
+#define        EVP_CTRL_SET_RC5_ROUNDS         0x5
 
 typedef struct evp_cipher_info_st
        {
@@ -396,10 +425,16 @@ struct evp_cipher_ctx_st
                IDEA_KEY_SCHEDULE idea_ks;/* key schedule */
 #endif
 #ifndef NO_RC2
-               RC2_KEY rc2_ks;/* key schedule */
+               struct {
+                       int key_bits;   /* effective key bits */
+                       RC2_KEY ks;/* key schedule */
+               } rc2;
 #endif
 #ifndef NO_RC5
-               RC5_32_KEY rc5_ks;/* key schedule */
+               struct {
+                       int rounds;     /* number of rounds */
+                       RC5_32_KEY ks;/* key schedule */
+               } rc5;
 #endif
 #ifndef NO_BF
                BF_KEY bf_ks;/* key schedule */
@@ -455,6 +490,8 @@ typedef int (EVP_PBE_KEYGEN)(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
 #define EVP_CIPHER_block_size(e)       ((e)->block_size)
 #define EVP_CIPHER_key_length(e)       ((e)->key_len)
 #define EVP_CIPHER_iv_length(e)                ((e)->iv_len)
+#define EVP_CIPHER_flags(e)            ((e)->flags)
+#define EVP_CIPHER_mode(e)             ((e)->flags) & EVP_CIPH_MODE)
 
 #define EVP_CIPHER_CTX_cipher(e)       ((e)->cipher)
 #define EVP_CIPHER_CTX_nid(e)          ((e)->cipher->nid)
@@ -464,6 +501,8 @@ typedef int (EVP_PBE_KEYGEN)(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
 #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_CIPHER_CTX_flags(e)                ((e)->cipher->flags)
+#define EVP_CIPHER_CTX_mode(e)         ((e)->cipher->flags & EVP_CIPH_MODE)
 
 #define EVP_ENCODE_LENGTH(l)   (((l+2)/3*4)+(l/48+1)*2+80)
 #define EVP_DECODE_LENGTH(l)   ((l+3)/4*3+80)
@@ -561,8 +600,9 @@ void        ERR_load_EVP_strings(void );
 void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);
 int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);
 int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
+int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
 
-#ifdef HEADER_BIO_H
+#ifndef NO_BIO
 BIO_METHOD *BIO_f_md(void);
 BIO_METHOD *BIO_f_base64(void);
 BIO_METHOD *BIO_f_cipher(void);
@@ -573,6 +613,7 @@ void BIO_set_cipher(BIO *b,const EVP_CIPHER *c,unsigned char *k,
 
 EVP_MD *EVP_md_null(void);
 EVP_MD *EVP_md2(void);
+EVP_MD *EVP_md4(void);
 EVP_MD *EVP_md5(void);
 EVP_MD *EVP_sha(void);
 EVP_MD *EVP_sha1(void);
@@ -709,6 +750,8 @@ void EVP_PBE_cleanup(void);
 
 /* Function codes. */
 #define EVP_F_D2I_PKEY                                  100
+#define EVP_F_EVP_CIPHERINIT                            123
+#define EVP_F_EVP_CIPHER_CTX_CTRL                       124
 #define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH             122
 #define EVP_F_EVP_DECRYPTFINAL                          101
 #define EVP_F_EVP_MD_CTX_COPY                           110
@@ -730,12 +773,15 @@ void EVP_PBE_cleanup(void);
 #define EVP_F_PKCS5_PBE_KEYIVGEN                        117
 #define EVP_F_PKCS5_V2_PBE_KEYIVGEN                     118
 #define EVP_F_RC2_MAGIC_TO_METH                                 109
+#define EVP_F_RC5_CTRL                                  125
 
 /* 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_CTRL_NOT_IMPLEMENTED                      132
+#define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED            133
 #define EVP_R_DECODE_ERROR                              114
 #define EVP_R_DIFFERENT_KEY_TYPES                       101
 #define EVP_R_ENCODE_ERROR                              115
@@ -743,17 +789,20 @@ void EVP_PBE_cleanup(void);
 #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_INITIALIZATION_ERROR                      134
 #define EVP_R_INPUT_NOT_INITIALIZED                     111
 #define EVP_R_INVALID_KEY_LENGTH                        130
 #define EVP_R_IV_TOO_LARGE                              102
 #define EVP_R_KEYGEN_FAILURE                            120
 #define EVP_R_MISSING_PARAMETERS                        103
+#define EVP_R_NO_CIPHER_SET                             131
 #define EVP_R_NO_DSA_PARAMETERS                                 116
 #define EVP_R_NO_SIGN_FUNCTION_CONFIGURED               104
 #define EVP_R_NO_VERIFY_FUNCTION_CONFIGURED             105
 #define EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE                         117
 #define EVP_R_PUBLIC_KEY_NOT_RSA                        106
 #define EVP_R_UNKNOWN_PBE_ALGORITHM                     121
+#define EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS               135
 #define EVP_R_UNSUPPORTED_CIPHER                        107
 #define EVP_R_UNSUPPORTED_KEYLENGTH                     123
 #define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION       124