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  }