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 }