On Wednesday, January 29, 2020 at 12:01:19 AM UTC+1, Usha Nayak wrote: > Hello, > > Adding few more details to this issue we are facing in regards to NSS. > Please note: this was not an issue with NSS3.42.1. We are looking to upgrade > to NSS3.47.1 and have noticed it from then on. We approached IAIK aswell in > regards to this after debugging their pkcs#11wrapper module. Please see their > response at the below of the post. > > We created sample Java client that uses IAIK PKCS#11 Wrapper 1.4 to connect > to NSS > > Module pkcs11Module = Module.getInstance( library ); // library > -> softokn3.dll > ..... > pkcs11Module.initialize(arguments); // arguments -> maps to > initializeArguments > .... > session = token.openSession(Token.SessionType.SERIAL_SESSION, > Token.SessionReadWriteBehavior.RW_SESSION, null, null); > ... > session.login(Session.UserType.USER, pin.toCharArray()); // > login is fine > ... > > // set the general attributes for the public key > rsaPublicKeyTemplate.getToken().setBooleanValue(Boolean.TRUE); /// > this is source of problem . If set to False ( meaning session object), client > works fine. > ... > > // set the general attributes for the private key > rsaPrivateKeyTemplate.getToken().setBooleanValue(Boolean.TRUE); > /// this is source of problem . If set to False ( meaning session object), > client works fine. > .... > > KeyPair generatedKeyPair = null; > try > { > generatedKeyPair = > session.generateKeyPair(keyPairGenerationMechanism,rsaPublicKeyTemplate, > rsaPrivateKeyTemplate); > } > catch (TokenException e) > { > String msg = "Failed to generate RSA key pair on token: " + > e.getMessage(); > throw new Exception( msg, e ); > } > ... > > Input file for the sample client : > library=softokn3.dll > > > initializeArguments=configDir='sql:D:/workdir/devunit/KMDemo/NSS/db' > certPrefix='' keyPrefix='' secmod='' flags='readWrite' updatedir='' > updateCertPrefix='' updateKeyPrefix='' updateTokenDescription='' > > pin=XXXXX > > slot=1 > > libPath=D:/workdir/devunit/KMDemo/NSS-3.49/lib > > > libList=libnspr4.dll,libplc4.dll,libplds4.dll,sqlite3.dll,nssutil3.dll,softokn3.dll > > > Steps I've been following :: > > 1) I cleanup NSS db directory. > 2) Prior to executing the client code, I recreate the NSS db. > a) Create NSS db ---> modutil -create -dbdir > sql:D:\workdir\devunit\KMDemo\NSS\db > b) Provide password ---> modutil -dbdir > sql:D:\workdir\devunit\KMDemo\NSS\db -changepw "NSS Certificate DB" > c) Check content of the db --> certutil -K -d > sql:D:\workdir\devunit\KMDemo\NSS\db ( displays no keys ) > 3) Run the Sample client code. Saw exception > > ################################################################################ > PKCS#11 session login successful > > ################################################################################ > Generating new 2048 bit RSA key-pair... > java.lang.Exception: Failed to generate RSA key pair on > token: CKR_GENERAL_ERROR > at > demo.pkcs.pkcs11.GenerateKeyPair.main(GenerateKeyPair.java:110) > Caused by: iaik.pkcs.pkcs11.wrapper.PKCS11Exception: > CKR_GENERAL_ERROR > at > iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.C_GetAttributeValue(Native > Method) > at > iaik.pkcs.pkcs11.objects.Object.getAttributeValue(Object.java:716) > at > iaik.pkcs.pkcs11.objects.Key.readAttributes(Key.java:622) > at > iaik.pkcs.pkcs11.objects.PublicKey.readAttributes(PublicKey.java:398) > at > iaik.pkcs.pkcs11.objects.RSAPublicKey.readAttributes(RSAPublicKey.java:242) > at > iaik.pkcs.pkcs11.objects.Object.<init>(Object.java:223) > at > iaik.pkcs.pkcs11.objects.Storage.<init>(Storage.java:105) > at > iaik.pkcs.pkcs11.objects.Key.<init>(Key.java:321) > at > iaik.pkcs.pkcs11.objects.PublicKey.<init>(PublicKey.java:119) > at > iaik.pkcs.pkcs11.objects.RSAPublicKey.<init>(RSAPublicKey.java:96) > at > iaik.pkcs.pkcs11.objects.RSAPublicKey.getInstance(RSAPublicKey.java:118) > at > iaik.pkcs.pkcs11.objects.PublicKey.getInstance(PublicKey.java:156) > at > iaik.pkcs.pkcs11.objects.Object.getInstance(Object.java:262) > at > iaik.pkcs.pkcs11.Session.generateKeyPair(Session.java:1260) > at > demo.pkcs.pkcs11.GenerateKeyPair.main(GenerateKeyPair.java:105) > > ################################################################################ > Close Session... > PKCS#11 session logout successful > > 4) Check the NSS key db store for the contents: > D:\workdir\devunit\KMDemo>certutil -K -d > sql:D:\workdir\devunit\KMDemo\NSS\db > certutil: Checking token "NSS Certificate DB" in slot > "NSS User Private Key and Certificate Services" > Enter Password or Pin for "NSS Certificate DB": > < 0> rsa > "60b0df57-df82-4a73-b1c9-7fc17204e1d0;157" KMRootCA > > NOTE: I see the exception in the console as well as notice that > NSS store having the key. > > > Debugged IAIK: > • Enabled debugging of IAIK PKCS#11 Wrapper module. > > 01/23/20 19:38:18 ERROR: got 5 instead of CKR_OK, going to raise an > exception (in > Java_iaik_pkcs_pkcs11_wrapper_PKCS11Implementation_C_1GetAttributeValue) > > • I decided to build/debug the native pkcs11Wrapper code with the Java > sample client. > > JNIEXPORT void JNICALL > Java_iaik_pkcs_pkcs11_wrapper_PKCS11Implementation_C_1GetAttributeValue > (JNIEnv *env, jobject obj, jlong jSessionHandle, jlong jObjectHandle, > jobjectArray jTemplate, jboolean jUseUtf8) > { > ..... > rv = (*ckpFunctions->C_GetAttributeValue)(ckSessionHandle, > ckObjectHandle, ckpAttributes, ckAttributesLength); > ... > > } > Values in the variable when this failure occurred .. > > rv = 5 > > + ckpAttributes 0x0000000017e7cb00 {type=1073742353 pValue=0x0000000017e76980 > ulValueLen=240 } CK_ATTRIBUTE * > ckObjectHandle 2357156729 unsigned long > + ckpFunctions softokn3.dll!0x00007ffee9b0c620 (load symbols for additional > information) {version={major=1 '\x1' minor=...} ...} CK_FUNCTION_LIST * > ckSessionHandle 16777217 unsigned long > ckAttributesLength 23 unsigned long > > > • The above highlighted code does make a call to NSS ( softtokn3 ) and > receives 5 ( which stands for CKR_GENERAL_ERROR ) for the ckpAttributes > type=1073742353. > > I approached IAIK, here’s the response they provided … > > > On Fri, Jan 24, 2020 at 3:12 AM SIC/IAIK <XXXX> wrote: > The ckpAttributes that you have viewed in the debugger is actually an array > with multiple ckAttributes. Specifically 1073742353 is the CKA_WRAP_TEMPLATE > attribute. > I traced the error down to this NSS git commit [1]. There is seemingly a > problem when querying ArrayAttributes. It produces an sqlite_error in the NSS > code. > However, I'm pretty sure that this error is an actual NSS error and cannot be > fixed from our side. I would suggest to file a bug report. > [1]: > https://github.com/nss-dev/nss/commit/f572a15e45c5c4a26a0ada7ee008843ad19ec202 > > > Please let us know .. > > Thanks..
Hi Usha, Thanks for the additional information. Unfortunately, we've not been able to reproduce this. More details (minimally, all arguments passed in each NSS function call) would be helpful. A C/C++ reproducer would be ideal. Thanks, Kevin _______________________________________________ dev-security mailing list dev-security@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-security