diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/keyagreement/KeyAgreementConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/keyagreement/KeyAgreementConstants.java index 807055d6e048118cc4482fd878eb0e33808e2680..0bf94a264636802d6a5840c4c97e5eb593ccb23d 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/keyagreement/KeyAgreementConstants.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/keyagreement/KeyAgreementConstants.java @@ -3,9 +3,9 @@ package org.briarproject.bramble.api.keyagreement; public interface KeyAgreementConstants { /** - * The current version of the BQP protocol. + * The current version of the BQP protocol. Version number 89 is reserved. */ - byte PROTOCOL_VERSION = 3; + byte PROTOCOL_VERSION = 4; /** * The length of the record header in bytes. diff --git a/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadEncoderImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadEncoderImpl.java index b6c3481eeda1e81f7f665b1d9720bbdb2879e71f..66304489886c61c06a24c6542b5a63df17434d34 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadEncoderImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadEncoderImpl.java @@ -29,10 +29,10 @@ class PayloadEncoderImpl implements PayloadEncoder { @Override public byte[] encode(Payload p) { ByteArrayOutputStream out = new ByteArrayOutputStream(); + out.write(PROTOCOL_VERSION); BdfWriter w = bdfWriterFactory.createWriter(out); try { w.writeListStart(); // Payload start - w.writeLong(PROTOCOL_VERSION); w.writeRaw(p.getCommitment()); for (TransportDescriptor d : p.getTransportDescriptors()) w.writeList(d.getDescriptor()); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadParserImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadParserImpl.java index 334a46f3156b78651c926d4bd0f8c67d207ec588..62dee9e83908bd92f6b1cccc6a7463bfc576e43a 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadParserImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/PayloadParserImpl.java @@ -40,22 +40,22 @@ class PayloadParserImpl implements PayloadParser { @Override public Payload parse(byte[] raw) throws IOException { ByteArrayInputStream in = new ByteArrayInputStream(raw); + // First byte: the protocol version + int protocolVersion = in.read(); + if (protocolVersion == -1) throw new FormatException(); + if (protocolVersion != PROTOCOL_VERSION) + throw new UnsupportedVersionException(); + // The rest of the payload is a BDF list with one or more elements BdfReader r = bdfReaderFactory.createReader(in); - // The payload is a BDF list with two or more elements BdfList payload = r.readList(); - if (payload.size() < 2) throw new FormatException(); + if (payload.isEmpty()) throw new FormatException(); if (!r.eof()) throw new FormatException(); - // First element: the protocol version - long protocolVersion = payload.getLong(0); - if (protocolVersion != PROTOCOL_VERSION) { - throw new UnsupportedVersionException(); - } - // Second element: the public key commitment - byte[] commitment = payload.getRaw(1); + // First element: the public key commitment + byte[] commitment = payload.getRaw(0); if (commitment.length != COMMIT_LENGTH) throw new FormatException(); // Remaining elements: transport descriptors List<TransportDescriptor> recognised = new ArrayList<>(); - for (int i = 2; i < payload.size(); i++) { + for (int i = 1; i < payload.size(); i++) { BdfList descriptor = payload.getList(i); long transportId = descriptor.getLong(0); if (transportId == TRANSPORT_ID_BLUETOOTH) {