blob: 9362464ee7b1a987396ec4a13ec75e1dcd38e48a [file] [log] [blame]
Alex Gaynorf312a5c2013-08-10 15:23:38 -04001# Licensed under the Apache License, Version 2.0 (the "License");
2# you may not use this file except in compliance with the License.
3# You may obtain a copy of the License at
4#
5# http://www.apache.org/licenses/LICENSE-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS,
9# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
10# implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
Donald Stufft9e1a48b2013-08-09 00:32:30 -040014import os.path
15
16
17def load_nist_vectors(vector_data, op, fields):
18 section, count, data = None, None, {}
19
20 for line in vector_data:
21 line = line.strip()
22
23 # Blank lines are ignored
24 if not line:
25 continue
26
27 # Lines starting with # are comments
28 if line.startswith("#"):
29 continue
30
31 # Look for section headers
32 if line.startswith("[") and line.endswith("]"):
33 section = line[1:-1]
34 data[section] = {}
35 continue
36
37 # Build our data using a simple Key = Value format
38 name, value = line.split(" = ")
39
40 # COUNT is a special token that indicates a new block of data
41 if name.upper() == "COUNT":
42 count = value
43 data[section][count] = {}
44 # For all other tokens we simply want the name, value stored in
45 # the dictionary
46 else:
47 data[section][count][name.lower()] = value
48
49 # We want to test only for a particular operation
50 return [
Alex Gaynorf312a5c2013-08-10 15:23:38 -040051 tuple(vector[1][f].encode("ascii") for f in fields)
Donald Stufft9e1a48b2013-08-09 00:32:30 -040052 for vector in sorted(data[op].items(), key=lambda v: v[0])
53 ]
54
55
56def load_nist_vectors_from_file(filename, op, fields):
57 base = os.path.join(
58 os.path.dirname(__file__), "primitives", "vectors", "NIST",
59 )
60 with open(os.path.join(base, filename), "r") as vector_file:
61 return load_nist_vectors(vector_file, op, fields)