On Wed, Mar 31, 2021 at 01:13:08PM +0200, Claudio Jeker wrote:
> As mentioned before move the base64 and hex encoding / decoding functions
> into one file. This is just minor cleanup.

ok tb

> 
> -- 
> :wq Claudio
> 
> PS: I know this will break regress and I will fix that once this goes in.
> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rpki-client/Makefile,v
> retrieving revision 1.19
> diff -u -p -r1.19 Makefile
> --- Makefile  4 Mar 2021 13:01:41 -0000       1.19
> +++ Makefile  31 Mar 2021 10:56:42 -0000
> @@ -1,9 +1,10 @@
>  #    $OpenBSD: Makefile,v 1.19 2021/03/04 13:01:41 claudio Exp $
>  
>  PROG=        rpki-client
> -SRCS=        as.c cert.c cms.c crl.c gbr.c http.c io.c ip.c log.c main.c 
> mft.c \
> -     mkdir.c output.c output-bgpd.c output-bird.c output-csv.c \
> -     output-json.c parser.c roa.c rsync.c tal.c validate.c x509.c
> +SRCS=        as.c cert.c cms.c crl.c encoding.c gbr.c http.c io.c ip.c log.c 
> \
> +     main.c mft.c mkdir.c output.c output-bgpd.c output-bird.c \
> +     output-csv.c output-json.c parser.c roa.c rsync.c tal.c validate.c \
> +     x509.c
>  MAN= rpki-client.8
>  
>  LDADD+= -ltls -lssl -lcrypto -lutil
> Index: encoding.c
> ===================================================================
> RCS file: encoding.c
> diff -N encoding.c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ encoding.c        31 Mar 2021 11:00:49 -0000
> @@ -0,0 +1,88 @@
> +/*      $OpenBSD$  */
> +/*
> + * Copyright (c) 2020 Claudio Jeker <clau...@openbsd.org>
> + *
> + * Permission to use, copy, modify, and distribute this software for any
> + * purpose with or without fee is hereby granted, provided that the above
> + * copyright notice and this permission notice appear in all copies.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> + */
> +#include <err.h>
> +#include <limits.h>
> +#include <stdlib.h>
> +#include <string.h>
> +
> +#include <openssl/evp.h>
> +
> +#include "extern.h"
> +
> +/*
> + * Decode base64 encoded string into binary buffer returned in out.
> + * The out buffer size is stored in outlen.
> + * Returns 0 on success or -1 for any errors.
> + */
> +int
> +base64_decode(const unsigned char *in, unsigned char **out, size_t *outlen)
> +{
> +     static EVP_ENCODE_CTX *ctx;
> +     unsigned char *to;
> +     size_t inlen;
> +     int tolen;
> +
> +     if (ctx == NULL && (ctx = EVP_ENCODE_CTX_new()) == NULL)
> +             err(1, "EVP_ENCODE_CTX_new");
> +
> +     *out = NULL;
> +     *outlen = 0;
> +
> +     inlen = strlen(in);
> +     if (inlen >= INT_MAX - 3)
> +             return -1;
> +     tolen = ((inlen + 3) / 4) * 3 + 1;
> +     if ((to = malloc(tolen)) == NULL)
> +             return -1;
> +
> +     EVP_DecodeInit(ctx);
> +     if (EVP_DecodeUpdate(ctx, to, &tolen, in, inlen) == -1)
> +             goto fail;
> +     *outlen = tolen;
> +     if (EVP_DecodeFinal(ctx, to + tolen, &tolen) == -1)
> +             goto fail;
> +     *outlen += tolen;
> +     *out = to;
> +     return 0;
> +
> +fail:
> +     free(to);
> +     return -1;
> +}
> +
> +/*
> + * Convert binary buffer of size dsz into an upper-case hex-string.
> + * Returns pointer to the newly allocated string. Function can't fail.
> + */
> +char *
> +hex_encode(const unsigned char *in, size_t insz)
> +{
> +     const char hex[] = "0123456789ABCDEF";
> +     size_t i;
> +     char *out;
> +
> +     if ((out = calloc(2, insz + 1)) == NULL)
> +             err(1, NULL);
> +
> +     for (i = 0; i < insz; i++) {
> +             out[i * 2] = hex[in[i] >> 4];
> +             out[i * 2 + 1] = hex[in[i] & 0xf];
> +     }
> +     out[i * 2] = '\0';
> +
> +     return out;
> +}
> Index: extern.h
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rpki-client/extern.h,v
> retrieving revision 1.59
> diff -u -p -r1.59 extern.h
> --- extern.h  29 Mar 2021 12:41:34 -0000      1.59
> +++ extern.h  31 Mar 2021 10:55:49 -0000
> @@ -419,6 +419,13 @@ void              cryptoerrx(const char *, ...)
>                       __attribute__((format(printf, 1, 2)))
>                       __attribute__((noreturn));
>  
> +/* Encoding functions for hex and base64. */
> +
> +int           base64_decode(const unsigned char *, unsigned char **,
> +                 size_t *);
> +char         *hex_encode(const unsigned char *, size_t);
> +
> +
>  /* Functions for moving data between processes. */
>  
>  void          io_socket_blocking(int);
> Index: tal.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rpki-client/tal.c,v
> retrieving revision 1.29
> diff -u -p -r1.29 tal.c
> --- tal.c     25 Mar 2021 09:27:38 -0000      1.29
> +++ tal.c     31 Mar 2021 11:10:27 -0000
> @@ -19,49 +19,12 @@
>  #include <assert.h>
>  #include <ctype.h>
>  #include <err.h>
> -#include <limits.h>
>  #include <libgen.h>
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <string.h>
>  
>  #include "extern.h"
> -
> -static int
> -base64_decode(const unsigned char *in, unsigned char **out, size_t *outlen)
> -{
> -     static EVP_ENCODE_CTX *ctx;
> -     unsigned char *to;
> -     size_t inlen;
> -     int tolen;
> -
> -     if (ctx == NULL && (ctx = EVP_ENCODE_CTX_new()) == NULL)
> -             err(1, "EVP_ENCODE_CTX_new");
> -
> -     *out = NULL;
> -     *outlen = 0;
> -
> -     inlen = strlen(in);
> -     if (inlen >= INT_MAX - 3)
> -             return -1;
> -     tolen = ((inlen + 3) / 4) * 3 + 1;
> -     if ((to = malloc(tolen)) == NULL)
> -             return -1;
> -
> -     EVP_DecodeInit(ctx);
> -     if (EVP_DecodeUpdate(ctx, to, &tolen, in, inlen) == -1)
> -             goto fail;
> -     *outlen = tolen;
> -     if (EVP_DecodeFinal(ctx, to + tolen, &tolen) == -1)
> -             goto fail;
> -     *outlen += tolen;
> -     *out = to;
> -     return 0;
> -
> -fail:
> -     free(to);
> -     return -1;
> -}
>  
>  static int
>  tal_cmp(const void *a, const void *b)
> Index: x509.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rpki-client/x509.c,v
> retrieving revision 1.20
> diff -u -p -r1.20 x509.c
> --- x509.c    29 Mar 2021 12:41:35 -0000      1.20
> +++ x509.c    31 Mar 2021 10:58:39 -0000
> @@ -20,7 +20,6 @@
>  #include <assert.h>
>  #include <err.h>
>  #include <stdarg.h>
> -#include <stdint.h>
>  #include <stdlib.h>
>  #include <string.h>
>  #include <unistd.h>
> @@ -28,29 +27,6 @@
>  #include <openssl/x509v3.h>
>  
>  #include "extern.h"
> -
> -/*
> - * Convert binary buffer of size dsz into an upper-case hex-string.
> - * Returns pointer to the newly allocated string. Function can't fail.
> - */
> -char *
> -hex_encode(const unsigned char *in, size_t insz)
> -{
> -     const char hex[] = "0123456789ABCDEF";
> -     size_t i;
> -     char *out;
> -
> -     if ((out = calloc(2, insz + 1)) == NULL)
> -             err(1, NULL);
> -
> -     for (i = 0; i < insz; i++) {
> -             out[i * 2] = hex[in[i] >> 4];
> -             out[i * 2 + 1] = hex[in[i] & 0xf];
> -     }
> -     out[i * 2] = '\0';
> -
> -     return out;
> -}
>  
>  /*
>   * Parse X509v3 authority key identifier (AKI), RFC 6487 sec. 4.8.3.
> 

Reply via email to