Source File
cipher.go
Belonging Package
crypto/cipher
// Copyright 2010 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 cipher implements standard block cipher modes that can be wrapped// around low-level block cipher implementations.// See https://csrc.nist.gov/groups/ST/toolkit/BCM/current_modes.html// and NIST Special Publication 800-38A.package cipher// A Block represents an implementation of block cipher// using a given key. It provides the capability to encrypt// or decrypt individual blocks. The mode implementations// extend that capability to streams of blocks.type Block interface {// BlockSize returns the cipher's block size.BlockSize() int// Encrypt encrypts the first block in src into dst.// Dst and src must overlap entirely or not at all.Encrypt(dst, src []byte)// Decrypt decrypts the first block in src into dst.// Dst and src must overlap entirely or not at all.Decrypt(dst, src []byte)}// A Stream represents a stream cipher.type Stream interface {// XORKeyStream XORs each byte in the given slice with a byte from the// cipher's key stream. Dst and src must overlap entirely or not at all.//// If len(dst) < len(src), XORKeyStream should panic. It is acceptable// to pass a dst bigger than src, and in that case, XORKeyStream will// only update dst[:len(src)] and will not touch the rest of dst.//// Multiple calls to XORKeyStream behave as if the concatenation of// the src buffers was passed in a single run. That is, Stream// maintains state and does not reset at each XORKeyStream call.XORKeyStream(dst, src []byte)}// A BlockMode represents a block cipher running in a block-based mode (CBC,// ECB etc).type BlockMode interface {// BlockSize returns the mode's block size.BlockSize() int// CryptBlocks encrypts or decrypts a number of blocks. The length of// src must be a multiple of the block size. Dst and src must overlap// entirely or not at all.//// If len(dst) < len(src), CryptBlocks should panic. It is acceptable// to pass a dst bigger than src, and in that case, CryptBlocks will// only update dst[:len(src)] and will not touch the rest of dst.//// Multiple calls to CryptBlocks behave as if the concatenation of// the src buffers was passed in a single run. That is, BlockMode// maintains state and does not reset at each CryptBlocks call.CryptBlocks(dst, src []byte)}// AEAD is a cipher mode providing authenticated encryption with associated// data. For a description of the methodology, see// https://en.wikipedia.org/wiki/Authenticated_encryption.type AEAD interface {// NonceSize returns the size of the nonce that must be passed to Seal// and Open.NonceSize() int// Overhead returns the maximum difference between the lengths of a// plaintext and its ciphertext.Overhead() int// Seal encrypts and authenticates plaintext, authenticates the// additional data and appends the result to dst, returning the updated// slice. The nonce must be NonceSize() bytes long and unique for all// time, for a given key.//// To reuse plaintext's storage for the encrypted output, use plaintext[:0]// as dst. Otherwise, the remaining capacity of dst must not overlap plaintext.// dst and additionalData may not overlap.Seal(dst, nonce, plaintext, additionalData []byte) []byte// Open decrypts and authenticates ciphertext, authenticates the// additional data and, if successful, appends the resulting plaintext// to dst, returning the updated slice. The nonce must be NonceSize()// bytes long and both it and the additional data must match the// value passed to Seal.//// To reuse ciphertext's storage for the decrypted output, use ciphertext[:0]// as dst. Otherwise, the remaining capacity of dst must not overlap ciphertext.// dst and additionalData may not overlap.//// Even if the function fails, the contents of dst, up to its capacity,// may be overwritten.Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error)}
![]() |
The pages are generated with Golds v0.7.9-preview. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |