(src, alphabet)
| 62 | |
| 63 | |
| 64 | def 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 |
no outgoing calls
no test coverage detected