X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/b04fe171f0375ecd5d8a24747ca1dff85720a0ca..6b200bc335dc93c5516ccb52f14bd896d8c7fad7:/SecurityTests/clxutils/cgVerifyParsed/tpVerifyParsed.cpp?ds=sidebyside diff --git a/SecurityTests/clxutils/cgVerifyParsed/tpVerifyParsed.cpp b/SecurityTests/clxutils/cgVerifyParsed/tpVerifyParsed.cpp deleted file mode 100644 index 5eb22641..00000000 --- a/SecurityTests/clxutils/cgVerifyParsed/tpVerifyParsed.cpp +++ /dev/null @@ -1,178 +0,0 @@ - /* - * tpVerifyParsed.cpp - wrapper for CSSM_TP_CertGroupVerify using parsd anchors. - */ - -#include -#include "tpVerifyParsed.h" -#include -#include -#include -#include -#include -#include -#include - -/* - * The main task is converting a set of CSSM_DATA-style anchors into a - * SecParsedRootCertArrayRef. - */ - -/* raw cert --> SecParsedRootCert */ -static int parseRootCert( - CSSM_CL_HANDLE clHand, - const CSSM_DATA &certData, - SecParsedRootCert &parsedRoot) -{ - try { - CertParser cert(clHand, certData); - uint32 len = 0; - const void *p = cert.fieldForOid(CSSMOID_X509V1SubjectName, len); - appCopyData(p, len, &parsedRoot.subject); - - /* skip key and times, I think they are going away */ - appCopyCssmData(&certData, &parsedRoot.certData); - return 0; - } - catch(...) { - printf("CertParser threw!\n"); - return -1; - } -} - -static void freeParsedRoot( - SecParsedRootCert &parsedRoot) -{ - if(parsedRoot.subject.Data) { - CSSM_FREE(parsedRoot.subject.Data); - } - if(parsedRoot.certData.Data) { - CSSM_FREE(parsedRoot.certData.Data); - } -} - -static int createParsedCertArray( - CSSM_CL_HANDLE clHand, - unsigned numAnchorCerts, - CSSM_DATA_PTR anchorCerts, - SecParsedRootCertArrayRef *arrayRef) // RETURNED -{ - SecParsedRootCertArray *outArray = (SecParsedRootCertArray *)malloc(sizeof(*outArray)); - memset(outArray, 0, sizeof(*outArray)); - unsigned len = sizeof(SecParsedRootCert) * numAnchorCerts; - outArray->roots = (SecParsedRootCert *)malloc(len); - memset(outArray->roots, 0, len); - for(unsigned dex=0; dexroots[dex])) { - return -1; - } - } - outArray->numRoots = numAnchorCerts; - *arrayRef = outArray; - return 0; -} - -static void freeParsedCertArray( - SecParsedRootCertArrayRef arrayRef) -{ - for(unsigned dex=0; dexnumRoots; dex++) { - freeParsedRoot(arrayRef->roots[dex]); - } - free(arrayRef->roots); - free((void *)arrayRef); -} - -CSSM_RETURN tpCertGroupVerifyParsed( - CSSM_TP_HANDLE tpHand, - CSSM_CL_HANDLE clHand, - CSSM_CSP_HANDLE cspHand, - CSSM_DL_DB_LIST_PTR dbListPtr, - const CSSM_OID *policy, // optional - const CSSM_DATA *fieldOpts, // optional - const CSSM_DATA *actionData, // optional - void *policyOpts, - const CSSM_CERTGROUP *certGroup, - CSSM_DATA_PTR anchorCerts, - unsigned numAnchorCerts, - CSSM_TP_STOP_ON stopOn, // CSSM_TP_STOP_ON_POLICY, etc. - CSSM_TIMESTRING cssmTimeStr,// optional - CSSM_TP_VERIFY_CONTEXT_RESULT_PTR result) // optional, RETURNED -{ - /* main job is building a CSSM_TP_VERIFY_CONTEXT and its components */ - CSSM_TP_VERIFY_CONTEXT vfyCtx; - CSSM_TP_CALLERAUTH_CONTEXT authCtx; - - memset(&vfyCtx, 0, sizeof(CSSM_TP_VERIFY_CONTEXT)); - vfyCtx.Action = CSSM_TP_ACTION_DEFAULT; - if(actionData) { - vfyCtx.ActionData = *actionData; - } - else { - vfyCtx.ActionData.Data = NULL; - vfyCtx.ActionData.Length = 0; - } - vfyCtx.Cred = &authCtx; - - /* CSSM_TP_CALLERAUTH_CONTEXT components */ - /* - typedef struct cssm_tp_callerauth_context { - CSSM_TP_POLICYINFO Policy; - CSSM_TIMESTRING VerifyTime; - CSSM_TP_STOP_ON VerificationAbortOn; - CSSM_TP_VERIFICATION_RESULTS_CALLBACK CallbackWithVerifiedCert; - uint32 NumberOfAnchorCerts; - CSSM_DATA_PTR AnchorCerts; - CSSM_DL_DB_LIST_PTR DBList; - CSSM_ACCESS_CREDENTIALS_PTR CallerCredentials; - } CSSM_TP_CALLERAUTH_CONTEXT, *CSSM_TP_CALLERAUTH_CONTEXT_PTR; - */ - /* zero or one policy here */ - CSSM_FIELD policyId; - if(policy != NULL) { - policyId.FieldOid = (CSSM_OID)*policy; - authCtx.Policy.NumberOfPolicyIds = 1; - authCtx.Policy.PolicyIds = &policyId; - if(fieldOpts != NULL) { - policyId.FieldValue = *fieldOpts; - } - else { - policyId.FieldValue.Data = NULL; - policyId.FieldValue.Length = 0; - } - } - else { - authCtx.Policy.NumberOfPolicyIds = 0; - authCtx.Policy.PolicyIds = NULL; - } - authCtx.Policy.PolicyControl = policyOpts; - authCtx.VerifyTime = cssmTimeStr; // may be NULL - authCtx.VerificationAbortOn = stopOn; - authCtx.CallbackWithVerifiedCert = NULL; - - /* here's the difference between this and tpCertGroupVerify */ - SecParsedRootCertArrayRef arrayRef = NULL; - if(numAnchorCerts) { - if(createParsedCertArray(clHand, numAnchorCerts, anchorCerts, &arrayRef)) { - return -1; - } - authCtx.NumberOfAnchorCerts = APPLE_TP_PARSED_ANCHOR_INDICATOR; - authCtx.AnchorCerts = (CSSM_DATA_PTR)arrayRef; - } - else { - authCtx.NumberOfAnchorCerts = 0; - authCtx.AnchorCerts = NULL; - } - authCtx.DBList = dbListPtr; - authCtx.CallerCredentials = NULL; - - CSSM_RETURN crtn = CSSM_TP_CertGroupVerify(tpHand, - clHand, - cspHand, - certGroup, - &vfyCtx, - result); - - if(arrayRef) { - freeParsedCertArray(arrayRef); - } - return crtn; -}