URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [crypto/] [cipher/] [io.go] - Rev 747
Compare with Previous | Blame | View Log
// 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 "io"// 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 (r StreamReader) Read(dst []byte) (n int, err error) {n, err = r.R.Read(dst)r.S.XORKeyStream(dst[:n], dst[:n])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.type StreamWriter struct {S StreamW io.WriterErr error}func (w StreamWriter) Write(src []byte) (n int, err error) {if w.Err != nil {return 0, w.Err}c := make([]byte, len(src))w.S.XORKeyStream(c, src)n, err = w.W.Write(c)if n != len(src) {if err == nil { // should never happenerr = io.ErrShortWrite}w.Err = err}return}func (w StreamWriter) Close() error {// This saves us from either requiring a WriteCloser or having a// StreamWriterCloser.return w.W.(io.Closer).Close()}
