Skip to content

Commit 97f2113

Browse files
committed
Fix sign user_id format
1 parent 951f730 commit 97f2113

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

lib/sm2_crypto.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ def sign(private_key, data, sm3_hash: false, user_id: "3132333435363738313233343
130130
s = ((one + da).mod_inverse(n) * (k - (r * da))).to_i % n.to_i
131131
end
132132

133-
r.to_s(16) + s.to_s(16)
133+
r.to_s(16).rjust(64, "0") + s.to_s(16).rjust(64, "0")
134134
end
135135

136136
# verify the signature with public_key
@@ -172,7 +172,7 @@ def verify(public_key, data, signature, sm3_hash: false, user_id: "3132333435363
172172

173173
# ZA = H256(ENTLA || IDA || a || b || gx || gy || px || py)
174174
def za(public_key, user_id)
175-
ida = user_id.unpack1("a*")
175+
ida = [user_id].pack("H*")
176176
entla = [ida.size * 8].pack("n")
177177
a = ["FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC"].pack("H*")
178178
b = ["28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93"].pack("H*")

test/test_sm2_crypto.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,16 +75,24 @@ def test_get_publick_key
7575
assert_equal public_key, SM2Crypto.get_public_key(private_key)
7676
end
7777

78-
def test_sign
78+
def test_sign_and_verify
7979
msg = "abc"
8080
sign = SM2Crypto.sign(SM2_PRIVATE_KEY, msg)
8181
assert_equal true, SM2Crypto.verify(SM2_PUBLIC_KEY, msg, sign)
82+
83+
cjk_msg = "abc1234XYZ@%& 你好,世界!#{SecureRandom.alphanumeric(rand(1000..10_000))}"
84+
sign2 = SM2Crypto.sign(SM2_PRIVATE_KEY, cjk_msg)
85+
assert_equal true, SM2Crypto.verify(SM2_PUBLIC_KEY, cjk_msg, sign2)
8286
end
8387

84-
def test_sign_with_hash
88+
def test_sign_and_verify_with_hash
8589
msg = "abc"
8690
user_id = "313233343536373831323334353637AA"
8791
sign = SM2Crypto.sign(SM2_PRIVATE_KEY, msg, sm3_hash: true, user_id: user_id)
8892
assert_equal true, SM2Crypto.verify(SM2_PUBLIC_KEY, msg, sign, sm3_hash: true, user_id: user_id)
93+
94+
cjk_msg = "abc1234XYZ@%& 你好,世界!#{SecureRandom.alphanumeric(rand(1000..10_000))}"
95+
sign2 = SM2Crypto.sign(SM2_PRIVATE_KEY, cjk_msg, sm3_hash: true)
96+
assert_equal true, SM2Crypto.verify(SM2_PUBLIC_KEY, cjk_msg, sign2, sm3_hash: true)
8997
end
9098
end

0 commit comments

Comments
 (0)