/*
* Copyright (c) [2016] [ <ether.camp> ]
* This file is part of the ethereumJ library.
*
* The ethereumJ library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The ethereumJ library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the ethereumJ library. If not, see <http://www.gnu.org/licenses/>.
*/
package org.ethereum.net.shh;
import org.junit.Assert;
import org.ethereum.crypto.ECKey;
import org.ethereum.util.RLP;
import org.ethereum.util.RLPList;
import org.junit.Test;
import java.math.BigInteger;
import org.spongycastle.util.encoders.Hex;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
/**
* @author by Konstantin Shabalin
*/
public class ShhTest {
/*
private byte[] payload = "Hello whisper!".getBytes();
private ECKey privKey = ECKey.fromPrivate(BigInteger.TEN);
private byte[] pubKey = privKey.getPubKey();
private int ttl = 10000;
private Topic[] topics = new Topic[]{
new Topic("topic 1"),
new Topic("topic 2"),
new Topic("topic 3")};
@Test */
/* Tests whether a message can be wrapped without any identity or encryption. *//*
public void test1() {
WhisperMessage sent = new WhisperMessage(payload);
Options options = new Options(null, null, topics, ttl);
ShhEnvelopeMessage e = sent.wrap(Options.DEFAULT_POW, options);
RLPList rlpList = RLP.decode2(e.getEncoded());
RLPList.recursivePrint(rlpList);
System.out.println();
assertEquals(Hex.toHexString(e.getData()), Hex.toHexString(sent.getBytes()));
assertEquals(Hex.toHexString(sent.getPayload()), Hex.toHexString(payload));
assertTrue(sent.getSignature() == null);
WhisperMessage received = e.open(null);
ECKey recovered = received.recover();
assertTrue(recovered == null);
}
@Test */
/* Tests whether a message can be signed, and wrapped in plain-text. *//*
public void test2() {
WhisperMessage sent = new WhisperMessage(payload);
Options options = new Options(privKey, null, topics, ttl);
ShhEnvelopeMessage e = sent.wrap(Options.DEFAULT_POW, options);
assertEquals(Hex.toHexString(e.getData()), Hex.toHexString(sent.getBytes()));
assertEquals(Hex.toHexString(sent.getPayload()), Hex.toHexString(payload));
assertTrue(sent.getSignature() != null);
WhisperMessage received = e.open(null);
ECKey recovered = received.recover();
assertEquals(Hex.toHexString(pubKey), Hex.toHexString(recovered.getPubKey()));
}
@Test */
/* Tests whether a message can be encrypted and decrypted using an anonymous sender (i.e. no signature).*//*
public void test3() {
WhisperMessage sent = new WhisperMessage(payload);
Options options = new Options(null, pubKey, topics, ttl);
ShhEnvelopeMessage e = sent.wrap(Options.DEFAULT_POW, options);
assertEquals(Hex.toHexString(e.getData()), Hex.toHexString(sent.getBytes()));
assertNotEquals(Hex.toHexString(sent.getPayload()), Hex.toHexString(payload));
assertTrue(sent.getSignature() == null);
WhisperMessage received = e.open(null);
assertEquals(Hex.toHexString(sent.getBytes()), Hex.toHexString(received.getBytes()));
ECKey recovered = received.recover();
assertTrue(recovered == null);
}
@Test */
/* Tests whether a message can be properly signed and encrypted. *//*
public void test4() {
WhisperMessage sent = new WhisperMessage(payload);
Options options = new Options(privKey, pubKey, topics, ttl);
ShhEnvelopeMessage e = sent.wrap(Options.DEFAULT_POW, options);
assertEquals(Hex.toHexString(e.getData()), Hex.toHexString(sent.getBytes()));
assertNotEquals(Hex.toHexString(sent.getPayload()), Hex.toHexString(payload));
assertTrue(sent.getSignature() != null);
WhisperMessage received = e.open(privKey);
ECKey recovered = received.recover();
sent.decrypt(privKey);
assertEquals(Hex.toHexString(sent.getBytes()), Hex.toHexString(received.getBytes()));
assertEquals(Hex.toHexString(sent.getPayload()), Hex.toHexString(payload));
assertEquals(Hex.toHexString(pubKey), Hex.toHexString(recovered.getPubKey()));
}
@Test
public void test5() {
ECKey fromKey = ECKey.fromPrivate(Hex.decode("ba43d10d069f0c41a8914849c1abeeac2a681b21ae9b60a6a2362c06e6eb1bc8"));
ECKey toKey = ECKey.fromPrivate(Hex.decode("00000000069f0c41a8914849c1abeeac2a681b21ae9b60a6a2362c06e6eb1bc8"));
// System.out.println("Sending from: " + Hex.toHexString(fromKey.getPubKey()) + "\n to: " + Hex.toHexString(toKey.getPubKey()));
byte[] bytes = post(fromKey, Hex.toHexString(toKey.getPubKey()), new String[]{"myTopic"}, "Hello all!", 1, 1);
ShhEnvelopeMessage envelope = new ShhEnvelopeMessage(bytes);
WhisperMessage msg = envelope.open(toKey);
// System.out.println("Received: " + envelope + "\n " + msg);
assertEquals("Hello all!", new String(msg.getPayload()));
}
public byte[] post(ECKey fromKey, String to, String[] topics, String payload, int ttl, int pow) {
Topic[] topicList = Topic.createTopics(topics);
WhisperMessage m = new WhisperMessage(payload.getBytes());
Options options = new Options(
fromKey,
to == null ? null : Hex.decode(to),
topicList,
ttl
);
ShhEnvelopeMessage e = m.wrap(pow, options);
return e.getEncoded();
}
*/
}