MCPcopy Create free account
hub / github.com/Keeper-Security/Commander / decode

Function decode

keepercommander/base32hex.py:64–119  ·  view source on GitHub ↗
(src, alphabet)

Source from the content-addressed store, hash-verified

62
63
64def decode(src, alphabet):
65 global _b32rev
66 if alphabet not in _b32rev:
67 _b32rev[alphabet] = {chr(v): k for k, v in enumerate(alphabet)}
68 b32rev = _b32rev[alphabet]
69 src = src.upper()
70
71 end = False
72 result = []
73 while len(src) > 0 and not end:
74 dst = [0] * 5
75 dbuf = [0] * 8
76
77 src_len = 8
78
79 for i in range(0, 8):
80 if i >= len(src):
81 src_len = i
82 end = True
83 break
84 char = src[i]
85 if char == padChar:
86 end = True
87 src_len = i
88 break
89 else:
90 dbuf[i] = b32rev[char]
91
92 if src_len >= 8:
93 dst[4] = (dbuf[6] << 5) | (dbuf[7])
94 if src_len >= 7:
95 dst[3] = (dbuf[4] << 7) | (dbuf[5] << 2) | (dbuf[6] >> 3)
96 if src_len >= 5:
97 dst[2] = (dbuf[3] << 4) | (dbuf[4] >> 1)
98 if src_len >= 4:
99 dst[1] = (dbuf[1] << 6) | (dbuf[2] << 1) | (dbuf[3] >> 4)
100 if src_len >= 2:
101 dst[0] = (dbuf[0] << 3) | (dbuf[1] >> 2)
102
103 dst = list(map(lambda x: x & 0xff, dst))
104
105 if src_len == 2:
106 dst = dst[:1]
107 elif src_len == 4:
108 dst = dst[:2]
109 elif src_len == 5:
110 dst = dst[:3]
111 elif src_len == 7:
112 dst = dst[:4]
113 elif src_len == 8:
114 dst = dst[:5]
115
116 result.extend(dst)
117 src = src[8:]
118
119 return result
120
121

Callers 2

b32decodeFunction · 0.85
b32hexdecodeFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected