Commit fcd5fd2a authored by Shane Hansen's avatar Shane Hansen Committed by Adam Langley

crypto/cipher: panic on invalid IV length

Give better user feedback when invalid IV is used
to construct a cipher.

Fixes #3411

R=golang-dev, agl
CC=golang-dev
https://golang.org/cl/6652053
parent 561561fc
...@@ -33,6 +33,9 @@ type cbcEncrypter cbc ...@@ -33,6 +33,9 @@ type cbcEncrypter cbc
// mode, using the given Block. The length of iv must be the same as the // mode, using the given Block. The length of iv must be the same as the
// Block's block size. // Block's block size.
func NewCBCEncrypter(b Block, iv []byte) BlockMode { func NewCBCEncrypter(b Block, iv []byte) BlockMode {
if len(iv) != b.BlockSize() {
panic("cipher.NewCBCEncrypter: IV length must equal block size")
}
return (*cbcEncrypter)(newCBC(b, iv)) return (*cbcEncrypter)(newCBC(b, iv))
} }
...@@ -58,6 +61,9 @@ type cbcDecrypter cbc ...@@ -58,6 +61,9 @@ type cbcDecrypter cbc
// mode, using the given Block. The length of iv must be the same as the // mode, using the given Block. The length of iv must be the same as the
// Block's block size and must match the iv used to encrypt the data. // Block's block size and must match the iv used to encrypt the data.
func NewCBCDecrypter(b Block, iv []byte) BlockMode { func NewCBCDecrypter(b Block, iv []byte) BlockMode {
if len(iv) != b.BlockSize() {
panic("cipher.NewCBCDecrypter: IV length must equal block size")
}
return (*cbcDecrypter)(newCBC(b, iv)) return (*cbcDecrypter)(newCBC(b, iv))
} }
......
...@@ -17,6 +17,9 @@ type cfb struct { ...@@ -17,6 +17,9 @@ type cfb struct {
// using the given Block. The iv must be the same length as the Block's block // using the given Block. The iv must be the same length as the Block's block
// size. // size.
func NewCFBEncrypter(block Block, iv []byte) Stream { func NewCFBEncrypter(block Block, iv []byte) Stream {
if len(iv) != block.BlockSize() {
panic("cipher.NewCBFEncrypter: IV length must equal block size")
}
return newCFB(block, iv, false) return newCFB(block, iv, false)
} }
...@@ -24,6 +27,9 @@ func NewCFBEncrypter(block Block, iv []byte) Stream { ...@@ -24,6 +27,9 @@ func NewCFBEncrypter(block Block, iv []byte) Stream {
// using the given Block. The iv must be the same length as the Block's block // using the given Block. The iv must be the same length as the Block's block
// size. // size.
func NewCFBDecrypter(block Block, iv []byte) Stream { func NewCFBDecrypter(block Block, iv []byte) Stream {
if len(iv) != block.BlockSize() {
panic("cipher.NewCBFEncrypter: IV length must equal block size")
}
return newCFB(block, iv, true) return newCFB(block, iv, true)
} }
......
...@@ -23,7 +23,7 @@ type ctr struct { ...@@ -23,7 +23,7 @@ type ctr struct {
// counter mode. The length of iv must be the same as the Block's block size. // counter mode. The length of iv must be the same as the Block's block size.
func NewCTR(block Block, iv []byte) Stream { func NewCTR(block Block, iv []byte) Stream {
if len(iv) != block.BlockSize() { if len(iv) != block.BlockSize() {
panic("cipher.NewCTR: iv length must equal block size") panic("cipher.NewCTR: IV length must equal block size")
} }
return &ctr{ return &ctr{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment