| Server IP : 198.244.165.102 / Your IP : 216.73.216.218 [ Web Server : nginx/1.24.0 System : Linux modovh-ub-01 6.8.0-138-generic #138-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 31 22:41:49 UTC 2026 x86_64 User : colleary ( 1011) PHP Version : 8.3.23 Disable Function : NONE Domains : 2 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /lib/python3/dist-packages/josepy/ |
Upload File : |
"""`JOSE Base64`_ is defined as:
- URL-safe Base64
- padding stripped
.. _`JOSE Base64`:
https://tools.ietf.org/html/draft-ietf-jose-json-web-signature-37#appendix-C
.. Do NOT try to call this module "base64", as it will "shadow" the
standard library.
"""
import base64
from typing import Union
def b64encode(data: bytes) -> bytes:
"""JOSE Base64 encode.
:param data: Data to be encoded.
:type data: bytes
:returns: JOSE Base64 string.
:rtype: bytes
:raises TypeError: if ``data`` is of incorrect type
"""
if not isinstance(data, bytes):
raise TypeError("argument should be bytes")
return base64.urlsafe_b64encode(data).rstrip(b"=")
def b64decode(data: Union[bytes, str]) -> bytes:
"""JOSE Base64 decode.
:param data: Base64 string to be decoded. If it's unicode, then
only ASCII characters are allowed.
:type data: bytes or unicode
:returns: Decoded data.
:rtype: bytes
:raises TypeError: if input is of incorrect type
:raises ValueError: if input is unicode with non-ASCII characters
"""
if isinstance(data, str):
try:
data = data.encode("ascii")
except UnicodeEncodeError:
raise ValueError("unicode argument should contain only ASCII characters")
elif not isinstance(data, bytes):
raise TypeError("argument should be a str or unicode")
return base64.urlsafe_b64decode(data + b"=" * (4 - (len(data) % 4)))