#!/usr/bin/python3 import os import re HERE = os.path.dirname(os.path.abspath(__file__)) BLAKE2 = os.path.join(HERE, 'impl') PUBLIC_SEARCH = re.compile(r'\ int (blake2[bs]p?[a-z_]*)\(') def getfiles(): for name in os.listdir(BLAKE2): name = os.path.join(BLAKE2, name) if os.path.isfile(name): yield name def find_public(): public_funcs = set() for name in getfiles(): with open(name) as f: for line in f: # find public functions mo = PUBLIC_SEARCH.search(line) if mo: public_funcs.add(mo.group(1)) for f in sorted(public_funcs): print('#define {0:<18} PyBlake2_{0}'.format(f)) return public_funcs def main(): lines = [] with open(os.path.join(HERE, 'blake2b_impl.c')) as f: for line in f: line = line.replace('blake2b', 'blake2s') line = line.replace('BLAKE2b', 'BLAKE2s') line = line.replace('BLAKE2B', 'BLAKE2S') lines.append(line) with open(os.path.join(HERE, 'blake2s_impl.c'), 'w') as f: f.write(''.join(lines)) # find_public() if __name__ == '__main__': main()