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  }