annotate src/lib/base32.c @ 22664:fea53c2725c0

director: Fix director_max_parallel_moves/kicks type Should be uint, not time.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 09 Nov 2017 12:24:16 +0200
parents 2e2563132d5f
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19552
diff changeset
1 /* Copyright (c) 2007-2017 Dovecot authors, see the included COPYING file */
18098
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
2
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
3 #include "lib.h"
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
4 #include "base32.h"
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
5 #include "buffer.h"
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
6
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
7 static const char b32enc[] =
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
8 "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
9
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
10 static const char b32hexenc[] =
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
11 "0123456789ABCDEFGHIJKLMNOPQRSTUV";
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
12
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
13 static const unsigned char b32dec[256] = {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
14 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0-7 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
15 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 8-15 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
16 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 16-23 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
17 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 24-31 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
18 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 32-39 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
19 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 40-47 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
20 0xff, 0xff, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 48-55 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
21 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 56-63 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
22 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, /* 64-71 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
23 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, /* 72-79 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
24 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, /* 80-87 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
25 0x17, 0x18, 0x19, 0xff, 0xff, 0xff, 0xff, 0xff, /* 88-95 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
26 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 96-103 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
27 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 104-111 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
28 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 112-119 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
29 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 120-127 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
30
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
31 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 128-255 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
32 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
33 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
34 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
35 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
36 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
37 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
38 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
39 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
40 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
41 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
42 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
43 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
44 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
45 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
46 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
47 };
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
48
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
49 static const unsigned char b32hexdec[256] = {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
50 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0-7 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
51 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 8-15 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
52 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 16-23 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
53 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 24-31 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
54 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 32-39 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
55 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 40-47 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
56 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 48-55 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
57 0x08, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 56-63 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
58 0xff, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, /* 64-71 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
59 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, /* 72-79 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
60 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0xff, /* 80-87 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
61 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 88-95 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
62 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 96-103 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
63 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 104-111 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
64 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 112-119 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
65 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 120-127 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
66
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
67 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 128-255 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
68 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
69 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
70 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
71 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
72 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
73 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
74 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
75 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
76 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
77 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
78 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
79 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
80 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
81 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
82 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
83 };
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
84
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
85 static void
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
86 base32_encode_with_alphabet(const char *alph,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
87 bool pad, const void *src, size_t src_size, buffer_t *dest)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
88 {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
89 const unsigned char *src_c = src;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
90 unsigned char tmp[8], endb;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
91 size_t src_pos;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
92
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
93 /* [5 3][2 5 1][4 4][1 5 2][3 5]
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
94 (5)(3 2)(5)(1 4)(4 1)(5)(2 3)(5)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
95 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
96
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
97 /* encode main part */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
98 for (src_pos = 0; src_pos + 4 < src_size; src_pos += 5) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
99 tmp[0] = alph[src_c[src_pos] >> 3];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
100 tmp[1] = alph[((src_c[src_pos] & 0x07) << 2) |
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
101 ((src_c[src_pos+1] >> 6) & 0x03)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
102 tmp[2] = alph[((src_c[src_pos+1] >> 1) & 0x1f)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
103 tmp[3] = alph[((src_c[src_pos+1] & 0x01) << 4) |
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
104 (src_c[src_pos+2] >> 4)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
105 tmp[4] = alph[((src_c[src_pos+2] & 0x0f) << 1) |
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
106 (src_c[src_pos+3] >> 7)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
107 tmp[5] = alph[((src_c[src_pos+3] >> 2) & 0x1f)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
108 tmp[6] = alph[((src_c[src_pos+3] & 0x03) << 3) |
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
109 (src_c[src_pos+4] >> 5)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
110 tmp[7] = alph[src_c[src_pos+4] & 0x1f];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
111 buffer_append(dest, tmp, 8);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
112 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
113
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
114 /* encode last < 5 bytes if any */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
115 if (src_pos < src_size) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
116 tmp[0] = alph[src_c[src_pos] >> 3];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
117 switch (src_size - src_pos) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
118 case 1:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
119 tmp[1] = alph[((src_c[src_pos] & 0x07) << 2)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
120 endb = 2;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
121 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
122 case 2:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
123 tmp[1] = alph[((src_c[src_pos] & 0x07) << 2) |
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
124 ((src_c[src_pos+1] >> 6) & 0x03)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
125 tmp[2] = alph[((src_c[src_pos+1] >> 1) & 0x1f)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
126 tmp[3] = alph[((src_c[src_pos+1] & 0x01) << 4)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
127 endb = 4;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
128 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
129 case 3:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
130 tmp[1] = alph[((src_c[src_pos] & 0x07) << 2) |
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
131 ((src_c[src_pos+1] >> 6) & 0x03)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
132 tmp[2] = alph[((src_c[src_pos+1] >> 1) & 0x1f)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
133 tmp[3] = alph[((src_c[src_pos+1] & 0x01) << 4) |
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
134 (src_c[src_pos+2] >> 4)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
135 tmp[4] = alph[((src_c[src_pos+2] & 0x0f) << 1)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
136 endb = 5;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
137 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
138 case 4:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
139 tmp[1] = alph[((src_c[src_pos] & 0x07) << 2) |
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
140 ((src_c[src_pos+1] >> 6) & 0x03)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
141 tmp[2] = alph[((src_c[src_pos+1] >> 1) & 0x1f)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
142 tmp[3] = alph[((src_c[src_pos+1] & 0x01) << 4) |
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
143 (src_c[src_pos+2] >> 4)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
144 tmp[4] = alph[((src_c[src_pos+2] & 0x0f) << 1) |
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
145 (src_c[src_pos+3] >> 7)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
146 tmp[5] = alph[((src_c[src_pos+3] >> 2) & 0x1f)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
147 tmp[6] = alph[((src_c[src_pos+3] & 0x03) << 3)];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
148 endb = 7;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
149 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
150 default:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
151 i_unreached();
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
152 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
153
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
154 /* add padding if required */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
155 if (pad) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
156 memset(&tmp[endb], '=', sizeof(tmp)-endb);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
157 buffer_append(dest, tmp, 8);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
158 } else {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
159 buffer_append(dest, tmp, endb);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
160 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
161 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
162 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
163
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
164 void base32_encode(bool pad, const void *src, size_t src_size,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
165 buffer_t *dest)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
166 {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
167 base32_encode_with_alphabet(b32enc, pad, src, src_size, dest);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
168 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
169
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
170 void base32hex_encode(bool pad, const void *src, size_t src_size,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
171 buffer_t *dest)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
172 {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
173 base32_encode_with_alphabet(b32hexenc, pad, src, src_size, dest);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
174 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
175
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
176 #define IS_EMPTY(c) \
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
177 ((c) == '\n' || (c) == '\r' || (c) == ' ' || (c) == '\t')
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
178
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
179 static int
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
180 base32_decode_with_alphabet(const unsigned char *alph,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
181 const void *src, size_t src_size, size_t *src_pos_r,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
182 buffer_t *dest)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
183 {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
184 const unsigned char *src_c = src;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
185 size_t block_pos, src_pos;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
186 unsigned char output[5], ipos, opos;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
187 int ret = 1;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
188
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
189 /* (5)(3 2)(5)(1 4)(4 1)(5)(2 3)(5)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
190 [5 3][2 5 1][4 4][1 5 2][3 5]
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
191 */
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
192 ipos = opos = 0;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
193 block_pos = 0;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
194 for (src_pos = 0; src_pos < src_size; src_pos++) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
195 unsigned char input = alph[src_c[src_pos]];
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
196
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
197 if (input == 0xff) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
198 if (unlikely(!IS_EMPTY(src_c[src_pos])))
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
199 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
200 continue;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
201 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
202
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
203 ipos++;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
204 switch (ipos) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
205 case 1:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
206 output[0] = input << 3;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
207 opos = 0;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
208 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
209 case 2:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
210 output[0] |= input >> 2;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
211 output[1] = (input & 0x03) << 6;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
212 opos = 1;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
213 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
214 case 3:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
215 output[1] |= input << 1;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
216 opos = 1;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
217 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
218 case 4:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
219 output[1] |= input >> 4;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
220 output[2] = (input & 0x0f) << 4;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
221 opos = 2;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
222 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
223 case 5:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
224 output[2] |= input >> 1;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
225 output[3] = (input & 0x01) << 7;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
226 opos = 3;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
227 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
228 case 6:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
229 output[3] |= input << 2;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
230 opos = 3;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
231 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
232 case 7:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
233 output[3] |= input >> 3;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
234 output[4] = ((input & 0x07) << 5);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
235 opos = 4;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
236 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
237 case 8:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
238 output[4] |= input;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
239 buffer_append(dest, output, 5);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
240 ipos = 0;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
241 opos = 0;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
242 block_pos = src_pos;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
243 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
244 default:
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
245 i_unreached();
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
246 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
247 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
248
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
249 if (ipos > 0) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
250 for (; src_pos < src_size; src_pos++) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
251 if (src_c[src_pos] != '=') {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
252 if (unlikely(!IS_EMPTY(src_c[src_pos]))) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
253 ret = -1;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
254 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
255 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
256 continue;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
257 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
258 if (++ipos >= 8) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
259 buffer_append(dest, output, opos);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
260 ipos = 0;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
261 ret = 0;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
262 src_pos++;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
263 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
264 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
265 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
266 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
267
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
268 if (src_pos_r != NULL) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
269 if (ipos == 0) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
270 for (; src_pos < src_size; src_pos++) {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
271 if (!IS_EMPTY(src_c[src_pos]))
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
272 break;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
273 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
274
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
275 *src_pos_r = src_pos;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
276 } else {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
277 *src_pos_r = block_pos;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
278 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
279 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
280 return ret;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
281 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
282
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
283 int base32_decode(const void *src, size_t src_size,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
284 size_t *src_pos_r, buffer_t *dest)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
285 {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
286 return base32_decode_with_alphabet
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
287 (b32dec, src, src_size, src_pos_r, dest);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
288 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
289 int base32hex_decode(const void *src, size_t src_size,
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
290 size_t *src_pos_r, buffer_t *dest)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
291 {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
292 return base32_decode_with_alphabet
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
293 (b32hexdec, src, src_size, src_pos_r, dest);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
294 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
295
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
296 buffer_t *t_base32_decode_str(const char *str)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
297 {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
298 buffer_t *buf;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
299 size_t len = strlen(str);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
300
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
301 buf = buffer_create_dynamic(pool_datastack_create(),
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
302 MAX_BASE32_DECODED_SIZE(len));
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
303 (void)base32_decode(str, len, NULL, buf);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
304 return buf;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
305 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
306
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
307 buffer_t *t_base32hex_decode_str(const char *str)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
308 {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
309 buffer_t *buf;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
310 size_t len = strlen(str);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
311
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
312 buf = buffer_create_dynamic(pool_datastack_create(),
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
313 MAX_BASE32_DECODED_SIZE(len));
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
314 (void)base32hex_decode(str, len, NULL, buf);
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
315 return buf;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
316 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
317
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
318 bool base32_is_valid_char(char c)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
319 {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
320 return b32dec[(uint8_t)c] != 0xff;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
321 }
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
322
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
323 bool base32hex_is_valid_char(char c)
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
324 {
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
325 return b32hexdec[(uint8_t)c] != 0xff;
1663b76430e1 Added support for base32 encode/decode.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff changeset
326 }