gitee.com/lh-her-team/common@v1.5.1/crypto/sym/sym_fast.go (about) 1 //go:build linux 2 // +build linux 3 4 package sym 5 6 import ( 7 "encoding/hex" 8 "errors" 9 "fmt" 10 11 "gitee.com/lh-her-team/common/crypto/engine" 12 "gitee.com/lh-her-team/common/opencrypto" 13 gsm4 "gitee.com/lh-her-team/common/opencrypto/gmssl/sm4" 14 15 "gitee.com/lh-her-team/common/crypto" 16 "gitee.com/lh-her-team/common/crypto/sym/aes" 17 "gitee.com/lh-her-team/common/crypto/sym/sm4" 18 ) 19 20 var ( 21 errAESKeyLength = errors.New("aes key len must be 128bit,192bit,256bit") 22 errSM4KeyLength = errors.New("sm4 key len must be 128bit") 23 ) 24 25 func GenerateSymKeyStr(keyType crypto.KeyType, keyHex string) (crypto.SymmetricKey, error) { 26 key, err := hex.DecodeString(keyHex) 27 if err != nil { 28 return nil, err 29 } 30 return GenerateSymKey(keyType, key) 31 } 32 33 func GenerateSymKey(keyType crypto.KeyType, key []byte) (crypto.SymmetricKey, error) { 34 bits := len(key) * 8 35 switch keyType { 36 case crypto.AES: 37 if bits != int(crypto.BITS_SIZE_128) && 38 bits != int(crypto.BITS_SIZE_192) && bits != int(crypto.BITS_SIZE_256) { 39 return nil, errAESKeyLength 40 } 41 return &aes.AESKey{Key: key}, nil 42 case crypto.SM4: 43 if bits != int(crypto.BITS_SIZE_128) { 44 return nil, errSM4KeyLength 45 } 46 switch engine.CryptoEngine { 47 case opencrypto.GmSSL: 48 return gsm4.SM4Key{Key: key}, nil 49 } 50 return &sm4.SM4Key{Key: key}, nil 51 default: 52 return nil, fmt.Errorf("unsupport symmetric algorithm") 53 } 54 }