:-) nie chce się gniewać.
Przerobiłem troszkę mój kod i teraz wygląga następująco:
public byte[] generateEnv (byte[] file) throws Exception {
CMSEnvelopedDataGenerator dataGenerator =new CMSEnvelopedDataGenerator();
dataGenerator.addKeyTransRecipient(getCert());
CMSProcessableByteArray byteArray = new CMSProcessableByteArray(file );
CMSEnvelopedData envelopedData = null;
envelopedData = dataGenerator.generate(byteArray, CMSEnvelopedDataGenerator.DES_EDE3_CBC, "BC");
byte[] result = envelopedData.getEncoded();
System.out.println(new String(result));
System.out.println(result);
return result;
}
Po wywołaniu metody generateEnv() wywala mi błąd:
Exception in thread "main" org.bouncycastle.cms.CMSException: key invalid in message.
at org.bouncycastle.cms.CMSEnvelopedDataGenerator.generate(Unknown Source)
at org.bouncycastle.cms.CMSEnvelopedDataGenerator.generate(Unknown Source)
at ccc.Generate.generateEnv(Generate.java:91)
at ccc.wysyłka.main(wysyłka.java:40)
Caused by: java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
... 4 more
Nie za bardzo potrafię sobie wytłumaczyć o co chodzi. Tzn. rozumiem, że jest nieprawidłowy klucz i jego rozmiar.
Rozumiem, że klucz jest wyciągany z certyfikatu, który zapodałem. Certyfikat jest w formacie .pem, więc znajduje się w nim klucz publiczny, natomiast prywatnego nie ma, a chyba gdzieś czytałem, że do opakowania w EnvelopedData potrzebny jest także klucz prywatny. Ale z drugiej strony wtedy metoda nie przyjmowałaby jako parametru certyfikatu typu X509Certificate?