Source File
io.go
Belonging Package
crypto/cipher
// Copyright 2010 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package cipherimport// The Stream* objects are so simple that all their members are public. Users// can create them themselves.// StreamReader wraps a Stream into an io.Reader. It calls XORKeyStream// to process each slice of data which passes through.type StreamReader struct {S StreamR io.Reader}func ( StreamReader) ( []byte) ( int, error) {, = .R.Read().S.XORKeyStream([:], [:])return}// StreamWriter wraps a Stream into an io.Writer. It calls XORKeyStream// to process each slice of data which passes through. If any Write call// returns short then the StreamWriter is out of sync and must be discarded.// A StreamWriter has no internal buffering; Close does not need// to be called to flush write data.type StreamWriter struct {S StreamW io.WriterErr error // unused}func ( StreamWriter) ( []byte) ( int, error) {:= make([]byte, len()).S.XORKeyStream(, ), = .W.Write()if != len() && == nil { // should never happen= io.ErrShortWrite}return}// Close closes the underlying Writer and returns its Close return value, if the Writer// is also an io.Closer. Otherwise it returns nil.func ( StreamWriter) () error {if , := .W.(io.Closer); {return .Close()}return nil}