2 * Copyright (c) 2004,2008 Apple Inc. All Rights Reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
21 * @APPLE_LICENSE_HEADER_END@
26 // tokenkey - remote reference key on an attached hardware token
29 #include "tokendatabase.h"
33 // Construct a TokenKey from a reference handle and key header
35 TokenKey::TokenKey(TokenDatabase
&db
, KeyHandle tokenKey
, const CssmKey::Header
&hdr
)
36 : Key(db
), mKey(tokenKey
), mHeader(hdr
)
38 db
.addReference(*this);
43 // Destruction of a TokenKey releases the reference from tokend
48 database().token().tokend().releaseKey(mKey
);
50 secinfo("tokendb", "%p release key handle %u threw (ignored)",
57 // Links through the object mesh
59 TokenDatabase
&TokenKey::database() const
61 return referent
<TokenDatabase
>();
64 Token
&TokenKey::token()
66 return database().token();
69 GenericHandle
TokenKey::tokenHandle() const
71 return mKey
; // tokend-side handle
76 // Canonical external attributes (taken directly from the key header)
78 CSSM_KEYATTR_FLAGS
TokenKey::attributes()
80 return mHeader
.attributes();
85 // Return-to-caller processing (trivial in this case)
87 void TokenKey::returnKey(Handle
&h
, CssmKey::Header
&hdr
)
97 AclKind
TokenKey::aclKind() const
104 // Right now, key ACLs are at the process level
106 SecurityServerAcl
&TokenKey::acl()
113 // The related database is, naturally enough, the TokenDatabase we're in
115 Database
*TokenKey::relatedDatabase()
122 // Generate the canonical key digest.
123 // This is not currently supported through tokend. If we need it,
124 // we'll have to force unlock and fake it (in tokend, most likely).
126 const CssmData
&TokenKey::canonicalDigest()
128 CssmError::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED
);