/* * Copyright (c) 2000-2001 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. */ // // keyclient // #ifndef _H_CDSA_CLIENT_KEYCLIENT #define _H_CDSA_CLIENT_KEYCLIENT 1 #include #include namespace Security { namespace CssmClient { // // Key // class KeyImpl : public ObjectImpl, public AclClient, public CssmKey { public: KeyImpl(const CSP &csp); KeyImpl(const CSP &csp, CSSM_KEY &key); KeyImpl(const CSP &csp, const CSSM_DATA &keyData); virtual ~KeyImpl(); CSP csp() const { return parent(); } void deleteKey(const CSSM_ACCESS_CREDENTIALS *cred); // Acl manipulation void getAcl(const char *selectionTag, AutoAclEntryInfoList &aclInfos) const; void changeAcl(const CSSM_ACCESS_CREDENTIALS *accessCred, const CSSM_ACL_EDIT &aclEdit); // Acl owner manipulation void getOwner(AutoAclOwnerPrototype &owner) const; void changeOwner(const CSSM_ACCESS_CREDENTIALS *accessCred, const CSSM_ACL_OWNER_PROTOTYPE &newOwner); // Call this after completing the CSSM API call after having called Key::makeNewKey() void activate(); protected: void deactivate(); }; class Key : public Object { public: typedef KeyImpl Impl; explicit Key(Impl *impl) : Object(impl) {} Key() : Object(NULL) {} Key(const CSP &csp, CSSM_KEY &key) : Object(new Impl(csp, key)) {} Key(const CSP &csp, CSSM_DATA &keyData) : Object(new Impl(csp, keyData)) {} // Creates an inactive key, client must call activate() after this. Key(const CSP &csp) : Object(new Impl(csp)) {} Impl *operator ->() const { return (*this) ? &impl() : NULL; } Impl &operator *() const { return impl(); } // Conversion operators to CssmKey baseclass. operator const CssmKey * () const { return (*this) ? &(**this) : NULL; } operator const CssmKey & () const { return **this; } // Creates an inactive key, client must call activate() after this. CssmKey *makeNewKey(const CSP &csp) { (*this) = Key(csp); return &(**this); } }; struct KeySpec { uint32 usage; uint32 attributes; const CssmData *label; //add rc context KeySpec(uint32 u, uint32 a) : usage(u), attributes(a), label(NULL) { } KeySpec(uint32 u, uint32 a, const CssmData &l) : usage(u), attributes(a), label(&l) { } }; } // end namespace CssmClient } // end namespace Security #endif // _H_CDSA_CLIENT_KEYCLIENT