Como tornar “MessageDigest SHA-1 e Assinatura NONEwithRSA” equivalente a “Assinatura SHA1withRSA”

Estou interessado em aplicar um hash SHA-1 com assinatura RSA a alguns dados, mas preciso fazer isso em duas etapas - aplique o hash primeiro e depois assine os dados. A função Signature.sign () parece criar uma estrutura de dados mais complexa (ASN.1?) Que é finalmente assinada (consulteessa questão) Como posso fazer os dois equivalentes sem usar bibliotecas externas como o BouncyCastle?

Aplique hash e faça login em uma única etapa com Assinatura:

PrivateKey privatekey = (PrivateKey) keyStore.getKey(alias, null);
...
sig = Signature.getInstance("SHA1withRSA", "SunMSCAPI");
sig.initSign(privatekey);
sig.update(data_to_sign);
byte[] bSignedData_CAPISHA1_CAPIRSA = sig.sign();

Aplique o hash via MessageDigest e assine com Signature:

PrivateKey privatekey = (PrivateKey) keyStore.getKey(alias, null);
...
MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
byte[] data_to_sign = sha1.digest(bdataToSign);
Signature sig = Signature.getInstance("NONEwithRSA", "SunMSCAPI");
sig.initSign(privatekey);
sig.update(data_to_sign);
byte[] bSignedData_JAVASHA1_CAPIRSA = sig.sign();
...

Estou procurando a seguinte equivalência:

bSignedData_JAVASHA1_CAPIRSA == bSignedData_CAPISHA1_CAPIRSA

Meu objetivo final é criar o hash e assinar com um token PKCS11, mas exijo que os dados assinados tenham o mesmo formato dos dados herdados para fins de verificação.

questionAnswers(2)

yourAnswerToTheQuestion