@@ -431,37 +431,31 @@ fn encrypt_decrypt() -> TestResult {
431
431
432
432
#[ test]
433
433
#[ serial]
434
- // Currently SoftHSM doesn't support EncryptUpdate/DecryptUpdate
435
- #[ ignore]
436
434
fn encrypt_decrypt_multipart ( ) -> TestResult {
437
435
let ( pkcs11, slot) = init_pins ( ) ;
438
436
439
437
// Open a session and log in
440
438
let session = pkcs11. open_rw_session ( slot) ?;
441
439
session. login ( UserType :: User , Some ( & AuthPin :: new ( USER_PIN . into ( ) ) ) ) ?;
442
440
443
- // Define parameters for keypair
444
- let public_exponent = vec ! [ 0x01 , 0x00 , 0x01 ] ;
445
- let modulus_bits = 1024 ;
446
-
447
- let pub_key_template = vec ! [
441
+ // Generate key (currently SoftHSM only supports multi-part encrypt/decrypt for symmetric crypto)
442
+ let template = vec ! [
448
443
Attribute :: Token ( true ) ,
449
444
Attribute :: Private ( false ) ,
450
- Attribute :: PublicExponent ( public_exponent) ,
451
- Attribute :: ModulusBits ( modulus_bits. into( ) ) ,
445
+ Attribute :: ValueLen ( ( 128 / 8 ) . into( ) ) ,
452
446
Attribute :: Encrypt ( true ) ,
447
+ Attribute :: Decrypt ( true ) ,
453
448
] ;
454
- let priv_key_template = vec ! [ Attribute :: Token ( true ) , Attribute :: Decrypt ( true ) ] ;
455
-
456
- // Generate keypair
457
- let ( pub_key, priv_key) =
458
- session. generate_key_pair ( & Mechanism :: RsaPkcsKeyPairGen , & pub_key_template, & priv_key_template) ?;
449
+ let key = session. generate_key ( & Mechanism :: AesKeyGen , & template) ?;
459
450
460
451
// Data to encrypt
461
- let data = vec ! [ 0xFF , 0x55 , 0xDD , 0x11 , 0xBB , 0x33 ] ;
452
+ let data = vec ! [
453
+ 0xFF , 0x55 , 0xDD , 0x11 , 0xBB , 0x33 , 0x99 , 0x77 , 0xFF , 0x55 , 0xDD , 0x11 , 0xBB , 0x33 , 0x99 ,
454
+ 0x77 ,
455
+ ] ;
462
456
463
457
// Encrypt data in parts
464
- session. encrypt_initialize ( & Mechanism :: RsaPkcs , pub_key ) ?;
458
+ session. encrypt_initialize ( & Mechanism :: AesEcb , key ) ?;
465
459
466
460
let mut encrypted_data = vec ! [ ] ;
467
461
for part in data. chunks ( 3 ) {
@@ -470,7 +464,7 @@ fn encrypt_decrypt_multipart() -> TestResult {
470
464
encrypted_data. extend ( session. encrypt_finalize ( ) ?) ;
471
465
472
466
// Decrypt data in parts
473
- session. decrypt_initialize ( & Mechanism :: RsaPkcs , priv_key ) ?;
467
+ session. decrypt_initialize ( & Mechanism :: AesEcb , key ) ?;
474
468
475
469
let mut decrypted_data = vec ! [ ] ;
476
470
for part in encrypted_data. chunks ( 3 ) {
@@ -480,26 +474,26 @@ fn encrypt_decrypt_multipart() -> TestResult {
480
474
481
475
assert_eq ! ( data, decrypted_data) ;
482
476
483
- // Delete keys
484
- session. destroy_object ( pub_key) ?;
485
- session. destroy_object ( priv_key) ?;
477
+ // Delete key
478
+ session. destroy_object ( key) ?;
486
479
487
480
Ok ( ( ) )
488
481
}
489
482
490
483
#[ test]
491
484
#[ serial]
492
- // Currently SoftHSM doesn't support EncryptUpdate/DecryptUpdate
493
- #[ ignore]
494
485
fn encrypt_decrypt_multipart_not_initialized ( ) -> TestResult {
495
486
let ( pkcs11, slot) = init_pins ( ) ;
496
487
497
488
// Open a session and log in
498
- let session = pkcs11. open_rw_session ( slot) ?;
489
+ let session = pkcs11. open_ro_session ( slot) ?;
499
490
session. login ( UserType :: User , Some ( & AuthPin :: new ( USER_PIN . into ( ) ) ) ) ?;
500
491
501
492
// Data to encrypt/decrypt
502
- let data = vec ! [ 0xAA , 0xBB , 0xCC , 0xDD , 0xEE , 0xFF ] ;
493
+ let data = vec ! [
494
+ 0xFF , 0x55 , 0xDD , 0x11 , 0xBB , 0x33 , 0x99 , 0x77 , 0xFF , 0x55 , 0xDD , 0x11 , 0xBB , 0x33 , 0x99 ,
495
+ 0x77 ,
496
+ ] ;
503
497
504
498
// Attempt to update encryption without an operation having been initialized
505
499
let result = session. encrypt_update ( & data) ;
@@ -542,55 +536,48 @@ fn encrypt_decrypt_multipart_not_initialized() -> TestResult {
542
536
543
537
#[ test]
544
538
#[ serial]
545
- // Currently SoftHSM doesn't support EncryptUpdate/DecryptUpdate
546
- #[ ignore]
547
539
fn encrypt_decrypt_multipart_already_initialized ( ) -> TestResult {
548
540
let ( pkcs11, slot) = init_pins ( ) ;
549
541
550
542
// Open a session and log in
551
543
let session = pkcs11. open_rw_session ( slot) ?;
552
544
session. login ( UserType :: User , Some ( & AuthPin :: new ( USER_PIN . into ( ) ) ) ) ?;
553
545
554
- // Define parameters for keypair
555
- let public_exponent = vec ! [ 0x01 , 0x00 , 0x01 ] ;
556
- let modulus_bits = 1024 ;
557
-
558
- let pub_key_template = vec ! [
546
+ // Generate key (currently SoftHSM only supports multi-part encrypt/decrypt for symmetric crypto)
547
+ let template = vec ! [
559
548
Attribute :: Token ( true ) ,
560
549
Attribute :: Private ( false ) ,
561
- Attribute :: PublicExponent ( public_exponent) ,
562
- Attribute :: ModulusBits ( modulus_bits. into( ) ) ,
550
+ Attribute :: ValueLen ( ( 128 / 8 ) . into( ) ) ,
563
551
Attribute :: Encrypt ( true ) ,
552
+ Attribute :: Decrypt ( true ) ,
564
553
] ;
565
- let priv_key_template = vec ! [ Attribute :: Token ( true ) , Attribute :: Decrypt ( true ) ] ;
566
-
567
- // Generate keypair
568
- let ( pub_key, priv_key) =
569
- session. generate_key_pair ( & Mechanism :: RsaPkcsKeyPairGen , & pub_key_template, & priv_key_template) ?;
554
+ let key = session. generate_key ( & Mechanism :: AesKeyGen , & template) ?;
570
555
571
556
// Initialize encryption operation twice in a row
572
- session. encrypt_initialize ( & Mechanism :: RsaPkcs , pub_key ) ?;
573
- let result = session. encrypt_initialize ( & Mechanism :: RsaPkcs , pub_key ) ;
557
+ session. encrypt_initialize ( & Mechanism :: AesEcb , key ) ?;
558
+ let result = session. encrypt_initialize ( & Mechanism :: AesEcb , key ) ;
574
559
575
560
assert ! ( result. is_err( ) ) ;
576
561
assert ! ( matches!(
577
562
result. unwrap_err( ) ,
578
563
Error :: Pkcs11 ( RvError :: OperationActive , Function :: EncryptInit )
579
564
) ) ;
580
565
566
+ // Make sure encryption operation is over before trying same with decryption
567
+ session. encrypt_finalize ( ) ?;
568
+
581
569
// Initialize encryption operation twice in a row
582
- session. decrypt_initialize ( & Mechanism :: RsaPkcs , priv_key ) ?;
583
- let result = session. decrypt_initialize ( & Mechanism :: RsaPkcs , priv_key ) ;
570
+ session. decrypt_initialize ( & Mechanism :: AesEcb , key ) ?;
571
+ let result = session. decrypt_initialize ( & Mechanism :: AesEcb , key ) ;
584
572
585
573
assert ! ( result. is_err( ) ) ;
586
574
assert ! ( matches!(
587
575
result. unwrap_err( ) ,
588
576
Error :: Pkcs11 ( RvError :: OperationActive , Function :: DecryptInit )
589
577
) ) ;
590
578
591
- // Delete keys
592
- session. destroy_object ( pub_key) ?;
593
- session. destroy_object ( priv_key) ?;
579
+ // Delete key
580
+ session. destroy_object ( key) ?;
594
581
595
582
Ok ( ( ) )
596
583
}
@@ -1644,7 +1631,9 @@ fn sha256_digest_multipart() -> TestResult {
1644
1631
session. login ( UserType :: User , Some ( & AuthPin :: new ( USER_PIN . into ( ) ) ) ) ?;
1645
1632
1646
1633
// Data to digest
1647
- let data = vec ! [ 0xAA , 0xBB , 0xCC , 0xDD , 0xEE , 0xFF , 0x66 , 0x55 , 0x44 , 0x33 , 0x22 , 0x11 ] ;
1634
+ let data = vec ! [
1635
+ 0xAA , 0xBB , 0xCC , 0xDD , 0xEE , 0xFF , 0x66 , 0x55 , 0x44 , 0x33 , 0x22 , 0x11 ,
1636
+ ] ;
1648
1637
1649
1638
// Digest data in parts
1650
1639
session. digest_initialize ( & Mechanism :: Sha256 ) ?;
0 commit comments