@@ -125,7 +125,7 @@ use trussed::{
125125 client:: { ClientImplementation , HmacSha256 } ,
126126 service:: Service ,
127127 syscall, try_syscall,
128- types:: Bytes ,
128+ types:: { Bytes , Message } ,
129129 virt:: { self , Ram } ,
130130} ;
131131use trussed_auth:: { AuthClient as _, PinId , MAX_HW_KEY_LEN } ;
@@ -658,3 +658,30 @@ fn delete_all_pins() {
658658 assert ! ( result. is_err( ) ) ;
659659 } )
660660}
661+
662+ #[ test]
663+ fn application_key ( ) {
664+ run ( BACKENDS , |client| {
665+ let info1 = Message :: from_slice ( b"test1" ) . unwrap ( ) ;
666+ let info2 = Message :: from_slice ( b"test2" ) . unwrap ( ) ;
667+ let app_key1 = syscall ! ( client. get_application_key( info1. clone( ) ) ) . key ;
668+ let app_key2 = syscall ! ( client. get_application_key( info2) ) . key ;
669+ let mac1 = syscall ! ( client. sign_hmacsha256( app_key1, b"Some data" ) ) . signature ;
670+ let mac2 = syscall ! ( client. sign_hmacsha256( app_key2, b"Some data" ) ) . signature ;
671+ // Different info leads to different keys
672+ assert_ne ! ( mac1, mac2) ;
673+
674+ let app_key1_again = syscall ! ( client. get_application_key( info1. clone( ) ) ) . key ;
675+ let mac1_again = syscall ! ( client. sign_hmacsha256( app_key1_again, b"Some data" ) ) . signature ;
676+ // Same info leads to same key
677+ assert_eq ! ( mac1, mac1_again) ;
678+
679+ syscall ! ( client. delete_all_pins( ) ) ;
680+
681+ // After deletion same info leads to different keys
682+ let app_key1_after_delete = syscall ! ( client. get_application_key( info1) ) . key ;
683+ let mac1_after_delete =
684+ syscall ! ( client. sign_hmacsha256( app_key1_after_delete, b"Some data" ) ) . signature ;
685+ assert_ne ! ( mac1, mac1_after_delete) ;
686+ } )
687+ }
0 commit comments