/// <summary>
        /// Encrypts a string of text into a Base64 string using the <see cref="RijndaelManaged" /> algorithm.
        /// </summary>
        /// <param name="input">The string to encrypt.</param>
        public string EncryptString(string input)
        {
            if (string.IsNullOrEmpty(input))
            {
                return(input);
            }

            var data      = Encoding.UTF8.GetBytes(input);
            var key       = EncryptionUtils.GenerateKey(Password, Salt.ToByteArray(), KeyIterations);
            var seedBytes = Seed.ToByteArray();
            var result    = EncryptionUtils.Encrypt(data, key, seedBytes).EncryptedData;

            return(Convert.ToBase64String(result));
        }
Esempio n. 2
0
        // Client Constructor, username not needed, salt not generated by client
        public SRP6(byte[] identityHash, String modulus_N, int generator_g,
                    String salt, string initialVector = "OFRna73m*aze01xY")
        {
            InitialVector = initialVector;

            Modulus    = BigIntegerExtension.Create(modulus_N, 16);
            Generator  = BigIntegerExtension.Create("" + generator_g, 10);
            Multiplier = BigIntegerExtension.Create("3", 10);
            Salt       = BigIntegerExtension.Create(salt, 16);

            // Client-side variables
            PrivateKey = BigIntegerExtension.GeneratePseudoPrime(128, 100, new Random());

            // g^a   (mod N)
            PublicKey = this.generator_g.modPow(privateKey, this.modulus_N);

            // Server-side variables
            SaltedIdentityHash = bytesToBig(Sha1Hash(Salt.ToByteArray(), identityHash));
        }
        /// <summary>
        /// Decrypts the binary data of a Base64 string back into the original text using the <see
        /// cref="RijndaelManaged" /> algorithm.
        /// </summary>
        /// <param name="input">The string to decrypt.</param>
        public string DecryptString(string input)
        {
            if (string.IsNullOrEmpty(input))
            {
                return(input);
            }

            var encryptedData = Convert.FromBase64String(input);
            var key           = EncryptionUtils.GenerateKey(Password, Salt.ToByteArray(), KeyIterations);
            var seedBytes     = Seed.ToByteArray();

            var decryptedData = EncryptionUtils.Decrypt(encryptedData, key, seedBytes);

            using (var ms = new MemoryStream(decryptedData))
                using (var sr = new StreamReader(ms))
                {
                    return(sr.ReadToEnd());
                }
        }
Esempio n. 4
0
        public void Write(Stream stream)
        {
            using (var writer = new BinaryWriter(stream, Encoding.UTF8, true))
            {
                writer.Write((byte)AuthRequestOpcode.LogonChallenge);
                writer.Write((byte)0);
                writer.Write((byte)Result);

                if (Result == AuthResponse.Success)
                {
                    writer.Write(B.ToByteArray(32));
                    writer.Write(GLength);
                    writer.Write(G);
                    writer.Write(NLength);
                    writer.Write(N.ToByteArray(NLength));
                    writer.Write(Salt.ToByteArray(32));
                    writer.Write(RandomNumber.ToByteArray(16));
                    writer.Write(SecurityFlags);
                }
            }
        }