Skip to content

Commit

Permalink
Fixed Z85 methods to be static and not pollute library
Browse files Browse the repository at this point in the history
  • Loading branch information
hintjens committed Sep 15, 2013
1 parent 65ef76b commit 193d0bb
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 8 deletions.
4 changes: 2 additions & 2 deletions src/z85_codec.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ static uint8_t decoder [96] = {
// size * 5 / 4 bytes long plus 1 byte for the null terminator. Returns
// dest. Size must be a multiple of 4.

char *
static char *
Z85_encode (char *dest, uint8_t *data, size_t size)
{
assert (size % 4 == 0);
Expand Down Expand Up @@ -82,7 +82,7 @@ Z85_encode (char *dest, uint8_t *data, size_t size)
// strlen (string) * 4 / 5 bytes long. Returns dest. strlen (string)
// must be a multiple of 5.

uint8_t *
static uint8_t *
Z85_decode (uint8_t *dest, char *string)
{
assert (strlen (string) % 5 == 0);
Expand Down
41 changes: 39 additions & 2 deletions tests/test_security_curve.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
#include <stdlib.h>
#include "testutil.hpp"
#include "../include/zmq_utils.h"
#include "../src/z85_codec.hpp"
#include "platform.hpp"

// Test keys from the zmq_curve man page
Expand All @@ -30,6 +29,44 @@ static char client_secret [] = "D:)Q[IlAW!ahhC2ac:9*A}h:p?([4%wOTJ%JR%cs";
static char server_public [] = "rq:rM>}U?@Lns47E1%kR.o@n%FcmmsL/@{H8]yf7";
static char server_secret [] = "JTKVSB%%)wK0E.X)V>+}o?pNmC{O&4W4b!Ni{Lh6";

// --------------------------------------------------------------------------
// Encode a binary frame as a string; destination string MUST be at least
// size * 5 / 4 bytes long plus 1 byte for the null terminator. Returns
// dest. Size must be a multiple of 4.

// Maps base 256 to base 85
static char encoder [85 + 1] = {
"0123456789" "abcdefghij" "klmnopqrst" "uvwxyzABCD"
"EFGHIJKLMN" "OPQRSTUVWX" "YZ.-:+=^!/" "*?&<>()[]{"
"}@%$#"
};

static char *
Z85_encode (char *dest, uint8_t *data, size_t size)
{
assert (size % 4 == 0);
unsigned int char_nbr = 0;
unsigned int byte_nbr = 0;
uint32_t value = 0;
while (byte_nbr < size) {
// Accumulate value in base 256 (binary)
value = value * 256 + data [byte_nbr++];
if (byte_nbr % 4 == 0) {
// Output value in base 85
unsigned int divisor = 85 * 85 * 85 * 85;
while (divisor) {
dest [char_nbr++] = encoder [value / divisor % 85];
divisor /= 85;
}
value = 0;
}
}
assert (char_nbr == size * 5 / 4);
dest [char_nbr] = 0;
return dest;
}


static void zap_handler (void *ctx)
{
// Create and bind ZAP socket
Expand Down Expand Up @@ -71,7 +108,7 @@ static void zap_handler (void *ctx)
}
else {
s_sendmore (zap, "400");
s_sendmore (zap, "Invalid username or password");
s_sendmore (zap, "Invalid client public key");
s_sendmore (zap, "");
s_send (zap, "");
}
Expand Down
39 changes: 37 additions & 2 deletions tools/curve_keygen.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,47 @@
#include <stdlib.h>
#include <assert.h>
#include "../src/platform.hpp"

#ifdef HAVE_LIBSODIUM
# include <sodium.h>
# include "z85_codec.h"
#endif

// Maps base 256 to base 85
static char encoder [85 + 1] = {
"0123456789" "abcdefghij" "klmnopqrst" "uvwxyzABCD"
"EFGHIJKLMN" "OPQRSTUVWX" "YZ.-:+=^!/" "*?&<>()[]{"
"}@%$#"
};

// --------------------------------------------------------------------------
// Encode a binary frame as a string; destination string MUST be at least
// size * 5 / 4 bytes long plus 1 byte for the null terminator. Returns
// dest. Size must be a multiple of 4.

static char *
Z85_encode (char *dest, uint8_t *data, size_t size)
{
assert (size % 4 == 0);
uint char_nbr = 0;
uint byte_nbr = 0;
uint32_t value = 0;
while (byte_nbr < size) {
// Accumulate value in base 256 (binary)
value = value * 256 + data [byte_nbr++];
if (byte_nbr % 4 == 0) {
// Output value in base 85
uint divisor = 85 * 85 * 85 * 85;
while (divisor) {
dest [char_nbr++] = encoder [value / divisor % 85];
divisor /= 85;
}
value = 0;
}
}
assert (char_nbr == size * 5 / 4);
dest [char_nbr] = 0;
return dest;
}

int main (void)
{
#ifdef HAVE_LIBSODIUM
Expand Down
4 changes: 2 additions & 2 deletions tools/z85_codec.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ static uint8_t decoder [96] = {
// size * 5 / 4 bytes long plus 1 byte for the null terminator. Returns
// dest. Size must be a multiple of 4.

char *
static char *
Z85_encode (char *dest, uint8_t *data, size_t size)
{
assert (size % 4 == 0);
Expand Down Expand Up @@ -84,7 +84,7 @@ Z85_encode (char *dest, uint8_t *data, size_t size)
// strlen (string) * 4 / 5 bytes long. Returns dest. strlen (string)
// must be a multiple of 5.

uint8_t *
static uint8_t *
Z85_decode (uint8_t *dest, char *string)
{
assert (strlen (string) % 5 == 0);
Expand Down

0 comments on commit 193d0bb

Please sign in to comment.