Beispiel #1
0
        // Salt, aka Nonce, aka IV - we can use the block hash to avoid using another extra string
        public string Encrypt(string LocalPrivateKey, string RemoteAccountId, string Salt, string PlainText)
        {
            var secret = GetSharedSecret(LocalPrivateKey, RemoteAccountId);

            //var plainTextBytes = Encoding.Unicode.GetBytes(PlainText);
            var saltBytes = Encoding.Unicode.GetBytes(Salt.ToCharArray(), 0, 8);

            using (var rijndael = new RijndaelManaged())
            {
                //rijndael.Key = secret;
                //rijndael.IV = saltBytes;
                var encryptor = rijndael.CreateEncryptor(secret, saltBytes);
                using (var memoryStream = new MemoryStream())
                {
                    using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(cryptoStream))
                        {
                            //Write all data to the stream.
                            swEncrypt.Write(PlainText);
                            //encrypted = msEncrypt.ToArray();
                            //cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
                            //cryptoStream.FlushFinalBlock();
                        }
                        var cipherTextBytes = memoryStream.ToArray();
                        var cipherText      = Base58Encoding.Encode(cipherTextBytes);
                        return(cipherText);
                    }
                }
            }
        }
            public override string ToString()
            {
                var b1   = R.ToByteArray();
                var b2   = S.ToByteArray();
                var buff = new byte[2 + b1.Length + b2.Length];

                buff[0] = (byte)b1.Length;
                buff[1] = (byte)b2.Length;
                Buffer.BlockCopy(b1, 0, buff, 2, b1.Length);
                Buffer.BlockCopy(b2, 0, buff, 2 + b1.Length, b2.Length);
                return(Base58Encoding.Encode(buff));
            }
        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 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;
        }