📄 jdkx509certificatefactory.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: JDKX509CertificateFactory.java
package org.bouncycastle.jce.provider;
import java.io.*;
import java.security.cert.*;
import java.util.*;
import org.bouncycastle.asn1.*;
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
import org.bouncycastle.asn1.pkcs.SignedData;
import org.bouncycastle.asn1.x509.CertificateList;
import org.bouncycastle.asn1.x509.X509CertificateStructure;
import org.bouncycastle.util.encoders.Base64;
// Referenced classes of package org.bouncycastle.jce.provider:
// PKIXCertPath, X509CRLObject, X509CertificateObject
public class JDKX509CertificateFactory extends CertificateFactorySpi
{
private SignedData sData;
private int sDataObjectCount;
public JDKX509CertificateFactory()
{
sData = null;
sDataObjectCount = 0;
}
private String readLine(InputStream in)
throws IOException
{
StringBuffer l = new StringBuffer();
int c;
do
{
if ((c = in.read()) == 10 || c < 0)
break;
if (c != 13)
l.append((char)c);
} while (true);
if (c < 0)
return null;
else
return l.toString();
}
private Certificate readDERCertificate(InputStream in)
throws IOException
{
DERInputStream dIn = new DERInputStream(in);
ASN1Sequence seq = (ASN1Sequence)dIn.readObject();
if (seq.size() > 1 && (seq.getObjectAt(0) instanceof DERObjectIdentifier) && seq.getObjectAt(0).equals(PKCSObjectIdentifiers.signedData))
{
sData = new SignedData(ASN1Sequence.getInstance((ASN1TaggedObject)seq.getObjectAt(1), true));
return new X509CertificateObject(X509CertificateStructure.getInstance(sData.getCertificates().getObjectAt(sDataObjectCount++)));
} else
{
return new X509CertificateObject(X509CertificateStructure.getInstance(seq));
}
}
private Certificate readPKCS7Certificate(InputStream in)
throws IOException
{
BERInputStream dIn = new BERInputStream(in);
ASN1Sequence seq = (ASN1Sequence)dIn.readObject();
if (seq.size() > 1 && (seq.getObjectAt(0) instanceof DERObjectIdentifier) && seq.getObjectAt(0).equals(PKCSObjectIdentifiers.signedData))
{
sData = new SignedData(ASN1Sequence.getInstance((ASN1TaggedObject)seq.getObjectAt(1), true));
return new X509CertificateObject(X509CertificateStructure.getInstance(sData.getCertificates().getObjectAt(sDataObjectCount++)));
} else
{
return new X509CertificateObject(X509CertificateStructure.getInstance(seq));
}
}
private Certificate readPEMCertificate(InputStream in)
throws IOException
{
StringBuffer pemBuf = new StringBuffer();
String line;
while ((line = readLine(in)) != null && !line.equals("-----BEGIN CERTIFICATE-----") && !line.equals("-----BEGIN X509 CERTIFICATE-----")) ;
for (; (line = readLine(in)) != null && !line.equals("-----END CERTIFICATE-----") && !line.equals("-----END X509 CERTIFICATE-----"); pemBuf.append(line));
if (pemBuf.length() != 0)
{
ByteArrayInputStream bIn = new ByteArrayInputStream(Base64.decode(pemBuf.toString()));
return readDERCertificate(bIn);
} else
{
return null;
}
}
private CRL readDERCRL(InputStream in)
throws IOException
{
DERInputStream dIn = new DERInputStream(in);
return new X509CRLObject(new CertificateList((ASN1Sequence)dIn.readObject()));
}
private CRL readPEMCRL(InputStream in)
throws IOException
{
StringBuffer pemBuf = new StringBuffer();
String line;
while ((line = readLine(in)) != null && !line.equals("-----BEGIN CRL-----") && !line.equals("-----BEGIN X509 CRL-----")) ;
for (; (line = readLine(in)) != null && !line.equals("-----END CRL-----") && !line.equals("-----END X509 CRL-----"); pemBuf.append(line));
if (pemBuf.length() != 0)
{
ByteArrayInputStream bIn = new ByteArrayInputStream(Base64.decode(pemBuf.toString()));
return readDERCRL(bIn);
} else
{
return null;
}
}
public Certificate engineGenerateCertificate(InputStream in)
throws CertificateException
{
if (sData != null && sDataObjectCount != sData.getCertificates().size())
return new X509CertificateObject(X509CertificateStructure.getInstance(sData.getCertificates().getObjectAt(sDataObjectCount++)));
if (!in.markSupported())
in = new BufferedInputStream(in);
int tag;
in.mark(10);
tag = in.read();
if (tag == -1)
return null;
if (tag == 48)
break MISSING_BLOCK_LABEL_106;
in.reset();
return readPEMCertificate(in);
if (in.read() != 128)
break MISSING_BLOCK_LABEL_126;
in.reset();
return readPKCS7Certificate(in);
in.reset();
return readDERCertificate(in);
IOException e;
e;
throw new CertificateException(e.toString());
}
public Collection engineGenerateCertificates(InputStream inStream)
throws CertificateException
{
ArrayList certs = new ArrayList();
Certificate cert;
while ((cert = engineGenerateCertificate(inStream)) != null)
certs.add(cert);
return certs;
}
public CRL engineGenerateCRL(InputStream inStream)
throws CRLException
{
if (!inStream.markSupported())
inStream = new BufferedInputStream(inStream);
inStream.mark(10);
if (inStream.read() == 48)
break MISSING_BLOCK_LABEL_41;
inStream.reset();
return readPEMCRL(inStream);
inStream.reset();
return readDERCRL(inStream);
IOException e;
e;
throw new CRLException(e.toString());
}
public Collection engineGenerateCRLs(InputStream inStream)
throws CRLException
{
return null;
}
public Iterator engineGetCertPathEncodings()
{
return PKIXCertPath.certPathEncodings.iterator();
}
public CertPath engineGenerateCertPath(InputStream inStream)
throws CertificateException
{
return engineGenerateCertPath(inStream, "PkiPath");
}
public CertPath engineGenerateCertPath(InputStream inStream, String encoding)
throws CertificateException
{
return new PKIXCertPath(inStream, encoding);
}
public CertPath engineGenerateCertPath(List certificates)
throws CertificateException
{
for (Iterator iter = certificates.iterator(); iter.hasNext();)
{
Object obj = iter.next();
if (obj != null && !(obj instanceof X509Certificate))
throw new CertificateException((new StringBuilder()).append("list contains none X509Certificate object while creating CertPath\n").append(obj.toString()).toString());
}
return new PKIXCertPath(certificates);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -