# EVP generic crypto functions

## Functions
const EVP_CIPHER * | EVP_wincrypt_des_ede3_cbc (void)
const EVP_CIPHER * | EVP_hcrypto_aes_128_cbc (void)
const EVP_CIPHER * | EVP_hcrypto_aes_192_cbc (void)
const EVP_CIPHER * | EVP_hcrypto_aes_256_cbc (void)
const EVP_MD * | EVP_hcrypto_sha256 (void)
const EVP_MD * | EVP_hcrypto_sha1 (void)
const EVP_MD * | EVP_hcrypto_md5 (void)
const EVP_MD * | EVP_hcrypto_md4 (void)
const EVP_MD * | EVP_hcrypto_md2 (void)
const EVP_CIPHER * | EVP_hcrypto_des_cbc (void)
const EVP_CIPHER * | EVP_hcrypto_des_ede3_cbc (void)
const EVP_CIPHER * | EVP_hcrypto_rc2_cbc (void)
const EVP_CIPHER * | EVP_hcrypto_rc2_40_cbc (void)
const EVP_CIPHER * | EVP_hcrypto_rc2_64_cbc (void)
const EVP_CIPHER * | EVP_hcrypto_camellia_128_cbc (void)
const EVP_CIPHER * | EVP_hcrypto_camellia_192_cbc (void)
const EVP_CIPHER * | EVP_hcrypto_camellia_256_cbc (void)
size_t | EVP_MD_size (const EVP_MD *md)
size_t | EVP_MD_block_size (const EVP_MD *md)
EVP_MD_CTX * | EVP_MD_CTX_create (void)
void | EVP_MD_CTX_init (EVP_MD_CTX *ctx) HC_DEPRECATED
void | EVP_MD_CTX_destroy (EVP_MD_CTX *ctx)
int | EVP_MD_CTX_cleanup (EVP_MD_CTX *ctx) HC_DEPRECATED
const EVP_MD * | EVP_MD_CTX_md (EVP_MD_CTX *ctx)
size_t | EVP_MD_CTX_size (EVP_MD_CTX *ctx)
size_t | EVP_MD_CTX_block_size (EVP_MD_CTX *ctx)
int | EVP_DigestInit_ex (EVP_MD_CTX *ctx, const EVP_MD *md, ENGINE *engine)
int | EVP_DigestUpdate (EVP_MD_CTX *ctx, const void *data, size_t size)
int | EVP_DigestFinal_ex (EVP_MD_CTX *ctx, void *hash, unsigned int *size)
int | EVP_Digest (const void *data, size_t dsize, void *hash, unsigned int *hsize, const EVP_MD *md, ENGINE *engine)
const EVP_MD * | EVP_sha256 (void)
const EVP_MD * | EVP_sha1 (void)
const EVP_MD * | EVP_sha (void)
const EVP_MD * | EVP_md5 (void)
const EVP_MD * | EVP_md4 (void)
const EVP_MD * | EVP_md2 (void)
const EVP_MD * | EVP_md_null (void)
size_t | EVP_CIPHER_block_size (const EVP_CIPHER *c)
size_t | EVP_CIPHER_key_length (const EVP_CIPHER *c)
size_t | EVP_CIPHER_iv_length (const EVP_CIPHER *c)
void | EVP_CIPHER_CTX_init (EVP_CIPHER_CTX *c)
int | EVP_CIPHER_CTX_cleanup (EVP_CIPHER_CTX *c)
int | EVP_CIPHER_CTX_set_key_length (EVP_CIPHER_CTX *c, int length)
const EVP_CIPHER * | EVP_CIPHER_CTX_cipher (EVP_CIPHER_CTX *ctx)
size_t | EVP_CIPHER_CTX_block_size (const EVP_CIPHER_CTX *ctx)
size_t | EVP_CIPHER_CTX_key_length (const EVP_CIPHER_CTX *ctx)
size_t | EVP_CIPHER_CTX_iv_length (const EVP_CIPHER_CTX *ctx)
unsigned long | EVP_CIPHER_CTX_flags (const EVP_CIPHER_CTX *ctx)
int | EVP_CIPHER_CTX_mode (const EVP_CIPHER_CTX *ctx)
void * | EVP_CIPHER_CTX_get_app_data (EVP_CIPHER_CTX *ctx)
void | EVP_CIPHER_CTX_set_app_data (EVP_CIPHER_CTX *ctx, void *data)
int | EVP_CipherInit_ex (EVP_CIPHER_CTX *ctx, const EVP_CIPHER *c, ENGINE *engine, const void *key, const void *iv, int encp)
int | EVP_CipherUpdate (EVP_CIPHER_CTX *ctx, void *out, int *outlen, void *in, size_t inlen)
int | EVP_CipherFinal_ex (EVP_CIPHER_CTX *ctx, void *out, int *outlen)
const EVP_CIPHER * | EVP_enc_null (void)
const EVP_CIPHER * | EVP_rc2_cbc (void)
const EVP_CIPHER * | EVP_rc2_40_cbc (void)
const EVP_CIPHER * | EVP_rc2_64_cbc (void)
const EVP_CIPHER * | EVP_rc4 (void)
const EVP_CIPHER * | EVP_rc4_40 (void)
const EVP_CIPHER * | EVP_des_cbc (void)
const EVP_CIPHER * | EVP_des_ede3_cbc (void)
const EVP_CIPHER * | EVP_aes_128_cbc (void)
const EVP_CIPHER * | EVP_aes_192_cbc (void)
const EVP_CIPHER * | EVP_aes_256_cbc (void)
const EVP_CIPHER * | EVP_camellia_128_cbc (void)
const EVP_CIPHER * | EVP_camellia_192_cbc (void)
const EVP_CIPHER * | EVP_camellia_256_cbc (void)
const EVP_CIPHER * | EVP_get_cipherbyname (const char *name)
int | EVP_BytesToKey (const EVP_CIPHER *type, const EVP_MD *md, const void *salt, const void *data, size_t datalen, unsigned int count, void *keydata, void *ivdata)

## Detailed Description

See the EVP - generic crypto interface for description and examples.

## Function Documentation

const EVP_CIPHER* EVP_aes_128_cbc | ( | void |  | ) |

The AES-128 cipher type

Returns:
  the AES-128 EVP_CIPHER pointer.

Examples:
  example_evp_cipher.c.

const EVP_CIPHER* EVP_aes_192_cbc | ( | void |  | ) |

The AES-192 cipher type

Returns:
  the AES-192 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_aes_256_cbc | ( | void |  | ) |

The AES-256 cipher type

Returns:
  the AES-256 EVP_CIPHER pointer.

int EVP_BytesToKey | ( | const EVP_CIPHER * | type,
|  | const EVP_MD * | md,
|  | const void * | salt,
|  | const void * | data,
|  | size_t | datalen,
|  | unsigned int | count,
|  | void * | keydata,
|  | void * | ivdata |
| ) |  |  |

Provides a legancy string to key function, used in PEM files.

New protocols should use new string to key functions like NIST SP56-800A or PKCS#5 v2.0 (see PKCS5_PBKDF2_HMAC_SHA1()).

Parameters:

  | type | type of cipher to use
  | md | message digest to use
  | salt | salt salt string, should be an binary 8 byte buffer.
  | data | the password/input key string.
  | datalen | length of data parameter.
  | count | iteration counter.
  | keydata | output keydata, needs to of the size EVP_CIPHER_key_length().
  | ivdata | output ivdata, needs to of the size EVP_CIPHER_block_size().

Returns:
  the size of derived key.

const EVP_CIPHER* EVP_camellia_128_cbc | ( | void |  | ) |

The Camellia-128 cipher type

Returns:
  the Camellia-128 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_camellia_192_cbc | ( | void |  | ) |

The Camellia-198 cipher type

Returns:
  the Camellia-198 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_camellia_256_cbc | ( | void |  | ) |

The Camellia-256 cipher type

Returns:
  the Camellia-256 EVP_CIPHER pointer.

size_t EVP_CIPHER_block_size | ( | const EVP_CIPHER * | c | ) |

Return the block size of the cipher.

Parameters:

  | c | cipher to get the block size from.

Returns:
  the block size of the cipher.

Examples:
  example_evp_cipher.c.

size_t EVP_CIPHER_CTX_block_size | ( | const EVP_CIPHER_CTX * | ctx | ) |

Return the block size of the cipher context.

Parameters:

  | ctx | cipher context to get the block size from.

Returns:
  the block size of the cipher context.

const EVP_CIPHER* EVP_CIPHER_CTX_cipher | ( | EVP_CIPHER_CTX * | ctx | ) |

Return the EVP_CIPHER for a EVP_CIPHER_CTX context.

Parameters:

  | ctx | the context to get the cipher type from.

Returns:
  the EVP_CIPHER pointer.

int EVP_CIPHER_CTX_cleanup | ( | EVP_CIPHER_CTX * | c | ) |

Clean up the EVP_CIPHER_CTX context.

Parameters:

  | c | the cipher to clean up.

Returns:
  1 on success.

Examples:
  example_evp_cipher.c.

unsigned long EVP_CIPHER_CTX_flags | ( | const EVP_CIPHER_CTX * | ctx | ) |

Get the flags for an EVP_CIPHER_CTX context.

Parameters:

  | ctx | the EVP_CIPHER_CTX to get the flags from

Returns:
  the flags for an EVP_CIPHER_CTX.

void* EVP_CIPHER_CTX_get_app_data | ( | EVP_CIPHER_CTX * | ctx | ) |

Get the app data for an EVP_CIPHER_CTX context.

Parameters:

  | ctx | the EVP_CIPHER_CTX to get the app data from

Returns:
  the app data for an EVP_CIPHER_CTX.

void EVP_CIPHER_CTX_init | ( | EVP_CIPHER_CTX * | c | ) |

Initiate a EVP_CIPHER_CTX context. Clean up with EVP_CIPHER_CTX_cleanup().

Parameters:

  | c | the cipher initiate.

Examples:
  example_evp_cipher.c.

size_t EVP_CIPHER_CTX_iv_length | ( | const EVP_CIPHER_CTX * | ctx | ) |

Return the IV size of the cipher context.

Parameters:

  | ctx | cipher context to get the IV size from.

Returns:
  the IV size of the cipher context.

size_t EVP_CIPHER_CTX_key_length | ( | const EVP_CIPHER_CTX * | ctx | ) |

Return the key size of the cipher context.

Parameters:

  | ctx | cipher context to get the key size from.

Returns:
  the key size of the cipher context.

int EVP_CIPHER_CTX_mode | ( | const EVP_CIPHER_CTX * | ctx | ) |

Get the mode for an EVP_CIPHER_CTX context.

Parameters:

  | ctx | the EVP_CIPHER_CTX to get the mode from

Returns:
  the mode for an EVP_CIPHER_CTX.

void EVP_CIPHER_CTX_set_app_data | ( | EVP_CIPHER_CTX * | ctx,
|  | void * | data |
| ) |  |  |

Set the app data for an EVP_CIPHER_CTX context.

Parameters:

  | ctx | the EVP_CIPHER_CTX to set the app data for
  | data | the app data to set for an EVP_CIPHER_CTX.

int EVP_CIPHER_CTX_set_key_length | ( | EVP_CIPHER_CTX * | c,
|  | int | length |
| ) |  |  |

If the cipher type supports it, change the key length

Parameters:

  | c | the cipher context to change the key length for
  | length | new key length

Returns:
  1 on success.

size_t EVP_CIPHER_iv_length | ( | const EVP_CIPHER * | c | ) |

Return the IV size of the cipher.

Parameters:

  | c | cipher to get the IV size from.

Returns:
  the IV size of the cipher.

Examples:
  example_evp_cipher.c.

size_t EVP_CIPHER_key_length | ( | const EVP_CIPHER * | c | ) |

Return the key size of the cipher.

Parameters:

  | c | cipher to get the key size from.

Returns:
  the key size of the cipher.

Examples:
  example_evp_cipher.c.

int EVP_CipherFinal_ex | ( | EVP_CIPHER_CTX * | ctx,
|  | void * | out,
|  | int * | outlen |
| ) |  |  |

Encipher/decipher final data

Parameters:

  | ctx | the cipher context.
  | out | output data from the operation.
  | outlen | output length

The input length needs to be at least EVP_CIPHER_block_size() bytes long.

See EVP Cipher for an example how to use this function.

Returns:
  1 on success.

Examples:
  example_evp_cipher.c.

int EVP_CipherInit_ex | ( | EVP_CIPHER_CTX * | ctx,
|  | const EVP_CIPHER * | c,
|  | ENGINE * | engine,
|  | const void * | key,
|  | const void * | iv,
|  | int | encp |
| ) |  |  |

Initiate the EVP_CIPHER_CTX context to encrypt or decrypt data. Clean up with EVP_CIPHER_CTX_cleanup().

Parameters:

  | ctx | context to initiate
  | c | cipher to use.
  | engine | crypto engine to use, NULL to select default.
  | key | the crypto key to use, NULL will use the previous value.
  | iv | the IV to use, NULL will use the previous value.
  | encp | non zero will encrypt, -1 use the previous value.

Returns:
  1 on success.

Examples:
  example_evp_cipher.c.

int EVP_CipherUpdate | ( | EVP_CIPHER_CTX * | ctx,
|  | void * | out,
|  | int * | outlen,
|  | void * | in,
|  | size_t | inlen |
| ) |  |  |

Encipher/decipher partial data

Parameters:

  | ctx | the cipher context.
  | out | output data from the operation.
  | outlen | output length
  | in | input data to the operation.
  | inlen | length of data.

The output buffer length should at least be EVP_CIPHER_block_size() byte longer then the input length.

See EVP Cipher for an example how to use this function.

Returns:
  1 on success.

If there in no spare bytes in the left from last Update and the input length is on the block boundery, the EVP_CipherUpdate() function can take a shortcut (and preformance gain) and directly encrypt the data, otherwise we hav to fix it up and store extra it the EVP_CIPHER_CTX.

Examples:
  example_evp_cipher.c.

const EVP_CIPHER* EVP_des_cbc | ( | void |  | ) |

The DES cipher type

Returns:
  the DES-CBC EVP_CIPHER pointer.

const EVP_CIPHER* EVP_des_ede3_cbc | ( | void |  | ) |

The tripple DES cipher type

Returns:
  the DES-EDE3-CBC EVP_CIPHER pointer.

int EVP_Digest | ( | const void * | data,
|  | size_t | dsize,
|  | void * | hash,
|  | unsigned int * | hsize,
|  | const EVP_MD * | md,
|  | ENGINE * | engine |
| ) |  |  |

Do the whole EVP_MD_CTX_create(), EVP_DigestInit_ex(), EVP_DigestUpdate(), EVP_DigestFinal_ex(), EVP_MD_CTX_destroy() dance in one call.

Parameters:

  | data | the data to update the context with
  | dsize | length of data
  | hash | output data of at least EVP_MD_size() length.
  | hsize | output length of hash.
  | md | message digest to use
  | engine | engine to use, NULL for default engine.

Returns:
  1 on success.

int EVP_DigestFinal_ex | ( | EVP_MD_CTX * | ctx,
|  | void * | hash,
|  | unsigned int * | size |
| ) |  |  |

Complete the message digest.

Parameters:

  | ctx | the context to complete.
  | hash | the output of the message digest function. At least EVP_MD_size().
  | size | the output size of hash.

Returns:
  1 on success.

int EVP_DigestInit_ex | ( | EVP_MD_CTX * | ctx,
|  | const EVP_MD * | md,
|  | ENGINE * | engine |
| ) |  |  |

Init a EVP_MD_CTX for use a specific message digest and engine.

Parameters:

  | ctx | the message digest context to init.
  | md | the message digest to use.
  | engine | the engine to use, NULL to use the default engine.

Returns:
  1 on success.

int EVP_DigestUpdate | ( | EVP_MD_CTX * | ctx,
|  | const void * | data,
|  | size_t | size |
| ) |  |  |

Update the digest with some data.

Parameters:

  | ctx | the context to update
  | data | the data to update the context with
  | size | length of data

Returns:
  1 on success.

const EVP_CIPHER* EVP_enc_null | ( | void |  | ) |

The NULL cipher type, does no encryption/decryption.

Returns:
  the null EVP_CIPHER pointer.

const EVP_CIPHER* EVP_get_cipherbyname | ( | const char * | name | ) |

Get the cipher type using their name.

Parameters:

  | name | the name of the cipher.

Returns:
  the selected EVP_CIPHER pointer or NULL if not found.

const EVP_CIPHER* EVP_hcrypto_aes_128_cbc | ( | void |  | ) |

The AES-128 cipher type (hcrypto)

Returns:
  the AES-128 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_hcrypto_aes_192_cbc | ( | void |  | ) |

The AES-192 cipher type (hcrypto)

Returns:
  the AES-192 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_hcrypto_aes_256_cbc | ( | void |  | ) |

The AES-256 cipher type (hcrypto)

Returns:
  the AES-256 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_hcrypto_camellia_128_cbc | ( | void |  | ) |

The Camellia-128 cipher type - hcrypto

Returns:
  the Camellia-128 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_hcrypto_camellia_192_cbc | ( | void |  | ) |

The Camellia-198 cipher type - hcrypto

Returns:
  the Camellia-198 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_hcrypto_camellia_256_cbc | ( | void |  | ) |

The Camellia-256 cipher type - hcrypto

Returns:
  the Camellia-256 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_hcrypto_des_cbc | ( | void |  | ) |

The DES cipher type

Returns:
  the DES-CBC EVP_CIPHER pointer.

const EVP_CIPHER* EVP_hcrypto_des_ede3_cbc | ( | void |  | ) |

The tripple DES cipher type - hcrypto

Returns:
  the DES-EDE3-CBC EVP_CIPHER pointer.

const EVP_MD* EVP_hcrypto_md2 | ( | void |  | ) |

The message digest MD2 - hcrypto

Returns:
  the message digest type.

const EVP_MD* EVP_hcrypto_md4 | ( | void |  | ) |

The message digest MD4 - hcrypto

Returns:
  the message digest type.

const EVP_MD* EVP_hcrypto_md5 | ( | void |  | ) |

The message digest MD5 - hcrypto

Returns:
  the message digest type.

const EVP_CIPHER* EVP_hcrypto_rc2_40_cbc | ( | void |  | ) |

The RC2-40 cipher type

Returns:
  the RC2-40 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_hcrypto_rc2_64_cbc | ( | void |  | ) |

The RC2-64 cipher type

Returns:
  the RC2-64 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_hcrypto_rc2_cbc | ( | void |  | ) |

The RC2 cipher type - hcrypto

Returns:
  the RC2 EVP_CIPHER pointer.

const EVP_MD* EVP_hcrypto_sha1 | ( | void |  | ) |

The message digest SHA1 - hcrypto

Returns:
  the message digest type.

const EVP_MD* EVP_hcrypto_sha256 | ( | void |  | ) |

The message digest SHA256 - hcrypto

Returns:
  the message digest type.

const EVP_MD* EVP_md2 | ( | void |  | ) |

The message digest MD2

Returns:
  the message digest type.

const EVP_MD* EVP_md4 | ( | void |  | ) |

The message digest MD4

Returns:
  the message digest type.

const EVP_MD* EVP_md5 | ( | void |  | ) |

The message digest MD5

Returns:
  the message digest type.

size_t EVP_MD_block_size | ( | const EVP_MD * | md | ) |

Return the blocksize of the message digest function.

Parameters:

  | md | the evp message

Returns:
  size size of the message digest block size

size_t EVP_MD_CTX_block_size | ( | EVP_MD_CTX * | ctx | ) |

Return the blocksize of the message digest function.

Parameters:

  | ctx | the evp message digest context

Returns:
  size size of the message digest block size

int EVP_MD_CTX_cleanup | ( | EVP_MD_CTX * | ctx | ) |

Free the resources used by the EVP_MD context.

Parameters:

  | ctx | the context to free the resources from.

Returns:
  1 on success.

EVP_MD_CTX* EVP_MD_CTX_create | ( | void |  | ) |

Allocate a messsage digest context object. Free with EVP_MD_CTX_destroy().

Returns:
  a newly allocated message digest context object.

void EVP_MD_CTX_destroy | ( | EVP_MD_CTX * | ctx | ) |

Free a messsage digest context object.

Parameters:

  | ctx | context to free.

void EVP_MD_CTX_init | ( | EVP_MD_CTX * | ctx | ) |

Initiate a messsage digest context object. Deallocate with EVP_MD_CTX_cleanup(). Please use EVP_MD_CTX_create() instead.

Parameters:

  | ctx | variable to initiate.

const EVP_MD* EVP_MD_CTX_md | ( | EVP_MD_CTX * | ctx | ) |

Get the EVP_MD use for a specified context.

Parameters:

  | ctx | the EVP_MD context to get the EVP_MD for.

Returns:
  the EVP_MD used for the context.

size_t EVP_MD_CTX_size | ( | EVP_MD_CTX * | ctx | ) |

Return the output size of the message digest function.

Parameters:

  | ctx | the evp message digest context

Returns:
  size output size of the message digest function.

const EVP_MD* EVP_md_null | ( | void |  | ) |

The null message digest

Returns:
  the message digest type.

size_t EVP_MD_size | ( | const EVP_MD * | md | ) |

Return the output size of the message digest function.

Parameters:

  | md | the evp message

Returns:
  size output size of the message digest function.

const EVP_CIPHER* EVP_rc2_40_cbc | ( | void |  | ) |

The RC2 cipher type

Returns:
  the RC2 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_rc2_64_cbc | ( | void |  | ) |

The RC2 cipher type

Returns:
  the RC2 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_rc2_cbc | ( | void |  | ) |

The RC2 cipher type

Returns:
  the RC2 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_rc4 | ( | void |  | ) |

The RC4 cipher type

Returns:
  the RC4 EVP_CIPHER pointer.

const EVP_CIPHER* EVP_rc4_40 | ( | void |  | ) |

The RC4-40 cipher type

Returns:
  the RC4-40 EVP_CIPHER pointer.

const EVP_MD* EVP_sha | ( | void |  | ) |

The message digest SHA1

Returns:
  the message digest type.

const EVP_MD* EVP_sha1 | ( | void |  | ) |

The message digest SHA1

Returns:
  the message digest type.

const EVP_MD* EVP_sha256 | ( | void |  | ) |

The message digest SHA256

Returns:
  the message digest type.

const EVP_CIPHER* EVP_wincrypt_des_ede3_cbc | ( | void |  | ) |

The tripple DES cipher type (Micrsoft crypt provider)

Returns:
  the DES-EDE3-CBC EVP_CIPHER pointer.