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  }