Last active
May 2, 2023 13:19
-
-
Save 0x070696E65/444a7008f64f35169ebd023dee8285f4 to your computer and use it in GitHub Desktop.
CatSdkを使って署名する例
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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