81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
|
|
package sm
|
||
|
|
|
||
|
|
import (
|
||
|
|
"apigo.cc/go/jsmod"
|
||
|
|
)
|
||
|
|
|
||
|
|
func init() {
|
||
|
|
jsmod.Register("cryptoSM", map[string]any{
|
||
|
|
// SM3 Hash
|
||
|
|
"sm3": Sm3,
|
||
|
|
"sm3ToHex": Sm3ToHex,
|
||
|
|
"sm3ToBase64": Sm3ToBase64,
|
||
|
|
"sm3ToUrlBase64": Sm3ToUrlBase64,
|
||
|
|
|
||
|
|
// SM4 GCM (Stateless)
|
||
|
|
"encrypt": func(data, key, iv []byte) ([]byte, error) {
|
||
|
|
s, err := NewSM4GCMAndEraseKey(key, iv)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return s.EncryptBytes(data)
|
||
|
|
},
|
||
|
|
"decrypt": func(data, key, iv []byte) ([]byte, error) {
|
||
|
|
s, err := NewSM4GCMAndEraseKey(key, iv)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return s.DecryptBytes(data)
|
||
|
|
},
|
||
|
|
|
||
|
|
// SM4 CBC (Stateless)
|
||
|
|
"encryptCBC": func(data, key, iv []byte) ([]byte, error) {
|
||
|
|
s, err := NewSM4CBCAndEraseKey(key, iv)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return s.EncryptBytes(data)
|
||
|
|
},
|
||
|
|
"decryptCBC": func(data, key, iv []byte) ([]byte, error) {
|
||
|
|
s, err := NewSM4CBCAndEraseKey(key, iv)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return s.DecryptBytes(data)
|
||
|
|
},
|
||
|
|
|
||
|
|
// SM2 (Stateless)
|
||
|
|
"encryptSM2": func(data, pubKey []byte) ([]byte, error) {
|
||
|
|
a, err := NewSM2AndEraseKey(nil, pubKey)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return a.EncryptBytes(data)
|
||
|
|
},
|
||
|
|
"decryptSM2": func(data, privKey []byte) ([]byte, error) {
|
||
|
|
a, err := NewSM2AndEraseKey(privKey, nil)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return a.DecryptBytes(data)
|
||
|
|
},
|
||
|
|
"signSM2": func(data, privKey []byte) ([]byte, error) {
|
||
|
|
a, err := NewSM2AndEraseKey(privKey, nil)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return a.Sign(data)
|
||
|
|
},
|
||
|
|
"verifySM2": func(data, sig, pubKey []byte) (bool, error) {
|
||
|
|
a, err := NewSM2AndEraseKey(nil, pubKey)
|
||
|
|
if err != nil {
|
||
|
|
return false, err
|
||
|
|
}
|
||
|
|
return a.Verify(data, sig)
|
||
|
|
},
|
||
|
|
|
||
|
|
// Key Generation
|
||
|
|
"generateSM2KeyPair": GenerateSM2KeyPair,
|
||
|
|
})
|
||
|
|
}
|