Beispiel #1
0
        public string GetMultipassToken(ShopifyProfile profile)
        {
            //Generate encryption key and signature key by SHA 256
            var keys = new MessageDigestContext(MessageDigest.SHA256).Digest(Encoding.UTF8.GetBytes(_shopifyMultipassSecret));

            //First 16 bytes will be encryption key and last 16 bytes will be signature key
            ArraySegment <byte> encryptionKeyArraySegmenet = new ArraySegment <byte>(keys, 0, 16);
            ArraySegment <byte> signatureKeyArraySegmenet  = new ArraySegment <byte>(keys, 16, 16);

            var encryptionKey = encryptionKeyArraySegmenet.ToArray();
            var signatureKey  = signatureKeyArraySegmenet.ToArray();


            var dataString = JsonConvert.SerializeObject(profile);
            var dataBytes  = Encoding.UTF8.GetBytes(dataString);

            //generate random 16 bytes for Init Vactor
            var iv = new byte[16];

            new RNGCryptoServiceProvider().GetBytes(iv);

            //Generate Cipher using AES-128-CBC algo and concat Init Vector with this.
            var cipher = Combine(iv, new CipherContext(Cipher.AES_128_CBC).Crypt(dataBytes, encryptionKey, iv, true));

            //Generate signature of Cipher
            HMACSHA256 hasher = new HMACSHA256(signatureKey);

            byte[] sing = hasher.ComputeHash(cipher);


            //append signature to cipher and convert it to URL safe base64 string
            var token = Convert.ToBase64String(Combine(cipher, sing)).Replace("+", "-").Replace("/", "_");

            return(token);
        }
Beispiel #2
0
        private void x9_62_test_internal(Asn1Object obj, string r_in, string s_in)
        {
            byte[] message = Encoding.ASCII.GetBytes("abc");

            using (MessageDigestContext md_ctx = new MessageDigestContext(MessageDigest.ECDSA))
            {
                byte[] digest = md_ctx.Digest(message);

                Console.Write("testing {0}: ", obj.ShortName);

                using (Key key = Key.FromCurveName(obj))
                {
                    key.GenerateKey();
                    Console.Write(".");
                    using (DSASignature signature = key.Sign(digest))
                    {
                        Console.Write(".");
                        BigNumber r = BigNumber.FromDecimalString(r_in);
                        BigNumber s = BigNumber.FromDecimalString(s_in);
                        Assert.AreEqual(r, signature.R);
                        Assert.AreEqual(s, signature.S);
                        Console.Write(".");
                        Assert.IsTrue(key.Verify(digest, signature));
                        Console.Write(".");
                    }
                }
            }
            Console.WriteLine(" ok");
        }
        public void Execute(string[] args)
        {
            using (MessageDigestContext ctx = new MessageDigestContext(MessageDigest.SHA512))
                this.GenericTest("SHA-512", ctx, this.app, 288);

            using (MessageDigestContext ctx = new MessageDigestContext(MessageDigest.SHA384))
                this.GenericTest("SHA-384", ctx, this.addenum, 64);
        }
Beispiel #4
0
        public void TestCase()
        {
            using (MessageDigestContext ctx = new MessageDigestContext(MessageDigest.SHA512))
                this.GenericTest("SHA-512", ctx, this.app, 288);

            using (MessageDigestContext ctx = new MessageDigestContext(MessageDigest.SHA384))
                this.GenericTest("SHA-384", ctx, this.addenum, 64);
        }
Beispiel #5
0
        public void Execute(string[] args)
        {
            using (MessageDigestContext ctx = new MessageDigestContext(MessageDigest.SHA256))
                this.GenericTest("SHA-256", ctx, this.app);

            using (MessageDigestContext ctx = new MessageDigestContext(MessageDigest.SHA224))
                this.GenericTest("SHA-224", ctx, this.addenum);
        }
Beispiel #6
0
        public void TestCase()
        {
            using (MessageDigestContext ctx = new MessageDigestContext(MessageDigest.SHA256))
                this.GenericTest("SHA-256", ctx, this.app);

            using (MessageDigestContext ctx = new MessageDigestContext(MessageDigest.SHA224))
                this.GenericTest("SHA-224", ctx, this.addenum);
        }
Beispiel #7
0
        static void Main(string[] args)
        {
            Authorities();
            return;

            SimpleSerialNumber       seq = new SimpleSerialNumber();
            X509CertificateAuthority ca  = X509CertificateAuthority.SelfSigned(
                seq,
                new X509Name("CN=."),
                TimeSpan.FromDays(10)
                );

            Console.WriteLine(ca.Certificate);

            DSA         dsa = new DSA(new DSAParameters(512));
            CryptoKey   key = new CryptoKey(dsa);
            X509Request req = new X509Request(0, new X509Name("CN=com."), key);

            req.Sign(key, MessageDigest.DSS1);

            X509Certificate cert = ca.ProcessRequest(req, TimeSpan.FromDays(10));

            Console.WriteLine(cert);
            Console.WriteLine("CA Verified: " + cert.Verify(ca.Key));
            Console.WriteLine("Self Verified: " + cert.Verify(key));

            SimpleSerialNumber       serial2 = new SimpleSerialNumber();
            X509CertificateAuthority caSelf  = new X509CertificateAuthority(
                cert,
                key,
                serial2);

            X509Request req2    = cert.CreateRequest(key, MessageDigest.DSS1);
            X509Name    subject = req2.Subject;

            Console.WriteLine("Request1: " + req);
            Console.WriteLine("Request2: " + req2);

            X509Certificate cert2 = caSelf.ProcessRequest(req2, TimeSpan.FromDays(10));

            Console.WriteLine("Cert2: " + cert2);

            DH dh = new DH(128, 5);

            MessageDigestContext mdc = new MessageDigestContext(MessageDigest.DSS1);

            byte[] msg = dh.PublicKey;
            byte[] sig = mdc.Sign(msg, key);

            Console.WriteLine(dh);
            Console.WriteLine("DH P         : " + BitConverter.ToString(dh.P));
            Console.WriteLine("DH G         : " + BitConverter.ToString(dh.G));
            Console.WriteLine("DH Secret Key: " + BitConverter.ToString(dh.PrivateKey));
            Console.WriteLine("DH Public Key: " + BitConverter.ToString(msg));
            Console.WriteLine("DH Signature : " + BitConverter.ToString(sig));

            Console.WriteLine(mdc.Verify(msg, sig, key));
        }
Beispiel #8
0
        private void GenericTest(string name, MessageDigestContext ctx, byte[][] results)
        {
            Console.WriteLine("Testing {0}", name);

            byte[] digest = ctx.Digest(Encoding.ASCII.GetBytes("abc"));
            string str1   = BitConverter.ToString(digest);
            string str2   = BitConverter.ToString(results[0]);

            if (str1 != str2)
            {
                throw new Exception("TEST 1 of 3 failed");
            }

            Console.Write(".");

            byte[] msg = Encoding.ASCII.GetBytes(
                "abcdbcde" + "cdefdefg" + "efghfghi" +
                "ghijhijk" + "ijkljklm" + "klmnlmno" + "mnopnopq");
            digest = ctx.Digest(msg);
            str1   = BitConverter.ToString(digest);
            str2   = BitConverter.ToString(results[1]);
            if (str1 != str2)
            {
                throw new Exception("TEST 2 of 3 failed");
            }

            Console.Write(".");

            ctx.Init();
            for (int i = 0; i < 1000000; i += 160)
            {
                msg = Encoding.ASCII.GetBytes(
                    "aaaaaaaa" + "aaaaaaaa" + "aaaaaaaa" + "aaaaaaaa" +
                    "aaaaaaaa" + "aaaaaaaa" + "aaaaaaaa" + "aaaaaaaa" +
                    "aaaaaaaa" + "aaaaaaaa" + "aaaaaaaa" + "aaaaaaaa" +
                    "aaaaaaaa" + "aaaaaaaa" + "aaaaaaaa" + "aaaaaaaa" +
                    "aaaaaaaa" + "aaaaaaaa" + "aaaaaaaa" + "aaaaaaaa");
                int    len = (1000000 - i) < 160 ? 1000000 - i : 160;
                byte[] tmp = new byte[len];
                Buffer.BlockCopy(msg, 0, tmp, 0, len);
                ctx.Update(tmp);
            }
            digest = ctx.DigestFinal();

            str1 = BitConverter.ToString(digest);
            str2 = BitConverter.ToString(results[2]);
            if (str1 != str2)
            {
                throw new Exception("TEST 3 of 3 failed");
            }

            Console.Write(".");

            Console.WriteLine(" passed.");
        }
        private void GenericTest(string name, MessageDigestContext ctx, byte[][] results, int alen)
        {
            Console.WriteLine("Testing {0}", name);

            byte[] digest = ctx.Digest(Encoding.ASCII.GetBytes("abc"));
            string str1   = BitConverter.ToString(digest);
            string str2   = BitConverter.ToString(results[0]);

            if (str1 != str2)
            {
                throw new Exception("TEST 1 of 3 failed");
            }

            Console.Write(".");

            byte[] msg = Encoding.ASCII.GetBytes(
                "abcdefgh" + "bcdefghi" + "cdefghij" + "defghijk" +
                "efghijkl" + "fghijklm" + "ghijklmn" + "hijklmno" +
                "ijklmnop" + "jklmnopq" + "klmnopqr" + "lmnopqrs" +
                "mnopqrst" + "nopqrstu");
            digest = ctx.Digest(msg);
            str1   = BitConverter.ToString(digest);
            str2   = BitConverter.ToString(results[1]);
            if (str1 != str2)
            {
                throw new Exception("TEST 2 of 3 failed");
            }

            Console.Write(".");

            ctx.Init();
            for (int i = 0; i < 1000000; i += alen)
            {
                msg = Encoding.ASCII.GetBytes(new string('a', alen));
                int    len = (1000000 - i) < alen ? 1000000 - i : alen;
                byte[] tmp = new byte[len];
                Buffer.BlockCopy(msg, 0, tmp, 0, len);
                ctx.Update(tmp);
            }
            digest = ctx.DigestFinal();

            str1 = BitConverter.ToString(digest);
            str2 = BitConverter.ToString(results[2]);
            if (str1 != str2)
            {
                throw new Exception("TEST 3 of 3 failed");
            }

            Console.Write(".");

            Console.WriteLine(" passed.");
        }
Beispiel #10
0
 /// <summary>
 /// 公钥验签
 /// </summary>
 public static bool Verify(string publicKey, string text, string sign, Encoding encoding)
 {
     using (BIO bio = new BIO(publicKey))
     {
         using (CryptoKey cryptoKey = CryptoKey.FromPublicKey(bio, null))
         {
             using (MessageDigestContext sha256 = new MessageDigestContext(MessageDigest.SHA256))
             {
                 byte[] msgByte  = encoding.GetBytes(text);
                 byte[] signByte = Convert.FromBase64String(sign);
                 return(sha256.Verify(msgByte, signByte, cryptoKey));
             }
         }
     }
 }
Beispiel #11
0
 /// <summary>
 /// 私钥签名
 /// </summary>
 public static string Sign(string privateKey, string text, Encoding encoding)
 {
     using (BIO bio = new BIO(privateKey))
     {
         using (CryptoKey cryptoKey = CryptoKey.FromPrivateKey(bio, null))
         {
             using (MessageDigestContext sha256 = new MessageDigestContext(MessageDigest.SHA256))
             {
                 byte[] msgByte  = encoding.GetBytes(text);
                 byte[] signByte = sha256.Sign(msgByte, cryptoKey);
                 return(Convert.ToBase64String(signByte));
             }
         }
     }
 }
        public void Execute(string[] args)
        {
            using (MessageDigestContext ctx = new MessageDigestContext(MessageDigest.SHA))
            {
                for (int i = 0; i < tests.Length; i++)
                {
                    byte[] msg = Encoding.ASCII.GetBytes(this.tests[i]);
                    byte[] ret = ctx.Digest(msg);

                    string str = BitConverter.ToString(ret);
                    if (str != this.results[i])
                    {
                        Console.WriteLine("error calculating SHA on {0}", this.tests[i]);
                        Console.WriteLine("got {0} instead of {1}", str, this.results[i]);
                    }
                    else
                    {
                        Console.WriteLine("test {0} ok", i);
                    }
                }

                byte[] buf = Encoding.ASCII.GetBytes(new string('a', 1000));
                ctx.Init();
                for (int i = 0; i < 1000; i++)
                {
                    ctx.Update(buf);
                }

                byte[] retx = ctx.DigestFinal();
                string strx = BitConverter.ToString(retx);
                if (strx != bigret)
                {
                    Console.WriteLine("error calculating SHA 'a' * 1000");
                    Console.WriteLine("got {0} instead of {1}", strx, bigret);
                }
                else
                {
                    Console.WriteLine("test 3 ok");
                }
            }
        }
Beispiel #13
0
        public void TestCase()
        {
            using (MessageDigestContext ctx = new MessageDigestContext(MessageDigest.SHA)) {
                for (int i = 0; i < tests.Length; i++)
                {
                    byte[] msg = Encoding.ASCII.GetBytes(this.tests[i]);
                    byte[] ret = ctx.Digest(msg);

                    string str = BitConverter.ToString(ret);
                    Assert.AreEqual(results[i], str);
                }

                byte[] buf = Encoding.ASCII.GetBytes(new string('a', 1000));
                ctx.Init();
                for (int i = 0; i < 1000; i++)
                {
                    ctx.Update(buf);
                }

                byte[] retx = ctx.DigestFinal();
                string strx = BitConverter.ToString(retx);
                Assert.AreEqual(bigret, strx);
            }
        }
Beispiel #14
0
        static async Task Main(string[] args)
        {
            if (args[0] == "-check" || args[0] == "/check")
            {
                Check(args.Skip(1));
                return;
            }

            foreach (var arg in args)
            {
                var fileScanJson     = AddPrefix(Path.Combine(arg, FileScanJson));
                var serialised       = new List <Entry>();
                var directoryEntries = new Queue <string>();
                var fileEntries      = new List <string>();
                directoryEntries.Enqueue(AddPrefix(arg));
                var sw = new Stopwatch();
                sw.Start();
                long last      = 0;
                long lastWrite = 0;
                long lastBytes = 0;
                long bytes     = 0;
                long processed = 0;

                void WriteJson()
                {
                    File.WriteAllText(fileScanJson, JsonConvert.SerializeObject(serialised, Formatting.Indented));
                }

                void UpdateTitle(string current)
                {
                    var now     = sw.ElapsedMilliseconds;
                    var elapsed = now - last;

                    if (elapsed > 1000)
                    {
                        var bps = (double)(bytes - lastBytes) * 1000 / elapsed;
                        Console.WriteLine($@"{GetBytesReadable((long)bps)}/s {GetBytesReadable(bytes)} {processed}/{fileEntries.Count - processed}/{directoryEntries.Count} {RemovePrefix(current)}");
                        last      = now;
                        lastBytes = bytes;
                    }

                    var elapsedWrite = now - lastWrite;

                    if (elapsedWrite > 3600000)
                    {
                        WriteJson();
                        lastWrite = now;
                    }
                }

                var existingFiles = new Dictionary <string, Entry>(StringComparer.InvariantCultureIgnoreCase);

                if (File.Exists(fileScanJson))
                {
                    existingFiles = JsonConvert.DeserializeObject <Entry[]>(File.ReadAllText(fileScanJson)).ToDictionary(item => item.Name, item => item);
                }

                while (directoryEntries.Count > 0)
                {
                    var name = directoryEntries.Dequeue();
                    UpdateTitle(name);
                    try
                    {
                        foreach (var file in Directory.GetFileSystemEntries(name))
                        {
                            if (File.Exists(file))
                            {
                                if (!string.Equals(fileScanJson, file, StringComparison.InvariantCultureIgnoreCase))
                                {
                                    fileEntries.Add(file);
                                }
                            }
                            else
                            {
                                directoryEntries.Enqueue(file);
                            }
                        }
                    }
                    catch (UnauthorizedAccessException)
                    {
                    }
                }

                fileEntries.Sort(StringComparer.InvariantCultureIgnoreCase);

                var buf  = new byte[65536];
                var buf2 = new byte[65536];

                var hashTask = Task.FromResult(buf2);

                foreach (var name in fileEntries)
                {
                    UpdateTitle(name);

                    FileInfo fileInfo;
                    try
                    {
                        fileInfo = new FileInfo(name);
                    }
                    catch (IOException)
                    {
                        continue;
                    }
                    string hashStr    = null;
                    var    storedName = RemovePrefix(name);

                    if (existingFiles.TryGetValue(storedName, out var entry) && entry.CreationTimeUtc == fileInfo.CreationTimeUtc && entry.ModificationTimeUtc == fileInfo.LastWriteTimeUtc && entry.Length == fileInfo.Length)
                    {
                        hashStr = entry.Sha512;
                    }

                    if (hashStr == null)
                    {
                        Stream fi;

                        try
                        {
                            fi = File.OpenRead(name);
                        }
                        catch (IOException)
                        {
                            continue;
                        }
                        using (fi)
                        {
                            using (var ctx = new MessageDigestContext(MessageDigest.SHA512))
                            {
                                ctx.Init();
                                var currentBuf = buf;

                                while (true)
                                {
                                    var localRead = fi.Read(currentBuf, 0, currentBuf.Length);
                                    var nextBuf   = await hashTask;
                                    if (localRead == 0)
                                    {
                                        break;
                                    }

                                    var localBuf = currentBuf;
                                    currentBuf = nextBuf;
                                    hashTask   = Task.Factory.StartNew(() =>
                                    {
                                        ctx.Update(localRead == localBuf.Length ? localBuf : localBuf.Take(localRead).ToArray());
                                        bytes += localRead;
                                        UpdateTitle(name);
                                        return(localBuf);
                                    });
                                }

                                var hash = ctx.DigestFinal();
                                hashStr = BitConverter.ToString(hash).Replace("-", string.Empty).ToLowerInvariant();
                            }
                        }
                    }

                    serialised.Add(new Entry
                    {
                        Name                = storedName,
                        CreationTimeUtc     = fileInfo.CreationTimeUtc,
                        ModificationTimeUtc = fileInfo.LastWriteTimeUtc,
                        Length              = fileInfo.Length,
                        Sha512              = hashStr
                    });
                    ++processed;
                }

                WriteJson();
            }
        }
Beispiel #15
0
 private byte[] KDF1_SHA1(byte[] msg)
 {
     using (MessageDigestContext mdc = new MessageDigestContext(MessageDigest.SHA1)) {
         return(mdc.Digest(msg));
     }
 }
Beispiel #16
0
		static void Main(string[] args)
		{
			Authorities();
			return;

			SimpleSerialNumber seq = new SimpleSerialNumber();
			X509CertificateAuthority ca = X509CertificateAuthority.SelfSigned(
				seq,
				new X509Name("CN=."),
				TimeSpan.FromDays(10)
			);

			Console.WriteLine(ca.Certificate);

			DSA dsa = new DSA(new DSAParameters(512));
			CryptoKey key = new CryptoKey(dsa);
			X509Request req = new X509Request(0, new X509Name("CN=com."), key);
			req.Sign(key, MessageDigest.DSS1);

			X509Certificate cert = ca.ProcessRequest(req, TimeSpan.FromDays(10));
			Console.WriteLine(cert);
			Console.WriteLine("CA Verified: " + cert.Verify(ca.Key));
			Console.WriteLine("Self Verified: " + cert.Verify(key));

			SimpleSerialNumber serial2 = new SimpleSerialNumber();
			X509CertificateAuthority caSelf = new X509CertificateAuthority(
				cert,
				key,
				serial2);

			X509Request req2 = cert.CreateRequest(key, MessageDigest.DSS1);
			X509Name subject = req2.Subject;
			Console.WriteLine("Request1: " + req);
			Console.WriteLine("Request2: " + req2);

			X509Certificate cert2 = caSelf.ProcessRequest(req2, TimeSpan.FromDays(10));
			Console.WriteLine("Cert2: " + cert2);

			DH dh = new DH(128, 5);

			MessageDigestContext mdc = new MessageDigestContext(MessageDigest.DSS1);
			byte[] msg = dh.PublicKey;
			byte[] sig = mdc.Sign(msg, key);

			Console.WriteLine(dh);
			Console.WriteLine("DH P         : " + BitConverter.ToString(dh.P));
			Console.WriteLine("DH G         : " + BitConverter.ToString(dh.G));
			Console.WriteLine("DH Secret Key: " + BitConverter.ToString(dh.PrivateKey));
			Console.WriteLine("DH Public Key: " + BitConverter.ToString(msg));
			Console.WriteLine("DH Signature : " + BitConverter.ToString(sig));

			Console.WriteLine(mdc.Verify(msg, sig, key));
		}