Skip to content

Commit 4de4545

Browse files
y3fers0nb00f
authored andcommitted
fix: tron message sign (trustwallet#4326)
1 parent 4dbf97d commit 4de4545

File tree

5 files changed

+18
-6
lines changed

5 files changed

+18
-6
lines changed

android/app/src/androidTest/java/com/trustwallet/core/app/blockchains/tron/TestTronMessageSigner.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class TestTronMessageSigner {
2020
val privateKey = PrivateKey(data)
2121
val msg = "Hello World"
2222
val signature = TronMessageSigner.signMessage(privateKey, msg)
23-
assertEquals("9bb6d11ec8a6a3fb686a8f55b123e7ec4e9746a26157f6f9e854dd72f5683b450397a7b0a9653865658de8f9243f877539882891bad30c7286c3bf5622b900471b", signature)
23+
assertEquals("bc0753c070cc55693097df11bc11e1a7c4bd5e1a40b9dc94c75568e59bcc9d6b50a7873ef25b469e494490a54de37327b4bc7fc825c81a377b555e34fb7261ba1c", signature)
2424
val pubKey = privateKey.getPublicKey(CoinType.TRON)
2525
assertTrue(TronMessageSigner.verifyMessage(pubKey, msg, signature))
2626
}

src/Tron/MessageSigner.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace TW::Tron {
1414
Data generateMessage(const std::string& message) {
1515
std::string prefix(1, MessageSigner::TronPrefix);
1616
std::stringstream ss;
17-
ss << prefix << MessageSigner::MessagePrefix << message;
17+
ss << prefix << MessageSigner::MessagePrefix << message.length() << message;
1818
Data signableMessage = Hash::keccak256(data(ss.str()));
1919
return signableMessage;
2020
}

src/Tron/MessageSigner.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class MessageSigner {
2424
/// \param signature signature to verify the message against
2525
/// \return true if the message match the signature, false otherwise
2626
static bool verifyMessage(const PublicKey& publicKey, const std::string& message, const std::string& signature) noexcept;
27-
static constexpr auto MessagePrefix = "TRON Signed Message:\n32";
27+
static constexpr auto MessagePrefix = "TRON Signed Message:\n";
2828
static constexpr std::uint8_t TronPrefix{0x19};
2929
};
3030

swift/Tests/Blockchains/TronTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class TronTests: XCTestCase {
7979
let privateKey = PrivateKey(data: Data(hexString: "75065f100e38d3f3b4c5c4235834ba8216de62272a4f03532c44b31a5734360a")!)!
8080
let msg = "Hello World"
8181
let signature = TronMessageSigner.signMessage(privateKey: privateKey, message: msg)
82-
XCTAssertEqual(signature, "9bb6d11ec8a6a3fb686a8f55b123e7ec4e9746a26157f6f9e854dd72f5683b450397a7b0a9653865658de8f9243f877539882891bad30c7286c3bf5622b900471b")
82+
XCTAssertEqual(signature, "bc0753c070cc55693097df11bc11e1a7c4bd5e1a40b9dc94c75568e59bcc9d6b50a7873ef25b469e494490a54de37327b4bc7fc825c81a377b555e34fb7261ba1c")
8383
let pubKey = privateKey.getPublicKey(coinType: .tron)
8484
XCTAssertTrue(TronMessageSigner.verifyMessage(pubKey: pubKey, message: msg, signature: signature))
8585
}

tests/chains/Tron/TronMessageSignerTests.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,16 @@ namespace TW::Tron {
1515
PrivateKey tronKey(parse_hex("75065f100e38d3f3b4c5c4235834ba8216de62272a4f03532c44b31a5734360a"));
1616
auto msg = "Hello World";
1717
auto signature = Tron::MessageSigner::signMessage(tronKey, msg);
18-
ASSERT_EQ(signature, "9bb6d11ec8a6a3fb686a8f55b123e7ec4e9746a26157f6f9e854dd72f5683b450397a7b0a9653865658de8f9243f877539882891bad30c7286c3bf5622b900471b");
1918
auto pubKey = tronKey.getPublicKey(TWPublicKeyTypeSECP256k1Extended);
19+
20+
ASSERT_EQ(signature, "bc0753c070cc55693097df11bc11e1a7c4bd5e1a40b9dc94c75568e59bcc9d6b50a7873ef25b469e494490a54de37327b4bc7fc825c81a377b555e34fb7261ba1c");
2021
ASSERT_TRUE(Tron::MessageSigner::verifyMessage(pubKey, msg, signature));
22+
23+
auto msg2 = "A much longer message to test the signing and verification process";
24+
auto signature2 = Tron::MessageSigner::signMessage(tronKey, msg2);
25+
26+
ASSERT_EQ(signature2, "93aee5f753cf889e0749c74dd0c5996cce889883ae079e09ede462e16d65d06a4f43d1ed2745e9f3c1690695628269bd58f057a4a93953cc50e66b4a05bc0f451b");
27+
ASSERT_TRUE(Tron::MessageSigner::verifyMessage(pubKey, msg2, signature2));
2128
}
2229

2330
TEST(TWTronMessageSigner, SignAndVerifyLegacy) {
@@ -27,7 +34,12 @@ namespace TW::Tron {
2734

2835
const auto pubKey = WRAP(TWPublicKey, TWPrivateKeyGetPublicKey(privateKey.get(), TWCoinTypeTron));
2936
const auto signature = WRAPS(TWTronMessageSignerSignMessage(privateKey.get(), message.get()));
30-
EXPECT_EQ(std::string(TWStringUTF8Bytes(signature.get())), "9bb6d11ec8a6a3fb686a8f55b123e7ec4e9746a26157f6f9e854dd72f5683b450397a7b0a9653865658de8f9243f877539882891bad30c7286c3bf5622b900471b");
37+
EXPECT_EQ(std::string(TWStringUTF8Bytes(signature.get())), "bc0753c070cc55693097df11bc11e1a7c4bd5e1a40b9dc94c75568e59bcc9d6b50a7873ef25b469e494490a54de37327b4bc7fc825c81a377b555e34fb7261ba1c");
3138
EXPECT_TRUE(TWTronMessageSignerVerifyMessage(pubKey.get(), message.get(), signature.get()));
39+
40+
const auto message2 = STRING("A much longer message to test the signing and verification process");
41+
const auto signature2 = WRAPS(TWTronMessageSignerSignMessage(privateKey.get(), message2.get()));
42+
EXPECT_EQ(std::string(TWStringUTF8Bytes(signature2.get())), "93aee5f753cf889e0749c74dd0c5996cce889883ae079e09ede462e16d65d06a4f43d1ed2745e9f3c1690695628269bd58f057a4a93953cc50e66b4a05bc0f451b");
43+
EXPECT_TRUE(TWTronMessageSignerVerifyMessage(pubKey.get(), message2.get(), signature2.get()));
3244
}
3345
}

0 commit comments

Comments
 (0)