size_t-fication of message digest APIs. We should size_t-fy more APIs...
[openssl.git] / crypto / evp / evp.h
index a5f3c449c9d60d2a3fa25f219946b6a8b8b24f80..47c8fc72a018529eaf5931d6ca6f274de90562ef 100644 (file)
@@ -227,7 +227,7 @@ 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);
@@ -288,6 +288,8 @@ struct env_md_ctx_st
                                                * once only */
 #define EVP_MD_CTX_FLAG_CLEANED                0x0002 /* context has already been
                                                * cleaned */
+#define EVP_MD_CTX_FLAG_REUSE          0x0004 /* Don't free up ctx->md_data
+                                               * in EVP_MD_CTX_cleanup */
 
 struct evp_cipher_st
        {
@@ -330,6 +332,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 */
 
@@ -339,6 +343,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
        {
@@ -485,9 +490,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(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);  
@@ -495,7 +500,7 @@ int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
 int    EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
 
 int    EVP_read_pw_string(char *buf,int length,const char *prompt,int verify);
-void   EVP_set_pw_prompt(char *prompt);
+void   EVP_set_pw_prompt(const char *prompt);
 char * EVP_get_pw_prompt(void);
 
 int    EVP_BytesToKey(const EVP_CIPHER *type,const EVP_MD *md,
@@ -534,26 +539,28 @@ int       EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
 int    EVP_SignFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s,
                EVP_PKEY *pkey);
 
-int    EVP_VerifyFinal(EVP_MD_CTX *ctx,unsigned char *sigbuf,
+int    EVP_VerifyFinal(EVP_MD_CTX *ctx,const unsigned char *sigbuf,
                unsigned int siglen,EVP_PKEY *pkey);
 
-int    EVP_OpenInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *type,unsigned char *ek,
-               int ekl,unsigned char *iv,EVP_PKEY *priv);
+int    EVP_OpenInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *type,
+               const unsigned char *ek, int ekl, const unsigned char *iv,
+               EVP_PKEY *priv);
 int    EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
 
-int    EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek,
-               int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk);
+int    EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
+                unsigned char **ek, int *ekl, unsigned char *iv,
+               EVP_PKEY **pubk, int npubk);
 int    EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl);
 
 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_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,
+               const unsigned char *in,int inl);
 void   EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl);
 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);
+               const unsigned char *in, int inl);
 int    EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned
                char *out, int *outl);
 int    EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
@@ -563,14 +570,15 @@ 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);
 BIO_METHOD *BIO_f_base64(void);
 BIO_METHOD *BIO_f_cipher(void);
 BIO_METHOD *BIO_f_reliable(void);
-void BIO_set_cipher(BIO *b,const EVP_CIPHER *c,unsigned char *k,
-       unsigned char *i, int enc);
+void BIO_set_cipher(BIO *b,const EVP_CIPHER *c,const unsigned char *k,
+               const unsigned char *i, int enc);
 #endif
 
 const EVP_MD *EVP_md_null(void);
@@ -732,10 +740,12 @@ const EVP_CIPHER *EVP_get_cipherbyname(const char *name);
 const EVP_MD *EVP_get_digestbyname(const char *name);
 void EVP_cleanup(void);
 
-int            EVP_PKEY_decrypt(unsigned char *dec_key,unsigned char *enc_key,
-                       int enc_key_len,EVP_PKEY *private_key);
+int            EVP_PKEY_decrypt(unsigned char *dec_key,
+                       const unsigned char *enc_key,int enc_key_len,
+                       EVP_PKEY *private_key);
 int            EVP_PKEY_encrypt(unsigned char *enc_key,
-                       unsigned char *key,int key_len,EVP_PKEY *pub_key);
+                       const unsigned char *key,int key_len,
+                       EVP_PKEY *pub_key);
 int            EVP_PKEY_type(int type);
 int            EVP_PKEY_bits(EVP_PKEY *pkey);
 int            EVP_PKEY_size(EVP_PKEY *pkey);
@@ -764,13 +774,13 @@ struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
 
 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,
+EVP_PKEY *     d2i_PublicKey(int type,EVP_PKEY **a, const unsigned char **pp,
                        long length);
 int            i2d_PublicKey(EVP_PKEY *a, unsigned char **pp);
 
-EVP_PKEY *     d2i_PrivateKey(int type,EVP_PKEY **a, unsigned char **pp,
+EVP_PKEY *     d2i_PrivateKey(int type,EVP_PKEY **a, const unsigned char **pp,
                        long length);
-EVP_PKEY *     d2i_AutoPrivateKey(EVP_PKEY **a, unsigned char **pp,
+EVP_PKEY *     d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
                        long length);
 int            i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp);
 
@@ -796,7 +806,7 @@ int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
                         ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md,
                         int en_de);
 int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
-                          unsigned char *salt, int saltlen, int iter,
+                          const 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, const EVP_CIPHER *cipher, const EVP_MD *md,