On Monday, January 20, 2020 at 4:22:19 PM UTC-6, Usha Nayak wrote:
> Hi All,
> 
> We were able to build NSS-3.49 on Windows and reproduce the issue with the
> sample testclient:
> 
> java.lang.Exception: Failed to generate RSA key pair on token:
> CKR_GENERAL_ERROR
> 
>         at GenerateKeyPair.main(GenerateKeyPair.java:274)
> 
> 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:269)
> 
> ################################################################################
> 
> 
> 
> Below is an excerpt of the sample client that connects to NSS via IAIK
> PKCS#11 Wrapper :
> 
> 
>     public static void main(String[] args) {
> 
> 
>     String pkcs11NSSPropertiesFilePath = args[0];
> 
>     Module pkcs11Module = null;
>     Session session = null;
> 
>     try {
> 
>         Properties config = loadKeyPkcs11Config(
> pkcs11NSSPropertiesFilePath );
>         pkcs11Module = initializeModule( config );
>         session = getSession( config, pkcs11Module );
> 
> 
> 
> System.out.println("################################################################################");
>         System.out.println("Generating new 2048 bit RSA key-pair... ");
> 
>        String component = "KMRootCA";
>        int keySize = 2048;
> 
>         Mechanism keyPairGenerationMechanism =
> Mechanism.get(PKCS11Constants.CKM_RSA_PKCS_KEY_PAIR_GEN);
> 
>         RSAPublicKey rsaPublicKeyTemplate = new RSAPublicKey();
>         RSAPrivateKey rsaPrivateKeyTemplate = new RSAPrivateKey();
> 
>         String id = generateId();
> 
> rsaPublicKeyTemplate.getId().setByteArrayValue(id.getBytes(StandardCharsets.UTF_8));
> 
> rsaPrivateKeyTemplate.getId().setByteArrayValue(id.getBytes(StandardCharsets.UTF_8));
> 
>        // set the general attributes for the public key
>         rsaPublicKeyTemplate.getModulusBits().setLongValue(new
> Long(keySize));
>         byte[] publicExponentBytes = { (byte)0x01, (byte)0x00, (byte)0x01
> };
> 
> rsaPublicKeyTemplate.getPublicExponent().setByteArrayValue(publicExponentBytes);
>         rsaPublicKeyTemplate.getToken().setBooleanValue(Boolean.TRUE);
>         rsaPublicKeyTemplate.getLabel().setValue(component.toCharArray());
>         rsaPublicKeyTemplate.getEncrypt().setBooleanValue(Boolean.TRUE);
>         rsaPublicKeyTemplate.getWrap().setBooleanValue(Boolean.TRUE);
>         rsaPublicKeyTemplate.getVerify().setBooleanValue(Boolean.TRUE);
> 
>         // set the general attributes for the private key
>         //
>         rsaPrivateKeyTemplate.getSensitive().setBooleanValue(Boolean.TRUE);
>         rsaPrivateKeyTemplate.getToken().setBooleanValue(Boolean.TRUE);
>         rsaPrivateKeyTemplate.getPrivate().setBooleanValue(Boolean.FALSE);
>         rsaPrivateKeyTemplate.getLabel().setValue(component.toCharArray());
>         rsaPrivateKeyTemplate.getDecrypt().setBooleanValue(Boolean.TRUE);
>         rsaPrivateKeyTemplate.getUnwrap().setBooleanValue(Boolean.TRUE);
>         rsaPrivateKeyTemplate.getSign().setBooleanValue(Boolean.TRUE);
> 
>         KeyPair generatedKeyPair;
>         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 );
>         }
> 
>                   ......
> 
> It looks like when we create token objects as highlighted above, we see the
> exception. But, if we modify the code to not create token objects ( as
> shown below ) everything looks good. Please note this was not an issue in
> 3.42.1 NSS version.
> 
>         rsaPublicKeyTemplate.getToken().setBooleanValue(Boolean.TRUE);
>         ....
>         rsaPrivateKeyTemplate.getToken().setBooleanValue(Boolean.TRUE);
> 
> 
> Output :
> ################################################################################
> Information of Token:
> Label: NSS Certificate DB
> Manufacturer ID: Mozilla Foundation
> Model: NSS 3
> Serial Number: 0000000000000000
> Random Number Generator: true
> Write protected: false
> Login required: true
> User PIN initialized: true
> Restore Key not needed: false
> Clock on Token: false
> Protected Authentication Path: false
> Dual Crypto Operations: true
> Token initialized: true
> Secondary Authentication: false
> User PIN-Count low: false
> User PIN final Try: false
> User PIN locked: false
> User PIN to be changed: false
> Security Officer PIN-Count low: false
> Security Officer PIN final Try: false
> Security Officer PIN locked: false
> Security Officer PIN to be changed: false
> Maximum Session Count: <effectively infinite>
> Session Count: 0
> Maximum Read/Write Session Count: <effectively infinite>
> Read/Write Session Count: 0
> Maximum PIN Length: 500
> Minimum PIN Length: 0
> Total Public Memory: 1
> Free Public Memory: 1
> Total Private Memory: 1
> Free Private Memory: 1
> Hardware Version: 0.00
> Firmware Version: 0.00
> Time: Sat Nov 29 18:00:00 CST 2
> ################################################################################
> PKCS#11 session login successful
> ################################################################################
> Generating new 2048 bit RSA key-pair...
> ################################################################################
> Output KeyPair...
> The public key is
> _______________________________________________________________________________
>   Object Class: Public Key
>   Token: false
>   Private: false
>   Modifiable: true
>   Label: KMRootCA
>   Key Type: RSA
>   ID:
> 39616130393234332d643635312d343835662d613430632d6164613936343365323434653b31353739353437363034343534
>   Start Date: <NULL_PTR>
>   End Date: <NULL_PTR>
>   Derive: false
>   Local: false
>   Key Generation Mechanism: <Attribute not present>
>   Allowed Mechanisms: <Attribute not present>
>   Subject (DER, hex): <NULL_PTR>
>   Encrypt: true
>   Verify: true
>   Verify Recover: true
>   Wrap: true
>   Trusted: <Attribute not present>
>   Wrap Template: <Attribute not present>
>   Modulus (hex):
> d5a3c3265e3fa3be258565fab165ac9f694dab04b79eee4e749870a6e0b9251267855fe72aa8bd21fac910336a07cf710a533a7681657e25869260bee261b3b67c7a7706fdb43a50d311213e48a488958c8d77873889fbfa8cbf0b4476ed7cee78aebd195b241da986750f4099d6849b872e2d08953a4ba4c1583ebfcbde614e8601d99c31d384c7ea9735e986f913cf9691b2e6868031999ac01e6a85712a9af94ac589c6c79e7e8246ff8aed45eb46d14c916549a35299a0a7621f45a94d54b0d1fdee80972a514216063aef6f59326a27bf0695f01592a1c7382d1beadf8c81dde13d20b18324ddce62627baa95028a04ddd1a4928cc5a5b4bf0db15fc3d7
>   Public Exponent (hex): 010001
>   Modulus Bits (dec): <Attribute not present>
> _______________________________________________________________________________
> The private key is
> _______________________________________________________________________________
>   Object Class: Private Key
>   Token: false
>   Private: true
>   Modifiable: true
>   Label: KMRootCA
>   Key Type: RSA
>   ID:
> 39616130393234332d643635312d343835662d613430632d6164613936343365323434653b31353739353437363034343534
>   Start Date: <NULL_PTR>
>   End Date: <NULL_PTR>
>   Derive: false
>   Local: false
>   Key Generation Mechanism: <Attribute not present>
>   Allowed Mechanisms: <Attribute not present>
>   Subject (DER, hex): <NULL_PTR>
>   Sensitive: true
>   Secondary Authentication: <Attribute not present>
>   Secondary Authentication PIN Flags: <Attribute not present>
>   Decrypt: true
>   Sign: true
>   Sign Recover: true
>   Unwrap: true
>   Extractable: true
>   Always Sensitive: true
>   Never Extractable: false
>   Wrap With Trusted: <Attribute not present>
>   Unwrap Template: <Attribute not present>
>   Always Authenticate: <Attribute not present>
>   Modulus (hex):
> d5a3c3265e3fa3be258565fab165ac9f694dab04b79eee4e749870a6e0b9251267855fe72aa8bd21fac910336a07cf710a533a7681657e25869260bee261b3b67c7a7706fdb43a50d311213e48a488958c8d77873889fbfa8cbf0b4476ed7cee78aebd195b241da986750f4099d6849b872e2d08953a4ba4c1583ebfcbde614e8601d99c31d384c7ea9735e986f913cf9691b2e6868031999ac01e6a85712a9af94ac589c6c79e7e8246ff8aed45eb46d14c916549a35299a0a7621f45a94d54b0d1fdee80972a514216063aef6f59326a27bf0695f01592a1c7382d1beadf8c81dde13d20b18324ddce62627baa95028a04ddd1a4928cc5a5b4bf0db15fc3d7
>   Public Exponent (hex): 010001
>   Private Exponent (hex): <Value is sensitive>
>   Prime 1 (hex): <Value is sensitive>
>   Prime 2 (hex): <Value is sensitive>
>   Exponent 1 (hex): <Value is sensitive>
>   Exponent 2 (hex): <Value is sensitive>
>   Coefficient (hex): <Value is sensitive>
> _____________________________________________
> 
> 
> Would appreciate help ...
> 
> Thanks..
> Usha
> 
> 
> 
> On Tue, Dec 17, 2019 at 11:34 AM <[email protected]> wrote:
> 
> > On Monday, December 9, 2019 at 2:58:23 PM UTC-7, Usha Nayak wrote:
> > > Any help greatly appreciated.
> >
> > Hi Usha,
> >
> > We've talked about this a couple times now and two of us have searched our
> > change history without finding any obvious culprits. I think we're going to
> > need a minimal case we can run locally to reproduce the issue, and then
> > attach a debugger to make any progress. Is that possible to do?
> >
> > Thanks,
> > J.C.
> > _______________________________________________
> > dev-security mailing list
> > [email protected]
> > https://lists.mozilla.org/listinfo/dev-security
> >


Correction ...

Client executes succcessfully if public/private keypairs are created as session 
objects : 

        rsaPublicKeyTemplate.getToken().setBooleanValue(Boolean.FALSE);
        ....
                
        rsaPrivateKeyTemplate.getToken().setBooleanValue(Boolean.FALSE);

Exception occurs if they are created as token objects:

        rsaPublicKeyTemplate.getToken().setBooleanValue(Boolean.TRUE);
        ....
                
        rsaPrivateKeyTemplate.getToken().setBooleanValue(Boolean.TRUE);

NOTE: This issue started to occur after we upgraded NSS from 3.42.1  to 3.47.1. 
Sample client was using NSS 3.49 ( same behavior ) . 

Thanks..
_______________________________________________
dev-security mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-security

Reply via email to