@@ -169,10 +169,10 @@ impl<Ids: KeyIds> KeyStoreContext<'_, Ids> {
169169 let wrapping_key = self . get_symmetric_key ( wrapping_key) ?;
170170
171171 let key = match ( wrapped_key, wrapping_key) {
172- ( EncString :: Aes256Cbc_B64 { iv , data } , SymmetricCryptoKey :: Aes256CbcKey ( key ) ) => {
173- SymmetricCryptoKey :: try_from ( & BitwardenLegacyKeyBytes :: from (
174- crate :: aes :: decrypt_aes256 ( iv , data . clone ( ) , & key . enc_key ) ? ,
175- ) ) ?
172+ ( EncString :: Aes256Cbc_B64 { .. } , SymmetricCryptoKey :: Aes256CbcKey ( _ ) ) => {
173+ return Err ( CryptoError :: OperationNotSupported (
174+ UnsupportedOperationError :: DecryptionNotImplementedForKey ,
175+ ) ) ;
176176 }
177177 (
178178 EncString :: Aes256Cbc_HmacSha256_B64 { iv, mac, data } ,
@@ -517,8 +517,10 @@ impl<Ids: KeyIds> KeyStoreContext<'_, Ids> {
517517 let key = self . get_symmetric_key ( key) ?;
518518
519519 match ( data, key) {
520- ( EncString :: Aes256Cbc_B64 { iv, data } , SymmetricCryptoKey :: Aes256CbcKey ( key) ) => {
521- crate :: aes:: decrypt_aes256 ( iv, data. clone ( ) , & key. enc_key )
520+ ( EncString :: Aes256Cbc_B64 { .. } , SymmetricCryptoKey :: Aes256CbcKey ( _) ) => {
521+ Err ( CryptoError :: OperationNotSupported (
522+ UnsupportedOperationError :: DecryptionNotImplementedForKey ,
523+ ) )
522524 }
523525 (
524526 EncString :: Aes256Cbc_HmacSha256_B64 { iv, mac, data } ,
@@ -605,8 +607,8 @@ mod tests {
605607
606608 use crate :: {
607609 AsymmetricCryptoKey , AsymmetricPublicCryptoKey , CompositeEncryptable , CoseKeyBytes ,
608- CoseSerializable , CryptoError , Decryptable , KeyDecryptable , LocalId , Pkcs8PrivateKeyBytes ,
609- SignatureAlgorithm , SigningKey , SigningNamespace , SymmetricCryptoKey ,
610+ CoseSerializable , CryptoError , Decryptable , EncString , KeyDecryptable , LocalId ,
611+ Pkcs8PrivateKeyBytes , SignatureAlgorithm , SigningKey , SigningNamespace , SymmetricCryptoKey ,
610612 store:: {
611613 KeyStore ,
612614 tests:: { Data , DataView } ,
@@ -894,4 +896,91 @@ mod tests {
894896 "Expected encrypt to fail with KeyOperationNotSupported" ,
895897 ) ;
896898 }
899+
900+ #[ test]
901+ fn test_encrypt_decrypt_data_fails_when_key_is_type_0 ( ) {
902+ let store = KeyStore :: < TestIds > :: default ( ) ;
903+ let mut ctx = store. context_mut ( ) ;
904+
905+ let key_id = TestSymmKey :: A ( 0 ) ;
906+ let key = SymmetricCryptoKey :: Aes256CbcKey ( crate :: Aes256CbcKey {
907+ enc_key : Box :: pin ( [ 0u8 ; 32 ] . into ( ) ) ,
908+ } ) ;
909+ ctx. set_symmetric_key_internal ( key_id, key) . unwrap ( ) ;
910+
911+ let data_to_encrypt: Vec < u8 > = vec ! [ 1 , 2 , 3 , 4 , 5 ] ;
912+ let result = ctx. encrypt_data_with_symmetric_key (
913+ key_id,
914+ & data_to_encrypt,
915+ crate :: ContentFormat :: OctetStream ,
916+ ) ;
917+ assert ! (
918+ matches!(
919+ result,
920+ Err ( CryptoError :: OperationNotSupported (
921+ crate :: error:: UnsupportedOperationError :: EncryptionNotImplementedForKey
922+ ) )
923+ ) ,
924+ "Expected encrypt to fail when using deprecated type 0 keys" ,
925+ ) ;
926+
927+ let data_to_decrypt = EncString :: Aes256Cbc_B64 {
928+ iv : [ 0 ; 16 ] ,
929+ data : data_to_encrypt,
930+ } ; // dummy value; shouldn't matter
931+ let result = ctx. decrypt_data_with_symmetric_key ( key_id, & data_to_decrypt) ;
932+ assert ! (
933+ matches!(
934+ result,
935+ Err ( CryptoError :: OperationNotSupported (
936+ crate :: error:: UnsupportedOperationError :: DecryptionNotImplementedForKey
937+ ) )
938+ ) ,
939+ "Expected decrypt to fail when using deprecated type 0 keys" ,
940+ ) ;
941+ }
942+
943+ #[ test]
944+ fn test_wrap_unwrap_key_fails_when_key_is_type_0 ( ) {
945+ let store = KeyStore :: < TestIds > :: default ( ) ;
946+ let mut ctx = store. context_mut ( ) ;
947+
948+ let wrapping_key_id = TestSymmKey :: A ( 0 ) ;
949+ let wrapping_key = SymmetricCryptoKey :: Aes256CbcKey ( crate :: Aes256CbcKey {
950+ enc_key : Box :: pin ( [ 0u8 ; 32 ] . into ( ) ) ,
951+ } ) ;
952+ ctx. set_symmetric_key_internal ( wrapping_key_id, wrapping_key)
953+ . unwrap ( ) ;
954+
955+ let key_to_wrap_id = TestSymmKey :: A ( 1 ) ;
956+ let key_to_wrap = SymmetricCryptoKey :: make_aes256_cbc_hmac_key ( ) ;
957+ ctx. set_symmetric_key_internal ( key_to_wrap_id, key_to_wrap)
958+ . unwrap ( ) ;
959+
960+ let result = ctx. wrap_symmetric_key ( wrapping_key_id, key_to_wrap_id) ;
961+ assert ! (
962+ matches!(
963+ result,
964+ Err ( CryptoError :: OperationNotSupported (
965+ crate :: error:: UnsupportedOperationError :: EncryptionNotImplementedForKey
966+ ) )
967+ ) ,
968+ "Expected encrypt to fail when using deprecated type 0 keys" ,
969+ ) ;
970+
971+ let wrapped_key = & EncString :: Aes256Cbc_B64 {
972+ iv : [ 0 ; 16 ] ,
973+ data : vec ! [ 0 ] ,
974+ } ; // dummy value; shouldn't matter
975+ let result = ctx. unwrap_symmetric_key ( wrapping_key_id, wrapped_key) ;
976+ assert ! (
977+ matches!(
978+ result,
979+ Err ( CryptoError :: OperationNotSupported (
980+ crate :: error:: UnsupportedOperationError :: DecryptionNotImplementedForKey
981+ ) )
982+ ) ,
983+ "Expected decrypt to fail when using deprecated type 0 keys" ,
984+ ) ;
985+ }
897986}
0 commit comments