/ OSX / libsecurity_cdsa_client / lib / dl_standard.h
dl_standard.h
  1  /*
  2   * Copyright (c) 2004,2011,2014 Apple Inc. All Rights Reserved.
  3   * 
  4   * The contents of this file constitute Original Code as defined in and are
  5   * subject to the Apple Public Source License Version 1.2 (the 'License').
  6   * You may not use this file except in compliance with the License. Please obtain
  7   * a copy of the License at http://www.apple.com/publicsource and read it before
  8   * using this file.
  9   * 
 10   * This Original Code and all software distributed under the License are
 11   * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
 12   * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
 13   * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 14   * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
 15   * specific language governing rights and limitations under the License.
 16   */
 17  
 18  
 19  //
 20  // dl_standard - standard-defined DL record types.
 21  //
 22  // These are the C++ record types corresponding to standard and Apple-defined
 23  // DL relations. Note that not all standard fields are included; only those
 24  // of particular interest to the implementation. Feel free to add field functions
 25  // as needed.
 26  //
 27  
 28  #ifndef _H_CDSA_CLIENT_DL_STANDARD
 29  #define _H_CDSA_CLIENT_DL_STANDARD
 30  
 31  #include <security_cdsa_client/dlclient.h>
 32  
 33  
 34  namespace Security {
 35  namespace CssmClient {
 36  
 37  
 38  //
 39  // All CDSA standard DL schemas contain these fields
 40  //
 41  class DLCommonFields : public Record {
 42  public:
 43  	DLCommonFields(const char * const * names);
 44  
 45  	string printName() const;
 46  	string alias() const;
 47  };
 48  
 49  
 50  //
 51  // A record type for all records in a DL, with PrintName (only)
 52  //
 53  class AllDLRecords : public DLCommonFields {
 54  public:
 55  	AllDLRecords();
 56  };
 57  
 58  
 59  //
 60  // The CDSA-standard "generic record" table
 61  //
 62  class GenericRecord : public DLCommonFields {
 63  public:
 64  	GenericRecord();
 65  	static const CSSM_DB_RECORDTYPE recordType = CSSM_DL_DB_RECORD_GENERIC;
 66  };
 67  
 68  
 69  //
 70  // Generic password records (Apple specific)
 71  //
 72  class GenericPasswordRecord : public DLCommonFields {
 73  public:
 74  	GenericPasswordRecord();
 75  	static const CSSM_DB_RECORDTYPE recordType = CSSM_DL_DB_RECORD_GENERIC_PASSWORD;
 76  };
 77  
 78  
 79  //
 80  // Key records
 81  //
 82  class KeyRecord : public DLCommonFields {
 83  public:
 84  	KeyRecord();
 85  	static const CSSM_DB_RECORDTYPE recordType = CSSM_DL_DB_RECORD_ALL_KEYS;
 86  
 87  	uint32 keyClass() const;
 88  	uint32 type() const;
 89  	uint32 size() const;
 90  	uint32 effectiveSize() const;
 91  	const CssmData &label() const;
 92  	const CssmData &applicationTag() const;
 93  	
 94  	// boolean attributes for classification
 95  	bool isPermanent() const;
 96  	bool isPrivate() const;
 97  	bool isModifiable() const;
 98  	bool isSensitive() const;
 99  	bool wasAlwaysSensitive() const;
100  	bool isExtractable() const;
101  	bool wasNeverExtractable() const;
102  	bool canEncrypt() const;
103  	bool canDecrypt() const;
104  	bool canDerive() const;
105  	bool canSign() const;
106  	bool canVerify() const;
107  	bool canWrap() const;
108  	bool canUnwrap() const;
109  };
110  
111  class PrivateKeyRecord : public KeyRecord {
112  public:
113  	static const CSSM_DB_RECORDTYPE recordType = CSSM_DL_DB_RECORD_PRIVATE_KEY;
114  };
115  
116  class PublicKeyRecord : public KeyRecord {
117  public:
118  	static const CSSM_DB_RECORDTYPE recordType = CSSM_DL_DB_RECORD_PUBLIC_KEY;
119  };
120  
121  class SymmetricKeyRecord : public KeyRecord {
122  public:
123  	static const CSSM_DB_RECORDTYPE recordType = CSSM_DL_DB_RECORD_SYMMETRIC_KEY;
124  };
125  
126  
127  //
128  // X509 Certificate records
129  //
130  class X509CertRecord : public DLCommonFields {
131  public:
132  	X509CertRecord();
133  	static const CSSM_DB_RECORDTYPE recordType = CSSM_DL_DB_RECORD_X509_CERTIFICATE;
134  	
135  	CSSM_CERT_TYPE type() const;
136  	CSSM_CERT_ENCODING encoding() const;
137  	const CssmData &subject() const;
138  	const CssmData &issuer() const;
139  	const CssmData &serial() const;
140  	const CssmData &subjectKeyIdentifier() const;
141  	const CssmData &publicKeyHash() const;
142  };
143  
144  
145  //
146  // Unlock referral records
147  //
148  class UnlockReferralRecord : public DLCommonFields {
149  public:
150  	UnlockReferralRecord();
151  	static const CSSM_DB_RECORDTYPE recordType = CSSM_DL_DB_RECORD_UNLOCK_REFERRAL;
152  	
153  	uint32 type() const;
154  	string dbName() const;
155  	const CssmData &dbNetname() const;
156  	const Guid &dbGuid() const;
157  	uint32 dbSSID() const;
158  	uint32 dbSSType() const;
159  	const CssmData &keyLabel() const;
160  	const CssmData &keyApplicationTag() const;
161  };
162  
163  
164  } // end namespace CssmClient
165  } // end namespace Security
166  
167  #endif // _H_CDSA_CLIENT_DL_STANDARD