gitee.com/lh-her-team/common@v1.5.1/crypto/sym/sym_slow.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" 12 "gitee.com/lh-her-team/common/crypto/sym/aes" 13 "gitee.com/lh-her-team/common/crypto/sym/sm4" 14 ) 15 16 var ( 17 errAESKeyLength = errors.New("aes key len must be 128bit,192bit,256bit") 18 errSM4KeyLength = errors.New("sm4 key len must be 128bit") 19 ) 20 21 func GenerateSymKeyStr(keyType crypto.KeyType, keyHex string) (crypto.SymmetricKey, error) { 22 key, err := hex.DecodeString(keyHex) 23 if err != nil { 24 return nil, err 25 } 26 return GenerateSymKey(keyType, key) 27 } 28 29 func GenerateSymKey(keyType crypto.KeyType, key []byte) (crypto.SymmetricKey, error) { 30 bits := len(key) * 8 31 switch keyType { 32 case crypto.AES: 33 if bits != int(crypto.BITS_SIZE_128) && 34 bits != int(crypto.BITS_SIZE_192) && bits != int(crypto.BITS_SIZE_256) { 35 return nil, errAESKeyLength 36 } 37 return &aes.AESKey{Key: key}, nil 38 case crypto.SM4: 39 if bits != int(crypto.BITS_SIZE_128) { 40 return nil, errSM4KeyLength 41 } 42 return &sm4.SM4Key{Key: key}, nil 43 default: 44 return nil, fmt.Errorf("unsupport symmetric algorithm") 45 } 46 }