diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2008-03-28 13:15:39 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2008-03-28 13:15:39 +0000 |
commit | eb9d8d8cd4ef3b1b6e1a14954c5b16438c27abf9 (patch) | |
tree | b2abdf97a493a30fb6d9944222fd134d35166361 /crypto/cms/cms_smime.c | |
parent | f7ccba3edf9f1f02d7bd3b019d7bc96f25a95718 (diff) | |
download | openssl-eb9d8d8cd4ef3b1b6e1a14954c5b16438c27abf9.tar.gz |
Support for verification of signed receipts.
Diffstat (limited to 'crypto/cms/cms_smime.c')
-rw-r--r-- | crypto/cms/cms_smime.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/crypto/cms/cms_smime.c b/crypto/cms/cms_smime.c index 6388df89d1..b37d17c5af 100644 --- a/crypto/cms/cms_smime.c +++ b/crypto/cms/cms_smime.c @@ -65,18 +65,19 @@ static int cms_copy_content(BIO *out, BIO *in, unsigned int flags) int r = 0, i; BIO *tmpout = NULL; - if(flags & CMS_TEXT) - { + if (out == NULL) + tmpout = BIO_new(BIO_s_null()); + else if (flags & CMS_TEXT) tmpout = BIO_new(BIO_s_mem()); - if(!tmpout) - { - CMSerr(CMS_F_CMS_COPY_CONTENT,ERR_R_MALLOC_FAILURE); - goto err; - } - } else tmpout = out; + if(!tmpout) + { + CMSerr(CMS_F_CMS_COPY_CONTENT,ERR_R_MALLOC_FAILURE); + goto err; + } + /* Read all content through chain to process digest, decrypt etc */ for (;;) { @@ -419,6 +420,17 @@ int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, return ret; } +int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, + STACK_OF(X509) *certs, + X509_STORE *store, unsigned int flags) + { + int r; + r = CMS_verify(rcms, certs, store, NULL, NULL, flags); + if (r <= 0) + return r; + return cms_Receipt_verify(rcms, ocms); + } + CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, unsigned int flags) { |