17db96d56Sopenharmony_ci#!/usr/bin/python3
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ciimport os
47db96d56Sopenharmony_ciimport re
57db96d56Sopenharmony_ci
67db96d56Sopenharmony_ciHERE = os.path.dirname(os.path.abspath(__file__))
77db96d56Sopenharmony_ciBLAKE2 = os.path.join(HERE, 'impl')
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciPUBLIC_SEARCH = re.compile(r'\ int (blake2[bs]p?[a-z_]*)\(')
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_cidef getfiles():
137db96d56Sopenharmony_ci    for name in os.listdir(BLAKE2):
147db96d56Sopenharmony_ci        name = os.path.join(BLAKE2, name)
157db96d56Sopenharmony_ci        if os.path.isfile(name):
167db96d56Sopenharmony_ci            yield name
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_cidef find_public():
207db96d56Sopenharmony_ci    public_funcs = set()
217db96d56Sopenharmony_ci    for name in getfiles():
227db96d56Sopenharmony_ci        with open(name) as f:
237db96d56Sopenharmony_ci            for line in f:
247db96d56Sopenharmony_ci                # find public functions
257db96d56Sopenharmony_ci                mo = PUBLIC_SEARCH.search(line)
267db96d56Sopenharmony_ci                if mo:
277db96d56Sopenharmony_ci                    public_funcs.add(mo.group(1))
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci    for f in sorted(public_funcs):
307db96d56Sopenharmony_ci        print('#define {0:<18} PyBlake2_{0}'.format(f))
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ci    return public_funcs
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_cidef main():
367db96d56Sopenharmony_ci    lines = []
377db96d56Sopenharmony_ci    with open(os.path.join(HERE, 'blake2b_impl.c')) as f:
387db96d56Sopenharmony_ci        for line in f:
397db96d56Sopenharmony_ci            line = line.replace('blake2b', 'blake2s')
407db96d56Sopenharmony_ci            line = line.replace('BLAKE2b', 'BLAKE2s')
417db96d56Sopenharmony_ci            line = line.replace('BLAKE2B', 'BLAKE2S')
427db96d56Sopenharmony_ci            lines.append(line)
437db96d56Sopenharmony_ci    with open(os.path.join(HERE, 'blake2s_impl.c'), 'w') as f:
447db96d56Sopenharmony_ci        f.write(''.join(lines))
457db96d56Sopenharmony_ci    # find_public()
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ciif __name__ == '__main__':
497db96d56Sopenharmony_ci    main()
50