56 static const unsigned char hex_chars[] =
"0123456789ABCDEF";
58 #define UCHAR_PTR(x) ((const unsigned char *)(x))
64 const unsigned char *cp;
69 for (cp =
UCHAR_PTR(in), count = len; count > 0; count--, cp++) {
82 const unsigned char *cp;
88 for (cp =
UCHAR_PTR(in), count = len; count > 0; cp += 2, count -= 2) {
92 if (hex >=
'0' && hex <=
'9')
93 bin = (hex -
'0') << 4;
94 else if (hex >=
'A' && hex <=
'F')
95 bin = (hex -
'A' + 10) << 4;
96 else if (hex >=
'a' && hex <=
'f')
97 bin = (hex -
'a' + 10) << 4;
101 if (hex >=
'0' && hex <=
'9')
103 else if (hex >=
'A' && hex <=
'F')
104 bin |= (hex -
'A' + 10);
105 else if (hex >=
'a' && hex <=
'f')
106 bin |= (hex -
'a' + 10);
121 #define STR(x) vstring_str(x)
122 #define LEN(x) VSTRING_LEN(x)
124 int main(
int unused_argc,
char **unused_argv)
128 char *test =
"this is a test";
130 #define DECODE(b,x,l) { \
131 if (hex_decode((b),(x),(l)) == 0) \
132 msg_panic("bad hex: %s", (x)); \
134 #define VERIFY(b,t) { \
135 if (strcmp((b), (t)) != 0) \
136 msg_panic("bad test: %s", (b)); \
140 DECODE(b2,
STR(b1),
LEN(b1));
141 VERIFY(
STR(b2), test);
146 DECODE(b2,
STR(b1),
LEN(b1));
147 DECODE(b1,
STR(b2),
LEN(b2));
148 DECODE(b2,
STR(b1),
LEN(b1));
149 VERIFY(
STR(b2), test);
156 DECODE(b2,
STR(b1),
LEN(b1));
157 DECODE(b1,
STR(b2),
LEN(b2));
158 DECODE(b2,
STR(b1),
LEN(b1));
159 DECODE(b1,
STR(b2),
LEN(b2));
160 DECODE(b2,
STR(b1),
LEN(b1));
161 VERIFY(
STR(b2), test);
int main(int argc, char **argv)
#define VSTRING_TERMINATE(vp)
#define VSTRING_ADDCH(vp, ch)
VSTRING * hex_encode(VSTRING *result, const char *in, ssize_t len)
#define VSTRING_RESET(vp)
VSTRING * vstring_alloc(ssize_t len)
VSTRING * vstring_free(VSTRING *vp)
VSTRING * hex_decode(VSTRING *result, const char *in, ssize_t len)