aboutsummaryrefslogtreecommitdiffstats
path: root/src/contrib/perl-xs/t/hex.t
blob: 6f447b25c195cef05a64c1a9ab94be4bc3a8b395 (plain)
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
# vim: set ft=perl:
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'

######################### We start with some black magic to print on failure.

# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)

BEGIN { $| = 1; print "1..24\n"; }
END { print "not ok 1\n" unless $loaded; }

require 't/testutl.pl';
use Botan;

$loaded = 1;
print "ok 1\n";

######################### End of black magic.

# Insert your test code below (better if it prints "ok 13"
# (correspondingly "not ok 13") depending on the success of chunk 13
# of the test code):

use strict;

# Data prep

my ($hex, $hex_ws, $hex_garbage);
while ( $_ = <DATA> )
{
    $hex_garbage .= $_;
    s/[^[:xdigit:][:space:]]//g;
    $hex_ws .= $_;
    s/[^[:xdigit:]]//g;
    $hex .= $_;
}
my $data_test = pack("H*", $hex);

# Decoder...

my $f;

eval { $f = Botan::Hex_Decoder->new(&Botan::NONE); };
print "not " if $@ || !defined $f;
print "ok 2\n";

my $dec;
eval { $dec = Botan::Pipe->new($f); };
print "not " if $@ || !defined $dec;
print "ok 3\n";

eval { $f = Botan::Hex_Decoder->new(&Botan::IGNORE_WS); };
print "not " if $@ || !defined $f;
print "ok 4\n";

my $dec_is;
eval { $dec_is = Botan::Pipe->new($f); };
print "not " if $@ || !defined $dec_is;
print "ok 5\n";

eval { $f = Botan::Hex_Decoder->new(&Botan::FULL_CHECK); };
print "not " if $@ || !defined $f;
print "ok 6\n";

my $dec_fc;
eval { $dec_fc = Botan::Pipe->new($f); };
print "not " if $@ || !defined $dec_fc;
print "ok 7\n";


# Testing clean hexadecimal input

my $data;

undef $data;
eval {
    $dec->process_msg($hex);
    $data = $dec->read();
};

print "not " if $@ || $data ne $data_test;
print "ok 8\n";

undef $data;
eval {
    $dec_is->process_msg($hex);
    $data = $dec_is->read();
};

print "not " if $@ || $data ne $data_test;
print "ok 9\n";

undef $data;
eval {
    $dec_fc->process_msg($hex);
    $data = $dec_fc->read();
};

print "not " if $@ || $data ne $data_test;
print "ok 10\n";


# Testing hexadecimal input with whitespaces

undef $data;
eval {
    $dec->process_msg($hex_ws);
    $dec->set_default_msg(1);
    $data = $dec->read();
};

print "not " if $@ || $data ne $data_test;
print "ok 11\n";

undef $data;
eval {
    $dec_is->process_msg($hex_ws);
    $dec_is->set_default_msg(1);
    $data = $dec_is->read();
};

print "not " if $@ || $data ne $data_test;
print "ok 12\n";

undef $data;
eval {
    $dec_fc->process_msg($hex_ws);
    $dec_fc->set_default_msg(1);
    $data = $dec_fc->read();
};

print "not " unless $@ && !defined $data;
print "ok 13\n";


# Testing hexadecimal input with garbage

undef $data;
eval {
    $dec->process_msg($hex_garbage);
    $dec->set_default_msg(2);
    $data = $dec->read();
};

print "not " if $@ || $data ne $data_test;
print "ok 14\n";

undef $data;
eval {
    $dec_is->process_msg($hex_garbage);
    $dec_is->set_default_msg(2);
    $data = $dec_is->read();
};

print "not " unless $@ && !defined $data;
print "ok 15\n";

undef $data;
eval {
    $dec_fc->process_msg($hex_garbage);
    $dec_fc->set_default_msg(2);
    $data = $dec_fc->read();
};

print "not " unless $@ && !defined $data;
print "ok 16\n";


# Encoder...

eval { $f = Botan::Hex_Encoder->new(); };
print "not " if $@ || !defined $f;
print "ok 17\n";

my $enc;
eval { $enc = Botan::Pipe->new($f); };
print "not " if $@ || !defined $enc;
print "ok 18\n";

eval { $f = Botan::Hex_Encoder->new(1, 5, 1); };
print "not " if $@ || !defined $f;
print "ok 19\n";

my $enc2;
eval { $enc2 = Botan::Pipe->new($f); };
print "not " if $@ || !defined $enc2;
print "ok 20\n";

undef $data;
eval {
    $enc->process_msg("Hello\n");
    $data = $enc->read();
};
print "not " if $@ || $data ne "48656C6C6F0A";
print "ok 21\n";

undef $data;
eval {
    $enc2->process_msg("Hello\n");
    $data = $enc2->read();
};
print "not " if $@ || $data ne "48656\nc6c6f\n0a\n";
print "ok 22\n";


# Encoder with decoder...

my $p;
eval {
    $p = Botan::Pipe->new(
	    Botan::Hex_Encoder->new(),
	    Botan::Hex_Decoder->new(),
	);
};
print "not " if $@ || !defined $p;
print "ok 23\n";

print "not " unless random_message_ok($p);
print "ok 24\n";



__DATA__
cb13 4a4d 7522 1fd3 c6f6 7786 d04b 3043  ..JMu"....w..K..
4552 4bcf 4d2b 9d71 0cfe 4d6a 1caf bcfd  .RK.M+.q..Mj....
8f91 6151 ff85 e900 7e6a bafc 15e9 ae51  ...Q....~j.....Q
b14b 7210 bb40 5958 2b82 d49e b808 68a5  .Kr..@YX+.....h.
7945 9dec f686 9b98 989e 826d 8088 6ee7  y..........m..n.
d066 1eac 8c34 c461 bb54 7726 87ab d681  .........Tw&....
a0be 52e5 1128 0cf2 759e cb2d e690 4ed9  ..R..(..u..-..N.
7e88 bda7 2523 4a0f 185a 02b1 f898 fc41  ~...%#J..Z......
dd48 fa87 945d 7611 b8c9 a50a 2de2 b670  .H...]v.....-..p
0056 c8be 2cbb e7d0 1e70 4a3d 79f0 dce9  .V..,....pJ=y...
b57f 154b 2b3a db73 f086 de11 9f3e 1641  ...K+:.s.....>..
3a28 8b9b bb0f 682b 80db b791 89e0 62c0  :(....h+........
7204 db97 5432 2eb0 a04e f38e 809f 7223  r...T....N....r#
912e e552 1452 6dd2 e09f dd06 c715 7c1a  ...R.Rm.......|.
fe3d d6cc b6d0 a17a 27d7 4327 4e43 8af3  .=.....z'..'N...
6eb5 e9f8 bfe9 34c3 6636 8243 358f 966d  n..............m
7d87 d17b 5c37 6acb 4972 f4ec 6806 bbde  }..{\.j.Ir..h...
2689 a019 a9e2 4101 7fe2 de72 bc03 eb5e  &..........r...^
b699 2d6b f8cd a08e 6e01 edfc a81a 94b6  ..-k....n.......
9073 15fb efb2 c8d9 9f85 6633 85f1 e9d0  .s..............
20ce 578b ab9d 2e51 b947 69bf fba5 82c6   .W....Q.Gi.....
2ed0 dd36 d679 a399 7db3 8a0d cdef 0eda  .....y..}.......
e761 e7f1 5b17 3f67 0c83 215a eddf 9d2a  ....[.?g..!Z...*
5e70 0a77 c92e 94e1 a82b fd7c f10a 894f  ^p.w.....+.|...O
2955 f0e8 7398 f409 2040 b797 da03 a5a6  )U..s... @......
7ba4 c3c9 2659 b9f7 6a56 e17a b481 983f  {...&Y..jV.z...?
00ed 3cc8 5a22 ad5c b6e0 3566 d717 35a6  ..<.Z".\........
1523 4104 de63 477e fd24 68e5 e816 98df  .#....G~.$h.....
1747 417e db72 a76a be5b b9dc 3dfb 2d05  .G.~.r.j.[..=.-.
d27f e597 eafc 9a29 15c5 792d 9c88 9aea  .......)..y-....
485e e431 96c3 7723 da6d 28b2 477a fd12  H^....w#.m(.Gz..
e645 5dcd 7d5a d8b4 7acc 10b2 b41a e11d  ..].}Z..z.......