No description
- Go 100%
| block | ||
| crypt | ||
| docs | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| README.md | ||
go-cryptohide
Библиотека для встраивания шифрованных и подписанных блоков в текстовые документы.
Возможности
- Поиск блоков по маркерам (
@@...@@, настраиваемые) - Симметричное шифрование: AES-256-GCM
- Асимметричное шифрование: гибрид X25519 (ECDH) + ML-KEM-768 (FIPS 203) + HKDF-SHA256
- Цифровые подписи: Ed25519, гибрид Ed25519 + ML-DSA-44 (FIPS 204)
- Callback-интерфейс: полная замена любого криптографического примитива
- Генерация ключей для всех алгоритмов
- PEM-конвертер для хранения и обмена ключами
- Sign-then-encrypt для режима
encrypt+sign - Идемпотентность: уже обработанные блоки пропускаются
Быстрый старт
import "git.ymnuktech.ru/ymnuk/go-cryptohide/crypt"
// Симметричное шифрование
key, _ := crypt.GenerateSymmetricKey()
c, _ := crypt.New(crypt.Options{Mode: "encrypt", SymmetricKey: key})
encrypted, _ := c.Encrypt([]byte("@@секрет@@"))
decrypted, _ := c.Decrypt(encrypted) // @@секрет@@
// Гибридное асимметричное шифрование
encPub, decPriv, _ := crypt.GenerateAsymmetricKeyPair()
c, _ = crypt.New(crypt.Options{
Mode: "encrypt", EncryptPublicKey: encPub, DecryptPrivateKey: decPriv,
})
// Подпись
pub, priv, _ := crypt.GenerateSignKeyPairEd25519()
c, _ = crypt.New(crypt.Options{
Mode: "sign", SignPrivateKey: priv, VerifyPublicKey: pub,
})
signed, _ := c.Sign([]byte("@@data@@"))
verified, _ := c.Verify(signed)
// Шифрование + подпись
c, _ = crypt.New(crypt.Options{
Mode: "encrypt+sign", SymmetricKey: key,
SignPrivateKey: priv, VerifyPublicKey: pub,
})
out, _ := c.Encrypt([]byte("@@secret@@"))
Callback-пример (XOR)
c, _ := crypt.New(crypt.Options{
Mode: "encrypt+sign",
EncryptFunc: func(plain []byte) ([]byte, error) {
out := make([]byte, len(plain))
for i, b := range plain {
out[i] = b ^ 0xAA
}
return out, nil
},
DecryptFunc: func(cipher []byte) ([]byte, error) {
out := make([]byte, len(cipher))
for i, b := range cipher {
out[i] = b ^ 0xAA
}
return out, nil
},
SignFunc: func(msg []byte) ([]byte, error) {
return []byte("my-signature"), nil
},
VerifyFunc: func(msg, sig []byte) (bool, error) {
return string(sig) == "my-signature", nil
},
})
out, _ := c.Encrypt([]byte("@@data@@"))
// @@base64:eyJhbGciOiJjYWxsYmFjayIsIm1vZGUiOiJlbmNyeXB0K3NpZ24ifQ==.<xor-data>@@
dec, _ := c.Decrypt(out) // @@data@@
ver, _ := c.Verify(out) // @@data@@
Мотивация
go-cryptohide решает задачу выборочного шифрования отдельных фрагментов документа. Пользователь размечает блоки маркерами, библиотека находит их, обрабатывает и возвращает готовый документ. Обрамления сохраняются, что позволяет редактировать незашифрованные части и повторно шифровать изменённые блоки.
Документация
- Архитектура и API
- Криптографические алгоритмы
- Принципы безопасности
- Этапы разработки
- Примеры использования
Совместимость
Go 1.26+. Все криптографические примитивы — из стандартной библиотеки (crypto/aes, crypto/ecdh, crypto/ed25519, crypto/mlkem, crypto/hkdf) и filippo.io/mldsa.
Лицензия
MIT