567db2c17d
We currently implement EVP MAC methods as EVP_PKEY methods. This change creates a separate EVP API for MACs, to replace the current EVP_PKEY ones. A note about this EVP API and how it interfaces with underlying MAC implementations: Other EVP APIs pass the EVP API context down to implementations, and it can be observed that the implementations use the pointer to their own private data almost exclusively. The EVP_MAC API deviates from that pattern by passing the pointer to the implementation's private data directly, and thereby deny the implementations access to the EVP_MAC context structure. This change is made to provide a clearer separation between the EVP library itself and the implementations of its supported algorithm classes. Reviewed-by: Paul Dale <paul.dale@oracle.com> (Merged from https://github.com/openssl/openssl/pull/7393)
73 lines
2.7 KiB
C
73 lines
2.7 KiB
C
/*
|
|
* Copyright 2000-2018 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 */ ;
|
|
|
|
struct evp_mac_ctx_st {
|
|
const EVP_MAC *meth; /* Method structure */
|
|
void *data; /* Individual method data */
|
|
} /* EVP_MAC_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;
|
|
unsigned int flags;
|
|
};
|
|
|
|
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);
|