about summary refs log tree commit diff stats
path: root/test.c
blob: 1a07c9ce4a6800a995df48fec45ad76941b0b1f3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//Test values
///////////////////////////////////////////////////////////////
#define STRING_A "9TrJ"
#define STRING_B "9TrJUQ=="
#define STRING_C "9TrJUfA="

#define HEXNUM_A {0xF5,0x3A,0xC9}
#define HEXNUM_B {0xF5,0x3A,0xC9,0x51}
#define HEXNUM_C {0xF5,0x3A,0xC9,0x51,0xF0}

#define HEXSTR_A "0xF5 0x3A 0xC9"
#define HEXSTR_B "0xF5 0x3A 0xC9 0x51"
#define HEXSTR_C "0xF5 0x3A 0xC9 0x51 0xF0"
///////////////////////////////////////////////////////////////

#define NELEMS(x)  (sizeof(x) / sizeof(x[0]))

int test_b64_encode();
int test_b64_decode();
int hexputs(unsigned int* data, unsigned int len);
int compare(int *a, int *b, int l);
char *status(int boolean);

int main() {
	
	puts("\nbase64.c [Test]");
	puts("------------------------------------");
	printf("%s           : %s\n",HEXSTR_A,STRING_A);
	printf("%s      : %s\n",HEXSTR_B,STRING_B);
	printf("%s : %s\n",HEXSTR_C,STRING_C);
	puts("\nTesting b64_encode() ...\n");
	test_b64_encode();
	puts("\nTesting b64_decode() ...\n");
	test_b64_decode();
	puts("\n[END]");

	return 0;
}

int test_b64_encode() {
	
	int test_a[] = HEXNUM_A;
	int test_b[] = HEXNUM_B;
	int test_c[] = HEXNUM_C;

	int size_a = NELEMS(test_a);
	int size_b = NELEMS(test_b);
	int size_c = NELEMS(test_c);

	int out_size_a = b64e_size(size_a) + 1;
	int out_size_b = b64e_size(size_b) + 1;
	int out_size_c = b64e_size(size_c) + 1;

	unsigned char *out_a = malloc(out_size_a);
	unsigned char *out_b = malloc(out_size_b);
	unsigned char *out_c = malloc(out_size_c);

  	out_size_a = b64_encode(test_a,size_a,out_a);
  	out_size_b = b64_encode(test_b,size_b,out_b);
  	out_size_c = b64_encode(test_c,size_c,out_c);

  	printf("%s\t%s\n",status(!strcmp(out_a,STRING_A)),out_a);
  	printf("%s\t%s\n",status(!strcmp(out_b,STRING_B)),out_b);
  	printf("%s\t%s\n",status(!strcmp(out_c,STRING_C)),out_c);
  	
  	return 0;
}

int test_b64_decode() {
	
	char test_a[] = STRING_A;
	char test_b[] = STRING_B;
	char test_c[] = STRING_C;

	int len_a = strlen(test_a);
	int len_b = strlen(test_b);
	int len_c = strlen(test_c);

	int out_size_a = b64d_size(len_a) + 1;
	int out_size_b = b64d_size(len_b) + 1;
	int out_size_c = b64d_size(len_c) + 1;

	unsigned int *out_a = malloc(out_size_a);
	unsigned int *out_b = malloc(out_size_b);
	unsigned int *out_c = malloc(out_size_c);

  	out_size_a = b64_decode(test_a,len_a,out_a);
  	out_size_b = b64_decode(test_b,len_b,out_b);
  	out_size_c = b64_decode(test_c,len_c,out_c);
	
	int r_a[] = HEXNUM_A;
	int r_b[] = HEXNUM_B;
	int r_c[] = HEXNUM_C;

  	printf("%s\t",status(compare(r_a,out_a,3))); hexputs(out_a,out_size_a);
  	printf("%s\t",status(compare(r_b,out_b,4))); hexputs(out_b,out_size_b);
  	printf("%s\t",status(compare(r_c,out_c,5))); hexputs(out_c,out_size_c);
  	
  	return 0;
}

int hexputs(unsigned int* data, unsigned int len) {
	int i;
	for (i=0;i<len;i++) {
		printf("0x%X ",(int)data[i]);
	}
	printf("\n");
	return 0;
}

int compare(int *a, int *b, int l) {
	int i;
	for (i=0;i<l;i++) {
		if (a[i]!=b[i])
			return 0;
	}
	return 1;
}

char *status(int boolean) {
	if (boolean)
		return "[PASS]";
	return "[FAIL]";
}