Import path:
gitlab.soludian.com/soludian/fountain/libs/crypto
crypto
import "gitlab.soludian.com/soludian/fountain/libs/crypto"Index
- Constants
- Variables
- func AddLenData(customNotifyJSON []byte) []byte
- func BytesToPrivateKey(b []byte) (crypto.PublicKey, jose.SignatureAlgorithm, error)
- func CRC32Hash(data string) uint32
- func CalcMd5File(filename string) (string, error)
- func CalculateAESKeyAndAESIV(msgKey, secret []byte) ([]byte, []byte)
- func CalculateMsgKey(customNotifyJSON, bytesCheck []byte, secret []byte) []byte
- func CalculatePaddingSize(lenData int32) int32
- func CalculateSha1ForNotify(lenData, additionalSize int32, secret []byte) []byte
- func ComputeFingerprint(publicKey *rsa.PublicKey) (string, error)
- func ComputeFingerprintMD5(publicKey *rsa.PublicKey) (string, error)
- func ComputePrivateFingerprintNum(key *rsa.PrivateKey) uint64
- func GenMd5(src any) string
- func GenerateNonce(size int) []byte
- func GenerateStringNonce(size int) string
- func Hash(hash hash.Hash, s string, firstHalf bool) []byte
- func HashRawURLString(hash hash.Hash, s string, firstHalf bool) string
- func HashString(hash hash.Hash, s string, firstHalf bool) string
- func HashURLString(hash hash.Hash, s string, firstHalf bool) string
- func HashedData(data any, hIdx ...crypto.Hash) (crypto.Hash, []byte)
- func HashedDataString(data any, hIdx ...crypto.Hash) (crypto.Hash, string)
- func HmacMD5(key, data string) []byte
- func HmacSha1(key, data string) []byte
- func HmacSha256(key, data string) []byte
- func HmacSha512(key, data string) []byte
- func MD5(src any) string
- func MD5Bytes(src any) []byte
- func OVCGenerateToken(roomID int64, userID int32) (string, error)
- func PasswordHash(pwd string) string
- func PasswordVerify(bcryptHash, plainPwd string) bool
- func Sha1Digest(data []byte) []byte
- func Sha1DigestString(data string) string
- func Sha256Digest(data []byte) []byte
- func Sha256DigestString(data string) string
- func SignPayloadWithJose(payload []byte, signer jose.Signer) (string, error)
- func SignWithJose(object any, signer jose.Signer) (string, error)
- func WithAlgorithm(algorithm string) lib_3rd.Option[Config]
- func WithConfig(conf *Config) lib_3rd.Option[Config]
- func WithEnvironment(env string) lib_3rd.Option[Config]
- func WithKey(key string) lib_3rd.Option[Config]
- func WithName(name string) lib_3rd.Option[Config]
- func WithNonce(nonce string) lib_3rd.Option[Config]
- func WithPrivateKey(pri string) lib_3rd.Option[Config]
- func WithPublicKey(pub string) lib_3rd.Option[Config]
- type Config
- type ConfigAsymmetricKey
- type ConfigStreamKey
- type ConfigSymmetricKey
- type CryptorInf
- type DESCryptor
- func NewDESCryptor(key string) *DESCryptor
- func (cr *DESCryptor) Decrypt(dataEncrypted []byte) ([]byte, error)
- func (cr *DESCryptor) DecryptBase64(dataEncryptedBase64 string) (string, error)
- func (cr *DESCryptor) Encrypt(data []byte) ([]byte, error)
- func (cr *DESCryptor) EncryptBase64(data []byte) (string, error)
- func (cr *DESCryptor) GetName() string
- type DecodeString
- type EncodeToStringFunc
- type SalSa20Cryptor
- func NewSalSa20Cryptor(key string) *SalSa20Cryptor
- func (cr *SalSa20Cryptor) Decrypt(dataEncrypted []byte) ([]byte, error)
- func (cr *SalSa20Cryptor) DecryptBase64(dataEncryptedBase64 string) (string, error)
- func (cr *SalSa20Cryptor) Encrypt(data []byte) ([]byte, error)
- func (cr *SalSa20Cryptor) EncryptBase64(data []byte) (string, error)
- func (cr *SalSa20Cryptor) GetName() string
- type SingerInf
Constants
const (
KAlgorithmHmacSha1 = "HMAC_SHA1"
KAlgorithmHmacSha256 = "HMAC_SHA256"
KAlgorithmAesCbc = "AES_CBC"
KAlgorithmAesCtr = "AES_CTR"
KAlgorithmAesGcm = "AES_GCM"
KAlgorithmAesIge = "AES_IGE"
KAlgorithmRsa = "RSA"
KAlgorithmDES = "DES"
KAlgorithmAES = "AES"
KAlgorithmRSA = "RSA"
KAlgorithmBLOWFISH = "BLOWFISH"
KAlgorithmECC = "ECC"
KAlgorithmCHACHA20 = "CHACHA20"
KAlgorithmSALSA2 = "SALSA20"
)const (
KMD5 = "MD5"
KSha1 = "SHA1"
KSha256 = "SHA256"
KSha384 = "SHA384"
KBlake2b = "BLAKE2B"
KBlake2s = "BLAKE2S"
KSha3224 = "SHA3_224"
KSha3256 = "SHA3_256"
KSha3384 = "SHA3_384"
KSha3512 = "SHA3_512"
)const (
OvcTokenExpirationTime = 1
OvcAppID = 13213123
)const (
HashMD4 crypto.Hash = 1 + iota // import golang.org/x/crypto/md4
HashMD5 // import crypto/md5
HashSHA1 // import crypto/sha1
HashSHA224 // import crypto/sha256
HashSHA256 // import crypto/sha256
HashSHA384 // import crypto/sha512
HashSHA512 // import crypto/sha512
HashMD5SHA1 // no implementation; MD5+SHA1 used for TLS RSA
HashRIPEMD160 // import golang.org/x/crypto/ripemd160
HashSHA3_224 // import golang.org/x/crypto/sha3
HashSHA3_256 // import golang.org/x/crypto/sha3
HashSHA3_384 // import golang.org/x/crypto/sha3
HashSHA3_512 // import golang.org/x/crypto/sha3
HashSHA512_224 // import crypto/sha512
HashSHA512_256 // import crypto/sha512
HashBLAKE2s_256 // import golang.org/x/crypto/blake2s
HashBLAKE2b_256 // import golang.org/x/crypto/blake2b
HashBLAKE2b_384 // import golang.org/x/crypto/blake2b
HashBLAKE2b_512 // import golang.org/x/crypto/blake2b
)const (
KPackageName = "crypto"
)Variables
var (
// ErrInvalidBlockSize indicates hash blocksize <= 0.
ErrInvalidBlockSize = fmt.Errorf("invalid blocksize - data too small")
// ErrInvalidPKCS7Data indicates bad input to PKCS7 pad or unpad.
ErrInvalidPKCS7Data = fmt.Errorf("invalid pkcs7 data (empty or not padded)")
// ErrInvalidPKCSPadding indicates PKCS7 unpad fails to bad input.
ErrInvalidPKCSPadding = fmt.Errorf("invalid padding - data not divisible by block size")
ErrInvalidPKCSPaddingDecoded = fmt.Errorf("invalid padding - padding decoded invalid")
)var (
ErrInvalidPEMBlockPrivateKey = fmt.Errorf("invalid PEM block - failed to decode PEM block containing private key")
ErrInvalidPEMBlockPublicKey = fmt.Errorf("invalid PEM block - failed to decode PEM block containing public key")
ErrInvalidPrivateKey = fmt.Errorf("invalid private key")
ErrInvalidPublicKey = fmt.Errorf("invalid public key")
)var (
ErrDataLen = fmt.Errorf("data length error")
ErrDataBroken = fmt.Errorf("data broken, first byte is not zero")
ErrKeyPairDismatch = fmt.Errorf("data is not encrypted by the private key")
)var (
ErrPEMDecode = errors.New("PEM decode failed")
ErrUnsupportedFormat = errors.New("key is neither in PKCS#1 nor PKCS#8 format")
ErrUnsupportedPrivateKey = errors.New("unsupported key type, must be RSA, ECDSA or ED25519 private key")
)var ErrUnsupportedAlgorithm = fmt.Errorf("unsupported algorithm")var GetFountainInstance = Lib.GetFountainInstancevar GetFountainManager = Lib.GetFountainManagerSử dụng khi config instance ở dạng key:value; Nếu config instance ở dạng key:array thì sử dụng hàm InstallFountainInstances Nếu config ở dạng key:array thì sẽ chỉ install config phần tử đầu tiên mà thôi
Install with config format <key>:<value>; eg: crypto:<value>
Usage:
config.yaml:
crypto:
name: default_name
...
code.go
crypto.InstallFountainInstance()
crypto.WithConfigKey("crypto").InstallFountainInstance()var InstallFountainInstance = Lib.InstallFountainInstanceSử dụng khi config instance ở dạng key:array<value>; Sẽ luôn cố gắng khởi tạo kể cả khi config ở dạng key:value
Install with config format <key>:array<value>; eg: crypto:array<value>
Usage:
config.yaml:
crypto:
- name: default_name
...
code.go
crypto.InstallFountainInstances()
crypto.WithConfigKey("crypto").InstallFountainInstances()var InstallFountainInstances = Lib.InstallFountainInstancesTruy cập thẳng tới bộ quản lý thư viện
var Lib = lib_3rd.NewLib(NewCryptor, lib_3rd.WithDefaultConfigFunc[Config, cryptor](DefaultConfig))var WithConfigKey = Lib.WithConfigKeyfunc AddLenData
func AddLenData(customNotifyJSON []byte) []bytefunc BytesToPrivateKey
func BytesToPrivateKey(b []byte) (crypto.PublicKey, jose.SignatureAlgorithm, error)func CRC32Hash
func CRC32Hash(data string) uint32func CalcMd5File
func CalcMd5File(filename string) (string, error)func CalculateAESKeyAndAESIV
func CalculateAESKeyAndAESIV(msgKey, secret []byte) ([]byte, []byte)func CalculateMsgKey
func CalculateMsgKey(customNotifyJSON, bytesCheck []byte, secret []byte) []bytefunc CalculatePaddingSize
func CalculatePaddingSize(lenData int32) int32func CalculateSha1ForNotify
func CalculateSha1ForNotify(lenData, additionalSize int32, secret []byte) []bytefunc ComputeFingerprint
func ComputeFingerprint(publicKey *rsa.PublicKey) (string, error)func ComputeFingerprintMD5
func ComputeFingerprintMD5(publicKey *rsa.PublicKey) (string, error)func ComputePrivateFingerprintNum
func ComputePrivateFingerprintNum(key *rsa.PrivateKey) uint64func GenMd5
func GenMd5(src any) stringGenMd5 Generate a 32-bit md5 string
func GenerateNonce
func GenerateNonce(size int) []bytefunc GenerateStringNonce
func GenerateStringNonce(size int) stringfunc Hash
func Hash(hash hash.Hash, s string, firstHalf bool) []bytefunc HashRawURLString
func HashRawURLString(hash hash.Hash, s string, firstHalf bool) stringusing base64 raw url encoding
func HashString
func HashString(hash hash.Hash, s string, firstHalf bool) stringusing base64 std encoding
func HashURLString
func HashURLString(hash hash.Hash, s string, firstHalf bool) stringusing base64 raw url encoding
func HashedData
func HashedData(data any, hIdx ...crypto.Hash) (crypto.Hash, []byte)func HashedDataString
func HashedDataString(data any, hIdx ...crypto.Hash) (crypto.Hash, string)func HmacMD5
func HmacMD5(key, data string) []bytefunc HmacSha1
func HmacSha1(key, data string) []bytefunc HmacSha256
func HmacSha256(key, data string) []bytefunc HmacSha512
func HmacSha512(key, data string) []bytefunc MD5
func MD5(src any) stringMD5 Generate a 32-bit md5 string
func MD5Bytes
func MD5Bytes(src any) []byteMD5Bytes Generate a 32-bit md5 bytes
func OVCGenerateToken
func OVCGenerateToken(roomID int64, userID int32) (string, error)OVCGenerateToken func
func PasswordHash
func PasswordHash(pwd string) stringPasswordHash for quick hash an input password string
func PasswordVerify
func PasswordVerify(bcryptHash, plainPwd string) boolPasswordVerify for quick verify input password is valid
- bcryptHash from db or config, generated by PasswordEncrypt()
func Sha1Digest
func Sha1Digest(data []byte) []bytefunc Sha1DigestString
func Sha1DigestString(data string) stringfunc Sha256Digest
func Sha256Digest(data []byte) []bytefunc Sha256DigestString
func Sha256DigestString(data string) stringfunc SignPayloadWithJose
func SignPayloadWithJose(payload []byte, signer jose.Signer) (string, error)func SignWithJose
func SignWithJose(object any, signer jose.Signer) (string, error)func WithAlgorithm
func WithAlgorithm(algorithm string) lib_3rd.Option[Config]func WithConfig
func WithConfig(conf *Config) lib_3rd.Option[Config]WithConfig Required. Set Config
func WithEnvironment
func WithEnvironment(env string) lib_3rd.Option[Config]func WithKey
func WithKey(key string) lib_3rd.Option[Config]func WithName
func WithName(name string) lib_3rd.Option[Config]func WithNonce
func WithNonce(nonce string) lib_3rd.Option[Config]func WithPrivateKey
func WithPrivateKey(pri string) lib_3rd.Option[Config]func WithPublicKey
func WithPublicKey(pub string) lib_3rd.Option[Config]type Config
type Config struct {
lib_3rd.BaseConfig `conf:",squash"`
Algorithm string `conf:"algorithm" json:"algorithm"` // to be UPPER format: AES-CBC, AES-CBC, AES-CTR, AES-CTR, RSA, RSA
ConfigSymmetricKey `conf:",squash"`
ConfigAsymmetricKey `conf:",squash"`
ConfigStreamKey `conf:",squash"`
}func DefaultConfig
func DefaultConfig() *ConfigDefaultConfig returns the default configuration
func (*Config) Validate
func (conf *Config) Validate() errortype ConfigAsymmetricKey
type ConfigAsymmetricKey struct {
PrivateKey string `conf:"private_key" json:"private_key"`
PublicKey string `conf:"public_key" json:"public_key"`
FingerPrintNum uint64 `conf:"fingerprint_num" json:"fingerprint_num"`
}func DefaultConfigAsymmetricKey
func DefaultConfigAsymmetricKey() ConfigAsymmetricKeytype ConfigStreamKey
type ConfigStreamKey struct {
Nonce string `conf:"nonce" json:"nonce"`
}func DefaultConfigStreamKey
func DefaultConfigStreamKey() ConfigStreamKeytype ConfigSymmetricKey
type ConfigSymmetricKey struct {
Key string `conf:"key" json:"secret_key"`
}func DefaultConfigSymmetricKey
func DefaultConfigSymmetricKey() ConfigSymmetricKeytype CryptorInf
type CryptorInf interface {
GetName() string // RSA-256, AES-CBC,..
Encrypt(data []byte) ([]byte, error) // data -> encrypted
Decrypt(dataEncrypted []byte) ([]byte, error) // data encrypted -> decrypted
EncryptBase64(data []byte) (string, error) // data -> encrypted -> base64
DecryptBase64(dataEncryptedBase64 string) (string, error) // base64 -> data encrypted -> decrypted
}func NewAESCryptor
func NewAESCryptor(conf *Config) CryptorInftype DESCryptor
key size 8 bytes
type DESCryptor struct {
// contains filtered or unexported fields
}func NewDESCryptor
func NewDESCryptor(key string) *DESCryptorThuật toán DES được sử dụng để mã hóa và giải mã các block (khối) dữ liệu 64 bit dựa trên một key (khóa mã) 64 bit. Chú ý, các block được đánh số thứ tự bit từ trái sang phải và bắt đầu từ 1, bit đầu tiên bên trái là bit số 1 và bit cuối cùng bên phải là bit số 64. Quá trình giải mã và mã hóa sử dụng cùng một key nhưng thứ tự phân phối các giá trị các bit key của quá trình giải mã ngược với quá trình mã hóa. DES sử dụng khóa 64-bit, trong đó chỉ có 56 bit là khóa thực sự (các bit còn lại dùng để kiểm tra chẵn lẻ). DES hiện không còn được coi là an toàn cho các ứng dụng hiện đại do kích thước khóa nhỏ. Tuy nhiên, thuật toán này vẫn được sử dụng trong một số hệ thống cũ và cho mục đích học tập.
func (*DESCryptor) Decrypt
func (cr *DESCryptor) Decrypt(dataEncrypted []byte) ([]byte, error)func (*DESCryptor) DecryptBase64
func (cr *DESCryptor) DecryptBase64(dataEncryptedBase64 string) (string, error)func (*DESCryptor) Encrypt
func (cr *DESCryptor) Encrypt(data []byte) ([]byte, error)func (*DESCryptor) EncryptBase64
func (cr *DESCryptor) EncryptBase64(data []byte) (string, error)func (*DESCryptor) GetName
func (cr *DESCryptor) GetName() stringtype DecodeString
base64: std, url, raw url hex
type DecodeString func(string) stringtype EncodeToStringFunc
base64: std, url, raw url hex
type EncodeToStringFunc func([]byte) stringtype SalSa20Cryptor
32 bytes
type SalSa20Cryptor struct {
// contains filtered or unexported fields
}func NewSalSa20Cryptor
func NewSalSa20Cryptor(key string) *SalSa20CryptorSalSa20Cryptor là một struct quản lý việc mã hóa và giải mã bằng thuật toán Salsa20, một thuật toán mã hóa dòng (stream cipher) hiệu quả và nhanh chóng. Salsa20 sử dụng một khóa đối xứng duy nhất để mã hóa và giải mã dữ liệu, với cùng một khóa được sử dụng cho cả hai quá trình. Mã hóa bằng Salsa20 hoạt động theo nguyên tắc XOR dữ liệu gốc với một chuỗi bit tạo ra từ khóa và một nonce duy nhất cho mỗi lần mã hóa. Quá trình mã hóa tạo ra ciphertext bằng cách áp dụng chuỗi bit này lên dữ liệu gốc \(C = M \oplus \text{keyStream}\), với M là dữ liệu gốc. Để giải mã, chuỗi bit được tạo ra lại và XOR với ciphertext để lấy lại dữ liệu gốc \(M = C \oplus \text{keyStream}\). `SalSa20Cryptor` cung cấp một phương thức mã hóa và giải mã đơn giản, lưu trữ khóa dưới dạng chuỗi và sử dụng chuỗi này để tạo ra một mảng byte khi cần thiết. Nonce được tạo ngẫu nhiên cho mỗi lần mã hóa để đảm bảo rằng ngay cả khi mã hóa cùng một dữ liệu với cùng một khóa, ciphertext sẽ khác nhau. Mặc dù Salsa20 có hiệu năng rất cao và an toàn, việc quản lý và bảo vệ khóa vẫn là yếu tố quan trọng để đảm bảo tính bảo mật. Constructor `NewSalSa20Cryptor` nhận vào một khóa dưới dạng chuỗi, đảm bảo rằng khóa có độ dài chính xác là 32 byte, sau đó lưu trữ khóa này trong struct. Hiệu năng và khả năng của Salsa20 kém hơn so với ChaCha20
func (*SalSa20Cryptor) Decrypt
func (cr *SalSa20Cryptor) Decrypt(dataEncrypted []byte) ([]byte, error)func (*SalSa20Cryptor) DecryptBase64
func (cr *SalSa20Cryptor) DecryptBase64(dataEncryptedBase64 string) (string, error)func (*SalSa20Cryptor) Encrypt
func (cr *SalSa20Cryptor) Encrypt(data []byte) ([]byte, error)Encrypt encrypts the data using the SALSA20 algorithm. Luôn tự động cắt/bù đủ 32 bytes
func (*SalSa20Cryptor) EncryptBase64
func (cr *SalSa20Cryptor) EncryptBase64(data []byte) (string, error)func (*SalSa20Cryptor) GetName
func (cr *SalSa20Cryptor) GetName() stringtype SingerInf
type SingerInf interface {
GetName() string // RSA-256, ECC
Sign(data any, her ...crypto.Hash) (string, error) // Return hex encoded string
SignBase64(data any, her ...crypto.Hash) (string, error) // Return base64 encoded string
Verify(data any, signDataHex string, her ...crypto.Hash) error
VerifyBase64(data any, signDataBase64 string, her ...crypto.Hash) error
}Generated by gomarkdoc