+++ /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.
- */
-
-
-//
-// AppleCSPContext.h - CSP-wide contexts
-//
-#ifndef _H_APPLE_CSP_CONTEXT
-#define _H_APPLE_CSP_CONTEXT
-
-#include <security_cdsa_plugin/CSPsession.h>
-#include "BinaryKey.h"
-
-//
-// Parent class for all CSPContexts implemented in this CSP.
-// Currently the only thing we add is a reference to our
-// creator's session.
-//
-class AppleCSPSession;
-
-class AppleCSPContext : public CSPFullPluginSession::CSPContext
-{
-public:
- AppleCSPContext(AppleCSPSession &session)
- : mSession(session) {}
-
- ~AppleCSPContext();
-
- /*
- * get symmetric key bits - context.key can be either ref or raw.
- * A convenience routine typically used by symmetric contexts'
- * init() routines.
- */
- static void symmetricKeyBits(
- const Context &context,
- AppleCSPSession &session,
- CSSM_ALGORITHMS requiredAlg, // throws if this doesn't match key alg
- CSSM_KEYUSE intendedUse, // throws if key usage doesn't match this
- uint8 *&keyBits, // RETURNED (not mallocd or copied)
- CSSM_SIZE &keyLen); // RETURNED
-
-protected:
- AppleCSPSession &session() { return mSession; }
-
-private:
- AppleCSPSession &mSession;
-};
-
-//
-// Context for CSSM_ALGID_APPLE_YARROW.
-//
-class YarrowContext : public AppleCSPContext
-{
-public:
- YarrowContext(AppleCSPSession &session);
- virtual ~YarrowContext();
- virtual void init(const Context &context, bool encoding = true);
- void final(CssmData &out);
- size_t outputSize(bool final, size_t inSize) { return outSize; }
-
-private:
- uint32 outSize;
-};
-
-//
-// Classes which inherit from AppleCSPContext and which also perform
-// key pair generation inherit from this class as well.
-//
-class AppleKeyPairGenContext {
-public:
- virtual ~AppleKeyPairGenContext();
-
- //
- // Subclass implements generate(const Context &, CssmKey &,
- // CssmKey &). That method (called from CSPFullPluginSession)
- // allocates two subclass-specific BinaryKeys and calls this
- // method. This will eventually call down to generate(const Context &,
- // BinaryKey &, BinaryKey &) and optionally to
- // BinaryKey::generateKeyBlob.
- //
- void generate(
- const Context &context,
- AppleCSPSession &session, // for ref keys
- CssmKey &pubKey,
- BinaryKey *pubBinKey,
- CssmKey &privKey,
- BinaryKey *privBinKey);
-
-protected:
- // Subclasses must implement this. It cooks up a key pair.
- virtual void generate(
- const Context &context,
- BinaryKey &pubBinKey, // valid on successful return
- BinaryKey &privBinKey, // ditto
- uint32 &keySize) = 0; // ditto
-};
-
-//
-// Classes which inherit from AppleCSPContext and which also perform
-// symmetric key generation inherit from this class as well.
-//
-class AppleSymmKeyGenContext {
-public:
- //
- // Subclass implements generate(const Context &, CssmKey &,
- // CssmKey &). Note that the second CssmKey is a dummy
- // argument. That method merely calls generateSymKey, allowing us
- // to get to the associated AppleCSPSession if we need to
- // store reference keys. We take care of all attribute and
- // usage validation and of header formatting. Parameters for
- // validation typlically specified in constructor via an
- // algorithm factory.
- //
- AppleSymmKeyGenContext(
- uint32 minSize, // in bits
- uint32 maxSize, // ditto
- bool byteSized) // true --> key size must
- // be multiple of 8 bits
- : minSizeInBits(minSize),
- maxSizeInBits(maxSize),
- mustBeByteSized(byteSized) {}
-
- void generateSymKey(
- const Context &context,
- AppleCSPSession &session, // for ref keys
- CssmKey &cssmKey); // RETURNED
-
-private:
- uint32 minSizeInBits;
- uint32 maxSizeInBits;
- bool mustBeByteSized;
-
-};
-
-/*
- * Generic symmetric key generation context, for algorithms whose
- * requirements can be expressed in min/max key size and
- * mustBeByteSized. Such algorithms just need create one of these
- * from an algorithm factory.
- */
-class AppleSymmKeyGenerator : public AppleCSPContext, private AppleSymmKeyGenContext {
-public:
- AppleSymmKeyGenerator(
- AppleCSPSession &session,
- uint32 minSize, // in bits
- uint32 maxSize, // ditto
- bool byteSized) : // true --> key size must
- // be multiple of 8 bits
- AppleCSPContext(session),
- AppleSymmKeyGenContext(minSize, maxSize, byteSized) { }
-
- void init(const Context &context, bool encoding = true) { }
-
- /* this just passes the request up to AppleSymmKeyGenContext */
- void generate(
- const Context &context,
- CssmKey &symKey,
- CssmKey &dummyKey) {
- AppleSymmKeyGenContext::generateSymKey(
- context,
- session(),
- symKey);
- }
-
-};
-
-#endif /* _H_APPLE_CSP_CONTEXT */