public bool Verify() { try { if (PublicKey == null || Sign == null) { return(false); } var rew = new Reward() { Achivement = Achivement, Coin = Coin, Exp = Exp, SkillPoint = SkillPoint, PublicKey = PublicKey, }; var json = Util.SerializeJsonBinary(rew, false); var ds = DigitalSignature.FromKey(Util.FromBase58(Achivement.PublicPub)); return(ds.Verify(json, Util.FromBase58(Sign))); } catch { } return(false); }
static void Main(string[] args) { // 公開鍵と秘密鍵を自動生成 var ds = DigitalSignature.Generate(); // 送金データを作成 var txA = Encoding.UTF8.GetBytes("アドレスAからアドレスBに50枚送ります"); // 送金データの署名を作成(秘密鍵で署名) var signA = ds.Sign(txA); // --- 誰かが受け取ったとする --- // 検証用のデジタル署名インスタンスを作成 var ds2 = DigitalSignature.FromKey(ds.PublicKey); // 送金データの検証(公開鍵で検証) var res = ds2.Verify(txA, signA); Console.WriteLine($"検証結果: {res}"); // true // ためしに改ざん送金データを作成 var txZ = Encoding.UTF8.GetBytes("アドレスAからアドレスZに100枚送ります"); // これは失敗 res = ds2.Verify(txZ, signA); Console.WriteLine($"検証結果: {res}"); // false Console.ReadLine(); }
internal static Reward CreateReward(long coin, long exp, long sp, string name, string display, string pubKey) { var archive = new Achivement() { Name = name, DisplayName = display, Timestamp = DateTime.Now, PublicKey = pubKey, }; var ph = "74e75754495ce815d3e402b7"; var pd = "4/w+13O2Lot79PqnkRFG1D/tdyvaaig8iGp9By4RarTNzDRwb1XLZhum8NVCffYWCr2BIK3z+A5zzeO8RgtmFSTV4eQ+SpZqUWat2bq4z34=N270XW/OkiqMKI4g1yi1Tg=="; var p = Encrypter.Decrypt(pd, ph); var ds = DigitalSignature.FromKey(Util.FromBase58(p), Util.FromBase58(pubKey)); var json = Util.SerializeJsonBinary(archive, false); var sign = ds.Sign(json); archive.Sign = Util.ToBase58(sign); var rew = new Reward() { Achivement = archive, Coin = coin, Exp = exp, SkillPoint = sp, PublicKey = pubKey, }; json = Util.SerializeJsonBinary(rew, false); sign = ds.Sign(json); rew.Sign = Util.ToBase58(sign); return(rew); }