github.com/chanxuehong/wechat@v0.0.0-20230222024006-36f0325263cd/internal/util/sign_test.go (about) 1 package util 2 3 import ( 4 "crypto/sha1" 5 "encoding/hex" 6 "sort" 7 "testing" 8 ) 9 10 func TestSign(t *testing.T) { 11 token := "token1234567890" 12 timestamp := "1458864389" 13 nonce := "2066297436" 14 15 wantSignature := "f9c725922f6844701ba71e98031978e40023c09f" 16 17 haveSignature := Sign(token, timestamp, nonce) 18 if haveSignature != wantSignature { 19 t.Errorf("test Sign failed,\nhave signature: %s\nwant signature: %s\n", haveSignature, wantSignature) 20 return 21 } 22 } 23 24 func TestMsgSign(t *testing.T) { 25 token := "token1234567890" 26 timestamp := "1458864389" 27 nonce := "2066297436" 28 msg := "u0KvD5kCUzGq9QmWTsSRcolKAH92oiMZDBJ840OqXXFhzUFsBZtdDv6Fv2W9zlrP3Rx3jQGiNXY8sV0kWgzdcefN3WznfM0TGArGow" + 29 "C9bgHE+4QKGrkly0wQ6ouQe7UrKDvkfMy3t8t8njawTl2z0MvgIsaVAvllB3vDWzY/Oo1P1Q9PLdIsgbQjyrJVObZMgFK4KN175ygxBWk" + 30 "b4fdiIAIXSpxN/48LYixSkgohbAcUGlDP8FD3mPTDppz1yI4fGY8jHCYy3s2CsylkE/1+/6zAtv/8160FvB/C6CwRd7Q4OypAW2JKDOek" + 31 "WULMhahY+43C8GQaKWWbsmOHdiEoL6N8jCyrquvCBnvekZTrRY/CTuyqmpo/5LrDXXORwKDdK0uSVU/9N1Lpz9waEWMFqIPSnYC+MgelL" + 32 "zE9hBlnJ+5qC6O0GXrm6QmrncijD2SvdOhfT6OKIDiYJUM2cHHMcg==" 33 34 wantSignature := "247dea54e9ca03ab1e75d03430d205a5b967c44d" 35 36 haveSignature := MsgSign(token, timestamp, nonce, msg) 37 if haveSignature != wantSignature { 38 t.Errorf("test MsgSign failed,\nhave signature: %s\nwant signature: %s\n", haveSignature, wantSignature) 39 return 40 } 41 42 haveSignature2 := MsgSign2(token, timestamp, nonce, msg) 43 if haveSignature2 != wantSignature { 44 t.Errorf("test MsgSign2 failed,\nhave signature: %s\nwant signature: %s\n", haveSignature2, wantSignature) 45 return 46 } 47 } 48 49 func BenchmarkMsgSign(b *testing.B) { 50 b.ReportAllocs() 51 b.ResetTimer() 52 53 token := "token1234567890" 54 timestamp := "1458864389" 55 nonce := "2066297436" 56 msg := "u0KvD5kCUzGq9QmWTsSRcolKAH92oiMZDBJ840OqXXFhzUFsBZtdDv6Fv2W9zlrP3Rx3jQGiNXY8sV0kWgzdcefN3WznfM0TGArGow" + 57 "C9bgHE+4QKGrkly0wQ6ouQe7UrKDvkfMy3t8t8njawTl2z0MvgIsaVAvllB3vDWzY/Oo1P1Q9PLdIsgbQjyrJVObZMgFK4KN175ygxBWk" + 58 "b4fdiIAIXSpxN/48LYixSkgohbAcUGlDP8FD3mPTDppz1yI4fGY8jHCYy3s2CsylkE/1+/6zAtv/8160FvB/C6CwRd7Q4OypAW2JKDOek" + 59 "WULMhahY+43C8GQaKWWbsmOHdiEoL6N8jCyrquvCBnvekZTrRY/CTuyqmpo/5LrDXXORwKDdK0uSVU/9N1Lpz9waEWMFqIPSnYC+MgelL" + 60 "zE9hBlnJ+5qC6O0GXrm6QmrncijD2SvdOhfT6OKIDiYJUM2cHHMcg==" 61 62 for i := 0; i < b.N; i++ { 63 MsgSign(token, timestamp, nonce, msg) 64 } 65 } 66 67 func BenchmarkMsgSign2(b *testing.B) { 68 b.ReportAllocs() 69 b.ResetTimer() 70 71 token := "token1234567890" 72 timestamp := "1458864389" 73 nonce := "2066297436" 74 msg := "u0KvD5kCUzGq9QmWTsSRcolKAH92oiMZDBJ840OqXXFhzUFsBZtdDv6Fv2W9zlrP3Rx3jQGiNXY8sV0kWgzdcefN3WznfM0TGArGow" + 75 "C9bgHE+4QKGrkly0wQ6ouQe7UrKDvkfMy3t8t8njawTl2z0MvgIsaVAvllB3vDWzY/Oo1P1Q9PLdIsgbQjyrJVObZMgFK4KN175ygxBWk" + 76 "b4fdiIAIXSpxN/48LYixSkgohbAcUGlDP8FD3mPTDppz1yI4fGY8jHCYy3s2CsylkE/1+/6zAtv/8160FvB/C6CwRd7Q4OypAW2JKDOek" + 77 "WULMhahY+43C8GQaKWWbsmOHdiEoL6N8jCyrquvCBnvekZTrRY/CTuyqmpo/5LrDXXORwKDdK0uSVU/9N1Lpz9waEWMFqIPSnYC+MgelL" + 78 "zE9hBlnJ+5qC6O0GXrm6QmrncijD2SvdOhfT6OKIDiYJUM2cHHMcg==" 79 80 for i := 0; i < b.N; i++ { 81 MsgSign2(token, timestamp, nonce, msg) 82 } 83 } 84 85 func BenchmarkMsgSign_2(b *testing.B) { 86 b.ReportAllocs() 87 b.ResetTimer() 88 89 token := "token1234567890" 90 timestamp := "1458864389" 91 nonce := "2066297436" 92 msg := string(make([]byte, 1024)) 93 94 for i := 0; i < b.N; i++ { 95 MsgSign(token, timestamp, nonce, msg) 96 } 97 } 98 99 func BenchmarkMsgSign2_2(b *testing.B) { 100 b.ReportAllocs() 101 b.ResetTimer() 102 103 token := "token1234567890" 104 timestamp := "1458864389" 105 nonce := "2066297436" 106 msg := string(make([]byte, 1024)) 107 108 for i := 0; i < b.N; i++ { 109 MsgSign2(token, timestamp, nonce, msg) 110 } 111 } 112 113 func MsgSign2(token, timestamp, nonce, encryptedMsg string) (signature string) { 114 strs := sort.StringSlice{token, timestamp, nonce, encryptedMsg} 115 strs.Sort() 116 117 buf := make([]byte, 0, len(token)+len(timestamp)+len(nonce)+len(encryptedMsg)) 118 buf = append(buf, strs[0]...) 119 buf = append(buf, strs[1]...) 120 buf = append(buf, strs[2]...) 121 buf = append(buf, strs[3]...) 122 123 hashsum := sha1.Sum(buf) 124 return hex.EncodeToString(hashsum[:]) 125 }