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