Rename asn1_lib.c to asn1_old_lib.c
authorjsing <jsing@openbsd.org>
Wed, 15 Dec 2021 18:12:10 +0000 (18:12 +0000)
committerjsing <jsing@openbsd.org>
Wed, 15 Dec 2021 18:12:10 +0000 (18:12 +0000)
This will allow us to add a new asn1_lib.c while replacing the code that is
in currently in asn1_old_lib.c.

Discussed with tb@

lib/libcrypto/Makefile
lib/libcrypto/asn1/asn1_lib.c [deleted file]
lib/libcrypto/asn1/asn1_old_lib.c [new file with mode: 0644]

index 64b5ceb..46df3f6 100644 (file)
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.57 2021/12/15 18:00:31 jsing Exp $
+# $OpenBSD: Makefile,v 1.58 2021/12/15 18:12:10 jsing Exp $
 
 LIB=   crypto
 LIBREBUILD=y
@@ -63,7 +63,7 @@ SRCS+= tasn_new.c tasn_fre.c tasn_enc.c tasn_dec.c tasn_utl.c tasn_typ.c
 SRCS+= tasn_prn.c ameth_lib.c
 SRCS+= n_pkey.c
 SRCS+= x_pkey.c x_exten.c bio_asn1.c bio_ndef.c asn_mime.c
-SRCS+= asn1_gen.c asn1_par.c asn1_lib.c asn1_err.c a_strnid.c
+SRCS+= asn1_gen.c asn1_par.c asn1_old_lib.c asn1_err.c a_strnid.c
 SRCS+= evp_asn1.c asn_pack.c p5_pbe.c p5_pbev2.c p8_pkey.c asn_moid.c
 SRCS+= a_time_tm.c asn1_types.c
 
diff --git a/lib/libcrypto/asn1/asn1_lib.c b/lib/libcrypto/asn1/asn1_lib.c
deleted file mode 100644 (file)
index fc0958f..0000000
+++ /dev/null
@@ -1,286 +0,0 @@
-/* $OpenBSD: asn1_lib.c,v 1.49 2021/12/15 18:00:31 jsing Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * 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 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 acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS 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 AUTHOR OR 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.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include <limits.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <openssl/asn1.h>
-#include <openssl/err.h>
-
-static int asn1_get_length(const unsigned char **pp, int *inf, long *rl, int max);
-static void asn1_put_length(unsigned char **pp, int length);
-
-static int
-_asn1_check_infinite_end(const unsigned char **p, long len)
-{
-       /* If there is 0 or 1 byte left, the length check should pick
-        * things up */
-       if (len <= 0)
-               return (1);
-       else if ((len >= 2) && ((*p)[0] == 0) && ((*p)[1] == 0)) {
-               (*p) += 2;
-               return (1);
-       }
-       return (0);
-}
-
-int
-ASN1_check_infinite_end(unsigned char **p, long len)
-{
-       return _asn1_check_infinite_end((const unsigned char **)p, len);
-}
-
-int
-ASN1_const_check_infinite_end(const unsigned char **p, long len)
-{
-       return _asn1_check_infinite_end(p, len);
-}
-
-int
-ASN1_get_object(const unsigned char **pp, long *plength, int *ptag,
-    int *pclass, long omax)
-{
-       int i, ret;
-       long l;
-       const unsigned char *p = *pp;
-       int tag, xclass, inf;
-       long max = omax;
-
-       if (!max)
-               goto err;
-       ret = (*p & V_ASN1_CONSTRUCTED);
-       xclass = (*p & V_ASN1_PRIVATE);
-       i = *p & V_ASN1_PRIMITIVE_TAG;
-       if (i == V_ASN1_PRIMITIVE_TAG) {                /* high-tag */
-               p++;
-               if (--max == 0)
-                       goto err;
-               l = 0;
-               while (*p & 0x80) {
-                       l <<= 7L;
-                       l |= *(p++) & 0x7f;
-                       if (--max == 0)
-                               goto err;
-                       if (l > (INT_MAX >> 7L))
-                               goto err;
-               }
-               l <<= 7L;
-               l |= *(p++) & 0x7f;
-               tag = (int)l;
-               if (--max == 0)
-                       goto err;
-       } else {
-               tag = i;
-               p++;
-               if (--max == 0)
-                       goto err;
-       }
-       *ptag = tag;
-       *pclass = xclass;
-       if (!asn1_get_length(&p, &inf, plength, (int)max))
-               goto err;
-
-       if (inf && !(ret & V_ASN1_CONSTRUCTED))
-               goto err;
-
-       if (*plength > (omax - (p - *pp))) {
-               ASN1error(ASN1_R_TOO_LONG);
-               /* Set this so that even if things are not long enough
-                * the values are set correctly */
-               ret |= 0x80;
-       }
-       *pp = p;
-       return (ret | inf);
-
-err:
-       ASN1error(ASN1_R_HEADER_TOO_LONG);
-       return (0x80);
-}
-
-static int
-asn1_get_length(const unsigned char **pp, int *inf, long *rl, int max)
-{
-       const unsigned char *p = *pp;
-       unsigned long ret = 0;
-       unsigned int i;
-
-       if (max-- < 1)
-               return (0);
-       if (*p == 0x80) {
-               *inf = 1;
-               ret = 0;
-               p++;
-       } else {
-               *inf = 0;
-               i = *p & 0x7f;
-               if (*(p++) & 0x80) {
-                       if (max < (int)i)
-                               return (0);
-                       /* skip leading zeroes */
-                       while (i && *p == 0) {
-                               p++;
-                               i--;
-                       }
-                       if (i > sizeof(long))
-                               return 0;
-                       while (i-- > 0) {
-                               ret <<= 8L;
-                               ret |= *(p++);
-                       }
-               } else
-                       ret = i;
-       }
-       if (ret > LONG_MAX)
-               return 0;
-       *pp = p;
-       *rl = (long)ret;
-       return (1);
-}
-
-/* class 0 is constructed
- * constructed == 2 for indefinite length constructed */
-void
-ASN1_put_object(unsigned char **pp, int constructed, int length, int tag,
-    int xclass)
-{
-       unsigned char *p = *pp;
-       int i, ttag;
-
-       i = (constructed) ? V_ASN1_CONSTRUCTED : 0;
-       i |= (xclass & V_ASN1_PRIVATE);
-       if (tag < 31)
-               *(p++) = i | (tag & V_ASN1_PRIMITIVE_TAG);
-       else {
-               *(p++) = i | V_ASN1_PRIMITIVE_TAG;
-               for(i = 0, ttag = tag; ttag > 0; i++)
-                       ttag >>= 7;
-               ttag = i;
-               while (i-- > 0) {
-                       p[i] = tag & 0x7f;
-                       if (i != (ttag - 1))
-                               p[i] |= 0x80;
-                       tag >>= 7;
-               }
-               p += ttag;
-       }
-       if (constructed == 2)
-               *(p++) = 0x80;
-       else
-               asn1_put_length(&p, length);
-       *pp = p;
-}
-
-int
-ASN1_put_eoc(unsigned char **pp)
-{
-       unsigned char *p = *pp;
-
-       *p++ = 0;
-       *p++ = 0;
-       *pp = p;
-       return 2;
-}
-
-static void
-asn1_put_length(unsigned char **pp, int length)
-{
-       unsigned char *p = *pp;
-
-       int i, l;
-       if (length <= 127)
-               *(p++) = (unsigned char)length;
-       else {
-               l = length;
-               for (i = 0; l > 0; i++)
-                       l >>= 8;
-               *(p++) = i | 0x80;
-               l = i;
-               while (i-- > 0) {
-                       p[i] = length & 0xff;
-                       length >>= 8;
-               }
-               p += l;
-       }
-       *pp = p;
-}
-
-int
-ASN1_object_size(int constructed, int length, int tag)
-{
-       int ret;
-
-       ret = length;
-       ret++;
-       if (tag >= 31) {
-               while (tag > 0) {
-                       tag >>= 7;
-                       ret++;
-               }
-       }
-       if (constructed == 2)
-               return ret + 3;
-       ret++;
-       if (length > 127) {
-               while (length > 0) {
-                       length >>= 8;
-                       ret++;
-               }
-       }
-       return (ret);
-}
diff --git a/lib/libcrypto/asn1/asn1_old_lib.c b/lib/libcrypto/asn1/asn1_old_lib.c
new file mode 100644 (file)
index 0000000..cc9a48f
--- /dev/null
@@ -0,0 +1,286 @@
+/* $OpenBSD: asn1_old_lib.c,v 1.1 2021/12/15 18:12:10 jsing Exp $ */
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ *
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ *
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ *
+ * 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 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 acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young (eay@cryptsoft.com)"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS 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 AUTHOR OR 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.
+ *
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+#include <limits.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/asn1.h>
+#include <openssl/err.h>
+
+static int asn1_get_length(const unsigned char **pp, int *inf, long *rl, int max);
+static void asn1_put_length(unsigned char **pp, int length);
+
+static int
+_asn1_check_infinite_end(const unsigned char **p, long len)
+{
+       /* If there is 0 or 1 byte left, the length check should pick
+        * things up */
+       if (len <= 0)
+               return (1);
+       else if ((len >= 2) && ((*p)[0] == 0) && ((*p)[1] == 0)) {
+               (*p) += 2;
+               return (1);
+       }
+       return (0);
+}
+
+int
+ASN1_check_infinite_end(unsigned char **p, long len)
+{
+       return _asn1_check_infinite_end((const unsigned char **)p, len);
+}
+
+int
+ASN1_const_check_infinite_end(const unsigned char **p, long len)
+{
+       return _asn1_check_infinite_end(p, len);
+}
+
+int
+ASN1_get_object(const unsigned char **pp, long *plength, int *ptag,
+    int *pclass, long omax)
+{
+       int i, ret;
+       long l;
+       const unsigned char *p = *pp;
+       int tag, xclass, inf;
+       long max = omax;
+
+       if (!max)
+               goto err;
+       ret = (*p & V_ASN1_CONSTRUCTED);
+       xclass = (*p & V_ASN1_PRIVATE);
+       i = *p & V_ASN1_PRIMITIVE_TAG;
+       if (i == V_ASN1_PRIMITIVE_TAG) {                /* high-tag */
+               p++;
+               if (--max == 0)
+                       goto err;
+               l = 0;
+               while (*p & 0x80) {
+                       l <<= 7L;
+                       l |= *(p++) & 0x7f;
+                       if (--max == 0)
+                               goto err;
+                       if (l > (INT_MAX >> 7L))
+                               goto err;
+               }
+               l <<= 7L;
+               l |= *(p++) & 0x7f;
+               tag = (int)l;
+               if (--max == 0)
+                       goto err;
+       } else {
+               tag = i;
+               p++;
+               if (--max == 0)
+                       goto err;
+       }
+       *ptag = tag;
+       *pclass = xclass;
+       if (!asn1_get_length(&p, &inf, plength, (int)max))
+               goto err;
+
+       if (inf && !(ret & V_ASN1_CONSTRUCTED))
+               goto err;
+
+       if (*plength > (omax - (p - *pp))) {
+               ASN1error(ASN1_R_TOO_LONG);
+               /* Set this so that even if things are not long enough
+                * the values are set correctly */
+               ret |= 0x80;
+       }
+       *pp = p;
+       return (ret | inf);
+
+err:
+       ASN1error(ASN1_R_HEADER_TOO_LONG);
+       return (0x80);
+}
+
+static int
+asn1_get_length(const unsigned char **pp, int *inf, long *rl, int max)
+{
+       const unsigned char *p = *pp;
+       unsigned long ret = 0;
+       unsigned int i;
+
+       if (max-- < 1)
+               return (0);
+       if (*p == 0x80) {
+               *inf = 1;
+               ret = 0;
+               p++;
+       } else {
+               *inf = 0;
+               i = *p & 0x7f;
+               if (*(p++) & 0x80) {
+                       if (max < (int)i)
+                               return (0);
+                       /* skip leading zeroes */
+                       while (i && *p == 0) {
+                               p++;
+                               i--;
+                       }
+                       if (i > sizeof(long))
+                               return 0;
+                       while (i-- > 0) {
+                               ret <<= 8L;
+                               ret |= *(p++);
+                       }
+               } else
+                       ret = i;
+       }
+       if (ret > LONG_MAX)
+               return 0;
+       *pp = p;
+       *rl = (long)ret;
+       return (1);
+}
+
+/* class 0 is constructed
+ * constructed == 2 for indefinite length constructed */
+void
+ASN1_put_object(unsigned char **pp, int constructed, int length, int tag,
+    int xclass)
+{
+       unsigned char *p = *pp;
+       int i, ttag;
+
+       i = (constructed) ? V_ASN1_CONSTRUCTED : 0;
+       i |= (xclass & V_ASN1_PRIVATE);
+       if (tag < 31)
+               *(p++) = i | (tag & V_ASN1_PRIMITIVE_TAG);
+       else {
+               *(p++) = i | V_ASN1_PRIMITIVE_TAG;
+               for(i = 0, ttag = tag; ttag > 0; i++)
+                       ttag >>= 7;
+               ttag = i;
+               while (i-- > 0) {
+                       p[i] = tag & 0x7f;
+                       if (i != (ttag - 1))
+                               p[i] |= 0x80;
+                       tag >>= 7;
+               }
+               p += ttag;
+       }
+       if (constructed == 2)
+               *(p++) = 0x80;
+       else
+               asn1_put_length(&p, length);
+       *pp = p;
+}
+
+int
+ASN1_put_eoc(unsigned char **pp)
+{
+       unsigned char *p = *pp;
+
+       *p++ = 0;
+       *p++ = 0;
+       *pp = p;
+       return 2;
+}
+
+static void
+asn1_put_length(unsigned char **pp, int length)
+{
+       unsigned char *p = *pp;
+
+       int i, l;
+       if (length <= 127)
+               *(p++) = (unsigned char)length;
+       else {
+               l = length;
+               for (i = 0; l > 0; i++)
+                       l >>= 8;
+               *(p++) = i | 0x80;
+               l = i;
+               while (i-- > 0) {
+                       p[i] = length & 0xff;
+                       length >>= 8;
+               }
+               p += l;
+       }
+       *pp = p;
+}
+
+int
+ASN1_object_size(int constructed, int length, int tag)
+{
+       int ret;
+
+       ret = length;
+       ret++;
+       if (tag >= 31) {
+               while (tag > 0) {
+                       tag >>= 7;
+                       ret++;
+               }
+       }
+       if (constructed == 2)
+               return ret + 3;
+       ret++;
+       if (length > 127) {
+               while (length > 0) {
+                       length >>= 8;
+                       ret++;
+               }
+       }
+       return (ret);
+}