tbscertificatestructure.java
来自「《移动Agent技术》一书的所有章节源代码。」· Java 代码 · 共 192 行
JAVA
192 行
package org.bouncycastle.asn1.x509;import org.bouncycastle.asn1.*;import org.bouncycastle.asn1.pkcs.*;/** * <pre> * TBSCertificate ::= SEQUENCE { * version [ 0 ] Version DEFAULT v1(0), * serialNumber CertificateSerialNumber, * signature AlgorithmIdentifier, * issuer Name, * validity Validity, * subject Name, * subjectPublicKeyInfo SubjectPublicKeyInfo, * issuerUniqueID [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL, * subjectUniqueID [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL, * extensions [ 3 ] Extensions OPTIONAL * } * </pre> * <p> * Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class * will parse them, but you really shouldn't be creating new ones. */public class TBSCertificateStructure implements DEREncodable, X509ObjectIdentifiers, PKCSObjectIdentifiers{ DERConstructedSequence seq; DERInteger version; DERInteger serialNumber; AlgorithmIdentifier signature; X509Name issuer; DERUTCTime startDate, endDate; X509Name subject; SubjectPublicKeyInfo subjectPublicKeyInfo; DERBitString issuerUniqueId; DERBitString subjectUniqueId; X509Extensions extensions; public TBSCertificateStructure( DERConstructedSequence seq) { int seqStart = 0; this.seq = seq; // // some certficates don't include a version number - we assume v1 // if (seq.getObjectAt(0) instanceof DERTaggedObject) { version = (DERInteger)((DERTaggedObject)seq.getObjectAt(0)).getObject(); } else { seqStart = -1; // field 0 is missing! version = new DERInteger(0); } serialNumber = (DERInteger)seq.getObjectAt(seqStart + 1); if (seq.getObjectAt(seqStart + 2) instanceof AlgorithmIdentifier) { signature = (AlgorithmIdentifier)seq.getObjectAt(seqStart + 2); } else { signature = new AlgorithmIdentifier((DERConstructedSequence)seq.getObjectAt(seqStart + 2)); } if (seq.getObjectAt(seqStart + 3) instanceof X509Name) { issuer = (X509Name)seq.getObjectAt(seqStart + 3); } else { issuer = new X509Name((DERConstructedSequence)seq.getObjectAt(seqStart + 3)); } // // before and after dates // DERConstructedSequence dates = (DERConstructedSequence)seq.getObjectAt(seqStart + 4); startDate = (DERUTCTime)dates.getObjectAt(0); endDate = (DERUTCTime)dates.getObjectAt(1); if (seq.getObjectAt(seqStart + 5) instanceof X509Name) { subject = (X509Name)seq.getObjectAt(seqStart + 5); } else { subject = new X509Name((DERConstructedSequence)seq.getObjectAt(seqStart + 5)); } // // public key info. // if (seq.getObjectAt(seqStart + 6) instanceof SubjectPublicKeyInfo) { subjectPublicKeyInfo = (SubjectPublicKeyInfo)seq.getObjectAt(seqStart + 6); } else { subjectPublicKeyInfo = new SubjectPublicKeyInfo((DERConstructedSequence)seq.getObjectAt(seqStart + 6)); } for (int extras = seq.getSize() - (seqStart + 6) - 1; extras > 0; extras--) { DERTaggedObject extra = (DERTaggedObject)seq.getObjectAt(seqStart + 6 + extras); switch (extra.getTagNo()) { case 1: issuerUniqueId = (DERBitString)extra.getObject(); break; case 2: subjectUniqueId = (DERBitString)extra.getObject(); break; case 3: extensions = new X509Extensions((DERConstructedSequence)extra.getObject()); } } } public int getVersion() { return version.getValue().intValue() + 1; } public DERInteger getVersionNumber() { return version; } public DERInteger getSerialNumber() { return serialNumber; } public AlgorithmIdentifier getSignature() { return signature; } public X509Name getIssuer() { return issuer; } public DERUTCTime getStartDate() { return startDate; } public DERUTCTime getEndDate() { return endDate; } public X509Name getSubject() { return subject; } public SubjectPublicKeyInfo getSubjectPublicKeyInfo() { return subjectPublicKeyInfo; } public DERBitString getIssuerUniqueId() { return issuerUniqueId; } public DERBitString getSubjectUniqueId() { return subjectUniqueId; } public X509Extensions getExtensions() { return extensions; } public DERObject getDERObject() { return seq; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?