diff options
author | miod <> | 2014-11-09 19:12:18 +0000 |
---|---|---|
committer | miod <> | 2014-11-09 19:12:18 +0000 |
commit | a3c50c7d270773c83559454fd2b75ec6e04f43ab (patch) | |
tree | f2bf66bee1b6810bdd5feaf8e64d47fde890a658 /src | |
parent | eddb1ac4a1d54fc83b963d3de0d639285a026d4c (diff) | |
download | openbsd-a3c50c7d270773c83559454fd2b75ec6e04f43ab.tar.gz openbsd-a3c50c7d270773c83559454fd2b75ec6e04f43ab.tar.bz2 openbsd-a3c50c7d270773c83559454fd2b75ec6e04f43ab.zip |
Introduce EVP_MD_CTX_ctrl(), to allow for fine control of a given digest.
This functionality was already available (and optional), and used in the
bowels of the ASN.1 code. This exposes it as a public interface, which will
be used by the upcoming GOST code.
Crank libcrypto minor version.
From Dmitry Eremin-Solenikov.
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/crypto/shlib_version | 2 | ||||
-rw-r--r-- | src/lib/libcrypto/evp/digest.c | 26 | ||||
-rw-r--r-- | src/lib/libcrypto/shlib_version | 2 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/evp/digest.c | 26 |
4 files changed, 52 insertions, 4 deletions
diff --git a/src/lib/libcrypto/crypto/shlib_version b/src/lib/libcrypto/crypto/shlib_version index 10f084cda1..869b6116df 100644 --- a/src/lib/libcrypto/crypto/shlib_version +++ b/src/lib/libcrypto/crypto/shlib_version | |||
@@ -1,2 +1,2 @@ | |||
1 | major=30 | 1 | major=30 |
2 | minor=1 | 2 | minor=2 |
diff --git a/src/lib/libcrypto/evp/digest.c b/src/lib/libcrypto/evp/digest.c index a1be18ee22..4a18aff657 100644 --- a/src/lib/libcrypto/evp/digest.c +++ b/src/lib/libcrypto/evp/digest.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: digest.c,v 1.23 2014/07/13 11:14:02 miod Exp $ */ | 1 | /* $OpenBSD: digest.c,v 1.24 2014/11/09 19:12:18 miod Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -375,3 +375,27 @@ EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx) | |||
375 | 375 | ||
376 | return 1; | 376 | return 1; |
377 | } | 377 | } |
378 | |||
379 | int | ||
380 | EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int type, int arg, void *ptr) | ||
381 | { | ||
382 | int ret; | ||
383 | |||
384 | if (!ctx->digest) { | ||
385 | EVPerr(EVP_F_EVP_MD_CTX_CTRL, EVP_R_NO_CIPHER_SET); | ||
386 | return 0; | ||
387 | } | ||
388 | |||
389 | if (!ctx->digest->md_ctrl) { | ||
390 | EVPerr(EVP_F_EVP_MD_CTX_CTRL, EVP_R_CTRL_NOT_IMPLEMENTED); | ||
391 | return 0; | ||
392 | } | ||
393 | |||
394 | ret = ctx->digest->md_ctrl(ctx, type, arg, ptr); | ||
395 | if (ret == -1) { | ||
396 | EVPerr(EVP_F_EVP_MD_CTX_CTRL, | ||
397 | EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED); | ||
398 | return 0; | ||
399 | } | ||
400 | return ret; | ||
401 | } | ||
diff --git a/src/lib/libcrypto/shlib_version b/src/lib/libcrypto/shlib_version index 10f084cda1..869b6116df 100644 --- a/src/lib/libcrypto/shlib_version +++ b/src/lib/libcrypto/shlib_version | |||
@@ -1,2 +1,2 @@ | |||
1 | major=30 | 1 | major=30 |
2 | minor=1 | 2 | minor=2 |
diff --git a/src/lib/libssl/src/crypto/evp/digest.c b/src/lib/libssl/src/crypto/evp/digest.c index a1be18ee22..4a18aff657 100644 --- a/src/lib/libssl/src/crypto/evp/digest.c +++ b/src/lib/libssl/src/crypto/evp/digest.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: digest.c,v 1.23 2014/07/13 11:14:02 miod Exp $ */ | 1 | /* $OpenBSD: digest.c,v 1.24 2014/11/09 19:12:18 miod Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -375,3 +375,27 @@ EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx) | |||
375 | 375 | ||
376 | return 1; | 376 | return 1; |
377 | } | 377 | } |
378 | |||
379 | int | ||
380 | EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int type, int arg, void *ptr) | ||
381 | { | ||
382 | int ret; | ||
383 | |||
384 | if (!ctx->digest) { | ||
385 | EVPerr(EVP_F_EVP_MD_CTX_CTRL, EVP_R_NO_CIPHER_SET); | ||
386 | return 0; | ||
387 | } | ||
388 | |||
389 | if (!ctx->digest->md_ctrl) { | ||
390 | EVPerr(EVP_F_EVP_MD_CTX_CTRL, EVP_R_CTRL_NOT_IMPLEMENTED); | ||
391 | return 0; | ||
392 | } | ||
393 | |||
394 | ret = ctx->digest->md_ctrl(ctx, type, arg, ptr); | ||
395 | if (ret == -1) { | ||
396 | EVPerr(EVP_F_EVP_MD_CTX_CTRL, | ||
397 | EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED); | ||
398 | return 0; | ||
399 | } | ||
400 | return ret; | ||
401 | } | ||