def generate_token_from_bytes(header: bytes, payload: bytes) -> Text: """Generates tokens from bytes with valid MACs.""" unsigned_compact = (_jwt_format._base64_encode(header) + b'.' + _jwt_format._base64_encode(payload)) mac_value = MAC.compute_mac(unsigned_compact) return (unsigned_compact + b'.' + _jwt_format.encode_signature(mac_value)).decode('utf8')
def test_base64_encode_decode_header_fixed_data(self): # Example from https://tools.ietf.org/html/rfc7519#section-3.1 header = bytes([ 123, 34, 116, 121, 112, 34, 58, 34, 74, 87, 84, 34, 44, 13, 10, 32, 34, 97, 108, 103, 34, 58, 34, 72, 83, 50, 53, 54, 34, 125 ]) encoded_header = b'eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9' self.assertEqual(_jwt_format._base64_encode(header), encoded_header) self.assertEqual(_jwt_format._base64_decode(encoded_header), header)
def test_base64_encode_decode_payload_fixed_data(self): # Example from https://tools.ietf.org/html/rfc7519#section-3.1 payload = bytes([ 123, 34, 105, 115, 115, 34, 58, 34, 106, 111, 101, 34, 44, 13, 10, 32, 34, 101, 120, 112, 34, 58, 49, 51, 48, 48, 56, 49, 57, 51, 56, 48, 44, 13, 10, 32, 34, 104, 116, 116, 112, 58, 47, 47, 101, 120, 97, 109, 112, 108, 101, 46, 99, 111, 109, 47, 105, 115, 95, 114, 111, 111, 116, 34, 58, 116, 114, 117, 101, 125 ]) encoded_payload = (b'eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0' b'dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ') self.assertEqual(_jwt_format._base64_encode(payload), encoded_payload) self.assertEqual(_jwt_format._base64_decode(encoded_payload), payload)
def testdecode_header_without_quotes(self): encoded_header = _jwt_format._base64_encode(b'{alg:"RS256"}') with self.assertRaises(_jwt_error.JwtInvalidError): _jwt_format.decode_header(encoded_header)
def testdecode_header(self): encoded_header = _jwt_format._base64_encode(b'{"alg":"RS256"}') json_header = _jwt_format.decode_header(encoded_header) self.assertEqual(json_header['alg'], 'RS256')
def test_split_signed_compact_with_invalid_utf8_in_header(self): encoded_header = _jwt_format._base64_encode( b'{"alg":"RS256", "bad":"\xc2"}') token = (encoded_header + b'.e30.YWJj').decode('utf8') with self.assertRaises(_jwt_error.JwtInvalidError): _jwt_format.split_signed_compact(token)
def test_decode_header_with_invalid_utf8(self): encoded_header = _jwt_format._base64_encode( b'{"alg":"RS256", "bad":"\xc2"}') with self.assertRaises(_jwt_error.JwtInvalidError): _jwt_format.decode_header(encoded_header)