Assinar String usando algoritmos RSA e SHA-1

Bom dia galera.

Estou desenvolvendo uma aplicação para consumir o webservice do tribunal de justiça.

Para realizar o login eu preciso consumir dois serviços (SolicitaLogon e ConfirmaLogon).

No serviço (SolicitaLogon) eu envio minha identificação e assino o xml, o webservice me retorna um xml com a confirmação da identificação e uma tag contendo uma String.
Eu preciso assinar essa String utilizando algoritmos RSA e SHA1 e converter para Base64.

Texto do manual:
Assinatura do desafio retornado na tag e envio do desafio assinado para
confirmação do logon. Para isso será utilizado o serviço ?ConfirmaLogon?.
A assinatura digital do desafio deverá ser realizada utilizando-se os algoritmos RSA e SHA1.
O formato de saída da assinatura deverá ser base 64.

Para esse procedimento estou utilizando o seguinte código:

public String assinarDesafio(String desafio) throws Exception{
           
    loadCertificates(); //Carrega meu certificado
          
    MessageDigest digest = MessageDigest.getInstance("SHA-1");  
    digest.reset();  
    byte[] input = digest.digest(desafio.getBytes("UTF-8")); 
    

    byte[] sha1hash = new byte[1024];        
    Signature dsa = Signature.getInstance("SHA1withRSA");
    dsa.initSign(privateKey); 
    dsa.update(input);
    sha1hash = dsa.sign();
          
    String desafioAssinado = Base64.encodeBase64String(sha1hash);
    return desafioAssinado;
    
}

Porém o webservice me retorna o xml com erro, dizendo o que o desafio é inválido.

Já tentei somente assinar, sem passar no (digest), mas retornou o mesmo erro.

Não sei o que estou fazendo de errado.
Alguém já consumiu esse serviço?
Alguma ideia do que eu esteja fazendo de errado.

Manual completo:
http://www.mpce.mp.br/servicos/licitacoes/arquivos/MAR-SAJ-2011%200001-PADRAO%20DE%20INTEGRACAO_TJCE_InstituicoesConveniadas.pdf

Valeu.

Olá DarkRayman… você conseguiu resolver este problema? Estou com o mesmo caso só que para o TJ de São Paulo.