@@ -81,6 +81,12 @@ void ValidateErrorCode(BraveWalletProviderImpl* provider,
81
81
ASSERT_TRUE (callback_is_called);
82
82
}
83
83
84
+ std::vector<uint8_t > DecodeHexHash (const std::string& hash_hex) {
85
+ std::vector<uint8_t > hash;
86
+ base::HexStringToBytes (hash_hex, &hash);
87
+ return hash;
88
+ }
89
+
84
90
} // namespace
85
91
86
92
class TestEventsListener : public brave_wallet ::mojom::EventsListener {
@@ -424,7 +430,8 @@ class BraveWalletProviderImplUnitTest : public testing::Test {
424
430
void SignTypedMessage (absl::optional<bool > user_approved,
425
431
const std::string& address,
426
432
const std::string& message,
427
- const std::string& message_to_sign,
433
+ const std::vector<uint8_t >& domain_hash,
434
+ const std::vector<uint8_t >& primary_hash,
428
435
base::Value&& domain,
429
436
std::string* signature_out,
430
437
mojom::ProviderError* error_out,
@@ -434,7 +441,7 @@ class BraveWalletProviderImplUnitTest : public testing::Test {
434
441
435
442
base::RunLoop run_loop;
436
443
provider ()->SignTypedMessage (
437
- address, message, message_to_sign , std::move (domain),
444
+ address, message, domain_hash, primary_hash , std::move (domain),
438
445
base::BindLambdaForTesting ([&](const std::string& signature,
439
446
mojom::ProviderError error,
440
447
const std::string& error_message) {
@@ -1216,47 +1223,50 @@ TEST_F(BraveWalletProviderImplUnitTest, SignTypedMessage) {
1216
1223
EXPECT_EQ (json_rpc_service ()->GetChainId (), " 0x1" );
1217
1224
CreateWallet ();
1218
1225
AddAccount ();
1219
- const std::string valid_message_to_sign =
1220
- " be609aee343fb3c4b28e1df9e632fca64fcfaede20f02e86244efddf30957bd2" ;
1221
1226
std::string signature;
1222
1227
mojom::ProviderError error;
1223
1228
std::string error_message;
1224
1229
base::Value domain (base::Value::Type::DICTIONARY);
1230
+ std::vector<uint8_t > domain_hash = DecodeHexHash (
1231
+ " f2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f" );
1232
+ std::vector<uint8_t > primary_hash = DecodeHexHash (
1233
+ " c52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e" );
1225
1234
domain.SetIntKey (" chainId" , 1 );
1226
- SignTypedMessage (absl::nullopt, " 1234" , " {...}" , valid_message_to_sign ,
1235
+ SignTypedMessage (absl::nullopt, " 1234" , " {...}" , domain_hash, primary_hash ,
1227
1236
domain.Clone (), &signature, &error, &error_message);
1228
1237
EXPECT_TRUE (signature.empty ());
1229
1238
EXPECT_EQ (error, mojom::ProviderError::kInvalidParams );
1230
1239
EXPECT_EQ (error_message,
1231
1240
l10n_util::GetStringUTF8 (IDS_WALLET_INVALID_PARAMETERS));
1232
1241
1233
- SignTypedMessage (absl::nullopt, " 0x12345678" , " {...}" , valid_message_to_sign,
1234
- domain.Clone (), &signature, &error, &error_message);
1242
+ SignTypedMessage (absl::nullopt, " 0x12345678" , " {...}" , domain_hash,
1243
+ primary_hash, domain.Clone (), &signature, &error,
1244
+ &error_message);
1235
1245
EXPECT_TRUE (signature.empty ());
1236
1246
EXPECT_EQ (error, mojom::ProviderError::kInvalidParams );
1237
1247
EXPECT_EQ (error_message,
1238
1248
l10n_util::GetStringUTF8 (IDS_WALLET_INVALID_PARAMETERS));
1239
1249
1240
1250
const std::string address = " 0x1234567890123456789012345678901234567890" ;
1241
1251
// domain not dict
1242
- SignTypedMessage (absl::nullopt, address, " {...}" , valid_message_to_sign ,
1252
+ SignTypedMessage (absl::nullopt, address, " {...}" , domain_hash, primary_hash ,
1243
1253
base::Value (" not dict" ), &signature, &error, &error_message);
1244
1254
EXPECT_TRUE (signature.empty ());
1245
1255
EXPECT_EQ (error, mojom::ProviderError::kInvalidParams );
1246
1256
EXPECT_EQ (error_message,
1247
1257
l10n_util::GetStringUTF8 (IDS_WALLET_INVALID_PARAMETERS));
1248
1258
1249
- // not valid hex
1250
- SignTypedMessage (absl::nullopt, address, " {...}" , " brave " , domain. Clone () ,
1251
- &signature, &error, &error_message);
1259
+ // not valid domain hash
1260
+ SignTypedMessage (absl::nullopt, address, " {...}" , {}, primary_hash ,
1261
+ domain. Clone (), &signature, &error, &error_message);
1252
1262
EXPECT_TRUE (signature.empty ());
1253
1263
EXPECT_EQ (error, mojom::ProviderError::kInvalidParams );
1254
1264
EXPECT_EQ (error_message,
1255
1265
l10n_util::GetStringUTF8 (IDS_WALLET_INVALID_PARAMETERS));
1256
1266
1257
- // not valid eip712 hash
1258
- SignTypedMessage (absl::nullopt, address, " {...}" , " deadbeef " , domain. Clone () ,
1259
- &signature, &error, &error_message);
1267
+ // not valid primary hash
1268
+ SignTypedMessage (absl::nullopt, address, " {...}" , domain_hash, {} ,
1269
+ domain. Clone (), &signature, &error, &error_message);
1260
1270
EXPECT_TRUE (signature.empty ());
1261
1271
EXPECT_EQ (error, mojom::ProviderError::kInvalidParams );
1262
1272
EXPECT_EQ (error_message,
@@ -1265,7 +1275,7 @@ TEST_F(BraveWalletProviderImplUnitTest, SignTypedMessage) {
1265
1275
domain.SetIntKey (" chainId" , 4 );
1266
1276
std::string chain_id = " 0x4" ;
1267
1277
// not active network
1268
- SignTypedMessage (absl::nullopt, address, " {...}" , valid_message_to_sign ,
1278
+ SignTypedMessage (absl::nullopt, address, " {...}" , domain_hash, primary_hash ,
1269
1279
domain.Clone (), &signature, &error, &error_message);
1270
1280
EXPECT_TRUE (signature.empty ());
1271
1281
EXPECT_EQ (error, mojom::ProviderError::kInternalError );
@@ -1275,7 +1285,7 @@ TEST_F(BraveWalletProviderImplUnitTest, SignTypedMessage) {
1275
1285
base::ASCIIToUTF16 (chain_id)));
1276
1286
domain.SetIntKey (" chainId" , 1 );
1277
1287
1278
- SignTypedMessage (absl::nullopt, address, " {...}" , valid_message_to_sign ,
1288
+ SignTypedMessage (absl::nullopt, address, " {...}" , domain_hash, primary_hash ,
1279
1289
domain.Clone (), &signature, &error, &error_message);
1280
1290
EXPECT_TRUE (signature.empty ());
1281
1291
EXPECT_EQ (error, mojom::ProviderError::kUnauthorized );
@@ -1286,8 +1296,9 @@ TEST_F(BraveWalletProviderImplUnitTest, SignTypedMessage) {
1286
1296
// No permission
1287
1297
const std::vector<std::string> addresses = GetAddresses ();
1288
1298
ASSERT_FALSE (address.empty ());
1289
- SignTypedMessage (absl::nullopt, addresses[0 ], " {...}" , valid_message_to_sign,
1290
- domain.Clone (), &signature, &error, &error_message);
1299
+ SignTypedMessage (absl::nullopt, addresses[0 ], " {...}" , domain_hash,
1300
+ primary_hash, domain.Clone (), &signature, &error,
1301
+ &error_message);
1291
1302
EXPECT_TRUE (signature.empty ());
1292
1303
EXPECT_EQ (error, mojom::ProviderError::kUnauthorized );
1293
1304
EXPECT_EQ (error_message,
@@ -1296,27 +1307,43 @@ TEST_F(BraveWalletProviderImplUnitTest, SignTypedMessage) {
1296
1307
GURL url (" https://brave.com" );
1297
1308
Navigate (url);
1298
1309
AddEthereumPermission (url);
1299
- SignTypedMessage (true , addresses[0 ], " {...}" , valid_message_to_sign ,
1310
+ SignTypedMessage (true , addresses[0 ], " {...}" , domain_hash, primary_hash ,
1300
1311
domain.Clone (), &signature, &error, &error_message);
1301
1312
1302
1313
EXPECT_FALSE (signature.empty ());
1303
1314
EXPECT_EQ (error, mojom::ProviderError::kSuccess );
1304
1315
EXPECT_TRUE (error_message.empty ());
1305
1316
1306
1317
// User reject request
1307
- SignTypedMessage (false , addresses[0 ], " {...}" , valid_message_to_sign ,
1318
+ SignTypedMessage (false , addresses[0 ], " {...}" , domain_hash, primary_hash ,
1308
1319
domain.Clone (), &signature, &error, &error_message);
1309
1320
EXPECT_TRUE (signature.empty ());
1310
1321
EXPECT_EQ (error, mojom::ProviderError::kUserRejectedRequest );
1311
1322
EXPECT_EQ (error_message,
1312
1323
l10n_util::GetStringUTF8 (IDS_WALLET_USER_REJECTED_REQUEST));
1313
-
1324
+ // not valid eip712 domain hash
1325
+ SignTypedMessage (absl::nullopt, address, " {...}" , DecodeHexHash (" brave" ),
1326
+ primary_hash, domain.Clone (), &signature, &error,
1327
+ &error_message);
1328
+ EXPECT_TRUE (signature.empty ());
1329
+ EXPECT_EQ (error, mojom::ProviderError::kInvalidParams );
1330
+ EXPECT_EQ (error_message,
1331
+ l10n_util::GetStringUTF8 (IDS_WALLET_INVALID_PARAMETERS));
1332
+ // not valid eip712 primary hash
1333
+ SignTypedMessage (absl::nullopt, address, " {...}" , domain_hash,
1334
+ DecodeHexHash (" primary" ), domain.Clone (), &signature, &error,
1335
+ &error_message);
1336
+ EXPECT_TRUE (signature.empty ());
1337
+ EXPECT_EQ (error, mojom::ProviderError::kInvalidParams );
1338
+ EXPECT_EQ (error_message,
1339
+ l10n_util::GetStringUTF8 (IDS_WALLET_INVALID_PARAMETERS));
1314
1340
keyring_service ()->Lock ();
1315
1341
1316
1342
// nullopt for the first param here because we don't AddSignMessageRequest
1317
1343
// whent here are no accounts returned.
1318
- SignTypedMessage (absl::nullopt, addresses[0 ], " {...}" , valid_message_to_sign,
1319
- domain.Clone (), &signature, &error, &error_message);
1344
+ SignTypedMessage (absl::nullopt, addresses[0 ], " {...}" , domain_hash,
1345
+ primary_hash, domain.Clone (), &signature, &error,
1346
+ &error_message);
1320
1347
EXPECT_TRUE (signature.empty ());
1321
1348
EXPECT_EQ (error, mojom::ProviderError::kUnauthorized );
1322
1349
EXPECT_EQ (error_message,
0 commit comments