Skip to content

Commit f30eefd

Browse files
committed
Import/Export Key, PemKey, Encrypted & Unencrypted
1 parent bea114a commit f30eefd

27 files changed

+800
-64
lines changed

TonLibDotNet.Demo/Program.cs

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using Microsoft.Extensions.DependencyInjection;
22
using Microsoft.Extensions.Hosting;
33
using Microsoft.Extensions.Logging;
4-
using TonLibDotNet.Requests;
54
using TonLibDotNet.Types;
65

76
namespace TonLibDotNet
@@ -66,14 +65,44 @@ public static async Task Main(string[] args)
6665

6766
var hints = await tonClient.GetBip39Hints("zo");
6867

69-
var key = await tonClient.CreateNewKey();
70-
var ek = await tonClient.ExportKey(key);
71-
await tonClient.DeleteKey(key);
72-
73-
// await tonClient.DeleteAllKeys();
68+
await RunKeyDemo(tonClient);
7469

7570
// Loggers need some time to flush data to screen/console.
7671
await Task.Delay(TimeSpan.FromSeconds(1));
7772
}
73+
74+
private static async Task RunKeyDemo(ITonClient tonClient)
75+
{
76+
// some "random" bytes
77+
var localPass = Convert.ToBase64String(new byte[] { 1, 2, 3, 4, 5 });
78+
var mnemonicPass = Convert.ToBase64String(new byte[] { 19, 42, 148 });
79+
var randomExtra = Convert.ToBase64String(new byte[] { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 });
80+
var keyPass = Convert.ToBase64String(new byte[] { 21, 3, 7, 11 });
81+
82+
var key = await tonClient.CreateNewKey(localPass, mnemonicPass, randomExtra);
83+
var ek = await tonClient.ExportKey(key, localPass);
84+
var epk = await tonClient.ExportPemKey(key, localPass, keyPass);
85+
var eek = await tonClient.ExportEncryptedKey(key, localPass, keyPass);
86+
var euk = await tonClient.ExportUnencryptedKey(key, localPass);
87+
88+
//// does not work, see https://github.com/ton-blockchain/ton/issues/202
89+
//// key = await tonClient.ChangeLocalPassword(key, localPass, Convert.ToBase64String(new byte[] { 7, 6, 5 }));
90+
91+
await tonClient.DeleteKey(key);
92+
93+
var key2 = await tonClient.ImportKey(ek, localPass, mnemonicPass);
94+
await tonClient.DeleteKey(key2);
95+
96+
var key3 = await tonClient.ImportPemKey(epk, localPass, keyPass);
97+
await tonClient.DeleteKey(key3);
98+
99+
var key4 = await tonClient.ImportEncryptedKey(eek, localPass, keyPass);
100+
await tonClient.DeleteKey(key4);
101+
102+
var key5 = await tonClient.ImportUnencryptedKey(euk, localPass);
103+
await tonClient.DeleteKey(key5);
104+
105+
await tonClient.DeleteAllKeys();
106+
}
78107
}
79108
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using TonLibDotNet.Types;
2+
3+
namespace TonLibDotNet.Requests
4+
{
5+
public class ChangeLocalPasswordTests
6+
{
7+
[Fact]
8+
public void DeserializeOk()
9+
{
10+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.ChangeLocalPassword);
11+
12+
Assert.NotNull(baseObj);
13+
14+
var obj = Assert.IsType<ChangeLocalPassword>(baseObj);
15+
16+
Assert.NotNull(obj.InputKey);
17+
18+
var ik = Assert.IsType<InputKeyRegular>(obj.InputKey);
19+
20+
Assert.NotNull(ik.Key);
21+
Assert.Equal("Pub...NZz4", ik.Key.PublicKey);
22+
Assert.Equal("yXO...nA=", ik.Key.Secret);
23+
Assert.Equal("AQIDBAU=", ik.LocalPassword);
24+
25+
Assert.Equal("BwYF", obj.NewLocalPassword);
26+
}
27+
}
28+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using TonLibDotNet.Types;
2+
3+
namespace TonLibDotNet.Requests
4+
{
5+
public class ExportEncryptedKeyTests
6+
{
7+
[Fact]
8+
public void DeserializeOk()
9+
{
10+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.ExportEncryptedKey);
11+
12+
Assert.NotNull(baseObj);
13+
14+
var obj = Assert.IsType<ExportEncryptedKey>(baseObj);
15+
16+
Assert.NotNull(obj.InputKey);
17+
18+
var ikr = Assert.IsType<InputKeyRegular>(obj.InputKey);
19+
20+
Assert.NotNull(ikr.Key);
21+
22+
Assert.Equal("PuY...EIP", ikr.Key.PublicKey);
23+
Assert.Equal("B6Y...rg=", ikr.Key.Secret);
24+
Assert.Equal("AQIDBAU=", ikr.LocalPassword);
25+
26+
Assert.Equal("FQMHCw==", obj.KeyPassword);
27+
}
28+
}
29+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using TonLibDotNet.Types;
2+
3+
namespace TonLibDotNet.Requests
4+
{
5+
public class ExportPemKeyTests
6+
{
7+
[Fact]
8+
public void DeserializeOk()
9+
{
10+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.ExportPemKey);
11+
12+
Assert.NotNull(baseObj);
13+
14+
var obj = Assert.IsType<ExportPemKey>(baseObj);
15+
16+
Assert.NotNull(obj.InputKey);
17+
18+
var ikr = Assert.IsType<InputKeyRegular>(obj.InputKey);
19+
20+
Assert.NotNull(ikr.Key);
21+
22+
Assert.Equal("PuZ...aLD", ikr.Key.PublicKey);
23+
Assert.Equal("Qe6...bc=", ikr.Key.Secret);
24+
Assert.Equal("AQIDBAU=", ikr.LocalPassword);
25+
26+
Assert.Equal("FQMHCw==", obj.KeyPassword);
27+
}
28+
}
29+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using TonLibDotNet.Types;
2+
3+
namespace TonLibDotNet.Requests
4+
{
5+
public class ExportUnencryptedKeyTests
6+
{
7+
[Fact]
8+
public void DeserializeOk()
9+
{
10+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.ExportUnencryptedKey);
11+
12+
Assert.NotNull(baseObj);
13+
14+
var obj = Assert.IsType<ExportUnencryptedKey>(baseObj);
15+
16+
Assert.NotNull(obj.InputKey);
17+
18+
var ikr = Assert.IsType<InputKeyRegular>(obj.InputKey);
19+
20+
Assert.NotNull(ikr.Key);
21+
22+
Assert.Equal("PuYJ...gEIP", ikr.Key.PublicKey);
23+
Assert.Equal("B6Ya...Aorg=", ikr.Key.Secret);
24+
Assert.Equal("AQIDBAU=", ikr.LocalPassword);
25+
}
26+
}
27+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
namespace TonLibDotNet.Requests
2+
{
3+
public class ImportEncryptedKeyTests
4+
{
5+
[Fact]
6+
public void DeserializeOk()
7+
{
8+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.ImportEncryptedKey);
9+
10+
Assert.NotNull(baseObj);
11+
12+
var obj = Assert.IsType<ImportEncryptedKey>(baseObj);
13+
14+
Assert.NotNull(obj.ExportedEncryptedKey);
15+
16+
Assert.Equal("sAtI...YOYg=", obj.ExportedEncryptedKey.Data);
17+
Assert.Equal("AQIDBAU=", obj.LocalPassword);
18+
Assert.Equal("FQMHCw==", obj.KeyPassword);
19+
}
20+
}
21+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
namespace TonLibDotNet.Requests
2+
{
3+
public class ImportKeyTests
4+
{
5+
[Fact]
6+
public void DeserializeOk()
7+
{
8+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.ImportKey);
9+
10+
Assert.NotNull(baseObj);
11+
12+
var obj = Assert.IsType<ImportKey>(baseObj);
13+
14+
Assert.NotNull(obj.ExportedKey);
15+
16+
Assert.NotEmpty(obj.ExportedKey.WordList);
17+
Assert.Equal(new[] { "fabric", "draw", "forward", "olive", "lamp", "purpose", "sight", "loan", "elevator", "diet", "clutch", "fit", "eagle", "useless", "tiger", "useless", "veteran", "night", "curtain", "spend", "crack", "intact", "resource", "orbit" }, obj.ExportedKey.WordList);
18+
Assert.Equal("MTIz", obj.LocalPassword);
19+
Assert.Equal("NDU2", obj.MnemonicPassword);
20+
}
21+
}
22+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
namespace TonLibDotNet.Requests
2+
{
3+
public class ImportPemKeyTests
4+
{
5+
[Fact]
6+
public void DeserializeOk()
7+
{
8+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.ImportPemKey);
9+
10+
Assert.NotNull(baseObj);
11+
12+
var obj = Assert.IsType<ImportPemKey>(baseObj);
13+
14+
Assert.NotNull(obj.ExportedKey);
15+
16+
Assert.Equal("-----BEGIN ENCRYPTED PRIVATE KEY-----\nMI...lJU=\n-----END ENCRYPTED PRIVATE KEY-----\n", obj.ExportedKey.Pem);
17+
Assert.Equal("AQIDBAU=", obj.LocalPassword);
18+
Assert.Equal("FQMHCw==", obj.KeyPassword);
19+
}
20+
}
21+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
namespace TonLibDotNet.Requests
2+
{
3+
public class ImportUnencryptedKeyTests
4+
{
5+
[Fact]
6+
public void DeserializeOk()
7+
{
8+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.ImportUnencryptedKey);
9+
10+
Assert.NotNull(baseObj);
11+
12+
var obj = Assert.IsType<ImportUnencryptedKey>(baseObj);
13+
14+
Assert.NotNull(obj.ExportedUnencryptedKey);
15+
16+
Assert.Equal("Zdb...YM=", obj.ExportedUnencryptedKey.Data);
17+
Assert.Equal("AQIDBAU=", obj.LocalPassword);
18+
}
19+
}
20+
}

TonLibDotNet.Tests/SampleValues.Designer.cs

Lines changed: 99 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)