X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/80e2389990082500d76eb566d4946be3e786c3ef..d8f41ccd20de16f8ebe2ccc84d47bf1cb2b26bbb:/SecurityTests/clxutils/ocspTool/ocspUtils.cpp diff --git a/SecurityTests/clxutils/ocspTool/ocspUtils.cpp b/SecurityTests/clxutils/ocspTool/ocspUtils.cpp new file mode 100644 index 00000000..5084806c --- /dev/null +++ b/SecurityTests/clxutils/ocspTool/ocspUtils.cpp @@ -0,0 +1,50 @@ +#include +#include +#include "ocspUtils.h" +#include +#include +#include + + +/* + * Sign some data with an identity. + */ +OSStatus ocspSign( + SecIdentityRef idRef, + CSSM_DATA &plainText, + CSSM_ALGORITHMS algId, // RSA/SHA1, DSA/SHA1 + CSSM_DATA &sig) // caller must APP_FREE() +{ + const CSSM_KEY *privCssmKey; + OSStatus ortn; + SecKeyRef privKeyRef; + CSSM_CSP_HANDLE cspHand; + CSSM_RETURN crtn; + + ortn = SecIdentityCopyPrivateKey(idRef, &privKeyRef); + if(ortn) { + cssmPerror("SecIdentityCopyPrivateKey", ortn); + return ortn; + } + ortn = SecKeyGetCSSMKey(privKeyRef, &privCssmKey); + if(ortn) { + cssmPerror("SecKeyGetCSSMKey", ortn); + goto errOut; + } + ortn = SecKeyGetCSPHandle(privKeyRef, &cspHand); + if(ortn) { + cssmPerror("SecKeyGetCSPHandle", ortn); + goto errOut; + } + sig.Data = NULL; + sig.Length = 0; + crtn = cspSign(cspHand, algId, (CSSM_KEY_PTR)privCssmKey, + &plainText, &sig); + if(crtn) { + cssmPerror("cspSign", crtn); + ortn = crtn; + } +errOut: + CFRelease(privKeyRef); + return ortn; +}