ADDITIONAL SYSTEM INFORMATION : CentOS 6 OpenJDK 13.0.1 PKCS11 driver is LunaHSM cryptoki2 64-bit version 6 (/usr/safenet/lunaclient/lib/libCryptoki2_64.so) A DESCRIPTION OF THE PROBLEM : When generating RSASSA-PSS signatures using SunPKCS11 it generates the error: "RSA key must be at least 1024 bytes" even though I have a 2048 bit RSA key. P11PSSSignature.java:352 check min and max key length fetched from Mechanism Info but check the key lengths in bytes instead of bits which is defined in PKCS11 v2.40 http://docs.oasis-open.org/pkcs11/pkcs11-curr/v2.40/cs01/pkcs11-curr-v2.40-cs01.pdf section 2.1.10. To fix this should row 345 in P11PSSSignature be changed from keySize = (((P11Key) key).length() + 7) >> 3; to something like: keySize = ((P11Key) key).length(); and row 347: keySize = ((RSAKey) key).getModulus().bitLength() >> 3; to something like: keySize = ((RSAKey) key).getModulus().bitLength(); STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : Create a SUNPKCS11 Provider with a PKCS11 library that returns Mechanism Info according to PKCS11 2.40 such as Safenet LUNA HSM Version 6. Create a signature with: Signature signature = Signature.getInstance("RSASSA-PSS", sunPKCS11Provider) signature.setParameter(new PSSParameterSpec("SHA-256", "MGF1",new MGF1ParameterSpec("SHA256"),222,1)) signature.initSign(privateKey) signature.update(signData) byte[] signatureData = signature.sign() EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - Signature should be generated. ACTUAL - The signature operation generates a java.security.InvalidKeyException: RSA key must be at least 1024 bytes FREQUENCY : always
|