summaryrefslogtreecommitdiffstats
path: root/jwcrypto/common.py
blob: 57697ca7427e13d633e67bfcf67e33f817c514b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Copyright (C) 2015 JWCrypto Project Contributors - see LICENSE file

from base64 import urlsafe_b64encode, urlsafe_b64decode


# Padding stripping versions as described in
# draft-ietf-jose-json-web-signature-41 appendix C


def base64url_encode(payload):
    return urlsafe_b64encode(payload).rstrip('=')


def base64url_decode(payload):
    l = len(payload) % 4
    if l == 2:
        payload += '=='
    elif l == 3:
        payload += '='
    elif l != 0:
        raise ValueError('Invalid base64 string')
    return urlsafe_b64decode(payload)


class InvalidJWAAlgorithm(Exception):
    def __init__(self, message=None):
        msg = 'Invalid JWS Algorithm name'
        if message:
            msg += ' (%s)' % message
        super(InvalidJWAAlgorithm, self).__init__(msg)