| /* | 
 |  * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. | 
 |  * | 
 |  * Licensed under the OpenSSL license (the "License").  You may not use | 
 |  * this file except in compliance with the License.  You can obtain a copy | 
 |  * in the file LICENSE in the source distribution or at | 
 |  * https://www.openssl.org/source/license.html | 
 |  */ | 
 |  | 
 | /* EVP_MD_CTX related stuff */ | 
 |  | 
 | struct evp_md_ctx_st { | 
 |     const EVP_MD *digest; | 
 |     ENGINE *engine;             /* functional reference if 'digest' is | 
 |                                  * ENGINE-provided */ | 
 |     unsigned long flags; | 
 |     void *md_data; | 
 |     /* Public key context for sign/verify */ | 
 |     EVP_PKEY_CTX *pctx; | 
 |     /* Update function: usually copied from EVP_MD */ | 
 |     int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); | 
 | } /* EVP_MD_CTX */ ; | 
 |  | 
 | struct evp_cipher_ctx_st { | 
 |     const EVP_CIPHER *cipher; | 
 |     ENGINE *engine;             /* functional reference if 'cipher' is | 
 |                                  * ENGINE-provided */ | 
 |     int encrypt;                /* encrypt or decrypt */ | 
 |     int buf_len;                /* number we have left */ | 
 |     unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */ | 
 |     unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */ | 
 |     unsigned char buf[EVP_MAX_BLOCK_LENGTH]; /* saved partial block */ | 
 |     int num;                    /* used by cfb/ofb/ctr mode */ | 
 |     /* FIXME: Should this even exist? It appears unused */ | 
 |     void *app_data;             /* application stuff */ | 
 |     int key_len;                /* May change for variable length cipher */ | 
 |     unsigned long flags;        /* Various flags */ | 
 |     void *cipher_data;          /* per EVP data */ | 
 |     int final_used; | 
 |     int block_mask; | 
 |     unsigned char final[EVP_MAX_BLOCK_LENGTH]; /* possible final block */ | 
 | } /* EVP_CIPHER_CTX */ ; | 
 |  | 
 | int PKCS5_v2_PBKDF2_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, | 
 |                              int passlen, ASN1_TYPE *param, | 
 |                              const EVP_CIPHER *c, const EVP_MD *md, | 
 |                              int en_de); | 
 |  | 
 | struct evp_Encode_Ctx_st { | 
 |     /* number saved in a partial encode/decode */ | 
 |     int num; | 
 |     /* | 
 |      * The length is either the output line length (in input bytes) or the | 
 |      * shortest input line length that is ok.  Once decoding begins, the | 
 |      * length is adjusted up each time a longer line is decoded | 
 |      */ | 
 |     int length; | 
 |     /* data to encode */ | 
 |     unsigned char enc_data[80]; | 
 |     /* number read on current line */ | 
 |     int line_num; | 
 |     int expect_nl; | 
 | }; | 
 |  | 
 | typedef struct evp_pbe_st EVP_PBE_CTL; | 
 | DEFINE_STACK_OF(EVP_PBE_CTL) | 
 |  | 
 | int is_partially_overlapping(const void *ptr1, const void *ptr2, int len); |