diff --git a/trex-paxe/src/main/java/com/github/trex_paxos/paxe/NodeClientSecret.java b/trex-paxe/src/main/java/com/github/trex_paxos/paxe/NodeClientSecret.java index b2547d5..256c525 100644 --- a/trex-paxe/src/main/java/com/github/trex_paxos/paxe/NodeClientSecret.java +++ b/trex-paxe/src/main/java/com/github/trex_paxos/paxe/NodeClientSecret.java @@ -6,12 +6,12 @@ import com.github.trex_paxos.network.NodeId; public record NodeClientSecret( - String srpIdenity, + String srpIdentity, String password, byte[] salt // 16 bytes required ) { public NodeClientSecret { - Objects.requireNonNull(srpIdenity, "srpIdenity required"); + Objects.requireNonNull(srpIdentity, "srpIdentity required"); Objects.requireNonNull(password, "password required"); Objects.requireNonNull(salt, "salt required"); if(salt.length != 16) { @@ -21,4 +21,4 @@ public record NodeClientSecret( public NodeClientSecret(ClusterId clusterId, NodeId id, String password, byte[] salt) { this(id.id() + "@" + clusterId.id(), password, salt); } -} \ No newline at end of file +} diff --git a/trex-paxe/src/main/java/com/github/trex_paxos/paxe/PaxeMessage.java b/trex-paxe/src/main/java/com/github/trex_paxos/paxe/PaxeMessage.java index d6d0c3b..f5140c1 100644 --- a/trex-paxe/src/main/java/com/github/trex_paxos/paxe/PaxeMessage.java +++ b/trex-paxe/src/main/java/com/github/trex_paxos/paxe/PaxeMessage.java @@ -1,46 +1,47 @@ package com.github.trex_paxos.paxe; -import java.util.Arrays; -import java.util.Objects; - import com.github.trex_paxos.network.Channel; import com.github.trex_paxos.network.NodeId; +import java.util.Arrays; +import java.util.Objects; + public record PaxeMessage( NodeId from, NodeId to, Channel channel, byte[] payload ) { - public PaxeMessage { - Objects.requireNonNull(from, "from cannot be null"); - Objects.requireNonNull(to, "to cannot be null"); - Objects.requireNonNull(channel, "channel cannot be null"); - Objects.requireNonNull(payload, "payload cannot be null"); - } + public PaxeMessage { + Objects.requireNonNull(from, "from cannot be null"); + Objects.requireNonNull(to, "to cannot be null"); + Objects.requireNonNull(channel, "channel cannot be null"); + Objects.requireNonNull(payload, "payload cannot be null"); + } + + public byte[] serialize() { + return payload; + } - public byte[] serialize() { - return payload; - } - - public static PaxeMessage deserialize(NodeId from, NodeId to, Channel channel, byte[] payload) { - return new PaxeMessage(from, to, channel, payload); - } + public static PaxeMessage deserialize(NodeId from, NodeId to, Channel channel, byte[] payload) { + return new PaxeMessage(from, to, channel, payload); + } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof PaxeMessage that)) return false; - return from.equals(that.from) - && to.equals(that.to) - && channel.equals(that.channel) - && Arrays.equals(payload, that.payload); - } + @Override + public boolean equals(Object o) { + if (this == o) return true; + //noinspection DeconstructionCanBeUsed + if (!(o instanceof PaxeMessage that)) return false; + return from.equals(that.from) + && to.equals(that.to) + && channel.equals(that.channel) + && Arrays.equals(payload, that.payload); + } - @Override - public int hashCode() { - int result = Objects.hash(from, to, channel); - result = 31 * result + Arrays.hashCode(payload); - return result; - } -} \ No newline at end of file + @Override + public int hashCode() { + int result = Objects.hash(from, to, channel); + result = 31 * result + Arrays.hashCode(payload); + return result; + } +} diff --git a/trex-paxe/src/main/java/com/github/trex_paxos/paxe/PaxeNetwork.java b/trex-paxe/src/main/java/com/github/trex_paxos/paxe/PaxeNetwork.java index 3a9fb1d..389ba7f 100644 --- a/trex-paxe/src/main/java/com/github/trex_paxos/paxe/PaxeNetwork.java +++ b/trex-paxe/src/main/java/com/github/trex_paxos/paxe/PaxeNetwork.java @@ -21,6 +21,7 @@ public class PaxeNetwork implements TrexNetwork, AutoCloseable { // Buffer of one entry of any messages that would not be sent due to not yet // having a session key + // FIXME implement a retry mechanism private final Map pendingMessages = new ConcurrentHashMap<>(); /// Key manager for session key management which must have access to SRP verifiers. @@ -191,7 +192,7 @@ private void receiveLoop() { } if (paxePacket.channel().equals(Channel.KEY_EXCHANGE)) { - KeyMessage keyMsg = PickleHandshake.unpickle(paxePacket.payload()); + SessionKeyManager.KeyMessage keyMsg = PickleHandshake.unpickle(paxePacket.payload()); keyManager.handleMessage(keyMsg); } else { var queue = getOrCreateChannelQueue(paxePacket.channel()); @@ -241,12 +242,12 @@ public void encryptAndSend(PaxeMessage message) throws Exception { keyManager.initiateHandshake(message.to()) .ifPresent(keyMsg -> sendHandshake(message.to(), keyMsg)); } else { - final var pexePacket = PaxePacket.encrypt(message, localNode, key); - outboundQueue.add(pexePacket); + final var paxePacket = PaxePacket.encrypt(message, localNode, key); + outboundQueue.add(paxePacket); } } - void sendHandshake(NodeId to, KeyMessage msg) { + void sendHandshake(NodeId to, SessionKeyManager.KeyMessage msg) { Optional addressOpt = membership.get().addressFor(to); if (addressOpt.isEmpty()) { diff --git a/trex-paxe/src/main/java/com/github/trex_paxos/paxe/PaxeSecurityConfig.java b/trex-paxe/src/main/java/com/github/trex_paxos/paxe/PaxeSecurityConfig.java deleted file mode 100644 index 5991a8d..0000000 --- a/trex-paxe/src/main/java/com/github/trex_paxos/paxe/PaxeSecurityConfig.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.github.trex_paxos.paxe; - -import java.util.Objects; - -import com.github.trex_paxos.network.NodeId; - -public record PaxeSecurityConfig( - NodeClientSecret localSecret, - java.util.function.Supplier> verifierLookup -) { - public PaxeSecurityConfig { - Objects.requireNonNull(localSecret, "localSecret required"); - Objects.requireNonNull(verifierLookup, "verifierLookup required"); - } -} \ No newline at end of file diff --git a/trex-paxe/src/main/java/com/github/trex_paxos/paxe/SessionKeyManager.java b/trex-paxe/src/main/java/com/github/trex_paxos/paxe/SessionKeyManager.java index 01a8b24..904700d 100644 --- a/trex-paxe/src/main/java/com/github/trex_paxos/paxe/SessionKeyManager.java +++ b/trex-paxe/src/main/java/com/github/trex_paxos/paxe/SessionKeyManager.java @@ -1,5 +1,7 @@ package com.github.trex_paxos.paxe; +import com.github.trex_paxos.network.NodeId; + import java.nio.ByteBuffer; import java.util.Map; import java.util.Optional; @@ -7,210 +9,198 @@ import java.util.function.Supplier; import java.util.logging.Level; -import com.github.trex_paxos.network.NodeId; -import com.github.trex_paxos.paxe.SRPUtils.Constants; - -import static com.github.trex_paxos.paxe.SRPUtils.*; import static com.github.trex_paxos.paxe.PaxeLogger.LOGGER; +import static com.github.trex_paxos.paxe.SRPUtils.*; record SRPKeyPair(String publicKey, String privateKey) { } -sealed interface KeyMessage { - record KeyHandshakeRequest(NodeId from, byte[] publicKey) implements KeyMessage { - } - - record KeyHandshakeResponse(NodeId from, byte[] publicKey) implements KeyMessage { - } - - NodeId from(); - - byte[] publicKey(); -} - public class SessionKeyManager { - private final NodeId nodeId; - private final NodeClientSecret localSecret; - private final Supplier> verifierLookup; - private final Constants srpConstants; - - private final Map activeHandshakes = new ConcurrentHashMap<>(); - - /// This is package private as it is used by the network to send messages - final Map sessionKeys = new ConcurrentHashMap<>(); - - public SessionKeyManager( - NodeId nodeId, - Constants srpConstants, - NodeClientSecret localSecret, - Supplier> verifierLookup) { - this.nodeId = nodeId; - this.localSecret = localSecret; - this.verifierLookup = verifierLookup; - this.srpConstants = srpConstants; + private final NodeId nodeId; + private final NodeClientSecret localSecret; + private final Supplier> verifierLookup; + private final Constants srpConstants; + + private final Map activeHandshakes = new ConcurrentHashMap<>(); + + /// This is package private as it is used by the network to send messages + final Map sessionKeys = new ConcurrentHashMap<>(); + + public SessionKeyManager( + NodeId nodeId, + Constants srpConstants, + NodeClientSecret localSecret, + Supplier> verifierLookup) { + this.nodeId = nodeId; + this.localSecret = localSecret; + this.verifierLookup = verifierLookup; + this.srpConstants = srpConstants; + } + + private SRPKeyPair generateKeyPair(NodeId peerId) { + String privateKey = generatedPrivateKey(srpConstants.N()).toUpperCase(); + LOGGER.finest(() -> String.format("Generated private key: %s for peer: %d", + privateKey, peerId.id())); + String publicKey; + + if (nodeId.id() < peerId.id()) { + publicKey = A(integer(privateKey), + integer(srpConstants.g()), + integer(srpConstants.N())).toString(16).toUpperCase(); + LOGGER.finest(() -> "Generated client public key: " + publicKey); + } else { + final var v = verifierLookup.get().get(peerId).verifier(); + LOGGER.finest(() -> "Generating server public key B for peer " + peerId + " using v " + v); + publicKey = B(integer(privateKey), + integer(v), + integer(srpConstants.k()), + integer(srpConstants.g()), + integer(srpConstants.N())).toString(16).toUpperCase(); + + LOGGER.finest(() -> "Generated server public key: " + publicKey); } - private SRPKeyPair generateKeyPair(NodeId peerId) { - String privateKey = generatedPrivateKey(srpConstants.N()).toUpperCase(); - LOGGER.finest(() -> String.format("Generated private key: %s for peer: %d", - privateKey, peerId.id())); - String publicKey; - - if (nodeId.id() < peerId.id()) { - publicKey = A(integer(privateKey), - integer(srpConstants.g()), - integer(srpConstants.N())).toString(16).toUpperCase(); - LOGGER.finest(() -> "Generated client public key: " + publicKey); - } else { - final var v = verifierLookup.get().get(peerId).verifier(); - LOGGER.finest(() -> "Generating server public key B for peer " + peerId + " using v " + v); - publicKey = B(integer(privateKey), - integer(v), - integer(srpConstants.k()), - integer(srpConstants.g()), - integer(srpConstants.N())).toString(16).toUpperCase(); - - LOGGER.finest(() -> "Generated server public key: " + publicKey); - } - - return new SRPKeyPair(publicKey, privateKey); + return new SRPKeyPair(publicKey, privateKey); + } + + public Optional initiateHandshake(NodeId peerId) { + if (!verifierLookup.get().containsKey(peerId)) { + LOGGER.warning("No verifier for peer: " + peerId); + return Optional.empty(); } - public Optional initiateHandshake(NodeId peerId) { - if (!verifierLookup.get().containsKey(peerId)) { - LOGGER.warning("No verifier for peer: " + peerId); - return Optional.empty(); - } + // only if we have never tried to handshake with this peer will we create a new + // key + activeHandshakes.computeIfAbsent(peerId, this::generateKeyPair); - // only if we have never tried to handshake with this peer will we create a new - // key - activeHandshakes.computeIfAbsent(peerId, (key) -> generateKeyPair(key)); + final var keyPair = activeHandshakes.get(peerId); - final var keyPair = activeHandshakes.get(peerId); + LOGGER.finest(() -> nodeId + " initiating handshake with peer: " + peerId + " using public key: " + + keyPair.publicKey()); - LOGGER.finest(() -> nodeId + " initiating handshake with peer: " + peerId + " using public key: " - + keyPair.publicKey()); + return Optional.of(new KeyMessage.KeyHandshakeRequest( + nodeId, + fromHex(keyPair.publicKey()))); + } - return Optional.of(new KeyMessage.KeyHandshakeRequest( - nodeId, - fromHex(keyPair.publicKey()))); + public void handleMessage(KeyMessage msg) { + try { + switch (msg) { + case KeyMessage.KeyHandshakeRequest req -> handleRequest(req); + case KeyMessage.KeyHandshakeResponse resp -> handleResponse(resp); + } + } catch (Exception e) { + LOGGER.log(Level.SEVERE, "Key exchange failed", e); } + } - public Optional handleMessage(KeyMessage msg) { - try { - return switch (msg) { - case KeyMessage.KeyHandshakeRequest req -> handleRequest(req); - case KeyMessage.KeyHandshakeResponse resp -> handleResponse(resp); - }; - } catch (Exception e) { - LOGGER.log(Level.SEVERE, "Key exchange failed", e); - } - return Optional.empty(); - } + private void handleRequest(KeyMessage.KeyHandshakeRequest msg) { + NodeId peerId = new NodeId(msg.from().id()); - private Optional handleRequest(KeyMessage.KeyHandshakeRequest msg) { - NodeId peerId = new NodeId(msg.from().id()); + // only if we have never tried to handshake with this peer will we create a new + // key + activeHandshakes.computeIfAbsent(peerId, this::generateKeyPair); + SRPKeyPair keyPair = activeHandshakes.get(peerId); - // only if we have never tried to handshake with this peer will we create a new - // key - activeHandshakes.computeIfAbsent(peerId, (key) -> generateKeyPair(key)); - SRPKeyPair keyPair = activeHandshakes.get(peerId); + byte[] sessionKey = computeSessionKey(peerId, toHex(msg.publicKey()), keyPair); + sessionKeys.put(peerId, sessionKey); - byte[] sessionKey = computeSessionKey(peerId, toHex(msg.publicKey()), keyPair); - sessionKeys.put(peerId, sessionKey); + new KeyMessage.KeyHandshakeResponse(nodeId, fromHex(keyPair.publicKey())); + } - return Optional.of( - new KeyMessage.KeyHandshakeResponse(nodeId, fromHex(keyPair.publicKey()))); + private void handleResponse(KeyMessage.KeyHandshakeResponse msg) { + NodeId peerId = msg.from(); + SRPKeyPair keyPair = activeHandshakes.get(peerId); + if (keyPair != null) { + byte[] sessionKey = computeSessionKey(peerId, toHex(msg.publicKey()), keyPair); + sessionKeys.put(peerId, sessionKey); + activeHandshakes.remove(peerId); } - - private Optional handleResponse(KeyMessage.KeyHandshakeResponse msg) { - NodeId peerId = msg.from(); - SRPKeyPair keyPair = activeHandshakes.get(peerId); - if (keyPair != null) { - byte[] sessionKey = computeSessionKey(peerId, toHex(msg.publicKey()), keyPair); - sessionKeys.put(peerId, sessionKey); - activeHandshakes.remove(peerId); - } - return Optional.empty(); + } + + private byte[] computeSessionKey(NodeId peerId, String peerPublicKey, SRPKeyPair localKeys) { + LOGGER.finest(() -> "\nKey computation parameters:\n" + + "N: " + srpConstants.N() + "\n" + + "g: " + srpConstants.g() + "\n" + + "k: " + srpConstants.k() + "\n" + + "Local role: " + (nodeId.id() < peerId.id() ? "client" : "server") + "\n" + + "Local public key: " + localKeys.publicKey() + "\n" + + "Peer public key: " + peerPublicKey + "\n"); + + if (nodeId.id() < peerId.id()) { + final var I = localSecret.srpIdentity(); + final var a = localKeys.privateKey(); + final var A = localKeys.publicKey(); + //noinspection UnnecessaryLocalVariable + final var B = peerPublicKey; + final var s = toHex(localSecret.salt()); + final var P = localSecret.password(); + var key = clientS(srpConstants, A, B, s, I, a, P); + LOGGER.finer(() -> "Client premaster fingerprint: " + key.chars().asLongStream().sum()); + return hashedSecret(srpConstants.N(), key); + } else { + //noinspection UnnecessaryLocalVariable + final var A = peerPublicKey; + final var b = localKeys.privateKey(); + final var B = localKeys.publicKey(); + final var v = verifierLookup.get().get(peerId).verifier(); + var key = serverS(srpConstants, v, A, B, b); + LOGGER.finer(() -> "Server premaster fingerprint: " + key.chars().asLongStream().sum()); + return hashedSecret(srpConstants.N(), key); } + } - private byte[] computeSessionKey(NodeId peerId, String peerPublicKey, SRPKeyPair localKeys) { - LOGGER.finest(() -> { - var sb = new StringBuilder(); - sb.append("\nKey computation parameters:\n"); - sb.append("N: ").append(srpConstants.N()).append("\n"); - sb.append("g: ").append(srpConstants.g()).append("\n"); - sb.append("k: ").append(srpConstants.k()).append("\n"); - sb.append("Local role: ").append(nodeId.id() < peerId.id() ? "client" : "server").append("\n"); - sb.append("Local public key: ").append(localKeys.publicKey()).append("\n"); - sb.append("Peer public key: ").append(peerPublicKey).append("\n"); - return sb.toString(); - }); - - if (nodeId.id() < peerId.id()) { - final var I = localSecret.srpIdenity(); - final var a = localKeys.privateKey(); - final var A = localKeys.publicKey(); - final var B = peerPublicKey; - final var s = toHex(localSecret.salt()); - final var P = localSecret.password(); - var key = clientS(srpConstants, A, B, s, I, a, P); - LOGGER.finer(() -> "Client premaster fingerprint: " + key.chars().asLongStream().sum()); - return hashedSecret(srpConstants.N(), key); - } else { - final var A = peerPublicKey; - final var b = localKeys.privateKey(); - final var B = localKeys.publicKey(); - final var v = verifierLookup.get().get(peerId).verifier(); - var key = serverS(srpConstants, v, A, B, b); - LOGGER.finer(() -> "Server premaster fingerprint: " + key.chars().asLongStream().sum()); - return hashedSecret(srpConstants.N(), key); - } + sealed public interface KeyMessage { + record KeyHandshakeRequest(NodeId from, byte[] publicKey) implements KeyMessage { } - public Optional getSessionKey(NodeId peerId) { - return Optional.ofNullable(sessionKeys.get(peerId)); + record KeyHandshakeResponse(NodeId from, byte[] publicKey) implements KeyMessage { } + + NodeId from(); + + byte[] publicKey(); + } } // Package-private serialization class inside SessionKeyManager.java class PickleHandshake { - static byte[] pickle(KeyMessage msg) { - ByteBuffer buffer = ByteBuffer.allocate(calculateSize(msg)); - buffer.put(toByte(msg)); - buffer.putShort(msg.from().id()); - buffer.putInt(msg.publicKey().length); - buffer.put(msg.publicKey()); - return buffer.array(); - } - - static KeyMessage unpickle(byte[] bytes) { - ByteBuffer buffer = ByteBuffer.wrap(bytes); - byte type = buffer.get(); - NodeId from = new NodeId(buffer.getShort()); - int keyLength = buffer.getInt(); - byte[] publicKey = new byte[keyLength]; - buffer.get(publicKey); - - return switch (type) { - case 1 -> new KeyMessage.KeyHandshakeRequest(from, publicKey); - case 2 -> new KeyMessage.KeyHandshakeResponse(from, publicKey); - default -> throw new IllegalArgumentException("Unknown type: " + type); - }; - } - - private static int calculateSize(KeyMessage msg) { - return 1 + // type - 2 + // from id - 4 + // key length - msg.publicKey().length; - } - - private static byte toByte(KeyMessage msg) { - return switch (msg) { - case KeyMessage.KeyHandshakeRequest _ -> 1; - case KeyMessage.KeyHandshakeResponse _ -> 2; - }; - } + static byte[] pickle(SessionKeyManager.KeyMessage msg) { + ByteBuffer buffer = ByteBuffer.allocate(calculateSize(msg)); + buffer.put(toByte(msg)); + buffer.putShort(msg.from().id()); + buffer.putInt(msg.publicKey().length); + buffer.put(msg.publicKey()); + return buffer.array(); + } + + static SessionKeyManager.KeyMessage unpickle(byte[] bytes) { + ByteBuffer buffer = ByteBuffer.wrap(bytes); + byte type = buffer.get(); + NodeId from = new NodeId(buffer.getShort()); + int keyLength = buffer.getInt(); + byte[] publicKey = new byte[keyLength]; + buffer.get(publicKey); + + return switch (type) { + case 1 -> new SessionKeyManager.KeyMessage.KeyHandshakeRequest(from, publicKey); + case 2 -> new SessionKeyManager.KeyMessage.KeyHandshakeResponse(from, publicKey); + default -> throw new IllegalArgumentException("Unknown type: " + type); + }; + } + + private static int calculateSize(SessionKeyManager.KeyMessage msg) { + return 1 + // type + 2 + // from id + 4 + // key length + msg.publicKey().length; + } + + private static byte toByte(SessionKeyManager.KeyMessage msg) { + return switch (msg) { + case SessionKeyManager.KeyMessage.KeyHandshakeRequest _ -> 1; + case SessionKeyManager.KeyMessage.KeyHandshakeResponse _ -> 2; + }; + } } diff --git a/trex-paxe/src/test/java/com/github/trex_paxos/paxe/NetworkTestHarness.java b/trex-paxe/src/test/java/com/github/trex_paxos/paxe/NetworkTestHarness.java index ed3890f..7037ba5 100644 --- a/trex-paxe/src/test/java/com/github/trex_paxos/paxe/NetworkTestHarness.java +++ b/trex-paxe/src/test/java/com/github/trex_paxos/paxe/NetworkTestHarness.java @@ -56,12 +56,12 @@ public PaxeNetwork createNetwork(short nodeId) throws Exception { final var verifier = SRPUtils.generateVerifier( srpConstants, - nodeSecret.srpIdenity(), + nodeSecret.srpIdentity(), nodeSecret.password(), nodeSecret.salt() ); - final var nodeVerifier = new NodeVerifier(nodeSecret.srpIdenity(), verifier.toString(16)); + final var nodeVerifier = new NodeVerifier(nodeSecret.srpIdentity(), verifier.toString(16)); verifierMap.put(id, nodeVerifier); Supplier> verifierLookup = () -> verifierMap; diff --git a/trex-paxe/src/test/java/com/github/trex_paxos/paxe/PaxeNetworkTest.java b/trex-paxe/src/test/java/com/github/trex_paxos/paxe/PaxeNetworkTest.java index 4e01419..cac6b7d 100644 --- a/trex-paxe/src/test/java/com/github/trex_paxos/paxe/PaxeNetworkTest.java +++ b/trex-paxe/src/test/java/com/github/trex_paxos/paxe/PaxeNetworkTest.java @@ -96,12 +96,12 @@ public void setup() throws Exception { "blahblah", SRPUtils.generateSalt()); - final var v1 = SRPUtils.generateVerifier(constants, nodeClientSecret1.srpIdenity(), + final var v1 = SRPUtils.generateVerifier(constants, nodeClientSecret1.srpIdentity(), nodeClientSecret1.password(), nodeClientSecret1.salt()); - final var nv1 = new NodeVerifier(nodeClientSecret1.srpIdenity(), v1.toString(16)); + final var nv1 = new NodeVerifier(nodeClientSecret1.srpIdentity(), v1.toString(16)); - LOGGER.info("Verifier v1: " + nv1 + " for node " + nodeClientSecret1.srpIdenity() + " with password " + LOGGER.info("Verifier v1: " + nv1 + " for node " + nodeClientSecret1.srpIdentity() + " with password " + nodeClientSecret1.password()); NodeClientSecret nodeClientSecret2 = new NodeClientSecret( @@ -110,12 +110,12 @@ public void setup() throws Exception { "moreblahblah", SRPUtils.generateSalt()); - final var v2 = SRPUtils.generateVerifier(constants, nodeClientSecret2.srpIdenity(), + final var v2 = SRPUtils.generateVerifier(constants, nodeClientSecret2.srpIdentity(), nodeClientSecret2.password(), nodeClientSecret2.salt()); - final var nv2 = new NodeVerifier(nodeClientSecret2.srpIdenity(), v2.toString(16)); + final var nv2 = new NodeVerifier(nodeClientSecret2.srpIdentity(), v2.toString(16)); - LOGGER.info("Verifier v2: " + nv2 + " for node " + nodeClientSecret2.srpIdenity() + " with password " + LOGGER.info("Verifier v2: " + nv2 + " for node " + nodeClientSecret2.srpIdentity() + " with password " + nodeClientSecret2.password()); Supplier> verifierLookup = () -> Map.of( @@ -268,12 +268,12 @@ private PaxeNetwork setupNetwork(int nodeId) throws Exception { // Generate verifier final var v = SRPUtils.generateVerifier( constants, // Using the existing test constants - nodeSecret.srpIdenity(), + nodeSecret.srpIdentity(), nodeSecret.password(), nodeSecret.salt() ); - final var nv = new NodeVerifier(nodeSecret.srpIdenity(), v.toString(16)); + final var nv = new NodeVerifier(nodeSecret.srpIdentity(), v.toString(16)); // Setup verifier lookup Supplier> verifierLookup = diff --git a/trex-paxe/src/test/java/com/github/trex_paxos/paxe/PickleHandshakeTest.java b/trex-paxe/src/test/java/com/github/trex_paxos/paxe/PickleHandshakeTest.java index d2cfa96..2261fef 100644 --- a/trex-paxe/src/test/java/com/github/trex_paxos/paxe/PickleHandshakeTest.java +++ b/trex-paxe/src/test/java/com/github/trex_paxos/paxe/PickleHandshakeTest.java @@ -15,13 +15,13 @@ class PickleHandshakeTest { void shouldPickleAndUnpickleRequest() { NodeId from = new NodeId((short) 1); byte[] publicKey = new byte[] { 1, 2, 3, 4 }; - var request = new KeyMessage.KeyHandshakeRequest(from, publicKey); + var request = new SessionKeyManager.KeyMessage.KeyHandshakeRequest(from, publicKey); byte[] pickled = PickleHandshake.pickle(request); - KeyMessage unpickled = PickleHandshake.unpickle(pickled); + SessionKeyManager.KeyMessage unpickled = PickleHandshake.unpickle(pickled); - assertTrue(unpickled instanceof KeyMessage.KeyHandshakeRequest); - var unpackedRequest = (KeyMessage.KeyHandshakeRequest) unpickled; + assertTrue(unpickled instanceof SessionKeyManager.KeyMessage.KeyHandshakeRequest); + var unpackedRequest = (SessionKeyManager.KeyMessage.KeyHandshakeRequest) unpickled; assertEquals(from, unpackedRequest.from()); assertArrayEquals(publicKey, unpackedRequest.publicKey()); } @@ -30,13 +30,13 @@ void shouldPickleAndUnpickleRequest() { void shouldPickleAndUnpickleResponse() { NodeId from = new NodeId((short) 2); byte[] publicKey = new byte[] { 5, 6, 7, 8 }; - var response = new KeyMessage.KeyHandshakeResponse(from, publicKey); + var response = new SessionKeyManager.KeyMessage.KeyHandshakeResponse(from, publicKey); byte[] pickled = PickleHandshake.pickle(response); - KeyMessage unpickled = PickleHandshake.unpickle(pickled); + SessionKeyManager.KeyMessage unpickled = PickleHandshake.unpickle(pickled); - assertTrue(unpickled instanceof KeyMessage.KeyHandshakeResponse); - var unpackedResponse = (KeyMessage.KeyHandshakeResponse) unpickled; + assertTrue(unpickled instanceof SessionKeyManager.KeyMessage.KeyHandshakeResponse); + var unpackedResponse = (SessionKeyManager.KeyMessage.KeyHandshakeResponse) unpickled; assertEquals(from, unpackedResponse.from()); assertArrayEquals(publicKey, unpackedResponse.publicKey()); }