106 lines
2.6 KiB
Go
106 lines
2.6 KiB
Go
|
|
package crypto
|
||
|
|
|
||
|
|
import (
|
||
|
|
"apigo.cc/go/jsmod"
|
||
|
|
)
|
||
|
|
|
||
|
|
func init() {
|
||
|
|
jsmod.Register("crypto", map[string]any{
|
||
|
|
// Hash
|
||
|
|
"md5": MD5,
|
||
|
|
"md5ToHex": MD5ToHex,
|
||
|
|
"md5ToBase64": MD5ToBase64,
|
||
|
|
"md5ToUrlBase64": MD5ToUrlBase64,
|
||
|
|
"sha1": Sha1,
|
||
|
|
"sha1ToHex": Sha1ToHex,
|
||
|
|
"sha1ToBase64": Sha1ToBase64,
|
||
|
|
"sha1ToUrlBase64": Sha1ToUrlBase64,
|
||
|
|
"sha256": Sha256,
|
||
|
|
"sha256ToHex": Sha256ToHex,
|
||
|
|
"sha256ToBase64": Sha256ToBase64,
|
||
|
|
"sha256ToUrlBase64": Sha256ToUrlBase64,
|
||
|
|
"sha512": Sha512,
|
||
|
|
"sha512ToHex": Sha512ToHex,
|
||
|
|
"sha512ToBase64": Sha512ToBase64,
|
||
|
|
"sha512ToUrlBase64": Sha512ToUrlBase64,
|
||
|
|
|
||
|
|
// HMAC
|
||
|
|
"hmacMd5": HmacMD5,
|
||
|
|
"hmacSha1": HmacSha1,
|
||
|
|
"hmacSha256": HmacSha256,
|
||
|
|
"hmacSha512": HmacSha512,
|
||
|
|
|
||
|
|
// Token
|
||
|
|
"makeToken": MakeToken,
|
||
|
|
|
||
|
|
// AES GCM (Stateless)
|
||
|
|
"encrypt": func(data, key, iv []byte) ([]byte, error) {
|
||
|
|
s, err := NewAESGCMAndEraseKey(key, iv)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return s.EncryptBytes(data)
|
||
|
|
},
|
||
|
|
"decrypt": func(data, key, iv []byte) ([]byte, error) {
|
||
|
|
s, err := NewAESGCMAndEraseKey(key, iv)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return s.DecryptBytes(data)
|
||
|
|
},
|
||
|
|
|
||
|
|
// AES CBC (Stateless)
|
||
|
|
"encryptCBC": func(data, key, iv []byte) ([]byte, error) {
|
||
|
|
s, err := NewAESCBCAndEraseKey(key, iv)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return s.EncryptBytes(data)
|
||
|
|
},
|
||
|
|
"decryptCBC": func(data, key, iv []byte) ([]byte, error) {
|
||
|
|
s, err := NewAESCBCAndEraseKey(key, iv)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return s.DecryptBytes(data)
|
||
|
|
},
|
||
|
|
|
||
|
|
// RSA (Stateless)
|
||
|
|
"rsaEncrypt": func(data, pubKey []byte) ([]byte, error) {
|
||
|
|
a, err := NewRSAAndEraseKey(nil, pubKey)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return a.EncryptBytes(data)
|
||
|
|
},
|
||
|
|
"rsaDecrypt": func(data, privKey []byte) ([]byte, error) {
|
||
|
|
a, err := NewRSAAndEraseKey(privKey, nil)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return a.DecryptBytes(data)
|
||
|
|
},
|
||
|
|
"rsaSign": func(data, privKey []byte) ([]byte, error) {
|
||
|
|
a, err := NewRSAAndEraseKey(privKey, nil)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return a.Sign(data)
|
||
|
|
},
|
||
|
|
"rsaVerify": func(data, sig, pubKey []byte) (bool, error) {
|
||
|
|
a, err := NewRSAAndEraseKey(nil, pubKey)
|
||
|
|
if err != nil {
|
||
|
|
return false, err
|
||
|
|
}
|
||
|
|
return a.Verify(data, sig)
|
||
|
|
},
|
||
|
|
|
||
|
|
// Key Generation
|
||
|
|
"generateRSAKeyPair": GenerateRSAKeyPair,
|
||
|
|
"generateECDSAKeyPair": GenerateECDSAKeyPair,
|
||
|
|
"generateEd25519KeyPair": GenerateEd25519KeyPair,
|
||
|
|
"generateX25519KeyPair": GenerateX25519KeyPair,
|
||
|
|
"deriveKey": DeriveKey,
|
||
|
|
})
|
||
|
|
}
|