2012-11-22 12 views
5

Mam obiekt klasy X509CertificateObject, pasujący do klucza RSAPublicKey i udało się utworzyć tablicę bajtów zawierającą poprawny certyfikat cyfrowy dla niektórych obiektów komunikatów również jako tablicę bajtów.Konwersja wiadomości i podpisu do obiektu BouncyCastle CMSSignedData

Niestety system, który buduję, akceptuje tylko obiekty CMSSignedData jako dane wejściowe. Jak przekonwertować podstawowe bloki konstrukcyjne na tak ważny obiekt CMSSignedData?

Tło: Eksperymentuję z Java Bouncy Castle RSA ślepe podpisy zgodnie z this example (digest jest SHA512) i trzeba podać wynik do standardowego przetwarzania podpisu.

Odpowiedz

0

Po pierwsze, prawdopodobnie będziesz chciał podpisać swoje dane kluczem prywatnym. Chodzi o to, że podpis powinien być czymś, co tylko Ty możesz stworzyć. Jeden otrzymasz, że reszta powinna być następująca:


X509Certificate signingCertificate = getSigningCertificate(); 
//The chain of certificates that issued your signing certificate and so on 
Collection&ltX509Certificate> certificateChain = getCertificateChain(); 
PrivateKey pk = getPrivateKey(); 
byte[] message = "SomeMessage".getBytes(); 

CMSSignedDataGenerator generator = new CMSSignedDataGenerator(); 
certificateChain.add(signingCertificate); 
generator.addCertificates(new CollectionStore(certificateChain)); 

JcaDigestCalculatorProviderBuilder jcaDigestProvider = new JcaDigestCalculatorProviderBuilder(); 
jcaDigestProvider.setProvider(new BouncyCastleProvider()); 
JcaSignerInfoGeneratorBuilder singerInfoGenerator = new JcaSignerInfoGeneratorBuilder(jcaDigestProvider.build()); 

AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find("SHA1withRSA"); 
AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlgId); 
AsymmetricKeyParameter privateKeyParam = PrivateKeyFactory.createKey(pk.getEncoded()); 
ContentSigner cs = new BcRSAContentSignerBuilder(sigAlgId, digAlgId).build(privateKeyParam); 

SignerInfoGenerator sig = singerInfoGenerator.build(cs, signingCertificate); 
generator.addSignerInfoGenerator(sig); 

CMSSignedData data = generator.generate(new CMSProcessableByteArray(message), true); 
Powiązane problemy