private static byte[] serializeParams(HeaderParameters params) { StringBuilder builder = new StringBuilder("{"); appendField(builder, "alg", params.alg); if (params.typ != null) { appendField(builder, "typ", params.typ); } for (Entry<String, String> entry : params.map.entrySet()) { appendField(builder, entry.getKey(), entry.getValue()); } builder.append("}"); return utf8Encode(builder.toString()); }
private static Map<String, String> parseMap(String json) { if (json != null) { json = json.trim(); if (json.startsWith("{")) { return parseMapInternal(json); } else if (json.equals("")) { return new LinkedHashMap<String, String>(); } } throw new IllegalArgumentException("Invalid JSON (null)"); }
private static Map<String, String> parseMapInternal(String json) { Map<String, String> map = new LinkedHashMap<String, String>(); json = trimLeadingCharacter(trimTrailingCharacter(json, '}'), '{'); for (String pair : json.split(",")) { String[] values = pair.split(":"); String key = strip(values[0], '"'); String value = null; if (values.length > 0) { value = strip(values[1], '"'); } if (map.containsKey(key)) { throw new IllegalArgumentException("Duplicate '" + key + "' field"); } map.put(key, value); } return map; }
private static String strip(String string, char c) { return trimLeadingCharacter(trimTrailingCharacter(string.trim(), c), c); }
JwtHeader header = JwtHeaderHelper.create(buffer.toString());
static HeaderParameters parseParams(byte[] header) { Map<String, String> map = parseMap(utf8Decode(header)); return new HeaderParameters(map); }
static JwtHeader create(String header) { byte[] bytes = b64UrlDecode(header); return new JwtHeader(bytes, parseParams(bytes)); }
static JwtHeader create(Signer signer, Map<String, String> params) { Map<String, String> map = new LinkedHashMap<String, String>(params); map.put("alg", sigAlg(signer.algorithm())); HeaderParameters p = new HeaderParameters(map); return new JwtHeader(serializeParams(p), p); }
public static Jwt encode(CharSequence content, Signer signer, Map<String, String> headers) { JwtHeader header = JwtHeaderHelper.create(signer, headers); byte[] claims = utf8Encode(content); byte[] crypto = signer .sign(concat(b64UrlEncode(header.bytes()), PERIOD, b64UrlEncode(claims))); return new JwtImpl(header, claims, crypto); } }