Commit f2da4031 authored by Niels Möller's avatar Niels Möller
Browse files

Change type of base16- and base64-encoded data from uint8_t to char.

parent 0bf64256
...@@ -66,14 +66,16 @@ hex_decode_table[0x80] = ...@@ -66,14 +66,16 @@ hex_decode_table[0x80] =
int int
base16_decode_single(struct base16_decode_ctx *ctx, base16_decode_single(struct base16_decode_ctx *ctx,
uint8_t *dst, uint8_t *dst,
uint8_t src) char src)
{ {
/* Avoid signed char for indexing. */
unsigned char usrc = src;
int digit; int digit;
if (src >= 0x80) if (usrc >= 0x80)
return -1; return -1;
digit = hex_decode_table[src]; digit = hex_decode_table[usrc];
switch (digit) switch (digit)
{ {
case -1: case -1:
...@@ -104,7 +106,7 @@ base16_decode_update(struct base16_decode_ctx *ctx, ...@@ -104,7 +106,7 @@ base16_decode_update(struct base16_decode_ctx *ctx,
size_t *dst_length, size_t *dst_length,
uint8_t *dst, uint8_t *dst,
size_t src_length, size_t src_length,
const uint8_t *src) const char *src)
{ {
size_t done; size_t done;
size_t i; size_t i;
......
...@@ -45,7 +45,7 @@ hex_digits[16] = "0123456789abcdef"; ...@@ -45,7 +45,7 @@ hex_digits[16] = "0123456789abcdef";
/* Encodes a single byte. Always stores two digits in dst[0] and dst[1]. */ /* Encodes a single byte. Always stores two digits in dst[0] and dst[1]. */
void void
base16_encode_single(uint8_t *dst, base16_encode_single(char *dst,
uint8_t src) uint8_t src)
{ {
dst[0] = DIGIT(src/0x10); dst[0] = DIGIT(src/0x10);
...@@ -54,7 +54,7 @@ base16_encode_single(uint8_t *dst, ...@@ -54,7 +54,7 @@ base16_encode_single(uint8_t *dst,
/* Always stores BASE16_ENCODE_LENGTH(length) digits in dst. */ /* Always stores BASE16_ENCODE_LENGTH(length) digits in dst. */
void void
base16_encode_update(uint8_t *dst, base16_encode_update(char *dst,
size_t length, size_t length,
const uint8_t *src) const uint8_t *src)
{ {
......
...@@ -59,7 +59,7 @@ base16_encode_init(void *ctx UNUSED) ...@@ -59,7 +59,7 @@ base16_encode_init(void *ctx UNUSED)
static nettle_armor_encode_update_func base16_encode_update_wrapper; static nettle_armor_encode_update_func base16_encode_update_wrapper;
static size_t static size_t
base16_encode_update_wrapper(void *ctx UNUSED, uint8_t *dst, base16_encode_update_wrapper(void *ctx UNUSED, char *dst,
size_t length, const uint8_t *src) size_t length, const uint8_t *src)
{ {
base16_encode_update(dst, length, src); base16_encode_update(dst, length, src);
...@@ -71,7 +71,7 @@ base16_encode_update_wrapper(void *ctx UNUSED, uint8_t *dst, ...@@ -71,7 +71,7 @@ base16_encode_update_wrapper(void *ctx UNUSED, uint8_t *dst,
static nettle_armor_encode_final_func base16_encode_final; static nettle_armor_encode_final_func base16_encode_final;
static size_t static size_t
base16_encode_final(void *ctx UNUSED, uint8_t *dst UNUSED) base16_encode_final(void *ctx UNUSED, char *dst UNUSED)
{ {
return 0; return 0;
} }
......
...@@ -56,12 +56,12 @@ extern "C" { ...@@ -56,12 +56,12 @@ extern "C" {
/* Encodes a single byte. Always stores two digits in dst[0] and dst[1]. */ /* Encodes a single byte. Always stores two digits in dst[0] and dst[1]. */
void void
base16_encode_single(uint8_t *dst, base16_encode_single(char *dst,
uint8_t src); uint8_t src);
/* Always stores BASE16_ENCODE_LENGTH(length) digits in dst. */ /* Always stores BASE16_ENCODE_LENGTH(length) digits in dst. */
void void
base16_encode_update(uint8_t *dst, base16_encode_update(char *dst,
size_t length, size_t length,
const uint8_t *src); const uint8_t *src);
...@@ -86,7 +86,7 @@ base16_decode_init(struct base16_decode_ctx *ctx); ...@@ -86,7 +86,7 @@ base16_decode_init(struct base16_decode_ctx *ctx);
int int
base16_decode_single(struct base16_decode_ctx *ctx, base16_decode_single(struct base16_decode_ctx *ctx,
uint8_t *dst, uint8_t *dst,
uint8_t src); char src);
/* Returns 1 on success, 0 on error. DST should point to an area of /* Returns 1 on success, 0 on error. DST should point to an area of
* size at least BASE16_DECODE_LENGTH(length). The amount of data * size at least BASE16_DECODE_LENGTH(length). The amount of data
...@@ -97,7 +97,7 @@ base16_decode_update(struct base16_decode_ctx *ctx, ...@@ -97,7 +97,7 @@ base16_decode_update(struct base16_decode_ctx *ctx,
size_t *dst_length, size_t *dst_length,
uint8_t *dst, uint8_t *dst,
size_t src_length, size_t src_length,
const uint8_t *src); const char *src);
/* Returns 1 on success. */ /* Returns 1 on success. */
int int
......
...@@ -73,9 +73,9 @@ base64_decode_init(struct base64_decode_ctx *ctx) ...@@ -73,9 +73,9 @@ base64_decode_init(struct base64_decode_ctx *ctx)
int int
base64_decode_single(struct base64_decode_ctx *ctx, base64_decode_single(struct base64_decode_ctx *ctx,
uint8_t *dst, uint8_t *dst,
uint8_t src) char src)
{ {
int data = ctx->table[src]; int data = ctx->table[(uint8_t) src];
switch(data) switch(data)
{ {
...@@ -122,7 +122,7 @@ base64_decode_update(struct base64_decode_ctx *ctx, ...@@ -122,7 +122,7 @@ base64_decode_update(struct base64_decode_ctx *ctx,
size_t *dst_length, size_t *dst_length,
uint8_t *dst, uint8_t *dst,
size_t src_length, size_t src_length,
const uint8_t *src) const char *src)
{ {
size_t done; size_t done;
size_t i; size_t i;
......
...@@ -41,11 +41,11 @@ ...@@ -41,11 +41,11 @@
#define ENCODE(alphabet,x) ((alphabet)[0x3F & (x)]) #define ENCODE(alphabet,x) ((alphabet)[0x3F & (x)])
static void static void
encode_raw(const uint8_t *alphabet, encode_raw(const char *alphabet,
uint8_t *dst, size_t length, const uint8_t *src) char *dst, size_t length, const uint8_t *src)
{ {
const uint8_t *in = src + length; const uint8_t *in = src + length;
uint8_t *out = dst + BASE64_ENCODE_RAW_LENGTH(length); char *out = dst + BASE64_ENCODE_RAW_LENGTH(length);
unsigned left_over = length % 3; unsigned left_over = length % 3;
...@@ -83,19 +83,19 @@ encode_raw(const uint8_t *alphabet, ...@@ -83,19 +83,19 @@ encode_raw(const uint8_t *alphabet,
assert(out == dst); assert(out == dst);
} }
static const uint8_t base64_encode_table[64] = static const char base64_encode_table[64] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz" "abcdefghijklmnopqrstuvwxyz"
"0123456789+/"; "0123456789+/";
void void
base64_encode_raw(uint8_t *dst, size_t length, const uint8_t *src) base64_encode_raw(char *dst, size_t length, const uint8_t *src)
{ {
encode_raw(base64_encode_table, dst, length, src); encode_raw(base64_encode_table, dst, length, src);
} }
void void
base64_encode_group(uint8_t *dst, uint32_t group) base64_encode_group(char *dst, uint32_t group)
{ {
*dst++ = ENCODE(base64_encode_table, (group >> 18)); *dst++ = ENCODE(base64_encode_table, (group >> 18));
*dst++ = ENCODE(base64_encode_table, (group >> 12)); *dst++ = ENCODE(base64_encode_table, (group >> 12));
...@@ -113,7 +113,7 @@ base64_encode_init(struct base64_encode_ctx *ctx) ...@@ -113,7 +113,7 @@ base64_encode_init(struct base64_encode_ctx *ctx)
/* Encodes a single byte. */ /* Encodes a single byte. */
size_t size_t
base64_encode_single(struct base64_encode_ctx *ctx, base64_encode_single(struct base64_encode_ctx *ctx,
uint8_t *dst, char *dst,
uint8_t src) uint8_t src)
{ {
unsigned done = 0; unsigned done = 0;
...@@ -138,7 +138,7 @@ base64_encode_single(struct base64_encode_ctx *ctx, ...@@ -138,7 +138,7 @@ base64_encode_single(struct base64_encode_ctx *ctx,
* area of size at least BASE64_ENCODE_LENGTH(length). */ * area of size at least BASE64_ENCODE_LENGTH(length). */
size_t size_t
base64_encode_update(struct base64_encode_ctx *ctx, base64_encode_update(struct base64_encode_ctx *ctx,
uint8_t *dst, char *dst,
size_t length, size_t length,
const uint8_t *src) const uint8_t *src)
{ {
...@@ -181,7 +181,7 @@ base64_encode_update(struct base64_encode_ctx *ctx, ...@@ -181,7 +181,7 @@ base64_encode_update(struct base64_encode_ctx *ctx,
* BASE64_ENCODE_FINAL_SIZE */ * BASE64_ENCODE_FINAL_SIZE */
size_t size_t
base64_encode_final(struct base64_encode_ctx *ctx, base64_encode_final(struct base64_encode_ctx *ctx,
uint8_t *dst) char *dst)
{ {
unsigned done = 0; unsigned done = 0;
unsigned bits = ctx->bits; unsigned bits = ctx->bits;
......
...@@ -73,7 +73,7 @@ extern "C" { ...@@ -73,7 +73,7 @@ extern "C" {
struct base64_encode_ctx struct base64_encode_ctx
{ {
const uint8_t *alphabet; /* Alphabet to use for encoding */ const char *alphabet; /* Alphabet to use for encoding */
unsigned short word; /* Leftover bits */ unsigned short word; /* Leftover bits */
unsigned char bits; /* Number of bits, always 0, 2, or 4. */ unsigned char bits; /* Number of bits, always 0, 2, or 4. */
}; };
...@@ -89,14 +89,14 @@ base64url_encode_init(struct base64_encode_ctx *ctx); ...@@ -89,14 +89,14 @@ base64url_encode_init(struct base64_encode_ctx *ctx);
/* Encodes a single byte. Returns amount of output (always 1 or 2). */ /* Encodes a single byte. Returns amount of output (always 1 or 2). */
size_t size_t
base64_encode_single(struct base64_encode_ctx *ctx, base64_encode_single(struct base64_encode_ctx *ctx,
uint8_t *dst, char *dst,
uint8_t src); uint8_t src);
/* Returns the number of output characters. DST should point to an /* Returns the number of output characters. DST should point to an
* area of size at least BASE64_ENCODE_LENGTH(length). */ * area of size at least BASE64_ENCODE_LENGTH(length). */
size_t size_t
base64_encode_update(struct base64_encode_ctx *ctx, base64_encode_update(struct base64_encode_ctx *ctx,
uint8_t *dst, char *dst,
size_t length, size_t length,
const uint8_t *src); const uint8_t *src);
...@@ -104,7 +104,7 @@ base64_encode_update(struct base64_encode_ctx *ctx, ...@@ -104,7 +104,7 @@ base64_encode_update(struct base64_encode_ctx *ctx,
* BASE64_ENCODE_FINAL_LENGTH */ * BASE64_ENCODE_FINAL_LENGTH */
size_t size_t
base64_encode_final(struct base64_encode_ctx *ctx, base64_encode_final(struct base64_encode_ctx *ctx,
uint8_t *dst); char *dst);
/* Lower level functions */ /* Lower level functions */
...@@ -112,10 +112,10 @@ base64_encode_final(struct base64_encode_ctx *ctx, ...@@ -112,10 +112,10 @@ base64_encode_final(struct base64_encode_ctx *ctx,
* Generates exactly BASE64_ENCODE_RAW_LENGTH(length) bytes of output. * Generates exactly BASE64_ENCODE_RAW_LENGTH(length) bytes of output.
* Supports overlapped operation, if src <= dst. */ * Supports overlapped operation, if src <= dst. */
void void
base64_encode_raw(uint8_t *dst, size_t length, const uint8_t *src); base64_encode_raw(char *dst, size_t length, const uint8_t *src);
void void
base64_encode_group(uint8_t *dst, uint32_t group); base64_encode_group(char *dst, uint32_t group);
/* Base64 decoding */ /* Base64 decoding */
...@@ -147,7 +147,7 @@ base64url_decode_init(struct base64_decode_ctx *ctx); ...@@ -147,7 +147,7 @@ base64url_decode_init(struct base64_decode_ctx *ctx);
int int
base64_decode_single(struct base64_decode_ctx *ctx, base64_decode_single(struct base64_decode_ctx *ctx,
uint8_t *dst, uint8_t *dst,
uint8_t src); char src);
/* Returns 1 on success, 0 on error. DST should point to an area of /* Returns 1 on success, 0 on error. DST should point to an area of
* size at least BASE64_DECODE_LENGTH(length). The amount of data * size at least BASE64_DECODE_LENGTH(length). The amount of data
...@@ -157,7 +157,7 @@ base64_decode_update(struct base64_decode_ctx *ctx, ...@@ -157,7 +157,7 @@ base64_decode_update(struct base64_decode_ctx *ctx,
size_t *dst_length, size_t *dst_length,
uint8_t *dst, uint8_t *dst,
size_t src_length, size_t src_length,
const uint8_t *src); const char *src);
/* Returns 1 on success. */ /* Returns 1 on success. */
int int
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
void void
base64url_encode_init(struct base64_encode_ctx *ctx) base64url_encode_init(struct base64_encode_ctx *ctx)
{ {
static const uint8_t base64url_encode_table[64] = static const char base64url_encode_table[64] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz" "abcdefghijklmnopqrstuvwxyz"
"0123456789-_"; "0123456789-_";
......
...@@ -58,7 +58,7 @@ int ...@@ -58,7 +58,7 @@ int
main(int argc UNUSED, char **argv UNUSED) main(int argc UNUSED, char **argv UNUSED)
{ {
/* "buffer" will hold the bytes from disk: */ /* "buffer" will hold the bytes from disk: */
uint8_t * buffer = xalloc (CHUNK_SIZE); char * buffer = xalloc (CHUNK_SIZE);
/* "result" will hold bytes before output: */ /* "result" will hold bytes before output: */
uint8_t * result = xalloc (DECODED_SIZE); uint8_t * result = xalloc (DECODED_SIZE);
......
...@@ -70,7 +70,7 @@ main(int argc UNUSED, char **argv UNUSED) ...@@ -70,7 +70,7 @@ main(int argc UNUSED, char **argv UNUSED)
/* "buffer" will hold the bytes from disk: */ /* "buffer" will hold the bytes from disk: */
uint8_t buffer[CHUNK_SIZE]; uint8_t buffer[CHUNK_SIZE];
/* "result" will hold bytes before output: */ /* "result" will hold bytes before output: */
uint8_t result[ENCODED_SIZE + 1]; char result[ENCODED_SIZE + 1];
unsigned nbytes; /* Number of bytes read from stdin */ unsigned nbytes; /* Number of bytes read from stdin */
int encoded_bytes; /* Total number of bytes encoded per iteration */ int encoded_bytes; /* Total number of bytes encoded per iteration */
......
...@@ -58,7 +58,7 @@ int ...@@ -58,7 +58,7 @@ int
main(int argc UNUSED, char **argv UNUSED) main(int argc UNUSED, char **argv UNUSED)
{ {
/* "buffer" will hold the bytes from disk: */ /* "buffer" will hold the bytes from disk: */
uint8_t * buffer = xalloc (CHUNK_SIZE); char * buffer = xalloc (CHUNK_SIZE);
/* "result" will hold bytes before output: */ /* "result" will hold bytes before output: */
uint8_t * result = xalloc (DECODED_SIZE); uint8_t * result = xalloc (DECODED_SIZE);
......
...@@ -72,7 +72,7 @@ main(int argc UNUSED, char **argv UNUSED) ...@@ -72,7 +72,7 @@ main(int argc UNUSED, char **argv UNUSED)
/* "buffer" will hold the bytes from disk: */ /* "buffer" will hold the bytes from disk: */
uint8_t buffer[CHUNK_SIZE]; uint8_t buffer[CHUNK_SIZE];
/* "result" is the result vector: */ /* "result" is the result vector: */
uint8_t result[ENCODED_SIZE + BASE64_ENCODE_FINAL_LENGTH + 1]; char result[ENCODED_SIZE + BASE64_ENCODE_FINAL_LENGTH + 1];
unsigned nbytes; /* Number of bytes read from stdin */ unsigned nbytes; /* Number of bytes read from stdin */
int encoded_bytes; /* total number of bytes encoded per iteration */ int encoded_bytes; /* total number of bytes encoded per iteration */
nbytes = fread(buffer,1,CHUNK_SIZE,stdin); nbytes = fread(buffer,1,CHUNK_SIZE,stdin);
......
...@@ -89,17 +89,17 @@ typedef size_t nettle_armor_length_func(size_t length); ...@@ -89,17 +89,17 @@ typedef size_t nettle_armor_length_func(size_t length);
typedef void nettle_armor_init_func(void *ctx); typedef void nettle_armor_init_func(void *ctx);
typedef size_t nettle_armor_encode_update_func(void *ctx, typedef size_t nettle_armor_encode_update_func(void *ctx,
uint8_t *dst, char *dst,
size_t src_length, size_t src_length,
const uint8_t *src); const uint8_t *src);
typedef size_t nettle_armor_encode_final_func(void *ctx, uint8_t *dst); typedef size_t nettle_armor_encode_final_func(void *ctx, char *dst);
typedef int nettle_armor_decode_update_func(void *ctx, typedef int nettle_armor_decode_update_func(void *ctx,
size_t *dst_length, size_t *dst_length,
uint8_t *dst, uint8_t *dst,
size_t src_length, size_t src_length,
const uint8_t *src); const char *src);
typedef int nettle_armor_decode_final_func(void *ctx); typedef int nettle_armor_decode_final_func(void *ctx);
......
...@@ -371,8 +371,8 @@ pgp_armor(struct nettle_buffer *buffer, ...@@ -371,8 +371,8 @@ pgp_armor(struct nettle_buffer *buffer,
length -= BINARY_PER_LINE, data += BINARY_PER_LINE) length -= BINARY_PER_LINE, data += BINARY_PER_LINE)
{ {
unsigned done; unsigned done;
uint8_t *p char *p
= nettle_buffer_space(buffer, TEXT_PER_LINE); = (char *) nettle_buffer_space(buffer, TEXT_PER_LINE);
if (!p) if (!p)
return 0; return 0;
...@@ -393,8 +393,8 @@ pgp_armor(struct nettle_buffer *buffer, ...@@ -393,8 +393,8 @@ pgp_armor(struct nettle_buffer *buffer,
+ BASE64_ENCODE_FINAL_LENGTH; + BASE64_ENCODE_FINAL_LENGTH;
unsigned done; unsigned done;
uint8_t *p char *p
= nettle_buffer_space(buffer, text_size); = (char *) nettle_buffer_space(buffer, text_size);
if (!p) if (!p)
return 0; return 0;
...@@ -412,7 +412,7 @@ pgp_armor(struct nettle_buffer *buffer, ...@@ -412,7 +412,7 @@ pgp_armor(struct nettle_buffer *buffer,
return 0; return 0;
{ {
uint8_t *p = nettle_buffer_space(buffer, 4); char *p = (char *) nettle_buffer_space(buffer, 4);
if (!p) if (!p)
return 0; return 0;
base64_encode_group(p, crc); base64_encode_group(p, crc);
......
...@@ -68,7 +68,7 @@ sexp_transport_vformat(struct nettle_buffer *buffer, ...@@ -68,7 +68,7 @@ sexp_transport_vformat(struct nettle_buffer *buffer,
if (!nettle_buffer_space(buffer, base64_length - length)) if (!nettle_buffer_space(buffer, base64_length - length))
return 0; return 0;
base64_encode_raw(buffer->contents + start, base64_encode_raw((char*) (buffer->contents + start),
length, buffer->contents + start); length, buffer->contents + start);
if (!NETTLE_BUFFER_PUTC(buffer, '}')) if (!NETTLE_BUFFER_PUTC(buffer, '}'))
......
...@@ -84,7 +84,7 @@ sexp_transport_iterator_first(struct sexp_iterator *iterator, ...@@ -84,7 +84,7 @@ sexp_transport_iterator_first(struct sexp_iterator *iterator,
base64_decode_init(&ctx); base64_decode_init(&ctx);
if (base64_decode_update(&ctx, &coded_length, input + out, if (base64_decode_update(&ctx, &coded_length, input + out,
end - in, input + in) end - in, (const char*) (input + in))
&& base64_decode_final(&ctx)) && base64_decode_final(&ctx))
{ {
out += coded_length; out += coded_length;
......
...@@ -566,7 +566,7 @@ test_armor(const struct nettle_armor *armor, ...@@ -566,7 +566,7 @@ test_armor(const struct nettle_armor *armor,
const char *ascii) const char *ascii)
{ {
size_t ascii_length = strlen(ascii); size_t ascii_length = strlen(ascii);
uint8_t *buffer = xalloc(1 + ascii_length); char *buffer = xalloc(1 + ascii_length);
uint8_t *check = xalloc(1 + armor->decode_length(ascii_length)); uint8_t *check = xalloc(1 + armor->decode_length(ascii_length));
void *encode = xalloc(armor->encode_context_size); void *encode = xalloc(armor->encode_context_size);
void *decode = xalloc(armor->decode_context_size); void *decode = xalloc(armor->decode_context_size);
......
...@@ -90,7 +90,7 @@ sexp_get_char(struct sexp_input *input) ...@@ -90,7 +90,7 @@ sexp_get_char(struct sexp_input *input)
* character at a time. */ * character at a time. */
if (!input->coding->decode_update(&input->state, if (!input->coding->decode_update(&input->state,
&done, &input->c, &done, &input->c,
1, &input->c)) 1, (const char*) &input->c))
die("Invalid coded data.\n"); die("Invalid coded data.\n");
if (done) if (done)
......
...@@ -73,7 +73,7 @@ main (int argc, char **argv) ...@@ -73,7 +73,7 @@ main (int argc, char **argv)
size_t password_length; size_t password_length;
uint8_t *output; uint8_t *output;
size_t salt_length; size_t salt_length;
uint8_t *salt; char *salt;
int raw = 0; int raw = 0;
int hex_salt = 0; int hex_salt = 0;
int c; int c;
...@@ -141,7 +141,7 @@ main (int argc, char **argv) ...@@ -141,7 +141,7 @@ main (int argc, char **argv)
return EXIT_FAILURE; return EXIT_FAILURE;
} }
salt = (uint8_t *) strdup (argv[0]); salt = strdup (argv[0]);
salt_length = strlen(argv[0]); salt_length = strlen(argv[0]);
if (hex_salt) if (hex_salt)
...@@ -150,7 +150,7 @@ main (int argc, char **argv) ...@@ -150,7 +150,7 @@ main (int argc, char **argv)
base16_decode_init (&base16); base16_decode_init (&base16);
if (!base16_decode_update (&base16, if (!base16_decode_update (&base16,
&salt_length, salt, &salt_length, (uint8_t *) salt,
salt_length, salt) salt_length, salt)
|| !base16_decode_final (&base16)) || !base16_decode_final (&base16))
die ("Invalid salt (expecting hex encoding).\n"); die ("Invalid salt (expecting hex encoding).\n");
...@@ -165,7 +165,7 @@ main (int argc, char **argv) ...@@ -165,7 +165,7 @@ main (int argc, char **argv)
output = xalloc (output_length); output = xalloc (output_length);
pbkdf2_hmac_sha256 (password_length, (const uint8_t *) password, pbkdf2_hmac_sha256 (password_length, (const uint8_t *) password,
iterations, salt_length, salt, iterations, salt_length, (const uint8_t*) salt,
output_length, output); <