/*
* Copyright 2014 The Netty Project
*
* The Netty Project licenses this file to you under the Apache License,
* version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package io.netty.handler.ssl;
import java.io.
ByteArrayInputStream;
import java.math.
BigInteger;
import java.security.
InvalidKeyException;
import java.security.
NoSuchAlgorithmException;
import java.security.
NoSuchProviderException;
import java.security.
Principal;
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.
Date;
import java.util.
Set;
final class
OpenSslX509Certificate extends
X509Certificate {
private final byte[]
bytes;
private
X509Certificate wrapped;
public
OpenSslX509Certificate(byte[]
bytes) {
this.
bytes =
bytes;
}
@
Override
public void
checkValidity() throws
CertificateExpiredException,
CertificateNotYetValidException {
unwrap().
checkValidity();
}
@
Override
public void
checkValidity(
Date date) throws
CertificateExpiredException,
CertificateNotYetValidException {
unwrap().
checkValidity(
date);
}
@
Override
public int
getVersion() {
return
unwrap().
getVersion();
}
@
Override
public
BigInteger getSerialNumber() {
return
unwrap().
getSerialNumber();
}
@
Override
public
Principal getIssuerDN() {
return
unwrap().
getIssuerDN();
}
@
Override
public
Principal getSubjectDN() {
return
unwrap().
getSubjectDN();
}
@
Override
public
Date getNotBefore() {
return
unwrap().
getNotBefore();
}
@
Override
public
Date getNotAfter() {
return
unwrap().
getNotAfter();
}
@
Override
public byte[]
getTBSCertificate() throws
CertificateEncodingException {
return
unwrap().
getTBSCertificate();
}
@
Override
public byte[]
getSignature() {
return
unwrap().
getSignature();
}
@
Override
public
String getSigAlgName() {
return
unwrap().
getSigAlgName();
}
@
Override
public
String getSigAlgOID() {
return
unwrap().
getSigAlgOID();
}
@
Override
public byte[]
getSigAlgParams() {
return
unwrap().
getSigAlgParams();
}
@
Override
public boolean[]
getIssuerUniqueID() {
return
unwrap().
getIssuerUniqueID();
}
@
Override
public boolean[]
getSubjectUniqueID() {
return
unwrap().
getSubjectUniqueID();
}
@
Override
public boolean[]
getKeyUsage() {
return
unwrap().
getKeyUsage();
}
@
Override
public int
getBasicConstraints() {
return
unwrap().
getBasicConstraints();
}
@
Override
public byte[]
getEncoded() {
return
bytes.
clone();
}
@
Override
public void
verify(
PublicKey key)
throws
CertificateException,
NoSuchAlgorithmException,
InvalidKeyException,
NoSuchProviderException,
SignatureException {
unwrap().
verify(
key);
}
@
Override
public void
verify(
PublicKey key,
String sigProvider)
throws
CertificateException,
NoSuchAlgorithmException,
InvalidKeyException,
NoSuchProviderException,
SignatureException {
unwrap().
verify(
key,
sigProvider);
}
@
Override
public
String toString() {
return
unwrap().
toString();
}
@
Override
public
PublicKey getPublicKey() {
return
unwrap().
getPublicKey();
}
@
Override
public boolean
hasUnsupportedCriticalExtension() {
return
unwrap().
hasUnsupportedCriticalExtension();
}
@
Override
public
Set<
String>
getCriticalExtensionOIDs() {
return
unwrap().
getCriticalExtensionOIDs();
}
@
Override
public
Set<
String>
getNonCriticalExtensionOIDs() {
return
unwrap().
getNonCriticalExtensionOIDs();
}
@
Override
public byte[]
getExtensionValue(
String oid) {
return
unwrap().
getExtensionValue(
oid);
}
private
X509Certificate unwrap() {
X509Certificate wrapped = this.
wrapped;
if (
wrapped == null) {
try {
wrapped = this.
wrapped = (
X509Certificate)
SslContext.
X509_CERT_FACTORY.
generateCertificate(
new
ByteArrayInputStream(
bytes));
} catch (
CertificateException e) {
throw new
IllegalStateException(
e);
}
}
return
wrapped;
}
}