summaryrefslogtreecommitdiff
path: root/python/clippy/uidhash.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/clippy/uidhash.py')
-rw-r--r--python/clippy/uidhash.py42
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)