]> git.saurik.com Git - apple/security.git/blobdiff - SecurityTests/clxutils/p12Parse/pkcs12Utils.cpp
Security-57740.51.3.tar.gz
[apple/security.git] / SecurityTests / clxutils / p12Parse / pkcs12Utils.cpp
diff --git a/SecurityTests/clxutils/p12Parse/pkcs12Utils.cpp b/SecurityTests/clxutils/p12Parse/pkcs12Utils.cpp
deleted file mode 100644 (file)
index c496bed..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Copyright (c) 2003,2005 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.
- */
-
-/*
- * pkcs12Utils.cpp - standalone copies of utility functions from libsecurity_pkcs12
- */
-
-#include "pkcs12Utils.h"
-#include <string.h>
-#include <Security/oidsalg.h>
-#include <security_asn1/nssUtils.h>
-
-/* CSSM_DATA --> uint32. Returns true if OK. */
-bool p12DataToInt(
-       const CSSM_DATA &cdata,
-       uint32 &u)
-{
-       if((cdata.Length == 0) || (cdata.Data == NULL)) {
-               /* default/not present */
-               u = 0;
-               return true;
-       }
-       uint32 len = cdata.Length;
-       if(len > sizeof(uint32)) {
-               return false;
-       }
-       
-       uint32 rtn = 0;
-       uint8 *cp = cdata.Data;
-       for(uint32 i=0; i<len; i++) {
-               rtn = (rtn << 8) | *cp++;
-       }
-       u = rtn;
-       return true;
-}
-
-/*
- * OIDS for P12 and PKCS5 v1.5 (PBES1) encrypt and decrypt map to the following
- * attributes.
- */
-typedef struct {
-       const CSSM_OID          *oid;
-       CSSM_ALGORITHMS         keyAlg;         // e.g., CSSM_ALGID_DES
-       CSSM_ALGORITHMS         encrAlg;        // e.g., CSSM_ALGID_3DES_3KEY_EDE
-       CSSM_ALGORITHMS         pbeHashAlg;     // SHA1 or MD5
-       uint32                          keySizeInBits;
-       uint32                          blockSizeInBytes;       // for IV, optional
-       CSSM_PADDING            padding;        // CSSM_PADDING_PKCS7, etc.
-       CSSM_ENCRYPT_MODE       mode;           // CSSM_ALGMODE_CBCPadIV8, etc.
-       PKCS_Which                      pkcs;           // PW_PKCS12 (for this module) or PW_PKCS5_v1_5
-} PKCSOidInfo;
-
-static const PKCSOidInfo pkcsOidInfos[] = {
-       /* PKCS12 first, the ones this module uses */
-       { 
-               &CSSMOID_PKCS12_pbeWithSHAAnd128BitRC4,
-               CSSM_ALGID_RC4,
-               CSSM_ALGID_RC4,
-               CSSM_ALGID_SHA1,
-               128,
-               0,                                      // RC4 is a stream cipher
-               CSSM_PADDING_NONE,
-               CSSM_ALGMODE_NONE,
-               PW_PKCS12
-       },
-       { 
-               &CSSMOID_PKCS12_pbeWithSHAAnd40BitRC4,
-               CSSM_ALGID_RC4,
-               CSSM_ALGID_RC4,
-               CSSM_ALGID_SHA1,
-               40,
-               0,                                      // RC4 is a stream cipher
-               CSSM_PADDING_NONE,
-               CSSM_ALGMODE_NONE,
-               PW_PKCS12
-       },
-       { 
-               &CSSMOID_PKCS12_pbeWithSHAAnd3Key3DESCBC,
-               CSSM_ALGID_3DES_3KEY,
-               CSSM_ALGID_3DES_3KEY_EDE,
-               CSSM_ALGID_SHA1,
-               64 * 3,
-               8,      
-               CSSM_PADDING_PKCS7,
-               CSSM_ALGMODE_CBCPadIV8,
-               PW_PKCS12
-       },
-       { 
-               &CSSMOID_PKCS12_pbeWithSHAAnd2Key3DESCBC,
-               CSSM_ALGID_3DES_2KEY,
-               CSSM_ALGID_3DES_2KEY_EDE,
-               CSSM_ALGID_SHA1,
-               64 * 2,
-               8,      
-               CSSM_PADDING_PKCS7,
-               CSSM_ALGMODE_CBCPadIV8,
-               PW_PKCS12
-       },
-       { 
-               &CSSMOID_PKCS12_pbeWithSHAAnd128BitRC2CBC,
-               CSSM_ALGID_RC2,
-               CSSM_ALGID_RC2,
-               CSSM_ALGID_SHA1,
-               128,
-               8,      
-               CSSM_PADDING_PKCS7,
-               CSSM_ALGMODE_CBCPadIV8,
-               PW_PKCS12
-       },
-       { 
-               &CSSMOID_PKCS12_pbewithSHAAnd40BitRC2CBC,
-               CSSM_ALGID_RC2,
-               CSSM_ALGID_RC2,
-               CSSM_ALGID_SHA1,
-               40,
-               8,      
-               CSSM_PADDING_PKCS7,
-               CSSM_ALGMODE_CBCPadIV8,
-               PW_PKCS12
-       },
-       
-       /* PKCS5 v1.5, used for SecImportExport module */
-       {
-               &CSSMOID_PKCS5_pbeWithMD2AndDES,
-               CSSM_ALGID_DES,
-               CSSM_ALGID_DES,
-               CSSM_ALGID_MD2,
-               64,
-               8,
-               CSSM_PADDING_PKCS7,
-               CSSM_ALGMODE_CBCPadIV8,
-               PW_PKCS5_v1_5
-       },
-       {
-               &CSSMOID_PKCS5_pbeWithMD2AndRC2,
-               CSSM_ALGID_RC2,
-               CSSM_ALGID_RC2,
-               CSSM_ALGID_MD2,
-               64,
-               8,
-               CSSM_PADDING_PKCS7,
-               CSSM_ALGMODE_CBCPadIV8,
-               PW_PKCS5_v1_5
-       },
-       {
-               &CSSMOID_PKCS5_pbeWithMD5AndDES,
-               CSSM_ALGID_DES,
-               CSSM_ALGID_DES,
-               CSSM_ALGID_MD5,
-               64,
-               8,
-               CSSM_PADDING_PKCS7,
-               CSSM_ALGMODE_CBCPadIV8,
-               PW_PKCS5_v1_5
-       },
-       {
-               &CSSMOID_PKCS5_pbeWithMD5AndRC2,
-               CSSM_ALGID_RC2,
-               CSSM_ALGID_RC2,
-               CSSM_ALGID_MD5,
-               64,
-               8,
-               CSSM_PADDING_PKCS7,
-               CSSM_ALGMODE_CBCPadIV8,
-               PW_PKCS5_v1_5
-       },
-       {
-               &CSSMOID_PKCS5_pbeWithSHA1AndDES,
-               CSSM_ALGID_DES,
-               CSSM_ALGID_DES,
-               CSSM_ALGID_SHA1,
-               64,
-               8,
-               CSSM_PADDING_PKCS7,
-               CSSM_ALGMODE_CBCPadIV8,
-               PW_PKCS5_v1_5
-       },
-       {
-               &CSSMOID_PKCS5_pbeWithSHA1AndRC2,
-               CSSM_ALGID_RC2,
-               CSSM_ALGID_RC2,
-               CSSM_ALGID_SHA1,
-               64,
-               8,
-               CSSM_PADDING_PKCS7,
-               CSSM_ALGMODE_CBCPadIV8,
-               PW_PKCS5_v1_5
-       },
-       
-       /* finally one for PKCS5 v2.0, which has its own means of 
-        * cooking up all the parameters */
-       {
-               &CSSMOID_PKCS5_PBES2,
-               CSSM_ALGID_NONE,
-               CSSM_ALGID_NONE,
-               CSSM_ALGID_NONE,
-               0, 0, 0, 0, 
-               PW_PKCS5_v2
-       }
-};
-
-#define NUM_PKCS_OID_INFOS (sizeof(pkcsOidInfos) / sizeof(pkcsOidInfos[1]))
-
-/* map an OID to the components */
-/* returns false if OID not found */
-
-/* 
- * NOTE: as of March 8 2004 this is also used by the SecImportExport
- * module...not just PKCS12!
- */
-bool pkcsOidToParams(
-       const CSSM_OID          *oid,
-       CSSM_ALGORITHMS         &keyAlg,                // e.g., CSSM_ALGID_DES
-       CSSM_ALGORITHMS         &encrAlg,               // e.g., CSSM_ALGID_3DES_3KEY_EDE
-       CSSM_ALGORITHMS         &pbeHashAlg,    // SHA1 or MD5
-       uint32                          &keySizeInBits,
-       uint32                          &blockSizeInBytes,      // for IV, optional
-       CSSM_PADDING            &padding,               // CSSM_PADDING_PKCS7, etc.
-       CSSM_ENCRYPT_MODE       &mode,                  // CSSM_ALGMODE_CBCPadIV8, etc.
-       PKCS_Which                      &pkcs)                  // PW_PKCS5_v1_5 or PW_PKCS12
-{
-       const PKCSOidInfo *info = pkcsOidInfos;
-       pkcs = PW_None;
-       
-       for(unsigned dex=0; dex<NUM_PKCS_OID_INFOS; dex++) {
-               if(nssCompareCssmData(oid, info->oid)) {
-                       keyAlg                   = info->keyAlg;
-                       encrAlg                  = info->encrAlg;
-                       pbeHashAlg               = info->pbeHashAlg;
-                       keySizeInBits    = info->keySizeInBits;
-                       blockSizeInBytes = info->blockSizeInBytes;
-                       padding                  = info->padding;
-                       mode                     = info->mode;
-                       pkcs                     = info->pkcs;
-                       return true;
-               }
-               info++;
-       }
-       return false;
-}
-
-/*
- * Enum to string mappper.
- * Maybe DEBUG only.
- */
-/*
- * Each type of attribute has a name/value pair in a table of these:
- */
-typedef struct {
-       unsigned                value;
-       const char              *name;
-} p12NameValuePair;
-
-/* declare one entry in a table of p12NameValuePair */
-#define NVP(attr)              {attr, #attr}
-
-/* the NULL entry which terminates all p12NameValuePair tables */
-#define NVP_END                {0, NULL}
-
-static const p12NameValuePair p7CITypeNames[] = 
-{
-       NVP(CT_None),
-       NVP(CT_Data),
-       NVP(CT_SignedData),
-       NVP(CT_EnvData),
-       NVP(CT_SignedEnvData),
-       NVP(CT_DigestData),
-       NVP(CT_EncryptedData),
-       NVP_END
-};
-
-static const p12NameValuePair p12BagTypeNames[] = 
-{
-       NVP(BT_None),
-       NVP(BT_KeyBag),
-       NVP(BT_ShroudedKeyBag),
-       NVP(BT_CertBag),
-       NVP(BT_CrlBag),
-       NVP(BT_SecretBag),
-       NVP(BT_SafeContentsBag),
-       NVP_END
-};
-
-static const char *typeToStr(
-       unsigned type,
-       const p12NameValuePair *table)
-{
-       while(table->name) {
-               if(table->value == type) {
-                       return table->name;
-               }
-               table++;
-       }
-       return "Unknown";
-}
-
-const char *p12BagTypeStr(
-       NSS_P12_SB_Type type)
-{
-       return typeToStr(type, p12BagTypeNames);
-}
-
-const char *p7ContentInfoTypeStr(
-       NSS_P7_CI_Type type)
-{
-       return typeToStr(type, p7CITypeNames);
-}