+++ /dev/null
-/*
- * 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.
- */
-
-
-//
-// BinaryKey.h - CSP-wide BinaryKey base class
-//
-
-#ifndef _H_BINARY_KEY_
-#define _H_BINARY_KEY_
-
-#include <Security/cssmtype.h>
-#include <security_cdsa_utilities/cssmkey.h>
-
-// opaque key reference type
-typedef CSSM_INTPTR KeyRef;
-
-class AppleCSPSession;
-
-/*
- * unique blob type passed to generateKeyBlob() for key digest calculation
- */
-#define CSSM_KEYBLOB_RAW_FORMAT_DIGEST \
- (CSSM_KEYBLOB_RAW_FORMAT_VENDOR_DEFINED + 0x12345)
-
-
-// frame for Binary key; all modules (BSAFE, CryptKit) must subclass
-// this and add a member whose type is the native raw key object.
-// Subclasses must implement constructor, destructor, and generateKeyBlob().
-class BinaryKey
-{
-public:
- BinaryKey() : mKeyRef(0), mDescData(Allocator::standard()) { }
- virtual ~BinaryKey() { mKeyRef = 0; }
-
- /*
- * Generate raw key blob.
- * The format argument is an in/out parameter and is optionally used
- * to request a specific keyblob format for providers which can generate
- * multipleĆformats. This value comes from an optional
- * CSSM_ATTRIBUTE_{PUBLIC,PRIVATE,SYMMETRIC}_KEY_FORMAT attribute in the current
- * context. If so such attribute is present, the default value
- * CSSM_KEYBLOB_RAW_FORMAT_NONE is specified as the default input param.
- *
- * All BinaryKeys must handle the special case format
- * CSSM_KEYBLOB_RAW_FORMAT_DIGEST, which creates a blob suitable for use
- * in calcuating the digest of the key blob.
- *
- * The session and paramKey arguments facilitate the conversion of a partial
- * BinaryKey to a fully formed raw key, i.e., a null wrap to get a fully formed
- * raw key. The attrFlags aregument is used to indicate that this operation
- * did in fact convert a partial binary key to a fully formed raw key
- * (in which case the subclass clears the CSSM_KEYATTR_PARTIAL bit
- * in attrFlags before returning).
- */
- virtual void generateKeyBlob(
- Allocator &allocator,
- CssmData &blob,
- CSSM_KEYBLOB_FORMAT &format, // in/out, CSSM_KEYBLOB_RAW_FORMAT_PKCS1,
- // etc.
- AppleCSPSession &session,
- const CssmKey *paramKey, // optional
- CSSM_KEYATTR_FLAGS &attrFlags) // IN/OUT
-
- {
- CssmError::throwMe(CSSMERR_CSP_FUNCTION_NOT_IMPLEMENTED);
- }
-
- CssmKey::Header mKeyHeader;
- KeyRef mKeyRef;
- const CssmData &descData() { return mDescData; }
- void descData(const CssmData &inDescData)
- { mDescData.copy(inDescData); }
-
-private:
- /* optional DescriptiveData specified by app during WrapKey */
- CssmAutoData mDescData;
-};
-
-// Binary key representing a symmetric key.
-class SymmetricBinaryKey : public BinaryKey
-{
-public:
- SymmetricBinaryKey(
- unsigned keySizeInBits);
- ~SymmetricBinaryKey();
- void generateKeyBlob(
- Allocator &allocator,
- CssmData &blob,
- CSSM_KEYBLOB_FORMAT &format, /* CSSM_KEYBLOB_RAW_FORMAT_PKCS1, etc. */
- AppleCSPSession &session,
- const CssmKey *paramKey, /* optional, unused here */
- CSSM_KEYATTR_FLAGS &attrFlags); /* IN/OUT */
-
- CssmData mKeyData;
- Allocator &mAllocator;
-};
-
-/*
- * Stateless function to cook up a BinaryKey given a
- * symmetric CssmKey in RAW format. Returns true on
- * success, false if we can't deal with this type of key,
- * throws exception on other runtime errors.
- */
-bool symmetricCssmKeyToBinary(
- const CssmKey &cssmKey,
- BinaryKey **binKey); // RETURNED
-
-#endif // _H_BINARY_KEY_
-