diff options
Diffstat (limited to 'src/pkg/crypto/cipher/ctr.go')
-rw-r--r-- | src/pkg/crypto/cipher/ctr.go | 55 |
1 files changed, 0 insertions, 55 deletions
diff --git a/src/pkg/crypto/cipher/ctr.go b/src/pkg/crypto/cipher/ctr.go deleted file mode 100644 index 147b74fc2..000000000 --- a/src/pkg/crypto/cipher/ctr.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2009 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. - -// Counter (CTR) mode. - -// CTR converts a block cipher into a stream cipher by -// repeatedly encrypting an incrementing counter and -// xoring the resulting stream of data with the input. - -// See NIST SP 800-38A, pp 13-15 - -package cipher - -type ctr struct { - b Block - ctr []byte - out []byte - outUsed int -} - -// NewCTR returns a Stream which encrypts/decrypts using the given Block in -// counter mode. The length of iv must be the same as the Block's block size. -func NewCTR(block Block, iv []byte) Stream { - if len(iv) != block.BlockSize() { - panic("cipher.NewCTR: iv length must equal block size") - } - - return &ctr{ - b: block, - ctr: dup(iv), - out: make([]byte, len(iv)), - outUsed: len(iv), - } -} - -func (x *ctr) XORKeyStream(dst, src []byte) { - for i := 0; i < len(src); i++ { - if x.outUsed == len(x.ctr) { - x.b.Encrypt(x.out, x.ctr) - x.outUsed = 0 - - // Increment counter - for i := len(x.ctr) - 1; i >= 0; i-- { - x.ctr[i]++ - if x.ctr[i] != 0 { - break - } - } - } - - dst[i] = src[i] ^ x.out[x.outUsed] - x.outUsed++ - } -} |