Add OID cross reference table.
authorDr. Stephen Henson <steve@openssl.org>
Tue, 18 Apr 2006 23:36:07 +0000 (23:36 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Tue, 18 Apr 2006 23:36:07 +0000 (23:36 +0000)
Fix some typos in GOST OIDs.

Update dependencies.

13 files changed:
CHANGES
crypto/ec/Makefile
crypto/objects/Makefile
crypto/objects/obj_dat.h
crypto/objects/obj_mac.h
crypto/objects/obj_mac.num
crypto/objects/obj_xref.c [new file with mode: 0644]
crypto/objects/obj_xref.h [new file with mode: 0644]
crypto/objects/obj_xref.txt [new file with mode: 0644]
crypto/objects/objects.h
crypto/objects/objects.txt
crypto/objects/objxref.pl [new file with mode: 0644]
crypto/pkcs7/Makefile

diff --git a/CHANGES b/CHANGES
index 9fe59f9..d87e1eb 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,12 @@
 
  Changes between 0.9.8a and 0.9.9  [xx XXX xxxx]
 
+  *) Add an OID cross reference table and utility functions. Its purpose is to
+     translate between signature OIDs such as SHA1WithrsaEncryption and SHA1,
+     rsaEncryption. This will allow some of the algorithm specific hackery
+     needed to use the correct OID to be removed. 
+     [Steve Henson]
+
   *) Remove algorithm specific dependencies when setting PKCS7_SIGNER_INFO
      structures for PKCS7_sign(). They are now set up by the relevant public
      key ASN1 method.
index bae5f6f..a5cd042 100644 (file)
@@ -173,6 +173,20 @@ ec_mult.o: ../../include/openssl/obj_mac.h ../../include/openssl/opensslconf.h
 ec_mult.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 ec_mult.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 ec_mult.o: ../../include/openssl/symhacks.h ec_lcl.h ec_mult.c
+ec_pmeth.o: ../../e_os.h ../../include/openssl/asn1.h
+ec_pmeth.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
+ec_pmeth.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
+ec_pmeth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
+ec_pmeth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
+ec_pmeth.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+ec_pmeth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
+ec_pmeth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+ec_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
+ec_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
+ec_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+ec_pmeth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
+ec_pmeth.o: ../../include/openssl/x509_vfy.h ../cryptlib.h ../evp/evp_locl.h
+ec_pmeth.o: ec_pmeth.c
 ec_print.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
 ec_print.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
 ec_print.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
index 08af092..ce9f585 100644 (file)
@@ -18,20 +18,20 @@ TEST=
 APPS=
 
 LIB=$(TOP)/libcrypto.a
-LIBSRC=        o_names.c obj_dat.c obj_lib.c obj_err.c
-LIBOBJ= o_names.o obj_dat.o obj_lib.o obj_err.o
+LIBSRC=        o_names.c obj_dat.c obj_lib.c obj_err.c obj_xref.c
+LIBOBJ= o_names.o obj_dat.o obj_lib.o obj_err.o obj_xref.o
 
 SRC= $(LIBSRC)
 
 EXHEADER= objects.h obj_mac.h
-HEADER=        $(EXHEADER) obj_dat.h
+HEADER=        $(EXHEADER) obj_dat.h obj_xref.h
 
 ALL=    $(GENERAL) $(SRC) $(HEADER)
 
 top:
        (cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all)
 
-all:   obj_dat.h lib
+all:   obj_dat.h obj_xref.h lib
 
 lib:   $(LIBOBJ)
        $(AR) $(LIB) $(LIBOBJ)
@@ -46,6 +46,10 @@ obj_mac.h: objects.pl objects.txt obj_mac.num
        $(PERL) objects.pl objects.txt obj_mac.num obj_mac.h
        @sleep 1; touch obj_mac.h; sleep 1
 
+obj_xref.h: objxref.pl obj_xref.txt obj_mac.num
+       $(PERL) objxref.pl > obj_xref.h
+       @sleep 1; touch obj_xref.h; sleep 1
+
 files:
        $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
 
index 5d6fe0b..b10d85d 100644 (file)
@@ -825,8 +825,8 @@ static unsigned char lvalues[5345]={
 0x2A,0x85,0x03,0x02,0x02,0x17,               /* [5298] OBJ_id_GostR3411_94_prf */
 0x2A,0x85,0x03,0x02,0x09,0x01,0x05,0x03,     /* [5304] OBJ_id_GostR3410_94_cc */
 0x2A,0x85,0x03,0x02,0x09,0x01,0x05,0x04,     /* [5312] OBJ_id_GostR3410_2001_cc */
-0x2A,0x85,0x03,0x02,0x09,0x01,0x03,0x03,     /* [5320] OBJ_id_GostR3410_11_94_with_GostR3411_94_cc */
-0x2A,0x85,0x03,0x02,0x09,0x01,0x03,0x04,     /* [5328] OBJ_id_GostR3410_2001_with_GostR3411_94_cc */
+0x2A,0x85,0x03,0x02,0x09,0x01,0x03,0x03,     /* [5320] OBJ_id_GostR3411_94_with_GostR3410_94_cc */
+0x2A,0x85,0x03,0x02,0x09,0x01,0x03,0x04,     /* [5328] OBJ_id_GostR3411_94_with_GostR3410_2001_cc */
 0x2A,0x85,0x03,0x02,0x09,0x01,0x08,0x01,     /* [5336] OBJ_id_GostR3410_2001_ParamSet_cc */
 };
 
@@ -2113,12 +2113,12 @@ static ASN1_OBJECT nid_objs[NUM_NID]={
        &(lvalues[5304]),0},
 {"gost2001cc","GOST 34.10-2001 Cryptocom",NID_id_GostR3410_2001_cc,8,
        &(lvalues[5312]),0},
-{"id-GostR3410-11-94-with-GostR3411-94-cc",
-       "GOST R 34.10 with GOST R 34.11-94 Cryptocom",
-       NID_id_GostR3410_11_94_with_GostR3411_94_cc,8,&(lvalues[5320]),0},
-{"id-GostR3410-2001-with-GostR3411-94-cc",
-       "GOST R 34.10-2001 with GOST R 34.10-94 Cryptocom",
-       NID_id_GostR3410_2001_with_GostR3411_94_cc,8,&(lvalues[5328]),0},
+{"id-GostR3411-94-with-GostR3410-94-cc",
+       "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom",
+       NID_id_GostR3411_94_with_GostR3410_94_cc,8,&(lvalues[5320]),0},
+{"id-GostR3411-94-with-GostR3410-2001-cc",
+       "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom",
+       NID_id_GostR3411_94_with_GostR3410_2001_cc,8,&(lvalues[5328]),0},
 {"id-GostR3410-2001-ParamSet-cc",
        "GOST R 3410-2001 Parameter Set Cryptocom",
        NID_id_GostR3410_2001_ParamSet_cc,8,&(lvalues[5336]),0},
@@ -2393,7 +2393,6 @@ static ASN1_OBJECT *sn_objs[NUM_SN]={
 &(nid_objs[789]),/* "id-Gost28147-89-None-KeyMeshing" */
 &(nid_objs[760]),/* "id-Gost28147-89-TestParamSet" */
 &(nid_objs[794]),/* "id-Gost28147-89-cc" */
-&(nid_objs[799]),/* "id-GostR3410-11-94-with-GostR3411-94-cc" */
 &(nid_objs[777]),/* "id-GostR3410-2001-CryptoPro-A-ParamSet" */
 &(nid_objs[778]),/* "id-GostR3410-2001-CryptoPro-B-ParamSet" */
 &(nid_objs[779]),/* "id-GostR3410-2001-CryptoPro-C-ParamSet" */
@@ -2401,7 +2400,6 @@ static ASN1_OBJECT *sn_objs[NUM_SN]={
 &(nid_objs[781]),/* "id-GostR3410-2001-CryptoPro-XchB-ParamSet" */
 &(nid_objs[801]),/* "id-GostR3410-2001-ParamSet-cc" */
 &(nid_objs[776]),/* "id-GostR3410-2001-TestParamSet" */
-&(nid_objs[800]),/* "id-GostR3410-2001-with-GostR3411-94-cc" */
 &(nid_objs[786]),/* "id-GostR3410-2001DH" */
 &(nid_objs[769]),/* "id-GostR3410-94-CryptoPro-A-ParamSet" */
 &(nid_objs[770]),/* "id-GostR3410-94-CryptoPro-B-ParamSet" */
@@ -2419,7 +2417,9 @@ static ASN1_OBJECT *sn_objs[NUM_SN]={
 &(nid_objs[759]),/* "id-GostR3411-94-CryptoProParamSet" */
 &(nid_objs[758]),/* "id-GostR3411-94-TestParamSet" */
 &(nid_objs[754]),/* "id-GostR3411-94-with-GostR3410-2001" */
+&(nid_objs[800]),/* "id-GostR3411-94-with-GostR3410-2001-cc" */
 &(nid_objs[755]),/* "id-GostR3411-94-with-GostR3410-94" */
+&(nid_objs[799]),/* "id-GostR3411-94-with-GostR3410-94-cc" */
 &(nid_objs[783]),/* "id-HMACGostR3411-94" */
 &(nid_objs[266]),/* "id-aca" */
 &(nid_objs[355]),/* "id-aca-accessIdentity" */
@@ -2947,16 +2947,16 @@ static ASN1_OBJECT *ln_objs[NUM_LN]={
 &(nid_objs[785]),/* "GOST 28147-89 MAC" */
 &(nid_objs[798]),/* "GOST 34.10-2001 Cryptocom" */
 &(nid_objs[797]),/* "GOST 34.10-94 Cryptocom" */
-&(nid_objs[799]),/* "GOST R 34.10 with GOST R 34.11-94 Cryptocom" */
 &(nid_objs[756]),/* "GOST R 34.10-2001" */
 &(nid_objs[786]),/* "GOST R 34.10-2001 DH" */
-&(nid_objs[800]),/* "GOST R 34.10-2001 with GOST R 34.10-94 Cryptocom" */
 &(nid_objs[757]),/* "GOST R 34.10-94" */
 &(nid_objs[787]),/* "GOST R 34.10-94 DH" */
 &(nid_objs[795]),/* "GOST R 34.11-94" */
 &(nid_objs[796]),/* "GOST R 34.11-94 PRF" */
 &(nid_objs[754]),/* "GOST R 34.11-94 with GOST R 34.10-2001" */
+&(nid_objs[800]),/* "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom" */
 &(nid_objs[755]),/* "GOST R 34.11-94 with GOST R 34.10-94" */
+&(nid_objs[799]),/* "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom" */
 &(nid_objs[801]),/* "GOST R 3410-2001 Parameter Set Cryptocom" */
 &(nid_objs[783]),/* "HMAC GOST 34.11-94" */
 &(nid_objs[432]),/* "Hold Instruction Call Issuer" */
@@ -4080,8 +4080,8 @@ static ASN1_OBJECT *obj_objs[NUM_OBJ]={
 &(nid_objs[508]),/* OBJ_id_hex_multipart_message     1 3 6 1 7 1 1 2 */
 &(nid_objs[57]),/* OBJ_netscape                     2 16 840 1 113730 */
 &(nid_objs[437]),/* OBJ_pilot                        0 9 2342 19200300 100 */
-&(nid_objs[799]),/* OBJ_id_GostR3410_11_94_with_GostR3411_94_cc 1 2 643 2 9 1 3 3 */
-&(nid_objs[800]),/* OBJ_id_GostR3410_2001_with_GostR3411_94_cc 1 2 643 2 9 1 3 4 */
+&(nid_objs[799]),/* OBJ_id_GostR3411_94_with_GostR3410_94_cc 1 2 643 2 9 1 3 3 */
+&(nid_objs[800]),/* OBJ_id_GostR3411_94_with_GostR3410_2001_cc 1 2 643 2 9 1 3 4 */
 &(nid_objs[797]),/* OBJ_id_GostR3410_94_cc           1 2 643 2 9 1 5 3 */
 &(nid_objs[798]),/* OBJ_id_GostR3410_2001_cc         1 2 643 2 9 1 5 4 */
 &(nid_objs[794]),/* OBJ_id_Gost28147_89_cc           1 2 643 2 9 1 6 1 */
index 7a64e94..44c2166 100644 (file)
 #define NID_id_GostR3410_2001_cc               798
 #define OBJ_id_GostR3410_2001_cc               OBJ_cryptocom,1L,5L,4L
 
-#define SN_id_GostR3410_11_94_with_GostR3411_94_cc             "id-GostR3410-11-94-with-GostR3411-94-cc"
-#define LN_id_GostR3410_11_94_with_GostR3411_94_cc             "GOST R 34.10 with GOST R 34.11-94 Cryptocom"
-#define NID_id_GostR3410_11_94_with_GostR3411_94_cc            799
-#define OBJ_id_GostR3410_11_94_with_GostR3411_94_cc            OBJ_cryptocom,1L,3L,3L
-
-#define SN_id_GostR3410_2001_with_GostR3411_94_cc              "id-GostR3410-2001-with-GostR3411-94-cc"
-#define LN_id_GostR3410_2001_with_GostR3411_94_cc              "GOST R 34.10-2001 with GOST R 34.10-94 Cryptocom"
-#define NID_id_GostR3410_2001_with_GostR3411_94_cc             800
-#define OBJ_id_GostR3410_2001_with_GostR3411_94_cc             OBJ_cryptocom,1L,3L,4L
+#define SN_id_GostR3411_94_with_GostR3410_94_cc                "id-GostR3411-94-with-GostR3410-94-cc"
+#define LN_id_GostR3411_94_with_GostR3410_94_cc                "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom"
+#define NID_id_GostR3411_94_with_GostR3410_94_cc               799
+#define OBJ_id_GostR3411_94_with_GostR3410_94_cc               OBJ_cryptocom,1L,3L,3L
+
+#define SN_id_GostR3411_94_with_GostR3410_2001_cc              "id-GostR3411-94-with-GostR3410-2001-cc"
+#define LN_id_GostR3411_94_with_GostR3410_2001_cc              "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom"
+#define NID_id_GostR3411_94_with_GostR3410_2001_cc             800
+#define OBJ_id_GostR3411_94_with_GostR3410_2001_cc             OBJ_cryptocom,1L,3L,4L
 
 #define SN_id_GostR3410_2001_ParamSet_cc               "id-GostR3410-2001-ParamSet-cc"
 #define LN_id_GostR3410_2001_ParamSet_cc               "GOST R 3410-2001 Parameter Set Cryptocom"
index 550d6ee..e9e79ff 100644 (file)
@@ -796,6 +796,6 @@ id_GostR3411_94             795
 id_GostR3411_94_prf            796
 id_GostR3410_94_cc             797
 id_GostR3410_2001_cc           798
-id_GostR3410_11_94_with_GostR3411_94_cc                799
-id_GostR3410_2001_with_GostR3411_94_cc         800
+id_GostR3411_94_with_GostR3410_94_cc           799
+id_GostR3411_94_with_GostR3410_2001_cc         800
 id_GostR3410_2001_ParamSet_cc          801
diff --git a/crypto/objects/obj_xref.c b/crypto/objects/obj_xref.c
new file mode 100644 (file)
index 0000000..d26394f
--- /dev/null
@@ -0,0 +1,132 @@
+/* crypto/objects/obj_xref.c */
+/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
+ * project 2006.
+ */
+/* ====================================================================
+ * Copyright (c) 2006 The OpenSSL Project.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ *    software must display the following acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please contact
+ *    licensing@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ *    nor may "OpenSSL" appear in their names without prior written
+ *    permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com).  This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+#include <openssl/objects.h>
+#include "obj_xref.h"
+
+static int cmp_sig(const nid_triple *a, const nid_triple *b)
+       {
+       return **a - **b;
+       }
+
+static int cmp_sigx(const nid_triple **a, const nid_triple **b)
+       {
+       int ret;
+       ret = (**a)[1] - (**b)[1];
+       if (ret)
+               return ret;
+       return (**a)[2] - (**b)[2];
+       }
+
+
+int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid)
+       {
+       nid_triple tmp, *rv;
+       tmp[0] = signid;
+
+       rv = (nid_triple *)OBJ_bsearch((char *)&tmp,
+                               (char *)sigoid_srt,
+                               sizeof(sigoid_srt) / sizeof(nid_triple),
+                               sizeof(nid_triple),
+                               (int (*)(const void *, const void *))cmp_sig);
+       if (rv == NULL)
+               return 0;
+       *pdig_nid = (*rv)[1];
+       *ppkey_nid = (*rv)[2];
+       return 1;
+       }
+
+int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid)
+       {
+       nid_triple tmp, *t=&tmp, **rv;
+       tmp[1] = dig_nid;
+       tmp[2] = pkey_nid;
+
+       rv = (nid_triple **)OBJ_bsearch((char *)&t,
+                               (char *)sigoid_srt_xref,
+                               sizeof(sigoid_srt_xref) / sizeof(nid_triple *),
+                               sizeof(nid_triple *),
+                               (int (*)(const void *, const void *))cmp_sigx);
+       if (rv == NULL)
+               return 0;
+       *psignid = (**rv)[0];
+       return 1;
+       }
+
+#ifdef OBJ_XREF_TEST
+
+main()
+       {
+       int n1, n2, n3;
+
+       int i, rv;
+
+       for (i = 0; i < sizeof(sigoid_srt) / sizeof(nid_triple); i++)
+               {
+               n1 = sigoid_srt[i][0];
+               rv = OBJ_find_sigid_algs(n1, &n2, &n3);
+               printf("Forward: %d, %s %s %s\n", rv,
+                       OBJ_nid2ln(n1), OBJ_nid2ln(n2), OBJ_nid2ln(n3));
+               n1=0;
+               rv = OBJ_find_sigid_by_algs(&n1, n2, n3);
+               printf("Reverse: %d, %s %s %s\n", rv,
+                       OBJ_nid2ln(n1), OBJ_nid2ln(n2), OBJ_nid2ln(n3));
+               }
+       }
+       
+#endif
diff --git a/crypto/objects/obj_xref.h b/crypto/objects/obj_xref.h
new file mode 100644 (file)
index 0000000..b9efad7
--- /dev/null
@@ -0,0 +1,53 @@
+
+typedef int nid_triple[3];
+
+static const nid_triple sigoid_srt[] =
+       {
+       {NID_md2WithRSAEncryption, NID_md2, NID_rsaEncryption},
+       {NID_md5WithRSAEncryption, NID_md5, NID_rsaEncryption},
+       {NID_shaWithRSAEncryption, NID_sha, NID_rsaEncryption},
+       {NID_sha1WithRSAEncryption, NID_sha1, NID_rsaEncryption},
+       {NID_dsaWithSHA, NID_sha, NID_dsa},
+       {NID_dsaWithSHA1_2, NID_sha1, NID_dsa_2},
+       {NID_mdc2WithRSA, NID_mdc2, NID_rsaEncryption},
+       {NID_md5WithRSA, NID_md5, NID_rsa},
+       {NID_dsaWithSHA1, NID_sha1, NID_dsa},
+       {NID_sha1WithRSA, NID_sha1, NID_rsa},
+       {NID_ripemd160WithRSA, NID_ripemd160, NID_rsaEncryption},
+       {NID_md4WithRSAEncryption, NID_md4, NID_rsaEncryption},
+       {NID_ecdsa_with_SHA1, NID_sha1, NID_X9_62_id_ecPublicKey},
+       {NID_sha256WithRSAEncryption, NID_sha256, NID_rsaEncryption},
+       {NID_sha384WithRSAEncryption, NID_sha384, NID_rsaEncryption},
+       {NID_sha512WithRSAEncryption, NID_sha512, NID_rsaEncryption},
+       {NID_sha224WithRSAEncryption, NID_sha224, NID_rsaEncryption},
+       {NID_id_GostR3411_94_with_GostR3410_2001, NID_id_GostR3411_94, NID_id_GostR3410_2001},
+       {NID_id_GostR3411_94_with_GostR3410_94, NID_id_GostR3411_94, NID_id_GostR3410_94},
+       {NID_id_GostR3411_94_with_GostR3410_94_cc, NID_id_GostR3411_94, NID_id_GostR3410_94_cc},
+       {NID_id_GostR3411_94_with_GostR3410_2001_cc, NID_id_GostR3411_94, NID_id_GostR3410_2001_cc},
+       };
+
+static const nid_triple * const sigoid_srt_xref[] =
+       {
+       &sigoid_srt[0],
+       &sigoid_srt[1],
+       &sigoid_srt[7],
+       &sigoid_srt[2],
+       &sigoid_srt[4],
+       &sigoid_srt[3],
+       &sigoid_srt[9],
+       &sigoid_srt[5],
+       &sigoid_srt[8],
+       &sigoid_srt[12],
+       &sigoid_srt[6],
+       &sigoid_srt[10],
+       &sigoid_srt[11],
+       &sigoid_srt[13],
+       &sigoid_srt[14],
+       &sigoid_srt[15],
+       &sigoid_srt[16],
+       &sigoid_srt[17],
+       &sigoid_srt[18],
+       &sigoid_srt[19],
+       &sigoid_srt[20],
+       };
+
diff --git a/crypto/objects/obj_xref.txt b/crypto/objects/obj_xref.txt
new file mode 100644 (file)
index 0000000..a90e0c5
--- /dev/null
@@ -0,0 +1,33 @@
+# OID cross reference table.
+# Links signatures OIDs to their corresponding public key algorithms
+# and digests.
+
+md2WithRSAEncryption   md2     rsaEncryption
+md5WithRSAEncryption   md5     rsaEncryption
+shaWithRSAEncryption   sha     rsaEncryption
+sha1WithRSAEncryption  sha1    rsaEncryption
+md4WithRSAEncryption   md4     rsaEncryption
+sha256WithRSAEncryption sha256 rsaEncryption
+sha384WithRSAEncryption        sha384  rsaEncryption
+sha512WithRSAEncryption        sha512  rsaEncryption
+sha224WithRSAEncryption        sha224  rsaEncryption
+mdc2WithRSA            mdc2    rsaEncryption
+ripemd160WithRSA       ripemd160 rsaEncryption
+
+# Alternative deprecated OIDs. By using the older "rsa" OID this
+# type will be recognized by not normally used.
+
+md5WithRSA             md5     rsa
+sha1WithRSA            sha1    rsa
+
+dsaWithSHA             sha     dsa
+dsaWithSHA1            sha1    dsa
+
+dsaWithSHA1_2          sha1    dsa_2
+
+ecdsa_with_SHA1                sha1    X9_62_id_ecPublicKey
+
+id_GostR3411_94_with_GostR3410_2001    id_GostR3411_94 id_GostR3410_2001
+id_GostR3411_94_with_GostR3410_94      id_GostR3411_94 id_GostR3410_94
+id_GostR3411_94_with_GostR3410_94_cc   id_GostR3411_94 id_GostR3410_94_cc
+id_GostR3411_94_with_GostR3410_2001_cc id_GostR3411_94 id_GostR3410_2001_cc
index 7242f76..97b1107 100644 (file)
@@ -1022,6 +1022,9 @@ int               OBJ_create(const char *oid,const char *sn,const char *ln);
 void           OBJ_cleanup(void );
 int            OBJ_create_objects(BIO *in);
 
+int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid);
+int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid);
+
 /* BEGIN ERROR CODES */
 /* The following lines are auto generated by the script mkerr.pl. Any changes
  * made after this point may be overwritten when the script is next run.
index 972c6e1..62c5bbe 100644 (file)
@@ -1122,7 +1122,7 @@ cryptocom 1 5 3           : gost94cc      : GOST 34.10-94 Cryptocom
 !Cname id-GostR3410-2001-cc
 cryptocom 1 5 4                : gost2001cc    : GOST 34.10-2001 Cryptocom
 
-cryptocom 1 3 3                : id-GostR3410-11-94-with-GostR3411-94-cc : GOST R 34.10 with GOST R 34.11-94 Cryptocom
-cryptocom 1 3 4                : id-GostR3410-2001-with-GostR3411-94-cc : GOST R 34.10-2001 with GOST R 34.10-94 Cryptocom
+cryptocom 1 3 3                : id-GostR3411-94-with-GostR3410-94-cc : GOST R 34.11-94 with GOST R 34.10-94 Cryptocom
+cryptocom 1 3 4                : id-GostR3411-94-with-GostR3410-2001-cc : GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom
 
 cryptocom 1 8 1                : id-GostR3410-2001-ParamSet-cc : GOST R 3410-2001 Parameter Set Cryptocom
diff --git a/crypto/objects/objxref.pl b/crypto/objects/objxref.pl
new file mode 100644 (file)
index 0000000..0dd360b
--- /dev/null
@@ -0,0 +1,91 @@
+#!/usr/local/bin/perl
+
+open IN, "obj_mac.num";
+
+# Read in OID nid values for a lookup table.
+
+while (<IN>)
+       {
+       chomp;
+       my ($name, $num) = /^(\S+)\s+(\S+)$/;
+       $oid_tbl{$name} = $num;
+       }
+close IN;
+
+open IN, "obj_xref.txt";
+
+my $ln = 1;
+
+while (<IN>)
+       {
+       chomp;
+       s/#.*$//;
+       next if (/^\S*$/);
+       my ($xr, $p1, $p2) = /^(\S+)\s+(\S+)\s+(\S+)/;
+       check_oid($xr);
+       check_oid($p1);
+       check_oid($p2);
+       $xref_tbl{$xr} = [$p1, $p2, $ln];
+       }
+
+my @xrkeys = keys %xref_tbl;
+
+my @srt1 = sort { $oid_tbl{$a} <=> $oid_tbl{$b}} @xrkeys;
+
+for(my $i = 0; $i <= $#srt1; $i++)
+       {
+       $xref_tbl{$srt1[$i]}[2] = $i;
+       }
+
+my @srt2 = sort
+       {
+       my$ap1 = $oid_tbl{$xref_tbl{$a}[0]};
+       my$bp1 = $oid_tbl{$xref_tbl{$b}[0]};
+       return $ap1 - $bp1 if ($ap1 != $bp1);
+       my$ap2 = $oid_tbl{$xref_tbl{$a}[1]};
+       my$bp2 = $oid_tbl{$xref_tbl{$b}[1]};
+
+       return $ap2 - $bp2;
+       } @xrkeys;
+       
+
+print <<EOF;
+
+typedef int nid_triple[3];
+
+static const nid_triple sigoid_srt[] =
+       {
+EOF
+
+foreach (@srt1)
+       {
+       my $xr = $_;
+       my ($p1, $p2) = @{$xref_tbl{$_}};
+       print "\t{NID_$xr, NID_$p1, NID_$p2},\n";
+       }
+
+print "\t};";
+print <<EOF;
+
+
+static const nid_triple * const sigoid_srt_xref[] =
+       {
+EOF
+
+foreach (@srt2)
+       {
+       my $x = $xref_tbl{$_}[2];
+       print "\t\&sigoid_srt\[$x\],\n";
+       }
+
+print "\t};\n\n";
+
+sub check_oid
+       {
+       my ($chk) = @_;
+       if (!exists $oid_tbl{$chk})
+               {
+               die "Not Found \"$chk\"\n";
+               }
+       }
+
index 3f7e88b..364bc1d 100644 (file)
@@ -147,7 +147,7 @@ pk7_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 pk7_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 pk7_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 pk7_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
-pk7_lib.o: ../cryptlib.h pk7_lib.c
+pk7_lib.o: ../asn1/asn1_locl.h ../cryptlib.h pk7_lib.c
 pk7_mime.o: ../../e_os.h ../../include/openssl/asn1.h
 pk7_mime.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 pk7_mime.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h