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
[email protected]
https://lists.mozilla.org/listinfo/dev-security