diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/evp/evp_cipher.c | 142 |
1 files changed, 73 insertions, 69 deletions
diff --git a/src/lib/libcrypto/evp/evp_cipher.c b/src/lib/libcrypto/evp/evp_cipher.c index d8e802e94b..1ee52cb615 100644 --- a/src/lib/libcrypto/evp/evp_cipher.c +++ b/src/lib/libcrypto/evp/evp_cipher.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: evp_cipher.c,v 1.11 2024/01/02 21:12:25 tb Exp $ */ | 1 | /* $OpenBSD: evp_cipher.c,v 1.12 2024/01/02 21:24:42 tb 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 | * |
| @@ -643,33 +643,6 @@ EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *ctx) | |||
| 643 | } | 643 | } |
| 644 | 644 | ||
| 645 | int | 645 | int |
| 646 | EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *ctx, int key_len) | ||
| 647 | { | ||
| 648 | /* XXX - remove this. It's unused. */ | ||
| 649 | if (ctx->cipher->flags & EVP_CIPH_CUSTOM_KEY_LENGTH) | ||
| 650 | return EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_KEY_LENGTH, | ||
| 651 | key_len, NULL); | ||
| 652 | if (ctx->key_len == key_len) | ||
| 653 | return 1; | ||
| 654 | if (key_len > 0 && (ctx->cipher->flags & EVP_CIPH_VARIABLE_LENGTH)) { | ||
| 655 | ctx->key_len = key_len; | ||
| 656 | return 1; | ||
| 657 | } | ||
| 658 | EVPerror(EVP_R_INVALID_KEY_LENGTH); | ||
| 659 | return 0; | ||
| 660 | } | ||
| 661 | |||
| 662 | int | ||
| 663 | EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *ctx, int pad) | ||
| 664 | { | ||
| 665 | if (pad) | ||
| 666 | ctx->flags &= ~EVP_CIPH_NO_PADDING; | ||
| 667 | else | ||
| 668 | ctx->flags |= EVP_CIPH_NO_PADDING; | ||
| 669 | return 1; | ||
| 670 | } | ||
| 671 | |||
| 672 | int | ||
| 673 | EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr) | 646 | EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr) |
| 674 | { | 647 | { |
| 675 | int ret; | 648 | int ret; |
| @@ -740,6 +713,10 @@ EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in) | |||
| 740 | return 1; | 713 | return 1; |
| 741 | } | 714 | } |
| 742 | 715 | ||
| 716 | /* | ||
| 717 | * EVP_CIPHER_CTX accessors. | ||
| 718 | */ | ||
| 719 | |||
| 743 | const EVP_CIPHER * | 720 | const EVP_CIPHER * |
| 744 | EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx) | 721 | EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx) |
| 745 | { | 722 | { |
| @@ -752,47 +729,6 @@ EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx) | |||
| 752 | return ctx->encrypt; | 729 | return ctx->encrypt; |
| 753 | } | 730 | } |
| 754 | 731 | ||
| 755 | void * | ||
| 756 | EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx) | ||
| 757 | { | ||
| 758 | return ctx->app_data; | ||
| 759 | } | ||
| 760 | |||
| 761 | void | ||
| 762 | EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data) | ||
| 763 | { | ||
| 764 | ctx->app_data = data; | ||
| 765 | } | ||
| 766 | |||
| 767 | void * | ||
| 768 | EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx) | ||
| 769 | { | ||
| 770 | return ctx->cipher_data; | ||
| 771 | } | ||
| 772 | |||
| 773 | void * | ||
| 774 | EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data) | ||
| 775 | { | ||
| 776 | void *old_cipher_data; | ||
| 777 | |||
| 778 | old_cipher_data = ctx->cipher_data; | ||
| 779 | ctx->cipher_data = cipher_data; | ||
| 780 | |||
| 781 | return old_cipher_data; | ||
| 782 | } | ||
| 783 | |||
| 784 | unsigned char * | ||
| 785 | EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx) | ||
| 786 | { | ||
| 787 | return ctx->buf; | ||
| 788 | } | ||
| 789 | |||
| 790 | int | ||
| 791 | EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx) | ||
| 792 | { | ||
| 793 | return ctx->key_len; | ||
| 794 | } | ||
| 795 | |||
| 796 | int | 732 | int |
| 797 | EVP_CIPHER_CTX_get_iv(const EVP_CIPHER_CTX *ctx, unsigned char *iv, size_t len) | 733 | EVP_CIPHER_CTX_get_iv(const EVP_CIPHER_CTX *ctx, unsigned char *iv, size_t len) |
| 798 | { | 734 | { |
| @@ -831,6 +767,57 @@ EVP_CIPHER_CTX_set_iv(EVP_CIPHER_CTX *ctx, const unsigned char *iv, size_t len) | |||
| 831 | return 1; | 767 | return 1; |
| 832 | } | 768 | } |
| 833 | 769 | ||
| 770 | unsigned char * | ||
| 771 | EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx) | ||
| 772 | { | ||
| 773 | return ctx->buf; | ||
| 774 | } | ||
| 775 | |||
| 776 | void * | ||
| 777 | EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx) | ||
| 778 | { | ||
| 779 | return ctx->app_data; | ||
| 780 | } | ||
| 781 | |||
| 782 | void | ||
| 783 | EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data) | ||
| 784 | { | ||
| 785 | ctx->app_data = data; | ||
| 786 | } | ||
| 787 | |||
| 788 | int | ||
| 789 | EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx) | ||
| 790 | { | ||
| 791 | return ctx->key_len; | ||
| 792 | } | ||
| 793 | |||
| 794 | int | ||
| 795 | EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *ctx, int key_len) | ||
| 796 | { | ||
| 797 | /* XXX - remove this. It's unused. */ | ||
| 798 | if (ctx->cipher->flags & EVP_CIPH_CUSTOM_KEY_LENGTH) | ||
| 799 | return EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_SET_KEY_LENGTH, | ||
| 800 | key_len, NULL); | ||
| 801 | if (ctx->key_len == key_len) | ||
| 802 | return 1; | ||
| 803 | if (key_len > 0 && (ctx->cipher->flags & EVP_CIPH_VARIABLE_LENGTH)) { | ||
| 804 | ctx->key_len = key_len; | ||
| 805 | return 1; | ||
| 806 | } | ||
| 807 | EVPerror(EVP_R_INVALID_KEY_LENGTH); | ||
| 808 | return 0; | ||
| 809 | } | ||
| 810 | |||
| 811 | int | ||
| 812 | EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *ctx, int pad) | ||
| 813 | { | ||
| 814 | if (pad) | ||
| 815 | ctx->flags &= ~EVP_CIPH_NO_PADDING; | ||
| 816 | else | ||
| 817 | ctx->flags |= EVP_CIPH_NO_PADDING; | ||
| 818 | return 1; | ||
| 819 | } | ||
| 820 | |||
| 834 | void | 821 | void |
| 835 | EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags) | 822 | EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags) |
| 836 | { | 823 | { |
| @@ -849,6 +836,23 @@ EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags) | |||
| 849 | return (ctx->flags & flags); | 836 | return (ctx->flags & flags); |
| 850 | } | 837 | } |
| 851 | 838 | ||
| 839 | void * | ||
| 840 | EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx) | ||
| 841 | { | ||
| 842 | return ctx->cipher_data; | ||
| 843 | } | ||
| 844 | |||
| 845 | void * | ||
| 846 | EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data) | ||
| 847 | { | ||
| 848 | void *old_cipher_data; | ||
| 849 | |||
| 850 | old_cipher_data = ctx->cipher_data; | ||
| 851 | ctx->cipher_data = cipher_data; | ||
| 852 | |||
| 853 | return old_cipher_data; | ||
| 854 | } | ||
| 855 | |||
| 852 | /* | 856 | /* |
| 853 | * EVP_CIPHER_CTX getters that reach into the cipher attachted to the contex. | 857 | * EVP_CIPHER_CTX getters that reach into the cipher attachted to the contex. |
| 854 | */ | 858 | */ |
