gitee.com/lh-her-team/common@v1.5.1/crypto/crypto.go (about)

     1  package crypto
     2  
     3  import (
     4  	"crypto"
     5  )
     6  
     7  const (
     8  	// 密码算法默认值,若是此项,将采用配置文件中配置的密码算法
     9  	CRYPTO_ALGO_HASH_DEFAULT = ""
    10  	CRYPTO_ALGO_SYM_DEFAULT  = ""
    11  	CRYPTO_ALGO_ASYM_DEFAULT = ""
    12  
    13  	// 哈希算法
    14  	CRYPTO_ALGO_SHA256   = "SHA256"
    15  	CRYPTO_ALGO_SHA3_256 = "SHA3_256"
    16  	CRYPTO_ALGO_SM3      = "SM3"
    17  
    18  	// 对称加密
    19  	CRYPTO_ALGO_AES    = "AES"
    20  	CRYPTO_ALGO_AES128 = "AES128"
    21  	CRYPTO_ALGO_AES192 = "AES192"
    22  	CRYPTO_ALGO_AES256 = "AES256"
    23  	CRYPTO_ALGO_SM4    = "SM4"
    24  
    25  	// 非对称秘钥
    26  	CRYPTO_ALGO_RSA512        = "RSA512"
    27  	CRYPTO_ALGO_RSA1024       = "RSA1024"
    28  	CRYPTO_ALGO_RSA2048       = "RSA2048"
    29  	CRYPTO_ALGO_RSA3072       = "RSA3072"
    30  	CRYPTO_ALGO_SM2           = "SM2"
    31  	CRYPTO_ALGO_ECC_P256      = "ECC_P256"
    32  	CRYPTO_ALGO_ECC_P384      = "ECC_P384"
    33  	CRYPTO_ALGO_ECC_P521      = "ECC_P521"
    34  	CRYPTO_ALGO_ECC_Ed25519   = "ECC_Ed25519"
    35  	CRYPTO_ALGO_ECC_Secp256k1 = "ECC_Secp256k1"
    36  )
    37  
    38  type HashType uint
    39  
    40  const (
    41  	HASH_TYPE_SM3      HashType = 20
    42  	HASH_TYPE_SHA256   HashType = HashType(crypto.SHA256)
    43  	HASH_TYPE_SHA3_256 HashType = HashType(crypto.SHA3_256)
    44  )
    45  
    46  const (
    47  	SM3 = crypto.Hash(HASH_TYPE_SM3)
    48  )
    49  
    50  // constant UID for SM2-SM3
    51  const CRYPTO_DEFAULT_UID = "1234567812345678"
    52  
    53  // 秘钥类型
    54  type KeyType int
    55  
    56  const (
    57  	// 对称秘钥
    58  	AES KeyType = iota
    59  	SM4
    60  	// 非对称秘钥
    61  	RSA512
    62  	RSA1024
    63  	RSA2048
    64  	RSA3072
    65  	SM2
    66  	ECC_Secp256k1
    67  	ECC_NISTP256
    68  	ECC_NISTP384
    69  	ECC_NISTP521
    70  	ECC_Ed25519
    71  )
    72  
    73  var KeyType2NameMap = map[KeyType]string{
    74  	AES:           CRYPTO_ALGO_AES,
    75  	SM4:           CRYPTO_ALGO_SM4,
    76  	RSA512:        CRYPTO_ALGO_RSA512,
    77  	RSA1024:       CRYPTO_ALGO_RSA1024,
    78  	RSA2048:       CRYPTO_ALGO_RSA2048,
    79  	RSA3072:       CRYPTO_ALGO_RSA3072,
    80  	SM2:           CRYPTO_ALGO_SM2,
    81  	ECC_Secp256k1: CRYPTO_ALGO_ECC_Secp256k1,
    82  	ECC_NISTP256:  "ECC_NISTP256",
    83  	ECC_NISTP384:  "ECC_NISTP384",
    84  	ECC_NISTP521:  "ECC_NISTP521",
    85  	ECC_Ed25519:   CRYPTO_ALGO_ECC_Ed25519,
    86  }
    87  
    88  var Name2KeyTypeMap = map[string]KeyType{
    89  	CRYPTO_ALGO_AES:           AES,
    90  	CRYPTO_ALGO_SM4:           SM4,
    91  	CRYPTO_ALGO_RSA512:        RSA512,
    92  	CRYPTO_ALGO_RSA1024:       RSA1024,
    93  	CRYPTO_ALGO_RSA2048:       RSA2048,
    94  	CRYPTO_ALGO_RSA3072:       RSA3072,
    95  	CRYPTO_ALGO_SM2:           SM2,
    96  	CRYPTO_ALGO_ECC_Secp256k1: ECC_Secp256k1,
    97  	"ECC_NISTP256":            ECC_NISTP256,
    98  	"ECC_NISTP384":            ECC_NISTP384,
    99  	"ECC_NISTP521":            ECC_NISTP521,
   100  	CRYPTO_ALGO_ECC_Ed25519:   ECC_Ed25519,
   101  }
   102  
   103  type BitsSize int
   104  
   105  const (
   106  	BITS_SIZE_128  BitsSize = 128
   107  	BITS_SIZE_192  BitsSize = 192
   108  	BITS_SIZE_256  BitsSize = 256
   109  	BITS_SIZE_512  BitsSize = 512
   110  	BITS_SIZE_1024 BitsSize = 1024
   111  	BITS_SIZE_2048 BitsSize = 2048
   112  	BITS_SIZE_3072 BitsSize = 3072
   113  )
   114  
   115  var HashAlgoMap = map[string]HashType{
   116  	CRYPTO_ALGO_SHA256:   HASH_TYPE_SHA256,
   117  	CRYPTO_ALGO_SHA3_256: HASH_TYPE_SHA3_256,
   118  	CRYPTO_ALGO_SM3:      HASH_TYPE_SM3,
   119  }
   120  
   121  var SymAlgoMap = map[string]KeyType{
   122  	// 对称秘钥
   123  	CRYPTO_ALGO_AES:    AES,
   124  	CRYPTO_ALGO_AES128: AES,
   125  	CRYPTO_ALGO_AES192: AES,
   126  	CRYPTO_ALGO_AES256: AES,
   127  	CRYPTO_ALGO_SM4:    SM4,
   128  }
   129  
   130  var AsymAlgoMap = map[string]KeyType{
   131  	// 非对称秘钥
   132  	CRYPTO_ALGO_RSA512:        RSA512,
   133  	CRYPTO_ALGO_RSA1024:       RSA1024,
   134  	CRYPTO_ALGO_RSA2048:       RSA2048,
   135  	CRYPTO_ALGO_RSA3072:       RSA3072,
   136  	CRYPTO_ALGO_SM2:           SM2,
   137  	CRYPTO_ALGO_ECC_P256:      ECC_NISTP256,
   138  	CRYPTO_ALGO_ECC_P384:      ECC_NISTP384,
   139  	CRYPTO_ALGO_ECC_P521:      ECC_NISTP521,
   140  	CRYPTO_ALGO_ECC_Ed25519:   ECC_Ed25519,
   141  	CRYPTO_ALGO_ECC_Secp256k1: ECC_Secp256k1,
   142  }
   143  
   144  // Signing options
   145  type SignOpts struct {
   146  	Hash         HashType
   147  	UID          string
   148  	EncodingType string
   149  }
   150  
   151  // Encryption options
   152  type EncOpts struct {
   153  	EncodingType string
   154  	BlockMode    string
   155  	EnableMAC    bool
   156  	Hash         HashType
   157  	Label        []byte
   158  	EnableASN1   bool
   159  }
   160  
   161  // === 秘钥接口 ===
   162  type Key interface {
   163  	// 获取秘钥字节数组
   164  	Bytes() ([]byte, error)
   165  	// 获取秘钥类型
   166  	Type() KeyType
   167  	// 获取编码后秘钥(PEM格式)
   168  	String() (string, error)
   169  }
   170  
   171  // === 对称秘钥加解密接口 ===
   172  type SymmetricKey interface {
   173  	Key
   174  	// 加密接口
   175  	Encrypt(plain []byte) ([]byte, error)
   176  	EncryptWithOpts(plain []byte, opts *EncOpts) ([]byte, error)
   177  	// 解密接口
   178  	Decrypt(ciphertext []byte) ([]byte, error)
   179  	DecryptWithOpts(ciphertext []byte, opts *EncOpts) ([]byte, error)
   180  }
   181  
   182  // === 非对称秘钥签名+验签接口 ===
   183  // 私钥签名接口
   184  type PrivateKey interface {
   185  	Key
   186  	// 私钥签名
   187  	Sign(data []byte) ([]byte, error)
   188  	SignWithOpts(data []byte, opts *SignOpts) ([]byte, error)
   189  	// 返回公钥
   190  	PublicKey() PublicKey
   191  	// 转换为crypto包中的 PrivateKey 接口类
   192  	ToStandardKey() crypto.PrivateKey
   193  }
   194  
   195  // 公钥验签接口
   196  type PublicKey interface {
   197  	Key
   198  	// 公钥验签
   199  	Verify(data []byte, sig []byte) (bool, error)
   200  	VerifyWithOpts(data []byte, sig []byte, opts *SignOpts) (bool, error)
   201  	// 转换为crypto包中的 PublicKey 接口类
   202  	ToStandardKey() crypto.PublicKey
   203  }
   204  
   205  // Encryption interface
   206  
   207  type DecryptKey interface {
   208  	Key
   209  	Decrypt(ciphertext []byte) ([]byte, error)
   210  	DecryptWithOpts(ciphertext []byte, opts *EncOpts) ([]byte, error)
   211  	EncryptKey() EncryptKey
   212  }
   213  
   214  type EncryptKey interface {
   215  	Key
   216  	Encrypt(data []byte) ([]byte, error)
   217  	EncryptWithOpts(data []byte, opts *EncOpts) ([]byte, error)
   218  }
   219  
   220  type Encryptor interface {
   221  	Encrypt(data []byte) ([]byte, error)
   222  	Decrypt(ciphertext []byte) ([]byte, error)
   223  }