From 4c2b0d5542ee1bb7a3a8196e7fb0d180b3469c47 Mon Sep 17 00:00:00 2001 From: Apolixit Date: Sat, 10 Feb 2024 10:19:09 +0100 Subject: [PATCH] Change to internal + obsolete FromBytes085 and ToBytes() from SecretKey --- Substrate.NET.Schnorrkel/Keys/SecretKey.cs | 6 ++++-- Substrate.NET.Schnorrkel/Sr25519v085.cs | 24 +++++++++++++++++++++- Substrate.NET.Schnorrkel/Sr25519v091.cs | 18 +++++++++++++++- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/Substrate.NET.Schnorrkel/Keys/SecretKey.cs b/Substrate.NET.Schnorrkel/Keys/SecretKey.cs index df716a3..73bf278 100644 --- a/Substrate.NET.Schnorrkel/Keys/SecretKey.cs +++ b/Substrate.NET.Schnorrkel/Keys/SecretKey.cs @@ -59,7 +59,8 @@ public struct SecretKey /// 32 bytes being the seed for nonces. /// /// - public byte[] ToBytes() + [Obsolete("Use ToEd25519Bytes instead")] + internal byte[] ToBytes() { var result = new byte[64]; key.ScalarBytes.CopyTo(result, 0); @@ -85,7 +86,8 @@ public PublicKey ExpandToPublic() /// /// /// - public static SecretKey FromBytes085(byte[] data) + [Obsolete("Use FromBytes011 instead")] + internal static SecretKey FromBytes085(byte[] data) { if (data.Length != Consts.SIGNATURE_LENGTH) throw new SignatureException("SecretKey - SignatureError::BytesLengthError"); diff --git a/Substrate.NET.Schnorrkel/Sr25519v085.cs b/Substrate.NET.Schnorrkel/Sr25519v085.cs index 0df132c..6cd060e 100644 --- a/Substrate.NET.Schnorrkel/Sr25519v085.cs +++ b/Substrate.NET.Schnorrkel/Sr25519v085.cs @@ -20,6 +20,7 @@ using Substrate.NET.Schnorrkel.Ristretto; using Substrate.NET.Schnorrkel.Scalars; using Substrate.NET.Schnorrkel.Signed; +using System; using System.Text; namespace Substrate.NET.Schnorrkel @@ -44,7 +45,8 @@ public Sr25519v085(SchnorrkelSettings settings) : base(settings) /// /// /// - public static byte[] SignSimple(byte[] publicKey, byte[] secretKey, byte[] message) + [Obsolete("Use SignSimpleFromEd25519 instead")] + internal static byte[] SignSimple(byte[] publicKey, byte[] secretKey, byte[] message) { var sk = SecretKey.FromBytes085(secretKey); var pk = new PublicKey(publicKey); @@ -60,6 +62,26 @@ public static byte[] SignSimple(byte[] publicKey, byte[] secretKey, byte[] messa return sig.ToBytes(); } + /// + /// Sign from Secret key from Ed25519 bytes (need to DivideScalarBytesByCofactor) + /// + /// + /// + /// + /// + public static byte[] SignSimpleFromEd25519(byte[] publicKey, byte[] secretKey, byte[] message) + { + var sk = SecretKey.FromEd25519Bytes(secretKey); + var pk = new PublicKey(publicKey); + var signingContext = new SigningContext085(Encoding.UTF8.GetBytes("substrate")); + var st = new SigningTranscript(signingContext); + signingContext.ts = signingContext.Bytes(message); + var rng = new Simple(); + var sig = Sign(st, sk, pk, rng); + + return sig.ToBytes(); + } + /// /// Sign a message with a given public and secret key. /// diff --git a/Substrate.NET.Schnorrkel/Sr25519v091.cs b/Substrate.NET.Schnorrkel/Sr25519v091.cs index 644ce6e..b66bfa0 100644 --- a/Substrate.NET.Schnorrkel/Sr25519v091.cs +++ b/Substrate.NET.Schnorrkel/Sr25519v091.cs @@ -21,6 +21,7 @@ using Substrate.NET.Schnorrkel.Ristretto; using Substrate.NET.Schnorrkel.Scalars; using Substrate.NET.Schnorrkel.Signed; +using System; using System.Text; namespace Substrate.NET.Schnorrkel @@ -65,7 +66,8 @@ public static byte[] SignSimple(KeyPair pair, byte[] message) /// /// /// - public static byte[] SignSimple(byte[] publicKey, byte[] secretKey, byte[] message) + [Obsolete("Use SignSimpleFromEd25519 instead")] + internal static byte[] SignSimple(byte[] publicKey, byte[] secretKey, byte[] message) { var sk = SecretKey.FromBytes085(secretKey); var pk = new PublicKey(publicKey); @@ -98,6 +100,13 @@ public static byte[] SignSimpleFromEd25519(byte[] publicKey, byte[] secretKey, b return sig.ToBytes(); } + /// + /// Verify a signature + /// + /// + /// + /// + /// public static bool Verify(byte[] signature, PublicKey publicKey, byte[] message) { var s = new Signature(); @@ -109,6 +118,13 @@ public static bool Verify(byte[] signature, PublicKey publicKey, byte[] message) return Verify(st, s, publicKey); } + /// + /// Verify a signature + /// + /// + /// + /// + /// public static bool Verify(byte[] signature, byte[] publicKey, byte[] message) { var s = new Signature();