chacha20

package
v2.0.28+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 2, 2022 License: GPL-3.0, CC0-1.0, BSD-3-Clause Imports: 7 Imported by: 16

README

chacha20 - ChaCha20

Yawning Angel (yawning at schwanenlied dot me)

Yet another Go ChaCha20 implementation. Everything else I found was slow, didn't support all the variants I need to use, or relied on cgo to go fast.

Features:

  • 20 round, 256 bit key only. Everything else is pointless and stupid.
  • IETF 96 bit nonce variant.
  • XChaCha 24 byte nonce variant.
  • SSE2 and AVX2 support on amd64 targets.
  • Incremental encrypt/decrypt support, unlike golang.org/x/crypto/salsa20.

Documentation

Index

Constants

View Source
const (
	// KeySize is the ChaCha20 key size in bytes.
	KeySize = 32

	// NonceSize is the ChaCha20 nonce size in bytes.
	NonceSize = 8

	// INonceSize is the IETF ChaCha20 nonce size in bytes.
	INonceSize = 12

	// XNonceSize is the XChaCha20 nonce size in bytes.
	XNonceSize = 24

	// HNonceSize is the HChaCha20 nonce size in bytes.
	HNonceSize = 16

	// BlockSize is the ChaCha20 block size in bytes.
	BlockSize = 64
)

Variables

View Source
var (
	// ErrInvalidKey is the error returned when the key is invalid.
	ErrInvalidKey = errors.New("key length must be KeySize bytes")

	// ErrInvalidNonce is the error returned when the nonce is invalid.
	ErrInvalidNonce = errors.New("nonce length must be NonceSize/INonceSize/XNonceSize bytes")

	// ErrInvalidCounter is the error returned when the counter is invalid.
	ErrInvalidCounter = errors.New("block counter is invalid (out of range)")
)

Functions

func HChaCha

func HChaCha(key []byte, nonce *[HNonceSize]byte, out *[32]byte)

HChaCha is the HChaCha20 hash function used to make XChaCha.

Types

type Cipher

type Cipher struct {
	// contains filtered or unexported fields
}

A Cipher is an instance of ChaCha20/XChaCha20 using a particular key and nonce.

func NewCipher

func NewCipher(key, nonce []byte) (*Cipher, error)

NewCipher returns a new ChaCha20/XChaCha20 instance.

func (*Cipher) KeyStream

func (c *Cipher) KeyStream(dst []byte)

KeyStream sets dst to the raw keystream.

func (*Cipher) ReKey

func (c *Cipher) ReKey(key, nonce []byte) error

ReKey reinitializes the ChaCha20/XChaCha20 instance with the provided key and nonce.

func (*Cipher) Reset

func (c *Cipher) Reset()

Reset zeros the key data so that it will no longer appear in the process's memory.

func (*Cipher) Seek

func (c *Cipher) Seek(blockCounter uint64) error

Seek sets the block counter to a given offset.

func (*Cipher) XORKeyStream

func (c *Cipher) XORKeyStream(dst, src []byte)

XORKeyStream sets dst to the result of XORing src with the key stream. Dst and src may be the same slice but otherwise should not overlap.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL