Skip to content

Commit

Permalink
add cryptographic scheme for end to end encryption.
Browse files Browse the repository at this point in the history
  • Loading branch information
Hammurabi committed Oct 22, 2019
1 parent bd814d5 commit c18f78e
Show file tree
Hide file tree
Showing 7 changed files with 63 additions and 15 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.riverssen.p2p4j;

public abstract class CryptographicScheme {
public abstract byte[] encrypt(Packet packet);
public abstract byte[] decrypt(byte[] bytes);
}
13 changes: 13 additions & 0 deletions core/src/main/java/com.riverssen.p2p4j/DefaultScheme.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.riverssen.p2p4j;

public class DefaultScheme extends CryptographicScheme {
@Override
public byte[] encrypt(Packet packet) {
return packet.getBytes();
}

@Override
public byte[] decrypt(byte[] bytes) {
return bytes;
}
}
28 changes: 15 additions & 13 deletions core/src/main/java/com.riverssen.p2p4j/Node.java
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,10 @@ protected boolean sendMessage(Packet packet)
if (packet.getSize() > server.getParameters().getMaxBytesSend())
return false;

/**
* Check that the packet has not been sent
* before.
*
* This is implementation specific.
*/
if (nodeID.screen(packet.getHashCode()))
return false;
byte encodedBytes[] = nodeID.getScheme().encrypt(packet);
dataOutputStream.writeInt(encodedBytes.length);
dataOutputStream.write(encodedBytes);
dataOutputStream.flush();

/**
* Cache the hash of this packet to insure
Expand All @@ -95,10 +91,6 @@ protected boolean sendMessage(Packet packet)
*/
nodeID.cache(packet.getHashCode());

dataOutputStream.writeInt(packet.getSize());
packet.write(dataOutputStream);
dataOutputStream.flush();

return true;
} catch (IOException e) {
}
Expand All @@ -107,7 +99,17 @@ protected boolean sendMessage(Packet packet)
}

public boolean send(Packet packet) {
if (connected.get()) return messages.add(packet);
if (connected.get()) {
/**
* Check that the packet has not been sent
* before.
*
* This is implementation specific.
*/
if (nodeID.screen(packet.getHashCode()))
return false;
return messages.add(packet);
}
return false;
}

Expand Down
2 changes: 2 additions & 0 deletions core/src/main/java/com.riverssen.p2p4j/NodeID.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ public abstract class NodeID {
public abstract boolean screen(byte[] object);
public abstract void cache(byte[] object);

public abstract CryptographicScheme getScheme();

@Override
public String toString() {
return getAddress() + ":" + getPort();
Expand Down
1 change: 1 addition & 0 deletions core/src/main/java/com.riverssen.p2p4j/Packet.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ public abstract class Packet {
public abstract void write(DataOutputStream dataOutputStream) throws IOException;

public abstract byte[] getHashCode();
public abstract byte[] getBytes();
}
5 changes: 5 additions & 0 deletions core/src/test/java/tests/GenericPacket.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,9 @@ public void write(DataOutputStream dataOutputStream) throws IOException {
public byte[] getHashCode() {
return new byte[1];
}

@Override
public byte[] getBytes() {
return getBuffer().array();
}
}
23 changes: 21 additions & 2 deletions core/src/test/java/tests/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import com.riverssen.p2p4j.ServerParameters;
import com.riverssen.p2p4j.Descriptor;
import com.riverssen.p2p4j.Packet;
import com.riverssen.p2p4j.CryptographicScheme;
import com.riverssen.p2p4j.DefaultScheme;

import java.io.DataOutputStream;
import java.io.IOException;
Expand Down Expand Up @@ -92,9 +94,9 @@ public static void createServerB(String name, int port) throws IOException {

message.send(theNode);
System.out.println(name + " sent " + message.getPacket().getSize());
ResponsePacket<String, ResponseCode> response1 = request1.<String, ResponseCode>sendGetReply(theNode, 1500);
ResponsePacket<String, ResponseCode> response1 = request1.<String, ResponseCode>sendGetReply(theNode, 10000);
System.out.println(name + " sent " + request1.getPacket().getSize() + " " + request1.getPacket().getSerialNumber());
ResponsePacket<Integer, ResponseCode> response2 = request2.<Integer, ResponseCode>sendGetReply(theNode, 1500);
ResponsePacket<Integer, ResponseCode> response2 = request2.<Integer, ResponseCode>sendGetReply(theNode, 10000);
System.out.println(name + " sent " + request2.getPacket().getSize() + " " + request2.getPacket().getSerialNumber());

System.out.println(name + ".. response1: " + response1);
Expand Down Expand Up @@ -203,12 +205,14 @@ public static class NodeIDImpl extends NodeID {
private int spam = 0;
private InetAddress address;
private int port;
private CryptographicScheme scheme;

public NodeIDImpl(InetAddress address, int port)
{
this.address = address;
this.port = port;
this.setShouldBan(false);
this.scheme = new DefaultScheme();
}

@Override
Expand Down Expand Up @@ -256,6 +260,11 @@ public boolean screen(byte[] object) {
@Override
public void cache(byte[] object) {
}

@Override
public CryptographicScheme getScheme() {
return scheme;
}
}

public static enum PacketType {
Expand Down Expand Up @@ -320,6 +329,11 @@ public void write(DataOutputStream dataOutputStream) throws IOException {
public byte[] getHashCode() {
return new byte[1];
}

@Override
public byte[] getBytes() {
return getBuffer().array();
}
}

public static class GenericResponsePacket extends Packet {
Expand Down Expand Up @@ -383,6 +397,11 @@ public void write(DataOutputStream dataOutputStream) throws IOException {
public byte[] getHashCode() {
return new byte[1];
}

@Override
public byte[] getBytes() {
return getBuffer().array();
}
}

public static class StringMessage extends Message {
Expand Down

0 comments on commit c18f78e

Please sign in to comment.