84477401f3
some other updates
91 lines
2.6 KiB
Go
91 lines
2.6 KiB
Go
package crypt
|
|
|
|
import (
|
|
"errors"
|
|
"github.com/ZZMarquis/gm/sm4"
|
|
"github.com/ZZMarquis/gm/util"
|
|
"github.com/ssgo/u"
|
|
)
|
|
|
|
//var defaultKey = []byte{173, 233, 12, 146, 252, 29, 111, 183, 104, 232, 56, 134, 235, 232, 19, 168, 205, 26, 51, 189, 54, 125, 211, 233, 116, 173, 41, 154, 116, 215, 200, 2, 241, 61, 40, 230, 226, 62, 8, 220, 210, 72, 251, 232, 16, 198, 36, 2}
|
|
//var defaultIv = []byte{196, 189, 148, 57, 118, 84, 40, 128, 241, 143, 32, 82, 138, 182, 196, 190, 3, 141, 56, 253, 241, 159, 22, 206, 199, 146, 99, 75, 123, 167, 137, 195, 194, 188, 127, 204, 133, 227, 93, 248, 209, 100, 221, 192, 170, 248, 86, 104}
|
|
//var keyIsSet = false
|
|
//
|
|
//func SetSSKey(key, iv []byte) {
|
|
// if !keyIsSet {
|
|
// keyIsSet = true
|
|
// defaultKey = key
|
|
// defaultIv = iv
|
|
// }
|
|
//}
|
|
|
|
//func (c *CMCrypt) DefaultEncrypt(data []byte) (enData []byte, err error) {
|
|
// return c.Encrypt(data, defaultKey, defaultIv)
|
|
//}
|
|
//
|
|
//func (c *CMCrypt) DefaultDecrypt(enData []byte) (data []byte, err error) {
|
|
// return c.Decrypt(enData, defaultKey, defaultIv)
|
|
//}
|
|
//
|
|
//func (c *GMCrypt) DefaultEncrypt(data []byte) (enData []byte, err error) {
|
|
// return c.Encrypt(data, defaultKey, defaultIv)
|
|
//}
|
|
//
|
|
//func (c *GMCrypt) DefaultDecrypt(enData []byte) (data []byte, err error) {
|
|
// return c.Encrypt(enData, defaultKey, defaultIv)
|
|
//}
|
|
|
|
func (c *CMCrypt) Encrypt(data []byte, key []byte, iv []byte) (enData []byte, err error) {
|
|
return u.EncryptAesBytes(data, key, iv)
|
|
}
|
|
|
|
func (c *CMCrypt) Decrypt(enData []byte, key []byte, iv []byte) (data []byte, err error) {
|
|
return u.DecryptAesBytes(enData, key, iv)
|
|
}
|
|
|
|
func (c *GMCrypt) Encrypt(data []byte, key []byte, iv []byte) (enData []byte, err error) {
|
|
return sm4.CBCEncrypt(key[0:16], iv[0:16], util.PKCS5Padding(data, 16))
|
|
}
|
|
|
|
func (c *GMCrypt) Decrypt(enData []byte, key []byte, iv []byte) (data []byte, err error) {
|
|
data, err = sm4.CBCDecrypt(key[0:16], iv[0:16], enData)
|
|
if err == nil {
|
|
length := len(data)
|
|
if length > 0 {
|
|
unpadding := int(data[length-1])
|
|
if length-unpadding >= 0 {
|
|
data = util.PKCS5UnPadding(data)
|
|
} else {
|
|
return nil, errors.New("failed to decrypt by gm4")
|
|
}
|
|
} else {
|
|
return nil, errors.New("failed to decrypt by gm4")
|
|
}
|
|
}
|
|
return data, err
|
|
}
|
|
|
|
func (c *CMCrypt) MakeSyEnc(key []byte, iv []byte) *SyEnc {
|
|
return &SyEnc{
|
|
crypt: c,
|
|
key: key,
|
|
iv: iv,
|
|
}
|
|
}
|
|
|
|
func (c *GMCrypt) MakeSyEnc(key []byte, iv []byte) *SyEnc {
|
|
return &SyEnc{
|
|
crypt: c,
|
|
key: key,
|
|
iv: iv,
|
|
}
|
|
}
|
|
|
|
func (c *SyEnc) Encrypt(data []byte) (enData []byte, err error) {
|
|
return c.Encrypt(data)
|
|
}
|
|
|
|
func (c *SyEnc) Decrypt(enData []byte) (data []byte, err error) {
|
|
return c.Decrypt(enData)
|
|
}
|