/// <summary>
        /// Decrypts a stream with the given configuration.
        /// Not for networking.
        /// </summary>
        /// <param name="input"></param>
        /// <param name="output"></param>
        /// <param name="pass"></param>
        /// <param name="initial"></param>
        /// <param name="rounds"></param>
        /// <param name="leftoff"></param>
        /// <param name="expansion"></param>
        /// <param name="additionalKey"></param>
        /// <param name="callback"></param>
        /// <param name="adaptor">Adaptor for PRNG</param>
        public static void Decrypt(Stream input, Stream output, string pass, int initial, int rounds, int leftoff, int expansion, string additionalKey, Callback callback, BasylPseudoAdaptor adaptor)
        {
            BinaryWriter writer = new BinaryWriter(output);

            byte[] hash = new byte[32];
            byte[] o    = new byte[4];
            byte[] d    = new byte[4];
            input.Read(hash, 0, 32);
            input.Read(o, 0, 4);
            input.Read(d, 0, 4);
            BasylReader reader = new BasylReader(input, new BasylKeyGenerator(pass, initial, rounds, leftoff, expansion, additionalKey, hash, d, o, true, adaptor));

            //Speeds up decryption by doing the decryption in chunks.
            int speed = MAX_SPEED;

            while (speed > MIN_SPEED)
            {
                //Decrypt Entire File in Chunks
                while (reader.GetStream().Position + speed < reader.GetStream().Length)
                {
                    writer.Write(reader.ReadBytes(speed));
                    if (callback != null)
                    {
                        callback((double)reader.GetStream().Position / reader.GetStream().Length);
                    }
                }
                speed >>= 1;
            }


            //Decrypt Entire File
            while (reader.GetStream().Position < reader.GetStream().Length)
            {
                writer.Write(reader.ReadByte());
                if (callback != null)
                {
                    callback((double)reader.GetStream().Position / reader.GetStream().Length);
                }
            }


            writer.Close();
            reader.Close();
            reader.Dispose();
            writer.Dispose();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Creates a BasylReader from a Writer.
        /// Completely Synchronized and Attached.
        /// </summary>
        /// <param name="stream"></param>
        /// <param name="pass"></param>
        /// <param name="writer"></param>
        /// <returns></returns>
        public static BasylReader CreateFrom(Stream stream, BasylWriter writer)
        {
            BasylReader result = new BasylReader(stream, writer.GetKeyGenerator());

            return(result);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Creates a BasylReader from a Writer. 
 /// Completely Synchronized and Attached.
 /// </summary>
 /// <param name="stream"></param>
 /// <param name="pass"></param>
 /// <param name="writer"></param>
 /// <returns></returns>
 public static BasylReader CreateFrom(Stream stream, BasylWriter writer)
 {
     BasylReader result = new BasylReader(stream, writer.GetKeyGenerator());
     return result;
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Creates a Writer from the Reader and shares its key.
        /// </summary>
        /// <param name="s"></param>
        /// <param name="reader"></param>
        /// <returns></returns>
        public static BasylWriter CreateFrom(Stream s, BasylReader reader)
        {
            BasylWriter writer = new BasylWriter(s, reader.GetKeyGenerator());

            return(writer);
        }