def add_padding(b): # add padding chars m = len(b) % 4 if m == 1: # NOTE: for some reason b64decode raises *TypeError* if the # padding is incorrect. raise BadSyntax(b, "incorrect padding") elif m == 2: b += b"==" elif m == 3: b += b"=" return b
def b64d(b): """Decode some base64-encoded bytes. Raises BadSyntax if the string contains invalid characters or padding. :param b: bytes """ cb = b.rstrip(b"=") # shouldn't but there you are # Python's base64 functions ignore invalid characters, so we need to # check for them explicitly. if not _b64_re.match(cb): raise BadSyntax(cb, "base64-encoded data contains illegal characters") if cb == b: b = add_padding(b) return base64.urlsafe_b64decode(b)
def split_token(token): if not token.count(b"."): raise BadSyntax(token, "expected token to contain at least one dot") return tuple(token.split(b"."))