mirror of
https://github.com/luxfi/kms.git
synced 2026-10-30 16:23:36 +00:00
Squashes all pre-rewrite history into a single root commit. Previous tree: - 14506 commits including upstream Infisical fork history - Multiple merge chains carrying pre-purge content Force-rewrite per disk-space reclamation discipline. GHCR images (1.9.9, 1.9.11) remain immutable; their git lineage is no longer materialized.
86 lines
1.9 KiB
Go
86 lines
1.9 KiB
Go
// Package xof provides an interface for eXtendable-Output Functions.
|
|
//
|
|
// # Available Functions
|
|
//
|
|
// SHAKE functions are defined in FIPS-202, see https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf.
|
|
// BLAKE2Xb and BLAKE2Xs are defined in https://www.blake2.net/blake2x.pdf.
|
|
package xof
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/cloudflare/circl/internal/sha3"
|
|
"github.com/cloudflare/circl/xof/k12"
|
|
|
|
"golang.org/x/crypto/blake2b"
|
|
"golang.org/x/crypto/blake2s"
|
|
)
|
|
|
|
// XOF defines the interface to hash functions that support arbitrary-length output.
|
|
type XOF interface {
|
|
// Write absorbs more data into the XOF's state. It panics if called
|
|
// after Read.
|
|
io.Writer
|
|
|
|
// Read reads more output from the XOF. It returns io.EOF if the limit
|
|
// has been reached.
|
|
io.Reader
|
|
|
|
// Clone returns a copy of the XOF in its current state.
|
|
Clone() XOF
|
|
|
|
// Reset restores the XOF to its initial state and discards all data appended by Write.
|
|
Reset()
|
|
}
|
|
|
|
type ID uint
|
|
|
|
const (
|
|
SHAKE128 ID = iota + 1
|
|
SHAKE256
|
|
BLAKE2XB
|
|
BLAKE2XS
|
|
K12D10
|
|
)
|
|
|
|
func (x ID) New() XOF {
|
|
switch x {
|
|
case SHAKE128:
|
|
s := sha3.NewShake128()
|
|
return shakeBody{&s}
|
|
case SHAKE256:
|
|
s := sha3.NewShake256()
|
|
return shakeBody{&s}
|
|
case BLAKE2XB:
|
|
x, _ := blake2b.NewXOF(blake2b.OutputLengthUnknown, nil)
|
|
return blake2xb{x}
|
|
case BLAKE2XS:
|
|
x, _ := blake2s.NewXOF(blake2s.OutputLengthUnknown, nil)
|
|
return blake2xs{x}
|
|
case K12D10:
|
|
x := k12.NewDraft10([]byte{})
|
|
return k12d10{&x}
|
|
default:
|
|
panic("crypto: requested unavailable XOF function")
|
|
}
|
|
}
|
|
|
|
type shakeBody struct{ sha3.ShakeHash }
|
|
|
|
func (s shakeBody) Clone() XOF { return shakeBody{s.ShakeHash.Clone()} }
|
|
|
|
type blake2xb struct{ blake2b.XOF }
|
|
|
|
func (s blake2xb) Clone() XOF { return blake2xb{s.XOF.Clone()} }
|
|
|
|
type blake2xs struct{ blake2s.XOF }
|
|
|
|
func (s blake2xs) Clone() XOF { return blake2xs{s.XOF.Clone()} }
|
|
|
|
type k12d10 struct{ *k12.State }
|
|
|
|
func (s k12d10) Clone() XOF {
|
|
x := s.State.Clone()
|
|
return k12d10{&x}
|
|
}
|