]> git.cryptolib.org Git - avr-crypto-lib.git/blob - host/get_test.rb
fixing a bug in sha1-C and sha256-C (only C-Versions are affected) in setting the...
[avr-crypto-lib.git] / host / get_test.rb
1 #!/usr/bin/ruby 
2
3 require 'serialport'
4
5 def readTestVector(param)
6   fname=$dir;
7   lb="";
8   buffer="";
9   set=0;
10   vector=0;
11   begin
12     ctr=$extended_wait;
13     while((lb=$sp.gets())==nil && ctr>=0)do
14       ctr -= 1;
15     end
16     if (m=/unknown command/.match(lb) || m=/[Ee][Rr]{2}[Oo][Rr]/.match(lb))
17       puts("ERROR: "+lb);
18       exit(2);
19     end
20     if(lb==nil)
21       return false;
22     end
23   end while(m=/\*+/.match(lb));
24   
25   buffer += lb;
26   begin
27     ctr=$extended_wait;
28     while((lb=$sp.gets())==nil && ctr>=0)do
29       ctr -= 1;
30     end
31     if(lb==nil)
32       return false;
33     end
34     buffer+=lb;
35   end while(m=/\*.*/.match(lb));
36
37   while(!(m=/Test vectors/.match(lb))) 
38     m=/[^:]*:[\s]([A-Za-z0-9_-]*)/.match(lb);
39     if(m) 
40       fname+=m[1]+".";
41     end
42     buffer+=lb;
43     ctr=$extended_wait;
44     while((lb=$sp.gets())==nil && ctr>=0)do
45       ctr -= 1;
46     end
47   end
48   if(param!="")
49     fname+=param+".";
50   end
51   puts("-> "+fname+"txt");
52   file=File.new(fname+"txt", "w");
53     buffer+=lb;
54     file.write(buffer);
55     begin
56       if (m=/Test\ vectors\ \-\-\ set[\s]+([0-9]+)/.match(lb))
57         set=m[1].to_i;
58         print("\nSet "+m[1]+":");
59       end
60       if (m=/Set [0-9]*, vector#[\s]*([0-9]+):/.match(lb))
61         vector=m[1].to_i;
62         #print(" "+m[1]);
63         if(vector!=0 && vector % $linewidth==0)
64           print("\n      ")
65         end
66         printf(" %4u", vector);
67       end
68       ctr=$extended_wait;
69       while((lb=$sp.gets())==nil && ctr>=0)do
70         ctr -= 1;
71       end
72       if(lb==nil)
73         file.close();
74         return false;
75       end
76       file.write(lb);
77     end while(!m=/End of test vectors/.match(lb));
78     puts("\n");
79   file.close();
80   return true
81 end
82
83
84 if ARGV.size < 5
85   STDERR.print <<EOF
86   Usage: ruby #{$0} port bps nbits stopb command [target_dir] [additional specifier]
87 EOF
88   exit(1)
89 end
90
91 command=ARGV[4]+"\r";
92 $dir=(ARGV.size>=6)?ARGV[5]:"";
93 param=(ARGV.size>=7)?ARGV[6]:"";
94
95 puts("\nPort: "+ARGV[0]+ "@"+ARGV[1]+" "+ARGV[2]+"N"+ARGV[3]+"\n");
96 $linewidth = 16
97 $sp = SerialPort.new(ARGV[0], ARGV[1].to_i, ARGV[2].to_i, ARGV[3].to_i, SerialPort::NONE);
98 $sp.read_timeout=1*60*1000; # 5 minutes
99 $extended_wait=100;
100 $sp.write(command);
101
102 if(readTestVector(param)==false)
103   puts("ERROR: test seems not to be implemented");
104   exit(3);
105 end
106
107 while(readTestVector(param))
108 end
109
110 exit(0);
111
112