Библиотека криптографических алгоритмов по актуальным российским стандартам ГОСТ для Go.
Нулевые внешние зависимости. Constant-time операции. Обнуление чувствительных данных в памяти. KAT-верификация по RFC и ГОСТ.
| Пакет | Стандарт | Описание | KAT |
|---|---|---|---|
gost341112 |
ГОСТ Р 34.11-2012 | Стрибог — хеш-функция (256/512 бит) | RFC 6986 |
gost341215 |
ГОСТ Р 34.12-2015 | Кузнечик (128-бит) и Магма (64-бит) — блочные шифры | RFC 7801, RFC 8891 |
gost341315 |
ГОСТ Р 34.13-2015 | Режимы: ECB, CBC, CFB, CTR, OFB, MAC (m>=n) | ГОСТ 34.13 Прил. А |
gost341012 |
ГОСТ Р 34.10-2012 | Цифровая подпись — 7 кривых (256+512 бит) | RFC 7091 |
mgm |
RFC 9058 | Multilinear Galois Mode — AEAD | RFC 9058 |
vko |
RFC 7836 | Ключевое согласование (256/512-бит кривые) | RFC 7836 |
kdf |
R 50.1.113-2016 | KDF, HMAC, CMAC, PBKDF2, key wrap | — |
| Кривая | Размер | OID |
|---|---|---|
CurveParamSetA() |
256 бит | id-tc26-gost-3410-2012-256-paramSetA |
CurveParamSetB() |
256 бит | CryptoPro-A |
CurveParamSetC() |
256 бит | CryptoPro-B |
CurveParamSetD() |
256 бит | CryptoPro-C |
Curve512ParamSetA() |
512 бит | id-tc26-gost-3410-2012-512-paramSetA |
Curve512ParamSetB() |
512 бит | id-tc26-gost-3410-2012-512-paramSetB |
Curve512ParamSetC() |
512 бит | id-tc26-gost-3410-2012-512-paramSetC |
go get github.com/maxyotka/gost-cryptoimport "github.com/maxyotka/gost-crypto/gost341112"
h := gost341112.New256()
h.Write([]byte("Hello, ГОСТ!"))
fmt.Printf("%x\n", h.Sum(nil))import (
"github.com/maxyotka/gost-crypto/gost341215"
"github.com/maxyotka/gost-crypto/mgm"
)
key := make([]byte, gost341215.KuznechikKeySize)
block, _ := gost341215.NewKuznechik(key)
aead, _ := mgm.NewMGM(block, block.BlockSize())
nonce := make([]byte, aead.NonceSize())
nonce[0] = 0x11 // MSB must be zero per RFC 9058
ciphertext := aead.Seal(nil, nonce, []byte("secret"), []byte("aad"))
plaintext, _ := aead.Open(nil, nonce, ciphertext, []byte("aad"))import (
"crypto/rand"
"github.com/maxyotka/gost-crypto/gost341012"
"github.com/maxyotka/gost-crypto/gost341112"
)
curve := gost341012.CurveParamSetA()
priv, pub, _ := gost341012.GenerateKey(curve, rand.Reader)
digest := gost341112.Sum256([]byte("message"))
sig, _ := priv.SignDigest(digest[:], rand.Reader)
ok, _ := pub.VerifyDigest(digest[:], sig)import "github.com/maxyotka/gost-crypto/vko"
aliceKEK, _ := vko.KEK256(alicePriv, bobPub, ukm)
bobKEK, _ := vko.KEK256(bobPriv, alicePub, ukm)
// aliceKEK == bobKEKБольше runnable-примеров — на pkg.go.dev.
Precomputed S+L таблицы для Кузнечика, zero heap allocations на шифрах.
| Алгоритм | MB/s | Allocs |
|---|---|---|
| Кузнечик Encrypt | 25 | 0 |
| Магма Encrypt | 60 | 0 |
| Стрибог-256 8KB | 26 | 1 |
Все режимы поддерживают параметр m (длина shift register):
len(iv) == blockSize— стандартный режим (m=n)len(iv) > blockSize— ГОСТ shift register (m>n)
// Стандартный CBC (m=n)
cbc := gost341315.NewCBCEncrypter(block, iv16)
// ГОСТ CBC с shift register (m=2n)
cbc := gost341315.NewCBCEncrypter(block, iv32)gost-crypto/
├── gost341112/ # Стрибог — хеш-функция ГОСТ Р 34.11-2012
├── gost341215/ # Кузнечик + Магма — блочные шифры ГОСТ Р 34.12-2015
├── gost341315/ # Режимы работы ГОСТ Р 34.13-2015
├── gost341012/ # Цифровая подпись ГОСТ Р 34.10-2012 (7 кривых)
├── mgm/ # MGM AEAD (RFC 9058)
├── vko/ # Ключевое согласование VKO (RFC 7836)
├── kdf/ # KDF, HMAC, CMAC, PBKDF2, key wrap
└── internal/ # S-boxes, GF(2^n), constant-time утилиты
go test ./... # все тесты
go test -cover ./... # покрытие
go test -bench=. ./... # бенчмаркиДля open-source проектов и личного использования: AGPL-3.0.
Если вы используете gost-crypto в своём ПО и распространяете его (включая SaaS) — вы обязаны открыть исходный код своего ПО под AGPL-3.0.
Для закрытого коммерческого ПО доступна коммерческая лицензия: подробнее.
Copyright (C) 2026 maxyotka
SPDX-License-Identifier: AGPL-3.0-or-later OR Commercial