]> git.saurik.com Git - apple/security.git/blobdiff - OSX/libsecurity_apple_x509_cl/lib/CLFieldsCommon.h
Security-57336.1.9.tar.gz
[apple/security.git] / OSX / libsecurity_apple_x509_cl / lib / CLFieldsCommon.h
diff --git a/OSX/libsecurity_apple_x509_cl/lib/CLFieldsCommon.h b/OSX/libsecurity_apple_x509_cl/lib/CLFieldsCommon.h
new file mode 100644 (file)
index 0000000..b9e9343
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2000-2002,2011,2014 Apple Inc. All Rights Reserved.
+ * 
+ * The contents of this file constitute Original Code as defined in and are
+ * subject to the Apple Public Source License Version 1.2 (the 'License').
+ * You may not use this file except in compliance with the License. Please obtain
+ * a copy of the License at http://www.apple.com/publicsource and read it before
+ * using this file.
+ * 
+ * This Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
+ * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
+ * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
+ * specific language governing rights and limitations under the License.
+ */
+
+
+/*
+ * CLFieldsCommon.h - get/set/free routines common to certs and CRLs
+ */
+
+#ifndef        _CL_FIELDS_COMMON_H_
+#define _CL_FIELDS_COMMON_H_
+
+#include <Security/cssmtype.h>
+#include <security_cdsa_utilities/cssmdata.h>
+
+#include "DecodedItem.h"
+
+#include <security_utilities/globalizer.h>
+
+#include <Security/X509Templates.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * As of the NSS conversion, getField ops do NOT take a const
+ * DecodedItem argument since many of them use the DecodedItem's
+ * SecNssCoder for intermediate ops.
+ */
+typedef bool (getItemFieldFcn) (
+       DecodedItem                     &item,
+       unsigned                        index,                  // which occurrence (0 = first)
+       uint32                          &numFields,             // RETURNED
+       CssmOwnedData           &fieldValue);   // RETURNED
+typedef void (setItemFieldFcn) (
+       DecodedItem                     &item,
+       const CssmData          &fieldValue);
+typedef void (freeFieldFcn) (
+       CssmOwnedData           &fieldValue);
+
+bool clOidToNssInfo(
+       const CSSM_OID                  &oid,
+       unsigned                                &nssObjLen,             // RETURNED
+       const SecAsn1Template   *&templ);               // RETURNED
+
+/*
+ * Routines for common validity checking for certificateToSign fields.
+ *
+ * Call from setField*: verify field isn't already set, optionally validate
+ * input length
+ */
+void tbsSetCheck(
+       void                            *fieldToSet,
+       const CssmData          &fieldValue,
+       uint32                          expLength,
+       const char                      *op);
+
+/*
+ * Call from getField* for unique fields - detect missing field or 
+ * index out of bounds.
+ */
+bool tbsGetCheck(
+       const void                      *requiredField,
+       uint32                          reqIndex);
+
+/* common extension get/set/free */
+void getFieldExtenCommon(
+       void                            *cdsaObj,                       // e.g. CE_KeyUsage
+                                                                                       // CSSM_DATA_PTR for berEncoded
+       const DecodedExten &decodedExt, 
+       CssmOwnedData           &fieldValue); 
+       
+CSSM_X509_EXTENSION_PTR verifySetFreeExtension(
+       const CssmData          &fieldValue,
+       bool                            berEncoded);            // false: value in value.parsedValue
+                                                                                       // true : value in BERValue
+void freeFieldExtenCommon(
+       CSSM_X509_EXTENSION_PTR exten,
+       Allocator                       &alloc);
+
+/*
+ * Common code for get/set subject/issuer name (C struct version)
+ */
+bool getField_RDN_NSS (
+       const NSS_Name          &nssName,
+       CssmOwnedData           &fieldValue);   // RETURNED
+
+void freeField_RDN  (
+       CssmOwnedData           &fieldValue);
+
+/* get normalized RDN */
+bool getField_normRDN_NSS (
+       const CSSM_DATA         &derName,
+       uint32                          &numFields,             // RETURNED (if successful, 0 or 1)
+       CssmOwnedData           &fieldValue);   // RETURNED
+
+/*
+ * Common code for Time fields - Validity not before/after, this/next update
+ * Format: CSSM_X509_TIME
+ */
+void freeField_Time (
+       CssmOwnedData   &fieldValue);
+
+bool getField_TimeNSS (
+       const NSS_Time  &derTime,
+       unsigned                index,                  // which occurrence (0 = first)
+       uint32                  &numFields,             // RETURNED
+       CssmOwnedData   &fieldValue);   // RETURNED
+void setField_TimeNSS (
+       const CssmData  &fieldValue,
+       NSS_Time                &nssTime,
+       SecNssCoder             &coder);
+
+void getField_AlgIdNSS (
+       const CSSM_X509_ALGORITHM_IDENTIFIER    &srcAlgId,
+       CssmOwnedData                                                   &fieldValue);   // RETURNED
+void setField_AlgIdNSS (
+       const CssmData                                  &fieldValue,
+       CSSM_X509_ALGORITHM_IDENTIFIER  &dstAlgId,
+       SecNssCoder                                             &coder);
+
+void freeField_AlgId (
+       CssmOwnedData                           &fieldValue);
+
+getItemFieldFcn getFieldUnknownExt, getField_Unimplemented;
+setItemFieldFcn setFieldUnknownExt, setField_ReadOnly;
+freeFieldFcn freeFieldUnknownExt, freeFieldSimpleExtension;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CL_FIELDS_COMMON_H_ */