| // Copyright 2016 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 aes | 
 |  | 
 | import ( | 
 | 	"crypto/cipher" | 
 | ) | 
 |  | 
 | // gcmAble is implemented by cipher.Blocks that can provide an optimized | 
 | // implementation of GCM through the AEAD interface. | 
 | // See crypto/cipher/gcm.go. | 
 | type gcmAble interface { | 
 | 	NewGCM(nonceSize, tagSize int) (cipher.AEAD, error) | 
 | } | 
 |  | 
 | // cbcEncAble is implemented by cipher.Blocks that can provide an optimized | 
 | // implementation of CBC encryption through the cipher.BlockMode interface. | 
 | // See crypto/cipher/cbc.go. | 
 | type cbcEncAble interface { | 
 | 	NewCBCEncrypter(iv []byte) cipher.BlockMode | 
 | } | 
 |  | 
 | // cbcDecAble is implemented by cipher.Blocks that can provide an optimized | 
 | // implementation of CBC decryption through the cipher.BlockMode interface. | 
 | // See crypto/cipher/cbc.go. | 
 | type cbcDecAble interface { | 
 | 	NewCBCDecrypter(iv []byte) cipher.BlockMode | 
 | } | 
 |  | 
 | // ctrAble is implemented by cipher.Blocks that can provide an optimized | 
 | // implementation of CTR through the cipher.Stream interface. | 
 | // See crypto/cipher/ctr.go. | 
 | type ctrAble interface { | 
 | 	NewCTR(iv []byte) cipher.Stream | 
 | } |