src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/wrapper/CK_RSA_PKCS_PSS_PARAMS.java
changeset 55332 f492567244ab
parent 47216 71c04702a3d5
child 55530 6aa047de311b
--- 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();
     }
-
 }