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