@@ -26,6 +26,7 @@ import (
2626 "github.com/stretchr/testify/assert"
2727 "github.com/stretchr/testify/require"
2828
29+ "github.com/PlatONnetwork/PlatON-Go/common"
2930 "github.com/PlatONnetwork/PlatON-Go/crypto"
3031 "github.com/PlatONnetwork/PlatON-Go/p2p/enr"
3132 "github.com/PlatONnetwork/PlatON-Go/rlp"
@@ -34,9 +35,23 @@ import (
3435var (
3536 privkey , _ = crypto .HexToECDSA ("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291" )
3637 pubkey = & privkey .PublicKey
38+ //smPrivkey, _ = crypto.HexToECDSA("b517045a9e4cf82daf5d6c21d9d32d12e11b1c850b2d0448670d5aee8a3bcbcc")
39+ smPrivkey = func () func () * ecdsa.PrivateKey {
40+ return func () * ecdsa.PrivateKey {
41+ p , _ := crypto .HexToECDSA ("b517045a9e4cf82daf5d6c21d9d32d12e11b1c850b2d0448670d5aee8a3bcbcc" )
42+ return p
43+ }
44+ }()
45+ //smPubkey = &smPrivkey().PublicKey
46+ smPubkey = func () func () * ecdsa.PublicKey {
47+ return func () * ecdsa.PublicKey {
48+ return & smPrivkey ().PublicKey
49+ }
50+ }()
3751)
3852
3953func TestEmptyNodeID (t * testing.T ) {
54+ common .SetSignAlgo (common .SMSignAlgo )
4055 var r enr.Record
4156 if addr := ValidSchemes .NodeAddr (& r ); addr != nil {
4257 t .Errorf ("wrong address on empty record: got %v, want %v" , addr , nil )
@@ -73,3 +88,45 @@ func TestGetSetSecp256k1(t *testing.T) {
7388 require .NoError (t , r .Load (& pk ))
7489 assert .EqualValues (t , pubkey , & pk )
7590}
91+
92+ // for sm test
93+ func TestEmptyNodeIDForSm (t * testing.T ) {
94+ common .SetSignAlgo (common .SMSignAlgo )
95+ var r enr.Record
96+ if addr := ValidSchemes .NodeAddr (& r ); addr != nil {
97+ t .Errorf ("wrong address on empty record: got %v, want %v" , addr , nil )
98+ }
99+
100+ require .NoError (t , SignV4 (& r , smPrivkey ()))
101+ expected := "a1e1c33bebe596bda273fd5eb1b1b932a8640ac8524bbd3d9f0863b106b8667d"
102+ assert .Equal (t , expected , hex .EncodeToString (ValidSchemes .NodeAddr (& r )))
103+ }
104+
105+ // Checks that failure to sign leaves the record unmodified.
106+ func TestSignErrorForSm (t * testing.T ) {
107+ common .SetSignAlgo (common .SMSignAlgo )
108+ invalidKey := & ecdsa.PrivateKey {D : new (big.Int ), PublicKey : * (smPubkey ())}
109+
110+ var r enr.Record
111+ emptyEnc , _ := rlp .EncodeToBytes (& r )
112+ if err := SignV4 (& r , invalidKey ); err == nil {
113+ t .Fatal ("expected error from SignV4" )
114+ }
115+ newEnc , _ := rlp .EncodeToBytes (& r )
116+ if ! bytes .Equal (newEnc , emptyEnc ) {
117+ t .Fatal ("record modified even though signing failed" )
118+ }
119+ }
120+
121+ // TestGetSetSecp256k1 tests encoding/decoding and setting/getting of the Secp256k1 key.
122+ func TestGetSetSecp256k1ForSm (t * testing.T ) {
123+ common .SetSignAlgo (common .SMSignAlgo )
124+ var r enr.Record
125+ if err := SignV4 (& r , smPrivkey ()); err != nil {
126+ t .Fatal (err )
127+ }
128+
129+ var pk Secp256k1
130+ require .NoError (t , r .Load (& pk ))
131+ assert .EqualValues (t , smPubkey (), & pk )
132+ }
0 commit comments