use of com.quorum.tessera.api.PayloadEncryptResponse in project tessera by ConsenSys.
the class EncodedPayloadResourceTest method createPayload.
@Test
public void createPayload() {
final String base64Key = "BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo=";
final SendRequest sendRequest = new SendRequest();
sendRequest.setPayload(Base64.getEncoder().encode("PAYLOAD".getBytes()));
sendRequest.setTo(base64Key);
sendRequest.setAffectedContractTransactions("dHgx");
final PublicKey sender = PublicKey.from(Base64.getDecoder().decode("oNspPPgszVUFw0qmGFfWwh1uxVUXgvBxleXORHj07g8="));
when(transactionManager.defaultPublicKey()).thenReturn(sender);
final EncodedPayload samplePayload = EncodedPayload.Builder.create().withSenderKey(sender).withRecipientKeys(List.of(PublicKey.from(Base64.getDecoder().decode(base64Key)))).withRecipientBoxes(List.of("boxOne".getBytes())).withRecipientNonce("recipientNonce".getBytes()).withCipherText("testPayload".getBytes()).withCipherTextNonce("cipherTextNonce".getBytes()).withPrivacyMode(PrivacyMode.STANDARD_PRIVATE).withAffectedContractTransactions(Map.of(TxHash.from("tx1".getBytes()), "tx1val".getBytes())).withExecHash(new byte[0]).build();
when(encodedPayloadManager.create(any(com.quorum.tessera.transaction.SendRequest.class))).thenReturn(samplePayload);
final Response result = encodedPayloadResource.createEncodedPayload(sendRequest);
assertThat(result.getStatus()).isEqualTo(200);
final PayloadEncryptResponse payloadEncryptResponse = PayloadEncryptResponse.class.cast(result.getEntity());
assertThat(PublicKey.from(payloadEncryptResponse.getSenderKey())).isEqualTo(sender);
assertThat(payloadEncryptResponse.getCipherText()).isEqualTo("testPayload".getBytes());
assertThat(payloadEncryptResponse.getCipherTextNonce()).isEqualTo("cipherTextNonce".getBytes());
assertThat(payloadEncryptResponse.getRecipientBoxes()).hasSize(1).containsExactly("boxOne".getBytes());
assertThat(payloadEncryptResponse.getRecipientNonce()).isEqualTo("recipientNonce".getBytes());
assertThat(payloadEncryptResponse.getRecipientKeys()).hasSize(1);
assertThat(payloadEncryptResponse.getRecipientKeys().get(0)).isEqualTo(Base64.getDecoder().decode(base64Key));
assertThat(payloadEncryptResponse.getPrivacyMode()).isEqualTo(0);
assertThat(payloadEncryptResponse.getAffectedContractTransactions()).contains(entry("dHgx", "dHgxdmFs"));
assertThat(payloadEncryptResponse.getExecHash()).isEmpty();
final ArgumentCaptor<com.quorum.tessera.transaction.SendRequest> argumentCaptor = ArgumentCaptor.forClass(com.quorum.tessera.transaction.SendRequest.class);
verify(encodedPayloadManager).create(argumentCaptor.capture());
verify(transactionManager).defaultPublicKey();
com.quorum.tessera.transaction.SendRequest businessObject = argumentCaptor.getValue();
assertThat(businessObject).isNotNull();
assertThat(businessObject.getPayload()).isEqualTo(sendRequest.getPayload());
assertThat(businessObject.getSender()).isEqualTo(sender);
assertThat(businessObject.getRecipients()).hasSize(1);
assertThat(businessObject.getRecipients().get(0).encodeToBase64()).isEqualTo(base64Key);
assertThat(businessObject.getPrivacyMode()).isEqualTo(PrivacyMode.STANDARD_PRIVATE);
assertThat(businessObject.getAffectedContractTransactions()).containsExactly(new MessageHash("tx1".getBytes()));
assertThat(businessObject.getExecHash()).isEmpty();
}
use of com.quorum.tessera.api.PayloadEncryptResponse in project tessera by ConsenSys.
the class EncodedPayloadResourceTest method decryptPayload.
@Test
public void decryptPayload() {
final PrivacyMode privacyMode = PrivacyMode.PRIVATE_STATE_VALIDATION;
final Base64.Decoder decoder = Base64.getDecoder();
final PayloadDecryptRequest request = new PayloadDecryptRequest();
request.setSenderKey(decoder.decode("BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo="));
request.setCipherText(decoder.decode("h7av/vhPlaPFECB1K30hNWugv/Bu"));
request.setCipherTextNonce(decoder.decode("8MVXAESCQuRHWxrQ6b5MXuYApjia+2h0"));
request.setRecipientBoxes(List.of(decoder.decode("FNirZRc2ayMaYopCBaWQ/1I7VWFiCM0lNw533Hckzxb+qpvngdWVVzJlsE05dbxl")));
request.setRecipientNonce(decoder.decode("p9gYDJlEoBvLdUQ+ZoONl2Jl9AirV1en"));
request.setRecipientKeys(List.of(decoder.decode("BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo=")));
request.setPrivacyMode(privacyMode.getPrivacyFlag());
request.setAffectedContractTransactions(Map.of("dHgx", "dHgxdmFs", "dHgy", "dHgydmFs"));
request.setExecHash("execHash".getBytes());
final ReceiveResponse response = mock(ReceiveResponse.class);
when(response.getPrivacyMode()).thenReturn(privacyMode);
when(response.getUnencryptedTransactionData()).thenReturn("decryptedData".getBytes());
when(response.getExecHash()).thenReturn("I Love sparrows".getBytes());
MessageHash messageHash = mock(MessageHash.class);
when(messageHash.getHashBytes()).thenReturn("SomeMessageHashBytes".getBytes());
when(response.getAffectedTransactions()).thenReturn(Set.of(messageHash));
when(encodedPayloadManager.decrypt(any(), eq(null))).thenReturn(response);
final Response result = encodedPayloadResource.decryptEncodedPayload(request);
assertThat(result.getStatus()).isEqualTo(200);
final com.quorum.tessera.api.ReceiveResponse payloadEncryptResponse = com.quorum.tessera.api.ReceiveResponse.class.cast(result.getEntity());
assertThat(payloadEncryptResponse.getPayload()).isEqualTo("decryptedData".getBytes());
assertThat(payloadEncryptResponse.getPrivacyFlag()).isEqualTo(privacyMode.getPrivacyFlag());
assertThat(payloadEncryptResponse.getAffectedContractTransactions()).contains(Base64.getEncoder().encodeToString("SomeMessageHashBytes".getBytes()));
assertThat(payloadEncryptResponse.getExecHash()).isEqualTo("I Love sparrows");
verify(encodedPayloadManager).decrypt(any(), eq(null));
}
use of com.quorum.tessera.api.PayloadEncryptResponse in project tessera by ConsenSys.
the class EncodedPayloadResourceTest method createPayloadVersion21.
@Test
public void createPayloadVersion21() {
final String base64Key = "BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo=";
final SendRequest sendRequest = new SendRequest();
sendRequest.setPayload(Base64.getEncoder().encode("PAYLOAD".getBytes()));
sendRequest.setTo(base64Key);
sendRequest.setAffectedContractTransactions("dHgx");
final PublicKey sender = PublicKey.from(Base64.getDecoder().decode("oNspPPgszVUFw0qmGFfWwh1uxVUXgvBxleXORHj07g8="));
when(transactionManager.defaultPublicKey()).thenReturn(sender);
final EncodedPayload samplePayload = EncodedPayload.Builder.create().withSenderKey(sender).withRecipientKeys(List.of(PublicKey.from(Base64.getDecoder().decode(base64Key)))).withRecipientBoxes(List.of("boxOne".getBytes())).withRecipientNonce("recipientNonce".getBytes()).withCipherText("testPayload".getBytes()).withCipherTextNonce("cipherTextNonce".getBytes()).withPrivacyMode(PrivacyMode.STANDARD_PRIVATE).withAffectedContractTransactions(Map.of(TxHash.from("tx1".getBytes()), "tx1val".getBytes())).withExecHash(new byte[0]).build();
when(encodedPayloadManager.create(any(com.quorum.tessera.transaction.SendRequest.class))).thenReturn(samplePayload);
final Response result = encodedPayloadResource.createEncodedPayload21(sendRequest);
assertThat(result.getStatus()).isEqualTo(200);
final PayloadEncryptResponse payloadEncryptResponse = Optional.of(result).map(Response::getEntity).map(PayloadEncryptResponse.class::cast).get();
assertThat(PublicKey.from(payloadEncryptResponse.getSenderKey())).isEqualTo(sender);
assertThat(payloadEncryptResponse.getCipherText()).isEqualTo("testPayload".getBytes());
assertThat(payloadEncryptResponse.getCipherTextNonce()).isEqualTo("cipherTextNonce".getBytes());
assertThat(payloadEncryptResponse.getRecipientBoxes()).hasSize(1).containsExactly("boxOne".getBytes());
assertThat(payloadEncryptResponse.getRecipientNonce()).isEqualTo("recipientNonce".getBytes());
assertThat(payloadEncryptResponse.getRecipientKeys()).hasSize(1);
assertThat(payloadEncryptResponse.getRecipientKeys().get(0)).isEqualTo(Base64.getDecoder().decode(base64Key));
assertThat(payloadEncryptResponse.getPrivacyMode()).isEqualTo(0);
assertThat(payloadEncryptResponse.getAffectedContractTransactions()).contains(entry("dHgx", "dHgxdmFs"));
assertThat(payloadEncryptResponse.getExecHash()).isEmpty();
final ArgumentCaptor<com.quorum.tessera.transaction.SendRequest> argumentCaptor = ArgumentCaptor.forClass(com.quorum.tessera.transaction.SendRequest.class);
verify(encodedPayloadManager).create(argumentCaptor.capture());
verify(transactionManager).defaultPublicKey();
com.quorum.tessera.transaction.SendRequest businessObject = argumentCaptor.getValue();
assertThat(businessObject).isNotNull();
assertThat(businessObject.getPayload()).isEqualTo(sendRequest.getPayload());
assertThat(businessObject.getSender()).isEqualTo(sender);
assertThat(businessObject.getRecipients()).hasSize(1);
assertThat(businessObject.getRecipients().get(0).encodeToBase64()).isEqualTo(base64Key);
assertThat(businessObject.getPrivacyMode()).isEqualTo(PrivacyMode.STANDARD_PRIVATE);
assertThat(businessObject.getAffectedContractTransactions()).containsExactly(new MessageHash("tx1".getBytes()));
assertThat(businessObject.getExecHash()).isEmpty();
}
use of com.quorum.tessera.api.PayloadEncryptResponse in project tessera by ConsenSys.
the class CustomPayloadEncryptionIT method payloadDecryptionFailsWithoutProperKeyAvailable.
@Test
public void payloadDecryptionFailsWithoutProperKeyAvailable() {
final Party sender = partyHelper.findByAlias(NodeAlias.A);
final Party recipient = partyHelper.findByAlias(NodeAlias.B);
final SendRequest sendRequest = new SendRequest();
sendRequest.setPayload(Base64.getEncoder().encode("Test Payload".getBytes()));
sendRequest.setTo(recipient.getPublicKey());
final Response encryptResult = sender.getRestClientWebTarget().path("/encodedpayload/create").request().post(Entity.entity(sendRequest, mediaType));
assertThat(encryptResult.getStatus()).isEqualTo(200);
final PayloadEncryptResponse payloadEncryptResponse = encryptResult.readEntity(PayloadEncryptResponse.class);
// purposefully remove the wrong box so it can't be decrypted
// since the key that corresponds to the remaining box isn't on that node
final String firstRecipientInList = Base64.getEncoder().encodeToString(payloadEncryptResponse.getRecipientKeys().get(0));
if (Objects.equals(firstRecipientInList, sender.getPublicKey())) {
payloadEncryptResponse.getRecipientBoxes().remove(1);
} else {
payloadEncryptResponse.getRecipientBoxes().remove(0);
}
payloadEncryptResponse.setRecipientKeys(Collections.emptyList());
final Response decryptResultForRecipient = recipient.getRestClientWebTarget().path("/encodedpayload/decrypt").request().post(Entity.entity(payloadEncryptResponse, mediaType));
assertThat(decryptResultForRecipient.getStatus()).isEqualTo(500);
}
use of com.quorum.tessera.api.PayloadEncryptResponse in project tessera by ConsenSys.
the class CustomPayloadEncryptionIT method createPayload.
@Test
public void createPayload() {
final Party sender = partyHelper.findByAlias(NodeAlias.A);
final SendRequest sendRequest = new SendRequest();
sendRequest.setPayload(Base64.getEncoder().encode("Test Payload".getBytes()));
sendRequest.setTo(partyHelper.getParties().map(Party::getPublicKey).toArray(String[]::new));
Response result = sender.getRestClientWebTarget().path("/encodedpayload/create").request().post(Entity.entity(sendRequest, mediaType));
assertThat(result.getStatus()).isEqualTo(200);
final PayloadEncryptResponse payloadEncryptResponse = result.readEntity(PayloadEncryptResponse.class);
assertThat(Base64.getEncoder().encodeToString(payloadEncryptResponse.getSenderKey())).isEqualTo(sender.getPublicKey());
assertThat(payloadEncryptResponse.getCipherText()).isNotEmpty();
assertThat(payloadEncryptResponse.getCipherTextNonce()).isNotEmpty();
assertThat(payloadEncryptResponse.getRecipientBoxes()).hasSize(4);
assertThat(payloadEncryptResponse.getRecipientNonce()).isNotEmpty();
assertThat(payloadEncryptResponse.getRecipientKeys()).hasSize(4).containsExactlyInAnyOrder(partyHelper.getParties().map(Party::getPublicKey).map(Base64.getDecoder()::decode).toArray(byte[][]::new));
assertThat(payloadEncryptResponse.getPrivacyMode()).isEqualTo(0);
assertThat(payloadEncryptResponse.getAffectedContractTransactions()).isEmpty();
assertThat(payloadEncryptResponse.getExecHash()).isEmpty();
}
Aggregations