]> git.saurik.com Git - apple/security.git/blobdiff - libsecurity_cdsa_client/lib/dl_standard.cpp
Security-55163.44.tar.gz
[apple/security.git] / libsecurity_cdsa_client / lib / dl_standard.cpp
diff --git a/libsecurity_cdsa_client/lib/dl_standard.cpp b/libsecurity_cdsa_client/lib/dl_standard.cpp
new file mode 100644 (file)
index 0000000..961105a
--- /dev/null
@@ -0,0 +1,195 @@
+/*
+ * Copyright (c) 2000-2004 Apple Computer, 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.
+ */
+
+
+//
+// mds_standard - standard-defined MDS record types
+//
+#include <security_cdsa_client/dl_standard.h>
+#include <security_cdsa_client/dlquery.h>
+
+
+namespace Security {
+namespace CssmClient {
+
+
+//
+// CDSA Common relation (one record per module)
+//
+static const char * const commonAttributes[] = {
+       "PrintName",
+       "Alias",
+       NULL
+};
+DLCommonFields::DLCommonFields(const char * const * names)
+       : Record(commonAttributes)
+{
+       addAttributes(names);
+}
+
+string DLCommonFields::printName() const                       { return mAttributes[0]; }
+string DLCommonFields::alias() const
+       { return mAttributes[1].size() ? string(mAttributes[1]) : "(no value)"; }
+
+
+//
+// The all-record-types pseudo-record
+//
+AllDLRecords::AllDLRecords()
+       : DLCommonFields(NULL)
+{ }
+
+
+//
+// CDSA Generic record attributes
+//
+static const char * const genericAttributes[] = {
+       NULL
+};
+GenericRecord::GenericRecord()
+       : DLCommonFields(genericAttributes)
+{
+}
+
+
+//
+// Apple "Generic Password" records
+//
+static const char * const genericPasswordAttributes[] = {
+       // if you find yourself here, you should add the attributes and their functions
+       NULL
+};
+GenericPasswordRecord::GenericPasswordRecord()
+       : DLCommonFields(genericPasswordAttributes)
+{
+}
+
+
+//
+// Common key attributes
+//
+static const char * const keyAttributes[] = {
+       "KeyClass",
+       "KeyType",
+       "KeySizeInBits",
+       "EffectiveKeySize",
+       "Label",
+       "ApplicationTag",
+       "Permanent",
+       "Private",
+       "Modifiable",
+       "Sensitive",
+       "AlwaysSensitive",
+       "Extractable",
+       "NeverExtractable",
+       "Encrypt",
+       "Decrypt",
+       "Derive",
+       "Sign",
+       "Verify",
+       "Wrap",
+       "Unwrap",
+       NULL
+};
+
+KeyRecord::KeyRecord()
+       : DLCommonFields(keyAttributes)
+{
+}
+
+uint32 KeyRecord::keyClass() const                             { return mAttributes[2]; }
+uint32 KeyRecord::type() const                                 { return mAttributes[3]; }
+uint32 KeyRecord::size() const                                 { return mAttributes[4]; }
+uint32 KeyRecord::effectiveSize() const                        { return mAttributes[5]; }
+const CssmData &KeyRecord::label() const               { return mAttributes[6]; }
+const CssmData &KeyRecord::applicationTag() const { return mAttributes[7]; }
+bool KeyRecord::isPermanent() const                            { return mAttributes[8]; }
+bool KeyRecord::isPrivate() const                              { return mAttributes[9]; }
+bool KeyRecord::isModifiable() const                   { return mAttributes[10]; }
+bool KeyRecord::isSensitive() const                            { return mAttributes[11]; }
+bool KeyRecord::wasAlwaysSensitive() const             { return mAttributes[12]; }
+bool KeyRecord::isExtractable() const                  { return mAttributes[13]; }
+bool KeyRecord::wasNeverExtractable() const            { return mAttributes[14]; }
+bool KeyRecord::canEncrypt() const                             { return mAttributes[15]; }
+bool KeyRecord::canDecrypt() const                             { return mAttributes[16]; }
+bool KeyRecord::canDerive() const                              { return mAttributes[17]; }
+bool KeyRecord::canSign() const                                        { return mAttributes[18]; }
+bool KeyRecord::canVerify() const                              { return mAttributes[19]; }
+bool KeyRecord::canWrap() const                                        { return mAttributes[20]; }
+bool KeyRecord::canUnwrap() const                              { return mAttributes[21]; }
+
+
+//
+// Certificate attributes
+//
+static const char * const certAttributes[] = {
+       "CertType",
+       "CertEncoding",
+       "Subject",
+       "Issuer",
+       "SerialNumber",
+       "SubjectKeyIdentifier",
+       "PublicKeyHash",
+       NULL
+};
+
+X509CertRecord::X509CertRecord()
+       : DLCommonFields(certAttributes)
+{
+}
+
+CSSM_CERT_TYPE X509CertRecord::type() const    { return mAttributes[2]; }
+CSSM_CERT_ENCODING X509CertRecord::encoding() const    { return mAttributes[3]; }
+const CssmData &X509CertRecord::subject() const        { return mAttributes[4]; }
+const CssmData &X509CertRecord::issuer() const { return mAttributes[5]; }
+const CssmData &X509CertRecord::serial() const { return mAttributes[6]; }
+const CssmData &X509CertRecord::subjectKeyIdentifier() const { return mAttributes[7]; }
+const CssmData &X509CertRecord::publicKeyHash() const { return mAttributes[8]; }
+
+
+//
+// UnlockReferral attributes
+//
+static const char * const unlockReferralAttributes[] = {
+       "Type",
+       "DbName",
+       "DbNetname",
+       "DbGuid",
+       "DbSSID",
+       "DbSSType",
+       "KeyLabel",
+       "KeyAppTag",
+       NULL
+};
+
+UnlockReferralRecord::UnlockReferralRecord()
+       : DLCommonFields(unlockReferralAttributes)
+{
+}
+
+uint32 UnlockReferralRecord::type() const              { return mAttributes[2]; }
+string UnlockReferralRecord::dbName() const            { return mAttributes[3]; }
+const CssmData &UnlockReferralRecord::dbNetname() const { return mAttributes[4]; }
+const Guid &UnlockReferralRecord::dbGuid() const { return mAttributes[5]; }
+uint32 UnlockReferralRecord::dbSSID() const            { return mAttributes[6]; }
+uint32 UnlockReferralRecord::dbSSType() const  { return mAttributes[7]; }
+const CssmData &UnlockReferralRecord::keyLabel() const { return mAttributes[8]; }
+const CssmData &UnlockReferralRecord::keyApplicationTag() const { return mAttributes[9]; }
+
+
+} // end namespace CssmClient
+} // end namespace Security