1 {-Test prog for HOTP functions, we 03.10}
2 
3 program t_hotp;
4 
5 {$i std.inc}
6 
7 {$ifdef APPCONS}
8 {$apptype console}
9 {$endif}
10 
11 
12 uses
13   hotp;
14 
15 {Data from Simon Josefsson HOTP Toolkit, http://www.nongnu.org/hotp-toolkit/}
16 const
17   tv6: array[0..19] of string[6] = (
18          '755224', '287082', '359152', '969429',
19          '338314', '254676', '287922', '162583',
20          '399871', '520489', '403154', '481090',
21          '868912', '736127', '229903', '436521',
22          '186581', '447589', '903435', '578337');
23   tv7: array[0..19] of string[7] = (
24          '4755224', '4287082', '7359152', '6969429',
25          '0338314', '8254676', '8287922', '2162583',
26          '3399871', '5520489', '2403154', '3481090',
27          '7868912', '3736127', '5229903', '3436521',
28          '2186581', '4447589', '1903435', '1578337');
29   tv8: array[0..19] of string[8] = (
30          '84755224', '94287082', '37359152', '26969429',
31          '40338314', '68254676', '18287922', '82162583',
32          '73399871', '45520489', '72403154', '43481090',
33          '47868912', '33736127', '35229903', '23436521',
34          '22186581', '94447589', '71903435', '21578337');
35 
36 const
37   secret: string[20] = '12345678901234567890';
38 var
39   count: THOTPCount;
40   i,err: integer;
41   s: string[8];
42 begin
43   writeln('Selftest: ', hotp_selftest);
44   hotp_set_count32(count,0,0);
45   err := 0;
46   for i:=0 to 19 do begin
47     s := hotp_generate_otps(secret, count, 6, -1);
48     if s<>tv6[i] then begin
49       inc(err);
50       writeln('Error: digits 6, i=',i:2,':  TV = ', tv6[i]:8, '  HOTP result = ', s:8);
51     end;
52     s := hotp_generate_otps(secret, count, 7, -1);
53     if s<>tv7[i] then begin
54       inc(err);
55       writeln('Error: digits 7, i=',i:2,':  TV = ', tv7[i]:8, '  HOTP result = ', s:8);
56     end;
57     s := hotp_generate_otps(secret, count, 8, -1);
58     if s<>tv8[i] then begin
59       inc(err);
60       writeln('Error: digits 8, i=',i:2,':  TV = ', tv8[i]:8, '  HOTP result = ', s:8);
61     end;
62     hotp_inc_count(count);
63   end;
64   if err=0 then writeln('Test OK')
65   else writeln(' ** failed: ',err, ' errors!');
66 end.
67