29 int length = ByteUtils.twoBytesAsInt(raw[0], raw[1]);
31 if (length != (raw.length - 2)) {
32 log.error(
"Invalid token binding message. First two bytes length value: " + length +
"does not match actual bytes length: " + raw.length);
33 throw new TokenBindingParseException(
"Invalid token binding message. First two bytes length value does not match actual bytes length.");
36 List<TokenBinding> result =
new ArrayList<TokenBinding>();
38 TokenBindingStream stream =
new TokenBindingStream(raw, 2, raw.length);
39 Preconditions.checkState(stream.getPos() == 2);
41 while (stream.available() > 0) {
42 int tokenTypeAsByteValue = stream.read();
44 TokenBindingType tokenBindingType = TokenBindingType.valueOf(tokenTypeAsByteValue);
45 if (tokenBindingType == null) {
46 throw new TokenBindingParseException(
"Failed to identify TokenBindingType, byteValue: " + tokenTypeAsByteValue);
49 int fromID = stream.getPos();
50 int keyParametersAsByteValue = stream.read();
52 TokenBindingKeyParameters tokenBindingKeyParameters = TokenBindingKeyParameters.valueOf(keyParametersAsByteValue);
53 if (tokenBindingKeyParameters == null) {
54 throw new TokenBindingParseException(
"Failed to identify TokenBindingKeyParameters, byteValue: " + keyParametersAsByteValue);
58 byte[] bindingIdRaw = Arrays.copyOfRange(raw, fromID, stream.getPos());
63 TokenBindingID
id =
new TokenBindingID(tokenBindingKeyParameters, publicKey, bindingIdRaw);
65 result.add(
new TokenBinding(tokenBindingType,
id, signature,
new TokenBindingExtension(TokenBindingExtensionType.UNKNOWN, extensions)));
68 }
catch (Exception e) {
69 throw new TokenBindingParseException(
"Failed to parse TokenBindingMessage, raw: " + Base64Util.base64urlencode(raw), e);
static final Logger log
Definition: TokenBindingMessageParser.java:18
static byte [] readBytesWithSuffixLength(ByteArrayInputStream stream)
Definition: TokenBindingMessageParser.java:73