001package org.apache.commons.ssl.org.bouncycastle.asn1.icao; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Set; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DERSet; 011import org.apache.commons.ssl.org.bouncycastle.asn1.x509.Certificate; 012 013/** 014 * The CscaMasterList object. This object can be wrapped in a 015 * CMSSignedData to be published in LDAP. 016 * 017 * <pre> 018 * CscaMasterList ::= SEQUENCE { 019 * version CscaMasterListVersion, 020 * certList SET OF Certificate } 021 * 022 * CscaMasterListVersion :: INTEGER {v0(0)} 023 * </pre> 024 */ 025 026public class CscaMasterList 027 extends ASN1Object 028{ 029 private ASN1Integer version = new ASN1Integer(0); 030 private Certificate[] certList; 031 032 public static CscaMasterList getInstance( 033 Object obj) 034 { 035 if (obj instanceof CscaMasterList) 036 { 037 return (CscaMasterList)obj; 038 } 039 else if (obj != null) 040 { 041 return new CscaMasterList(ASN1Sequence.getInstance(obj)); 042 } 043 044 return null; 045 } 046 047 private CscaMasterList( 048 ASN1Sequence seq) 049 { 050 if (seq == null || seq.size() == 0) 051 { 052 throw new IllegalArgumentException( 053 "null or empty sequence passed."); 054 } 055 if (seq.size() != 2) 056 { 057 throw new IllegalArgumentException( 058 "Incorrect sequence size: " + seq.size()); 059 } 060 061 version = ASN1Integer.getInstance(seq.getObjectAt(0)); 062 ASN1Set certSet = ASN1Set.getInstance(seq.getObjectAt(1)); 063 certList = new Certificate[certSet.size()]; 064 for (int i = 0; i < certList.length; i++) 065 { 066 certList[i] 067 = Certificate.getInstance(certSet.getObjectAt(i)); 068 } 069 } 070 071 public CscaMasterList( 072 Certificate[] certStructs) 073 { 074 certList = copyCertList(certStructs); 075 } 076 077 public int getVersion() 078 { 079 return version.getValue().intValue(); 080 } 081 082 public Certificate[] getCertStructs() 083 { 084 return copyCertList(certList); 085 } 086 087 private Certificate[] copyCertList(Certificate[] orig) 088 { 089 Certificate[] certs = new Certificate[orig.length]; 090 091 for (int i = 0; i != certs.length; i++) 092 { 093 certs[i] = orig[i]; 094 } 095 096 return certs; 097 } 098 099 public ASN1Primitive toASN1Primitive() 100 { 101 ASN1EncodableVector seq = new ASN1EncodableVector(); 102 103 seq.add(version); 104 105 ASN1EncodableVector certSet = new ASN1EncodableVector(); 106 for (int i = 0; i < certList.length; i++) 107 { 108 certSet.add(certList[i]); 109 } 110 seq.add(new DERSet(certSet)); 111 112 return new DERSequence(seq); 113 } 114}