Skip to content

Commit 9691d0e

Browse files
committed
feat(dotnet): add conversion from Algorand.Unity.Account to Algorand.Algod.Model.Account
1 parent b20a47a commit 9691d0e

File tree

3 files changed

+31
-18
lines changed

3 files changed

+31
-18
lines changed

.docfx/resources/favicon.ico

-25.2 KB
Binary file not shown.

Runtime/Algorand.Unity.Crypto/Ed25519.cs

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88

99
namespace Algorand.Unity.Crypto
1010
{
11-
public unsafe static class Ed25519
11+
public static class Ed25519
1212
{
13-
public struct KeyPair : INativeDisposable
13+
public readonly struct KeyPair : INativeDisposable
1414
{
1515
public readonly SecretKeyHandle SecretKey;
1616
public readonly PublicKey PublicKey;
@@ -72,7 +72,7 @@ public static implicit operator SecretKeyHandle(SecureMemoryHandle secureMemoryH
7272
return new SecretKeyHandle() { handle = secureMemoryHandle };
7373
}
7474

75-
public Signature Sign<TMessage>(TMessage message)
75+
public unsafe Signature Sign<TMessage>(TMessage message)
7676
where TMessage : IByteArray
7777
{
7878
var signature = new Signature();
@@ -138,18 +138,22 @@ public KeyPair ToKeyPair()
138138
{
139139
var pk = new PublicKey();
140140
var sk = SecretKeyHandle.Create();
141-
fixed (Seed* seedPtr = &this)
141+
unsafe
142142
{
143-
int error = crypto_sign_ed25519_seed_keypair(
144-
&pk,
145-
sk.Ptr,
146-
seedPtr
147-
);
148-
if (error > 0)
143+
fixed (Seed* seedPtr = &this)
149144
{
150-
throw new System.Exception($"error code {error} when converting to KeyPair");
145+
int error = crypto_sign_ed25519_seed_keypair(
146+
&pk,
147+
sk.Ptr,
148+
seedPtr
149+
);
150+
if (error > 0)
151+
{
152+
throw new System.Exception($"error code {error} when converting to KeyPair");
153+
}
151154
}
152155
}
156+
153157
return new KeyPair(sk, pk);
154158
}
155159
}
@@ -233,14 +237,17 @@ public byte this[int index]
233237
public bool Verify<TMessage>(TMessage message, PublicKey pk)
234238
where TMessage : IByteArray
235239
{
236-
fixed (Signature* s = &this)
240+
unsafe
237241
{
238-
var error = crypto_sign_ed25519_verify_detached(
239-
s,
240-
message.GetUnsafePtr(),
241-
(UIntPtr)message.Length,
242-
&pk);
243-
return error == 0;
242+
fixed (Signature* s = &this)
243+
{
244+
var error = crypto_sign_ed25519_verify_detached(
245+
s,
246+
message.GetUnsafePtr(),
247+
(UIntPtr)message.Length,
248+
&pk);
249+
return error == 0;
250+
}
244251
}
245252
}
246253

Runtime/Algorand.Unity/Accounts/Account.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Threading;
3+
using Algorand.Unity.LowLevel;
34
using Cysharp.Threading.Tasks;
45
using Unity.Collections;
56

@@ -109,5 +110,10 @@ public UniTask<SignedTxn<T>[]> SignTxnsAsync<T, TProgress>(T[] txns, TxnIndices
109110
progress.Report(1f);
110111
return SignTxnsAsync(txns, txnsToSign);
111112
}
113+
114+
public static explicit operator Algorand.Algod.Model.Account(Account from)
115+
{
116+
return new Algorand.Algod.Model.Account(from.privateKey.ToArray());
117+
}
112118
}
113119
}

0 commit comments

Comments
 (0)