From c1054bb4d2a2e730d8ecb25037904f7d9a7f137d Mon Sep 17 00:00:00 2001 From: Jakub Zelenka Date: Sun, 24 Jul 2016 18:33:29 +0100 Subject: [PATCH] Add EVP_ENCODE_CTX_copy Reviewed-by: Tim Hudson Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/1344) --- crypto/evp/encode.c | 8 ++++++++ doc/crypto/EVP_EncodeInit.pod | 12 ++++++++---- include/openssl/evp.h | 1 + util/libcrypto.num | 1 + 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/crypto/evp/encode.c b/crypto/evp/encode.c index d140da67cc..abb1044378 100644 --- a/crypto/evp/encode.c +++ b/crypto/evp/encode.c @@ -102,6 +102,14 @@ void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx) { OPENSSL_free(ctx); } + +int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx) +{ + memcpy(dctx, sctx, sizeof(EVP_ENCODE_CTX)); + + return 1; +} + int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx) { return ctx->num; diff --git a/doc/crypto/EVP_EncodeInit.pod b/doc/crypto/EVP_EncodeInit.pod index 52c97d5a50..d919b14b29 100644 --- a/doc/crypto/EVP_EncodeInit.pod +++ b/doc/crypto/EVP_EncodeInit.pod @@ -2,10 +2,10 @@ =head1 NAME -EVP_ENCODE_CTX_new, EVP_ENCODE_CTX_free, EVP_ENCODE_CTX_num, EVP_EncodeInit, -EVP_EncodeUpdate, EVP_EncodeFinal, EVP_EncodeBlock, EVP_DecodeInit, -EVP_DecodeUpdate, EVP_DecodeFinal, EVP_DecodeBlock - EVP base 64 encode/decode -routines +EVP_ENCODE_CTX_new, EVP_ENCODE_CTX_free, EVP_ENCODE_CTX_copy, +EVP_ENCODE_CTX_num, EVP_EncodeInit, EVP_EncodeUpdate, EVP_EncodeFinal, +EVP_EncodeBlock, EVP_DecodeInit, EVP_DecodeUpdate, EVP_DecodeFinal, +EVP_DecodeBlock - EVP base 64 encode/decode routines =head1 SYNOPSIS @@ -13,6 +13,7 @@ routines EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void); void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx); + int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx); int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx); void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, @@ -76,6 +77,9 @@ in B<*outl>. It is the caller's responsibility to ensure that B is sufficiently large to accommodate the output data which will never be more than 65 bytes plus an additional NUL terminator (i.e. 66 bytes in total). +EVP_ENCODE_CTX_copy() can be used to copy a context B to a context +B. B must be initialized before calling this function. + EVP_ENCODE_CTX_num() will return the number of as yet unprocessed bytes still to be encoded or decoded that are pending in the B object. diff --git a/include/openssl/evp.h b/include/openssl/evp.h index 999660365c..10e048a795 100644 --- a/include/openssl/evp.h +++ b/include/openssl/evp.h @@ -608,6 +608,7 @@ __owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void); void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx); +int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx); int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx); void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, diff --git a/util/libcrypto.num b/util/libcrypto.num index ea17c0f45b..0f2d82f03a 100644 --- a/util/libcrypto.num +++ b/util/libcrypto.num @@ -4153,3 +4153,4 @@ NAME_CONSTRAINTS_check_CN 4097 1_1_0 EXIST::FUNCTION: OCSP_resp_get0_id 4098 1_1_0 EXIST::FUNCTION:OCSP OCSP_resp_get0_certs 4099 1_1_0 EXIST::FUNCTION:OCSP X509_set_proxy_flag 4100 1_1_0 EXIST::FUNCTION: +EVP_ENCODE_CTX_copy 4101 1_1_0 EXIST::FUNCTION: -- 2.25.1