001package org.apache.commons.ssl.org.bouncycastle.asn1.smime; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 008import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 010import org.apache.commons.ssl.org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 011import org.apache.commons.ssl.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 012 013public class SMIMECapability 014 extends ASN1Object 015{ 016 /** 017 * general preferences 018 */ 019 public static final ASN1ObjectIdentifier preferSignedData = PKCSObjectIdentifiers.preferSignedData; 020 public static final ASN1ObjectIdentifier canNotDecryptAny = PKCSObjectIdentifiers.canNotDecryptAny; 021 public static final ASN1ObjectIdentifier sMIMECapabilitiesVersions = PKCSObjectIdentifiers.sMIMECapabilitiesVersions; 022 023 /** 024 * encryption algorithms preferences 025 */ 026 public static final ASN1ObjectIdentifier dES_CBC = new ASN1ObjectIdentifier("1.3.14.3.2.7"); 027 public static final ASN1ObjectIdentifier dES_EDE3_CBC = PKCSObjectIdentifiers.des_EDE3_CBC; 028 public static final ASN1ObjectIdentifier rC2_CBC = PKCSObjectIdentifiers.RC2_CBC; 029 public static final ASN1ObjectIdentifier aES128_CBC = NISTObjectIdentifiers.id_aes128_CBC; 030 public static final ASN1ObjectIdentifier aES192_CBC = NISTObjectIdentifiers.id_aes192_CBC; 031 public static final ASN1ObjectIdentifier aES256_CBC = NISTObjectIdentifiers.id_aes256_CBC; 032 033 private ASN1ObjectIdentifier capabilityID; 034 private ASN1Encodable parameters; 035 036 public SMIMECapability( 037 ASN1Sequence seq) 038 { 039 capabilityID = (ASN1ObjectIdentifier)seq.getObjectAt(0); 040 041 if (seq.size() > 1) 042 { 043 parameters = (ASN1Primitive)seq.getObjectAt(1); 044 } 045 } 046 047 public SMIMECapability( 048 ASN1ObjectIdentifier capabilityID, 049 ASN1Encodable parameters) 050 { 051 this.capabilityID = capabilityID; 052 this.parameters = parameters; 053 } 054 055 public static SMIMECapability getInstance( 056 Object obj) 057 { 058 if (obj == null || obj instanceof SMIMECapability) 059 { 060 return (SMIMECapability)obj; 061 } 062 063 if (obj instanceof ASN1Sequence) 064 { 065 return new SMIMECapability((ASN1Sequence)obj); 066 } 067 068 throw new IllegalArgumentException("Invalid SMIMECapability"); 069 } 070 071 public ASN1ObjectIdentifier getCapabilityID() 072 { 073 return capabilityID; 074 } 075 076 public ASN1Encodable getParameters() 077 { 078 return parameters; 079 } 080 081 /** 082 * Produce an object suitable for an ASN1OutputStream. 083 * <pre> 084 * SMIMECapability ::= SEQUENCE { 085 * capabilityID OBJECT IDENTIFIER, 086 * parameters ANY DEFINED BY capabilityID OPTIONAL 087 * } 088 * </pre> 089 */ 090 public ASN1Primitive toASN1Primitive() 091 { 092 ASN1EncodableVector v = new ASN1EncodableVector(); 093 094 v.add(capabilityID); 095 096 if (parameters != null) 097 { 098 v.add(parameters); 099 } 100 101 return new DERSequence(v); 102 } 103}