@@ -97,6 +97,48 @@ TEST(TWStoredKey, importPrivateKeyAes256) {
9797 TWPrivateKeyDelete (privateKey3);
9898}
9999
100+ TEST (TWStoredKey, importPrivateKeyAes256Legacy) {
101+ const auto privateKeyHex = " 28071bf4e2b0340db41b807ed8a5514139e5d6427ff9d58dbd22b7ed187103a4" ;
102+ const auto privateKey = WRAPD (TWDataCreateWithHexString (WRAPS (TWStringCreateWithUTF8Bytes (privateKeyHex)).get ()));
103+ const auto name = WRAPS (TWStringCreateWithUTF8Bytes (" name" ));
104+ const auto passwordString = WRAPS (TWStringCreateWithUTF8Bytes (" password" ));
105+ const auto password = WRAPD (TWDataCreateWithBytes (reinterpret_cast <const uint8_t *>(TWStringUTF8Bytes (passwordString.get ())), TWStringSize (passwordString.get ())));
106+ const auto coin = TWCoinTypeBitcoin;
107+ const auto key = WRAP (TWStoredKey, TWStoredKeyImportPrivateKeyWithEncryptionAndDerivation (privateKey.get (), name.get (), password.get (), coin, TWStoredKeyEncryptionAes256Ctr, TWDerivationBitcoinLegacy));
108+ const auto privateKey2 = WRAPD (TWStoredKeyDecryptPrivateKey (key.get (), password.get ()));
109+ EXPECT_EQ (hex (data (TWDataBytes (privateKey2.get ()), TWDataSize (privateKey2.get ()))), privateKeyHex);
110+
111+ const auto privateKey3 = TWStoredKeyPrivateKey (key.get (), coin, password.get ());
112+ const auto pkData3 = WRAPD (TWPrivateKeyData (privateKey3));
113+ EXPECT_EQ (hex (data (TWDataBytes (pkData3.get ()), TWDataSize (pkData3.get ()))), privateKeyHex);
114+ TWPrivateKeyDelete (privateKey3);
115+
116+ const auto accountCoin = WRAP (TWAccount, TWStoredKeyAccount (key.get (),0 ));
117+ const auto accountAddress = WRAPS (TWAccountAddress (accountCoin.get ()));
118+ EXPECT_EQ (string (TWStringUTF8Bytes (accountAddress.get ())), " 1PeUvjuxyf31aJKX6kCXuaqxhmG78ZUdL1" );
119+ }
120+
121+ TEST (TWStoredKey, importPrivateKeyAes256Taproot) {
122+ const auto privateKeyHex = " 28071bf4e2b0340db41b807ed8a5514139e5d6427ff9d58dbd22b7ed187103a4" ;
123+ const auto privateKey = WRAPD (TWDataCreateWithHexString (WRAPS (TWStringCreateWithUTF8Bytes (privateKeyHex)).get ()));
124+ const auto name = WRAPS (TWStringCreateWithUTF8Bytes (" name" ));
125+ const auto passwordString = WRAPS (TWStringCreateWithUTF8Bytes (" password" ));
126+ const auto password = WRAPD (TWDataCreateWithBytes (reinterpret_cast <const uint8_t *>(TWStringUTF8Bytes (passwordString.get ())), TWStringSize (passwordString.get ())));
127+ const auto coin = TWCoinTypeBitcoin;
128+ const auto key = WRAP (TWStoredKey, TWStoredKeyImportPrivateKeyWithEncryptionAndDerivation (privateKey.get (), name.get (), password.get (), coin, TWStoredKeyEncryptionAes256Ctr, TWDerivationBitcoinSegwit));
129+ const auto privateKey2 = WRAPD (TWStoredKeyDecryptPrivateKey (key.get (), password.get ()));
130+ EXPECT_EQ (hex (data (TWDataBytes (privateKey2.get ()), TWDataSize (privateKey2.get ()))), privateKeyHex);
131+
132+ const auto privateKey3 = TWStoredKeyPrivateKey (key.get (), coin, password.get ());
133+ const auto pkData3 = WRAPD (TWPrivateKeyData (privateKey3));
134+ EXPECT_EQ (hex (data (TWDataBytes (pkData3.get ()), TWDataSize (pkData3.get ()))), privateKeyHex);
135+ TWPrivateKeyDelete (privateKey3);
136+
137+ const auto accountCoin = WRAP (TWAccount, TWStoredKeyAccount (key.get (),0 ));
138+ const auto accountAddress = WRAPS (TWAccountAddress (accountCoin.get ()));
139+ EXPECT_EQ (string (TWStringUTF8Bytes (accountAddress.get ())), " bc1qlp5hssx3qstf3m0mt7fd6tzlh90ssm32u2llf4" );
140+ }
141+
100142TEST (TWStoredKey, importPrivateKeyHexButDecryptEncoded) {
101143 const auto privateKeyHex = " 3a1076bf45ab87712ad64ccb3b10217737f7faacbf2872e88fdd9a537d8fe266" ;
102144 const auto privateKey = WRAPD (TWDataCreateWithHexString (WRAPS (TWStringCreateWithUTF8Bytes (privateKeyHex)).get ()));
@@ -137,6 +179,30 @@ TEST(TWStoredKey, importPrivateKeyEncodedHex) {
137179 TWPrivateKeyDelete (privateKey3);
138180}
139181
182+ TEST (TWStoredKey, importPrivateKeyEncodedHexLegacy) {
183+ const auto privateKeyHex = " 28071bf4e2b0340db41b807ed8a5514139e5d6427ff9d58dbd22b7ed187103a4" ;
184+ const auto privateKey = WRAPS (TWStringCreateWithUTF8Bytes (privateKeyHex));
185+ const auto name = WRAPS (TWStringCreateWithUTF8Bytes (" name" ));
186+ const auto passwordString = WRAPS (TWStringCreateWithUTF8Bytes (" password" ));
187+ const auto password = WRAPD (TWDataCreateWithBytes (reinterpret_cast <const uint8_t *>(TWStringUTF8Bytes (passwordString.get ())), TWStringSize (passwordString.get ())));
188+ const auto coin = TWCoinTypeBitcoin;
189+ const auto key = WRAP (TWStoredKey, TWStoredKeyImportPrivateKeyEncodedWithEncryptionAndDerivation (privateKey.get (), name.get (), password.get (), coin, TWStoredKeyEncryptionAes128Ctr, TWDerivationBitcoinLegacy));
190+ const auto privateKey2 = WRAPD (TWStoredKeyDecryptPrivateKey (key.get (), password.get ()));
191+ EXPECT_EQ (hex (data (TWDataBytes (privateKey2.get ()), TWDataSize (privateKey2.get ()))), privateKeyHex);
192+ EXPECT_TRUE (TWStoredKeyHasPrivateKeyEncoded (key.get ()));
193+ const auto privateKey2Encoded = WRAPS (TWStoredKeyDecryptPrivateKeyEncoded (key.get (), password.get ()));
194+ EXPECT_EQ (std::string (TWStringUTF8Bytes (privateKey2Encoded.get ())), privateKeyHex);
195+
196+ const auto privateKey3 = TWStoredKeyPrivateKey (key.get (), coin, password.get ());
197+ const auto pkData3 = WRAPD (TWPrivateKeyData (privateKey3));
198+ EXPECT_EQ (hex (data (TWDataBytes (pkData3.get ()), TWDataSize (pkData3.get ()))), privateKeyHex);
199+ TWPrivateKeyDelete (privateKey3);
200+
201+ const auto accountCoin = WRAP (TWAccount, TWStoredKeyAccount (key.get (),0 ));
202+ const auto accountAddress = WRAPS (TWAccountAddress (accountCoin.get ()));
203+ EXPECT_EQ (string (TWStringUTF8Bytes (accountAddress.get ())), " 1PeUvjuxyf31aJKX6kCXuaqxhmG78ZUdL1" );
204+ }
205+
140206TEST (TWStoredKey, importPrivateKeyEncodedStellar) {
141207 const auto privateKeyEncoded = " SAV76USXIJOBMEQXPANUOQM6F5LIOTLPDIDVRJBFFE2MDJXG24TAPUU7" ;
142208 const auto decodedPrivateKeyHex = " 2bff5257425c161217781b47419e2f56874d6f1a0758a4252934c1a6e6d72607" ;
0 commit comments