github.com/mad-day/Yawning-crypto@v0.0.0-20190711051033-5a5f8cca32ec/bsaes/internal/modes/modes.go (about) 1 // Copyright (c) 2017 Yawning Angel <yawning at schwanenlied dot me> 2 // 3 // Permission is hereby granted, free of charge, to any person obtaining 4 // a copy of this software and associated documentation files (the 5 // "Software"), to deal in the Software without restriction, including 6 // without limitation the rights to use, copy, modify, merge, publish, 7 // distribute, sublicense, and/or sell copies of the Software, and to 8 // permit persons to whom the Software is furnished to do so, subject to 9 // the following conditions: 10 // 11 // The above copyright notice and this permission notice shall be 12 // included in all copies or substantial portions of the Software. 13 // 14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 18 // BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 19 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 // SOFTWARE. 22 23 package modes 24 25 import "crypto/cipher" 26 27 const blockSize = 16 // Always AES. 28 29 type bulkECBAble interface { 30 cipher.Block 31 32 // Stride returns the number of BlockSize-ed blocks that should be passed 33 // to BulkEncrypt. 34 Stride() int 35 36 // Reset clears the block cipher state such that key material no longer 37 // appears in process memory. 38 Reset() 39 40 // Encrypt encrypts the Stride blocks of plaintext src, and places the 41 // resulting output in the ciphertext dst. 42 BulkEncrypt(dst, src []byte) 43 44 // BulkECBDecrypt decrypts the Stride blocks of plaintext src, 45 // and places the resulting output in the ciphertext dst. 46 BulkDecrypt(dst, src []byte) 47 } 48 49 // BlockModesImpl is a collection of unexported `crypto/cipher` block cipher 50 // mode special case implementations. 51 type BlockModesImpl struct { 52 b cipher.Block 53 } 54 55 func (m *BlockModesImpl) Init(b cipher.Block) { 56 m.b = b 57 }