@@ -20,9 +20,14 @@ const pin = "12345";
20
20
21
21
context ( "PKCS11" , ( ) => {
22
22
context ( "load" , ( ) => {
23
+ it ( "load via constructor" , ( ) => {
24
+ const token = new pkcs11 . PKCS11 ( softHsmLib ) ;
25
+ assert . strictEqual ( token . libPath , softHsmLib ) ;
26
+ } ) ;
23
27
it ( "correct" , ( ) => {
24
28
const token = new pkcs11 . PKCS11 ( ) ;
25
29
token . load ( softHsmLib ) ;
30
+ assert . strictEqual ( token . libPath , softHsmLib ) ;
26
31
} ) ;
27
32
it ( "throw exception if file does not exist" , ( ) => {
28
33
const token = new pkcs11 . PKCS11 ( ) ;
@@ -384,6 +389,152 @@ context("PKCS11", () => {
384
389
assert . strictEqual ( attrs [ 0 ] . value . toString ( "hex" ) , Buffer . from ( "new label" ) . toString ( "hex" ) ) ;
385
390
} ) ;
386
391
} ) ;
392
+ context ( "CK_DATE attributes" , ( ) => {
393
+ const certRaw = Buffer . from (
394
+ "MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/" +
395
+ "MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT" +
396
+ "DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow" +
397
+ "SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT" +
398
+ "GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC" +
399
+ "AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF" +
400
+ "q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8" +
401
+ "SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0" +
402
+ "Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA" +
403
+ "a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj" +
404
+ "/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T" +
405
+ "AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG" +
406
+ "CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv" +
407
+ "bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k" +
408
+ "c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw" +
409
+ "VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC" +
410
+ "ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz" +
411
+ "MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu" +
412
+ "Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF" +
413
+ "AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo" +
414
+ "uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/" +
415
+ "wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu" +
416
+ "X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG" +
417
+ "PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6" +
418
+ "KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==" , "base64" ) ;
419
+
420
+ const subjectRaw = Buffer . from (
421
+ "4A310B300906035504061302555331163014060355040A130D4C65742773204" +
422
+ "56E6372797074312330210603550403131A4C6574277320456E637279707420" +
423
+ "417574686F7269747920583" , "hex" ) ;
424
+
425
+ it ( "String" , ( ) => {
426
+ const obj = token . C_CreateObject ( session , [
427
+ { type : pkcs11 . CKA_CLASS , value : pkcs11 . CKO_CERTIFICATE } ,
428
+ { type : pkcs11 . CKA_CERTIFICATE_TYPE , value : pkcs11 . CKC_X_509 } ,
429
+ { type : pkcs11 . CKA_CERTIFICATE_CATEGORY , value : 0 } ,
430
+ { type : pkcs11 . CKA_ID , value : Buffer . from ( "1234" ) } ,
431
+ { type : pkcs11 . CKA_LABEL , value : Buffer . from ( "CKA_DATE" ) } ,
432
+ { type : pkcs11 . CKA_SUBJECT , value : subjectRaw } ,
433
+ { type : pkcs11 . CKA_VALUE , value : certRaw } ,
434
+ { type : pkcs11 . CKA_TOKEN , value : false } ,
435
+ { type : pkcs11 . CKA_START_DATE , value : "20200102" } ,
436
+ { type : pkcs11 . CKA_END_DATE , value : "20200103" } ,
437
+ ] ) ;
438
+
439
+ const attrs = token . C_GetAttributeValue ( session , obj , [
440
+ { type : pkcs11 . CKA_START_DATE } ,
441
+ { type : pkcs11 . CKA_END_DATE } ,
442
+ ] ) ;
443
+ assert . strictEqual ( attrs . length , 2 ) ;
444
+ assert . strictEqual ( attrs [ 0 ] . type , pkcs11 . CKA_START_DATE ) ;
445
+ assert . strictEqual ( attrs [ 0 ] . value . toString ( ) , "20200102" ) ;
446
+ assert . strictEqual ( attrs [ 1 ] . type , pkcs11 . CKA_END_DATE ) ;
447
+ assert . strictEqual ( attrs [ 1 ] . value . toString ( ) , "20200103" ) ;
448
+ } ) ;
449
+ it ( "Buffer" , ( ) => {
450
+ const obj = token . C_CreateObject ( session , [
451
+ { type : pkcs11 . CKA_CLASS , value : pkcs11 . CKO_CERTIFICATE } ,
452
+ { type : pkcs11 . CKA_CERTIFICATE_TYPE , value : pkcs11 . CKC_X_509 } ,
453
+ { type : pkcs11 . CKA_CERTIFICATE_CATEGORY , value : 0 } ,
454
+ { type : pkcs11 . CKA_ID , value : Buffer . from ( "1234" ) } ,
455
+ { type : pkcs11 . CKA_LABEL , value : Buffer . from ( "CKA_DATE" ) } ,
456
+ { type : pkcs11 . CKA_SUBJECT , value : subjectRaw } ,
457
+ { type : pkcs11 . CKA_VALUE , value : certRaw } ,
458
+ { type : pkcs11 . CKA_TOKEN , value : false } ,
459
+ { type : pkcs11 . CKA_START_DATE , value : Buffer . from ( "20200102" ) } ,
460
+ { type : pkcs11 . CKA_END_DATE , value : Buffer . from ( "20200103" ) } ,
461
+ ] ) ;
462
+
463
+ const attrs = token . C_GetAttributeValue ( session , obj , [
464
+ { type : pkcs11 . CKA_START_DATE } ,
465
+ { type : pkcs11 . CKA_END_DATE } ,
466
+ ] ) ;
467
+ assert . strictEqual ( attrs . length , 2 ) ;
468
+ assert . strictEqual ( attrs [ 0 ] . type , pkcs11 . CKA_START_DATE ) ;
469
+ assert . strictEqual ( attrs [ 0 ] . value . toString ( ) , "20200102" ) ;
470
+ assert . strictEqual ( attrs [ 1 ] . type , pkcs11 . CKA_END_DATE ) ;
471
+ assert . strictEqual ( attrs [ 1 ] . value . toString ( ) , "20200103" ) ;
472
+ } ) ;
473
+ it ( "Date" , ( ) => {
474
+ const obj = token . C_CreateObject ( session , [
475
+ { type : pkcs11 . CKA_CLASS , value : pkcs11 . CKO_CERTIFICATE } ,
476
+ { type : pkcs11 . CKA_CERTIFICATE_TYPE , value : pkcs11 . CKC_X_509 } ,
477
+ { type : pkcs11 . CKA_CERTIFICATE_CATEGORY , value : 0 } ,
478
+ { type : pkcs11 . CKA_ID , value : Buffer . from ( "1234" ) } ,
479
+ { type : pkcs11 . CKA_LABEL , value : Buffer . from ( "CKA_DATE" ) } ,
480
+ { type : pkcs11 . CKA_SUBJECT , value : subjectRaw } ,
481
+ { type : pkcs11 . CKA_VALUE , value : certRaw } ,
482
+ { type : pkcs11 . CKA_TOKEN , value : false } ,
483
+ { type : pkcs11 . CKA_START_DATE , value : new Date ( "2020-01-02" ) } ,
484
+ { type : pkcs11 . CKA_END_DATE , value : new Date ( "2020-01-03" ) } ,
485
+ ] ) ;
486
+
487
+ const attrs = token . C_GetAttributeValue ( session , obj , [
488
+ { type : pkcs11 . CKA_START_DATE } ,
489
+ { type : pkcs11 . CKA_END_DATE } ,
490
+ ] ) ;
491
+ assert . strictEqual ( attrs . length , 2 ) ;
492
+ assert . strictEqual ( attrs [ 0 ] . type , pkcs11 . CKA_START_DATE ) ;
493
+ assert . strictEqual ( attrs [ 0 ] . value . toString ( ) , "20200102" ) ;
494
+ assert . strictEqual ( attrs [ 1 ] . type , pkcs11 . CKA_END_DATE ) ;
495
+ assert . strictEqual ( attrs [ 1 ] . value . toString ( ) , "20200103" ) ;
496
+ } ) ;
497
+ it ( "should throw error if argument is not a String, Buffer or Date" , ( ) => {
498
+ assert . throws ( ( ) => {
499
+ token . C_CreateObject ( session , [
500
+ { type : pkcs11 . CKA_CLASS , value : pkcs11 . CKO_CERTIFICATE } ,
501
+ { type : pkcs11 . CKA_CERTIFICATE_TYPE , value : pkcs11 . CKC_X_509 } ,
502
+ { type : pkcs11 . CKA_CERTIFICATE_CATEGORY , value : 0 } ,
503
+ { type : pkcs11 . CKA_ID , value : Buffer . from ( "1234" ) } ,
504
+ { type : pkcs11 . CKA_LABEL , value : Buffer . from ( "CKA_DATE" ) } ,
505
+ { type : pkcs11 . CKA_SUBJECT , value : subjectRaw } ,
506
+ { type : pkcs11 . CKA_VALUE , value : certRaw } ,
507
+ { type : pkcs11 . CKA_TOKEN , value : false } ,
508
+ { type : pkcs11 . CKA_START_DATE , value : 123 } ,
509
+ { type : pkcs11 . CKA_END_DATE , value : 123 } ,
510
+ ] ) ;
511
+ } , ( e ) => {
512
+ assert . strictEqual ( e instanceof TypeError , true ) ;
513
+ assert . strictEqual ( e . message , "Attribute with type 0x00000110 is not convertible to CK_DATE. Should be a String, Buffer or Date" ) ;
514
+ return true ;
515
+ } ) ;
516
+ } ) ;
517
+ it ( "should throw error if argument is less than 8 bytes" , ( ) => {
518
+ assert . throws ( ( ) => {
519
+ token . C_CreateObject ( session , [
520
+ { type : pkcs11 . CKA_CLASS , value : pkcs11 . CKO_CERTIFICATE } ,
521
+ { type : pkcs11 . CKA_CERTIFICATE_TYPE , value : pkcs11 . CKC_X_509 } ,
522
+ { type : pkcs11 . CKA_CERTIFICATE_CATEGORY , value : 0 } ,
523
+ { type : pkcs11 . CKA_ID , value : Buffer . from ( "1234" ) } ,
524
+ { type : pkcs11 . CKA_LABEL , value : Buffer . from ( "CKA_DATE" ) } ,
525
+ { type : pkcs11 . CKA_SUBJECT , value : subjectRaw } ,
526
+ { type : pkcs11 . CKA_VALUE , value : certRaw } ,
527
+ { type : pkcs11 . CKA_TOKEN , value : false } ,
528
+ { type : pkcs11 . CKA_START_DATE , value : "123" } ,
529
+ { type : pkcs11 . CKA_END_DATE , value : "123" } ,
530
+ ] ) ;
531
+ } , ( e ) => {
532
+ assert . strictEqual ( e instanceof TypeError , true ) ;
533
+ assert . strictEqual ( e . message , "Attribute with type 0x00000110 is not convertible to CK_DATE. The length of the data should be at least 8 bytes." ) ;
534
+ return true ;
535
+ } ) ;
536
+ } ) ;
537
+ } ) ;
387
538
} ) ;
388
539
[
389
540
"C_DigestEncryptUpdate" ,
0 commit comments