1 package org.bouncycastle.asn1.test; 2 3 import java.io.IOException; 4 5 import org.bouncycastle.asn1.ASN1InputStream; 6 import org.bouncycastle.asn1.ASN1Sequence; 7 import org.bouncycastle.asn1.bc.LinkedCertificate; 8 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 9 import org.bouncycastle.asn1.x500.X500Name; 10 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 11 import org.bouncycastle.asn1.x509.DigestInfo; 12 import org.bouncycastle.asn1.x509.GeneralName; 13 import org.bouncycastle.asn1.x509.GeneralNames; 14 15 public class LinkedCertificateTest 16 extends ASN1UnitTest 17 { getName()18 public String getName() 19 { 20 return "LinkedCertificate"; 21 } 22 performTest()23 public void performTest() 24 throws Exception 25 { 26 DigestInfo digInfo = new DigestInfo( 27 new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha256), new byte[32]); 28 GeneralName certLocation = new GeneralName(GeneralName.uniformResourceIdentifier, "https://www.bouncycastle.org/certs"); 29 X500Name certIssuer = null; 30 GeneralNames cACerts = null; 31 32 LinkedCertificate linked = new LinkedCertificate(digInfo, certLocation); 33 34 checkConstruction(linked, digInfo, certLocation, certIssuer, cACerts); 35 36 certIssuer = new X500Name("CN=Test"); 37 cACerts = new GeneralNames(new GeneralName(new X500Name("CN=CA Test"))); 38 39 linked = new LinkedCertificate(digInfo, certLocation, certIssuer, cACerts); 40 41 checkConstruction(linked, digInfo, certLocation, certIssuer, cACerts); 42 43 linked = LinkedCertificate.getInstance(null); 44 45 if (linked != null) 46 { 47 fail("null getInstance() failed."); 48 } 49 50 try 51 { 52 LinkedCertificate.getInstance(new Object()); 53 54 fail("getInstance() failed to detect bad object."); 55 } 56 catch (IllegalArgumentException e) 57 { 58 // expected 59 } 60 } 61 checkConstruction( LinkedCertificate linked, DigestInfo digestInfo, GeneralName certLocation, X500Name certIssuer, GeneralNames caCerts)62 private void checkConstruction( 63 LinkedCertificate linked, 64 DigestInfo digestInfo, GeneralName certLocation, X500Name certIssuer, GeneralNames caCerts) 65 throws IOException 66 { 67 checkValues(linked, digestInfo, certLocation, certIssuer, caCerts); 68 69 linked = LinkedCertificate.getInstance(linked); 70 71 checkValues(linked, digestInfo, certLocation, certIssuer, caCerts); 72 73 ASN1InputStream aIn = new ASN1InputStream(linked.toASN1Primitive().getEncoded()); 74 75 ASN1Sequence seq = (ASN1Sequence)aIn.readObject(); 76 77 linked = LinkedCertificate.getInstance(seq); 78 79 checkValues(linked, digestInfo, certLocation, certIssuer, caCerts); 80 } 81 checkValues( LinkedCertificate linked, DigestInfo digestInfo, GeneralName certLocation, X500Name certIssuer, GeneralNames caCerts)82 private void checkValues( 83 LinkedCertificate linked, 84 DigestInfo digestInfo, GeneralName certLocation, X500Name certIssuer, GeneralNames caCerts) 85 { 86 checkMandatoryField("digest", digestInfo, linked.getDigest()); 87 checkMandatoryField("certLocatin", certLocation, linked.getCertLocation()); 88 checkOptionalField("certIssuer", certIssuer, linked.getCertIssuer()); 89 checkOptionalField("caCerts", caCerts, linked.getCACerts()); 90 } 91 main( String[] args)92 public static void main( 93 String[] args) 94 { 95 runTest(new LinkedCertificateTest()); 96 } 97 } 98