• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/python3
2
3import os
4import re
5
6HERE = os.path.dirname(os.path.abspath(__file__))
7BLAKE2 = os.path.join(HERE, 'impl')
8
9PUBLIC_SEARCH = re.compile(r'\ int (blake2[bs]p?[a-z_]*)\(')
10
11
12def getfiles():
13    for name in os.listdir(BLAKE2):
14        name = os.path.join(BLAKE2, name)
15        if os.path.isfile(name):
16            yield name
17
18
19def find_public():
20    public_funcs = set()
21    for name in getfiles():
22        with open(name) as f:
23            for line in f:
24                # find public functions
25                mo = PUBLIC_SEARCH.search(line)
26                if mo:
27                    public_funcs.add(mo.group(1))
28
29    for f in sorted(public_funcs):
30        print('#define {0:<18} PyBlake2_{0}'.format(f))
31
32    return public_funcs
33
34
35def main():
36    lines = []
37    with open(os.path.join(HERE, 'blake2b_impl.c')) as f:
38        for line in f:
39            line = line.replace('blake2b', 'blake2s')
40            line = line.replace('BLAKE2b', 'BLAKE2s')
41            line = line.replace('BLAKE2B', 'BLAKE2S')
42            lines.append(line)
43    with open(os.path.join(HERE, 'blake2s_impl.c'), 'w') as f:
44        f.write(''.join(lines))
45    # find_public()
46
47
48if __name__ == '__main__':
49    main()
50