From fbcec4c2704f95e7e23eeda0e6cb8d861ab349df Mon Sep 17 00:00:00 2001
From: Dan Egnor <egnor@ofb.net>
Date: Wed, 6 Feb 2002 14:32:56 +0100
Subject: [PATCH] Applied patch from Dan Egnor improving the base64 code. *
 base64.h (BASE64_ENCODE_LENGTH): New macro. (struct base64_ctx): New context
 struct, for decoding. (BASE64_DECODE_LENGTH): New macro. * base64.c
 (base64_decode_init): New function. (base64_decode_update): New function,
 replacing base64_decode. Takes a struct base64_ctx argument. * nettle-meta.h:
 Updated nettle_armor, and related typedefs and macros. * configure.in: Use
 AC_PREREQ(2.50).

Rev: src/nettle/nettle-meta.h:1.4
---
 nettle-meta.h | 39 +++++++++++++++++++++++----------------
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/nettle-meta.h b/nettle-meta.h
index d64f92f7..8283ed52 100644
--- a/nettle-meta.h
+++ b/nettle-meta.h
@@ -126,30 +126,37 @@ extern const struct nettle_hash nettle_sha256;
 
 
 /* ASCII armor codecs */
-typedef unsigned (*nettle_armor_func)(uint8_t *dst,
-                                      unsigned src_length,
-                                      const uint8_t *src);
+typedef unsigned (*nettle_armor_encode_func)(uint8_t *dst,
+                                             unsigned src_length,
+                                             const uint8_t *src);
+typedef void (*nettle_armor_init_func)(void *ctx);
+typedef unsigned (*nettle_armor_update_func)(void *ctx,
+                                             uint8_t *dst,
+                                             unsigned src_length,
+                                             const uint8_t *src);
 
 struct nettle_armor
 {
   const char *name;
-
-  unsigned ascii_block_size;
-  unsigned raw_block_size;
-
-  nettle_armor_func encode;
-  nettle_armor_func decode;
+  unsigned context_size;
+  unsigned text_block_size;
+  unsigned binary_block_size;
+  nettle_armor_encode_func encode;
+  nettle_armor_init_func decode_init;
+  nettle_armor_update_func decode_update;
 };
 
-#define _NETTLE_ARMOR(name, NAME) {		\
-  #name,					\
-  NAME##_ASCII_BLOCK_SIZE,			\
-  NAME##_RAW_BLOCK_SIZE,			\
-  name##_encode,				\
-  name##_decode					\
+#define _NETTLE_ARMOR(name, NAME) {			\
+  #name,						\
+  sizeof(struct name##_ctx),				\
+  NAME##_TEXT_BLOCK_SIZE,				\
+  NAME##_BINARY_BLOCK_SIZE,				\
+  (nettle_armor_encode_func) name##_encode,		\
+  (nettle_armor_init_func) name##_decode_init,		\
+  (nettle_armor_update_func) name##_decode_update	\
 }
 
 extern const struct nettle_armor nettle_base64;
-extern const struct nettle_armor nettle_base16;
+/* extern const struct nettle_armor nettle_base16; */
 
 #endif /* NETTLE_META_H_INCLUDED */
-- 
GitLab