BouncyCastle の SMIME パッケージを使用して、ECDSA X509 証明書を使用して暗号化されたメッセージを作成しようとしています。BouncyCastle のリリース ノートによると、これは 1.32 以降 (私は 1.46 を使用しています) からサポートされていますが、ECDSA OID の暗号が見つからないという例外が引き続き発生します。
org.bouncycastle.cms.CMSException: 例外ラッピング コンテンツ キー: 暗号を作成できません: 1.2.840.10045.2.1 をサポートするプロバイダーが見つかりません
これは、私が使用しているテスト証明書の 1 つからの抜粋です。
Version: V3
Subject: EMAILADDRESS=bob@example.com
Signature Algorithm: SHA256withECDSA, OID = 1.2.840.10045.4.3.2
Key: EC Public Key
暗号化されたメッセージを作成するために使用しているコードは次のようになります。
// allow the use of the BC JCE
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
SMIMEEnvelopedGenerator gen = new SMIMEEnvelopedGenerator();
JceKeyTransRecipientInfoGenerator rig = new JceKeyTransRecipientInfoGenerator(cert);
gen.addRecipientInfoGenerator(rig);
MimeBodyPart msg = new MimeBodyPart();
msg.setText(message);
MimeBodyPart mp = gen.generate(
msg,
new JceCMSContentEncryptorBuilder(
CMSAlgorithm.AES128_CBC).setProvider("BC").build());
Properties props = System.getProperties();
Session session = Session.getDefaultInstance(props, null);
// TODO: This is incorrect. Perhaps AKA is better?
String to = cert.getSubjectDN().getName();
Address fromUser = new InternetAddress(from);
Address toUser = new InternetAddress(to);
MimeMessage body = new MimeMessage(session);
body.setFrom(fromUser);
body.setRecipient(Message.RecipientType.TO, toUser);
body.setSubject("example encrypted message");
body.setContent(mp.getContent(), mp.getContentType());
body.saveChanges();
body.writeTo(new FileOutputStream(filename));
私は明らかに間違ったことをしていると確信していますが、今は見ていません。何か案は?