Search in sources :

Example 6 with PayloadEncryptResponse

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();
}
Also used : SendRequest(com.quorum.tessera.api.SendRequest) PayloadEncryptResponse(com.quorum.tessera.api.PayloadEncryptResponse) PublicKey(com.quorum.tessera.encryption.PublicKey) MessageHash(com.quorum.tessera.data.MessageHash) PayloadEncryptResponse(com.quorum.tessera.api.PayloadEncryptResponse) ReceiveResponse(com.quorum.tessera.transaction.ReceiveResponse) Response(jakarta.ws.rs.core.Response) Test(org.junit.Test)

Example 7 with PayloadEncryptResponse

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));
}
Also used : PayloadDecryptRequest(com.quorum.tessera.api.PayloadDecryptRequest) PayloadEncryptResponse(com.quorum.tessera.api.PayloadEncryptResponse) ReceiveResponse(com.quorum.tessera.transaction.ReceiveResponse) Response(jakarta.ws.rs.core.Response) Base64(java.util.Base64) ReceiveResponse(com.quorum.tessera.transaction.ReceiveResponse) MessageHash(com.quorum.tessera.data.MessageHash) Test(org.junit.Test)

Example 8 with PayloadEncryptResponse

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();
}
Also used : SendRequest(com.quorum.tessera.api.SendRequest) PayloadEncryptResponse(com.quorum.tessera.api.PayloadEncryptResponse) PublicKey(com.quorum.tessera.encryption.PublicKey) MessageHash(com.quorum.tessera.data.MessageHash) PayloadEncryptResponse(com.quorum.tessera.api.PayloadEncryptResponse) ReceiveResponse(com.quorum.tessera.transaction.ReceiveResponse) Response(jakarta.ws.rs.core.Response) Test(org.junit.Test)

Example 9 with PayloadEncryptResponse

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);
}
Also used : PayloadEncryptResponse(com.quorum.tessera.api.PayloadEncryptResponse) Response(jakarta.ws.rs.core.Response) ReceiveResponse(com.quorum.tessera.api.ReceiveResponse) Party(com.quorum.tessera.test.Party) SendRequest(com.quorum.tessera.api.SendRequest) PayloadEncryptResponse(com.quorum.tessera.api.PayloadEncryptResponse) Test(org.junit.Test)

Example 10 with PayloadEncryptResponse

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();
}
Also used : PayloadEncryptResponse(com.quorum.tessera.api.PayloadEncryptResponse) Response(jakarta.ws.rs.core.Response) ReceiveResponse(com.quorum.tessera.api.ReceiveResponse) Party(com.quorum.tessera.test.Party) SendRequest(com.quorum.tessera.api.SendRequest) PayloadEncryptResponse(com.quorum.tessera.api.PayloadEncryptResponse) Test(org.junit.Test)

Aggregations

PayloadEncryptResponse (com.quorum.tessera.api.PayloadEncryptResponse)10 Response (jakarta.ws.rs.core.Response)10 SendRequest (com.quorum.tessera.api.SendRequest)8 Test (org.junit.Test)8 ReceiveResponse (com.quorum.tessera.api.ReceiveResponse)6 MessageHash (com.quorum.tessera.data.MessageHash)6 PayloadDecryptRequest (com.quorum.tessera.api.PayloadDecryptRequest)4 PublicKey (com.quorum.tessera.encryption.PublicKey)4 Party (com.quorum.tessera.test.Party)4 ReceiveResponse (com.quorum.tessera.transaction.ReceiveResponse)4 EncodedPayload (com.quorum.tessera.enclave.EncodedPayload)2 PrivacyMode (com.quorum.tessera.enclave.PrivacyMode)2 RecipientBox (com.quorum.tessera.enclave.RecipientBox)2 TxHash (com.quorum.tessera.enclave.TxHash)2 EncodedPayloadManager (com.quorum.tessera.transaction.EncodedPayloadManager)2 TransactionManager (com.quorum.tessera.transaction.TransactionManager)2 MIME_TYPE_JSON_2_1 (com.quorum.tessera.version.MultiTenancyVersion.MIME_TYPE_JSON_2_1)2 Hidden (io.swagger.v3.oas.annotations.Hidden)2 Operation (io.swagger.v3.oas.annotations.Operation)2 Content (io.swagger.v3.oas.annotations.media.Content)2