¿Cómo firmar con RSASSA-PSS en Java correctamente?

Necesito codificar esta instrucción openssl-sign-in en java.

openssl dgst -sha256 -binary -out "signaturefile" .sig -sigopt rsa_padding_mode: pss -sigopt rsa_pss_saltlen: -1 -sign "privatekey" .pem "file2sign"

Esta instrucción proviene de Bundeszentralamt für Steuern (BZSt) - ELMA-File-Upload.

Bitte stellen Sie die Signaturerstellung daher auf RSASSA-PSS mit Folgenden Parametern um:

Hashverfahren: SHA-256

Función de generación de máscara: MGF1 con SHA-256 Länge des Salts: 32 Byte Trailer Campo: 0xBC

Ya he probado diferentes algoritmos de firma (con y sin bouncycastle) pero no obtuve el mismo resultado de firma que con openssl.

Esto es lo que estoy haciendo.

public class SignTest {

    public static void main(String[] args){
        Security.addProvider(new BouncyCastleProvider());

        Signature signatureSHA256Java = Signature.getInstance("SHA256withRSA/PSS");
        signatureSHA256Java.setParameter(new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 32, 1));

        signatureSHA256Java.initSign(KeyManagerHelper.getPrivateKeyFromKeyStore("privatekey"));
        signatureSHA256Java.update(byteArray);
        byte[] signSHA256Java = signatureSHA256Java.sign();

        // after that I compare the Java-sign-bytearry with the openssl one
        System.out.println("signSHA256Java == signSHA256Openssl:\n" + Arrays.equals(signSHA256Java, signSHA256Openssl));
    }
}
Respuesta 1

Los proyectos en cuestión son de múltiples organizaciones de código abierto, con múltiples reglas en sus gitignores / build.gradle / gradle wrappers. Mi JDK ancho del sistema predeterminado está configurado en Open Java 11. Yo ...

Tengo una aplicación Swing que se conecta directamente a la base de datos MySql para la autenticación del usuario. El código de bits de la aplicación estará disponible en Internet para descargar. La información de conexiones es ...

Estoy tratando de entender CopyOnWriteArrayList en mi código: Mi código es: public class AuditService {private CopyOnWriteArrayList <Audit> copyWrite; vaciado público (Auditoría ... auditorías) {...

Soy nuevo en Regexp. Me sorprende escribir expresiones regulares para el siguiente escenario. ¿Puede alguien ayudarme a resolver esto? Si tengo una cadena como la siguiente: <Tag1 attr = "test" /> <Tag2> & ...