| /* |
| * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. |
| * |
| * This code is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| */ |
| |
| /** |
| * @test |
| * @bug 8175029 |
| * @library ../../testlibrary |
| * @summary check that default implementation of |
| * X509Certificate.verify(PublicKey, Provider) works on custom |
| * X509Certificate impl. |
| */ |
| |
| import java.math.BigInteger; |
| import java.security.InvalidKeyException; |
| import java.security.NoSuchAlgorithmException; |
| import java.security.NoSuchProviderException; |
| import java.security.Principal; |
| import java.security.Provider; |
| import java.security.PublicKey; |
| import java.security.SignatureException; |
| import java.security.cert.CertificateEncodingException; |
| import java.security.cert.CertificateException; |
| import java.security.cert.CertificateExpiredException; |
| import java.security.cert.CertificateNotYetValidException; |
| import java.security.cert.X509Certificate; |
| import java.util.Collection; |
| import java.util.Date; |
| import java.util.List; |
| import java.util.Set; |
| |
| public class VerifyDefault { |
| private static final String TEST_CERT = |
| "-----BEGIN CERTIFICATE-----\n" + |
| "MIICvTCCAaWgAwIBAgIEGYqL9TANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRT\n" + |
| "ZWxmMB4XDTE3MDMyODE2NDcyNloXDTE3MDYyNjE2NDcyNlowDzENMAsGA1UEAxME\n" + |
| "U2VsZjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL1pfSJljFVSABOL\n" + |
| "tJbIVPEkz1+2AFgzY1hqwE0EH80lvhOEkiPPYCKwBE5VTZdyFfwFjpyx7eEeJMNT\n" + |
| "o7cixfmkQaiXHr/S1AS4BRTqLG/zgLzoJpVbzi45rnVEZc0oTm11KG3uUxkZTRr3\n" + |
| "5ORbYyZpkscKwHL2M0J/1GmnA1hmhQdwUQyIKxg4eKQwyE+/TdbFlCWVNnOlb+91\n" + |
| "eXvS11nIJ1oaBgn7u4qihuVmFmngLMxExnLYKV6AwdkwFD6pERObclRD9vAl5eUk\n" + |
| "+sM6zQYwfLdyC2i8e+ETBeOg1ijptM4KT5Uaq89zxjLR0DPH4S+aILp3gYHGrW5r\n" + |
| "eMxZAEMCAwEAAaMhMB8wHQYDVR0OBBYEFOME39JtbjzQaK3ufpKo/Pl4sZ8XMA0G\n" + |
| "CSqGSIb3DQEBCwUAA4IBAQCDcw0+Sf0yeVROVlb2/VV3oIblHkGQheXeIurW64k7\n" + |
| "tEzHtx9i8dnj5lzTZNH6hU4GRlyULbSDzjcM3P2XFRsM+0a/kEJZVqnLz5ji//7/\n" + |
| "ZXaRX0TiE2IfFOTGbO6LusO3yR4tOER/WHllz2H21C2SbW3+92Ou28glTZa42AAZ\n" + |
| "mUj9j+p6mZqD4/tUBqAEqqQoMIhw9CNjc46STNayBjt/0/+I2pfy6LagrMbjBzZ0\n" + |
| "A5kXg9WjnywGk8XFr/3RZz8DrUmCYs2qCYLCHQHsuCE6gCuf9wKhKyD51MFXXRr0\n" + |
| "cyG6LYQjrreMHYk4ZfN2NPC6lGjWxB5mIbV/DuikCnYu\n" + |
| "-----END CERTIFICATE-----"; |
| |
| private static class TestX509Certificate extends X509Certificate { |
| private final X509Certificate cert; |
| TestX509Certificate(X509Certificate cert) { |
| this.cert = cert; |
| } |
| public Set<String> getCriticalExtensionOIDs() { |
| return cert.getCriticalExtensionOIDs(); |
| } |
| public byte[] getExtensionValue(String oid) { |
| return cert.getExtensionValue(oid); |
| } |
| public Set<String> getNonCriticalExtensionOIDs() { |
| return cert.getNonCriticalExtensionOIDs(); |
| } |
| public boolean hasUnsupportedCriticalExtension() { |
| return cert.hasUnsupportedCriticalExtension(); |
| } |
| public void checkValidity() throws CertificateExpiredException, |
| CertificateNotYetValidException { |
| cert.checkValidity(); |
| } |
| public void checkValidity(Date date) throws CertificateExpiredException, |
| CertificateNotYetValidException { |
| cert.checkValidity(date); |
| } |
| public int getVersion() { return cert.getVersion(); } |
| public BigInteger getSerialNumber() { return cert.getSerialNumber(); } |
| public Principal getIssuerDN() { return cert.getIssuerDN(); } |
| public Principal getSubjectDN() { return cert.getSubjectDN(); } |
| public Date getNotBefore() { return cert.getNotBefore(); } |
| public Date getNotAfter() { return cert.getNotAfter(); } |
| public byte[] getTBSCertificate() throws CertificateEncodingException { |
| return cert.getTBSCertificate(); |
| } |
| public byte[] getSignature() { return cert.getSignature(); } |
| public String getSigAlgName() { return cert.getSigAlgName(); } |
| public String getSigAlgOID() { return cert.getSigAlgOID(); } |
| public byte[] getSigAlgParams() { return cert.getSigAlgParams(); } |
| public boolean[] getIssuerUniqueID() { |
| return cert.getIssuerUniqueID(); |
| } |
| public boolean[] getSubjectUniqueID() { |
| return cert.getSubjectUniqueID(); |
| } |
| public boolean[] getKeyUsage() { return cert.getKeyUsage(); } |
| public int getBasicConstraints() { return cert.getBasicConstraints(); } |
| public byte[] getEncoded() throws CertificateEncodingException { |
| return cert.getEncoded(); |
| } |
| public void verify(PublicKey key) throws CertificateException, |
| InvalidKeyException, NoSuchAlgorithmException, |
| NoSuchProviderException, SignatureException { |
| cert.verify(key); |
| } |
| public void verify(PublicKey key, String sigProvider) throws |
| CertificateException, InvalidKeyException, NoSuchAlgorithmException, |
| NoSuchProviderException, SignatureException { |
| cert.verify(key, sigProvider); |
| } |
| public PublicKey getPublicKey() { return cert.getPublicKey(); } |
| public String toString() { return cert.toString(); } |
| } |
| |
| public static void main(String[] args) throws Exception { |
| X509Certificate cert = CertUtils.getCertFromString(TEST_CERT); |
| new TestX509Certificate(cert).verify(cert.getPublicKey(), |
| (Provider)null); |
| } |
| } |