Skip to content

Instantly share code, notes, and snippets.

@0x070696E65
Last active May 2, 2023 13:19
Show Gist options
  • Save 0x070696E65/444a7008f64f35169ebd023dee8285f4 to your computer and use it in GitHub Desktop.
Save 0x070696E65/444a7008f64f35169ebd023dee8285f4 to your computer and use it in GitHub Desktop.
CatSdkを使って署名する例
var source = @"
using System;
using CatSdk.Symbol;
using CatSdk.Utils;
using CatSdk.CryptoTypes;
public class SymbolSdk
{
public static Signature Sign(string message)
{
var keiPair = new KeyPair(new PrivateKey(""5DB8324E7EB83E7665D500B014283260EF312139034E86DFB7EE736503E*****""));
var sig = keiPair.Sign(Converter.Utf8ToBytes(message));
return sig;
}
}
";
var options = CSharpParseOptions.Default
.WithLanguageVersion(LanguageVersion.CSharp8);
var syntaxTree = CSharpSyntaxTree.ParseText(source, options, "MyRandom.cs");
var references = new MetadataReference[]
{
MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
MetadataReference.CreateFromFile(typeof(Converter).Assembly.Location),
MetadataReference.CreateFromFile(typeof(Signature).Assembly.Location),
MetadataReference.CreateFromFile(Assembly.LoadFrom("CatSdk.dll").Location),
MetadataReference.CreateFromFile("/Users/matsukawatoshiya/Downloads/netstandard/netstandard.dll"),
MetadataReference.CreateFromFile("/Users/matsukawatoshiya/Downloads/System.Runtime/System.Runtime.dll"),
};
var compilationOptions = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary);
var compilation = CSharpCompilation.Create(
"SymbolSdk.dll",
new[] { syntaxTree },
references,
compilationOptions);
using var stream = new MemoryStream();
var emitResult = compilation.Emit(stream);
if (emitResult.Success)
{
stream.Seek(0, SeekOrigin.Begin);
var assembly = AssemblyLoadContext.Default.LoadFromStream(stream);
var randomType = assembly.GetType("SymbolSdk");
var method = randomType.GetMethod("Sign");
var result = (Signature)(method.Invoke(null, new object[]{"HELLO"}) ?? throw new InvalidOperationException());
Console.WriteLine($"Signature: {result}");
var keiPair = new KeyPair(new PrivateKey("5DB8324E7EB83E7665D500B014283260EF312139034E86DFB7EE736503E*****"));
var verifier = new Verifier(keiPair.PublicKey);
var signature = new Signature(result.bytes);
var verify = verifier.Verify("HELLO", signature);
Console.WriteLine($"Verify: {verify}");
}
else
{
var failures = emitResult.Diagnostics.Where(diagnostic =>
diagnostic.IsWarningAsError ||
diagnostic.Severity == DiagnosticSeverity.Error);
foreach (var diagnostic in failures)
{
Console.Error.WriteLine("{0}: {1}", diagnostic.Id, diagnostic.GetMessage());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment