From 0b781cf272e376a403bcfced8f9e5ba1943352a4 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Thu, 22 Feb 2018 11:59:06 +0000 Subject: [PATCH] Use first byte of QR code payload for format version. --- .../keyagreement/KeyAgreementConstants.java | 4 ++-- .../keyagreement/PayloadEncoderImpl.java | 2 +- .../keyagreement/PayloadParserImpl.java | 20 +++++++++---------- 3 files changed, 13 insertions(+), 13 deletions(-) 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 807055d6e0..0bf94a2646 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 b6c3481eed..6630448988 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 334a46f315..62dee9e839 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) { -- GitLab