public static string GetAccountIdFromPrivateKey(string privateKey) { var pvtKey = Base58Encoding.DecodePrivateKey(privateKey); var kp = new Neo.Wallets.KeyPair(pvtKey); return(Base58Encoding.EncodeAccountId(kp.PublicKey.EncodePoint(false).Skip(1).ToArray())); }
public static bool ValidatePrivateKey(string PrivateKey) { try { Base58Encoding.DecodePrivateKey(PrivateKey); return(true); } catch { return(false); } }
private static byte[] DerivePublicKeyBytes(string privateKey) { var curve = SecNamedCurves.GetByName("secp256r1"); var domain = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H); byte[] pkbytes = Base58Encoding.DecodePrivateKey(privateKey); var d = new BigInteger(1, pkbytes); var q = domain.G.Multiply(d); var publicKey = new ECPublicKeyParameters(q, domain); return(publicKey.Q.GetEncoded(false)); }
public static string GetSignature(string privateKey, string message) { var curve = SecNamedCurves.GetByName("secp256r1"); var domain = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H); //byte[] pkbytes = Base58Encoding.Decode(privateKey); //byte[] pkbytes = Base58Encoding.DecodeWithCheckSum(privateKey); byte[] pkbytes = Base58Encoding.DecodePrivateKey(privateKey); var keyParameters = new ECPrivateKeyParameters(new BigInteger(1, pkbytes), domain); ISigner signer = SignerUtilities.GetSigner("SHA-256withECDSA"); signer.Init(true, keyParameters); signer.BlockUpdate(Encoding.UTF8.GetBytes(message), 0, message.Length); var signature = signer.GenerateSignature(); var netformat = SignatureHelper.ConvertDerToP1393(signature); return(Base58Encoding.Encode(netformat)); }
public byte[] GetSharedSecret(string LocalPrivateKey, string RemoteAccountId) { //var pvtKey = Base58Encoding.DecodePrivateKey(privateKey); //var kp = new Neo.Wallets.KeyPair(pvtKey); //return Base58Encoding.EncodeAccountId(kp.PublicKey.EncodePoint(false).Skip(1).ToArray()); //var curve = SecNamedCurves.GetByName("secp256k1"); var curve = SecNamedCurves.GetByName("secp256r1"); var domain = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H); //byte[] pkbytes = Base58Encoding.DecodeWithCheckSum(LocalPrivateKey); byte[] pkbytes = Base58Encoding.DecodePrivateKey(LocalPrivateKey); var privateKeyParameters = new ECPrivateKeyParameters(new BigInteger(1, pkbytes), domain); var dh = new ECDHCBasicAgreement(); dh.Init(privateKeyParameters); //var publicKeyBytes = Base58Encoding.DecodeWithCheckSum(RemotePublicKey); var publicKeyBytes = Base58Encoding.DecodeAccountId(RemoteAccountId); //var q = curve.Curve.DecodePoint(publicKeyBytes); var q = curve.Curve.CreatePoint(new BigInteger(1, publicKeyBytes.Take(32).ToArray()), new BigInteger(1, publicKeyBytes.Skip(32).ToArray())); var publicKeyParameters = new ECPublicKeyParameters(q, domain); var sharedSecret = dh.CalculateAgreement(publicKeyParameters); using (var sha = SHA256.Create()) { var hash = sha.ComputeHash(sharedSecret.ToByteArray()); return(hash); } }
public static string GetSignature(string privateKey, string message, string AccountId) { if (IsMono) { return(PortableSignatures.GetSignature(privateKey, message)); } var publicKeyBytes = Base58Encoding.DecodeAccountId(AccountId); var privateKeyBytes = Base58Encoding.DecodePrivateKey(privateKey); var signature = Neo.Cryptography.Crypto.Default.Sign(Encoding.UTF8.GetBytes(message), privateKeyBytes, publicKeyBytes); return(Base58Encoding.Encode(signature)); //Neo.Cryptography.ECC.ECDsa sa = new Neo.Cryptography.ECC.ECDsa(privateKeyBytes, Neo.Cryptography.ECC.ECCurve.Secp256r1); //var sigInts = sa.GenerateSignature(Encoding.ASCII.GetBytes(message)); //var sh = new SignatureHolder(sigInts); //var signature = sh.ToString(); ////var vrt = VerifySignature(message, AccountId, signature); //return signature; }