VpncoinTxMessage(String from, String subject, String message) { setFrom(from); setSubject(subject); setMessage(message); }
static VpncoinTxMessage parseEncrypted(long key, String fullMessage) throws Exception { return parseUnencrypted(decrypt(key, fullMessage)); }
@Override public TxMessage createPublicMessage(String message) { return create(message); }
@Test public void messageSerialization() { VpncoinTxMessage message = new VpncoinTxMessage(FROM_USER, SUBJECT, MESSAGE); String expected = "@FROM="+FROM_USER+"@SUBJ="+SUBJECT+"@MSG="+MESSAGE; assertArrayEquals(expected.getBytes(Charsets.UTF_8), message.serialize()); message = new VpncoinTxMessage(MESSAGE); assertNull(message.getFrom()); assertNull(message.getSubject()); assertArrayEquals(("@MSG=" + MESSAGE).getBytes(Charsets.UTF_8), message.serialize()); }
@Test public void messageStringParsing() { VpncoinTxMessage message = VpncoinTxMessage.parse("@FROM=" + FROM_USER + "@SUBJ=" + SUBJECT + "@MSG=" + MESSAGE); assertEquals(FROM_USER, message.getFrom()); assertEquals(SUBJECT, message.getSubject()); assertEquals(MESSAGE, message.getMessage()); assertEquals(FROM_USER + "\n\n"+SUBJECT+"\n\n"+MESSAGE, message.toString()); message = VpncoinTxMessage.parse("@MSG=" + MESSAGE); assertNull(message.getFrom()); assertNull(message.getSubject()); assertEquals(MESSAGE, message.getMessage()); assertEquals(MESSAGE, message.toString()); }
static byte[] decryptBytes(long key, byte[] data) throws DataFormatException { byte[] m_keyParts = makeKey(key); byte version = data[0]; if (CryptoFlag.CryptoFlagChecksum.isSet(flags)) { int storedChecksum = buffer.getShort() & 0xffff; int checksum = checksum(buffer.array(), buffer.position()); integrityOk = (checksum == storedChecksum); } else if (CryptoFlag.CryptoFlagHash.isSet(flags)) { throw new RuntimeException("Not implemented"); if (CryptoFlag.CryptoFlagCompression.isSet(flags)) { return uncompress(buffer); } else { return Arrays.copyOfRange(buffer.array(), buffer.position(), buffer.array().length);
@Test public void emptyMessages() { MessageFactory factory = VpncoinTxMessage.getFactory(); assertEquals("", factory.createPublicMessage("").toString()); assertEquals("", factory.createPublicMessage(" ").toString()); assertEquals("", factory.createPublicMessage("\n\n").toString()); assertEquals("", factory.createPublicMessage(" \t \t").toString()); assertEquals(0, ((VpncoinTxMessage)factory.createPublicMessage("")).serialize().length); assertEquals(0, ((VpncoinTxMessage)factory.createPublicMessage(" ")).serialize().length); assertEquals(0, ((VpncoinTxMessage)factory.createPublicMessage("\n\n")).serialize().length); assertEquals(0, ((VpncoinTxMessage)factory.createPublicMessage(" \t \t")).serialize().length); }
@Test public void messageToString() { VpncoinTxMessage message = new VpncoinTxMessage(FROM_USER, SUBJECT, MESSAGE); assertEquals(FROM_USER + "\n\n"+SUBJECT+"\n\n"+MESSAGE, message.toString()); message = new VpncoinTxMessage(MESSAGE); assertEquals(MESSAGE, message.toString()); } /*
static String decrypt(long key, String fullMessage) throws DataFormatException { byte[] bytes = decryptBytes(key, Base64.decode(fullMessage)); return new String(bytes); }
public static VpncoinTxMessage create(String message) throws IllegalArgumentException { return new VpncoinTxMessage(message); }
@Override @Nullable public MessageFactory getMessagesFactory() { return VpncoinTxMessage.getFactory(); } }
@Override @Nullable public TxMessage extractPublicMessage(AbstractTransaction transaction) { return parse(transaction); } }
@Override public void serializeTo(AbstractTransaction transaction) { if (transaction instanceof BitTransaction) { Transaction rawTx = ((BitTransaction) transaction).getRawTransaction(); rawTx.setExtraBytes(serialize()); } }
@Test public void uncompress() throws Exception { assertArrayEquals(ORIGINAL_BYTES, VpncoinTxMessage.uncompress(ByteBuffer.wrap(COMPRESSED))); }
public boolean isEmpty() { return isNullOrEmpty(from) && isNullOrEmpty(subject) && isNullOrEmpty(message); }
VpncoinTxMessage(String message) { setMessage(message); }
@Nullable public static VpncoinTxMessage parse(String fullMessage) { if (fullMessage == null || fullMessage.length() == 0) { return null; } try { return parseUnencrypted(fullMessage); } catch (Exception e) { log.info("Could not parse message: {}", e.getLocalizedMessage()); return null; } }
@Test public void decrypt() throws Exception { assertArrayEquals(ORIGINAL_BYTES, VpncoinTxMessage.decryptBytes(ENCRYPTION_KEY, ENCRYPTED)); }
@Override public String toString() { StringBuilder sb = new StringBuilder(); if (!isNullOrEmpty(from)) { sb.append(from); } if (!isNullOrEmpty(subject)) { if (sb.length() != 0) sb.append("\n\n"); sb.append(subject); } if (!isNullOrEmpty(message)) { if (sb.length() != 0) sb.append("\n\n"); sb.append(message); } return sb.toString(); }
byte[] serialize() { StringBuilder sb = new StringBuilder(); if (!isNullOrEmpty(from)) { sb.append(FROM); sb.append(from); } if (!isNullOrEmpty(subject)) { sb.append(SUBJ); sb.append(subject); } if (!isNullOrEmpty(message)) { sb.append(MSG); sb.append(message); } return sb.toString().getBytes(Charsets.UTF_8); }