O processo de se calcular o DigestValue de um arquivo XML não se resume a calcular o hash desse arquivo, mas possui outros passos intermediários:
Colocar o documento na forma canônica, tal como apontado por @Anthony Accioly;
Aplicar quaisquer transformações especificadas em Reference/Transforms. Se não há nenhum elemento Transforms, ou o mesmo está vazio (sem sub-elementos), então nada precisa ser feito.
Certifique-se que esses passos foram corretamente adotados e, se ainda tiver problemas em conseguir um resultado correto, acrescente mais detalhes à sua pergunta de modo a podermos ajudar mais (se possível mostrando o SignedInfo que quer atingir, um link para o arquivo XML e uma descrição dos passos e ferramentas que utilizou).
Nota: minha resposta anterior (em arquivo) não se aplica aqui, pois de fato o DigestValue é um simples hash e não uma assinatura digital (portanto invariante à presença ou não de um certificado).
Faltou um passo importante que é canonizar o XML. Recomendo o uso da classe Canonicalizer do projeto Apache Santuario (na verdade, eu não faria nada na mão, usaria essa biblioteca para tudo). Sobre o algoritmo basta aplicar um SHA1 para obter os bits (não a assinatura em HEX) e, em cima desses bits obter a Base64 da assinatura. A biblioteca Apache Commons Codec tem tudo que você precisa para a segunda parte. –
É para codificar em SHA1 e conveter em base64 eu utilizo essas bibliotecas que você citou.
É como já comentei:
- Primeiro precisa fazer ajustes no XML, dependendo de como está o XML, e de como "pediram".
- Depois é calculado um hash do documento ajustado
- Por último é que entra a assinatura do hash
O que é assinado não é exatamente o XML que estamos vendo.
E nisso ainda pode entrar codepage e conversão UTF-8.
O complicado é descobrir os detalhes.
Principalmente porque o pessoal já usa alguma ferramenta que faz tudo sozinho, e nem precisa saber dos detalhes.
Se começar a misturar ferramentas diferentes, ou estilo batch, aí mais chances de falhas.
Uma coisa que falta é até um passo a passo, não só do "manual", mas também de cada cálculo intermediário.
Só conferir o resultado final, ficamos sem saber em que parte se encontra o erro.
A partir daí, podemos estar estragando ao invés de estar consertando.