public void Schnorrsig_Wrong_Verify() { using (var secp256k1 = new Secp256k1()) using (var schnorrSig = new Schnorr()) { var keyPair = secp256k1.GenerateKeyPair(); var msg = "Message for signing"; var msgBytes = Encoding.UTF8.GetBytes(msg); var msgHash = System.Security.Cryptography.SHA256.Create().ComputeHash(msgBytes); var sig = schnorrSig.Sign(msgHash, keyPair.PrivateKey); Assert.NotNull(sig); Assert.InRange(sig.Length, 0, Constant.SIGNATURE_SIZE); msg = "Wrong message for signing"; msgBytes = Encoding.UTF8.GetBytes(msg); msgHash = System.Security.Cryptography.SHA256.Create().ComputeHash(msgBytes); var valid = schnorrSig.Verify(sig, msgHash, keyPair.PublicKey); Assert.False(valid); } }
public Transaction.Transaction SignWith(Transaction.Transaction tx, Account signer) { BalanceResult result; if (signer == null) { throw new Exception("account not exists"); } if (string.IsNullOrEmpty(tx.Nonce)) { try { result = this.Provider.GetBalance(signer.Address).Result; tx.Nonce = result.Nonce + 1; } catch (Exception e) { throw new Exception("cannot get nonce", e); } } tx.SenderPubKey = signer.GetPublicKey(); byte[] message = tx.Bytes(); Signature signature = Schnorr.Sign(signer.Keys, message); tx.Signature = (signature.ToString().ToLower()); return(tx); }
public void Schnorrsig_Verify_Batch() { using (var secp256k1 = new Secp256k1()) using (var schnorrSig = new Schnorr()) { var signatures = new List <byte[]>(); var messages = new List <byte[]>(); var publicKeys = new List <byte[]>(); for (int i = 0; i < 10; i++) { var keyPair = secp256k1.GenerateKeyPair(); var msg = $"Message for signing {i}"; var msgBytes = Encoding.UTF8.GetBytes(msg); var msgHash = System.Security.Cryptography.SHA256.Create().ComputeHash(msgBytes); var sig = schnorrSig.Sign(msgHash, keyPair.PrivateKey); Assert.NotNull(sig); Assert.InRange(sig.Length, 0, Constant.SIGNATURE_SIZE); signatures.Add(sig); messages.Add(msgHash); publicKeys.Add(keyPair.PublicKey); } var valid = schnorrSig.VerifyBatch(signatures, messages, publicKeys); Assert.True(valid); } }
public TransactionPayload SignWith(TransactionPayload tx, Account signer, bool getNonce = false) { if (signer == null) { throw new Exception("account not exists"); } try { if (getNonce) { var result = _zil.GetBalance(signer.Address).Result; tx.Nonce = (int)result.Nonce + 1; } } catch (Exception e) { throw new Exception("cannot get nonce", e); } tx.PubKey = signer.GetPublicKey(); byte[] message = tx.Encode(); Signature signature = Schnorr.Sign(signer.KeyPair, message); tx.Signature = (signature.ToString().ToLower()); return(tx); }
public void Schnorrsig_Serialize() { using (var secp256k1 = new Secp256k1()) using (var schnorrSig = new Schnorr()) { var keyPair = secp256k1.GenerateKeyPair(); var msg = "Message for signing"; var msgBytes = Encoding.UTF8.GetBytes(msg); var msgHash = System.Security.Cryptography.SHA256.Create().ComputeHash(msgBytes); var sigIn = schnorrSig.Sign(msgHash, keyPair.PrivateKey); var sigOut = schnorrSig.Serialize(sigIn); Assert.NotNull(sigOut); Assert.InRange(sigOut.Length, 0, Constant.SIGNATURE_SIZE); } }
public void HelpTest() { Trace.WriteLine(Schnorr.Help()); }
public static string GeneratePrivateKey() { ECKeyPair keys = Schnorr.GenerateKeyPair(); return(keys.PrivateKey.ToString(8)); }