f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers/* ***** BEGIN LICENSE BLOCK *****
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * Version: MPL 1.1/GPL 2.0/LGPL 2.1
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers *
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * The contents of this file are subject to the Mozilla Public License Version
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * 1.1 (the "License"); you may not use this file except in compliance with
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * the License. You may obtain a copy of the License at
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * http://www.mozilla.org/MPL/
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers *
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * Software distributed under the License is distributed on an "AS IS" basis,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * for the specific language governing rights and limitations under the
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * License.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers *
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * The Original Code is the Netscape security libraries.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers *
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * The Initial Developer of the Original Code is
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * Netscape Communications Corporation.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * Portions created by the Initial Developer are Copyright (C) 1994-2000
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * the Initial Developer. All Rights Reserved.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers *
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * Contributor(s):
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * Dr Vipul Gupta <vipul.gupta@sun.com>, Sun Microsystems Laboratories
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers *
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * Alternatively, the contents of this file may be used under the terms of
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * either the GNU General Public License Version 2 or later (the "GPL"), or
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * in which case the provisions of the GPL or the LGPL are applicable instead
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * of those above. If you wish to allow use of your version of this file only
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * under the terms of either the GPL or the LGPL, and not to allow others to
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * use your version of this file under the terms of the MPL, indicate your
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * decision by deleting the provisions above and replace them with the notice
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * and other provisions required by the GPL or the LGPL. If you do not delete
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * the provisions above, a recipient may use your version of this file under
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * the terms of any one of the MPL, the GPL or the LGPL.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers *
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * ***** END LICENSE BLOCK ***** */
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers/*
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * Use is subject to license terms.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers *
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * Sun elects to use this software under the MPL license.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers */
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#pragma ident "%Z%%M% %I% %E% SMI"
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#include <sys/types.h>
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#include <sys/systm.h>
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#include <sys/param.h>
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#ifdef _KERNEL
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#include <sys/kmem.h>
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#else
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#include <string.h>
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#endif
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#include "ec.h"
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#include "ecl-curve.h"
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#include "ecc_impl.h"
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#include "secoidt.h"
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define CERTICOM_OID 0x2b, 0x81, 0x04
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define SECG_OID CERTICOM_OID, 0x00
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define ANSI_X962_OID 0x2a, 0x86, 0x48, 0xce, 0x3d
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define ANSI_X962_CURVE_OID ANSI_X962_OID, 0x03
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define ANSI_X962_GF2m_OID ANSI_X962_CURVE_OID, 0x00
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define ANSI_X962_GFp_OID ANSI_X962_CURVE_OID, 0x01
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define CONST_OID static const unsigned char
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers/* ANSI X9.62 prime curve OIDs */
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers/* NOTE: prime192v1 is the same as secp192r1, prime256v1 is the
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers * same as secp256r1
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers */
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962prime192v1[] = { ANSI_X962_GFp_OID, 0x01 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962prime192v2[] = { ANSI_X962_GFp_OID, 0x02 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962prime192v3[] = { ANSI_X962_GFp_OID, 0x03 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962prime239v1[] = { ANSI_X962_GFp_OID, 0x04 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962prime239v2[] = { ANSI_X962_GFp_OID, 0x05 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962prime239v3[] = { ANSI_X962_GFp_OID, 0x06 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962prime256v1[] = { ANSI_X962_GFp_OID, 0x07 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers/* SECG prime curve OIDs */
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsecp112r1[] = { SECG_OID, 0x06 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsecp112r2[] = { SECG_OID, 0x07 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsecp128r1[] = { SECG_OID, 0x1c };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsecp128r2[] = { SECG_OID, 0x1d };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsecp160k1[] = { SECG_OID, 0x09 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsecp160r1[] = { SECG_OID, 0x08 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsecp160r2[] = { SECG_OID, 0x1e };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsecp192k1[] = { SECG_OID, 0x1f };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsecp224k1[] = { SECG_OID, 0x20 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsecp224r1[] = { SECG_OID, 0x21 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsecp256k1[] = { SECG_OID, 0x0a };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsecp384r1[] = { SECG_OID, 0x22 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsecp521r1[] = { SECG_OID, 0x23 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers/* SECG characterisitic two curve OIDs */
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect113r1[] = {SECG_OID, 0x04 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect113r2[] = {SECG_OID, 0x05 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect131r1[] = {SECG_OID, 0x16 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect131r2[] = {SECG_OID, 0x17 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect163k1[] = {SECG_OID, 0x01 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect163r1[] = {SECG_OID, 0x02 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect163r2[] = {SECG_OID, 0x0f };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect193r1[] = {SECG_OID, 0x18 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect193r2[] = {SECG_OID, 0x19 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect233k1[] = {SECG_OID, 0x1a };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect233r1[] = {SECG_OID, 0x1b };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect239k1[] = {SECG_OID, 0x03 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect283k1[] = {SECG_OID, 0x10 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect283r1[] = {SECG_OID, 0x11 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect409k1[] = {SECG_OID, 0x24 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect409r1[] = {SECG_OID, 0x25 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect571k1[] = {SECG_OID, 0x26 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID secgECsect571r1[] = {SECG_OID, 0x27 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers/* ANSI X9.62 characteristic two curve OIDs */
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2pnb163v1[] = { ANSI_X962_GF2m_OID, 0x01 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2pnb163v2[] = { ANSI_X962_GF2m_OID, 0x02 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2pnb163v3[] = { ANSI_X962_GF2m_OID, 0x03 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2pnb176v1[] = { ANSI_X962_GF2m_OID, 0x04 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2tnb191v1[] = { ANSI_X962_GF2m_OID, 0x05 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2tnb191v2[] = { ANSI_X962_GF2m_OID, 0x06 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2tnb191v3[] = { ANSI_X962_GF2m_OID, 0x07 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2onb191v4[] = { ANSI_X962_GF2m_OID, 0x08 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2onb191v5[] = { ANSI_X962_GF2m_OID, 0x09 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2pnb208w1[] = { ANSI_X962_GF2m_OID, 0x0a };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2tnb239v1[] = { ANSI_X962_GF2m_OID, 0x0b };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2tnb239v2[] = { ANSI_X962_GF2m_OID, 0x0c };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2tnb239v3[] = { ANSI_X962_GF2m_OID, 0x0d };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2onb239v4[] = { ANSI_X962_GF2m_OID, 0x0e };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2onb239v5[] = { ANSI_X962_GF2m_OID, 0x0f };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2pnb272w1[] = { ANSI_X962_GF2m_OID, 0x10 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2pnb304w1[] = { ANSI_X962_GF2m_OID, 0x11 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2tnb359v1[] = { ANSI_X962_GF2m_OID, 0x12 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2pnb368w1[] = { ANSI_X962_GF2m_OID, 0x13 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersCONST_OID ansiX962c2tnb431r1[] = { ANSI_X962_GF2m_OID, 0x14 };
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define OI(x) { siDEROID, (unsigned char *)x, sizeof x }
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#ifndef SECOID_NO_STRINGS
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define OD(oid,tag,desc,mech,ext) { OI(oid), tag, desc, mech, ext }
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#else
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define OD(oid,tag,desc,mech,ext) { OI(oid), tag, 0, mech, ext }
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#endif
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define CKM_INVALID_MECHANISM 0xffffffffUL
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers/* XXX this is incorrect */
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define INVALID_CERT_EXTENSION 1
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define CKM_ECDSA 0x00001041
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define CKM_ECDSA_SHA1 0x00001042
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers#define CKM_ECDH1_DERIVE 0x00001050
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersstatic SECOidData ANSI_prime_oids[] = {
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962prime192v1, ECCurve_NIST_P192,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve prime192v1 (aka secp192r1, NIST P-192)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962prime192v2, ECCurve_X9_62_PRIME_192V2,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve prime192v2",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962prime192v3, ECCurve_X9_62_PRIME_192V3,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve prime192v3",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962prime239v1, ECCurve_X9_62_PRIME_239V1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve prime239v1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962prime239v2, ECCurve_X9_62_PRIME_239V2,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve prime239v2",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962prime239v3, ECCurve_X9_62_PRIME_239V3,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve prime239v3",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962prime256v1, ECCurve_NIST_P256,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve prime256v1 (aka secp256r1, NIST P-256)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION )
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers};
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersstatic SECOidData SECG_oids[] = {
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect163k1, ECCurve_NIST_K163,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect163k1 (aka NIST K-163)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect163r1, ECCurve_SECG_CHAR2_163R1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect163r1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect239k1, ECCurve_SECG_CHAR2_239K1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect239k1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect113r1, ECCurve_SECG_CHAR2_113R1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect113r1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect113r2, ECCurve_SECG_CHAR2_113R2,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect113r2",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsecp112r1, ECCurve_SECG_PRIME_112R1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve secp112r1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsecp112r2, ECCurve_SECG_PRIME_112R2,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve secp112r2",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsecp160r1, ECCurve_SECG_PRIME_160R1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve secp160r1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsecp160k1, ECCurve_SECG_PRIME_160K1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve secp160k1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsecp256k1, ECCurve_SECG_PRIME_256K1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve secp256k1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect163r2, ECCurve_NIST_B163,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect163r2 (aka NIST B-163)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect283k1, ECCurve_NIST_K283,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect283k1 (aka NIST K-283)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect283r1, ECCurve_NIST_B283,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect283r1 (aka NIST B-283)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect131r1, ECCurve_SECG_CHAR2_131R1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect131r1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect131r2, ECCurve_SECG_CHAR2_131R2,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect131r2",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect193r1, ECCurve_SECG_CHAR2_193R1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect193r1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect193r2, ECCurve_SECG_CHAR2_193R2,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect193r2",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect233k1, ECCurve_NIST_K233,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect233k1 (aka NIST K-233)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect233r1, ECCurve_NIST_B233,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect233r1 (aka NIST B-233)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsecp128r1, ECCurve_SECG_PRIME_128R1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve secp128r1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsecp128r2, ECCurve_SECG_PRIME_128R2,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve secp128r2",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsecp160r2, ECCurve_SECG_PRIME_160R2,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve secp160r2",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsecp192k1, ECCurve_SECG_PRIME_192K1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve secp192k1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsecp224k1, ECCurve_SECG_PRIME_224K1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve secp224k1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsecp224r1, ECCurve_NIST_P224,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve secp224r1 (aka NIST P-224)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsecp384r1, ECCurve_NIST_P384,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve secp384r1 (aka NIST P-384)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsecp521r1, ECCurve_NIST_P521,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve secp521r1 (aka NIST P-521)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect409k1, ECCurve_NIST_K409,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect409k1 (aka NIST K-409)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect409r1, ECCurve_NIST_B409,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect409r1 (aka NIST B-409)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect571k1, ECCurve_NIST_K571,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect571k1 (aka NIST K-571)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( secgECsect571r1, ECCurve_NIST_B571,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "SECG elliptic curve sect571r1 (aka NIST B-571)",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION )
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers};
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersstatic SECOidData ANSI_oids[] = {
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers /* ANSI X9.62 named elliptic curves (characteristic two field) */
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2pnb163v1, ECCurve_X9_62_CHAR2_PNB163V1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2pnb163v1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2pnb163v2, ECCurve_X9_62_CHAR2_PNB163V2,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2pnb163v2",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2pnb163v3, ECCurve_X9_62_CHAR2_PNB163V3,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2pnb163v3",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2pnb176v1, ECCurve_X9_62_CHAR2_PNB176V1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2pnb176v1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2tnb191v1, ECCurve_X9_62_CHAR2_TNB191V1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2tnb191v1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2tnb191v2, ECCurve_X9_62_CHAR2_TNB191V2,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2tnb191v2",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2tnb191v3, ECCurve_X9_62_CHAR2_TNB191V3,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2tnb191v3",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2pnb208w1, ECCurve_X9_62_CHAR2_PNB208W1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2pnb208w1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2tnb239v1, ECCurve_X9_62_CHAR2_TNB239V1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2tnb239v1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2tnb239v2, ECCurve_X9_62_CHAR2_TNB239V2,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2tnb239v2",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2tnb239v3, ECCurve_X9_62_CHAR2_TNB239V3,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2tnb239v3",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers { { siDEROID, NULL, 0 }, ECCurve_noName,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "Unknown OID", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION },
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2pnb272w1, ECCurve_X9_62_CHAR2_PNB272W1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2pnb272w1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2pnb304w1, ECCurve_X9_62_CHAR2_PNB304W1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2pnb304w1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2tnb359v1, ECCurve_X9_62_CHAR2_TNB359V1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2tnb359v1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2pnb368w1, ECCurve_X9_62_CHAR2_PNB368W1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2pnb368w1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION ),
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers OD( ansiX962c2tnb431r1, ECCurve_X9_62_CHAR2_TNB431R1,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers "ANSI X9.62 elliptic curve c2tnb431r1",
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers CKM_INVALID_MECHANISM,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers INVALID_CERT_EXTENSION )
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers};
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersSECOidData *
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersSECOID_FindOID(const SECItem *oid)
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers{
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers SECOidData *po;
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers SECOidData *ret;
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers int i;
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers if (oid->len == 8) {
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers if (oid->data[6] == 0x00) {
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers /* XXX bounds check */
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers po = &ANSI_oids[oid->data[7]];
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers if (memcmp(oid->data, po->oid.data, 8) == 0)
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers ret = po;
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers }
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers if (oid->data[6] == 0x01) {
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers /* XXX bounds check */
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers po = &ANSI_prime_oids[oid->data[7]];
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers if (memcmp(oid->data, po->oid.data, 8) == 0)
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers ret = po;
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers }
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers } else if (oid->len == 5) {
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers /* XXX bounds check */
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers po = &SECG_oids[oid->data[4]];
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers if (memcmp(oid->data, po->oid.data, 5) == 0)
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers ret = po;
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers } else {
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers ret = NULL;
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers }
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers return(ret);
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers}
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersECCurveName
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersSECOID_FindOIDTag(const SECItem *oid)
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers{
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers SECOidData *oiddata;
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers oiddata = SECOID_FindOID (oid);
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers if (oiddata == NULL)
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers return ECCurve_noName;
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers return oiddata->offset;
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers}