diff options
author | 2021-03-25 09:27:38 +0000 | |
---|---|---|
committer | 2021-03-25 09:27:38 +0000 | |
commit | aebfeadbe62f7780f4e32b470b973876b1364d4c (patch) | |
tree | 48dadcfe93712db3563e476fc87a2a92d32973d6 | |
parent | Avoid mangled output in BIO_debug_callback (diff) | |
download | wireguard-openbsd-aebfeadbe62f7780f4e32b470b973876b1364d4c.tar.xz wireguard-openbsd-aebfeadbe62f7780f4e32b470b973876b1364d4c.zip |
Adjust base64_decode() to just take a base64 string as input instead of
a string plus length. Preparation work for RRDP.
OK tb@
-rw-r--r-- | usr.sbin/rpki-client/tal.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/usr.sbin/rpki-client/tal.c b/usr.sbin/rpki-client/tal.c index 94b191a492e..e5a8674774a 100644 --- a/usr.sbin/rpki-client/tal.c +++ b/usr.sbin/rpki-client/tal.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tal.c,v 1.28 2021/03/05 17:15:19 claudio Exp $ */ +/* $OpenBSD: tal.c,v 1.29 2021/03/25 09:27:38 claudio Exp $ */ /* * Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv> * @@ -28,11 +28,11 @@ #include "extern.h" static int -base64_decode(const unsigned char *in, size_t inlen, unsigned char **out, - size_t *outlen) +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) @@ -41,6 +41,7 @@ base64_decode(const unsigned char *in, size_t inlen, unsigned char **out, *out = NULL; *outlen = 0; + inlen = strlen(in); if (inlen >= INT_MAX - 3) return -1; tolen = ((inlen + 3) / 4) * 3 + 1; @@ -81,7 +82,7 @@ tal_parse_buffer(const char *fn, char *buf) { char *nl, *line, *f, *file = NULL; unsigned char *der; - size_t sz, dersz; + size_t dersz; int rc = 0; struct tal *tal = NULL; EVP_PKEY *pkey = NULL; @@ -147,17 +148,13 @@ tal_parse_buffer(const char *fn, char *buf) /* sort uri lexicographically so https:// is preferred */ qsort(tal->uri, tal->urisz, sizeof(tal->uri[0]), tal_cmp); - sz = strlen(buf); - if (sz == 0) { + /* Now the Base64-encoded public key. */ + if ((base64_decode(buf, &der, &dersz)) == -1) { warnx("%s: RFC 7730 section 2.1: subjectPublicKeyInfo: " - "zero-length public key", fn); + "bad public key", fn); goto out; } - /* Now the BASE64-encoded public key. */ - if ((base64_decode(buf, sz, &der, &dersz)) == -1) - errx(1, "base64 decode"); - tal->pkey = der; tal->pkeysz = dersz; |