From 06f4e9714793683a8c601dd7799eb4d4918ced8e Mon Sep 17 00:00:00 2001
From: Giulia Tremolada <124147597+giulia-tremolada@users.noreply.github.com>
Date: Thu, 26 Sep 2024 09:18:25 +0200
Subject: [PATCH] [SELC-5507] feat: namirial implementation in
onboarding-crypto sdk (#500)
---
README.md | 22 +++---
apps/onboarding-functions/pom.xml | 6 +-
.../config/OnboardingFunctionConfig.java | 5 ++
apps/onboarding-ms/pom.xml | 4 +-
apps/pom.xml | 2 +-
libs/onboarding-sdk-azure-storage/pom.xml | 2 +-
libs/onboarding-sdk-common/pom.xml | 2 +-
libs/onboarding-sdk-crypto/pom.xml | 24 ++++++-
.../crypto/ArubaPkcs7HashSignServiceImpl.java | 5 ++
.../crypto/NamiralSignServiceImpl.java | 50 +++++++++++++
.../NamirialPkcs7HashSignServiceImpl.java | 24 +++++++
.../crypto/NamirialSignService.java | 8 +++
.../crypto/PadesSignServiceImpl.java | 45 ++++++++----
.../crypto/Pkcs7HashSignService.java | 7 ++
.../crypto/Pkcs7HashSignServiceImpl.java | 11 ++-
.../crypto/client/NamirialHttpClient.java | 72 +++++++++++++++++++
.../onboarding/crypto/entity/Credentials.java | 28 ++++++++
.../onboarding/crypto/entity/Preferences.java | 17 +++++
.../onboarding/crypto/entity/SignRequest.java | 36 ++++++++++
libs/onboarding-sdk-pom/pom.xml | 2 +-
libs/onboarding-sdk-product/pom.xml | 5 +-
test-coverage/pom.xml | 8 +--
22 files changed, 341 insertions(+), 44 deletions(-)
create mode 100644 libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/NamiralSignServiceImpl.java
create mode 100644 libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/NamirialPkcs7HashSignServiceImpl.java
create mode 100644 libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/NamirialSignService.java
create mode 100644 libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/client/NamirialHttpClient.java
create mode 100644 libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/entity/Credentials.java
create mode 100644 libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/entity/Preferences.java
create mode 100644 libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/entity/SignRequest.java
diff --git a/README.md b/README.md
index 47fb0641f..e7790f99b 100644
--- a/README.md
+++ b/README.md
@@ -44,16 +44,16 @@ trustworthy incremental builds, can only build java code natively, is recursive
struggles with partial repo checkouts) but can be made good use of with some tricks
and usage of a couple of lesser known command line switches.
-| Action | in working directory | with Maven |
-|:---------------------------------------------------------------------------------------------------|:----------------------:|:-----------------------------------------------------------------------------------|
-| Build the world | `.` | `mvn clean package -DskipTests` |
-| Run `onboarding-ms` | `.` | `java -jar apps/onboarding-ms/target/onboarding-ms-1.0.0-SNAPSHOT.jar` |
-| Build and test the world | `.` | `mvn clean package` |
-| Build the world | `./apps/onboarding-ms` | `mvn --file ../.. clean package -DskipTests` |
-| Build `onboarding-ms` and its dependencies | `.` | `mvn --projects :onboarding-ms --also-make clean package -DskipTests` |
-| Build `onboarding-ms` and its dependencies | `./apps/onboarding-ms` | `mvn --file ../.. --projects :onboarding-ms --also-make clean package -DskipTests` |
-| Build `onboarding-sdk` and its dependents (aka. reverse dependencies or *rdeps* in Bazel parlance) | `.` | `mvn --projects :onboarding-sdk-pom --also-make-dependents clean package -DskipTests` |
-| Print dependencies of `onboarding-sdk` | `./apps/onboarding-ms` | `mvn dependency:list` |
-| Change version of `onboarding-sdk` | `.` | `mvn versions:set -DnewVersion=0.1.2 --projects :onboarding-sdk-pom ` |
+| Action | in working directory | with Maven |
+|:---------------------------------------------------------------------------------------------------|:----------------------:|:--------------------------------------------------------------------------------------|
+| Build the world | `.` | `mvn clean package -DskipTests` |
+| Run `onboarding-ms` | `.` | `java -jar apps/onboarding-ms/target/onboarding-ms-1.0.0-SNAPSHOT.jar` |
+| Build and test the world | `.` | `mvn clean package` |
+| Build the world | `./apps/onboarding-ms` | `mvn --file ../.. clean package -DskipTests` |
+| Build `onboarding-ms` and its dependencies | `.` | `mvn --projects :onboarding-ms --also-make clean package -DskipTests` |
+| Build `onboarding-ms` and its dependencies | `./apps/onboarding-ms` | `mvn --file ../.. --projects :onboarding-ms --also-make clean package -DskipTests` |
+| Build `onboarding-sdk` and its dependents (aka. reverse dependencies or *rdeps* in Bazel parlance) | `.` | `mvn --projects :onboarding-sdk-pom --also-make-dependents clean package -DskipTests` |
+| Print dependencies of `onboarding-sdk` | `./apps/onboarding-ms` | `mvn dependency:list` |
+| Change version of `onboarding-sdk` | `.` | `mvn versions:set -DnewVersion=0.2.2 --projects :onboarding-sdk-pom ` |
| Persist version of `onboarding-sdk` | `.` | `mvn versions:commit ` |
diff --git a/apps/onboarding-functions/pom.xml b/apps/onboarding-functions/pom.xml
index aeb73f5ea..735c2cbd5 100644
--- a/apps/onboarding-functions/pom.xml
+++ b/apps/onboarding-functions/pom.xml
@@ -193,17 +193,17 @@
it.pagopa.selfcare
onboarding-sdk-crypto
- 0.2.1
+ 0.2.2
it.pagopa.selfcare
onboarding-sdk-azure-storage
- 0.2.1
+ 0.2.2
it.pagopa.selfcare
onboarding-sdk-product
- 0.2.1
+ 0.2.2
diff --git a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/config/OnboardingFunctionConfig.java b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/config/OnboardingFunctionConfig.java
index 26ecb43ba..c6552659b 100644
--- a/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/config/OnboardingFunctionConfig.java
+++ b/apps/onboarding-functions/src/main/java/it/pagopa/selfcare/onboarding/config/OnboardingFunctionConfig.java
@@ -65,6 +65,11 @@ public Pkcs7HashSignService arubaPkcs7HashSignService(){
public Pkcs7HashSignService disabledPkcs7HashSignService(){
log.info("Signature will be performed using Pkcs7HashSignService");
return new Pkcs7HashSignService(){
+ @Override
+ public boolean returnsFullPdf() {
+ return false;
+ }
+
@Override
public byte[] sign(InputStream inputStream) {
log.info("Signature source is disabled, skipping signing input file");
diff --git a/apps/onboarding-ms/pom.xml b/apps/onboarding-ms/pom.xml
index 1ecd481f1..4b207d701 100644
--- a/apps/onboarding-ms/pom.xml
+++ b/apps/onboarding-ms/pom.xml
@@ -237,12 +237,12 @@
it.pagopa.selfcare
onboarding-sdk-azure-storage
- 0.2.1
+ 0.2.2
it.pagopa.selfcare
onboarding-sdk-product
- 0.2.1
+ 0.2.2
diff --git a/apps/pom.xml b/apps/pom.xml
index db6db6bdc..786906827 100644
--- a/apps/pom.xml
+++ b/apps/pom.xml
@@ -16,7 +16,7 @@
it.pagopa.selfcare
onboarding-sdk-common
- 0.2.1
+ 0.2.2
diff --git a/libs/onboarding-sdk-azure-storage/pom.xml b/libs/onboarding-sdk-azure-storage/pom.xml
index 30e98a31b..c44460f1c 100644
--- a/libs/onboarding-sdk-azure-storage/pom.xml
+++ b/libs/onboarding-sdk-azure-storage/pom.xml
@@ -6,7 +6,7 @@
it.pagopa.selfcare
onboarding-sdk-pom
- 0.2.1
+ 0.2.2
../onboarding-sdk-pom
diff --git a/libs/onboarding-sdk-common/pom.xml b/libs/onboarding-sdk-common/pom.xml
index 8589ea588..a21aefd70 100644
--- a/libs/onboarding-sdk-common/pom.xml
+++ b/libs/onboarding-sdk-common/pom.xml
@@ -4,7 +4,7 @@
it.pagopa.selfcare
onboarding-sdk-pom
- 0.2.1
+ 0.2.2
../onboarding-sdk-pom
onboarding-sdk-common
diff --git a/libs/onboarding-sdk-crypto/pom.xml b/libs/onboarding-sdk-crypto/pom.xml
index 978776284..ce8f5a039 100644
--- a/libs/onboarding-sdk-crypto/pom.xml
+++ b/libs/onboarding-sdk-crypto/pom.xml
@@ -4,12 +4,15 @@
it.pagopa.selfcare
onboarding-sdk-pom
- 0.2.1
+ 0.2.2
../onboarding-sdk-pom
onboarding-sdk-crypto
onboarding-sdk-crypto
http://maven.apache.org
+
+ 1.45.0
+
@@ -75,6 +78,25 @@
2.1.3
test
+
+ com.google.http-client
+ google-http-client
+ ${google-http-client.version}
+
+
+ com.google.http-client
+ google-http-client-apache-v2
+ ${google-http-client.version}
+
+
+ com.google.http-client
+ google-http-client-jackson2
+ ${google-http-client.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
diff --git a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/ArubaPkcs7HashSignServiceImpl.java b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/ArubaPkcs7HashSignServiceImpl.java
index 2ef91123c..72067aa9b 100644
--- a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/ArubaPkcs7HashSignServiceImpl.java
+++ b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/ArubaPkcs7HashSignServiceImpl.java
@@ -15,4 +15,9 @@ public ArubaPkcs7HashSignServiceImpl(ArubaSignService arubaSignService) {
public byte[] sign(InputStream is) throws IOException {
return arubaSignService.pkcs7Signhash(is);
}
+
+ @Override
+ public boolean returnsFullPdf() {
+ return false;
+ }
}
diff --git a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/NamiralSignServiceImpl.java b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/NamiralSignServiceImpl.java
new file mode 100644
index 000000000..8dd1c014c
--- /dev/null
+++ b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/NamiralSignServiceImpl.java
@@ -0,0 +1,50 @@
+package it.pagopa.selfcare.onboarding.crypto;
+
+import it.pagopa.selfcare.onboarding.crypto.client.NamirialHttpClient;
+import it.pagopa.selfcare.onboarding.crypto.entity.Credentials;
+import it.pagopa.selfcare.onboarding.crypto.entity.Preferences;
+import it.pagopa.selfcare.onboarding.crypto.entity.SignRequest;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+
+
+public class NamiralSignServiceImpl implements NamirialSignService {
+
+ private final NamirialHttpClient namirialHttpClient;
+ private final String username;
+ private final String password;
+
+ // Constructor for manual dependency injection
+ public NamiralSignServiceImpl(String username,
+ String password
+ ) {
+ this.namirialHttpClient = new NamirialHttpClient();
+ this.username = username;
+ this.password = password;
+ }
+
+ @Override
+ public byte[] pkcs7Signhash(InputStream is) {
+ try {
+
+ Path tempFilePath = Files.createTempFile("tempfile", ".pdf");
+ File tempFile = tempFilePath.toFile();
+
+ // Copy InputStream data to the temporary file
+ Files.copy(is, tempFilePath, StandardCopyOption.REPLACE_EXISTING);
+
+ Credentials credentials = new Credentials(username, password);
+ Preferences preferences = new Preferences("SHA256");
+ SignRequest request = new SignRequest(tempFile, credentials, preferences);
+
+ return namirialHttpClient.signDocument(request);
+ } catch (IOException e) {
+ throw new IllegalStateException("Something gone wrong when invoking Namirial in order to calculate pkcs7 hash sign request", e);
+ }
+ }
+}
\ No newline at end of file
diff --git a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/NamirialPkcs7HashSignServiceImpl.java b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/NamirialPkcs7HashSignServiceImpl.java
new file mode 100644
index 000000000..7e114ba9e
--- /dev/null
+++ b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/NamirialPkcs7HashSignServiceImpl.java
@@ -0,0 +1,24 @@
+package it.pagopa.selfcare.onboarding.crypto;
+
+import java.io.InputStream;
+
+public class NamirialPkcs7HashSignServiceImpl implements Pkcs7HashSignService {
+
+ private final NamirialSignService namirialSignService;
+
+ public NamirialPkcs7HashSignServiceImpl(NamirialSignService namirialSignService) {
+ this.namirialSignService = namirialSignService;
+ }
+
+
+ @Override
+ public byte[] sign(InputStream is) {
+ return namirialSignService.pkcs7Signhash(is);
+ }
+
+
+ @Override
+ public boolean returnsFullPdf() {
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/NamirialSignService.java b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/NamirialSignService.java
new file mode 100644
index 000000000..b28d0eeec
--- /dev/null
+++ b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/NamirialSignService.java
@@ -0,0 +1,8 @@
+package it.pagopa.selfcare.onboarding.crypto;
+
+
+import java.io.InputStream;
+
+public interface NamirialSignService {
+ byte[] pkcs7Signhash(InputStream is);
+}
\ No newline at end of file
diff --git a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/PadesSignServiceImpl.java b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/PadesSignServiceImpl.java
index a08acc7fc..72bb865a7 100644
--- a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/PadesSignServiceImpl.java
+++ b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/PadesSignServiceImpl.java
@@ -7,7 +7,9 @@
import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureOptions;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileOutputStream;
+import java.io.InputStream;
import java.util.Calendar;
public class PadesSignServiceImpl implements PadesSignService {
@@ -20,21 +22,34 @@ public PadesSignServiceImpl(Pkcs7HashSignService pkcs7Signature) {
public void padesSign(File pdfFile, File signedPdfFile, SignatureInformation signInfo) {
CryptoUtils.createParentDirectoryIfNotExists(signedPdfFile);
- try (FileOutputStream fos = new FileOutputStream(signedPdfFile);
- PDDocument doc = PDDocument.load(pdfFile)){
-
- PDSignature signature = new PDSignature();
- signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE);
- signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED);
- signature.setName(signInfo.getName());
- signature.setLocation(signInfo.getLocation());
- signature.setReason(signInfo.getReason());
- signature.setSignDate(Calendar.getInstance());
- SignatureOptions signatureOptions = new SignatureOptions();
- signatureOptions.setPreferredSignatureSize(35944);
- doc.addSignature(signature, this.pkcs7Signature, signatureOptions);
- doc.saveIncremental(fos);
-
+ try (FileOutputStream fos = new FileOutputStream(signedPdfFile)){
+
+ /**
+ * The following condition ensures that the method handles both types of services correctly: those that return full PDFs
+ * and those that return just the signature:
+ * - If the service provides a complete, signed PDF, the method simply writes the returned PDF bytes to the output file.
+ * - If the service returns only the PKCS7 signature, the PDFBox library is used to attach the signature to the PDF before saving it to the output.
+ */
+ if(this.pkcs7Signature.returnsFullPdf()){
+ try(InputStream pdfInput = new FileInputStream(pdfFile)){
+ byte[] signedPdfBytes = this.pkcs7Signature.sign(pdfInput);
+ fos.write(signedPdfBytes);
+ }
+ } else {
+ try (PDDocument doc = PDDocument.load(pdfFile)) {
+ PDSignature signature = new PDSignature();
+ signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE);
+ signature.setSubFilter(PDSignature.SUBFILTER_ADBE_PKCS7_DETACHED);
+ signature.setName(signInfo.getName());
+ signature.setLocation(signInfo.getLocation());
+ signature.setReason(signInfo.getReason());
+ signature.setSignDate(Calendar.getInstance());
+ SignatureOptions signatureOptions = new SignatureOptions();
+ signatureOptions.setPreferredSignatureSize(35944);
+ doc.addSignature(signature, this.pkcs7Signature, signatureOptions);
+ doc.saveIncremental(fos);
+ }
+ }
} catch (Exception var12) {
throw new IllegalStateException(String.format("Something gone wrong while signing input pdf %s and storing it into %s", pdfFile.getAbsolutePath(), signedPdfFile.getAbsolutePath()), var12);
}
diff --git a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/Pkcs7HashSignService.java b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/Pkcs7HashSignService.java
index f15152ac6..b6fcbaf3e 100644
--- a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/Pkcs7HashSignService.java
+++ b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/Pkcs7HashSignService.java
@@ -3,4 +3,11 @@
import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureInterface;
public interface Pkcs7HashSignService extends SignatureInterface {
+
+ /**
+ * Determines whether the signing service returns a fully signed PDF.
+ * - If the service returns the entire PDF signed, this method should return true.
+ * - If the service returns only the PKCS7 signature, this method should return false.
+ */
+ boolean returnsFullPdf();
}
diff --git a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/Pkcs7HashSignServiceImpl.java b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/Pkcs7HashSignServiceImpl.java
index 45f093e12..d6bea7fb1 100644
--- a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/Pkcs7HashSignServiceImpl.java
+++ b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/Pkcs7HashSignServiceImpl.java
@@ -6,7 +6,9 @@
import it.pagopa.selfcare.onboarding.crypto.utils.CMSTypedDataInputStream;
import org.bouncycastle.cert.X509CertificateHolder;
import org.bouncycastle.cert.jcajce.JcaCertStore;
-import org.bouncycastle.cms.*;
+import org.bouncycastle.cms.CMSException;
+import org.bouncycastle.cms.CMSSignedData;
+import org.bouncycastle.cms.CMSSignedDataGenerator;
import org.bouncycastle.cms.jcajce.JcaSignerInfoGeneratorBuilder;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.operator.ContentSigner;
@@ -15,7 +17,8 @@
import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder;
import org.bouncycastle.util.Store;
-import java.io.*;
+import java.io.IOException;
+import java.io.InputStream;
import java.security.cert.CertificateEncodingException;
import java.util.Collections;
@@ -54,4 +57,8 @@ public byte[] sign(InputStream is) throws IOException {
}
}
+ @Override
+ public boolean returnsFullPdf() {
+ return false;
+ }
}
diff --git a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/client/NamirialHttpClient.java b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/client/NamirialHttpClient.java
new file mode 100644
index 000000000..ef9f062bb
--- /dev/null
+++ b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/client/NamirialHttpClient.java
@@ -0,0 +1,72 @@
+package it.pagopa.selfcare.onboarding.crypto.client;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.api.client.http.*;
+import com.google.api.client.http.javanet.NetHttpTransport;
+import it.pagopa.selfcare.onboarding.crypto.entity.SignRequest;
+import org.apache.pdfbox.io.IOUtils;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class NamirialHttpClient {
+
+ private static final String NAMIRIAL_BASE_URL = "https://sws.test.namirialtsp.com/SignEngineWeb";
+
+ private static final String NAMIRIAL_SIGN_PADES_URL = NAMIRIAL_BASE_URL + "/rest/service/signPAdES";
+
+ public byte[] signDocument(SignRequest request) throws IOException {
+ // Initialize HTTP Transport and Request Factory
+ HttpTransport httpTransport = new NetHttpTransport();
+ HttpRequestFactory requestFactory = httpTransport.createRequestFactory();
+
+ // Create the multipart content
+ MultipartContent multipartContent = new MultipartContent();
+ ObjectMapper objectMapper = new ObjectMapper();
+
+
+ String credentials = objectMapper.writeValueAsString(request.getCredentials());
+ String preferences = objectMapper.writeValueAsString(request.getPreferences());
+
+
+ multipartContent.addPart(
+ new MultipartContent.Part(
+ new HttpHeaders().set("Content-Disposition", "form-data; name=\"file\"; filename=\""+ request.getFile().getName() +"\""),
+ new FileContent("application/pdf", request.getFile())
+ )
+ );
+
+
+
+ multipartContent.addPart(
+ new MultipartContent.Part(
+ new HttpHeaders().set("Content-Disposition", "form-data; name=\"credentials\""),
+ new ByteArrayContent("application/json", credentials.getBytes())
+ )
+ );
+
+
+ multipartContent.addPart(
+ new MultipartContent.Part(
+ new HttpHeaders().set("Content-Disposition", "form-data; name=\"preferences\""),
+ new ByteArrayContent("application/json", preferences.getBytes())
+ )
+ );
+
+ // Build and execute the HTTP POST request
+ HttpRequest httpRequest = requestFactory.buildPostRequest(
+ new GenericUrl(NAMIRIAL_SIGN_PADES_URL), multipartContent);
+
+ // Set any required headers
+ httpRequest.getHeaders().setContentType("multipart/form-data;");
+
+
+ try {
+ HttpResponse httpResponse = httpRequest.execute();
+ InputStream is = httpResponse.getContent();
+ return IOUtils.toByteArray(is);
+ } catch (HttpResponseException e) {
+ throw new IllegalStateException("Something gone wrong when invoking Namirial in order to calculate pkcs7 hash sign request", e);
+ }
+ }
+}
\ No newline at end of file
diff --git a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/entity/Credentials.java b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/entity/Credentials.java
new file mode 100644
index 000000000..3a9b836f0
--- /dev/null
+++ b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/entity/Credentials.java
@@ -0,0 +1,28 @@
+package it.pagopa.selfcare.onboarding.crypto.entity;
+
+public class Credentials {
+ public String username;
+ public String password;
+
+ public Credentials(String username, String password) {
+ this.username = username;
+ this.password = password;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+}
\ No newline at end of file
diff --git a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/entity/Preferences.java b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/entity/Preferences.java
new file mode 100644
index 000000000..50afc4d0a
--- /dev/null
+++ b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/entity/Preferences.java
@@ -0,0 +1,17 @@
+package it.pagopa.selfcare.onboarding.crypto.entity;
+
+public class Preferences {
+ public String hashAlgorithm;
+
+ public Preferences(String hashAlgorithm) {
+ this.hashAlgorithm = hashAlgorithm;
+ }
+
+ public String getHashAlgorithm() {
+ return hashAlgorithm;
+ }
+
+ public void setHashAlgorithm(String hashAlgorithm) {
+ this.hashAlgorithm = hashAlgorithm;
+ }
+}
\ No newline at end of file
diff --git a/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/entity/SignRequest.java b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/entity/SignRequest.java
new file mode 100644
index 000000000..c5190ac94
--- /dev/null
+++ b/libs/onboarding-sdk-crypto/src/main/java/it/pagopa/selfcare/onboarding/crypto/entity/SignRequest.java
@@ -0,0 +1,36 @@
+package it.pagopa.selfcare.onboarding.crypto.entity;
+
+import com.google.api.client.util.Key;
+
+import java.io.File;
+
+public class SignRequest {
+
+ @Key("file")
+ private File file;
+
+ @Key("credentials")
+ private Credentials credentials;
+
+ @Key("preferences")
+ private Preferences preferences;
+
+ // Constructors, getters, and setters
+ public SignRequest(File fileContent, Credentials credentials, Preferences preferences) {
+ this.file = fileContent;
+ this.preferences = preferences;
+ this.credentials = credentials;
+ }
+
+ public File getFile() {
+ return file;
+ }
+
+ public Credentials getCredentials() {
+ return credentials;
+ }
+
+ public Preferences getPreferences() {
+ return preferences;
+ }
+}
\ No newline at end of file
diff --git a/libs/onboarding-sdk-pom/pom.xml b/libs/onboarding-sdk-pom/pom.xml
index 55fdb6a48..d560a7564 100644
--- a/libs/onboarding-sdk-pom/pom.xml
+++ b/libs/onboarding-sdk-pom/pom.xml
@@ -6,7 +6,7 @@
onboarding-sdk-pom
pom
onboarding-sdk-pom
- 0.2.1
+ 0.2.2
17
diff --git a/libs/onboarding-sdk-product/pom.xml b/libs/onboarding-sdk-product/pom.xml
index c69eb2706..a8432354b 100644
--- a/libs/onboarding-sdk-product/pom.xml
+++ b/libs/onboarding-sdk-product/pom.xml
@@ -4,15 +4,16 @@
it.pagopa.selfcare
onboarding-sdk-pom
- 0.2.1
+ 0.2.2
../onboarding-sdk-pom
onboarding-sdk-product
onboarding-sdk-product
- 0.2.1
+ 0.2.2
2.15.2
+ 0.2.2
diff --git a/test-coverage/pom.xml b/test-coverage/pom.xml
index 2f0c86059..33c9be6d9 100644
--- a/test-coverage/pom.xml
+++ b/test-coverage/pom.xml
@@ -77,22 +77,22 @@
it.pagopa.selfcare
onboarding-sdk-product
- 0.2.1
+ 0.2.2
it.pagopa.selfcare
onboarding-sdk-common
- 0.2.1
+ 0.2.2
it.pagopa.selfcare
onboarding-sdk-azure-storage
- 0.2.1
+ 0.2.2
it.pagopa.selfcare
onboarding-sdk-crypto
- 0.2.1
+ 0.2.2