use of org.aion.rpc.types.RPCTypes.ByteArray in project aion by aionnetwork.
the class PersonalRPCImplTest method executePersonal_ecRecover.
@Test
public void executePersonal_ecRecover() {
ECKey ecKey = ECKeyFac.inst().create();
String helloMessage = "Hello World";
ByteArray helloByteMessage = ByteArray.wrap(helloMessage.getBytes());
// Create the signed message
ByteArray signedMessage = ByteArray.wrap(ecKey.sign(helloByteMessage.toBytes()).toBytes());
String pubKey = ByteUtil.toHexString(ecKey.getAddress());
// well formed request
Request request = new Request(idGenerator.generateID(), ecRecoverMethod, EcRecoverParamsConverter.encode(new EcRecoverParams(helloByteMessage, signedMessage)), VersionType.Version2);
assertEquals(pubKey, execute(request, AddressConverter::decode).toString());
// incorrect method name
request = new Request(idGenerator.generateID(), ecRecoverMethod + "y", EcRecoverParamsConverter.encode(new EcRecoverParams(helloByteMessage, signedMessage)), VersionType.Version2);
try {
execute(request, AddressConverter::decode);
fail();
} catch (MethodNotFoundRPCException e) {
}
// incorrect params
request = new Request(idGenerator.generateID(), ecRecoverMethod, ParamUnion.wrap(new VoidParams()).encode(), VersionType.Version2);
try {
execute(request, AddressConverter::decode);
fail();
} catch (InvalidParamsRPCException e) {
}
}
use of org.aion.rpc.types.RPCTypes.ByteArray in project aion by aionnetwork.
the class PersonalRPCImplTest method personal_ecRecover.
@Test
public void personal_ecRecover() {
ECKey ecKey = ECKeyFac.inst().create();
String helloMessage = "Hello World";
String byeMessage = "Bye World";
ByteArray helloByteMessage = ByteArray.wrap(helloMessage.getBytes());
ByteArray byeByteMessage = ByteArray.wrap(byeMessage.getBytes());
// Create the signed message
ByteArray signedMessage = ByteArray.wrap(ecKey.sign(helloByteMessage.toBytes()).toBytes());
// append 0x to make params valid
String hexString = "0x" + ByteUtil.toHexString(signedMessage.toBytes());
String pubKey = "0x" + ByteUtil.toHexString(ecKey.getAddress());
// recover public key and validate that the message was signed
AionAddress recoveredKey = rpc.personal_ecRecover(helloByteMessage, DataHexStringConverter.decode(hexString));
System.out.printf("Public Key: %s %nRecovered Key: %s%n ", DataHexStringConverter.decode(pubKey), recoveredKey);
assertEquals(AddressConverter.decode(pubKey), recoveredKey);
// attempt to recover the public key and fail since the incorrect message was used
recoveredKey = rpc.personal_ecRecover(byeByteMessage, DataHexStringConverter.decode(hexString));
System.out.printf("Public Key: %s %nRecovered Key: %s%n ", DataHexStringConverter.decode(pubKey), recoveredKey);
assertNotEquals(AddressConverter.decode(pubKey), recoveredKey);
try {
// attempt to recover a pk with an incorrect signature
rpc.personal_ecRecover(helloByteMessage, DataHexStringConverter.decode(hexString + "1"));
fail();
} catch (Exception e) {
// We expect an exception
}
}
Aggregations