package model.pki.crl; import model.asn1.ASN1Object; import model.asn1.BitString; import model.asn1.Tag; import model.pki.AlgorithmIdentifier; import java.util.Arrays; import java.util.Collection; import java.util.stream.Stream; /** * Represents a signed X.509 CRL. *
 *      CertificateList ::= SIGNED{CertificateListContent}
 * 
*/ public class CertificateList extends ASN1Object { /** * All info of that CRL, excluding the signature. * It will be signed, and the signature is in
signature
. */ private final CertificateListContent crl; /** * The algorithm used for
signature
. */ private final AlgorithmIdentifier signatureAlgorithm; /** * The signature. */ private final BitString signature; /** * EFFECTS: Initialize the object with the given tag and parentTag, and list, signatureAlgorithm, and signature. * REQUIRES: The algorithm must match the signature. The fields must have correct tags as described in the class * specification (SEQUENCE, SEQUENCE, BIT STRING). */ public CertificateList(Tag tag, Tag parentTag, final CertificateListContent crl, final AlgorithmIdentifier signatureAlgorithm, final BitString signature) { super(tag, parentTag); this.crl = crl; this.signatureAlgorithm = signatureAlgorithm; this.signature = signature; } /** * EFFECT: Encode that sequence into an ordered array of bytes, following the class specification. */ @Override public Byte[] encodeValueDER() { return Stream.of(Arrays.asList(crl.encodeDER()), Arrays.asList(signatureAlgorithm.encodeDER()), Arrays.asList(signature.encodeDER())) .flatMap(Collection::stream) .toArray(Byte[]::new); } public CertificateListContent getCrl() { return crl; } public AlgorithmIdentifier getSignatureAlgorithm() { return signatureAlgorithm; } public BitString getSignature() { return signature; } }