@@ -1155,4 +1155,154 @@ pNs85uhOZE8z2jr8Pg==
11551155 assert ! ( result. is_err( ) ) ;
11561156 assert_eq ! ( result. unwrap_err( ) . to_string( ) , "Unsupported algorithm" ) ;
11571157 }
1158+
1159+ #[ test]
1160+ fn test_normalize_algorithm ( ) {
1161+ assert_eq ! ( normalize_algorithm( "k256" ) , "secp256k1" ) ;
1162+ assert_eq ! ( normalize_algorithm( "secp256k1" ) , "secp256k1" ) ;
1163+ assert_eq ! ( normalize_algorithm( "ed25519" ) , "ed25519" ) ;
1164+ assert_eq ! ( normalize_algorithm( "" ) , "" ) ;
1165+ assert_eq ! ( normalize_algorithm( "unknown" ) , "unknown" ) ;
1166+ }
1167+
1168+ #[ tokio:: test]
1169+ async fn test_get_key_k256_alias ( ) {
1170+ let ( state, _guard) = setup_test_state ( ) . await ;
1171+ let handler_k256 = InternalRpcHandler {
1172+ state : state. clone ( ) ,
1173+ } ;
1174+ let handler_secp = InternalRpcHandler {
1175+ state : state. clone ( ) ,
1176+ } ;
1177+
1178+ let req_k256 = GetKeyArgs {
1179+ path : "test" . to_string ( ) ,
1180+ purpose : "signing" . to_string ( ) ,
1181+ algorithm : "k256" . to_string ( ) ,
1182+ } ;
1183+ let req_secp = GetKeyArgs {
1184+ path : "test" . to_string ( ) ,
1185+ purpose : "signing" . to_string ( ) ,
1186+ algorithm : "secp256k1" . to_string ( ) ,
1187+ } ;
1188+
1189+ let resp_k256 = handler_k256. get_key ( req_k256) . await . unwrap ( ) ;
1190+ let resp_secp = handler_secp. get_key ( req_secp) . await . unwrap ( ) ;
1191+
1192+ // k256 alias should produce the same key as secp256k1
1193+ assert_eq ! ( resp_k256. key, resp_secp. key) ;
1194+ }
1195+
1196+ #[ tokio:: test]
1197+ async fn test_get_key_secp256k1_prehashed_rejected ( ) {
1198+ let ( state, _guard) = setup_test_state ( ) . await ;
1199+ let handler = InternalRpcHandler { state } ;
1200+
1201+ let request = GetKeyArgs {
1202+ path : "test" . to_string ( ) ,
1203+ purpose : "signing" . to_string ( ) ,
1204+ algorithm : "secp256k1_prehashed" . to_string ( ) ,
1205+ } ;
1206+
1207+ let result = handler. get_key ( request) . await ;
1208+ assert ! ( result. is_err( ) ) ;
1209+ assert_eq ! ( result. unwrap_err( ) . to_string( ) , "Unsupported algorithm" ) ;
1210+ }
1211+
1212+ #[ tokio:: test]
1213+ async fn test_get_key_ed25519_success ( ) {
1214+ let ( state, _guard) = setup_test_state ( ) . await ;
1215+ let handler = InternalRpcHandler { state } ;
1216+
1217+ let request = GetKeyArgs {
1218+ path : "test" . to_string ( ) ,
1219+ purpose : "signing" . to_string ( ) ,
1220+ algorithm : "ed25519" . to_string ( ) ,
1221+ } ;
1222+
1223+ let response = handler. get_key ( request) . await . unwrap ( ) ;
1224+ assert ! ( !response. key. is_empty( ) ) ;
1225+ assert_eq ! ( response. signature_chain. len( ) , 2 ) ;
1226+ }
1227+
1228+ #[ tokio:: test]
1229+ async fn test_get_key_default_algorithm ( ) {
1230+ let ( state, _guard) = setup_test_state ( ) . await ;
1231+ let handler_default = InternalRpcHandler {
1232+ state : state. clone ( ) ,
1233+ } ;
1234+ let handler_secp = InternalRpcHandler {
1235+ state : state. clone ( ) ,
1236+ } ;
1237+
1238+ let req_default = GetKeyArgs {
1239+ path : "test" . to_string ( ) ,
1240+ purpose : "signing" . to_string ( ) ,
1241+ algorithm : "" . to_string ( ) ,
1242+ } ;
1243+ let req_secp = GetKeyArgs {
1244+ path : "test" . to_string ( ) ,
1245+ purpose : "signing" . to_string ( ) ,
1246+ algorithm : "secp256k1" . to_string ( ) ,
1247+ } ;
1248+
1249+ let resp_default = handler_default. get_key ( req_default) . await . unwrap ( ) ;
1250+ let resp_secp = handler_secp. get_key ( req_secp) . await . unwrap ( ) ;
1251+
1252+ // Empty algorithm should default to secp256k1
1253+ assert_eq ! ( resp_default. key, resp_secp. key) ;
1254+ }
1255+
1256+ #[ tokio:: test]
1257+ async fn test_get_key_unsupported_algorithm_fails ( ) {
1258+ let ( state, _guard) = setup_test_state ( ) . await ;
1259+ let handler = InternalRpcHandler { state } ;
1260+
1261+ let request = GetKeyArgs {
1262+ path : "test" . to_string ( ) ,
1263+ purpose : "signing" . to_string ( ) ,
1264+ algorithm : "rsa" . to_string ( ) ,
1265+ } ;
1266+
1267+ let result = handler. get_key ( request) . await ;
1268+ assert ! ( result. is_err( ) ) ;
1269+ assert_eq ! ( result. unwrap_err( ) . to_string( ) , "Unsupported algorithm" ) ;
1270+ }
1271+
1272+ #[ tokio:: test]
1273+ async fn test_version ( ) {
1274+ let ( state, _guard) = setup_test_state ( ) . await ;
1275+ let handler = InternalRpcHandler { state } ;
1276+
1277+ let response = handler. version ( ) . await . unwrap ( ) ;
1278+ assert ! ( !response. version. is_empty( ) ) ;
1279+ }
1280+
1281+ #[ tokio:: test]
1282+ async fn test_sign_k256_alias ( ) {
1283+ let ( state, _guard) = setup_test_state ( ) . await ;
1284+ let handler_k256 = InternalRpcHandler {
1285+ state : state. clone ( ) ,
1286+ } ;
1287+ let handler_secp = InternalRpcHandler {
1288+ state : state. clone ( ) ,
1289+ } ;
1290+
1291+ let data = b"test message" . to_vec ( ) ;
1292+
1293+ let req_k256 = SignRequest {
1294+ algorithm : "k256" . to_string ( ) ,
1295+ data : data. clone ( ) ,
1296+ } ;
1297+ let req_secp = SignRequest {
1298+ algorithm : "secp256k1" . to_string ( ) ,
1299+ data : data. clone ( ) ,
1300+ } ;
1301+
1302+ let resp_k256 = handler_k256. sign ( req_k256) . await . unwrap ( ) ;
1303+ let resp_secp = handler_secp. sign ( req_secp) . await . unwrap ( ) ;
1304+
1305+ // k256 alias should produce the same public key as secp256k1
1306+ assert_eq ! ( resp_k256. public_key, resp_secp. public_key) ;
1307+ }
11581308}
0 commit comments