Browse Source

Test PEPEncInlineEA Alice/Bob (draft)

JNI-96 Release_2.1.0-RC2
heck 5 years ago
parent
commit
c1ce73d483
  1. 3
      test/java/foundation/pEp/jniadapter/test/templateAliceBob/Makefile
  2. 2
      test/java/foundation/pEp/jniadapter/test/templateAliceBob/MultiPeerCTX.java
  3. 109
      test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestAlice.java
  4. 73
      test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestBob.java
  5. 93
      test/java/foundation/pEp/jniadapter/test/templateAliceBob/Utils.java
  6. 81
      test/java/foundation/pEp/jniadapter/test/templateAliceBob/pEpMessage.java
  7. 183
      test/java/foundation/pEp/jniadapter/test/templateAliceBob/transportMessage.java
  8. 5
      test/java/foundation/pEp/jniadapter/test/utils/AdapterTestUtils.java

3
test/java/foundation/pEp/jniadapter/test/templateAliceBob/Makefile

@ -7,7 +7,8 @@ JAVA_CLASSES = \
TestAlice.class \
TestBob.class \
MultiPeerCTX.class \
pEpMessage.class \
Utils.class \
TransportMessage.class \
../utils/AdapterBaseTestContext.class \
../utils/AdapterTestUtils.class \
../utils/TestCallbacks.class

2
test/java/foundation/pEp/jniadapter/test/templateAliceBob/MultiPeerCTX.java

@ -87,5 +87,7 @@ class MultiPeerCTX extends FsMQManagerTestContext {
path = Paths.get(filenameAliceSec);
keyAliceSec = Files.readAllBytes(path);
qm.clearOwnQueue();
}
}

109
test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestAlice.java

@ -2,26 +2,15 @@ package foundation.pEp.jniadapter.test.templateAliceBob;
import static foundation.pEp.pitytest.TestLogger.*;
import foundation.pEp.jniadapter.Blob;
import foundation.pEp.jniadapter.test.templateAliceBob.MultiPeerCTX;
import foundation.pEp.jniadapter.Engine;
import foundation.pEp.jniadapter.Identity;
import foundation.pEp.jniadapter.Message;
import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.FsMQMessage;
import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.test.ctx.FsMQManagerTestContext;
import foundation.pEp.pitytest.*;
import foundation.pEp.pitytest.utils.TestUtils;
import foundation.pEp.jniadapter.test.utils.*;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.Vector;
class TestAlice {
public static void main(String[] args) throws Exception {
@ -31,84 +20,56 @@ class TestAlice {
MultiPeerCTX mpctx = new MultiPeerCTX("Alice");
new TestUnit<MultiPeerCTX>("Alice tx msg", mpctx, ctx -> {
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
log(AdapterTestUtils.identityToString(ctx.alice, true));
log("update_ident");
ctx.alice = ctx.engine.updateIdentity(ctx.alice);
log(AdapterTestUtils.identityToString(ctx.alice, true));
log("myself()");
ctx.alice = ctx.engine.myself(ctx.alice);
log(AdapterTestUtils.identityToString(ctx.alice, true));
log(AdapterTestUtils.identityToString(ctx.alice, false));
log(AdapterTestUtils.identityToString(ctx.bob, true));
log(AdapterTestUtils.identityToString(ctx.bob, false));
log("update()");
ctx.engine.updateIdentity(ctx.bob);
log(AdapterTestUtils.identityToString(ctx.bob, true));
Message pEpMsg = AdapterTestUtils.makeNewTestMessage(ctx.alice, ctx.bob, Message.Direction.Outgoing);
// pEpMsg.setEncFormat(Message.EncFormat.None);
log("Orig IN: " + AdapterTestUtils.msgToString(pEpMsg, false));
Message pEpMsgEnc = ctx.engine.encrypt_message(pEpMsg, null, Message.EncFormat.PEP);
Message txMsgpEp = null;
if (pEpMsgEnc == null) {
log("UNENCRYPTED");
txMsgpEp = pEpMsg;
} else {
log("ENCRYPTED");
txMsgpEp = pEpMsgEnc;
}
log("Orig OUT: " + AdapterTestUtils.msgToString(txMsgpEp, false));
pEpMessage pEpMessageOut = new pEpMessage(txMsgpEp);
log("Serializing");
String txMsg = null;
try {
txMsg = pEpMessageOut.serialize();
} catch (IOException e) {
log("Exception while serializing: " + e.toString());
}
log("Serialized Msg: " + txMsg);
log("deserializing");
pEpMessage deserialized = null;
try {
deserialized = pEpMessage.deserialize(txMsg);
} catch (Exception e) {
log("Exception while deserializing: " + e.toString());
}
Message reconstr = deserialized.toMessage();
log("Reconstr: " + AdapterTestUtils.msgToString(reconstr, false));
try {
ctx.qm.sendMessage("Bob", txMsg);
} catch (IOException e) {
assert false : e.toString();
ctx.bob = ctx.engine.updateIdentity(ctx.bob);
log(AdapterTestUtils.identityToString(ctx.bob, false));
String payloadPlain = "PING";
List<TransportMessage> msgTx = Utils.encryptInlineEA(ctx, ctx.alice, ctx.bob, payloadPlain);
for (TransportMessage out : msgTx) {
log("MSG TX: \n" + out.toString());
try {
String msgTxSerialized = out.serialize();
ctx.qm.sendMessage("Bob", msgTxSerialized);
} catch (IOException e) {
assert false : e.toString();
}
}
log("Sending messages finished...");
});
new TestUnit<MultiPeerCTX>("Alice rx msg", mpctx, ctx -> {
FsMQMessage rxMsg = null;
try {
rxMsg = ctx.qm.receiveMessage(200000);
FsMQMessage msgRxSerialized = null;
while ((msgRxSerialized = ctx.qm.receiveMessage(6)) != null) {
// log("MSG RX from [" + msgRxSerialized.getFrom().getAddress() + "]: " + msgRxSerialized.getMsg());
Message msgRx = Utils.deserializepEpMessageEA(ctx, msgRxSerialized);
log("ENCRYPTED IN: \n" + AdapterTestUtils.msgToString(msgRx, false));
Engine.decrypt_message_Return result = ctx.engine.decrypt_message(msgRx, null, 0);
log("DECRYPTED msg: \n" + AdapterTestUtils.msgToString(result.dst, false));
log("DECRYPTED rating:" + result.rating.toString());
log("DECRYPTED flags:" + result.flags);
}
} catch (Exception e) {
assert false : e.toString();
}
log("Msg rx from [" + rxMsg.getFrom() + "]:" + rxMsg.getMsg());
log(AdapterTestUtils.identityToString(ctx.bob, false));
ctx.bob = ctx.engine.updateIdentity(ctx.bob);
log(AdapterTestUtils.identityToString(ctx.bob, false));
log("Stop Receiving, no more messages...");
});
TestSuite.getDefault().run();
}
}

73
test/java/foundation/pEp/jniadapter/test/templateAliceBob/TestBob.java

@ -10,7 +10,7 @@ import foundation.pEp.pitytest.utils.TestUtils;
import foundation.pEp.jniadapter.test.utils.*;
import java.io.IOException;
import java.util.Vector;
import java.util.List;
class TestBob {
public static void main(String[] args) throws Exception {
@ -20,61 +20,58 @@ class TestBob {
MultiPeerCTX mpctx = new MultiPeerCTX("Bob");
new TestUnit<MultiPeerCTX>("Bob rx msg", mpctx, ctx -> {
log(AdapterTestUtils.identityToString(ctx.bob, true));
log("myself()");
ctx.bob = ctx.engine.myself(ctx.bob);
log(AdapterTestUtils.identityToString(ctx.bob, true));
log(AdapterTestUtils.identityToString(ctx.bob, false));
log(AdapterTestUtils.identityToString(ctx.alice, true));
log(AdapterTestUtils.identityToString(ctx.alice, false));
log("update()");
ctx.engine.updateIdentity(ctx.alice);
log(AdapterTestUtils.identityToString(ctx.alice, true));
ctx.alice = ctx.engine.updateIdentity(ctx.alice);
log(AdapterTestUtils.identityToString(ctx.alice, false));
FsMQMessage msgRx = null;
try {
FsMQMessage msgRxSerialized = null;
while ((msgRxSerialized = ctx.qm.receiveMessage(3)) != null) {
// log("MSG RX from [" + msgRxSerialized.getFrom().getAddress() + "]: " + msgRxSerialized.getMsg());
while (true) {
try {
msgRx = ctx.qm.receiveMessage(1000000);
} catch (Exception e) {
e.printStackTrace();
assert false : e.toString();
}
log("Msg Rx from[" + msgRx.getFrom().getAddress() + "]: " + msgRx.getMsg());
Message rxMsg = null;
if(false) {
rxMsg = ctx.engine.incomingMessageFromPGPText(msgRx.getMsg(), Message.EncFormat.PEP);
} else {
pEpMessage rxMsgpEp = null;
try {
rxMsgpEp = pEpMessage.deserialize(msgRx.getMsg());
} catch (Exception e) {
log("Exception while deserializing: " + e.toString());
}
rxMsg = rxMsgpEp.toMessage();
}
log("Orig IN: " + AdapterTestUtils.msgToString(rxMsg, false));
// decrypt
Engine.decrypt_message_Return result = ctx.engine.decrypt_message(rxMsg, null, 0);
log("Msg Rx from[" + msgRx.getFrom().getAddress() + "]: " + AdapterTestUtils.msgToString(result.dst,false));
Message msgRx = Utils.deserializepEpMessageEA(ctx, msgRxSerialized);
log("ENCRYPTED IN: \n" + AdapterTestUtils.msgToString(msgRx, false));
Engine.decrypt_message_Return result = ctx.engine.decrypt_message(msgRx, null, 0);
log("DECRYPTED msg: \n" + AdapterTestUtils.msgToString(result.dst, false));
log("DECRYPTED rating:" + result.rating.toString());
log("DECRYPTED flags:" + result.flags);
}
} catch (Exception e) {
assert false : e.toString();
}
log(AdapterTestUtils.identityToString(ctx.alice, false));
ctx.alice = ctx.engine.updateIdentity(ctx.alice);
log(AdapterTestUtils.identityToString(ctx.alice, false));
log("Stop Receiving, no more messages...");
});
new TestUnit<MultiPeerCTX>("Bob tx msg", mpctx, ctx -> {
ctx.bob = ctx.engine.myself(ctx.bob);
String payloadPlain = "PONG";
List<TransportMessage> msgTx = Utils.encryptInlineEA(ctx, ctx.bob, ctx.alice, payloadPlain);
if (ctx.bob.fpr == null) {
throw new RuntimeException();
for (TransportMessage out : msgTx) {
log("MSG TX: \n" + out.toString());
try {
String msgTxSerialized = out.serialize();
ctx.qm.sendMessage("Alice", msgTxSerialized);
} catch (IOException e) {
assert false : e.toString();
}
}
//send message
log("Sending messages finished...");
});
TestSuite.getDefault().run();
}
}

93
test/java/foundation/pEp/jniadapter/test/templateAliceBob/Utils.java

@ -0,0 +1,93 @@
package foundation.pEp.jniadapter.test.templateAliceBob;
import foundation.pEp.jniadapter.Blob;
import foundation.pEp.jniadapter.Identity;
import foundation.pEp.jniadapter.Message;
import foundation.pEp.jniadapter.test.utils.AdapterTestUtils;
import foundation.pEp.jniadapter.test.utils.transport.fsmqmanager.FsMQMessage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import static foundation.pEp.pitytest.TestLogger.log;
public class Utils {
public static List<TransportMessage> encryptInlineEA(MultiPeerCTX ctx, Identity from, Identity to, String payloadPlain) throws RuntimeException {
List<TransportMessage> ret = new ArrayList<>();
// 1. put payload into .longmsg
Message msgPlain = AdapterTestUtils.makeNewTestMessage(from, to, Message.Direction.Outgoing);
msgPlain.setLongmsg(payloadPlain);
msgPlain.setEncFormat(Message.EncFormat.PEPEncInlineEA);
log("MSG PLAIN: " + AdapterTestUtils.msgToString(msgPlain, false));
// 2. call encrypt_message() with enc_format = PEP_enc_inline_EA
Message msgEnc = ctx.engine.encrypt_message(msgPlain, null, Message.EncFormat.PEPEncInlineEA);
Message msgTx = null;
if (msgEnc == null) {
log("UNENCRYPTED");
msgTx = msgPlain;
} else {
log("ENCRYPTED");
msgTx = msgEnc;
}
log("MSG AFTER ENCRYPT: \n" + AdapterTestUtils.msgToString(msgTx, false));
// 3. you’re getting back crypto text in .longmsg and possibly ASCII encoded crypto text in .value of attachments in .attachments; .enc_format is PEP_enc_inline_EA
// 4. send one message with the crypto text of .longmsg
TransportMessage tmp = new TransportMessage(msgTx);
tmp.setAttachments(new Vector<>());
ret.add(new TransportMessage(tmp));
// 5. send messages for each attachment in .attachments with the crypto text of .value, respectively
for (Blob b : msgTx.getAttachments()) {
if(b != null) {
tmp.setLongMessage(new String(b.data));
ret.add(new TransportMessage(tmp));
} else {
throw new RuntimeException("NULL ATTACHMENT");
}
}
return ret;
}
public static String serializepEpMessage(Message msgTx) {
TransportMessage msgTransport = new TransportMessage(msgTx);
String msgTxSerialized = null;
try {
msgTxSerialized = msgTransport.serialize();
} catch (IOException e) {
log("Exception while serializing: " + e.toString());
}
return msgTxSerialized;
}
public static Message deserializepEpMessageEA(MultiPeerCTX ctx, FsMQMessage msgRxSerialized) {
Message ret = null;
try {
TransportMessage msgTransportRx = TransportMessage.deserialize(msgRxSerialized.getMsg());
ret = ctx.engine.incomingMessageFromPGPText(msgTransportRx.getLongMessage(), Message.EncFormat.PEPEncInlineEA);
// From
Identity from = new Identity();
from.address = msgTransportRx.getFromAddress();
from = ctx.engine.updateIdentity(from);
ret.setFrom(from);
// To
Vector<Identity> toList = new Vector<>();
for (String addr: msgTransportRx.getToAddresses()) {
Identity to = new Identity();
to.address = addr;
to = ctx.engine.myself(to);
toList.add(to);
}
ret.setTo(toList);
} catch (Exception e) {
log("Exception while deserializing: " + e.toString());
}
return ret;
}
}

81
test/java/foundation/pEp/jniadapter/test/templateAliceBob/pEpMessage.java

@ -1,81 +0,0 @@
package foundation.pEp.jniadapter.test.templateAliceBob;
import foundation.pEp.jniadapter.Blob;
import foundation.pEp.jniadapter.Identity;
import foundation.pEp.jniadapter.Message;
import java.io.*;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.Vector;
public class pEpMessage implements Serializable {
private static final long serialVersionUID = 1L;
String fromAddress = null;
List<String> toAddresses = new ArrayList<String>();
List<Blob> attachments = new ArrayList<Blob>();
String shortMessage = null;
String longMessage = null;
pEpMessage(Message msg) {
fromAddress = msg.getFrom().address;
for(Identity i : msg.getTo() ) {
toAddresses.add(i.address);
}
for(Blob b : msg.getAttachments()) {
attachments.add(b);
}
shortMessage = msg.getShortmsg();
longMessage = msg.getLongmsg();
}
public Message toMessage() {
Message ret = new Message();
Identity from = new Identity();
from.address = fromAddress;
ret.setFrom(from);
Vector<Identity> toIdents = new Vector<>();
for( String addr : toAddresses) {
Identity i = new Identity();
i.address = addr;
toIdents.add(i);
}
ret.setTo(toIdents);
Vector<Blob> atts = new Vector<>();
for(Blob b : attachments) {
atts.add(b);
}
ret.setAttachments(atts);
ret.setShortmsg(shortMessage);
ret.setLongmsg(longMessage);
return ret;
}
public static pEpMessage deserialize(String serializedMsg) throws IOException, ClassNotFoundException {
pEpMessage ret = null;
byte[] data = Base64.getDecoder().decode(serializedMsg);
// byte[] data = serializedMsg.getBytes();
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data));
Object obj = ois.readObject();
ois.close();
if (!(obj instanceof pEpMessage)) {
throw new ClassNotFoundException("Invalid serialized string");
} else {
ret = (pEpMessage) obj;
}
return ret;
}
public String serialize() throws IOException {
String ret = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(this);
oos.close();
ret = Base64.getEncoder().encodeToString(baos.toByteArray());
// ret = baos.toString();
return ret;
}
}

183
test/java/foundation/pEp/jniadapter/test/templateAliceBob/transportMessage.java

@ -0,0 +1,183 @@
package foundation.pEp.jniadapter.test.templateAliceBob;
import foundation.pEp.jniadapter.Blob;
import foundation.pEp.jniadapter.Identity;
import foundation.pEp.jniadapter.Message;
import foundation.pEp.jniadapter.Pair;
import foundation.pEp.jniadapter.test.utils.AdapterTestUtils;
import java.io.*;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.Vector;
public class TransportMessage implements Serializable {
private static final long serialVersionUID = 1L;
private String fromAddress = null;
private List<String> toAddresses = new ArrayList<String>();
private Vector<Blob> attachments = new Vector<>();
private String shortMessage = null;
private String longMessage = null;
TransportMessage() {
}
TransportMessage(Message msg) {
fromAddress = msg.getFrom().address;
for (Identity i : msg.getTo()) {
toAddresses.add(i.address);
}
for (Blob b : msg.getAttachments()) {
attachments.add(b);
}
shortMessage = msg.getShortmsg();
longMessage = msg.getLongmsg();
}
// Deep Copy
TransportMessage(TransportMessage msg) {
fromAddress = msg.fromAddress;
toAddresses = new ArrayList<>(msg.toAddresses);
attachments = new Vector<>(msg.attachments);
shortMessage = msg.shortMessage;
longMessage = msg.longMessage;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public List<String> getToAddresses() {
return toAddresses;
}
public void setToAddresses(List<String> toAddresses) {
this.toAddresses = toAddresses;
}
public Vector<Blob> getAttachments() {
return attachments;
}
public void setAttachments(Vector<Blob> attachments) {
this.attachments = attachments;
}
public String getShortMessage() {
return shortMessage;
}
public void setShortMessage(String shortMessage) {
this.shortMessage = shortMessage;
}
public String getLongMessage() {
return longMessage;
}
public void setLongMessage(String longMessage) {
this.longMessage = longMessage;
}
public Message toMessage() {
Message ret = new Message();
// from
Identity from = new Identity();
from.address = fromAddress;
ret.setFrom(from);
// to
Vector<Identity> toIdents = new Vector<>();
for (String addr : toAddresses) {
Identity i = new Identity();
i.address = addr;
toIdents.add(i);
}
ret.setTo(toIdents);
// attachments
ret.setAttachments(new Vector<>(attachments));
// shortMessage
if (shortMessage != null) {
ret.setShortmsg(shortMessage);
}
// longMessage
if (longMessage != null) {
ret.setLongmsg(longMessage);
}
return ret;
}
public String toString() {
String ret = "";
ArrayList<Pair<String, String>> kvs = new ArrayList<>();
String key = "";
String value = "";
boolean full = false;
key = "from";
value = fromAddress;
kvs.add(new Pair<>(key, value));
key = "to";
value = toAddresses.toString();
kvs.add(new Pair<>(key, value));
key = "shortMessage";
value = shortMessage;
kvs.add(new Pair<>(key, value));
key = "longMessage";
value = longMessage;
kvs.add(new Pair<>(key, value));
key = "getAttachments";
value = AdapterTestUtils.blobListToString(attachments, full) + "\n";
kvs.add(new Pair<>(key, value));
if (!full) {
kvs = AdapterTestUtils.clipStrings(kvs, 200, "clipped...");
}
ret = AdapterTestUtils.stringPairListToString(kvs);
ret = ret.trim();
return ret;
}
public static TransportMessage deserialize(String serializedMsg) throws IOException, ClassNotFoundException {
TransportMessage ret = null;
byte[] data = Base64.getDecoder().decode(serializedMsg);
// byte[] data = serializedMsg.getBytes();
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data));
Object obj = ois.readObject();
ois.close();
if (!(obj instanceof TransportMessage)) {
throw new ClassNotFoundException("Invalid serialized string");
} else {
ret = (TransportMessage) obj;
}
return ret;
}
public String serialize() throws IOException {
String ret = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(this);
oos.close();
ret = Base64.getEncoder().encodeToString(baos.toByteArray());
// ret = baos.toString();
return ret;
}
}

5
test/java/foundation/pEp/jniadapter/test/utils/AdapterTestUtils.java

@ -20,7 +20,7 @@ public class AdapterTestUtils {
ret += "me: " + i.me + "\n";
ret += "comm_type: " + i.comm_type + "\n";
} else {
ret += i.address + "/" + i.user_id + "/" + i.fpr;
ret += i.address + "/" + i.user_id + "/" + i.username + "/" + i.fpr;
}
ret = ret.trim();
return ret;
@ -282,7 +282,8 @@ public class AdapterTestUtils {
msg.setFrom(from);
msg.setTo(vID);
msg.setDir(dir);
msg.setLongmsg("Hi i am the message longmessage");
msg.setShortmsg("Hi i am the shortMessage");
msg.setLongmsg("Hi i am the longMessage");
return msg;
}
}
Loading…
Cancel
Save