1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
/* * @(#)PSSParameterSpec.java 1.9 06/07/20 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package java.security.spec; import java.math.BigInteger; import java.security.spec.MGF1ParameterSpec; /** * This class specifies a parameter spec for RSA-PSS signature scheme, * as defined in the * <a href="http://www.ietf.org/rfc/rfc3447.txt">PKCS#1 v2.1</a> * standard. * * <p>Its ASN.1 definition in PKCS#1 standard is described below: * <pre> * RSASSA-PSS-params ::= SEQUENCE { * hashAlgorithm [0] OAEP-PSSDigestAlgorithms DEFAULT sha1, * maskGenAlgorithm [1] PKCS1MGFAlgorithms DEFAULT mgf1SHA1, * saltLength [2] INTEGER DEFAULT 20, * trailerField [3] INTEGER DEFAULT 1 * } * </pre> * where * <pre> * OAEP-PSSDigestAlgorithms ALGORITHM-IDENTIFIER ::= { * { OID id-sha1 PARAMETERS NULL }| * { OID id-sha256 PARAMETERS NULL }| * { OID id-sha384 PARAMETERS NULL }| * { OID id-sha512 PARAMETERS NULL }, * ... -- Allows for future expansion -- * } * * PKCS1MGFAlgorithms ALGORITHM-IDENTIFIER ::= { * { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms }, * ... -- Allows for future expansion -- * } * </pre> * <p>Note: the PSSParameterSpec.DEFAULT uses the following: * message digest -- "SHA-1" * mask generation function (mgf) -- "MGF1" * parameters for mgf -- MGF1ParameterSpec.SHA1 * SaltLength -- 20 * TrailerField -- 1 * * @see MGF1ParameterSpec * @see AlgorithmParameterSpec * @see java.security.Signature * * @author Valerie Peng * * @version 1.9 06/07/20 * * @since 1.4 */ public class PSSParameterSpec implements AlgorithmParameterSpec { private String mdName = "SHA-1"; private String mgfName = "MGF1"; private AlgorithmParameterSpec mgfSpec = MGF1ParameterSpec.SHA1; private int saltLen = 20; private int trailerField = 1; /** * The PSS parameter set with all default values. * @since 1.5 */ public static final PSSParameterSpec DEFAULT = new PSSParameterSpec(); /** * Constructs a new <code>PSSParameterSpec</code> as defined in * the PKCS #1 standard using the default values. */ private PSSParameterSpec() { } /** * Creates a new <code>PSSParameterSpec</code> as defined in * the PKCS #1 standard using the specified message digest, * mask generation function, parameters for mask generation * function, salt length, and trailer field values. * * @param mdName the algorithm name of the hash function. * @param mgfName the algorithm name of the mask generation * function. * @param mgfSpec the parameters for the mask generation * function. If null is specified, null will be returned by * getMGFParameters(). * @param saltLen the length of salt. * @param trailerField the value of the trailer field. * @exception NullPointerException if <code>mdName</code>, * or <code>mgfName</code> is null. * @exception IllegalArgumentException if <code>saltLen</code> * or <code>trailerField</code> is less than 0. * @since 1.5 */ public PSSParameterSpec(String mdName, String mgfName, AlgorithmParameterSpec mgfSpec, int saltLen, int trailerField) { if (mdName == null) { throw new NullPointerException("digest algorithm is null"); } if (mgfName == null) { throw new NullPointerException("mask generation function " + "algorithm is null"); } if (saltLen < 0) { throw new IllegalArgumentException("negative saltLen value: " + saltLen); } if (trailerField < 0) { throw new IllegalArgumentException("negative trailerField: " + trailerField); } this.mdName = mdName; this.mgfName = mgfName; this.mgfSpec = mgfSpec; this.saltLen = saltLen; this.trailerField = trailerField; } /** * Creates a new <code>PSSParameterSpec</code> * using the specified salt length and other default values as * defined in PKCS#1. * * @param saltLen the length of salt in bits to be used in PKCS#1 * PSS encoding. * @exception IllegalArgumentException if <code>saltLen</code> is * less than 0. */ public PSSParameterSpec(int saltLen) { if (saltLen < 0) { throw new IllegalArgumentException("negative saltLen value: " + saltLen); } this.saltLen = saltLen; } /** * Returns the message digest algorithm name. * * @return the message digest algorithm name. * @since 1.5 */ public String getDigestAlgorithm() { return mdName; } /** * Returns the mask generation function algorithm name. * * @return the mask generation function algorithm name. * * @since 1.5 */ public String getMGFAlgorithm() { return mgfName; } /** * Returns the parameters for the mask generation function. * * @return the parameters for the mask generation function. * @since 1.5 */ public AlgorithmParameterSpec getMGFParameters() { return mgfSpec; } /** * Returns the salt length in bits. * * @return the salt length. */ public int getSaltLength() { return saltLen; } /** * Returns the value for the trailer field, i.e. bc in PKCS#1 v2.1. * * @return the value for the trailer field, i.e. bc in PKCS#1 v2.1. * @since 1.5 */ public int getTrailerField() { return trailerField; } }