]> git.saurik.com Git - apple/security.git/blobdiff - SecurityTests/clxutils/ocspTool/ocspUtils.cpp
Security-57031.1.35.tar.gz
[apple/security.git] / SecurityTests / clxutils / ocspTool / ocspUtils.cpp
diff --git a/SecurityTests/clxutils/ocspTool/ocspUtils.cpp b/SecurityTests/clxutils/ocspTool/ocspUtils.cpp
new file mode 100644 (file)
index 0000000..5084806
--- /dev/null
@@ -0,0 +1,50 @@
+#include <ctype.h>
+#include <strings.h>
+#include "ocspUtils.h"
+#include <utilLib/cspwrap.h>
+#include <Security/SecKey.h>
+#include <Security/SecKeyPriv.h>
+
+
+/*
+ * 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;
+}