116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropackage org.bouncycastle.asn1.x509; 216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.math.BigInteger; 416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.util.Enumeration; 516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1EncodableVector; 716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Integer; 816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Object; 916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1OctetString; 1016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Primitive; 1116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Sequence; 1216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1TaggedObject; 1316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.DEROctetString; 1416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.DERSequence; 1516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.DERTaggedObject; 1616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.crypto.Digest; 17c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// BEGIN android-changed 18c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giroimport org.bouncycastle.crypto.digests.AndroidDigestFactory; 19c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro// END android-changed 2016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 2116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro/** 2216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * The AuthorityKeyIdentifier object. 2316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * <pre> 2416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 } 2516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 2616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * AuthorityKeyIdentifier ::= SEQUENCE { 2716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * keyIdentifier [0] IMPLICIT KeyIdentifier OPTIONAL, 2816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * authorityCertIssuer [1] IMPLICIT GeneralNames OPTIONAL, 2916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * authorityCertSerialNumber [2] IMPLICIT CertificateSerialNumber OPTIONAL } 3016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 3116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * KeyIdentifier ::= OCTET STRING 3216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * </pre> 3316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 3416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 3516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropublic class AuthorityKeyIdentifier 3616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro extends ASN1Object 3716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro{ 3816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1OctetString keyidentifier=null; 3916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro GeneralNames certissuer=null; 4016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1Integer certserno=null; 4116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 4216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public static AuthorityKeyIdentifier getInstance( 4316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1TaggedObject obj, 4416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro boolean explicit) 4516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 4616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return getInstance(ASN1Sequence.getInstance(obj, explicit)); 4716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 4816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 4916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public static AuthorityKeyIdentifier getInstance( 5016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro Object obj) 5116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 5216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (obj instanceof AuthorityKeyIdentifier) 5316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 5416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return (AuthorityKeyIdentifier)obj; 5516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 5616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (obj != null) 5716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 5816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new AuthorityKeyIdentifier(ASN1Sequence.getInstance(obj)); 5916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 6016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 6116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return null; 6216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 6316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 6416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public static AuthorityKeyIdentifier fromExtensions(Extensions extensions) 6516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 6616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return AuthorityKeyIdentifier.getInstance(extensions.getExtensionParsedValue(Extension.authorityKeyIdentifier)); 6716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 6816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 6916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro protected AuthorityKeyIdentifier( 7016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1Sequence seq) 7116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 7216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro Enumeration e = seq.getObjects(); 7316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 7416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro while (e.hasMoreElements()) 7516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 7616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1TaggedObject o = DERTaggedObject.getInstance(e.nextElement()); 7716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 7816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro switch (o.getTagNo()) 7916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 8016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro case 0: 8116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.keyidentifier = ASN1OctetString.getInstance(o, false); 8216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro break; 8316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro case 1: 8416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.certissuer = GeneralNames.getInstance(o, false); 8516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro break; 8616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro case 2: 8716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.certserno = ASN1Integer.getInstance(o, false); 8816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro break; 8916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro default: 9016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro throw new IllegalArgumentException("illegal tag"); 9116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 9216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 9316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 9416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 9516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 9616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 9716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * Calulates the keyidentifier using a SHA1 hash over the BIT STRING 9816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * from SubjectPublicKeyInfo as defined in RFC2459. 9916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 10016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * Example of making a AuthorityKeyIdentifier: 10116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * <pre> 10216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * SubjectPublicKeyInfo apki = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream( 10316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * publicKey.getEncoded()).readObject()); 10416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * AuthorityKeyIdentifier aki = new AuthorityKeyIdentifier(apki); 10516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * </pre> 10653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * @deprecated create the extension using org.bouncycastle.cert.X509ExtensionUtils 10716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro **/ 10816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public AuthorityKeyIdentifier( 10916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro SubjectPublicKeyInfo spki) 11016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 111c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // BEGIN android-changed 112c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro Digest digest = AndroidDigestFactory.getSHA1(); 113c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // END android-changed 11416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro byte[] resBuf = new byte[digest.getDigestSize()]; 11516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 11616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro byte[] bytes = spki.getPublicKeyData().getBytes(); 11716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro digest.update(bytes, 0, bytes.length); 11816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro digest.doFinal(resBuf, 0); 11916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.keyidentifier = new DEROctetString(resBuf); 12016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 12116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 12216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 12316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * create an AuthorityKeyIdentifier with the GeneralNames tag and 12416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * the serial number provided as well. 12553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro * @deprecated create the extension using org.bouncycastle.cert.X509ExtensionUtils 12616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 12716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public AuthorityKeyIdentifier( 12816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro SubjectPublicKeyInfo spki, 12916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro GeneralNames name, 13016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro BigInteger serialNumber) 13116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 132c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // BEGIN android-changed 133c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro Digest digest = AndroidDigestFactory.getSHA1(); 134c1040cb5656c3299f1c2d0fe0bd7c44b10466aafSergio Giro // END android-changed 13516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro byte[] resBuf = new byte[digest.getDigestSize()]; 13616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 13716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro byte[] bytes = spki.getPublicKeyData().getBytes(); 13816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro digest.update(bytes, 0, bytes.length); 13916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro digest.doFinal(resBuf, 0); 14016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 14116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.keyidentifier = new DEROctetString(resBuf); 14216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.certissuer = GeneralNames.getInstance(name.toASN1Primitive()); 14316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.certserno = new ASN1Integer(serialNumber); 14416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 14516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 14616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 14716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * create an AuthorityKeyIdentifier with the GeneralNames tag and 14816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * the serial number provided. 14916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 15016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public AuthorityKeyIdentifier( 15116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro GeneralNames name, 15216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro BigInteger serialNumber) 15316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 15453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro this((byte[])null, name, serialNumber); 15516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 15616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 15716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 15816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * create an AuthorityKeyIdentifier with a precomputed key identifier 15916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 16016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public AuthorityKeyIdentifier( 16116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro byte[] keyIdentifier) 16216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 16353b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro this(keyIdentifier, null, null); 16416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 16516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 16616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 16716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * create an AuthorityKeyIdentifier with a precomputed key identifier 16816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * and the GeneralNames tag and the serial number provided as well. 16916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 17016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public AuthorityKeyIdentifier( 17116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro byte[] keyIdentifier, 17216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro GeneralNames name, 17316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro BigInteger serialNumber) 17416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 17553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro this.keyidentifier = (keyIdentifier != null) ? new DEROctetString(keyIdentifier) : null; 17653b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro this.certissuer = name; 17753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro this.certserno = (serialNumber != null) ? new ASN1Integer(serialNumber) : null; 17816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 17916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 18016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public byte[] getKeyIdentifier() 18116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 18216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (keyidentifier != null) 18316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 18416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return keyidentifier.getOctets(); 18516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 18616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 18716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return null; 18816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 18916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 19016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public GeneralNames getAuthorityCertIssuer() 19116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 19216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return certissuer; 19316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 19416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 19516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public BigInteger getAuthorityCertSerialNumber() 19616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 19716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (certserno != null) 19816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 19916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return certserno.getValue(); 20016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 20116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 20216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return null; 20316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 20416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 20516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 20616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * Produce an object suitable for an ASN1OutputStream. 20716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 20816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ASN1Primitive toASN1Primitive() 20916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 21016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1EncodableVector v = new ASN1EncodableVector(); 21116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 21216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (keyidentifier != null) 21316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 21416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro v.add(new DERTaggedObject(false, 0, keyidentifier)); 21516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 21616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 21716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (certissuer != null) 21816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 21916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro v.add(new DERTaggedObject(false, 1, certissuer)); 22016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 22116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 22216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (certserno != null) 22316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 22416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro v.add(new DERTaggedObject(false, 2, certserno)); 22516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 22616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 22716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 22816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new DERSequence(v); 22916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 23016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 23116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public String toString() 23216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 23316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return ("AuthorityKeyIdentifier: KeyID(" + this.keyidentifier.getOctets() + ")"); 23416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 23516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro} 236