Avoid compiler complaint about mismatched function signatures
[openssl.git] / crypto / evp / evp.h
index ce5c210f61bfa9308fd2e4238ba38c11cbda74a8..69ed17952fb86549f04f8ed9dbb909c1b7f5cfab 100644 (file)
@@ -82,7 +82,7 @@
 #define EVP_CAST5_KEY_SIZE             16
 #define EVP_RC5_32_12_16_KEY_SIZE      16
 */
-#define EVP_MAX_MD_SIZE                        (16+20) /* The SSLv3 md5+sha1 type */
+#define EVP_MAX_MD_SIZE                        64      /* longest known is SHA512 */
 #define EVP_MAX_KEY_LENGTH             32
 #define EVP_MAX_IV_LENGTH              16
 #define EVP_MAX_BLOCK_LENGTH           32
@@ -227,26 +227,37 @@ struct env_md_st
        int md_size;
        unsigned long flags;
        int (*init)(EVP_MD_CTX *ctx);
-       int (*update)(EVP_MD_CTX *ctx,const void *data,unsigned long count);
+       int (*update)(EVP_MD_CTX *ctx,const void *data,size_t count);
        int (*final)(EVP_MD_CTX *ctx,unsigned char *md);
        int (*copy)(EVP_MD_CTX *to,const EVP_MD_CTX *from);
        int (*cleanup)(EVP_MD_CTX *ctx);
 
        /* FIXME: prototype these some day */
-       int (*sign)();
-       int (*verify)();
+       int (*sign)(int type, const unsigned char *m, unsigned int m_length,
+                   unsigned char *sigret, unsigned int *siglen, void *key);
+       int (*verify)(int type, const unsigned char *m, unsigned int m_length,
+                     const unsigned char *sigbuf, unsigned int siglen,
+                     void *key);
        int required_pkey_type[5]; /*EVP_PKEY_xxx */
        int block_size;
        int ctx_size; /* how big does the ctx->md_data need to be */
        } /* EVP_MD */;
 
+typedef int evp_sign_method(int type,const unsigned char *m,
+                           unsigned int m_length,unsigned char *sigret,
+                           unsigned int *siglen, void *key);
+typedef int evp_verify_method(int type,const unsigned char *m,
+                           unsigned int m_length,const unsigned char *sigbuf,
+                           unsigned int siglen, void *key);
+
 #define EVP_MD_FLAG_ONESHOT    0x0001 /* digest can only handle a single
                                        * block */
 
 #define EVP_PKEY_NULL_method   NULL,NULL,{0,0,0,0}
 
 #ifndef OPENSSL_NO_DSA
-#define EVP_PKEY_DSA_method    DSA_sign,DSA_verify, \
+#define EVP_PKEY_DSA_method    (evp_sign_method *)DSA_sign, \
+                               (evp_verify_method *)DSA_verify, \
                                {EVP_PKEY_DSA,EVP_PKEY_DSA2,EVP_PKEY_DSA3, \
                                        EVP_PKEY_DSA4,0}
 #else
@@ -254,18 +265,20 @@ struct env_md_st
 #endif
 
 #ifndef OPENSSL_NO_ECDSA
-#define EVP_PKEY_ECDSA_method   ECDSA_sign,ECDSA_verify, \
+#define EVP_PKEY_ECDSA_method   (evp_sign_method *)ECDSA_sign, \
+                               (evp_verify_method *)ECDSA_verify, \
                                  {EVP_PKEY_EC,0,0,0}
 #else   
 #define EVP_PKEY_ECDSA_method   EVP_PKEY_NULL_method
 #endif
 
 #ifndef OPENSSL_NO_RSA
-#define EVP_PKEY_RSA_method    RSA_sign,RSA_verify, \
+#define EVP_PKEY_RSA_method    (evp_sign_method *)RSA_sign, \
+                               (evp_verify_method *)RSA_verify, \
                                {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0}
 #define EVP_PKEY_RSA_ASN1_OCTET_STRING_method \
-                               RSA_sign_ASN1_OCTET_STRING, \
-                               RSA_verify_ASN1_OCTET_STRING, \
+                               (evp_sign_method *)RSA_sign_ASN1_OCTET_STRING, \
+                               (evp_verify_method *)RSA_verify_ASN1_OCTET_STRING, \
                                {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0}
 #else
 #define EVP_PKEY_RSA_method    EVP_PKEY_NULL_method
@@ -332,6 +345,8 @@ struct evp_cipher_st
 #define        EVP_CIPH_CUSTOM_KEY_LENGTH      0x80
 /* Don't use standard block padding */
 #define        EVP_CIPH_NO_PADDING             0x100
+/* cipher handles random key generation */
+#define        EVP_CIPH_RAND_KEY               0x200
 
 /* ctrl() values */
 
@@ -341,6 +356,7 @@ struct evp_cipher_st
 #define        EVP_CTRL_SET_RC2_KEY_BITS       0x3
 #define        EVP_CTRL_GET_RC5_ROUNDS         0x4
 #define        EVP_CTRL_SET_RC5_ROUNDS         0x5
+#define        EVP_CTRL_RAND_KEY               0x6
 
 typedef struct evp_cipher_info_st
        {
@@ -487,9 +503,9 @@ int     EVP_MD_CTX_copy_ex(EVP_MD_CTX *out,const EVP_MD_CTX *in);
 #define EVP_MD_CTX_test_flags(ctx,flgs) ((ctx)->flags&(flgs))
 int    EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
 int    EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d,
-                        unsigned int cnt);
+                        size_t cnt);
 int    EVP_DigestFinal_ex(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
-int    EVP_Digest(const void *data, unsigned int count,
+int    EVP_Digest(const void *data, size_t count,
                unsigned char *md, unsigned int *size, const EVP_MD *type, ENGINE *impl);
 
 int     EVP_MD_CTX_copy(EVP_MD_CTX *out,const EVP_MD_CTX *in);  
@@ -567,6 +583,7 @@ 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_set_padding(EVP_CIPHER_CTX *c, int pad);
 int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
+int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key);
 
 #ifndef OPENSSL_NO_BIO
 BIO_METHOD *BIO_f_md(void);
@@ -594,6 +611,14 @@ const EVP_MD *EVP_dss(void);
 const EVP_MD *EVP_dss1(void);
 const EVP_MD *EVP_ecdsa(void);
 #endif
+#ifndef OPENSSL_NO_SHA256
+const EVP_MD *EVP_sha224(void);
+const EVP_MD *EVP_sha256(void);
+#endif
+#ifndef OPENSSL_NO_SHA512
+const EVP_MD *EVP_sha384(void);
+const EVP_MD *EVP_sha512(void);
+#endif
 #ifndef OPENSSL_NO_MDC2
 const EVP_MD *EVP_mdc2(void);
 #endif