From 17bf37004fc9611c43f149eb55cb8dc19ecc190b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=AD=90=E9=93=AD?= Date: Wed, 19 Mar 2025 18:17:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=94=9F=E6=88=90=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/pkg/cmb/sm2.go | 6 +++++- internal/pkg/cmb/sm2/sm2.go | 7 +++++++ internal/pkg/cmb/sm2_test.go | 8 +++++--- internal/service/cmb.go | 28 ++++++++++++++-------------- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/internal/pkg/cmb/sm2.go b/internal/pkg/cmb/sm2.go index 2571fb7..5cced33 100644 --- a/internal/pkg/cmb/sm2.go +++ b/internal/pkg/cmb/sm2.go @@ -76,7 +76,8 @@ func Decrypt(privateKey, input string) (string, error) { keyAndIvStr := tmpDataArr[0] encryptedBody := tmpDataArr[1] - kvBase64Tmp, err := sm22.NewSm2().SetHexPrivateKey(privateKey). + kvBase64Tmp, err := sm22.NewSm2(). + SetHexPrivateKey(privateKey). SetBase64StringData(keyAndIvStr). SetSdk(sdk.NewCmbLifeSdk()). SetCipherType(model.C1C3C2). @@ -106,6 +107,9 @@ func Decrypt(privateKey, input string) (string, error) { } plainText, err := sm4.CBCDecrypt(plainKey, plainIv, data2) + if err != nil { + return "", err + } return string(Padding(plainText, 0)), nil } diff --git a/internal/pkg/cmb/sm2/sm2.go b/internal/pkg/cmb/sm2/sm2.go index 82d7a0d..961c636 100644 --- a/internal/pkg/cmb/sm2/sm2.go +++ b/internal/pkg/cmb/sm2/sm2.go @@ -85,9 +85,11 @@ func (s *Sm2) Encrypt() *Sm2 { } func (s *Sm2) Decrypt() *Sm2 { + if err := s.decryptErrHandler(); err != nil { return s } + c1Len := 65 C1Byte := make([]byte, c1Len) copy(C1Byte, s.data[:c1Len]) @@ -125,16 +127,19 @@ func (s *Sm2) Verify() *Sm2 { if err := s.encryptErrHandler(); err != nil { return s } + c := s.publicKey.Curve N := c.Params().N if s.signature.R.Cmp(model.One) < 0 || s.signature.S.Cmp(model.One) < 0 { s.toData = model.VerifyFalse return s } + if s.signature.R.Cmp(N) >= 0 || s.signature.S.Cmp(N) >= 0 { s.toData = model.VerifyFalse return s } + z := s.sdk.GetZ(s.publicKey.X, s.publicKey.Y, s.uid) e := s.sdk.GetE(z, s.data) t := new(big.Int).Add(s.signature.R, s.signature.S) @@ -143,6 +148,7 @@ func (s *Sm2) Verify() *Sm2 { s.toData = model.VerifyFalse return s } + var x *big.Int x1, y1 := c.ScalarBaseMult(s.signature.S.Bytes()) x2, y2 := c.ScalarMult(s.publicKey.X, s.publicKey.Y, t.Bytes()) @@ -155,6 +161,7 @@ func (s *Sm2) Verify() *Sm2 { } else { s.toData = model.VerifyFalse } + return s } diff --git a/internal/pkg/cmb/sm2_test.go b/internal/pkg/cmb/sm2_test.go index 4343e26..5d53231 100644 --- a/internal/pkg/cmb/sm2_test.go +++ b/internal/pkg/cmb/sm2_test.go @@ -27,14 +27,16 @@ func TestEncrypt(t *testing.T) { func TestDecrypt(t *testing.T) { priKey := "8d39ff3d2559258c163f4510f082727f51531e1953ab203d5ab1ea4a6d94fd73" - content := "BKLjXVHHcGfZdbYrW/bERUghLv/hvnuEoYw0yRPWBpO2lysBlRLVg1cEh/TNqEgq3n2vlnDcXeXM2/OqfA0IL6e6CS4Nryu6c/RnlmTMxwYOSvklqUFLkqvIyYFhnhPnC2ABy7Tw36PZ/mzdyz8xgQjy8JMPsP3pgezI219fjFEe18UMUHnrhmd9+HUX|BZDXjwQpcWwYNd07vRnepgYK3WYAMaulhYU/3444JtuKNrHumF0C3P01GTpV3wNodx8CLB/21oabj9aPBySeiqrooVcQYCnfp6z0JEgl5wtk/KDSoom/EX9QdI0NSHLVrPxDk+c0ZjaSbmiQ9inNJlZ1lspBsLlzwcVQc0ibgaLaeaM8Z13+a0MipqFKOyCaGzsaSIt04AIbS9QMddNmA/LqNtR4JW7z04A//iBmv68=" + //content := "BAdcIauIjNx3LsrplpJiZoljE4hCiGHra6ulhgG1qL0tKcAeenX+Z9VaHfXLSdkji1fYBpdZiiI35R0vFtnXPXJCJdHsGbfbae+PzNznYQS3KM8/90Y/FIWzSoszfUiF6fAuv8I6v9kQuqHUTidHeHyICDoyvJ0nhbNyUyg85bAKd6TmkVX1MgXLQ81m|5KfR/5UkpVBEQv1dx+iJbojOykNRuDV8Gsy3QOIlRI+cZvafRRPUUG6eeixnPMumhOvyZwsSG/OBeg0U/lSlAepg12tXWcQ601wjgyLaKN1iMvb1DCtfnJFAm8EWAc2SLH3NQuyhxGe/jgCXvj0wGphh4vBUzm8la8i8Aij0BI5lfgU5OzglkKDln6zHN3vBHDqOurEh18eU6z1bfvNnDpzdwEcygcEIH/6lGiqVnGH+C2+QpcKeCnj5qKGFiuSC" + content := "BDUuuPClIlUKDJdpHtNBIU6u5JTetrVG53AfKDSrhah9Q0QZWAj3K5pZF8G/HFtzj/KvbrHfP/gnHri0L7L91HaKYYc1vqy/q8Z69v7MEiIWL2LeLOsc2b0cHmnt7Qey5aZzYVbZJJNhus2gvhahGwOPpPL50JFC8IqAlU4+E/kUBgx+RgzAIkLLs8Se|k1WOt2Eb+xkxSobw/1DaLblguznhnsk1ga87sfqrrPATRuTyszzdVrRtCUuUHRKJ+vQwlZAR1ypkBC1vPMdt8zccI/CeNof+4Ap23enbQwTJQ4KRvij4kbJd6ycY97B+vHnI+oSnwfmjK0EWNUeRrCr2Uau7yxmzlFwJHprbgPZpHVuUjAzMIXNixOfxSTdc9dL+j3/tR7+yookvd9W3hNm96XZFPTheI0FqUKkbKWUUcVs4lC1/yEgjwXFcD4NM" - xx, err := Decrypt(priKey, content) + decryptStr, err := Decrypt(priKey, content) if err != nil { t.Log(err) return } - t.Logf(xx) + + t.Logf(decryptStr) } func TestEncryptDecrypt(t *testing.T) { diff --git a/internal/service/cmb.go b/internal/service/cmb.go index 0c1a2c2..0038c5b 100644 --- a/internal/service/cmb.go +++ b/internal/service/cmb.go @@ -12,6 +12,20 @@ import ( "voucher/internal/biz/vo" ) +func (s *VoucherService) readBody(bodyBytes []byte) (*v1.CmbRequest, error) { + + var req *v1.CmbRequest + if err := json.Unmarshal(bodyBytes, &req); err != nil { + return nil, err2.ErrorCmbParamFail(err.Error()) + } + + if err := req.Validate(); err != nil { + return nil, err2.ErrorCmbParamFail(err.Error()) + } + + return req, nil +} + func (s *VoucherService) CmbOrder(ctx http.Context) error { var ( @@ -61,20 +75,6 @@ func (s *VoucherService) CmbOrder(ctx http.Context) error { return ctx.JSON(200, reply) } -func (s *VoucherService) readBody(bodyBytes []byte) (*v1.CmbRequest, error) { - - var req *v1.CmbRequest - if err := json.Unmarshal(bodyBytes, &req); err != nil { - return nil, err2.ErrorCmbParamFail(err.Error()) - } - - if err := req.Validate(); err != nil { - return nil, err2.ErrorCmbParamFail(err.Error()) - } - - return req, nil -} - func (v *VoucherService) cmbOrder(ctx http.Context) (string, error) { bodyBytes, err := io.ReadAll(ctx.Request().Body)