| package org.bouncycastle.openssl; |
| |
| import java.util.Collections; |
| import java.util.Enumeration; |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.Set; |
| |
| import org.bouncycastle.asn1.ASN1Encodable; |
| import org.bouncycastle.asn1.ASN1EncodableVector; |
| import org.bouncycastle.asn1.ASN1ObjectIdentifier; |
| import org.bouncycastle.asn1.ASN1Sequence; |
| import org.bouncycastle.asn1.ASN1TaggedObject; |
| import org.bouncycastle.asn1.DERSequence; |
| import org.bouncycastle.asn1.DERTaggedObject; |
| import org.bouncycastle.asn1.DERUTF8String; |
| |
| public class CertificateTrustBlock |
| { |
| private ASN1Sequence uses; |
| private ASN1Sequence prohibitions; |
| private String alias; |
| |
| public CertificateTrustBlock(Set<ASN1ObjectIdentifier> uses) |
| { |
| this(null, uses, null); |
| } |
| |
| public CertificateTrustBlock(String alias, Set<ASN1ObjectIdentifier> uses) |
| { |
| this(alias, uses, null); |
| } |
| |
| public CertificateTrustBlock(String alias, Set<ASN1ObjectIdentifier> uses, Set<ASN1ObjectIdentifier> prohibitions) |
| { |
| this.alias = alias; |
| this.uses = toSequence(uses); |
| this.prohibitions = toSequence(prohibitions); |
| } |
| |
| CertificateTrustBlock(byte[] encoded) |
| { |
| ASN1Sequence seq = ASN1Sequence.getInstance(encoded); |
| |
| for (Enumeration en = seq.getObjects(); en.hasMoreElements();) |
| { |
| ASN1Encodable obj = (ASN1Encodable)en.nextElement(); |
| |
| if (obj instanceof ASN1Sequence) |
| { |
| this.uses = ASN1Sequence.getInstance(obj); |
| } |
| else if (obj instanceof ASN1TaggedObject) |
| { |
| this.prohibitions = ASN1Sequence.getInstance((ASN1TaggedObject)obj, false); |
| } |
| else if (obj instanceof DERUTF8String) |
| { |
| this.alias = DERUTF8String.getInstance(obj).getString(); |
| } |
| } |
| } |
| |
| public String getAlias() |
| { |
| return alias; |
| } |
| |
| public Set<ASN1ObjectIdentifier> getUses() |
| { |
| return toSet(uses); |
| } |
| |
| public Set<ASN1ObjectIdentifier> getProhibitions() |
| { |
| return toSet(prohibitions); |
| } |
| |
| private Set<ASN1ObjectIdentifier> toSet(ASN1Sequence seq) |
| { |
| if (seq != null) |
| { |
| Set<ASN1ObjectIdentifier> oids = new HashSet<ASN1ObjectIdentifier>(seq.size()); |
| |
| for (Enumeration en = seq.getObjects(); en.hasMoreElements(); ) |
| { |
| oids.add(ASN1ObjectIdentifier.getInstance(en.nextElement())); |
| } |
| |
| return oids; |
| } |
| |
| return Collections.EMPTY_SET; |
| } |
| |
| private ASN1Sequence toSequence(Set<ASN1ObjectIdentifier> oids) |
| { |
| if (oids == null || oids.isEmpty()) |
| { |
| return null; |
| } |
| |
| ASN1EncodableVector v = new ASN1EncodableVector(); |
| |
| for (Iterator it = oids.iterator(); it.hasNext();) |
| { |
| v.add((ASN1Encodable)it.next()); |
| } |
| |
| return new DERSequence(v); |
| } |
| |
| ASN1Sequence toASN1Sequence() |
| { |
| ASN1EncodableVector v = new ASN1EncodableVector(); |
| |
| if (uses != null) |
| { |
| v.add(uses); |
| } |
| if (prohibitions != null) |
| { |
| v.add(new DERTaggedObject(false, 0, prohibitions)); |
| } |
| if (alias != null) |
| { |
| v.add(new DERUTF8String(alias)); |
| } |
| |
| return new DERSequence(v); |
| } |
| } |