Co-Assinatura e Contra-Assinatura BouncyCastle

Boa tarde pessoal

Tenho uma dúvida quanto co-assinaturas e contra-assinaturas utilizando a bouncycastle.

Quando um arquivo esta assinado apenas uma vez consigo capturar a assinatura sem problema.

Porém, quando assino o arquivo novamente só consigo visualizar a ultima assinatura, isto acontece porque não esta sendo feita uma co-assinatura e sim uma contra assinatura.

É possível incluir assinaturas no mesmo nível de outra assinatura em um arquivo já assinado?(isso ficou claro?)

Já tentei geras assinaturas adicionais das seguintes maneiras


	byte [] arquivoJaAssinado = (...);
	CMSSignedData signedDoc  = new CMSSignedData(arquivoJaAssinado);
	CMSSignedData signedDoc2 = new CMSSignedData();
	
	//assim é incluida uma contra-assinatura e na segunda 
	signedDoc2 = getSignedDataGenerator().generate(signedDoc.getSignedContent(),true,provider);
	
	e 
	
	//assim a primeira assinatura é ignorada e tenho um arquivo com uma assinatura apenas
	signedDoc2 = getSignedDataGenerator().generate(new CMSProcessableByteArray(
			signedDoc.getSignedContent().getContent()),true,provider);

[quote=Arturo]Boa tarde pessoal

Tenho uma dúvida quanto co-assinaturas e contra-assinaturas utilizando a bouncycastle.

Quando um arquivo esta assinado apenas uma vez consigo capturar a assinatura sem problema.

Porém, quando assino o arquivo novamente só consigo visualizar a ultima assinatura, isto acontece porque não esta sendo feita uma co-assinatura e sim uma contra assinatura.

É possível incluir assinaturas no mesmo nível de outra assinatura em um arquivo já assinado?(isso ficou claro?)

Já tentei geras assinaturas adicionais das seguintes maneiras
(…)
[/quote]

Não sei se ficou claro a questão de coassinaturas e contra assinaturas, por isso estou postando um exemplo esquemático das situações

Nesse caso as assinaturas não se interferem

<arquivoCoAssinado> <!--CMSenvelopedData-->

	<dado> <!--CMSSignedData-->
		dado
	</dado>
	
	<assinatura id="1"> <!--CMSSignerInfo-->
		assinatura1
	</assinatura>
	
	<assinatura id="2"> <!--CMSSignerInfo-->
		assinatura2
	</assinatura>
	
	<assinatura id="3"><!--CMSSignerInfo-->
		assinatura3
	</assinatura>
	
<arquivoCoAssinado>

nesse caso as assinaturas se interferem
assinatura mais externa anula a assinatura do EnvelopedData mais interno podendo até “esconder” uma possível invalidade.

<arquivoContraAssinado><!--CMSenvelopedData-->
	
	<dado> 

		<arquivoAssinado> <!--CMSenvelopedData-->

	              <dado> <!--CMSSignedData-->
		            dado
	              </dado>
	
	              <assinatura id="1"> <!--CMSSignerInfo-->
		            assinatura1
	              </assinatura>

		<arquivoAssinado>

	</dado>

	<!--essa assinatura anula a assinatura do EnvelopedData mais interno podendo até "esconder" uma possível invalidade-->
	<assinatura id="2"> 
		assinatura3
	</assinatura>
	
<arquivoContraAssinado>

Resolvido.

Pra variar foi só procurar na mailing list da bouncycastle.