// 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 cipherimport ()typecfbstruct {bBlocknext []byteout []byteoutUsedintdecryptbool}func ( *cfb) (, []byte) {iflen() < len() {panic("crypto/cipher: output smaller than input") }ifalias.InexactOverlap([:len()], ) {panic("crypto/cipher: invalid buffer overlap") }forlen() > 0 {if .outUsed == len(.out) { .b.Encrypt(.out, .next) .outUsed = 0 }if .decrypt {// We can precompute a larger segment of the // keystream on decryption. This will allow // larger batches for xor, and we should be // able to match CTR/OFB performance.copy(.next[.outUsed:], ) } := subtle.XORBytes(, , .out[.outUsed:])if !.decrypt {copy(.next[.outUsed:], ) } = [:] = [:] .outUsed += }}// 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 ( Block, []byte) Stream {returnnewCFB(, , 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 ( Block, []byte) Stream {returnnewCFB(, , true)}func ( Block, []byte, bool) Stream { := .BlockSize()iflen() != {// stack trace will indicate whether it was de or encryptionpanic("cipher.newCFB: IV length must equal block size") } := &cfb{b: ,out: make([]byte, ),next: make([]byte, ),outUsed: ,decrypt: , }copy(.next, )return}
The pages are generated with Goldsv0.6.7. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds.