package org.bouncycastle.jce.provider.test.rsa3; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.bouncycastle.openssl.PEMReader; import java.io.InputStreamReader; import java.io.Reader; import java.security.Security; import java.security.Signature; import java.security.cert.X509Certificate; /** * Marius Schilder's Bleichenbacher's Forgery Attack Tests */ public class RSA3CertTest extends TestCase { public void setUp() { if (Security.getProvider("BC") == null) { Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); } } public void testA() throws Exception { doTest("self-testcase-A.pem"); } public void testB() throws Exception { doTest("self-testcase-B.pem"); } public void testC() throws Exception { doTest("self-testcase-C.pem"); } public void testD() throws Exception { doTest("self-testcase-D.pem"); } public void testE() throws Exception { doTest("self-testcase-E.pem"); } public void testF() throws Exception { doTest("self-testcase-F.pem"); } public void testG() throws Exception { doTest("self-testcase-G.pem"); } public void testH() throws Exception { doTest("self-testcase-H.pem"); } public void testI() throws Exception { doTest("self-testcase-I.pem"); } public void testJ() throws Exception { doTest("self-testcase-J.pem"); } public void testL() throws Exception { doTest("self-testcase-L.pem"); } private void doTest( String certName) throws Exception { X509Certificate cert = loadCert(certName); byte[] tbs = cert.getTBSCertificate(); Signature sig = Signature.getInstance(cert.getSigAlgName(), "BC"); sig.initVerify(cert.getPublicKey()); sig.update(tbs); assertFalse(sig.verify(cert.getSignature())); } private X509Certificate loadCert( String certName) throws Exception { Reader in = new InputStreamReader(getClass().getResourceAsStream(certName)); PEMReader rd = new PEMReader(in); return (X509Certificate)rd.readObject(); } public static void main (String[] args) throws Exception { junit.textui.TestRunner.run(suite()); } public static Test suite() throws Exception { TestSuite suite = new TestSuite("Bleichenbacher's Forgery Attack Tests"); suite.addTestSuite(RSA3CertTest.class); return suite; } }