diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2013-07-17 15:21:31 +0100 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2013-10-01 14:01:18 +0100 |
commit | 9d1e475db6a74724816230b110a72ca98e731636 (patch) | |
tree | 5f81c5d5f6992366836fc370053bdded829b9a4d /apps/cms.c | |
parent | 3e792793f6bd74e3a753c1b104417ba2b162f4f5 (diff) |
Custom key wrap option for cms utility.
(cherry picked from commit 5711885a2b31bfb623fb3738ce92a4cce4316bc7)
Diffstat (limited to 'apps/cms.c')
-rw-r--r-- | apps/cms.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/apps/cms.c b/apps/cms.c index 2e734bdf27..d15e203f9c 100644 --- a/apps/cms.c +++ b/apps/cms.c @@ -122,7 +122,7 @@ int MAIN(int argc, char **argv) STACK_OF(OPENSSL_STRING) *sksigners = NULL, *skkeys = NULL; char *certfile = NULL, *keyfile = NULL, *contfile=NULL; char *certsoutfile = NULL; - const EVP_CIPHER *cipher = NULL; + const EVP_CIPHER *cipher = NULL, *wrap_cipher = NULL; CMS_ContentInfo *cms = NULL, *rcms = NULL; X509_STORE *store = NULL; X509 *cert = NULL, *recip = NULL, *signer = NULL; @@ -217,6 +217,8 @@ int MAIN(int argc, char **argv) cipher = EVP_des_ede3_cbc(); else if (!strcmp (*args, "-des")) cipher = EVP_des_cbc(); + else if (!strcmp (*args, "-des3-wrap")) + wrap_cipher = EVP_des_ede3_wrap(); #endif #ifndef OPENSSL_NO_SEED else if (!strcmp (*args, "-seed")) @@ -237,6 +239,12 @@ int MAIN(int argc, char **argv) cipher = EVP_aes_192_cbc(); else if (!strcmp(*args,"-aes256")) cipher = EVP_aes_256_cbc(); + else if (!strcmp(*args,"-aes128-wrap")) + wrap_cipher = EVP_aes_128_wrap(); + else if (!strcmp(*args,"-aes192-wrap")) + wrap_cipher = EVP_aes_192_wrap(); + else if (!strcmp(*args,"-aes256-wrap")) + wrap_cipher = EVP_aes_256_wrap(); #endif #ifndef OPENSSL_NO_CAMELLIA else if (!strcmp(*args,"-camellia128")) @@ -1005,6 +1013,14 @@ int MAIN(int argc, char **argv) if (!cms_set_pkey_param(pctx, kparam->param)) goto end; } + if (CMS_RecipientInfo_type(ri) == CMS_RECIPINFO_AGREE + && wrap_cipher) + { + EVP_CIPHER_CTX *wctx; + wctx = CMS_RecipientInfo_kari_get0_ctx(ri); + EVP_EncryptInit_ex(wctx, wrap_cipher, + NULL, NULL, NULL); + } } if (secret_key) |