URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [crypto/] [cipher/] [cfb.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.// CFB (Cipher Feedback) Mode.package ciphertype cfb struct {b Blockout []byteoutUsed intdecrypt bool}// NewCFBEncrypter returns a Stream which encrypts with cipher feedback mode,// using the given Block. The iv must be the same length as the Block's block// size.func NewCFBEncrypter(block Block, iv []byte) Stream {return newCFB(block, iv, false)}// NewCFBDecrypter returns a Stream which decrypts with cipher feedback mode,// using the given Block. The iv must be the same length as the Block's block// size.func NewCFBDecrypter(block Block, iv []byte) Stream {return newCFB(block, iv, true)}func newCFB(block Block, iv []byte, decrypt bool) Stream {blockSize := block.BlockSize()if len(iv) != blockSize {return nil}x := &cfb{b: block,out: make([]byte, blockSize),outUsed: 0,decrypt: decrypt,}block.Encrypt(x.out, iv)return x}func (x *cfb) XORKeyStream(dst, src []byte) {for i := 0; i < len(src); i++ {if x.outUsed == len(x.out) {x.b.Encrypt(x.out, x.out)x.outUsed = 0}if x.decrypt {t := src[i]dst[i] = src[i] ^ x.out[x.outUsed]x.out[x.outUsed] = t} else {x.out[x.outUsed] ^= src[i]dst[i] = x.out[x.outUsed]}x.outUsed++}}
