001package org.apache.commons.ssl.org.bouncycastle.asn1.pkcs; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Object; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Primitive; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Sequence; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1TaggedObject; 008import org.apache.commons.ssl.org.bouncycastle.asn1.DERNull; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DEROctetString; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 011import org.apache.commons.ssl.org.bouncycastle.asn1.DERTaggedObject; 012import org.apache.commons.ssl.org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 013import org.apache.commons.ssl.org.bouncycastle.asn1.x509.AlgorithmIdentifier; 014 015public class RSAESOAEPparams 016 extends ASN1Object 017{ 018 private AlgorithmIdentifier hashAlgorithm; 019 private AlgorithmIdentifier maskGenAlgorithm; 020 private AlgorithmIdentifier pSourceAlgorithm; 021 022 public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE); 023 public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM); 024 public final static AlgorithmIdentifier DEFAULT_P_SOURCE_ALGORITHM = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_pSpecified, new DEROctetString(new byte[0])); 025 026 public static RSAESOAEPparams getInstance( 027 Object obj) 028 { 029 if (obj instanceof RSAESOAEPparams) 030 { 031 return (RSAESOAEPparams)obj; 032 } 033 else if (obj != null) 034 { 035 return new RSAESOAEPparams(ASN1Sequence.getInstance(obj)); 036 } 037 038 return null; 039 } 040 041 /** 042 * The default version 043 */ 044 public RSAESOAEPparams() 045 { 046 hashAlgorithm = DEFAULT_HASH_ALGORITHM; 047 maskGenAlgorithm = DEFAULT_MASK_GEN_FUNCTION; 048 pSourceAlgorithm = DEFAULT_P_SOURCE_ALGORITHM; 049 } 050 051 public RSAESOAEPparams( 052 AlgorithmIdentifier hashAlgorithm, 053 AlgorithmIdentifier maskGenAlgorithm, 054 AlgorithmIdentifier pSourceAlgorithm) 055 { 056 this.hashAlgorithm = hashAlgorithm; 057 this.maskGenAlgorithm = maskGenAlgorithm; 058 this.pSourceAlgorithm = pSourceAlgorithm; 059 } 060 061 /** 062 * @deprecated use getInstance() 063 * @param seq 064 */ 065 public RSAESOAEPparams( 066 ASN1Sequence seq) 067 { 068 hashAlgorithm = DEFAULT_HASH_ALGORITHM; 069 maskGenAlgorithm = DEFAULT_MASK_GEN_FUNCTION; 070 pSourceAlgorithm = DEFAULT_P_SOURCE_ALGORITHM; 071 072 for (int i = 0; i != seq.size(); i++) 073 { 074 ASN1TaggedObject o = (ASN1TaggedObject)seq.getObjectAt(i); 075 076 switch (o.getTagNo()) 077 { 078 case 0: 079 hashAlgorithm = AlgorithmIdentifier.getInstance(o, true); 080 break; 081 case 1: 082 maskGenAlgorithm = AlgorithmIdentifier.getInstance(o, true); 083 break; 084 case 2: 085 pSourceAlgorithm = AlgorithmIdentifier.getInstance(o, true); 086 break; 087 default: 088 throw new IllegalArgumentException("unknown tag"); 089 } 090 } 091 } 092 093 public AlgorithmIdentifier getHashAlgorithm() 094 { 095 return hashAlgorithm; 096 } 097 098 public AlgorithmIdentifier getMaskGenAlgorithm() 099 { 100 return maskGenAlgorithm; 101 } 102 103 public AlgorithmIdentifier getPSourceAlgorithm() 104 { 105 return pSourceAlgorithm; 106 } 107 108 /** 109 * <pre> 110 * RSAES-OAEP-params ::= SEQUENCE { 111 * hashAlgorithm [0] OAEP-PSSDigestAlgorithms DEFAULT sha1, 112 * maskGenAlgorithm [1] PKCS1MGFAlgorithms DEFAULT mgf1SHA1, 113 * pSourceAlgorithm [2] PKCS1PSourceAlgorithms DEFAULT pSpecifiedEmpty 114 * } 115 * 116 * OAEP-PSSDigestAlgorithms ALGORITHM-IDENTIFIER ::= { 117 * { OID id-sha1 PARAMETERS NULL }| 118 * { OID id-sha256 PARAMETERS NULL }| 119 * { OID id-sha384 PARAMETERS NULL }| 120 * { OID id-sha512 PARAMETERS NULL }, 121 * ... -- Allows for future expansion -- 122 * } 123 * PKCS1MGFAlgorithms ALGORITHM-IDENTIFIER ::= { 124 * { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms }, 125 * ... -- Allows for future expansion -- 126 * } 127 * PKCS1PSourceAlgorithms ALGORITHM-IDENTIFIER ::= { 128 * { OID id-pSpecified PARAMETERS OCTET STRING }, 129 * ... -- Allows for future expansion -- 130 * } 131 * </pre> 132 * @return the asn1 primitive representing the parameters. 133 */ 134 public ASN1Primitive toASN1Primitive() 135 { 136 ASN1EncodableVector v = new ASN1EncodableVector(); 137 138 if (!hashAlgorithm.equals(DEFAULT_HASH_ALGORITHM)) 139 { 140 v.add(new DERTaggedObject(true, 0, hashAlgorithm)); 141 } 142 143 if (!maskGenAlgorithm.equals(DEFAULT_MASK_GEN_FUNCTION)) 144 { 145 v.add(new DERTaggedObject(true, 1, maskGenAlgorithm)); 146 } 147 148 if (!pSourceAlgorithm.equals(DEFAULT_P_SOURCE_ALGORITHM)) 149 { 150 v.add(new DERTaggedObject(true, 2, pSourceAlgorithm)); 151 } 152 153 return new DERSequence(v); 154 } 155}