@@ -29,45 +29,45 @@ import (
29
29
)
30
30
31
31
func TestUnmarshalECDSASignature (t * testing.T ) {
32
- _ , _ , err := unmarshalECDSASignature (nil )
32
+ _ , _ , err := UnmarshalECDSASignature (nil )
33
33
assert .Error (t , err )
34
34
assert .Contains (t , err .Error (), "Failed unmashalling signature [" )
35
35
36
- _ , _ , err = unmarshalECDSASignature ([]byte {})
36
+ _ , _ , err = UnmarshalECDSASignature ([]byte {})
37
37
assert .Error (t , err )
38
38
assert .Contains (t , err .Error (), "Failed unmashalling signature [" )
39
39
40
- _ , _ , err = unmarshalECDSASignature ([]byte {0 })
40
+ _ , _ , err = UnmarshalECDSASignature ([]byte {0 })
41
41
assert .Error (t , err )
42
42
assert .Contains (t , err .Error (), "Failed unmashalling signature [" )
43
43
44
- sigma , err := marshalECDSASignature (big .NewInt (- 1 ), big .NewInt (1 ))
44
+ sigma , err := MarshalECDSASignature (big .NewInt (- 1 ), big .NewInt (1 ))
45
45
assert .NoError (t , err )
46
- _ , _ , err = unmarshalECDSASignature (sigma )
46
+ _ , _ , err = UnmarshalECDSASignature (sigma )
47
47
assert .Error (t , err )
48
48
assert .Contains (t , err .Error (), "Invalid signature. R must be larger than zero" )
49
49
50
- sigma , err = marshalECDSASignature (big .NewInt (0 ), big .NewInt (1 ))
50
+ sigma , err = MarshalECDSASignature (big .NewInt (0 ), big .NewInt (1 ))
51
51
assert .NoError (t , err )
52
- _ , _ , err = unmarshalECDSASignature (sigma )
52
+ _ , _ , err = UnmarshalECDSASignature (sigma )
53
53
assert .Error (t , err )
54
54
assert .Contains (t , err .Error (), "Invalid signature. R must be larger than zero" )
55
55
56
- sigma , err = marshalECDSASignature (big .NewInt (1 ), big .NewInt (0 ))
56
+ sigma , err = MarshalECDSASignature (big .NewInt (1 ), big .NewInt (0 ))
57
57
assert .NoError (t , err )
58
- _ , _ , err = unmarshalECDSASignature (sigma )
58
+ _ , _ , err = UnmarshalECDSASignature (sigma )
59
59
assert .Error (t , err )
60
60
assert .Contains (t , err .Error (), "Invalid signature. S must be larger than zero" )
61
61
62
- sigma , err = marshalECDSASignature (big .NewInt (1 ), big .NewInt (- 1 ))
62
+ sigma , err = MarshalECDSASignature (big .NewInt (1 ), big .NewInt (- 1 ))
63
63
assert .NoError (t , err )
64
- _ , _ , err = unmarshalECDSASignature (sigma )
64
+ _ , _ , err = UnmarshalECDSASignature (sigma )
65
65
assert .Error (t , err )
66
66
assert .Contains (t , err .Error (), "Invalid signature. S must be larger than zero" )
67
67
68
- sigma , err = marshalECDSASignature (big .NewInt (1 ), big .NewInt (1 ))
68
+ sigma , err = MarshalECDSASignature (big .NewInt (1 ), big .NewInt (1 ))
69
69
assert .NoError (t , err )
70
- R , S , err := unmarshalECDSASignature (sigma )
70
+ R , S , err := UnmarshalECDSASignature (sigma )
71
71
assert .NoError (t , err )
72
72
assert .Equal (t , big .NewInt (1 ), R )
73
73
assert .Equal (t , big .NewInt (1 ), S )
@@ -126,10 +126,10 @@ func TestVerifyECDSA(t *testing.T) {
126
126
assert .Error (t , err )
127
127
assert .Contains (t , err .Error (), "Failed unmashalling signature [" )
128
128
129
- R , S , err := unmarshalECDSASignature (sigma )
129
+ R , S , err := UnmarshalECDSASignature (sigma )
130
130
assert .NoError (t , err )
131
131
S .Add (curveHalfOrders [elliptic .P256 ()], big .NewInt (1 ))
132
- sigmaWrongS , err := marshalECDSASignature (R , S )
132
+ sigmaWrongS , err := MarshalECDSASignature (R , S )
133
133
assert .NoError (t , err )
134
134
_ , err = verifyECDSA (& lowLevelKey .PublicKey , sigmaWrongS , msg , nil )
135
135
assert .Error (t , err )
@@ -236,3 +236,52 @@ func TestEcdsaPublicKey(t *testing.T) {
236
236
assert .Error (t , err )
237
237
assert .Contains (t , err .Error (), "Failed marshalling key [" )
238
238
}
239
+
240
+ func TestIsLowS (t * testing.T ) {
241
+ lowLevelKey , err := ecdsa .GenerateKey (elliptic .P256 (), rand .Reader )
242
+ assert .NoError (t , err )
243
+
244
+ lowS , err := IsLowS (& lowLevelKey .PublicKey , big .NewInt (0 ))
245
+ assert .NoError (t , err )
246
+ assert .True (t , lowS )
247
+
248
+ s := new (big.Int )
249
+ s = s .Set (curveHalfOrders [elliptic .P256 ()])
250
+
251
+ lowS , err = IsLowS (& lowLevelKey .PublicKey , s )
252
+ assert .NoError (t , err )
253
+ assert .True (t , lowS )
254
+
255
+ s = s .Add (s , big .NewInt (1 ))
256
+ lowS , err = IsLowS (& lowLevelKey .PublicKey , s )
257
+ assert .NoError (t , err )
258
+ assert .False (t , lowS )
259
+ s , modified , err := ToLowS (& lowLevelKey .PublicKey , s )
260
+ assert .NoError (t , err )
261
+ assert .True (t , modified )
262
+ lowS , err = IsLowS (& lowLevelKey .PublicKey , s )
263
+ assert .NoError (t , err )
264
+ assert .True (t , lowS )
265
+ }
266
+
267
+ func TestSignatureToLowS (t * testing.T ) {
268
+ lowLevelKey , err := ecdsa .GenerateKey (elliptic .P256 (), rand .Reader )
269
+ assert .NoError (t , err )
270
+
271
+ s := new (big.Int )
272
+ s = s .Set (curveHalfOrders [elliptic .P256 ()])
273
+ s = s .Add (s , big .NewInt (1 ))
274
+
275
+ lowS , err := IsLowS (& lowLevelKey .PublicKey , s )
276
+ assert .NoError (t , err )
277
+ assert .False (t , lowS )
278
+ sigma , err := MarshalECDSASignature (big .NewInt (1 ), s )
279
+ assert .NoError (t , err )
280
+ sigma2 , err := SignatureToLowS (& lowLevelKey .PublicKey , sigma )
281
+ assert .NoError (t , err )
282
+ _ , s , err = UnmarshalECDSASignature (sigma2 )
283
+ assert .NoError (t , err )
284
+ lowS , err = IsLowS (& lowLevelKey .PublicKey , s )
285
+ assert .NoError (t , err )
286
+ assert .True (t , lowS )
287
+ }
0 commit comments