diff options
Diffstat (limited to 'python/clippy/uidhash.py')
| -rw-r--r-- | python/clippy/uidhash.py | 42 |
1 files changed, 16 insertions, 26 deletions
diff --git a/python/clippy/uidhash.py b/python/clippy/uidhash.py index bf994d389e..73570b20d9 100644 --- a/python/clippy/uidhash.py +++ b/python/clippy/uidhash.py @@ -1,31 +1,19 @@ +# SPDX-License-Identifier: GPL-2.0-or-later # xref unique ID hash calculation # # Copyright (C) 2020 David Lamparter for NetDEF, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; either version 2 of the License, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -# more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; see the file COPYING; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import struct from hashlib import sha256 -def bititer(data, bits, startbit = True): - ''' + +def bititer(data, bits, startbit=True): + """ just iterate the individual bits out from a bytes object if startbit is True, an '1' bit is inserted at the very beginning goes <bits> at a time, starts at LSB. - ''' + """ bitavail, v = 0, 0 if startbit and len(data) > 0: v = data.pop(0) @@ -41,31 +29,33 @@ def bititer(data, bits, startbit = True): bitavail -= bits v >>= bits + def base32c(data): - ''' + """ Crockford base32 with extra dashes - ''' + """ chs = "0123456789ABCDEFGHJKMNPQRSTVWXYZ" - o = '' + o = "" if type(data) == str: data = [ord(v) for v in data] else: data = list(data) for i, bits in enumerate(bititer(data, 5)): if i == 5: - o = o + '-' + o = o + "-" elif i == 10: break o = o + chs[bits] return o + def uidhash(filename, hashstr, hashu32a, hashu32b): - ''' + """ xref Unique ID hash used in FRRouting - ''' - filename = '/'.join(filename.rsplit('/')[-2:]) + """ + filename = "/".join(filename.rsplit("/")[-2:]) - hdata = filename.encode('UTF-8') + hashstr.encode('UTF-8') - hdata += struct.pack('>II', hashu32a, hashu32b) + hdata = filename.encode("UTF-8") + hashstr.encode("UTF-8") + hdata += struct.pack(">II", hashu32a, hashu32b) i = sha256(hdata).digest() return base32c(i) |
