Пример #1
0
 public static string CalcMD5(string input)
 {
     byte[] asciiBytes  = ASCIIEncoding.ASCII.GetBytes(input);
     byte[] hashedBytes = MD5CryptoServiceProvider.Create().ComputeHash(asciiBytes);
     return(BitConverter.ToString(hashedBytes).Replace("-", "").ToLower());
 }
Пример #2
0
        private void secondHandshake()
        {
            byte [] preRequest = new byte [1];
            byte [] request    = new byte [24];
            byte [] response   = request;

            preRequest [0] = TypeNewconn;

            ulong privateKey;
            ulong publicKey;
            DH64  dh64 = new DH64();

            dh64.KeyPair(out privateKey, out publicKey);

            using (MemoryStream ms = new MemoryStream(request, 0, 8)) {
                using (BinaryWriter w = new BinaryWriter(ms)) {
                    w.Write(publicKey);
                }
            }
            _BaseStream.Write(preRequest, 0, preRequest.Length);
            _BaseStream.Write(request, 0, 8);

            for (int n = 24; n > 0;)
            {
                int x = _BaseStream.Read(response, 24 - n, n);
                if (x == 0)
                {
                    throw new EndOfStreamException();
                }
                n -= x;
            }

            ulong challengeCode = 0;

            using (MemoryStream ms = new MemoryStream(response, 0, 24)) {
                using (BinaryReader r = new BinaryReader(ms)) {
                    ulong serverPublicKey = r.ReadUInt64();
                    ulong secret          = dh64.Secret(privateKey, serverPublicKey);

                    using (MemoryStream ms2 = new MemoryStream(_Key)) {
                        using (BinaryWriter w = new BinaryWriter(ms2)) {
                            w.Write(secret);
                        }
                    }

                    _ReadCipher  = new RC4Cipher(_Key);
                    _WriteCipher = new RC4Cipher(_Key);
                    _ReadCipher.XORKeyStream(response, 8, response, 8, 8);

                    _ID = r.ReadUInt64();

                    using (MemoryStream ms2 = new MemoryStream(request, 0, 16)) {
                        using (BinaryWriter w = new BinaryWriter(ms2)) {
                            w.Write(response, 16, 8);
                            w.Write(_Key);
                            MD5     md5  = MD5CryptoServiceProvider.Create();
                            byte [] hash = md5.ComputeHash(request, 0, 16);
                            Buffer.BlockCopy(hash, 0, request, 0, hash.Length);
                            _BaseStream.Write(request, 0, 16);
                        }
                    }
                }
            }
        }
Пример #3
0
        static void Main(string[] args)
        {
            //Console.Title = "DeviceVM Version File Generator";
            if (args.Length == 0 || args[0] == "help" || args[0] == "?")
            {
                Console.WriteLine("DeviceVM SplashTop Version File Generator");
                Console.WriteLine("Usage:");
                Console.WriteLine("   DVM-Version.exe SPLASHTOP_FOLDER OUTPUTFILE [VERSION] [DATE]");
                Console.WriteLine("   [DATE]: DD/MM/YYYY");
            }
            else
            {
                string   src           = args[0];
                string   target        = args[1];
                Version  splashVersion = null;
                DateTime splashDate    = DateTime.Now;

                Int32 binaryMagic  = 0x00000006;
                Int32 archiveMagic = 0x00000003;
                Int32 kernelMagic  = 0x00000002;
                Int32 dataMagic    = 0x00000005;

                if (args.Length >= 3)
                {
                    splashVersion = new Version(args[2]);
                }

                if (args.Length == 4)
                {
                    string[] vals = args[3].Split('/');

                    splashDate = new DateTime(Convert.ToInt32(vals[2]), Convert.ToInt32(vals[1]), Convert.ToInt32(vals[0]));
                }

                if (!Directory.Exists(src))
                {
                    Console.WriteLine("Specified Image does not exist");
                    return;
                }

                Console.WriteLine("DeviceVM SplashTop Version File Generator");
                Console.WriteLine("Source Directory: " + args[0]);
                Console.WriteLine("Target File: " + args[1]);
                Console.WriteLine();

                if (splashVersion == null)
                {
                    Console.WriteLine("Please Enter the Version [x.x.x.x]:");
                    splashVersion = new Version(Console.ReadLine());
                }



                Console.WriteLine("Generating Header");
                byte[] file = new byte[0];
                CreationFunctions.AddUTF8String(ref file, "_DeviceVM Inc._", 16);              //[UTF8] (16) - Company
                CreationFunctions.AddUTF8String(ref file, splashDate.ToString("yyyyMMdd"), 8); //[UTF8] (8) - Date
                CreationFunctions.AddByte(ref file, (byte)splashVersion.Major);                //[1] - Major
                CreationFunctions.AddByte(ref file, (byte)splashVersion.Minor);                //[1] - Minor
                CreationFunctions.AddByte(ref file, (byte)splashVersion.Build);                //[1] - Build
                CreationFunctions.AddByte(ref file, (byte)splashVersion.Revision);             //[1] - Rev
                CreationFunctions.AddInt32(ref file, 0x00000075);                              //[4] - Magic


                MD5 md5sum = MD5CryptoServiceProvider.Create();

                //Files

                Console.WriteLine();
                Console.WriteLine("Generating File Entries");
                foreach (string fileInfo in Directory.GetFiles(src))
                {
                    FileInfo fi = new FileInfo(fileInfo);
                    Console.WriteLine("\t" + fi.Name);
                    CreationFunctions.AddUTF8String(ref file, fi.Name, 32);                        //[UTF8] - File Name
                    CreationFunctions.AddUTF8String(ref file, splashDate.ToString("yyyyMMdd"), 8); //[UTF8] - Date (yyyyMMdd)
                    if (fi.Name == "kernel.bin")
                    {
                        CreationFunctions.AddInt32(ref file, kernelMagic); //[4] - Magic
                    }
                    else if (fi.Extension == ".sqx")
                    {
                        CreationFunctions.AddInt32(ref file, archiveMagic); //[4] - Magic
                    }
                    else if (fi.Extension == ".dat" || fi.Extension == ".date" || fi.Extension == ".md5")
                    {
                        CreationFunctions.AddInt32(ref file, dataMagic); //[4] - Magic
                    }
                    else if (fi.Extension == ".bin" || fi.Extension == ".idx")
                    {
                        CreationFunctions.AddInt32(ref file, binaryMagic); //[4] - Magic
                    }
                    else
                    {
                        CreationFunctions.AddInt32(ref file, binaryMagic); //[4] - Magic
                    }
                    CreationFunctions.AddInt32(ref file, 0x0);             //[4] - Padding
                    CreationFunctions.AddInt32(ref file, (int)fi.Length);  //[4] - File Size
                    CreationFunctions.AddData(ref file, new byte[12]);     //[12] - Padding

                    FileStream fs = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read);
                    CreationFunctions.AddData(ref file, md5sum.ComputeHash(fs)); //[16] - MD5
                    fs.Close();
                }


                FileStream outFS = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write);
                outFS.Write(file, 0, file.Length);
                outFS.Close();


                Console.WriteLine("Complete");
            }
        }
Пример #4
0
 public SkinProvider()
 {
     Md5 = MD5CryptoServiceProvider.Create();
 }
Пример #5
0
 public static IHashAlgorithm MD5()
 {
     return(new HashAlgorithmWrapper("MD5", MD5CryptoServiceProvider.Create()));
 }
Пример #6
0
 internal static MD5 CreateMD5()
 {
     return(MD5CryptoServiceProvider.Create());
 }
Пример #7
0
        protected void BuildSSO()
        {
            try
            {
                xmlPublicKey  = GetPublicKey();
                xmlPrivateKey = GetPrivateKey();

                if (xmlPublicKey == null)
                {
                    LogError("Unable to retrieve Public Key");
                    return;
                }

                if (xmlPrivateKey == null)
                {
                    LogError("Unable to retrieve Private Key");
                    return;
                }

                CspParameters            Sendercp  = new CspParameters();
                RSACryptoServiceProvider SenderRSA = null;

                try
                {
                    Sendercp.Flags = CspProviderFlags.UseMachineKeyStore;
                    SenderRSA      = new RSACryptoServiceProvider(Sendercp);
                    SenderRSA.FromXmlString(xmlPrivateKey.OuterXml);
                }
                catch (Exception ex)
                {
                    throw;
                    //return;
                }
                //finally
                //{
                //    SenderRSA.Clear();
                //    //LogError("Error while constructing the PrivateKey: " + ex.Message);
                //}

                CspParameters            Receivercp  = new CspParameters();
                RSACryptoServiceProvider ReceiverRSA = null;

                try
                {
                    Receivercp.Flags = CspProviderFlags.UseMachineKeyStore;
                    ReceiverRSA      = new RSACryptoServiceProvider(Receivercp);
                    ReceiverRSA.FromXmlString(xmlPublicKey.OuterXml);
                }
                catch (Exception ex)
                {
                    throw;
                }
                //finally
                //{
                //    ReceiverRSA.Clear();
                //    //LogError("Error while constructing the PublicKey: " + ex.Message);
                //    //return;
                //}

                string tpayload = AssemblePayload();

                byte[] TripleDESKey  = null;
                byte[] encryptedData = SSOEncryption.TripleDESEncrypt(Encoding.ASCII.GetBytes(tpayload), out TripleDESKey);

                string base64enc = Convert.ToBase64String(encryptedData);

                string plainsig = base64enc + _clientID + _serverID;

                MD5    md     = null;
                byte[] buffer = null;
                byte[] hash   = null;

                try
                {
                    md = MD5CryptoServiceProvider.Create();

                    //Convert the string into an array of bytes.
                    buffer = Encoding.ASCII.GetBytes(plainsig);

                    //Create the hash value from the array of bytes.
                    hash = md.ComputeHash(buffer);
                }
                catch (Exception ex)
                {
                    throw;
                }
                //finally
                //{
                //    ReceiverRSA.Clear();
                //    SenderRSA.Clear();
                //    //LogError("Error Computing Hash: " + ex.Message);

                //}

                byte[] signed;
                byte[] cipher;

                try
                {
                    signed = SenderRSA.SignHash(hash, CryptoConfig.MapNameToOID("MD5"));
                }
                catch (Exception ex)
                {
                    throw;
                }
                //finally
                //{
                //    ReceiverRSA.Clear();
                //    SenderRSA.Clear();
                //    //LogError("Error Signing Hash: " + ex.Message);
                //    //return;
                //}

                try
                {
                    cipher = ReceiverRSA.Encrypt(TripleDESKey, false);
                }
                catch (Exception ex)
                {
                    throw;
                }
                //finally
                //{
                //    ReceiverRSA.Clear();
                //    SenderRSA.Clear();
                //    //LogError("Error Encrypting Symmetric Key: " + ex.Message);
                //    //return;
                //}

                string base64sign   = Convert.ToBase64String(signed);
                string base64cipher = Convert.ToBase64String(cipher);


                _payload   = webcode(base64enc);
                _signature = webcode(base64sign);

                //byte[] EncBinarySig = Convert.FromBase64String(webDecode(_signature));

                _cipher = webcode(base64cipher);



                ReceiverRSA.Clear();
                SenderRSA.Clear();
            }
            catch (Exception ex)
            {
                //Trace.WriteLine(ex.Message);
                throw;
                //throw new Exception("Error while Building the SSO Package: \n" + ex.Message);
            }
        }
Пример #8
0
 public STRandom( )
 {
     mMD5 = MD5CryptoServiceProvider.Create( );
 }
Пример #9
0
        /// <summary>ハッシュ(キー無し)サービスプロバイダの生成</summary>
        /// <param name="eha">ハッシュ(キー無し)サービスプロバイダの列挙型</param>
        /// <returns>ハッシュ(キー無し)サービスプロバイダ</returns>
        /// <remarks>
        /// EnumHashAlgorithmから、HashAlgorithmを生成するために追加。
        /// HashAlgorithm.Create(HashNameConst.SHA256) は .NET Core 2 で動作せず。
        /// - KeyedHashAlgorithm.Create("HMACSHA1") throw PNSE (on .NET Core 2
        ///   https://github.com/dotnet/standard/issues/530#issuecomment-375043416
        /// </remarks>
        public static HashAlgorithm CreateHashAlgorithmSP(EnumHashAlgorithm eha)
        {
            // ハッシュ(キー無し)サービスプロバイダ
            HashAlgorithm ha = null;

            if (eha == EnumHashAlgorithm.Default)
            {
                // 既定の暗号化サービスプロバイダ
                ha = HashAlgorithmCmnFunc.GetHashAlgorithmFromNameString(); // devps(1703)
            }

            #region MD5
            else if (eha == EnumHashAlgorithm.MD5_CSP)
            {
                // MD5CryptoServiceProviderサービスプロバイダ
                ha = MD5CryptoServiceProvider.Create(); // devps(1703)
            }
#if NETSTD
#else
            else if (eha == EnumHashAlgorithm.MD5_CNG)
            {
                // MD5Cngサービスプロバイダ
                ha = MD5Cng.Create(); // devps(1703)
            }
#endif
            #endregion

            #region RIPEMD160
            else if (eha == EnumHashAlgorithm.RIPEMD160_M)
            {
#if NETSTD
                ha = null; // BouncyCastleを使用する。
#else
                // RIPEMD160Managedサービスプロバイダ
                ha = RIPEMD160Managed.Create(); // devps(1703)
#endif
            }
            #endregion

            #region SHA1
            else if (eha == EnumHashAlgorithm.SHA1_CSP)
            {
                // SHA1CryptoServiceProviderサービスプロバイダ
                ha = SHA1CryptoServiceProvider.Create(); // devps(1703)
            }
#if NETSTD
#else
            else if (eha == EnumHashAlgorithm.SHA1_CNG)
            {
                // SHA1Cngサービスプロバイダ
                ha = SHA1Cng.Create(); // devps(1703)
            }
#endif
            else if (eha == EnumHashAlgorithm.SHA1_M)
            {
                // SHA1Managedサービスプロバイダ
                ha = SHA1Managed.Create(); // devps(1703)
            }
            #endregion

            #region SHA256
            else if (eha == EnumHashAlgorithm.SHA256_CSP)
            {
                // SHA256CryptoServiceProviderサービスプロバイダ
                ha = SHA256CryptoServiceProvider.Create(); // devps(1703)
            }
#if NETSTD
#else
            else if (eha == EnumHashAlgorithm.SHA256_CNG)
            {
                // SHA256Cngサービスプロバイダ
                ha = SHA256Cng.Create(); // devps(1703)
            }
#endif
            else if (eha == EnumHashAlgorithm.SHA256_M)
            {
                // SHA256Managedサービスプロバイダ
                ha = SHA256Managed.Create(); // devps(1703)
            }
            #endregion

            #region SHA384
            else if (eha == EnumHashAlgorithm.SHA384_CSP)
            {
                // SHA384CryptoServiceProviderサービスプロバイダ
                ha = SHA384CryptoServiceProvider.Create(); // devps(1703)
            }
#if NETSTD
#else
            else if (eha == EnumHashAlgorithm.SHA384_CNG)
            {
                // SHA384Cngサービスプロバイダ
                ha = SHA384Cng.Create(); // devps(1703)
            }
#endif
            else if (eha == EnumHashAlgorithm.SHA384_M)
            {
                // SHA384Managedサービスプロバイダ
                ha = SHA384Managed.Create(); // devps(1703)
            }
            #endregion

            #region SHA512
            else if (eha == EnumHashAlgorithm.SHA512_CSP)
            {
                // SHA512CryptoServiceProviderサービスプロバイダ
                ha = SHA512CryptoServiceProvider.Create(); // devps(1703)
            }
#if NETSTD
#else
            else if (eha == EnumHashAlgorithm.SHA512_CNG)
            {
                // SHA512Cngサービスプロバイダ
                ha = SHA512Cng.Create(); // devps(1703)
            }
#endif
            else if (eha == EnumHashAlgorithm.SHA512_M)
            {
                // SHA512Managedサービスプロバイダ
                ha = SHA512Managed.Create(); // devps(1703)
            }
            #endregion

            else
            {
                // 既定の暗号化サービスプロバイダ
                ha = HashAlgorithmCmnFunc.GetHashAlgorithmFromNameString(); // devps(1703)
            }

            return(ha);
        }
Пример #10
0
 /// <summary>
 /// MD5s the specified org.
 /// </summary>
 /// <param name="org">The org.</param>
 /// <returns></returns>
 public static string Md5(string org)
 {
     byte[] bytes = MD5CryptoServiceProvider.Create().ComputeHash(Encoding.Unicode.GetBytes(org));
     return(Convert.ToBase64String(bytes));
 }
Пример #11
0
        private bool TryReconnInternal()
        {
            _BaseStream.Close();
            NetworkStream badStream = _BaseStream;

            _ReconnLock.ReleaseReaderLock();
            _ReconnLock.AcquireWriterLock(-1);

            try {
                if (badStream != _BaseStream)
                {
                    return(true);
                }

                byte[] request  = new byte[24 + 16];
                byte[] response = new byte[16];
                using (MemoryStream ms = new MemoryStream(request)) {
                    using (BinaryWriter bw = new BinaryWriter(ms)) {
                        bw.Write(_ID);
                        bw.Write(_WriteCount);
                        bw.Write(_ReadCount);
                        bw.Write(_Key);
                    }
                }

                MD5    md5  = MD5CryptoServiceProvider.Create();
                byte[] hash = md5.ComputeHash(request, 0, 32);
                Buffer.BlockCopy(hash, 0, request, 24, hash.Length);

                for (int i = 0; !_Closed; i++)
                {
                    if (i > 0)
                    {
                        Thread.Sleep(3000);
                    }

                    try {
                        TcpClient     client = new TcpClient(_Host, _Port);
                        NetworkStream stream = client.GetStream();
                        stream.Write(request, 0, request.Length);

                        for (int n = response.Length; n > 0;)
                        {
                            n -= stream.Read(response, response.Length - n, n);
                        }

                        ulong writeCount = 0;
                        ulong readCount  = 0;
                        using (MemoryStream ms = new MemoryStream(response)) {
                            using (BinaryReader br = new BinaryReader(ms)) {
                                writeCount = br.ReadUInt64();
                                readCount  = br.ReadUInt64();
                            }
                        }

                        if (DoReconn(stream, writeCount, readCount))
                        {
                            return(true);
                        }
                    } catch {
                        continue;
                    }
                }
            } finally {
                _ReconnLock.ReleaseWriterLock();
                _ReconnLock.AcquireReaderLock(-1);
            }
            return(false);
        }
Пример #12
0
 private string CreateMD5(string tomd5)
 {
     byte[] asciiBytes  = ASCIIEncoding.ASCII.GetBytes(tomd5);
     byte[] hashedBytes = MD5CryptoServiceProvider.Create().ComputeHash(asciiBytes);
     return(BitConverter.ToString(hashedBytes).Replace("-", "").ToLower());
 }
Пример #13
0
        /// <summary>
        /// Computes the Hash code of a string.
        /// </summary>
        /// <param name="input">The string.</param>
        /// <returns>The Hash code.</returns>
        public static byte[] ComputeBytes(string input)
        {
            MD5 md5 = MD5CryptoServiceProvider.Create();

            return(md5.ComputeHash(Encoding.ASCII.GetBytes(input)));
        }
Пример #14
0
        private void handshake()
        {
            byte[] preRequest = new byte[1];
            byte[] request    = new byte[24];
            byte[] response   = request;

            preRequest[0] = TypeNewconn;

            ulong privateKey;
            ulong publicKey;
            DH64  dh64 = new DH64();

            dh64.KeyPair(out privateKey, out publicKey);

            using (MemoryStream ms = new MemoryStream(request, 0, 8)) {
                using (BinaryWriter w = new BinaryWriter(ms)) {
                    w.Write(publicKey);
                }
            }

            TcpClient client = new TcpClient(_Host.AddressFamily);
            var       ar     = client.BeginConnect(_Host, _Port, null, null);

            ar.AsyncWaitHandle.WaitOne(new TimeSpan(0, 0, 0, 0, ConnectTimeout));
            if (!ar.IsCompleted)
            {
                throw new TimeoutException();
            }
            client.EndConnect(ar);

            setBaseStream(client.GetStream());
            _BaseStream.Write(preRequest, 0, preRequest.Length);
            _BaseStream.Write(request, 0, 8);

            for (int n = 24; n > 0;)
            {
                int x = _BaseStream.Read(response, 24 - n, n);
                if (x == 0)
                {
                    throw new EndOfStreamException();
                }
                n -= x;
            }

            ulong challengeCode = 0;

            using (MemoryStream ms = new MemoryStream(response, 0, 24))
            {
                using (BinaryReader r = new BinaryReader(ms))
                {
                    ulong serverPublicKey = r.ReadUInt64();
                    ulong secret          = dh64.Secret(privateKey, serverPublicKey);

                    using (MemoryStream ms2 = new MemoryStream(_Key))
                    {
                        using (BinaryWriter w = new BinaryWriter(ms2))
                        {
                            w.Write(secret);
                        }
                    }

                    _ReadCipher  = new RC4Cipher(_Key);
                    _WriteCipher = new RC4Cipher(_Key);
                    _ReadCipher.XORKeyStream(response, 8, response, 8, 8);

                    _ID = r.ReadUInt64();

                    using (MemoryStream ms2 = new MemoryStream(request, 0, 16))
                    {
                        using (BinaryWriter w = new BinaryWriter(ms2))
                        {
                            w.Write(response, 16, 8);
                            w.Write(_Key);
                            MD5    md5  = MD5CryptoServiceProvider.Create();
                            byte[] hash = md5.ComputeHash(request, 0, 16);
                            Buffer.BlockCopy(hash, 0, request, 0, hash.Length);
                            _BaseStream.Write(request, 0, 16);
                        }
                    }
                }
            }
        }
Пример #15
0
        public void DisAssemble()
        {
            try
            {
                xmlPublicKey  = GetPublicKey();
                xmlPrivateKey = GetPrivateKey();

                if (xmlPublicKey == null)
                {
                    LogError("Unable to retrieve Public Key");
                    return;
                }

                if (xmlPrivateKey == null)
                {
                    LogError("Unable to retrieve Private Key");
                    return;
                }


                CspParameters            Sendercp  = new CspParameters();
                RSACryptoServiceProvider SenderRSA = null;

                try
                {
                    Sendercp.Flags = CspProviderFlags.UseMachineKeyStore;
                    SenderRSA      = new RSACryptoServiceProvider(Sendercp);
                    SenderRSA.FromXmlString(xmlPublicKey.OuterXml);
                }
                catch (Exception ex)
                {
                    throw;
                }
                //finally
                //{
                //    SenderRSA.Clear();
                //    //LogError("Error while constructing the PublicKey: " + ex.Message);
                //    //return;
                //}

                CspParameters            Receivercp  = new CspParameters();
                RSACryptoServiceProvider ReceiverRSA = null;

                try
                {
                    Receivercp.Flags = CspProviderFlags.UseMachineKeyStore;
                    ReceiverRSA      = new RSACryptoServiceProvider(Receivercp);
                    ReceiverRSA.FromXmlString(xmlPrivateKey.OuterXml);
                }
                catch (Exception ex)
                {
                    throw;
                }
                //finally
                //{
                //    ReceiverRSA.Clear();
                //    //LogError("Error while constructing the PrivateKey: " + ex.Message);
                //    //return;
                //}

                byte[] EncBinarySig = Convert.FromBase64String(webDecode(_signature));
                //byte[] transmittedHash = SenderRSA.Decrypt(EncBinarySig,false);

                string nameValuePairText = webDecode(_payload);
                string transmittedMsg    = nameValuePairText + _clientID + _serverID;
                string calculatedHash    = nameValuePairText + ClientID + ServerID;
                byte[] hash;
                byte[] signed = null;

                signed = Convert.FromBase64String(webDecode(_signature));

                MD5 md2 = null;

                try
                {
                    md2 = MD5CryptoServiceProvider.Create();

                    //Convert the string into an array of bytes.
                    byte[] buffer = Encoding.ASCII.GetBytes(calculatedHash);

                    //Create the hash value from the array of bytes.
                    hash = md2.ComputeHash(buffer);
                }
                catch (Exception ex)
                {
                    throw;
                }
                //finally
                //{
                //    ReceiverRSA.Clear();
                //    SenderRSA.Clear();
                //    //LogError("Error Computing Hash: " + ex.Message);
                //    //return;
                //}

                if (SenderRSA.VerifyHash(hash, CryptoConfig.MapNameToOID("MD5"), signed))
                {
                    byte[] TripleDESKey = null;

                    string encryptedKeyText   = webDecode(_cipher);
                    byte[] encryptedKeyBinary = Convert.FromBase64String(encryptedKeyText);
                    TripleDESKey = ReceiverRSA.Decrypt(encryptedKeyBinary, false);

                    byte[] nameValuePairBinary = Convert.FromBase64String(nameValuePairText);
                    byte[] nameValuePair       = SSOEncryption.TripleDESDecrypt(nameValuePairBinary, TripleDESKey, null);
                    string ClearTextPayload    = Encoding.ASCII.GetString(nameValuePair);

                    //LogError("Error matching Computed and Transmitted Hash");
                    //return;
                }



                ReceiverRSA.Clear();
                SenderRSA.Clear();
            }
            catch (Exception ex)
            {
                throw;
                //Trace.WriteLine(ex.Message);
                //throw new Exception("Error while Building the SSO Package: \n" + ex.Message);
            }
        }
Пример #16
0
        private bool tryReconn()
        {
            _BaseStream.Close();
            NetworkStream badStream = _BaseStream;

            _ReconnLock.ReleaseReaderLock();
            _ReconnLock.AcquireWriterLock(-1);

            try {
                if (badStream != _BaseStream)
                {
                    return(true);
                }
                byte[] preRequest = new byte[1];
                byte[] request    = new byte[24 + 16];
                byte[] response   = new byte[24];
                preRequest[0] = TypeReconn;
                using (MemoryStream ms = new MemoryStream(request)) {
                    using (BinaryWriter w = new BinaryWriter(ms)) {
                        w.Write(_ID);
                        w.Write(_WriterCount);
                        w.Write(_ReadCount + _Rereader.Count);
                        w.Write(_Key);
                    }
                }

                MD5    md5  = MD5CryptoServiceProvider.Create();
                byte[] hash = md5.ComputeHash(request, 0, 32);
                Buffer.BlockCopy(hash, 0, request, 24, hash.Length);

                for (int i = 0; !_Closed; i++)
                {
                    if (i > 0)
                    {
                        Thread.Sleep(3000);
                    }

                    try {
                        TcpClient client = new TcpClient(_Host.AddressFamily);

                        var ar = client.BeginConnect(_Host, _Port, null, null);
                        ar.AsyncWaitHandle.WaitOne(new TimeSpan(0, 0, 0, 0, ConnectTimeout));
                        if (!ar.IsCompleted)
                        {
                            throw new TimeoutException();
                        }
                        client.EndConnect(ar);

                        NetworkStream stream = client.GetStream();
                        stream.Write(preRequest, 0, preRequest.Length);
                        stream.Write(request, 0, request.Length);

                        for (int n = response.Length; n > 0;)
                        {
                            int x = stream.Read(response, response.Length - n, n);
                            if (x == 0)
                            {
                                throw new EndOfStreamException();
                            }
                            n -= x;
                        }

                        ulong writeCount    = 0;
                        ulong readCount     = 0;
                        ulong challengeCode = 0;
                        using (MemoryStream ms = new MemoryStream(response)) {
                            using (BinaryReader r = new BinaryReader(ms)) {
                                writeCount    = r.ReadUInt64();
                                readCount     = r.ReadUInt64();
                                challengeCode = r.ReadUInt64();
                                if (writeCount == 0 && readCount == 0 && challengeCode == 0)
                                {
                                    stream.Close();
                                    return(false);
                                }
                            }
                        }

                        // reconn check
                        using (MemoryStream ms = new MemoryStream(request, 0, 16)) {
                            using (BinaryWriter w = new BinaryWriter(ms)) {
                                w.Write(response, 16, 8);
                                w.Write(_Key);
                            }
                        }
                        hash = md5.ComputeHash(request, 0, 16);
                        Buffer.BlockCopy(hash, 0, request, 0, hash.Length);
                        stream.Write(request, 0, 16);

                        if (writeCount < _ReadCount)
                        {
                            return(false);
                        }

                        if (_WriterCount < readCount)
                        {
                            return(false);
                        }

                        if (doReconn(stream, writeCount, readCount))
                        {
                            return(true);
                        }
                    } catch {
                        continue;
                    }
                }
            } finally {
                _ReconnLock.ReleaseWriterLock();
                _ReconnLock.AcquireReaderLock(-1);
            }
            return(false);
        }
Пример #17
0
 public static string GetJsonPath(string url)
 {
     return(Path.Combine(Directory.GetCurrentDirectory(), "History", "Youtube-DL", BitConverter.ToString(MD5CryptoServiceProvider.Create().ComputeHash(Encoding.UTF8.GetBytes(url))).Replace("-", "").ToLower()));
 }