--- /dev/null
+/*
+ * 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