001package org.apache.commons.ssl.org.bouncycastle.asn1.x509; 002 003import java.util.Enumeration; 004import java.util.Hashtable; 005 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier; 009import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 010import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 011import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 012 013/** 014 * PolicyMappings V3 extension, described in RFC3280. 015 * <pre> 016 * PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE { 017 * issuerDomainPolicy CertPolicyId, 018 * subjectDomainPolicy CertPolicyId } 019 * </pre> 020 * 021 * @see <a href="http://www.faqs.org/rfc/rfc3280.txt">RFC 3280, section 4.2.1.6</a> 022 */ 023public class PolicyMappings 024 extends ASN1Object 025{ 026 ASN1Sequence seq = null; 027 028 public static PolicyMappings getInstance(Object obj) 029 { 030 if (obj instanceof PolicyMappings) 031 { 032 return (PolicyMappings)obj; 033 } 034 if (obj != null) 035 { 036 return new PolicyMappings(ASN1Sequence.getInstance(obj)); 037 } 038 039 return null; 040 } 041 042 /** 043 * Creates a new <code>PolicyMappings</code> instance. 044 * 045 * @param seq an <code>ASN1Sequence</code> constructed as specified 046 * in RFC 3280 047 */ 048 private PolicyMappings(ASN1Sequence seq) 049 { 050 this.seq = seq; 051 } 052 053 /** 054 * Creates a new <code>PolicyMappings</code> instance. 055 * 056 * @param mappings a <code>HashMap</code> value that maps 057 * <code>String</code> oids 058 * to other <code>String</code> oids. 059 * @deprecated use CertPolicyId constructors. 060 */ 061 public PolicyMappings(Hashtable mappings) 062 { 063 ASN1EncodableVector dev = new ASN1EncodableVector(); 064 Enumeration it = mappings.keys(); 065 066 while (it.hasMoreElements()) 067 { 068 String idp = (String)it.nextElement(); 069 String sdp = (String)mappings.get(idp); 070 ASN1EncodableVector dv = new ASN1EncodableVector(); 071 dv.add(new ASN1ObjectIdentifier(idp)); 072 dv.add(new ASN1ObjectIdentifier(sdp)); 073 dev.add(new DERSequence(dv)); 074 } 075 076 seq = new DERSequence(dev); 077 } 078 079 public PolicyMappings(CertPolicyId issuerDomainPolicy, CertPolicyId subjectDomainPolicy) 080 { 081 ASN1EncodableVector dv = new ASN1EncodableVector(); 082 dv.add(issuerDomainPolicy); 083 dv.add(subjectDomainPolicy); 084 085 seq = new DERSequence(new DERSequence(dv)); 086 } 087 088 public PolicyMappings(CertPolicyId[] issuerDomainPolicy, CertPolicyId[] subjectDomainPolicy) 089 { 090 ASN1EncodableVector dev = new ASN1EncodableVector(); 091 092 for (int i = 0; i != issuerDomainPolicy.length; i++) 093 { 094 ASN1EncodableVector dv = new ASN1EncodableVector(); 095 dv.add(issuerDomainPolicy[i]); 096 dv.add(subjectDomainPolicy[i]); 097 dev.add(new DERSequence(dv)); 098 } 099 100 seq = new DERSequence(dev); 101 } 102 103 public ASN1Primitive toASN1Primitive() 104 { 105 return seq; 106 } 107}