Пакет mldsa
Обзор
Пакет mldsa реализует постквантовую схему подписи ML-DSA, заданную в FIPS 204.
Этот пакет недоступен при использовании криптографического модуля Go, соответствующего FIPS 140-3 версии 1.0.0; в этом случае GenerateKey, NewPrivateKey, NewPublicKey и Verify будут возвращать ошибку. Пакет доступен при использовании версии 1.26.0 или новее.
Пример
Код:
// The signer generates a new ML-DSA-44 key pair.
sk, err := mldsa.GenerateKey(mldsa.MLDSA44())
if err != nil {
log.Fatal(err)
}
// The signer publishes the public key encoding.
publicKey := sk.PublicKey().Bytes()
fmt.Printf("public key: %d bytes\n", len(publicKey))
// The signer signs a message and publishes the signature.
msg := []byte("hello, world")
sig, err := sk.Sign(nil, msg, &mldsa.Options{Context: "example"})
if err != nil {
log.Fatal(err)
}
fmt.Printf("signature: %d bytes\n", len(sig))
// The verifier reconstructs the public key and checks the signature.
// The context string must match the one used by the signer.
pk, err := mldsa.NewPublicKey(mldsa.MLDSA44(), publicKey)
if err != nil {
log.Fatal(err)
}
if err := mldsa.Verify(pk, msg, sig, &mldsa.Options{Context: "example"}); err != nil {
log.Fatal("invalid signature: ", err)
}
Вывод:
public key: 1312 bytes signature: 2420 bytes
Указатель
Примеры
Файлы пакета
mldsa.go mldsa_fips140v1.26.go
Константы
const (
PrivateKeySize = 32
MLDSA44PublicKeySize = 1312
MLDSA65PublicKeySize = 1952
MLDSA87PublicKeySize = 2592
MLDSA44SignatureSize = 2420
MLDSA65SignatureSize = 3309
MLDSA87SignatureSize = 4627
) func Verify 1.27
func Verify(pk *PublicKey, message []byte, signature []byte, opts *Options) error
Verify сообщает, является ли signature действительной подписью message, созданной с помощью pk. Если opts равно nil, это эквивалентно нулевому значению Options.
type Options 1.27
Options содержит дополнительные параметры для создания и проверки подписей ML-DSA.
type Options struct {
// Context can be used to distinguish signatures created for different
// purposes. It must be at most 255 bytes long, and it is empty by default.
//
// The same context must be used when signing and verifying a signature.
Context string
}
func (*Options) HashFunc 1.27
func (opts *Options) HashFunc() crypto.Hash
HashFunc возвращает нулевое значение для реализации интерфейса crypto.SignerOpts.
type Parameters 1.27
Parameters представляет один из фиксированных наборов параметров, определённых в FIPS 204.
В большинстве приложений следует использовать MLDSA44.
Несколько вызовов MLDSA44, MLDSA65 или MLDSA87 возвращают одно и то же соответствующее значение, которое можно использовать для проверки равенства и в операторах switch. Возвращённое значение безопасно для конкурентного использования.
type Parameters struct {
// contains filtered or unexported fields
}
func MLDSA44 1.27
func MLDSA44() Parameters
MLDSA44 возвращает набор параметров ML-DSA-44, заданный в FIPS 204.
func MLDSA65 1.27
func MLDSA65() Parameters
MLDSA65 возвращает набор параметров ML-DSA-65, заданный в FIPS 204.
func MLDSA87 1.27
func MLDSA87() Parameters
MLDSA87 возвращает набор параметров ML-DSA-87, заданный в FIPS 204.
func (Parameters) PublicKeySize 1.27
func (params Parameters) PublicKeySize() int
PublicKeySize возвращает размер открытых ключей для этого набора параметров в байтах.
func (Parameters) SignatureSize 1.27
func (params Parameters) SignatureSize() int
SignatureSize возвращает размер подписей для этого набора параметров в байтах.
func (Parameters) String 1.27
func (params Parameters) String() string
String возвращает название набора параметров, например "ML-DSA-44".
type PrivateKey 1.27
PrivateKey — это закрытый ключ ML-DSA, хранящийся в памяти. Он реализует интерфейс crypto.Signer и неформальный расширенный интерфейс crypto.PrivateKey.
PrivateKey безопасен для конкурентного использования.
type PrivateKey struct {
// contains filtered or unexported fields
}
func GenerateKey 1.27
func GenerateKey(params Parameters) (*PrivateKey, error)
GenerateKey генерирует новый случайный закрытый ключ ML-DSA.
func NewPrivateKey 1.27
func NewPrivateKey(params Parameters, seed []byte) (*PrivateKey, error)
NewPrivateKey декодирует закрытый ключ ML-DSA из указанного начального значения.
Длина начального значения должна составлять ровно PrivateKeySize байт.
func (*PrivateKey) Bytes 1.27
func (sk *PrivateKey) Bytes() []byte
Bytes возвращает начальное значение закрытого ключа.
func (*PrivateKey) Equal 1.27
func (sk *PrivateKey) Equal(x crypto.PrivateKey) bool
Equal сообщает, являются ли sk и x одним и тем же ключом (то есть получены ли они из одного начального значения).
Если x не является *PrivateKey, Equal возвращает false.
func (*PrivateKey) Public 1.27
func (sk *PrivateKey) Public() crypto.PublicKey
Public возвращает соответствующий PublicKey для этого закрытого ключа.
Метод реализует интерфейс crypto.Signer.
func (*PrivateKey) PublicKey 1.27
func (sk *PrivateKey) PublicKey() *PublicKey
PublicKey возвращает соответствующий PublicKey для этого закрытого ключа.
func (*PrivateKey) Sign 1.27
func (sk *PrivateKey) Sign(_ io.Reader, message []byte, opts crypto.SignerOpts) (signature []byte, err error)
Sign возвращает подпись заданного сообщения, созданную с помощью этого закрытого ключа.
Если opts равен nil или opts.HashFunc возвращает нулевое значение, сообщение подписывается напрямую. Если opts.HashFunc возвращает crypto.MLDSAMu, переданное сообщение должно быть представителем предварительно хешированного сообщения μ. Если вместе с сообщением, подписываемым напрямую, нужна строка контекста, opts может иметь тип *Options. Аргумент io.Reader игнорируется.
func (*PrivateKey) SignDeterministic 1.27
func (sk *PrivateKey) SignDeterministic(message []byte, opts crypto.SignerOpts) (signature []byte, err error)
SignDeterministic работает как PrivateKey.Sign, но подпись является детерминированной.
type PublicKey 1.27
PublicKey — это открытый ключ ML-DSA. Он реализует неформальный расширенный интерфейс crypto.PublicKey.
PublicKey можно безопасно использовать одновременно из нескольких горутин.
type PublicKey struct {
// contains filtered or unexported fields
}
func NewPublicKey 1.27
func NewPublicKey(params Parameters, encoding []byte) (*PublicKey, error)
NewPublicKey создаёт новый открытый ключ ML-DSA из заданного кодирования.
func (*PublicKey) Bytes 1.27
func (pk *PublicKey) Bytes() []byte
Bytes возвращает кодирование открытого ключа.
func (*PublicKey) Equal 1.27
func (pk *PublicKey) Equal(x crypto.PublicKey) bool
Equal сообщает, совпадают ли ключи pk и x (то есть имеют ли они одинаковое кодирование).
Если x не является *PublicKey, Equal возвращает false.
func (*PublicKey) Parameters 1.27
func (pk *PublicKey) Parameters() Parameters
Parameters возвращает параметры, связанные с этим открытым ключом.
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/crypto/mldsa/