tjfoc/gmsm

SM2 签名,偶尔出现签名字节长度不对的情况

elihe2011 opened this issue · 1 comments

1. 环境信息

  • Golang版本:1.18.5
  • OS:Ubuntu 20.04 X86_64
  • 实现代码
func (gm *GMM2) Sign(message []byte) ([]byte, error) {
	r, s, err := sm2.Sm2Sign(gm.PriKey, message, nil, rand.Reader)
	if err != nil {
		return nil, err
	}

	var buffer bytes.Buffer
	buffer.Write(r.Bytes())
	buffer.Write(s.Bytes())

	return buffer.Bytes(), nil
}

2. 错误现象

----------------BEGIN [message]----------------
eb 90 eb 90 00 9c 01 00 32 30 32 32 30 38 30 32 30 39 34 31 35 36 33 31 35 34 32 31 31 32 30 00 7b 22 48 65 61 64 22 3a 7b 22 46 75 6e 4e 61 6d 65 22 3a 22 53 79 73 41 6c 61 72 6d 22 2c 22 43 6f 74 22 3a 22 34 22 2c 22 4d 69 64 22 3a 22 32 35 22 2c 22 54 69 6d 65 73 74 61 6d 70 22 3a 22 32 30 32 32 2d 30 39 2d 30 38 20 31 31 3a 31 35 3a 35 33 2e 30 30 31 22 7d 2c 22 44 61 74 61 22 3a 7b 22 45 76 65 6e 74 22 3a 22 31 30 30 35 22 2c 22 4d 73 67 22 3a 22 e7 a3 81 e7 9b 98 e7 a9 ba e9 97 b4 e4 bd bf e7 94 a8 e7 8e 87 e8 b6 85 e8 bf 87 e9 98 88 e5 80 bc 22 7d 7d
----------------END [message]----------------
----------------BEGIN [signature]----------------
92 27 c3 93 1d 8e 86 71 09 7e 98 08 7f a0 cd fe 72 a0 f3 f3 22 05 51 15 0f cf cf 45 c4 18 cb 25 a1 76 b5 dc 68 bf 51 63 bf 69 3e d9 1d 4c ba 8d a5 56 d1 1e 76 34 83 a0 e0 9f 40 fe 04 de 19 d1
----------------END [signature]----------------
----------------BEGIN [message]----------------
eb 90 eb 90 00 93 01 00 32 30 32 32 30 38 30 32 30 39 34 31 35 36 33 31 35 34 32 31 31 32 30 00 7b 22 48 65 61 64 22 3a 7b 22 46 75 6e 4e 61 6d 65 22 3a 22 53 79 73 41 6c 61 72 6d 22 2c 22 43 6f 74 22 3a 22 34 22 2c 22 4d 69 64 22 3a 22 32 36 22 2c 22 54 69 6d 65 73 74 61 6d 70 22 3a 22 32 30 32 32 2d 30 39 2d 30 38 20 31 31 3a 31 36 3a 35 33 2e 30 30 32 22 7d 2c 22 44 61 74 61 22 3a 7b 22 45 76 65 6e 74 22 3a 22 31 30 30 31 22 2c 22 4d 73 67 22 3a 22 63 70 75 e5 88 a9 e7 94 a8 e7 8e 87 e8 b6 85 e8 bf 87 e9 98 88 e5 80 bc 22 7d 7d
----------------END [message]----------------
# 错误的签名,长度63字节,偶发!!!
----------------BEGIN [signature]----------------
28 9f 7b 80 99 13 e3 f5 96 10 de 57 2e 0a ab ad 9f fd 9a 25 e5 12 71 78 cf 98 b7 72 ea 36 f1 eb 5d 5c 24 f8 76 fd 37 d0 c6 51 48 b0 e0 32 65 49 18 43 a3 b9 e2 c1 98 7d 2a 74 78 a0 d0 1e a2
----------------END [signature]----------------
----------------BEGIN [message]----------------
eb 90 eb 90 00 96 01 00 32 30 32 32 30 38 30 32 30 39 34 31 35 36 33 31 35 34 32 31 31 32 30 00 7b 22 48 65 61 64 22 3a 7b 22 46 75 6e 4e 61 6d 65 22 3a 22 53 79 73 41 6c 61 72 6d 22 2c 22 43 6f 74 22 3a 22 34 22 2c 22 4d 69 64 22 3a 22 32 36 22 2c 22 54 69 6d 65 73 74 61 6d 70 22 3a 22 32 30 32 32 2d 30 39 2d 30 38 20 31 31 3a 31 36 3a 35 33 2e 30 30 32 22 7d 2c 22 44 61 74 61 22 3a 7b 22 45 76 65 6e 74 22 3a 22 31 30 30 33 22 2c 22 4d 73 67 22 3a 22 e5 86 85 e5 ad 98 e4 bd bf e7 94 a8 e7 8e 87 e8 b6 85 e8 bf 87 e9 98 88 e5 80 bc 22 7d 7d
----------------END [message]----------------
----------------BEGIN [signature]----------------
84 05 03 58 3d c0 fd a2 88 1d d1 24 2b 63 98 5f 6d 99 7c 7f 87 0b c6 c6 89 67 6c 63 52 96 3e 8a e2 e3 d7 da 4b cb 25 a7 93 9c df a7 4c ff 29 26 8b 38 27 99 95 64 63 c1 35 2b 73 eb a0 bd 34 f1
----------------END [signature]----------------

“rs的长度自己做补位,不够的在前面加0,补位到64个”

已解决,多谢!