diff options
author | mcgreer%netscape.com <devnull@localhost> | 2000-09-29 16:38:11 +0000 |
---|---|---|
committer | mcgreer%netscape.com <devnull@localhost> | 2000-09-29 16:38:11 +0000 |
commit | b68d781e44a218afebcb0241fb0be436bbfac0ea (patch) | |
tree | 31052364c2b4bce43558f3f33ac2d705c415e03e | |
parent | 7c27aba7cb4cca8b1f1b559caf0266e212d7da64 (diff) | |
download | nss-hg-b68d781e44a218afebcb0241fb0be436bbfac0ea.tar.gz |
add a shortcut encoder routine.
-rw-r--r-- | security/nss/lib/smime/cms.h | 11 | ||||
-rw-r--r-- | security/nss/lib/smime/cmsutil.c | 28 |
2 files changed, 39 insertions, 0 deletions
diff --git a/security/nss/lib/smime/cms.h b/security/nss/lib/smime/cms.h index 86e07c64b..205a60f97 100644 --- a/security/nss/lib/smime/cms.h +++ b/security/nss/lib/smime/cms.h @@ -1066,6 +1066,17 @@ NSS_CMSDigestContext_FinishSingle(NSSCMSDigestContext *cmsdigcx, PLArenaPool *po * ************************************************************************/ +/* shortcuts for basic use */ + +/* + * NSS_CMSDEREncode - DER Encode a CMS message, with input being + * the plaintext message and derOut being the output, + * stored in arena's pool. + */ +extern SECStatus +NSS_CMSDEREncode(NSSCMSMessage *cmsg, SECItem *input, SECItem *derOut, + PLArenaPool *arena); + /************************************************************************/ SEC_END_PROTOS diff --git a/security/nss/lib/smime/cmsutil.c b/security/nss/lib/smime/cmsutil.c index c71d144f6..77f79b4d3 100644 --- a/security/nss/lib/smime/cmsutil.c +++ b/security/nss/lib/smime/cmsutil.c @@ -360,3 +360,31 @@ NSS_CMSUtil_VerificationStatusToString(NSSCMSVerificationStatus vs) default: return "Unknown"; } } + +SECStatus +NSS_CMSDEREncode(NSSCMSMessage *cmsg, SECItem *input, SECItem *derOut, + PLArenaPool *arena) +{ + NSSCMSEncoderContext *ecx; + SECStatus rv = SECSuccess; + if (!cmsg || !derOut || !arena) { + PORT_SetError(SEC_ERROR_INVALID_ARGS); + return SECFailure; + } + ecx = NSS_CMSEncoder_Start(cmsg, 0, 0, derOut, arena, 0, 0, 0, 0, 0, 0); + if (!ecx) { + PORT_SetError(SEC_ERROR_LIBRARY_FAILURE); + return SECFailure; + } + if (input) { + rv = NSS_CMSEncoder_Update(ecx, input->data, input->len); + if (rv) { + PORT_SetError(SEC_ERROR_BAD_DATA); + } + } + rv |= NSS_CMSEncoder_Finish(ecx); + if (rv) { + PORT_SetError(SEC_ERROR_LIBRARY_FAILURE); + } + return rv; +} |