+++ /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.
- */
-
-
-//
-// miscAlgFactory.h - miscellaneous algorithm factory
-// Written by Doug Mitchell 3/28/2001
-//
-
-#include "miscAlgFactory.h"
-#include <aescspi.h>
-#include <gladmanContext.h>
-#include "desContext.h"
-#include "rc2Context.h"
-#include "rc4Context.h"
-#include "rc5Context.h"
-#include "MacContext.h"
-#include "DigestContext.h"
-#include "SHA1_MD5_Object.h" /* raw digest */
-#include "SHA2_Object.h"
-#include "MD2Object.h"
-#include "NullCryptor.h"
-#include "bfContext.h"
-#include "castContext.h"
-#include <Security/cssmapple.h>
-
-/*
- * These #defines are mainly to facilitate measuring the performance of our own
- * implementation vs. the ones in BSafe. This factory gets called first; if
- * we disable e.g. DES here the BSAFE version will be used.
- */
-#ifdef BSAFE_CSP_ENABLE
-
-#define MAF_DES_ENABLE 0
-#define MAF_DES3_ENABLE 0
-#define MAF_RC2_ENABLE 0
-#define MAF_RC4_ENABLE 0
-#define MAF_RC5_ENABLE 0
-#define MAF_MAC_ENABLE 0
-
-#else /* !BSAFE_CSP_ENABLE, normal case */
-
-#define MAF_DES_ENABLE 1
-#define MAF_DES3_ENABLE 1
-#define MAF_RC2_ENABLE 1
-#define MAF_RC4_ENABLE 1
-#define MAF_RC5_ENABLE 1
-#define MAF_MAC_ENABLE 1
-
-#endif /* BSAFE_CSP_ENABLE */
-
-#if (!MAF_DES_ENABLE || !MAF_DES3_ENABLE || !MAF_RC2_ENABLE || !MAF_RC4_ENABLE || \
- !MAF_RC5_ENABLE || !MAF_MAC_ENABLE)
-#warning Internal DES/RC2/RC4/RC5/Mac implementation disabled!
-#endif
-
-bool MiscAlgFactory::setup(
- AppleCSPSession &session,
- CSPFullPluginSession::CSPContext * &cspCtx,
- const Context &context)
-{
- CSSM_CONTEXT_TYPE ctype = context.type();
- CSSM_ALGORITHMS alg = context.algorithm();
-
- switch(ctype) {
- case CSSM_ALGCLASS_SYMMETRIC:
- switch(alg) {
- case CSSM_ALGID_AES:
- if(cspCtx == NULL) {
- /*
- * Get optional block size to determine correct implementation
- */
- uint32 blockSize = context.getInt(CSSM_ATTRIBUTE_BLOCK_SIZE);
- if(blockSize == 0) {
- blockSize = GLADMAN_BLOCK_SIZE_BYTES;
- }
- if(GLADMAN_AES_128_ENABLE &&
- (blockSize == GLADMAN_BLOCK_SIZE_BYTES)) {
- cspCtx = new GAESContext(session);
- }
- else {
- cspCtx = new AESContext(session);
- }
- }
- return true;
-
- #if MAF_DES_ENABLE
- case CSSM_ALGID_DES:
- if(cspCtx == NULL) {
- cspCtx = new DESContext(session);
- }
- return true;
- #endif /* MAF_DES_ENABLE */
-
- #if MAF_DES3_ENABLE
- /*
- * TripleDES: for some reason, cssmtype.h defines different symbols
- * for CSSM_ALGID_3DES_3KEY (key gen) and CSSM_ALGID_3DES_3KEY_EDE
- * (an encrypt alg with mode), but they define to the same value.
- */
- case CSSM_ALGID_3DES_3KEY_EDE:
- if(cspCtx == NULL) {
- cspCtx = new DES3Context(session);
- }
- return true;
- #endif
-
- #if MAF_RC2_ENABLE
- case CSSM_ALGID_RC2:
- if(cspCtx == NULL) {
- cspCtx = new RC2Context(session);
- }
- return true;
- #endif
-
- #if MAF_RC4_ENABLE
- case CSSM_ALGID_RC4:
- if(cspCtx == NULL) {
- cspCtx = new RC4Context(session);
- }
- return true;
- #endif
-
- #if MAF_RC5_ENABLE
- case CSSM_ALGID_RC5:
- if(cspCtx == NULL) {
- cspCtx = new RC5Context(session);
- }
- return true;
- #endif
-
- case CSSM_ALGID_BLOWFISH:
- if(cspCtx == NULL) {
- cspCtx = new BlowfishContext(session);
- }
- return true;
-
- case CSSM_ALGID_CAST:
- case CSSM_ALGID_CAST5:
- if(cspCtx == NULL) {
- cspCtx = new CastContext(session);
- }
- return true;
-
- #if NULL_CRYPT_ENABLE
- case CSSM_ALGID_NONE:
- if(cspCtx == NULL) {
- cspCtx = new NullCryptor(session);
- }
- return true;
- #endif /* NULL_CRYPT_ENABLE */
-
- default:
- break; // not our symmetric alg
- } // switch alg for symmetric
- break; // from case CSSM_ALGCLASS_SYMMETRIC
-
- /* digest algorithms always enabled here */
- case CSSM_ALGCLASS_DIGEST:
- switch(alg) {
- case CSSM_ALGID_SHA1:
- if(cspCtx == NULL) {
- /* reuse is OK */
- cspCtx = new DigestContext(session,
- *(new SHA1Object));
- }
- return true;
- case CSSM_ALGID_MD5:
- if(cspCtx == NULL) {
- /* reuse is OK */
- cspCtx = new DigestContext(session,
- *(new MD5Object));
- }
- return true;
- case CSSM_ALGID_MD2:
- if(cspCtx == NULL) {
- /* reuse is OK */
- cspCtx = new DigestContext(session,
- *(new MD2Object));
- }
- return true;
- case CSSM_ALGID_SHA224:
- if(cspCtx == NULL) {
- /* reuse is OK */
- cspCtx = new DigestContext(session,
- *(new SHA224Object));
- }
- return true;
- case CSSM_ALGID_SHA256:
- if(cspCtx == NULL) {
- /* reuse is OK */
- cspCtx = new DigestContext(session,
- *(new SHA256Object));
- }
- return true;
- case CSSM_ALGID_SHA384:
- if(cspCtx == NULL) {
- /* reuse is OK */
- cspCtx = new DigestContext(session,
- *(new SHA384Object));
- }
- return true;
- case CSSM_ALGID_SHA512:
- if(cspCtx == NULL) {
- /* reuse is OK */
- cspCtx = new DigestContext(session,
- *(new SHA512Object));
- }
- return true;
- default:
- break; // not our digest alg
- } // switch digest alg
- break; // from case CSSM_ALGCLASS_DIGEST
-
- case CSSM_ALGCLASS_KEYGEN:
- switch(alg) {
- case CSSM_ALGID_AES:
- if(cspCtx == NULL) {
- cspCtx = new AESKeyGenContext(session);
- }
- return true;
-
- #if MAF_DES_ENABLE
- case CSSM_ALGID_DES:
- if(cspCtx == NULL) {
- cspCtx = new AppleSymmKeyGenerator(session,
- DES_KEY_SIZE_BITS_EXTERNAL,
- DES_KEY_SIZE_BITS_EXTERNAL,
- true); // must be byte size
- }
- return true;
- #endif /* MAF_DES_ENABLE */
-
- #if MAF_DES3_ENABLE
- case CSSM_ALGID_3DES_3KEY_EDE:
- if(cspCtx == NULL) {
- cspCtx = new AppleSymmKeyGenerator(session,
- DES3_KEY_SIZE_BYTES * 8,
- DES3_KEY_SIZE_BYTES * 8,
- true); // must be byte size
- }
- return true;
- #endif
-
- #if MAF_RC2_ENABLE
- case CSSM_ALGID_RC2:
- if(cspCtx == NULL) {
- cspCtx = new AppleSymmKeyGenerator(session,
- RC2_MIN_KEY_SIZE_BYTES * 8,
- RC2_MAX_KEY_SIZE_BYTES * 8,
- true); // must be byte size
- }
- return true;
- #endif
-
- #if MAF_RC4_ENABLE
- case CSSM_ALGID_RC4:
- if(cspCtx == NULL) {
- cspCtx = new AppleSymmKeyGenerator(session,
- kCCKeySizeMinRC4 * 8,
- kCCKeySizeMaxRC4 * 8,
- true); // must be byte size
- }
- return true;
- #endif
-
- #if MAF_RC5_ENABLE
- case CSSM_ALGID_RC5:
- if(cspCtx == NULL) {
- cspCtx = new AppleSymmKeyGenerator(session,
- RC5_MIN_KEY_SIZE_BYTES * 8,
- RC5_MAX_KEY_SIZE_BYTES * 8,
- true); // must be byte size
- }
- return true;
- #endif
-
- case CSSM_ALGID_BLOWFISH:
- if(cspCtx == NULL) {
- cspCtx = new AppleSymmKeyGenerator(session,
- BF_MIN_KEY_SIZE_BYTES * 8,
- BF_MAX_KEY_SIZE_BYTES * 8,
- true); // must be byte size
- }
- return true;
-
- /* Note we require keys to be ALGID_CAST, not ALGID_CAST5 */
- case CSSM_ALGID_CAST:
- if(cspCtx == NULL) {
- cspCtx = new AppleSymmKeyGenerator(session,
- kCCKeySizeMinCAST * 8,
- kCCKeySizeMaxCAST * 8,
- true); // must be byte size
- }
- return true;
-
- #if MAF_MAC_ENABLE
- case CSSM_ALGID_SHA1HMAC:
- if(cspCtx == NULL) {
- cspCtx = new AppleSymmKeyGenerator(session,
- HMAC_SHA_MIN_KEY_SIZE * 8,
- HMAC_MAX_KEY_SIZE * 8,
- true); // must be byte size
- }
- return true;
- case CSSM_ALGID_MD5HMAC:
- if(cspCtx == NULL) {
- cspCtx = new AppleSymmKeyGenerator(session,
- HMAC_MD5_MIN_KEY_SIZE * 8,
- HMAC_MAX_KEY_SIZE * 8,
- true); // must be byte size
- }
- return true;
- #endif
-
- #if NULL_CRYPT_ENABLE
- case CSSM_ALGID_NONE:
- if(cspCtx == NULL) {
- cspCtx = new AppleSymmKeyGenerator(session,
- NULL_CRYPT_BLOCK_SIZE * 8,
- NULL_CRYPT_BLOCK_SIZE * 8,
- true); // must be byte size
- }
- return true;
- #endif /* NULL_CRYPT_ENABLE */
-
- default:
- break; // not our keygen alg
- } // switch alg for keygen
- break; // from case CSSM_ALGCLASS_KEYGEN
-
- case CSSM_ALGCLASS_MAC:
- switch(alg) {
- #if MAF_MAC_ENABLE
- case CSSM_ALGID_SHA1HMAC:
- case CSSM_ALGID_MD5HMAC:
- if(cspCtx == NULL) {
- cspCtx = new MacContext(session, alg);
- }
- return true;
- #endif
- #if CRYPTKIT_CSP_ENABLE
- case CSSM_ALGID_SHA1HMAC_LEGACY:
- if(cspCtx == NULL) {
- cspCtx = new MacLegacyContext(session, alg);
- }
- return true;
- #endif
- default:
- /* not our mac alg */
- break;
- }
- break;
-
- default:
- break; // not our context type
- } // switch context type
-
- /* not ours */
- return false;
-}