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