Skip to content
2 changes: 1 addition & 1 deletion include/TrustWalletCore/TWStarkWare.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ struct TWStarkWare;
/// \param signature valid eth signature
/// \return The private key for the specified derivation path/signature
TW_EXPORT_STATIC_METHOD
struct TWPrivateKey* _Nonnull TWStarkWareGetStarkKeyFromSignature(const struct TWDerivationPath* _Nonnull derivationPath, TWString* _Nonnull signature);
struct TWPrivateKey* _Nullable TWStarkWareGetStarkKeyFromSignature(const struct TWDerivationPath* _Nonnull derivationPath, TWString* _Nonnull signature);

TW_EXTERN_C_END
4 changes: 2 additions & 2 deletions src/Data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ namespace TW {

Data subData(const Data& data, size_t startIndex, size_t length) {
if (startIndex >= data.size()) {
return Data();
throw std::invalid_argument("invalid subData arguments");
}
const size_t subLength = std::min(length, data.size() - startIndex); // guard against over-length
return TW::data(data.data() + startIndex, subLength);
}

Data subData(const Data& data, size_t startIndex) {
if (startIndex >= data.size()) {
return Data();
throw std::invalid_argument("invalid subData arguments");
}
const size_t subLength = data.size() - startIndex;
return TW::data(data.data() + startIndex, subLength);
Expand Down
3 changes: 3 additions & 0 deletions src/HDWallet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ const int MnemonicBufLength = Mnemonic::MaxWords * (BIP39_MAX_WORD_LENGTH + 3) +

template <std::size_t seedSize>
HDWallet<seedSize>::HDWallet(const Data& seed) {
if (seed.size() != seedSize) {
throw std::invalid_argument("Invalid seed size");
}
std::copy_n(seed.begin(), seedSize, this->seed.begin());
}

Expand Down
6 changes: 5 additions & 1 deletion src/interface/TWStarkWare.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,9 @@
struct TWPrivateKey* TWStarkWareGetStarkKeyFromSignature(const struct TWDerivationPath* derivationPath, TWString* signature) {
using namespace TW;
const auto& ethSignatureStr = *reinterpret_cast<const std::string*>(signature);
return new TWPrivateKey{ ImmutableX::getPrivateKeyFromRawSignature(parse_hex(ethSignatureStr), derivationPath->impl)};
try {
return new TWPrivateKey{ ImmutableX::getPrivateKeyFromRawSignature(parse_hex(ethSignatureStr), derivationPath->impl)};
} catch (...) {
return nullptr;
}
}
2 changes: 1 addition & 1 deletion swift/Tests/HDWalletTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class HDWalletTests: XCTestCase {
let ethMsg = "Only sign this request if you’ve initiated an action with Immutable X."
let ethSignature = EthereumMessageSigner.signMessageImmutableX(privateKey: ethPrivateKey, message: ethMsg)
XCTAssertEqual(ethSignature, "18b1be8b78807d3326e28bc286d7ee3d068dcd90b1949ce1d25c1f99825f26e70992c5eb7f44f76b202aceded00d74f771ed751f2fe538eec01e338164914fe001")
let starkPrivateKey = StarkWare.getStarkKeyFromSignature(derivationPath: derivationPath, signature: ethSignature)
let starkPrivateKey = StarkWare.getStarkKeyFromSignature(derivationPath: derivationPath, signature: ethSignature)!
XCTAssertEqual(starkPrivateKey.data.hexString, "04be51a04e718c202e4dca60c2b72958252024cfc1070c090dd0f170298249de")
let starkPublicKey = starkPrivateKey.getPublicKeyByType(pubkeyType: .starkex)
XCTAssertEqual(starkPublicKey.data.hexString, "00e5b9b11f8372610ef35d647a1dcaba1a4010716588d591189b27bf3c2d5095")
Expand Down
Loading