diff options
| author | markus <> | 2003-05-12 02:18:40 +0000 |
|---|---|---|
| committer | markus <> | 2003-05-12 02:18:40 +0000 |
| commit | d4fcd82bb7f6d603bd61e19a81ba97337b89dfca (patch) | |
| tree | d52e3a0f1f08f65ad283027e560e17ed0d720462 /src/lib/libcrypto/evp/digest.c | |
| parent | 582bbd139cd2afd58d10dc051c5b0b989b441074 (diff) | |
| download | openbsd-d4fcd82bb7f6d603bd61e19a81ba97337b89dfca.tar.gz openbsd-d4fcd82bb7f6d603bd61e19a81ba97337b89dfca.tar.bz2 openbsd-d4fcd82bb7f6d603bd61e19a81ba97337b89dfca.zip | |
merge 0.9.7b with local changes; crank majors for libssl/libcrypto
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/evp/digest.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/lib/libcrypto/evp/digest.c b/src/lib/libcrypto/evp/digest.c index a969ac69ed..b22eed4421 100644 --- a/src/lib/libcrypto/evp/digest.c +++ b/src/lib/libcrypto/evp/digest.c | |||
| @@ -113,7 +113,9 @@ | |||
| 113 | #include "cryptlib.h" | 113 | #include "cryptlib.h" |
| 114 | #include <openssl/objects.h> | 114 | #include <openssl/objects.h> |
| 115 | #include <openssl/evp.h> | 115 | #include <openssl/evp.h> |
| 116 | #ifndef OPENSSL_NO_ENGINE | ||
| 116 | #include <openssl/engine.h> | 117 | #include <openssl/engine.h> |
| 118 | #endif | ||
| 117 | 119 | ||
| 118 | void EVP_MD_CTX_init(EVP_MD_CTX *ctx) | 120 | void EVP_MD_CTX_init(EVP_MD_CTX *ctx) |
| 119 | { | 121 | { |
| @@ -138,6 +140,7 @@ int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type) | |||
| 138 | int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl) | 140 | int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl) |
| 139 | { | 141 | { |
| 140 | EVP_MD_CTX_clear_flags(ctx,EVP_MD_CTX_FLAG_CLEANED); | 142 | EVP_MD_CTX_clear_flags(ctx,EVP_MD_CTX_FLAG_CLEANED); |
| 143 | #ifndef OPENSSL_NO_ENGINE | ||
| 141 | /* Whether it's nice or not, "Inits" can be used on "Final"'d contexts | 144 | /* Whether it's nice or not, "Inits" can be used on "Final"'d contexts |
| 142 | * so this context may already have an ENGINE! Try to avoid releasing | 145 | * so this context may already have an ENGINE! Try to avoid releasing |
| 143 | * the previous handle, re-querying for an ENGINE, and having a | 146 | * the previous handle, re-querying for an ENGINE, and having a |
| @@ -183,11 +186,13 @@ int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl) | |||
| 183 | else | 186 | else |
| 184 | ctx->engine = NULL; | 187 | ctx->engine = NULL; |
| 185 | } | 188 | } |
| 186 | else if(!ctx->digest) | 189 | else |
| 190 | if(!ctx->digest) | ||
| 187 | { | 191 | { |
| 188 | EVPerr(EVP_F_EVP_DIGESTINIT, EVP_R_NO_DIGEST_SET); | 192 | EVPerr(EVP_F_EVP_DIGESTINIT, EVP_R_NO_DIGEST_SET); |
| 189 | return 0; | 193 | return 0; |
| 190 | } | 194 | } |
| 195 | #endif | ||
| 191 | if (ctx->digest != type) | 196 | if (ctx->digest != type) |
| 192 | { | 197 | { |
| 193 | if (ctx->digest && ctx->digest->ctx_size) | 198 | if (ctx->digest && ctx->digest->ctx_size) |
| @@ -196,7 +201,9 @@ int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl) | |||
| 196 | if (type->ctx_size) | 201 | if (type->ctx_size) |
| 197 | ctx->md_data=OPENSSL_malloc(type->ctx_size); | 202 | ctx->md_data=OPENSSL_malloc(type->ctx_size); |
| 198 | } | 203 | } |
| 204 | #ifndef OPENSSL_NO_ENGINE | ||
| 199 | skip_to_init: | 205 | skip_to_init: |
| 206 | #endif | ||
| 200 | return ctx->digest->init(ctx); | 207 | return ctx->digest->init(ctx); |
| 201 | } | 208 | } |
| 202 | 209 | ||
| @@ -219,6 +226,8 @@ int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size) | |||
| 219 | int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size) | 226 | int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size) |
| 220 | { | 227 | { |
| 221 | int ret; | 228 | int ret; |
| 229 | |||
| 230 | OPENSSL_assert(ctx->digest->md_size <= EVP_MAX_MD_SIZE); | ||
| 222 | ret=ctx->digest->final(ctx,md); | 231 | ret=ctx->digest->final(ctx,md); |
| 223 | if (size != NULL) | 232 | if (size != NULL) |
| 224 | *size=ctx->digest->md_size; | 233 | *size=ctx->digest->md_size; |
| @@ -244,12 +253,14 @@ int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in) | |||
| 244 | EVPerr(EVP_F_EVP_MD_CTX_COPY,EVP_R_INPUT_NOT_INITIALIZED); | 253 | EVPerr(EVP_F_EVP_MD_CTX_COPY,EVP_R_INPUT_NOT_INITIALIZED); |
| 245 | return 0; | 254 | return 0; |
| 246 | } | 255 | } |
| 256 | #ifndef OPENSSL_NO_ENGINE | ||
| 247 | /* Make sure it's safe to copy a digest context using an ENGINE */ | 257 | /* Make sure it's safe to copy a digest context using an ENGINE */ |
| 248 | if (in->engine && !ENGINE_init(in->engine)) | 258 | if (in->engine && !ENGINE_init(in->engine)) |
| 249 | { | 259 | { |
| 250 | EVPerr(EVP_F_EVP_MD_CTX_COPY,ERR_R_ENGINE_LIB); | 260 | EVPerr(EVP_F_EVP_MD_CTX_COPY,ERR_R_ENGINE_LIB); |
| 251 | return 0; | 261 | return 0; |
| 252 | } | 262 | } |
| 263 | #endif | ||
| 253 | 264 | ||
| 254 | EVP_MD_CTX_cleanup(out); | 265 | EVP_MD_CTX_cleanup(out); |
| 255 | memcpy(out,in,sizeof *out); | 266 | memcpy(out,in,sizeof *out); |
| @@ -299,13 +310,15 @@ int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx) | |||
| 299 | ctx->digest->cleanup(ctx); | 310 | ctx->digest->cleanup(ctx); |
| 300 | if (ctx->digest && ctx->digest->ctx_size && ctx->md_data) | 311 | if (ctx->digest && ctx->digest->ctx_size && ctx->md_data) |
| 301 | { | 312 | { |
| 302 | memset(ctx->md_data,0,ctx->digest->ctx_size); | 313 | OPENSSL_cleanse(ctx->md_data,ctx->digest->ctx_size); |
| 303 | OPENSSL_free(ctx->md_data); | 314 | OPENSSL_free(ctx->md_data); |
| 304 | } | 315 | } |
| 316 | #ifndef OPENSSL_NO_ENGINE | ||
| 305 | if(ctx->engine) | 317 | if(ctx->engine) |
| 306 | /* The EVP_MD we used belongs to an ENGINE, release the | 318 | /* The EVP_MD we used belongs to an ENGINE, release the |
| 307 | * functional reference we held for this reason. */ | 319 | * functional reference we held for this reason. */ |
| 308 | ENGINE_finish(ctx->engine); | 320 | ENGINE_finish(ctx->engine); |
| 321 | #endif | ||
| 309 | memset(ctx,'\0',sizeof *ctx); | 322 | memset(ctx,'\0',sizeof *ctx); |
| 310 | 323 | ||
| 311 | return 1; | 324 | return 1; |
