diff --git a/crypto/crypto.go b/crypto/crypto.go new file mode 100644 index 0000000..8aee53f --- /dev/null +++ b/crypto/crypto.go @@ -0,0 +1,18 @@ +package crypto + +// 对称加密 +type ISymmetric interface { + Encrypt(msg []byte) ([]byte, error) + Decrypt(cipherText []byte) ([]byte, error) +} + +// 非对称加密 +type IAsymmetric interface { + Encrypt(msg []byte) ([]byte, error) + Decrypt(ciphertext []byte) ([]byte, error) +} + +type Signer interface { + Sign(msg []byte) ([]byte, error) + Verify(msg, sign []byte) bool +} diff --git a/crypto/ecdsa.go b/crypto/ecdsa.go index 45d8d7d..13d536d 100644 --- a/crypto/ecdsa.go +++ b/crypto/ecdsa.go @@ -3,6 +3,7 @@ package crypto import ( "crypto" "crypto/ecdsa" + "crypto/rand" "crypto/x509" "encoding/pem" "errors" @@ -10,6 +11,8 @@ import ( "strconv" ) +// var _ Signer = &ecdsaOptions{} + type ecdsaOptions struct { hashOptions prv *ecdsa.PrivateKey @@ -89,12 +92,16 @@ func ParsePublicKey(pem []byte) Option { return publicKeyOption(pem) } +func (opt *ecdsaOptions) Sign(msg []byte) ([]byte, error) { + sum := opt.getHash(msg) + return ecdsa.SignASN1(rand.Reader, opt.prv, sum) +} + func (opt *ecdsaOptions) Verify(msg, rText, sText []byte) bool { var r, s big.Int _ = r.UnmarshalText(rText) _ = s.UnmarshalText(sText) sum := opt.getHash(msg) - return ecdsa.Verify(opt.pub, sum, &r, &s) } diff --git a/crypto/rsa.go b/crypto/rsa.go index 3ed67e9..b39c97c 100644 --- a/crypto/rsa.go +++ b/crypto/rsa.go @@ -10,7 +10,7 @@ import ( "strconv" ) - +var _ IAsymmetric = &rsaInstance{} type rsaInstance struct { hashOptions diff --git a/crypto/sm2.go b/crypto/sm2.go index f08033b..53068f5 100644 --- a/crypto/sm2.go +++ b/crypto/sm2.go @@ -15,6 +15,8 @@ var ( C1C2C3 = 1 ) +var _ IAsymmetric = &sm2Instance{} + type sm2Instance struct { mode int prk *s.PrivateKey diff --git a/crypto/sm4.go b/crypto/sm4.go index 48501fd..f2c397a 100644 --- a/crypto/sm4.go +++ b/crypto/sm4.go @@ -6,6 +6,8 @@ import ( "github.com/tjfoc/gmsm/sm4" ) +var _ ISymmetric = &sm4EcbInstance{} + type sm4Instance struct { key []byte }