/// <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(); }
/// <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); }
/// <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; }
/// <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); }