src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/wrapper/CK_RSA_PKCS_PSS_PARAMS.java
--- a/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/wrapper/CK_RSA_PKCS_PSS_PARAMS.java Tue Jun 11 13:04:36 2019 -0400
+++ b/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/wrapper/CK_RSA_PKCS_PSS_PARAMS.java Tue Jun 11 21:30:28 2019 +0000
@@ -1,118 +1,105 @@
/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
+ * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * 3. The end-user documentation included with the redistribution, if any, must
- * include the following acknowledgment:
- *
- * "This product includes software developed by IAIK of Graz University of
- * Technology."
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
*
- * Alternately, this acknowledgment may appear in the software itself, if
- * and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Graz University of Technology" and "IAIK of Graz University of
- * Technology" must not be used to endorse or promote products derived from
- * this software without prior written permission.
- *
- * 5. Products derived from this software may not be called
- * "IAIK PKCS Wrapper", nor may "IAIK" appear in their name, without prior
- * written permission of Graz University of Technology.
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
*
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE LICENSOR BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
*/
package sun.security.pkcs11.wrapper;
+import java.security.ProviderException;
+import java.security.spec.PSSParameterSpec;
+import java.security.spec.MGF1ParameterSpec;
/**
- * class CK_RSA_PKCS_PSS_PARAMS provides the parameters to the CKM_RSA_PKCS_OAEP
- * mechanism.<p>
+ * This class represents the necessary parameters required by the
+ * CKM_RSA_PKCS_PSS mechanism as defined in CK_RSA_PKCS_PSS_PARAMS structure.<p>
* <B>PKCS#11 structure:</B>
* <PRE>
* typedef struct CK_RSA_PKCS_PSS_PARAMS {
- * CK_MECHANISM_TYPE hashAlg;
- * CK_RSA_PKCS_MGF_TYPE mgf;
- * CK_ULONG sLen;
+ * CK_MECHANISM_TYPE hashAlg;
+ * CK_RSA_PKCS_MGF_TYPE mgf;
+ * CK_ULONG sLen;
* } CK_RSA_PKCS_PSS_PARAMS;
* </PRE>
*
- * @author Karl Scheibelhofer <Karl.Scheibelhofer@iaik.at>
+ * @since 13
*/
public class CK_RSA_PKCS_PSS_PARAMS {
- /**
- * <B>PKCS#11:</B>
- * <PRE>
- * CK_MECHANISM_TYPE hashAlg;
- * </PRE>
- */
- public long hashAlg;
+ private final long hashAlg;
+ private final long mgf;
+ private final long sLen;
+
+ public CK_RSA_PKCS_PSS_PARAMS(String hashAlg, String mgfAlg,
+ String mgfHash, int sLen) {
+ this.hashAlg = Functions.getHashMechId(hashAlg);
+ if (!mgfAlg.equals("MGF1")) {
+ throw new ProviderException("Only MGF1 is supported");
+ }
+ // no dash in PKCS#11 mechanism names
+ this.mgf = Functions.getMGFId("CKG_MGF1_" + hashAlg.replaceFirst("-", ""));
+ this.sLen = sLen;
+ }
- /**
- * <B>PKCS#11:</B>
- * <PRE>
- * CK_RSA_PKCS_MGF_TYPE mgf;
- * </PRE>
- */
- public long mgf;
+ @Override
+ public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ }
+
+ if (!(o instanceof CK_RSA_PKCS_PSS_PARAMS)) {
+ return false;
+ }
- /**
- * <B>PKCS#11:</B>
- * <PRE>
- * CK_ULONG sLen;
- * </PRE>
- */
- public long sLen;
+ CK_RSA_PKCS_PSS_PARAMS other = (CK_RSA_PKCS_PSS_PARAMS) o;
+ return ((other.hashAlg == hashAlg) &&
+ (other.mgf == mgf) &&
+ (other.sLen == sLen));
+ }
- /**
- * Returns the string representation of CK_PKCS5_PBKD2_PARAMS.
- *
- * @return the string representation of CK_PKCS5_PBKD2_PARAMS
- */
+ @Override
+ public int hashCode() {
+ return (int)(hashAlg << 2 + mgf << 1 + sLen);
+ }
+
+ @Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(Constants.INDENT);
- sb.append("hashAlg: 0x");
+ sb.append("hashAlg: ");
sb.append(Functions.toFullHexString(hashAlg));
sb.append(Constants.NEWLINE);
sb.append(Constants.INDENT);
- sb.append("mgf: 0x");
+ sb.append("mgf: ");
sb.append(Functions.toFullHexString(mgf));
sb.append(Constants.NEWLINE);
sb.append(Constants.INDENT);
- sb.append("sLen: ");
+ sb.append("sLen(in bytes): ");
sb.append(sLen);
- //buffer.append(Constants.NEWLINE);
return sb.toString();
}
-
}