]> git.saurik.com Git - apple/security.git/blobdiff - Security/libsecurity_smime/lib/secoid.c
Security-57031.1.35.tar.gz
[apple/security.git] / Security / libsecurity_smime / lib / secoid.c
diff --git a/Security/libsecurity_smime/lib/secoid.c b/Security/libsecurity_smime/lib/secoid.c
new file mode 100644 (file)
index 0000000..ac33842
--- /dev/null
@@ -0,0 +1,1490 @@
+/*
+ * The contents of this file are subject to the Mozilla Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is the Netscape security libraries.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation.  Portions created by Netscape are
+ * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the
+ * terms of the GNU General Public License Version 2 or later (the
+ * "GPL"), in which case the provisions of the GPL are applicable
+ * instead of those above.  If you wish to allow use of your
+ * version of this file only under the terms of the GPL and not to
+ * allow others to use your version of this file under the MPL,
+ * indicate your decision by deleting the provisions above and
+ * replace them with the notice and other provisions required by
+ * the GPL.  If you do not delete the provisions above, a recipient
+ * may use your version of this file under either the MPL or the
+ * GPL.
+ */
+
+#include "secoid.h"
+#include "secitem.h"
+#include "plhash.h"
+
+#include <security_asn1/secerr.h>
+#include <Security/cssmapple.h>
+#include <pthread.h>
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-const-variable"
+
+/* MISSI Mosaic Object ID space */
+#define USGOV                   0x60, 0x86, 0x48, 0x01, 0x65
+#define MISSI                  USGOV, 0x02, 0x01, 0x01
+#define MISSI_OLD_KEA_DSS      MISSI, 0x0c
+#define MISSI_OLD_DSS          MISSI, 0x02
+#define MISSI_KEA_DSS          MISSI, 0x14
+#define MISSI_DSS              MISSI, 0x13
+#define MISSI_KEA               MISSI, 0x0a
+#define MISSI_ALT_KEA           MISSI, 0x16
+
+#define NISTALGS    USGOV, 3, 4
+#define AES         NISTALGS, 1
+#define SHAXXX      NISTALGS, 2
+
+/**
+ ** The Netscape OID space is allocated by Terry Hayes.  If you need
+ ** a piece of the space, contact him at thayes@netscape.com.
+ **/
+
+/* Netscape Communications Corporation Object ID space */
+/* { 2 16 840 1 113730 } */
+#define NETSCAPE_OID             0x60, 0x86, 0x48, 0x01, 0x86, 0xf8, 0x42
+#define NETSCAPE_CERT_EXT        NETSCAPE_OID, 0x01
+#define NETSCAPE_DATA_TYPE       NETSCAPE_OID, 0x02
+/* netscape directory oid - owned by Mark Smith (mcs@netscape.com) */
+#define NETSCAPE_DIRECTORY       NETSCAPE_OID, 0x03
+#define NETSCAPE_POLICY          NETSCAPE_OID, 0x04
+#define NETSCAPE_CERT_SERVER     NETSCAPE_OID, 0x05
+#define NETSCAPE_ALGS            NETSCAPE_OID, 0x06 /* algorithm OIDs */
+#define NETSCAPE_NAME_COMPONENTS  NETSCAPE_OID, 0x07
+
+#define NETSCAPE_CERT_EXT_AIA     NETSCAPE_CERT_EXT, 0x10
+#define NETSCAPE_CERT_SERVER_CRMF NETSCAPE_CERT_SERVER, 0x01
+
+/* these are old and should go away soon */
+#define OLD_NETSCAPE           0x60, 0x86, 0x48, 0xd8, 0x6a
+#define NS_CERT_EXT            OLD_NETSCAPE, 0x01
+#define NS_FILE_TYPE           OLD_NETSCAPE, 0x02
+#define NS_IMAGE_TYPE          OLD_NETSCAPE, 0x03
+
+/* RSA OID name space */
+#define RSADSI                 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d
+#define PKCS                   RSADSI, 0x01
+#define DIGEST                 RSADSI, 0x02
+#define CIPHER                 RSADSI, 0x03
+#define PKCS1                  PKCS, 0x01
+#define PKCS5                  PKCS, 0x05
+#define PKCS7                  PKCS, 0x07
+#define PKCS9                  PKCS, 0x09
+#define PKCS12                 PKCS, 0x0c
+
+/* Fortezza algorithm OID space: { 2 16 840 1 101 2 1 1 } */
+/* ### mwelch -- Is this just for algorithms, or all of Fortezza? */
+#define FORTEZZA_ALG 0x60, 0x86, 0x48, 0x01, 0x65, 0x02, 0x01, 0x01
+
+/* Other OID name spaces */
+#define ALGORITHM              0x2b, 0x0e, 0x03, 0x02
+#define X500                   0x55
+#define X520_ATTRIBUTE_TYPE    X500, 0x04
+#define X500_ALG               X500, 0x08
+#define X500_ALG_ENCRYPTION    X500_ALG, 0x01
+
+/** X.509 v3 Extension OID
+ ** {joint-iso-ccitt (2) ds(5) 29}
+ **/
+#define        ID_CE_OID               X500, 0x1d
+
+#define RFC1274_ATTR_TYPE  0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x1
+/* #define RFC2247_ATTR_TYPE  0x09, 0x92, 0x26, 0xf5, 0x98, 0x1e, 0x64, 0x1 this is WRONG! */
+
+/* PKCS #12 name spaces */
+#define PKCS12_MODE_IDS                PKCS12, 0x01
+#define PKCS12_ESPVK_IDS       PKCS12, 0x02
+#define PKCS12_BAG_IDS         PKCS12, 0x03
+#define PKCS12_CERT_BAG_IDS    PKCS12, 0x04
+#define PKCS12_OIDS            PKCS12, 0x05
+#define PKCS12_PBE_IDS         PKCS12_OIDS, 0x01
+#define PKCS12_ENVELOPING_IDS  PKCS12_OIDS, 0x02
+#define PKCS12_SIGNATURE_IDS   PKCS12_OIDS, 0x03
+#define PKCS12_V2_PBE_IDS      PKCS12, 0x01
+#define PKCS9_CERT_TYPES       PKCS9, 0x16
+#define PKCS9_CRL_TYPES                PKCS9, 0x17
+#define PKCS9_SMIME_IDS                PKCS9, 0x10
+#define PKCS9_SMIME_CTYPE      PKCS9_SMIME_IDS, 1
+#define PKCS9_SMIME_ATTRS      PKCS9_SMIME_IDS, 2
+#define PKCS9_SMIME_ALGS       PKCS9_SMIME_IDS, 3
+#define PKCS12_VERSION1                PKCS12, 0x0a
+#define PKCS12_V1_BAG_IDS      PKCS12_VERSION1, 1
+
+/* for DSA algorithm */
+/* { iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) } */
+#define ANSI_X9_ALGORITHM  0x2a, 0x86, 0x48, 0xce, 0x38, 0x4
+
+/* for DH algorithm */
+/* { iso(1) member-body(2) us(840) x9-57(10046) number-type(2) } */
+/* need real OID person to look at this, copied the above line
+ * and added 6 to second to last value (and changed '4' to '2' */
+#define ANSI_X942_ALGORITHM  0x2a, 0x86, 0x48, 0xce, 0x3e, 0x2
+
+#define VERISIGN 0x60, 0x86, 0x48, 0x01, 0x86, 0xf8, 0x45
+
+#define PKIX                   0x2b, 0x06, 0x01, 0x05, 0x05, 0x07
+#define PKIX_CERT_EXTENSIONS    PKIX, 1
+#define PKIX_POLICY_QUALIFIERS  PKIX, 2
+#define PKIX_KEY_USAGE                 PKIX, 3
+#define PKIX_ACCESS_DESCRIPTION PKIX, 0x30
+#define PKIX_OCSP              PKIX_ACCESS_DESCRIPTION, 1
+
+#define PKIX_ID_PKIP           PKIX, 5
+#define PKIX_ID_REGCTRL        PKIX_ID_PKIP, 1
+#define PKIX_ID_REGINFO        PKIX_ID_PKIP, 2
+
+/* Microsoft Object ID space */
+/* { 1.3.6.1.4.1.311 } */
+#define MICROSOFT_OID 0x2b, 0x6, 0x1, 0x4, 0x1, 0x82, 0x37
+
+/* ECDSA OIDs from X9.62 */
+#define ANSI_X9_62                                             0x2A, 0x86, 0x48, 0xCE, 0x3D
+#define ANSI_X9_62_FIELD_TYPE                  ANSI_X9_62, 1
+#define ANSI_X9_62_PUBKEY_TYPE                 ANSI_X9_62, 2
+#define ANSI_X9_62_SIG_TYPE                            ANSI_X9_62, 4
+
+/* X9.63 schemes */
+#define ANSI_X9_63                                             0x2B, 0x81, 0x05, 0x10, 0x86, 0x48, 0x3F
+#define ANSI_X9_63_SCHEME                              ANSI_X9_63, 0
+
+/* ECDH curves */
+#define CERTICOM_ELL_CURVE                             0x2B, 0x81, 0x04, 0x00
+
+#define CONST_OID static const unsigned char
+
+CONST_OID md2[]                                        = { DIGEST, 0x02 };
+CONST_OID md4[]                                        = { DIGEST, 0x04 };
+CONST_OID md5[]                                        = { DIGEST, 0x05 };
+
+CONST_OID rc2cbc[]                                     = { CIPHER, 0x02 };
+CONST_OID rc4[]                                        = { CIPHER, 0x04 };
+CONST_OID desede3cbc[]                                 = { CIPHER, 0x07 };
+CONST_OID rc5cbcpad[]                                  = { CIPHER, 0x09 };
+
+CONST_OID desecb[]                           = { ALGORITHM, 0x06 };
+CONST_OID descbc[]                           = { ALGORITHM, 0x07 };
+CONST_OID desofb[]                           = { ALGORITHM, 0x08 };
+CONST_OID descfb[]                           = { ALGORITHM, 0x09 };
+CONST_OID desmac[]                           = { ALGORITHM, 0x0a };
+CONST_OID sdn702DSASignature[]               = { ALGORITHM, 0x0c };
+CONST_OID isoSHAWithRSASignature[]           = { ALGORITHM, 0x0f };
+CONST_OID desede[]                           = { ALGORITHM, 0x11 };
+CONST_OID sha1[]                             = { ALGORITHM, 0x1a };
+CONST_OID bogusDSASignaturewithSHA1Digest[]  = { ALGORITHM, 0x1b };
+
+CONST_OID pkcs1RSAEncryption[]                         = { PKCS1, 0x01 };
+CONST_OID pkcs1MD2WithRSAEncryption[]                  = { PKCS1, 0x02 };
+CONST_OID pkcs1MD4WithRSAEncryption[]                  = { PKCS1, 0x03 };
+CONST_OID pkcs1MD5WithRSAEncryption[]                  = { PKCS1, 0x04 };
+CONST_OID pkcs1SHA1WithRSAEncryption[]                 = { PKCS1, 0x05 };
+CONST_OID pkcs1SHA256WithRSAEncryption[]       = { PKCS1, 11 };
+CONST_OID pkcs1SHA384WithRSAEncryption[]       = { PKCS1, 12 };
+CONST_OID pkcs1SHA512WithRSAEncryption[]       = { PKCS1, 13 };
+
+CONST_OID pkcs5PbeWithMD2AndDEScbc[]           = { PKCS5, 0x01 };
+CONST_OID pkcs5PbeWithMD5AndDEScbc[]           = { PKCS5, 0x03 };
+CONST_OID pkcs5PbeWithSha1AndDEScbc[]          = { PKCS5, 0x0a };
+
+CONST_OID pkcs7[]                              = { PKCS7 };
+CONST_OID pkcs7Data[]                          = { PKCS7, 0x01 };
+CONST_OID pkcs7SignedData[]                    = { PKCS7, 0x02 };
+CONST_OID pkcs7EnvelopedData[]                 = { PKCS7, 0x03 };
+CONST_OID pkcs7SignedEnvelopedData[]           = { PKCS7, 0x04 };
+CONST_OID pkcs7DigestedData[]                  = { PKCS7, 0x05 };
+CONST_OID pkcs7EncryptedData[]                 = { PKCS7, 0x06 };
+
+CONST_OID pkcs9EmailAddress[]                  = { PKCS9, 0x01 };
+CONST_OID pkcs9UnstructuredName[]              = { PKCS9, 0x02 };
+CONST_OID pkcs9ContentType[]                   = { PKCS9, 0x03 };
+CONST_OID pkcs9MessageDigest[]                 = { PKCS9, 0x04 };
+CONST_OID pkcs9SigningTime[]                   = { PKCS9, 0x05 };
+CONST_OID pkcs9CounterSignature[]              = { PKCS9, 0x06 };
+CONST_OID pkcs9ChallengePassword[]             = { PKCS9, 0x07 };
+CONST_OID pkcs9UnstructuredAddress[]           = { PKCS9, 0x08 };
+CONST_OID pkcs9ExtendedCertificateAttributes[] = { PKCS9, 0x09 };
+CONST_OID pkcs9SMIMECapabilities[]             = { PKCS9, 15 };
+CONST_OID pkcs9FriendlyName[]                  = { PKCS9, 20 };
+CONST_OID pkcs9LocalKeyID[]                    = { PKCS9, 21 };
+
+CONST_OID pkcs9X509Certificate[]               = { PKCS9_CERT_TYPES, 1 };
+CONST_OID pkcs9SDSICertificate[]               = { PKCS9_CERT_TYPES, 2 };
+CONST_OID pkcs9X509CRL[]                       = { PKCS9_CRL_TYPES, 1 };
+
+/* RFC2630 (CMS) OIDs */
+CONST_OID cmsESDH[]                            = { PKCS9_SMIME_ALGS, 5 };
+CONST_OID cms3DESwrap[]                        = { PKCS9_SMIME_ALGS, 6 };
+CONST_OID cmsRC2wrap[]                         = { PKCS9_SMIME_ALGS, 7 };
+
+/* RFC2633 SMIME message attributes */
+CONST_OID smimeEncryptionKeyPreference[]       = { PKCS9_SMIME_ATTRS, 11 };
+CONST_OID ms_smimeEncryptionKeyPreference[]    = { MICROSOFT_OID, 0x10, 0x4 };
+
+CONST_OID smimeSigningCertificate[]    = { PKCS9_SMIME_ATTRS, 12 };
+CONST_OID smimeTimeStampToken[]         = { PKCS9_SMIME_ATTRS, 14 };
+CONST_OID smimeTimeStampTokenInfo[]    = { PKCS9_SMIME_CTYPE, 0x04 };
+
+CONST_OID x520CommonName[]                     = { X520_ATTRIBUTE_TYPE, 3 };
+CONST_OID x520CountryName[]                    = { X520_ATTRIBUTE_TYPE, 6 };
+CONST_OID x520LocalityName[]                   = { X520_ATTRIBUTE_TYPE, 7 };
+CONST_OID x520StateOrProvinceName[]            = { X520_ATTRIBUTE_TYPE, 8 };
+CONST_OID x520OrgName[]                        = { X520_ATTRIBUTE_TYPE, 10 };
+CONST_OID x520OrgUnitName[]                    = { X520_ATTRIBUTE_TYPE, 11 };
+CONST_OID x520DnQualifier[]                    = { X520_ATTRIBUTE_TYPE, 46 };
+
+CONST_OID nsTypeGIF[]                                  = { NETSCAPE_DATA_TYPE, 0x01 };
+CONST_OID nsTypeJPEG[]                                 = { NETSCAPE_DATA_TYPE, 0x02 };
+CONST_OID nsTypeURL[]                                  = { NETSCAPE_DATA_TYPE, 0x03 };
+CONST_OID nsTypeHTML[]                                 = { NETSCAPE_DATA_TYPE, 0x04 };
+CONST_OID nsTypeCertSeq[]                              = { NETSCAPE_DATA_TYPE, 0x05 };
+
+CONST_OID missiCertKEADSSOld[]                         = { MISSI_OLD_KEA_DSS };
+CONST_OID missiCertDSSOld[]                            = { MISSI_OLD_DSS };
+CONST_OID missiCertKEADSS[]                            = { MISSI_KEA_DSS };
+CONST_OID missiCertDSS[]                               = { MISSI_DSS };
+CONST_OID missiCertKEA[]                               = { MISSI_KEA };
+CONST_OID missiCertAltKEA[]                            = { MISSI_ALT_KEA };
+CONST_OID x500RSAEncryption[]                          = { X500_ALG_ENCRYPTION, 0x01 };
+
+/* added for alg 1485 */
+CONST_OID rfc1274Uid[]                         = { RFC1274_ATTR_TYPE, 1 };
+CONST_OID rfc1274Mail[]                        = { RFC1274_ATTR_TYPE, 3 };
+CONST_OID rfc2247DomainComponent[]             = { RFC1274_ATTR_TYPE, 25 };
+
+/* Netscape private certificate extensions */
+CONST_OID nsCertExtNetscapeOK[]                = { NS_CERT_EXT, 1 };
+CONST_OID nsCertExtIssuerLogo[]                = { NS_CERT_EXT, 2 };
+CONST_OID nsCertExtSubjectLogo[]               = { NS_CERT_EXT, 3 };
+CONST_OID nsExtCertType[]                      = { NETSCAPE_CERT_EXT, 0x01 };
+CONST_OID nsExtBaseURL[]                       = { NETSCAPE_CERT_EXT, 0x02 };
+CONST_OID nsExtRevocationURL[]                 = { NETSCAPE_CERT_EXT, 0x03 };
+CONST_OID nsExtCARevocationURL[]               = { NETSCAPE_CERT_EXT, 0x04 };
+CONST_OID nsExtCACRLURL[]                      = { NETSCAPE_CERT_EXT, 0x05 };
+CONST_OID nsExtCACertURL[]                     = { NETSCAPE_CERT_EXT, 0x06 };
+CONST_OID nsExtCertRenewalURL[]                = { NETSCAPE_CERT_EXT, 0x07 };
+CONST_OID nsExtCAPolicyURL[]                   = { NETSCAPE_CERT_EXT, 0x08 };
+CONST_OID nsExtHomepageURL[]                   = { NETSCAPE_CERT_EXT, 0x09 };
+CONST_OID nsExtEntityLogo[]                    = { NETSCAPE_CERT_EXT, 0x0a };
+CONST_OID nsExtUserPicture[]                   = { NETSCAPE_CERT_EXT, 0x0b };
+CONST_OID nsExtSSLServerName[]                 = { NETSCAPE_CERT_EXT, 0x0c };
+CONST_OID nsExtComment[]                       = { NETSCAPE_CERT_EXT, 0x0d };
+
+/* the following 2 extensions are defined for and used by Cartman(NSM) */
+CONST_OID nsExtLostPasswordURL[]               = { NETSCAPE_CERT_EXT, 0x0e };
+CONST_OID nsExtCertRenewalTime[]               = { NETSCAPE_CERT_EXT, 0x0f };
+
+CONST_OID nsExtAIACertRenewal[]        = { NETSCAPE_CERT_EXT_AIA, 0x01 };
+CONST_OID nsExtCertScopeOfUse[]        = { NETSCAPE_CERT_EXT, 0x11 };
+/* Reserved Netscape (2 16 840 1 113730 1 18) = { NETSCAPE_CERT_EXT, 0x12 }; */
+
+/* Netscape policy values */
+CONST_OID nsKeyUsageGovtApproved[]     = { NETSCAPE_POLICY, 0x01 };
+
+/* Netscape other name types */
+CONST_OID netscapeNickname[]           = { NETSCAPE_NAME_COMPONENTS, 0x01};
+/* Reserved Netscape REF605437
+   (2 16 840 1 113730 7 2) = { NETSCAPE_NAME_COMPONENTS, 0x02 }; */
+
+/* OIDs needed for cert server */
+CONST_OID netscapeRecoveryRequest[]    = { NETSCAPE_CERT_SERVER_CRMF, 0x01 };
+
+
+/* Standard x.509 v3 Certificate Extensions */
+CONST_OID x509SubjectDirectoryAttr[]           = { ID_CE_OID,  9 };
+CONST_OID x509SubjectKeyID[]                   = { ID_CE_OID, 14 };
+CONST_OID x509KeyUsage[]                       = { ID_CE_OID, 15 };
+CONST_OID x509PrivateKeyUsagePeriod[]          = { ID_CE_OID, 16 };
+CONST_OID x509SubjectAltName[]                 = { ID_CE_OID, 17 };
+CONST_OID x509IssuerAltName[]                  = { ID_CE_OID, 18 };
+CONST_OID x509BasicConstraints[]               = { ID_CE_OID, 19 };
+CONST_OID x509NameConstraints[]                = { ID_CE_OID, 30 };
+CONST_OID x509CRLDistPoints[]                  = { ID_CE_OID, 31 };
+CONST_OID x509CertificatePolicies[]            = { ID_CE_OID, 32 };
+CONST_OID x509PolicyMappings[]                 = { ID_CE_OID, 33 };
+CONST_OID x509PolicyConstraints[]              = { ID_CE_OID, 34 };
+CONST_OID x509AuthKeyID[]                      = { ID_CE_OID, 35 };
+CONST_OID x509ExtKeyUsage[]                    = { ID_CE_OID, 37 };
+CONST_OID x509AuthInfoAccess[]                 = { PKIX_CERT_EXTENSIONS, 1 };
+
+/* Standard x.509 v3 CRL Extensions */
+CONST_OID x509CrlNumber[]                      = { ID_CE_OID, 20};
+CONST_OID x509ReasonCode[]                     = { ID_CE_OID, 21};
+CONST_OID x509InvalidDate[]                    = { ID_CE_OID, 24};
+
+/* pkcs 12 additions */
+CONST_OID pkcs12[]                           = { PKCS12 };
+CONST_OID pkcs12ModeIDs[]                    = { PKCS12_MODE_IDS };
+CONST_OID pkcs12ESPVKIDs[]                   = { PKCS12_ESPVK_IDS };
+CONST_OID pkcs12BagIDs[]                     = { PKCS12_BAG_IDS };
+CONST_OID pkcs12CertBagIDs[]                 = { PKCS12_CERT_BAG_IDS };
+CONST_OID pkcs12OIDs[]                       = { PKCS12_OIDS };
+CONST_OID pkcs12PBEIDs[]                     = { PKCS12_PBE_IDS };
+CONST_OID pkcs12EnvelopingIDs[]              = { PKCS12_ENVELOPING_IDS };
+CONST_OID pkcs12SignatureIDs[]               = { PKCS12_SIGNATURE_IDS };
+CONST_OID pkcs12PKCS8KeyShrouding[]          = { PKCS12_ESPVK_IDS, 0x01 };
+CONST_OID pkcs12KeyBagID[]                   = { PKCS12_BAG_IDS, 0x01 };
+CONST_OID pkcs12CertAndCRLBagID[]            = { PKCS12_BAG_IDS, 0x02 };
+CONST_OID pkcs12SecretBagID[]                = { PKCS12_BAG_IDS, 0x03 };
+CONST_OID pkcs12X509CertCRLBag[]             = { PKCS12_CERT_BAG_IDS, 0x01 };
+CONST_OID pkcs12SDSICertBag[]                = { PKCS12_CERT_BAG_IDS, 0x02 };
+CONST_OID pkcs12PBEWithSha1And128BitRC4[]    = { PKCS12_PBE_IDS, 0x01 };
+CONST_OID pkcs12PBEWithSha1And40BitRC4[]     = { PKCS12_PBE_IDS, 0x02 };
+CONST_OID pkcs12PBEWithSha1AndTripleDESCBC[] = { PKCS12_PBE_IDS, 0x03 };
+CONST_OID pkcs12PBEWithSha1And128BitRC2CBC[] = { PKCS12_PBE_IDS, 0x04 };
+CONST_OID pkcs12PBEWithSha1And40BitRC2CBC[]  = { PKCS12_PBE_IDS, 0x05 };
+CONST_OID pkcs12RSAEncryptionWith128BitRC4[] = { PKCS12_ENVELOPING_IDS, 0x01 };
+CONST_OID pkcs12RSAEncryptionWith40BitRC4[]  = { PKCS12_ENVELOPING_IDS, 0x02 };
+CONST_OID pkcs12RSAEncryptionWithTripleDES[] = { PKCS12_ENVELOPING_IDS, 0x03 };
+CONST_OID pkcs12RSASignatureWithSHA1Digest[] = { PKCS12_SIGNATURE_IDS, 0x01 };
+
+/* pkcs 12 version 1.0 ids */
+CONST_OID pkcs12V2PBEWithSha1And128BitRC4[]       = { PKCS12_V2_PBE_IDS, 0x01 };
+CONST_OID pkcs12V2PBEWithSha1And40BitRC4[]        = { PKCS12_V2_PBE_IDS, 0x02 };
+CONST_OID pkcs12V2PBEWithSha1And3KeyTripleDEScbc[]= { PKCS12_V2_PBE_IDS, 0x03 };
+CONST_OID pkcs12V2PBEWithSha1And2KeyTripleDEScbc[]= { PKCS12_V2_PBE_IDS, 0x04 };
+CONST_OID pkcs12V2PBEWithSha1And128BitRC2cbc[]    = { PKCS12_V2_PBE_IDS, 0x05 };
+CONST_OID pkcs12V2PBEWithSha1And40BitRC2cbc[]     = { PKCS12_V2_PBE_IDS, 0x06 };
+
+CONST_OID pkcs12SafeContentsID[]                  = { PKCS12_BAG_IDS, 0x04 };
+CONST_OID pkcs12PKCS8ShroudedKeyBagID[]           = { PKCS12_BAG_IDS, 0x05 };
+
+CONST_OID pkcs12V1KeyBag[]                     = { PKCS12_V1_BAG_IDS, 0x01 };
+CONST_OID pkcs12V1PKCS8ShroudedKeyBag[]        = { PKCS12_V1_BAG_IDS, 0x02 };
+CONST_OID pkcs12V1CertBag[]                    = { PKCS12_V1_BAG_IDS, 0x03 };
+CONST_OID pkcs12V1CRLBag[]                     = { PKCS12_V1_BAG_IDS, 0x04 };
+CONST_OID pkcs12V1SecretBag[]                  = { PKCS12_V1_BAG_IDS, 0x05 };
+CONST_OID pkcs12V1SafeContentsBag[]            = { PKCS12_V1_BAG_IDS, 0x06 };
+
+CONST_OID pkcs12KeyUsageAttr[]                 = { 2, 5, 29, 15 };
+
+CONST_OID ansix9DSASignature[]                 = { ANSI_X9_ALGORITHM, 0x01 };
+CONST_OID ansix9DSASignaturewithSHA1Digest[]   = { ANSI_X9_ALGORITHM, 0x03 };
+
+/* verisign OIDs */
+CONST_OID verisignUserNotices[]                = { VERISIGN, 1, 7, 1, 1 };
+
+/* pkix OIDs */
+CONST_OID pkixCPSPointerQualifier[]            = { PKIX_POLICY_QUALIFIERS, 1 };
+CONST_OID pkixUserNoticeQualifier[]            = { PKIX_POLICY_QUALIFIERS, 2 };
+
+CONST_OID pkixOCSP[]                           = { PKIX_OCSP };
+CONST_OID pkixOCSPBasicResponse[]              = { PKIX_OCSP, 1 };
+CONST_OID pkixOCSPNonce[]                      = { PKIX_OCSP, 2 };
+CONST_OID pkixOCSPCRL[]                        = { PKIX_OCSP, 3 };
+CONST_OID pkixOCSPResponse[]                   = { PKIX_OCSP, 4 };
+CONST_OID pkixOCSPNoCheck[]                    = { PKIX_OCSP, 5 };
+CONST_OID pkixOCSPArchiveCutoff[]              = { PKIX_OCSP, 6 };
+CONST_OID pkixOCSPServiceLocator[]             = { PKIX_OCSP, 7 };
+
+CONST_OID pkixRegCtrlRegToken[]                = { PKIX_ID_REGCTRL, 1};
+CONST_OID pkixRegCtrlAuthenticator[]           = { PKIX_ID_REGCTRL, 2};
+CONST_OID pkixRegCtrlPKIPubInfo[]              = { PKIX_ID_REGCTRL, 3};
+CONST_OID pkixRegCtrlPKIArchOptions[]          = { PKIX_ID_REGCTRL, 4};
+CONST_OID pkixRegCtrlOldCertID[]               = { PKIX_ID_REGCTRL, 5};
+CONST_OID pkixRegCtrlProtEncKey[]              = { PKIX_ID_REGCTRL, 6};
+CONST_OID pkixRegInfoUTF8Pairs[]               = { PKIX_ID_REGINFO, 1};
+CONST_OID pkixRegInfoCertReq[]                 = { PKIX_ID_REGINFO, 2};
+
+CONST_OID pkixExtendedKeyUsageServerAuth[]     = { PKIX_KEY_USAGE, 1 };
+CONST_OID pkixExtendedKeyUsageClientAuth[]     = { PKIX_KEY_USAGE, 2 };
+CONST_OID pkixExtendedKeyUsageCodeSign[]       = { PKIX_KEY_USAGE, 3 };
+CONST_OID pkixExtendedKeyUsageEMailProtect[]   = { PKIX_KEY_USAGE, 4 };
+CONST_OID pkixExtendedKeyUsageTimeStamp[]      = { PKIX_KEY_USAGE, 8 };
+CONST_OID pkixOCSPResponderExtendedKeyUsage[]  = { PKIX_KEY_USAGE, 9 };
+
+/* OIDs for Netscape defined algorithms */
+CONST_OID netscapeSMimeKEA[]                   = { NETSCAPE_ALGS, 0x01 };
+
+/* Fortezza algorithm OIDs */
+CONST_OID skipjackCBC[]                        = { FORTEZZA_ALG, 0x04 };
+CONST_OID dhPublicKey[]                        = { ANSI_X942_ALGORITHM, 0x1 };
+
+CONST_OID aes128_ECB[]                                 = { AES, 1 };
+CONST_OID aes128_CBC[]                                 = { AES, 2 };
+#ifdef DEFINE_ALL_AES_CIPHERS
+CONST_OID aes128_OFB[]                                 = { AES, 3 };
+CONST_OID aes128_CFB[]                                 = { AES, 4 };
+#endif
+CONST_OID aes128_KEY_WRAP[]                    = { AES, 5 };
+
+CONST_OID aes192_ECB[]                                 = { AES, 21 };
+CONST_OID aes192_CBC[]                                 = { AES, 22 };
+#ifdef DEFINE_ALL_AES_CIPHERS
+CONST_OID aes192_OFB[]                                 = { AES, 23 };
+CONST_OID aes192_CFB[]                                 = { AES, 24 };
+#endif
+CONST_OID aes192_KEY_WRAP[]                    = { AES, 25 };
+
+CONST_OID aes256_ECB[]                                 = { AES, 41 };
+CONST_OID aes256_CBC[]                                 = { AES, 42 };
+#ifdef DEFINE_ALL_AES_CIPHERS
+CONST_OID aes256_OFB[]                                 = { AES, 43 };
+CONST_OID aes256_CFB[]                                 = { AES, 44 };
+#endif
+CONST_OID aes256_KEY_WRAP[]                    = { AES, 45 };
+
+CONST_OID sha256[]                              = { SHAXXX, 1 };
+CONST_OID sha384[]                              = { SHAXXX, 2 };
+CONST_OID sha512[]                              = { SHAXXX, 3 };
+
+CONST_OID ecdsaWithSHA1[]                      = { ANSI_X9_62_SIG_TYPE, 1 };
+CONST_OID ecPublicKey[]                                = { ANSI_X9_62_PUBKEY_TYPE, 1 };
+/* This OID doesn't appear in a CMS msg */
+CONST_OID ecdsaSig[]                           = { ANSI_X9_62_SIG_TYPE };
+
+/* ECDH curves */
+CONST_OID secp256r1[]                          = { 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07 };
+CONST_OID secp384r1[]                          = { CERTICOM_ELL_CURVE, 0x22 };
+CONST_OID secp521r1[]                          = { CERTICOM_ELL_CURVE, 0x23 };
+
+/* RFC 3278 */
+CONST_OID dhSinglePassStdDHsha1kdf[]           = {ANSI_X9_63_SCHEME, 2 };
+CONST_OID dhSinglePassCofactorDHsha1kdf[]      = {ANSI_X9_63_SCHEME, 3 };
+CONST_OID mqvSinglePassSha1kdf[]                       = {ANSI_X9_63_SCHEME, 4 };
+
+/* a special case: always associated with a caller-specified OID */
+CONST_OID noOid[]                              = { 0 };
+
+#define OI(x) { sizeof x, (uint8 *)x }
+#ifndef SECOID_NO_STRINGS
+#define OD(oid,tag,desc,mech,ext) { OI(oid), tag, desc, mech, ext }
+#else
+#define OD(oid,tag,desc,mech,ext) { OI(oid), tag, 0, mech, ext }
+#endif
+
+/*
+ * NOTE: the order of these entries must mach the SECOidTag enum in secoidt.h!
+ */
+const static SECOidData oids[] = {
+    { { 0, NULL }, SEC_OID_UNKNOWN,
+       "Unknown OID", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION },
+    OD( md2, SEC_OID_MD2, "MD2", CSSM_ALGID_MD2, INVALID_CERT_EXTENSION ),
+    OD( md4, SEC_OID_MD4,
+       "MD4", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( md5, SEC_OID_MD5, "MD5", CSSM_ALGID_MD5, INVALID_CERT_EXTENSION ),
+    OD( sha1, SEC_OID_SHA1, "SHA-1", CSSM_ALGID_SHA1, INVALID_CERT_EXTENSION ),
+    OD( rc2cbc, SEC_OID_RC2_CBC,
+       "RC2-CBC", CSSM_ALGID_RC2, INVALID_CERT_EXTENSION ),
+    OD( rc4, SEC_OID_RC4, "RC4", CSSM_ALGID_RC4, INVALID_CERT_EXTENSION ),
+    OD( desede3cbc, SEC_OID_DES_EDE3_CBC,
+       "DES-EDE3-CBC", CSSM_ALGID_3DES_3KEY_EDE, INVALID_CERT_EXTENSION ),
+    OD( rc5cbcpad, SEC_OID_RC5_CBC_PAD,
+       "RC5-CBCPad", CSSM_ALGID_RC5, INVALID_CERT_EXTENSION ),
+    OD( desecb, SEC_OID_DES_ECB,
+       "DES-ECB", CSSM_ALGID_DES, INVALID_CERT_EXTENSION ),
+    OD( descbc, SEC_OID_DES_CBC,
+       "DES-CBC", CSSM_ALGID_DES, INVALID_CERT_EXTENSION ),
+    OD( desofb, SEC_OID_DES_OFB,
+       "DES-OFB", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( descfb, SEC_OID_DES_CFB,
+       "DES-CFB", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( desmac, SEC_OID_DES_MAC,
+       "DES-MAC", CSSM_ALGID_DES, INVALID_CERT_EXTENSION ),
+    OD( desede, SEC_OID_DES_EDE,
+       "DES-EDE", CSSM_ALGID_3DES_3KEY_EDE, INVALID_CERT_EXTENSION ),
+    OD( isoSHAWithRSASignature, SEC_OID_ISO_SHA_WITH_RSA_SIGNATURE,
+       "ISO SHA with RSA Signature",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs1RSAEncryption, SEC_OID_PKCS1_RSA_ENCRYPTION,
+       "PKCS #1 RSA Encryption", CSSM_ALGID_RSA, INVALID_CERT_EXTENSION ),
+
+    /* the following Signing CSSM_ALGORITHMS should get new CKM_ values when
+     * values for CKM_RSA_WITH_MDX and CKM_RSA_WITH_SHA_1 get defined in
+     * PKCS #11.
+     */
+    OD( pkcs1MD2WithRSAEncryption, SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION,
+       "PKCS #1 MD2 With RSA Encryption", CSSM_ALGID_MD2WithRSA,
+       INVALID_CERT_EXTENSION ),
+    OD( pkcs1MD4WithRSAEncryption, SEC_OID_PKCS1_MD4_WITH_RSA_ENCRYPTION,
+       "PKCS #1 MD4 With RSA Encryption",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs1MD5WithRSAEncryption, SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION,
+       "PKCS #1 MD5 With RSA Encryption", CSSM_ALGID_MD5WithRSA,
+       INVALID_CERT_EXTENSION ),
+    OD( pkcs1SHA1WithRSAEncryption, SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION,
+       "PKCS #1 SHA-1 With RSA Encryption", CSSM_ALGID_SHA1WithRSA,
+       INVALID_CERT_EXTENSION ),
+
+    OD( pkcs5PbeWithMD2AndDEScbc, SEC_OID_PKCS5_PBE_WITH_MD2_AND_DES_CBC,
+       "PKCS #5 Password Based Encryption with MD2 and DES CBC",
+       CSSM_ALGID_PKCS5_PBKDF1_MD2, INVALID_CERT_EXTENSION ),
+    OD( pkcs5PbeWithMD5AndDEScbc, SEC_OID_PKCS5_PBE_WITH_MD5_AND_DES_CBC,
+       "PKCS #5 Password Based Encryption with MD5 and DES CBC",
+       CSSM_ALGID_PKCS5_PBKDF1_MD5, INVALID_CERT_EXTENSION ),
+    OD( pkcs5PbeWithSha1AndDEScbc, SEC_OID_PKCS5_PBE_WITH_SHA1_AND_DES_CBC,
+       "PKCS #5 Password Based Encryption with SHA1 and DES CBC",
+       CSSM_ALGID_PKCS5_PBKDF1_SHA1, INVALID_CERT_EXTENSION ),
+    OD( pkcs7, SEC_OID_PKCS7,
+       "PKCS #7", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs7Data, SEC_OID_PKCS7_DATA,
+       "PKCS #7 Data", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs7SignedData, SEC_OID_PKCS7_SIGNED_DATA,
+       "PKCS #7 Signed Data", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs7EnvelopedData, SEC_OID_PKCS7_ENVELOPED_DATA,
+       "PKCS #7 Enveloped Data",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs7SignedEnvelopedData, SEC_OID_PKCS7_SIGNED_ENVELOPED_DATA,
+       "PKCS #7 Signed And Enveloped Data",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs7DigestedData, SEC_OID_PKCS7_DIGESTED_DATA,
+       "PKCS #7 Digested Data",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs7EncryptedData, SEC_OID_PKCS7_ENCRYPTED_DATA,
+       "PKCS #7 Encrypted Data",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9EmailAddress, SEC_OID_PKCS9_EMAIL_ADDRESS,
+       "PKCS #9 Email Address",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9UnstructuredName, SEC_OID_PKCS9_UNSTRUCTURED_NAME,
+       "PKCS #9 Unstructured Name",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9ContentType, SEC_OID_PKCS9_CONTENT_TYPE,
+       "PKCS #9 Content Type",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9MessageDigest, SEC_OID_PKCS9_MESSAGE_DIGEST,
+       "PKCS #9 Message Digest",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9SigningTime, SEC_OID_PKCS9_SIGNING_TIME,
+       "PKCS #9 Signing Time",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9CounterSignature, SEC_OID_PKCS9_COUNTER_SIGNATURE,
+       "PKCS #9 Counter Signature",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9ChallengePassword, SEC_OID_PKCS9_CHALLENGE_PASSWORD,
+       "PKCS #9 Challenge Password",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9UnstructuredAddress, SEC_OID_PKCS9_UNSTRUCTURED_ADDRESS,
+       "PKCS #9 Unstructured Address",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9ExtendedCertificateAttributes,
+       SEC_OID_PKCS9_EXTENDED_CERTIFICATE_ATTRIBUTES,
+       "PKCS #9 Extended Certificate Attributes",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9SMIMECapabilities, SEC_OID_PKCS9_SMIME_CAPABILITIES,
+       "PKCS #9 S/MIME Capabilities",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( x520CommonName, SEC_OID_AVA_COMMON_NAME,
+       "X520 Common Name", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( x520CountryName, SEC_OID_AVA_COUNTRY_NAME,
+       "X520 Country Name", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( x520LocalityName, SEC_OID_AVA_LOCALITY,
+       "X520 Locality Name", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( x520StateOrProvinceName, SEC_OID_AVA_STATE_OR_PROVINCE,
+       "X520 State Or Province Name",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( x520OrgName, SEC_OID_AVA_ORGANIZATION_NAME,
+       "X520 Organization Name",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( x520OrgUnitName, SEC_OID_AVA_ORGANIZATIONAL_UNIT_NAME,
+       "X520 Organizational Unit Name",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( x520DnQualifier, SEC_OID_AVA_DN_QUALIFIER,
+       "X520 DN Qualifier", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( rfc2247DomainComponent, SEC_OID_AVA_DC,
+       "RFC 2247 Domain Component",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+
+    OD( nsTypeGIF, SEC_OID_NS_TYPE_GIF,
+       "GIF", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( nsTypeJPEG, SEC_OID_NS_TYPE_JPEG,
+       "JPEG", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( nsTypeURL, SEC_OID_NS_TYPE_URL,
+       "URL", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( nsTypeHTML, SEC_OID_NS_TYPE_HTML,
+       "HTML", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( nsTypeCertSeq, SEC_OID_NS_TYPE_CERT_SEQUENCE,
+       "Certificate Sequence",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( missiCertKEADSSOld, SEC_OID_MISSI_KEA_DSS_OLD,
+       "MISSI KEA and DSS Algorithm (Old)",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( missiCertDSSOld, SEC_OID_MISSI_DSS_OLD,
+       "MISSI DSS Algorithm (Old)",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( missiCertKEADSS, SEC_OID_MISSI_KEA_DSS,
+       "MISSI KEA and DSS Algorithm",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( missiCertDSS, SEC_OID_MISSI_DSS,
+       "MISSI DSS Algorithm",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( missiCertKEA, SEC_OID_MISSI_KEA,
+       "MISSI KEA Algorithm",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( missiCertAltKEA, SEC_OID_MISSI_ALT_KEA,
+       "MISSI Alternate KEA Algorithm",
+          CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+
+    /* Netscape private extensions */
+    OD( nsCertExtNetscapeOK, SEC_OID_NS_CERT_EXT_NETSCAPE_OK,
+       "Netscape says this cert is OK",
+       CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( nsCertExtIssuerLogo, SEC_OID_NS_CERT_EXT_ISSUER_LOGO,
+       "Certificate Issuer Logo",
+       CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( nsCertExtSubjectLogo, SEC_OID_NS_CERT_EXT_SUBJECT_LOGO,
+       "Certificate Subject Logo",
+       CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( nsExtCertType, SEC_OID_NS_CERT_EXT_CERT_TYPE,
+       "Certificate Type",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( nsExtBaseURL, SEC_OID_NS_CERT_EXT_BASE_URL,
+       "Certificate Extension Base URL",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( nsExtRevocationURL, SEC_OID_NS_CERT_EXT_REVOCATION_URL,
+       "Certificate Revocation URL",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( nsExtCARevocationURL, SEC_OID_NS_CERT_EXT_CA_REVOCATION_URL,
+       "Certificate Authority Revocation URL",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( nsExtCACRLURL, SEC_OID_NS_CERT_EXT_CA_CRL_URL,
+       "Certificate Authority CRL Download URL",
+       CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( nsExtCACertURL, SEC_OID_NS_CERT_EXT_CA_CERT_URL,
+       "Certificate Authority Certificate Download URL",
+       CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( nsExtCertRenewalURL, SEC_OID_NS_CERT_EXT_CERT_RENEWAL_URL,
+       "Certificate Renewal URL",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( nsExtCAPolicyURL, SEC_OID_NS_CERT_EXT_CA_POLICY_URL,
+       "Certificate Authority Policy URL",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( nsExtHomepageURL, SEC_OID_NS_CERT_EXT_HOMEPAGE_URL,
+       "Certificate Homepage URL",
+       CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( nsExtEntityLogo, SEC_OID_NS_CERT_EXT_ENTITY_LOGO,
+       "Certificate Entity Logo",
+       CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( nsExtUserPicture, SEC_OID_NS_CERT_EXT_USER_PICTURE,
+       "Certificate User Picture",
+       CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( nsExtSSLServerName, SEC_OID_NS_CERT_EXT_SSL_SERVER_NAME,
+       "Certificate SSL Server Name",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( nsExtComment, SEC_OID_NS_CERT_EXT_COMMENT,
+       "Certificate Comment",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( nsExtLostPasswordURL, SEC_OID_NS_CERT_EXT_LOST_PASSWORD_URL,
+        "Lost Password URL",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( nsExtCertRenewalTime, SEC_OID_NS_CERT_EXT_CERT_RENEWAL_TIME,
+       "Certificate Renewal Time",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( nsKeyUsageGovtApproved, SEC_OID_NS_KEY_USAGE_GOVT_APPROVED,
+       "Strong Crypto Export Approved",
+       CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+
+
+    /* x.509 v3 certificate extensions */
+    OD( x509SubjectDirectoryAttr, SEC_OID_X509_SUBJECT_DIRECTORY_ATTR,
+       "Certificate Subject Directory Attributes",
+       CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION),
+    OD( x509SubjectKeyID, SEC_OID_X509_SUBJECT_KEY_ID,
+       "Certificate Subject Key ID",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( x509KeyUsage, SEC_OID_X509_KEY_USAGE,
+       "Certificate Key Usage",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( x509PrivateKeyUsagePeriod, SEC_OID_X509_PRIVATE_KEY_USAGE_PERIOD,
+       "Certificate Private Key Usage Period",
+        CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( x509SubjectAltName, SEC_OID_X509_SUBJECT_ALT_NAME,
+       "Certificate Subject Alt Name",
+        CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( x509IssuerAltName, SEC_OID_X509_ISSUER_ALT_NAME,
+       "Certificate Issuer Alt Name",
+        CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( x509BasicConstraints, SEC_OID_X509_BASIC_CONSTRAINTS,
+       "Certificate Basic Constraints",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( x509NameConstraints, SEC_OID_X509_NAME_CONSTRAINTS,
+       "Certificate Name Constraints",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( x509CRLDistPoints, SEC_OID_X509_CRL_DIST_POINTS,
+       "CRL Distribution Points",
+       CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( x509CertificatePolicies, SEC_OID_X509_CERTIFICATE_POLICIES,
+       "Certificate Policies",
+        CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( x509PolicyMappings, SEC_OID_X509_POLICY_MAPPINGS,
+       "Certificate Policy Mappings",
+        CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( x509PolicyConstraints, SEC_OID_X509_POLICY_CONSTRAINTS,
+       "Certificate Policy Constraints",
+        CSSM_ALGID_NONE, UNSUPPORTED_CERT_EXTENSION ),
+    OD( x509AuthKeyID, SEC_OID_X509_AUTH_KEY_ID,
+       "Certificate Authority Key Identifier",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( x509ExtKeyUsage, SEC_OID_X509_EXT_KEY_USAGE,
+       "Extended Key Usage",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( x509AuthInfoAccess, SEC_OID_X509_AUTH_INFO_ACCESS,
+       "Authority Information Access",
+        CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+
+    /* x.509 v3 CRL extensions */
+    OD( x509CrlNumber, SEC_OID_X509_CRL_NUMBER,
+       "CRL Number", CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( x509ReasonCode, SEC_OID_X509_REASON_CODE,
+       "CRL reason code", CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( x509InvalidDate, SEC_OID_X509_INVALID_DATE,
+       "Invalid Date", CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+
+    OD( x500RSAEncryption, SEC_OID_X500_RSA_ENCRYPTION,
+       "X500 RSA Encryption", CSSM_ALGID_RSA, INVALID_CERT_EXTENSION ),
+
+    /* added for alg 1485 */
+    OD( rfc1274Uid, SEC_OID_RFC1274_UID,
+       "RFC1274 User Id", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( rfc1274Mail, SEC_OID_RFC1274_MAIL,
+       "RFC1274 E-mail Address",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+
+    /* pkcs 12 additions */
+    OD( pkcs12, SEC_OID_PKCS12,
+       "PKCS #12", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12ModeIDs, SEC_OID_PKCS12_MODE_IDS,
+       "PKCS #12 Mode IDs", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12ESPVKIDs, SEC_OID_PKCS12_ESPVK_IDS,
+       "PKCS #12 ESPVK IDs", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12BagIDs, SEC_OID_PKCS12_BAG_IDS,
+       "PKCS #12 Bag IDs", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12CertBagIDs, SEC_OID_PKCS12_CERT_BAG_IDS,
+       "PKCS #12 Cert Bag IDs",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12OIDs, SEC_OID_PKCS12_OIDS,
+       "PKCS #12 OIDs", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12PBEIDs, SEC_OID_PKCS12_PBE_IDS,
+       "PKCS #12 PBE IDs", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12SignatureIDs, SEC_OID_PKCS12_SIGNATURE_IDS,
+       "PKCS #12 Signature IDs",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12EnvelopingIDs, SEC_OID_PKCS12_ENVELOPING_IDS,
+       "PKCS #12 Enveloping IDs",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12PKCS8KeyShrouding, SEC_OID_PKCS12_PKCS8_KEY_SHROUDING,
+       "PKCS #12 Key Shrouding",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12KeyBagID, SEC_OID_PKCS12_KEY_BAG_ID,
+       "PKCS #12 Key Bag ID",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12CertAndCRLBagID, SEC_OID_PKCS12_CERT_AND_CRL_BAG_ID,
+       "PKCS #12 Cert And CRL Bag ID",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12SecretBagID, SEC_OID_PKCS12_SECRET_BAG_ID,
+       "PKCS #12 Secret Bag ID",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12X509CertCRLBag, SEC_OID_PKCS12_X509_CERT_CRL_BAG,
+       "PKCS #12 X509 Cert CRL Bag",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12SDSICertBag, SEC_OID_PKCS12_SDSI_CERT_BAG,
+       "PKCS #12 SDSI Cert Bag",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12PBEWithSha1And128BitRC4,
+       SEC_OID_PKCS12_PBE_WITH_SHA1_AND_128_BIT_RC4,
+       "PKCS #12 PBE With Sha1 and 128 Bit RC4",
+       CSSM_ALGID_PKCS12_SHA1_PBE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12PBEWithSha1And40BitRC4,
+       SEC_OID_PKCS12_PBE_WITH_SHA1_AND_40_BIT_RC4,
+       "PKCS #12 PBE With Sha1 and 40 Bit RC4",
+       CSSM_ALGID_PKCS12_SHA1_PBE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12PBEWithSha1AndTripleDESCBC,
+       SEC_OID_PKCS12_PBE_WITH_SHA1_AND_TRIPLE_DES_CBC,
+       "PKCS #12 PBE With Sha1 and Triple DES CBC",
+       CSSM_ALGID_PKCS12_SHA1_PBE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12PBEWithSha1And128BitRC2CBC,
+       SEC_OID_PKCS12_PBE_WITH_SHA1_AND_128_BIT_RC2_CBC,
+       "PKCS #12 PBE With Sha1 and 128 Bit RC2 CBC",
+       CSSM_ALGID_PKCS12_SHA1_PBE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12PBEWithSha1And40BitRC2CBC,
+       SEC_OID_PKCS12_PBE_WITH_SHA1_AND_40_BIT_RC2_CBC,
+       "PKCS #12 PBE With Sha1 and 40 Bit RC2 CBC",
+       CSSM_ALGID_PKCS12_SHA1_PBE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12RSAEncryptionWith128BitRC4,
+       SEC_OID_PKCS12_RSA_ENCRYPTION_WITH_128_BIT_RC4,
+       "PKCS #12 RSA Encryption with 128 Bit RC4",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12RSAEncryptionWith40BitRC4,
+       SEC_OID_PKCS12_RSA_ENCRYPTION_WITH_40_BIT_RC4,
+       "PKCS #12 RSA Encryption with 40 Bit RC4",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12RSAEncryptionWithTripleDES,
+       SEC_OID_PKCS12_RSA_ENCRYPTION_WITH_TRIPLE_DES,
+       "PKCS #12 RSA Encryption with Triple DES",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12RSASignatureWithSHA1Digest,
+       SEC_OID_PKCS12_RSA_SIGNATURE_WITH_SHA1_DIGEST,
+       "PKCS #12 RSA Encryption with Triple DES",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+
+    /* DSA signatures */
+    OD( ansix9DSASignature, SEC_OID_ANSIX9_DSA_SIGNATURE,
+       "ANSI X9.57 DSA Signature", CSSM_ALGID_DSA, INVALID_CERT_EXTENSION ),
+    OD( ansix9DSASignaturewithSHA1Digest,
+        SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST,
+       "ANSI X9.57 DSA Signature with SHA1 Digest",
+       CSSM_ALGID_SHA1WithDSA, INVALID_CERT_EXTENSION ),
+    OD( bogusDSASignaturewithSHA1Digest,
+        SEC_OID_BOGUS_DSA_SIGNATURE_WITH_SHA1_DIGEST,
+       "FORTEZZA DSA Signature with SHA1 Digest",
+       CSSM_ALGID_SHA1WithDSA, INVALID_CERT_EXTENSION ),
+
+    /* verisign oids */
+    OD( verisignUserNotices, SEC_OID_VERISIGN_USER_NOTICES,
+       "Verisign User Notices",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+
+    /* pkix oids */
+    OD( pkixCPSPointerQualifier, SEC_OID_PKIX_CPS_POINTER_QUALIFIER,
+       "PKIX CPS Pointer Qualifier",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkixUserNoticeQualifier, SEC_OID_PKIX_USER_NOTICE_QUALIFIER,
+       "PKIX User Notice Qualifier",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+
+    OD( pkixOCSP, SEC_OID_PKIX_OCSP,
+       "PKIX Online Certificate Status Protocol",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkixOCSPBasicResponse, SEC_OID_PKIX_OCSP_BASIC_RESPONSE,
+       "OCSP Basic Response", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkixOCSPNonce, SEC_OID_PKIX_OCSP_NONCE,
+       "OCSP Nonce Extension", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkixOCSPCRL, SEC_OID_PKIX_OCSP_CRL,
+       "OCSP CRL Reference Extension",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkixOCSPResponse, SEC_OID_PKIX_OCSP_RESPONSE,
+       "OCSP Response Types Extension",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkixOCSPNoCheck, SEC_OID_PKIX_OCSP_NO_CHECK,
+       "OCSP No Check Extension",
+       CSSM_ALGID_NONE, SUPPORTED_CERT_EXTENSION ),
+    OD( pkixOCSPArchiveCutoff, SEC_OID_PKIX_OCSP_ARCHIVE_CUTOFF,
+       "OCSP Archive Cutoff Extension",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkixOCSPServiceLocator, SEC_OID_PKIX_OCSP_SERVICE_LOCATOR,
+       "OCSP Service Locator Extension",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+
+    OD( pkixRegCtrlRegToken, SEC_OID_PKIX_REGCTRL_REGTOKEN,
+        "PKIX CRMF Registration Control, Registration Token",
+        CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkixRegCtrlAuthenticator, SEC_OID_PKIX_REGCTRL_AUTHENTICATOR,
+        "PKIX CRMF Registration Control, Registration Authenticator",
+        CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkixRegCtrlPKIPubInfo, SEC_OID_PKIX_REGCTRL_PKIPUBINFO,
+        "PKIX CRMF Registration Control, PKI Publication Info",
+        CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+    OD( pkixRegCtrlPKIArchOptions,
+        SEC_OID_PKIX_REGCTRL_PKI_ARCH_OPTIONS,
+        "PKIX CRMF Registration Control, PKI Archive Options",
+        CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+    OD( pkixRegCtrlOldCertID, SEC_OID_PKIX_REGCTRL_OLD_CERT_ID,
+        "PKIX CRMF Registration Control, Old Certificate ID",
+        CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+    OD( pkixRegCtrlProtEncKey, SEC_OID_PKIX_REGCTRL_PROTOCOL_ENC_KEY,
+        "PKIX CRMF Registration Control, Protocol Encryption Key",
+        CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+    OD( pkixRegInfoUTF8Pairs, SEC_OID_PKIX_REGINFO_UTF8_PAIRS,
+        "PKIX CRMF Registration Info, UTF8 Pairs",
+        CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+    OD( pkixRegInfoCertReq, SEC_OID_PKIX_REGINFO_CERT_REQUEST,
+        "PKIX CRMF Registration Info, Certificate Request",
+        CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+    OD( pkixExtendedKeyUsageServerAuth,
+        SEC_OID_EXT_KEY_USAGE_SERVER_AUTH,
+        "TLS Web Server Authentication Certificate",
+        CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+    OD( pkixExtendedKeyUsageClientAuth,
+        SEC_OID_EXT_KEY_USAGE_CLIENT_AUTH,
+        "TLS Web Client Authentication Certificate",
+        CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+    OD( pkixExtendedKeyUsageCodeSign, SEC_OID_EXT_KEY_USAGE_CODE_SIGN,
+        "Code Signing Certificate",
+        CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+    OD( pkixExtendedKeyUsageEMailProtect,
+        SEC_OID_EXT_KEY_USAGE_EMAIL_PROTECT,
+        "E-Mail Protection Certificate",
+        CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+    OD( pkixExtendedKeyUsageTimeStamp,
+        SEC_OID_EXT_KEY_USAGE_TIME_STAMP,
+        "Time Stamping Certifcate",
+        CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+    OD( pkixOCSPResponderExtendedKeyUsage, SEC_OID_OCSP_RESPONDER,
+          "OCSP Responder Certificate",
+          CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+
+    /* Netscape Algorithm OIDs */
+
+    OD( netscapeSMimeKEA, SEC_OID_NETSCAPE_SMIME_KEA,
+       "Netscape S/MIME KEA", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+
+      /* Skipjack OID -- ### mwelch temporary */
+    OD( skipjackCBC, SEC_OID_FORTEZZA_SKIPJACK,
+       "Skipjack CBC64", CSSM_ALGID_SKIPJACK, INVALID_CERT_EXTENSION ),
+
+    /* pkcs12 v2 oids */
+    OD( pkcs12V2PBEWithSha1And128BitRC4,
+        SEC_OID_PKCS12_V2_PBE_WITH_SHA1_AND_128_BIT_RC4,
+       "PKCS12 V2 PBE With SHA1 And 128 Bit RC4",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12V2PBEWithSha1And40BitRC4,
+        SEC_OID_PKCS12_V2_PBE_WITH_SHA1_AND_40_BIT_RC4,
+       "PKCS12 V2 PBE With SHA1 And 40 Bit RC4",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12V2PBEWithSha1And3KeyTripleDEScbc,
+        SEC_OID_PKCS12_V2_PBE_WITH_SHA1_AND_3KEY_TRIPLE_DES_CBC,
+       "PKCS12 V2 PBE With SHA1 And 3KEY Triple DES-cbc",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12V2PBEWithSha1And2KeyTripleDEScbc,
+        SEC_OID_PKCS12_V2_PBE_WITH_SHA1_AND_2KEY_TRIPLE_DES_CBC,
+       "PKCS12 V2 PBE With SHA1 And 2KEY Triple DES-cbc",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12V2PBEWithSha1And128BitRC2cbc,
+        SEC_OID_PKCS12_V2_PBE_WITH_SHA1_AND_128_BIT_RC2_CBC,
+       "PKCS12 V2 PBE With SHA1 And 128 Bit RC2 CBC",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12V2PBEWithSha1And40BitRC2cbc,
+        SEC_OID_PKCS12_V2_PBE_WITH_SHA1_AND_40_BIT_RC2_CBC,
+       "PKCS12 V2 PBE With SHA1 And 40 Bit RC2 CBC",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12SafeContentsID, SEC_OID_PKCS12_SAFE_CONTENTS_ID,
+       "PKCS #12 Safe Contents ID",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12PKCS8ShroudedKeyBagID,
+       SEC_OID_PKCS12_PKCS8_SHROUDED_KEY_BAG_ID,
+       "PKCS #12 Safe Contents ID",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12V1KeyBag, SEC_OID_PKCS12_V1_KEY_BAG_ID,
+       "PKCS #12 V1 Key Bag",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12V1PKCS8ShroudedKeyBag,
+       SEC_OID_PKCS12_V1_PKCS8_SHROUDED_KEY_BAG_ID,
+       "PKCS #12 V1 PKCS8 Shrouded Key Bag",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12V1CertBag, SEC_OID_PKCS12_V1_CERT_BAG_ID,
+       "PKCS #12 V1 Cert Bag",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12V1CRLBag, SEC_OID_PKCS12_V1_CRL_BAG_ID,
+       "PKCS #12 V1 CRL Bag",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12V1SecretBag, SEC_OID_PKCS12_V1_SECRET_BAG_ID,
+       "PKCS #12 V1 Secret Bag",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12V1SafeContentsBag, SEC_OID_PKCS12_V1_SAFE_CONTENTS_BAG_ID,
+       "PKCS #12 V1 Safe Contents Bag",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+
+    OD( pkcs9X509Certificate, SEC_OID_PKCS9_X509_CERT,
+       "PKCS #9 X509 Certificate",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9SDSICertificate, SEC_OID_PKCS9_SDSI_CERT,
+       "PKCS #9 SDSI Certificate",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9X509CRL, SEC_OID_PKCS9_X509_CRL,
+       "PKCS #9 X509 CRL", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9FriendlyName, SEC_OID_PKCS9_FRIENDLY_NAME,
+       "PKCS #9 Friendly Name",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs9LocalKeyID, SEC_OID_PKCS9_LOCAL_KEY_ID,
+       "PKCS #9 Local Key ID",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( pkcs12KeyUsageAttr, SEC_OID_PKCS12_KEY_USAGE,
+       "PKCS 12 Key Usage", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+    OD( dhPublicKey, SEC_OID_X942_DIFFIE_HELMAN_KEY,
+       "Diffie-Helman Public Key", CSSM_ALGID_DH,
+       INVALID_CERT_EXTENSION ),
+    OD( netscapeNickname, SEC_OID_NETSCAPE_NICKNAME,
+       "Netscape Nickname", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+
+    /* Cert Server specific OIDs */
+    OD( netscapeRecoveryRequest, SEC_OID_NETSCAPE_RECOVERY_REQUEST,
+        "Recovery Request OID",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+
+    OD( nsExtAIACertRenewal, SEC_OID_CERT_RENEWAL_LOCATOR,
+        "Certificate Renewal Locator OID", CSSM_ALGID_NONE,
+        INVALID_CERT_EXTENSION ),
+
+    OD( nsExtCertScopeOfUse, SEC_OID_NS_CERT_EXT_SCOPE_OF_USE,
+        "Certificate Scope-of-Use Extension", CSSM_ALGID_NONE,
+        SUPPORTED_CERT_EXTENSION ),
+
+    /* CMS stuff */
+    OD( cmsESDH, SEC_OID_CMS_EPHEMERAL_STATIC_DIFFIE_HELLMAN,
+        "Ephemeral-Static Diffie-Hellman", CSSM_ALGID_NONE /* XXX */,
+        INVALID_CERT_EXTENSION ),
+    OD( cms3DESwrap, SEC_OID_CMS_3DES_KEY_WRAP,
+        "CMS 3DES Key Wrap", CSSM_ALGID_NONE /* XXX */,
+        INVALID_CERT_EXTENSION ),
+    OD( cmsRC2wrap, SEC_OID_CMS_RC2_KEY_WRAP,
+        "CMS RC2 Key Wrap", CSSM_ALGID_NONE /* XXX */,
+        INVALID_CERT_EXTENSION ),
+    OD( smimeEncryptionKeyPreference, SEC_OID_SMIME_ENCRYPTION_KEY_PREFERENCE,
+       "S/MIME Encryption Key Preference",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+
+    /* AES algorithm OIDs */
+    OD( aes128_ECB, SEC_OID_AES_128_ECB,
+       "AES-128-ECB", CSSM_ALGID_AES, INVALID_CERT_EXTENSION ),
+    OD( aes128_CBC, SEC_OID_AES_128_CBC,
+       "AES-128-CBC", CSSM_ALGID_AES, INVALID_CERT_EXTENSION ),
+    OD( aes192_ECB, SEC_OID_AES_192_ECB,
+       "AES-192-ECB", CSSM_ALGID_AES, INVALID_CERT_EXTENSION ),
+    OD( aes192_CBC, SEC_OID_AES_192_CBC,
+       "AES-192-CBC", CSSM_ALGID_AES, INVALID_CERT_EXTENSION ),
+    OD( aes256_ECB, SEC_OID_AES_256_ECB,
+       "AES-256-ECB", CSSM_ALGID_AES, INVALID_CERT_EXTENSION ),
+    OD( aes256_CBC, SEC_OID_AES_256_CBC,
+       "AES-256-CBC", CSSM_ALGID_AES, INVALID_CERT_EXTENSION ),
+
+    /* More bogus DSA OIDs */
+    OD( sdn702DSASignature, SEC_OID_SDN702_DSA_SIGNATURE,
+       "SDN.702 DSA Signature", CSSM_ALGID_SHA1WithDSA, INVALID_CERT_EXTENSION ),
+
+    OD( ms_smimeEncryptionKeyPreference,
+        SEC_OID_MS_SMIME_ENCRYPTION_KEY_PREFERENCE,
+       "Microsoft S/MIME Encryption Key Preference",
+       CSSM_ALGID_NONE, INVALID_CERT_EXTENSION ),
+
+    OD( sha256, SEC_OID_SHA256, "SHA-256", CSSM_ALGID_SHA256, INVALID_CERT_EXTENSION),
+    OD( sha384, SEC_OID_SHA384, "SHA-384", CSSM_ALGID_SHA384, INVALID_CERT_EXTENSION),
+    OD( sha512, SEC_OID_SHA512, "SHA-512", CSSM_ALGID_SHA512, INVALID_CERT_EXTENSION),
+
+    OD( pkcs1SHA256WithRSAEncryption, SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION,
+       "PKCS #1 SHA-256 With RSA Encryption", CSSM_ALGID_SHA256WithRSA,
+       INVALID_CERT_EXTENSION ),
+    OD( pkcs1SHA384WithRSAEncryption, SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION,
+       "PKCS #1 SHA-384 With RSA Encryption", CSSM_ALGID_SHA384WithRSA,
+       INVALID_CERT_EXTENSION ),
+    OD( pkcs1SHA512WithRSAEncryption, SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION,
+       "PKCS #1 SHA-512 With RSA Encryption", CSSM_ALGID_SHA512WithRSA,
+       INVALID_CERT_EXTENSION ),
+
+    OD( aes128_KEY_WRAP, SEC_OID_AES_128_KEY_WRAP,
+       "AES-128 Key Wrap", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+    OD( aes192_KEY_WRAP, SEC_OID_AES_192_KEY_WRAP,
+       "AES-192 Key Wrap", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+    OD( aes256_KEY_WRAP, SEC_OID_AES_256_KEY_WRAP,
+       "AES-256 Key Wrap", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+
+    /* caller-specified OID for eContentType */
+    OD( noOid, SEC_OID_OTHER,
+       "Caller-specified eContentType", CSSM_ALGID_NONE, INVALID_CERT_EXTENSION),
+
+    OD( ecPublicKey, SEC_OID_EC_PUBLIC_KEY,
+       "ECDSA Public Key", CSSM_ALGID_ECDSA,
+       INVALID_CERT_EXTENSION ),
+    OD( ecdsaWithSHA1, SEC_OID_ECDSA_WithSHA1,
+       "SHA-1 With ECDSA", CSSM_ALGID_SHA1WithECDSA,
+       INVALID_CERT_EXTENSION ),
+    OD( dhSinglePassStdDHsha1kdf, SEC_OID_DH_SINGLE_STD_SHA1KDF,
+       "ECDH With SHA1 KDF", CSSM_ALGID_ECDH_X963_KDF,
+       INVALID_CERT_EXTENSION ),
+    OD( secp256r1, SEC_OID_SECP_256_R1,
+       "secp256r1", CSSM_ALGID_NONE,
+       INVALID_CERT_EXTENSION ),
+    OD( secp384r1, SEC_OID_SECP_384_R1,
+       "secp384r1", CSSM_ALGID_NONE,
+       INVALID_CERT_EXTENSION ),
+    OD( secp521r1, SEC_OID_SECP_521_R1,
+       "secp521r1", CSSM_ALGID_NONE,
+       INVALID_CERT_EXTENSION ),
+
+    OD( smimeTimeStampTokenInfo, SEC_OID_PKCS9_ID_CT_TSTInfo,
+       "id-ct-TSTInfo", CSSM_ALGID_NONE,
+       INVALID_CERT_EXTENSION ),
+
+    OD( smimeTimeStampToken, SEC_OID_PKCS9_TIMESTAMP_TOKEN,
+       "id-aa-timeStampToken", CSSM_ALGID_NONE,
+       INVALID_CERT_EXTENSION ),
+
+    OD( smimeSigningCertificate, SEC_OID_PKCS9_SIGNING_CERTIFICATE,
+       "id-aa-signing-certificate", CSSM_ALGID_NONE,
+       INVALID_CERT_EXTENSION ),
+
+};
+
+/*
+ * now the dynamic table. The dynamic table gets build at init time.
+ *  and gets modified if the user loads new crypto modules.
+ */
+
+static PLHashTable *oid_d_hash = 0;
+static SECOidData **secoidDynamicTable = NULL;
+static int secoidDynamicTableSize = 0;
+static int secoidLastDynamicEntry = 0;
+static int secoidLastHashEntry = 0;
+
+/*
+ * A mutex to protect creation and writing of all three hash tables in
+ * this module, and reading of the dynamic table.
+ */
+static pthread_mutex_t oid_hash_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+/* caller holds oid_hash_mutex */
+static SECStatus
+secoid_DynamicRehash(void)
+{
+    SECOidData *oid;
+    PLHashEntry *entry;
+    int i;
+    int last = secoidLastDynamicEntry;
+
+    if (!oid_d_hash) {
+        oid_d_hash = PL_NewHashTable(0, SECITEM_Hash, SECITEM_HashCompare,
+                       PL_CompareValues, NULL, NULL);
+    }
+
+
+    if ( !oid_d_hash ) {
+       PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
+       return(SECFailure);
+    }
+
+    for ( i = secoidLastHashEntry; i < last; i++ ) {
+       oid = secoidDynamicTable[i];
+
+       entry = PL_HashTableAdd( oid_d_hash, &oid->oid, oid );
+       if ( entry == NULL ) {
+           return(SECFailure);
+       }
+    }
+    secoidLastHashEntry = last;
+    return(SECSuccess);
+}
+
+
+
+/*
+ * Lookup a Dynamic OID. Dynamic OID's still change slowly, so it's
+ * cheaper to rehash the table when it changes than it is to do the loop
+ * each time.
+ */
+static SECOidData *
+secoid_FindDynamic(const SECItem *key) {
+    SECOidData *ret = NULL;
+
+    pthread_mutex_lock(&oid_hash_mutex);
+    /* subsequent errors to loser: */
+    if (secoidDynamicTable == NULL) {
+       /* PORT_SetError! */
+       goto loser;
+    }
+    if (secoidLastHashEntry != secoidLastDynamicEntry) {
+       SECStatus rv = secoid_DynamicRehash();
+       if ( rv != SECSuccess ) {
+           goto loser;
+       }
+    }
+    ret = (SECOidData *)PL_HashTableLookup (oid_d_hash, key);
+loser:
+    pthread_mutex_unlock(&oid_hash_mutex);
+    return ret;
+
+}
+
+static SECOidData *
+secoid_FindDynamicByTag(SECOidTag tagnum)
+{
+    int tagNumDiff;
+    SECOidData *rtn = NULL;
+
+    if (tagnum < SEC_OID_TOTAL) {
+       return NULL;
+    }
+
+    pthread_mutex_lock(&oid_hash_mutex);
+    /* subsequent errors to loser: */
+
+    if (secoidDynamicTable == NULL) {
+       goto loser;
+    }
+
+    tagNumDiff = tagnum - SEC_OID_TOTAL;
+    if (tagNumDiff >= secoidLastDynamicEntry) {
+       goto loser;
+    }
+
+    rtn = secoidDynamicTable[tagNumDiff];
+loser:
+    pthread_mutex_unlock(&oid_hash_mutex);
+    return rtn;
+}
+
+#if 0
+SECStatus
+SECOID_AddEntry(SECItem *oid, char *description, CSSM_ALGORITHMS cssmAlgorithm) {
+    SECOidData *oiddp;
+    int last;
+    int tableSize;
+    int next;
+    SECOidData **newTable;
+    SECOidData **oldTable = NULL;
+    SECStatus srtn = SECFailure;
+
+    if (oid == NULL) {
+       return SECFailure;
+    }
+
+    pthread_mutex_lock(&oid_hash_mutex);
+    /* subsequent errors to loser: */
+
+    oiddp = (SECOidData *)PORT_Alloc(sizeof(SECOidData));
+    last = secoidLastDynamicEntry;
+    tableSize = secoidDynamicTableSize;
+    next = last++;
+    newTable = secoidDynamicTable;
+
+    /* fill in oid structure */
+    if (SECITEM_CopyItem(NULL,&oiddp->oid,oid) != SECSuccess) {
+       PORT_Free(oiddp);
+       goto loser;
+    }
+    oiddp->offset = (SECOidTag)(next + SEC_OID_TOTAL);
+    /* may we should just reference the copy passed to us? */
+    oiddp->desc = PORT_Strdup(description);
+    oiddp->cssmAlgorithm = cssmAlgorithm;
+
+
+    if (last > tableSize) {
+       int oldTableSize = tableSize;
+       tableSize += 10;
+       oldTable = newTable;
+       newTable = (SECOidData **)PORT_ZAlloc(sizeof(SECOidData *)*tableSize);
+       if (newTable == NULL) {
+          PORT_Free(oiddp->oid.Data);
+          PORT_Free(oiddp);
+          goto loser;
+       }
+       PORT_Memcpy(newTable,oldTable,sizeof(SECOidData *)*oldTableSize);
+       PORT_Free(oldTable);
+    }
+
+    newTable[next] = oiddp;
+    secoidDynamicTable = newTable;
+    secoidDynamicTableSize = tableSize;
+    secoidLastDynamicEntry = last;
+    srtn = SECSuccess;
+loser:
+    pthread_mutex_unlock(&oid_hash_mutex);
+    return srtn;
+}
+#endif
+
+
+/* normal static table processing */
+
+/* creation and writes to these hash tables is protected by oid_hash_mutex */
+static PLHashTable *oidhash     = NULL;
+static PLHashTable *oidmechhash = NULL;
+
+static PLHashNumber
+secoid_HashNumber(const void *key)
+{
+       intptr_t keyint = (intptr_t)key;
+       // XXX/gh  revisit this
+       keyint ^= (keyint >> 8);
+       keyint ^= (keyint << 8);
+       return (PLHashNumber) keyint;
+}
+
+/* caller holds oid_hash_mutex */
+static SECStatus
+InitOIDHash(void)
+{
+    PLHashEntry *entry;
+    const SECOidData *oid;
+    int i;
+
+    oidhash = PL_NewHashTable(0, SECITEM_Hash, SECITEM_HashCompare,
+                       PL_CompareValues, NULL, NULL);
+    oidmechhash = PL_NewHashTable(0, secoid_HashNumber, PL_CompareValues,
+                       PL_CompareValues, NULL, NULL);
+
+    if ( !oidhash || !oidmechhash) {
+       PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
+       PORT_Assert(0); /*This function should never fail. */
+       return(SECFailure);
+    }
+
+    for ( i = 0; i < ( sizeof(oids) / sizeof(SECOidData) ); i++ ) {
+       oid = &oids[i];
+
+       PORT_Assert ( oid->offset == i );
+
+       entry = PL_HashTableAdd( oidhash, &oid->oid, (void *)oid );
+       if ( entry == NULL ) {
+           PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
+            PORT_Assert(0); /*This function should never fail. */
+           return(SECFailure);
+       }
+
+       if ( oid->cssmAlgorithm != CSSM_ALGID_NONE ) {
+               intptr_t algorithm = oid->cssmAlgorithm;
+           entry = PL_HashTableAdd( oidmechhash,
+                                       (void *)algorithm, (void *)oid );
+           if ( entry == NULL ) {
+               PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
+                PORT_Assert(0); /* This function should never fail. */
+               return(SECFailure);
+           }
+       }
+    }
+
+    PORT_Assert (i == SEC_OID_TOTAL);
+
+    return(SECSuccess);
+}
+
+SECOidData *
+SECOID_FindOIDByCssmAlgorithm(CSSM_ALGORITHMS cssmAlgorithm)
+{
+    SECOidData *ret;
+    int rv;
+
+    pthread_mutex_lock(&oid_hash_mutex);
+    if ( !oidhash ) {
+        rv = InitOIDHash();
+       if ( rv != SECSuccess ) {
+           pthread_mutex_unlock(&oid_hash_mutex);
+           PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
+           return NULL;
+       }
+    }
+    pthread_mutex_unlock(&oid_hash_mutex);
+    intptr_t algorithm = cssmAlgorithm;
+    ret = PL_HashTableLookupConst ( oidmechhash, (void *)algorithm);
+    if ( ret == NULL ) {
+        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
+    }
+
+    return (ret);
+}
+
+SECOidData *
+SECOID_FindOID(const SECItem *oid)
+{
+    SECOidData *ret;
+    int rv;
+
+    pthread_mutex_lock(&oid_hash_mutex);
+    if ( !oidhash ) {
+       rv = InitOIDHash();
+       if ( rv != SECSuccess ) {
+           pthread_mutex_unlock(&oid_hash_mutex);
+           PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
+           return NULL;
+       }
+    }
+    pthread_mutex_unlock(&oid_hash_mutex);
+
+    ret = PL_HashTableLookupConst ( oidhash, oid );
+    if ( ret == NULL ) {
+       ret  = secoid_FindDynamic(oid);
+       if (ret == NULL) {
+           PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
+       }
+    }
+
+    return(ret);
+}
+
+SECOidTag
+SECOID_FindOIDTag(const SECItem *oid)
+{
+    SECOidData *oiddata;
+
+    oiddata = SECOID_FindOID (oid);
+    if (oiddata == NULL)
+       return SEC_OID_UNKNOWN;
+
+    return oiddata->offset;
+}
+
+/* This really should return const. */
+SECOidData *
+SECOID_FindOIDByTag(SECOidTag tagnum)
+{
+
+    if (tagnum >= SEC_OID_TOTAL) {
+       return secoid_FindDynamicByTag(tagnum);
+    }
+
+    PORT_Assert((unsigned int)tagnum < (sizeof(oids) / sizeof(SECOidData)));
+    return (SECOidData *)(&oids[tagnum]);
+}
+
+Boolean SECOID_KnownCertExtenOID (const SECItem *extenOid)
+{
+    SECOidData * oidData;
+
+    oidData = SECOID_FindOID (extenOid);
+    if (oidData == (SECOidData *)NULL)
+       return (PR_FALSE);
+    return ((oidData->supportedExtension == SUPPORTED_CERT_EXTENSION) ?
+            PR_TRUE : PR_FALSE);
+}
+
+
+const char *
+SECOID_FindOIDTagDescription(SECOidTag tagnum)
+{
+  const SECOidData *oidData = SECOID_FindOIDByTag(tagnum);
+  return oidData ? oidData->desc : 0;
+}
+
+/*
+ * free up the oid tables.
+ */
+SECStatus
+SECOID_Shutdown(void)
+{
+    int i;
+
+    pthread_mutex_lock(&oid_hash_mutex);
+    if (oidhash) {
+       PL_HashTableDestroy(oidhash);
+       oidhash = NULL;
+    }
+    if (oidmechhash) {
+       PL_HashTableDestroy(oidmechhash);
+       oidmechhash = NULL;
+    }
+    if (oid_d_hash) {
+       PL_HashTableDestroy(oid_d_hash);
+       oid_d_hash = NULL;
+    }
+    if (secoidDynamicTable) {
+       for (i=0; i < secoidLastDynamicEntry; i++) {
+           PORT_Free(secoidDynamicTable[i]);
+       }
+       PORT_Free(secoidDynamicTable);
+       secoidDynamicTable = NULL;
+       secoidDynamicTableSize = 0;
+       secoidLastDynamicEntry = 0;
+       secoidLastHashEntry = 0;
+    }
+    pthread_mutex_unlock(&oid_hash_mutex);
+    return SECSuccess;
+}
+
+#pragma clang diagnostic pop