@@ -826,3 +826,46 @@ fn aes_cbc_pad_encrypt() -> TestResult {
826
826
assert_eq ! ( expected_cipher[ ..] , cipher[ ..] ) ;
827
827
Ok ( ( ) )
828
828
}
829
+
830
+ #[ test]
831
+ #[ serial]
832
+ fn update_attributes_key ( ) -> Result < ( ) > {
833
+ let ( pkcs11, slot) = init_pins ( ) ;
834
+ // open a session
835
+ let session = pkcs11. open_rw_session ( slot) ?;
836
+
837
+ // log in the session
838
+ session. login ( UserType :: User , Some ( USER_PIN ) ) ?;
839
+
840
+ // pub key template
841
+ let pub_key_template = vec ! [
842
+ Attribute :: Token ( true ) ,
843
+ Attribute :: Private ( true ) ,
844
+ Attribute :: PublicExponent ( vec![ 0x01 , 0x00 , 0x01 ] ) ,
845
+ Attribute :: ModulusBits ( 1024 . into( ) ) ,
846
+ ] ;
847
+
848
+ // priv key template
849
+ let priv_key_template = vec ! [ Attribute :: Token ( true ) , Attribute :: Extractable ( true ) ] ;
850
+
851
+ let ( _public_key, private_key) = session. generate_key_pair (
852
+ & Mechanism :: RsaPkcsKeyPairGen ,
853
+ & pub_key_template,
854
+ & priv_key_template,
855
+ ) ?;
856
+
857
+ let updated_attributes = vec ! [ Attribute :: Extractable ( false ) ] ;
858
+
859
+ session. update_attributes ( private_key, & updated_attributes) ?;
860
+
861
+ let mut attributes_result =
862
+ session. get_attributes ( private_key, & [ AttributeType :: Extractable ] ) ?;
863
+
864
+ if let Some ( Attribute :: Extractable ( ext) ) = attributes_result. pop ( ) {
865
+ assert ! ( ext == false ) ;
866
+ } else {
867
+ panic ! ( "Last attribute was not extractable" ) ;
868
+ }
869
+
870
+ Ok ( ( ) )
871
+ }
0 commit comments