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