Пример #1
0
        //public void SignUseAPrivateKey(string signFile, string needToSignFile, string ecdSaKeyFile)
        //{
        //    SHA256Provider s256 = new SHA256Provider();
        //    byte[] s256R = s256.ComputeFile(needToSignFile);

        //    StreamReader sr = new StreamReader(ecdSaKeyFile);
        //    String s = sr.ReadToEnd();
        //    sr.Close();

        //    ECDsaProvider esa = ECDsaProvider.CreateUseAXMLKeyFile(s);

        //    byte[] sign = esa.SignFile(needToSignFile);

        //    File.Create(signFile).Close();

        //    StreamWriter sw = new StreamWriter(signFile);

        //    sw.WriteLine("=== Start ECDSA Sign ===");

        //    int i = 0;
        //    foreach (byte b in sign)
        //    {
        //        StringBuilder sb = new StringBuilder();
        //        sb.Append(b);
        //        sw.Write(sb.ToString());
        //        if ((sign.Length - 1) != i)
        //        {
        //            sw.Write(',');
        //        }
        //        i++;
        //    }

        //    sw.WriteLine();

        //    sw.WriteLine("=== End ECDSA Sign ===");

        //    sw.WriteLine();

        //    sw.WriteLine("=== Start Sha256 Sign ===");
        //    i = 0;
        //    foreach (byte b in s256R)
        //    {
        //        StringBuilder sb = new StringBuilder();
        //        sb.Append(b);
        //        sw.Write(sb.ToString());
        //        if ((s256R.Length - 1) != i)
        //        {
        //            sw.Write(',');
        //        }
        //        i++;
        //    }
        //    sw.WriteLine();

        //    sw.Write("=== End Sha256 Sign ===");

        //    sw.Close();
        //}

        public string SignAsNewKeyAndExportPublicKeyAsXml(string signFile, string needToSignFile, string keyName)
        {
            SHA256Provider s256 = new SHA256Provider();

            byte[] s256R = s256.ComputeFile(needToSignFile);

            ECDsaProvider esa = new ECDsaProvider(keyName, null);

            CngKey k = esa.Key;

            byte[] sign = esa.SignFile(needToSignFile);

            File.Create(signFile).Close();

            StreamWriter sw = new StreamWriter(signFile);

            sw.WriteLine("=== Start ECDSA Sign ===");

            int i = 0;

            foreach (byte b in sign)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append(b);
                sw.Write(sb.ToString());
                if ((sign.Length - 1) != i)
                {
                    sw.Write(',');
                }
                i++;
            }

            sw.WriteLine();

            sw.WriteLine("=== End ECDSA Sign ===");

            sw.WriteLine();

            sw.WriteLine("=== Start Sha256 Sign ===");
            i = 0;
            foreach (byte b in s256R)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append(b);
                sw.Write(sb.ToString());
                if ((s256R.Length - 1) != i)
                {
                    sw.Write(',');
                }
                i++;
            }
            sw.WriteLine();

            sw.Write("=== End Sha256 Sign ===");

            sw.Close();

            return(esa.ToXmlString);
        }
Пример #2
0
        /// <summary>
        /// <see cref="IHashProvider"/> factory.
        /// </summary>
        /// <param name="func">Hash function to use; see <see cref="HashFunc"/>.</param>
        /// <returns></returns>
        private IHashProvider CreateHashAlgorithm(HashFunc func)
        {
            switch (func)
            {
            case HashFunc.SHA256:
                return(SHA256Provider.Create());

            case HashFunc.SHA512:
                return(SHA512Provider.Create());

            case HashFunc.Murmur3:
                return(Murmur3.Create());

            default:
                throw new NotImplementedException();
            }
        }
Пример #3
0
        public void TestConcurrency()
        {
            ThreadsafeHashAlgorithm hash = new SHA256Provider().CreateThreadsafe();

            byte[] data     = new[] { (byte)0x34, (byte)0x2f, (byte)0xab, (byte)0x25, (byte)0x33 };
            byte[] expected = hash.ComputeHash(data);

            int count = 100;

            Parallel.For(0, 2, i =>
            {
                for (int j = 0; j < count; ++j)
                {
                    byte[] result = hash.ComputeHash(data);
                    CollectionAssert.AreEqual(expected, result);
                }
            });
        }
Пример #4
0
        /// <summary>
        /// Check Sign.
        /// </summary>
        /// <param name="signFile">The signture file.</param>
        /// <param name="verifyFile">The file need to verify.</param>
        /// <param name="ecdSaKeyFile">The ECDsa Public keyring.</param>
        /// <returns>Result.</returns>
        public bool Check(string signFile, string verifyFile, string ecdSaKeyFile)
        {
            StreamReader sr     = new StreamReader(signFile);
            string       result = sr.ReadToEnd();

            sr.Close();

            if (!result.StartsWith("=== Start ECDSA Sign ==="))
            {
                throw new InvalidDataException();
            }

            StringBuilder sb = new StringBuilder();

            sb.Append(result);

            sb.Replace("=== Start ECDSA Sign ===", "");
            sb.Replace("=== End ECDSA Sign ===", "\\");
            sb.Replace("=== Start Sha256 Sign ===", "");
            sb.Replace("=== End Sha256 Sign ===", "");

            string APResult = sb.ToString().Trim();

            string[] diffSign = APResult.Split('\\');

            StreamReader ecdKSR = new StreamReader(ecdSaKeyFile);
            string       s      = ecdKSR.ReadToEnd();

            ecdKSR.Close();

            ECDsaProvider esa   = ECDsaProvider.CreateUseAXMLKeyFile(s);
            bool          esaRe = esa.VerifyBytes(diffSign[0], verifyFile);

            SHA256Provider s256 = new SHA256Provider();

            byte[] s256R = s256.ComputeFile(verifyFile);

            bool s256Re = true;

            string[] signBlockStrArray = diffSign[1].Split(',');

            byte[] signBlock = new byte[signBlockStrArray.Length];

            int i = 0;

            foreach (string item in signBlockStrArray)
            {
                signBlock[i] = byte.Parse(item);
                i++;
            }

            i = 0;
            foreach (byte b1 in signBlock)
            {
                if (b1 != signBlock[i])
                {
                    s256Re = false;
                }
                i++;
            }

            return(s256Re & esaRe);
        }