📄 ocsptest.java
字号:
{ fail("wrong extension type found."); } if (!areEqual(((ASN1OctetString)extObj).getOctets(), sampleNonce)) { fail("wrong extension value found."); } // // request list check // requests = req.getRequestList(); if (!requests[0].getCertID().equals(id)) { fail("Failed isFor test"); } // // response generation // BasicOCSPRespGenerator respGen = new BasicOCSPRespGenerator(signKP.getPublic()); respGen.addResponse(id, CertificateStatus.GOOD); BasicOCSPResp resp = respGen.generate("SHA1withRSA", signKP.getPrivate(), chain, new Date(), "BC"); OCSPRespGenerator rGen = new OCSPRespGenerator(); byte[] enc = rGen.generate(OCSPRespGenerator.SUCCESSFUL, resp).getEncoded(); } private void testIrregularVersionReq() throws Exception { OCSPReq ocspRequest = new OCSPReq(irregReq); X509Certificate cert = ocspRequest.getCerts("BC")[0]; if (!ocspRequest.verify(cert.getPublicKey(), "BC")) { fail("extra version encoding test failed"); } } public void performTest() throws Exception { String signDN = "O=Bouncy Castle, C=AU"; KeyPair signKP = OCSPTestUtil.makeKeyPair(); X509Certificate testCert = OCSPTestUtil.makeCertificate(signKP, signDN, signKP, signDN); String origDN = "CN=Eric H. Echidna, E=eric@bouncycastle.org, O=Bouncy Castle, C=AU"; GeneralName origName = new GeneralName(new X509Name(origDN)); // // general id value for our test issuer cert and a serial number. // CertificateID id = new CertificateID(CertificateID.HASH_SHA1, testCert, BigInteger.valueOf(1)); // // basic request generation // OCSPReqGenerator gen = new OCSPReqGenerator(); gen.addRequest( new CertificateID(CertificateID.HASH_SHA1, testCert, BigInteger.valueOf(1))); OCSPReq req = gen.generate(); if (req.isSigned()) { fail("signed but shouldn't be"); } X509Certificate[] certs = req.getCerts("BC"); if (certs != null) { fail("null certs expected, but not found"); } Req[] requests = req.getRequestList(); if (!requests[0].getCertID().equals(id)) { fail("Failed isFor test"); } // // request generation with signing // X509Certificate[] chain = new X509Certificate[1]; gen = new OCSPReqGenerator(); gen.setRequestorName(new GeneralName(GeneralName.directoryName, new X509Principal("CN=fred"))); gen.addRequest( new CertificateID(CertificateID.HASH_SHA1, testCert, BigInteger.valueOf(1))); chain[0] = testCert; req = gen.generate("SHA1withRSA", signKP.getPrivate(), chain, "BC"); if (!req.isSigned()) { fail("not signed but should be"); } if (!req.verify(signKP.getPublic(), "BC")) { fail("signature failed to verify"); } requests = req.getRequestList(); if (!requests[0].getCertID().equals(id)) { fail("Failed isFor test"); } certs = req.getCerts("BC"); if (certs == null) { fail("null certs found"); } if (certs.length != 1 || !certs[0].equals(testCert)) { fail("incorrect certs found in request"); } // // encoding test // byte[] reqEnc = req.getEncoded(); OCSPReq newReq = new OCSPReq(reqEnc); if (!newReq.verify(signKP.getPublic(), "BC")) { fail("newReq signature failed to verify"); } // // request generation with signing and nonce // chain = new X509Certificate[1]; gen = new OCSPReqGenerator(); Vector oids = new Vector(); Vector values = new Vector(); byte[] sampleNonce = new byte[16]; Random rand = new Random(); rand.nextBytes(sampleNonce); gen.setRequestorName(new GeneralName(GeneralName.directoryName, new X509Principal("CN=fred"))); oids.addElement(OCSPObjectIdentifiers.id_pkix_ocsp_nonce); values.addElement(new X509Extension(false, new DEROctetString(new DEROctetString(sampleNonce)))); gen.setRequestExtensions(new X509Extensions(oids, values)); gen.addRequest( new CertificateID(CertificateID.HASH_SHA1, testCert, BigInteger.valueOf(1))); chain[0] = testCert; req = gen.generate("SHA1withRSA", signKP.getPrivate(), chain, "BC"); if (!req.isSigned()) { fail("not signed but should be"); } if (!req.verify(signKP.getPublic(), "BC")) { fail("signature failed to verify"); } // // extension check. // Set extOids = req.getCriticalExtensionOIDs(); if (extOids.size() != 0) { fail("wrong number of critical extensions in OCSP request."); } extOids = req.getNonCriticalExtensionOIDs(); if (extOids.size() != 1) { fail("wrong number of non-critical extensions in OCSP request."); } byte[] extValue = req.getExtensionValue(OCSPObjectIdentifiers.id_pkix_ocsp_nonce.getId()); ASN1Encodable extObj = X509ExtensionUtil.fromExtensionValue(extValue); if (!(extObj instanceof ASN1OctetString)) { fail("wrong extension type found."); } if (!areEqual(((ASN1OctetString)extObj).getOctets(), sampleNonce)) { fail("wrong extension value found."); } // // request list check // requests = req.getRequestList(); if (!requests[0].getCertID().equals(id)) { fail("Failed isFor test"); } // // response parsing - test 1 // OCSPResp response = new OCSPResp(new ByteArrayInputStream(testResp1)); if (response.getStatus() != 0) { fail("response status not zero."); } BasicOCSPResp brep = (BasicOCSPResp)response.getResponseObject(); chain = brep.getCerts("BC"); if (!brep.verify(chain[0].getPublicKey(), "BC")) { fail("response 1 failed to verify."); } // // test 2 // SingleResp[] singleResp = brep.getResponses(); response = new OCSPResp(new ByteArrayInputStream(testResp2)); if (response.getStatus() != 0) { fail("response status not zero."); } brep = (BasicOCSPResp)response.getResponseObject(); chain = brep.getCerts("BC"); if (!brep.verify(chain[0].getPublicKey(), "BC")) { fail("response 2 failed to verify."); } singleResp = brep.getResponses(); // // simple response generation // OCSPRespGenerator respGen = new OCSPRespGenerator(); OCSPResp resp = respGen.generate(OCSPRespGenerator.SUCCESSFUL, response.getResponseObject()); if (!resp.getResponseObject().equals(response.getResponseObject())) { fail("response fails to match"); } testECDSA(); testRSA(); testIrregularVersionReq(); } public static void main( String[] args) { Security.addProvider(new BouncyCastleProvider()); runTest(new OCSPTest()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -