@@ -110,12 +110,14 @@ function pointAddScalar (p, tweak, __compressed) {
110
110
return getEncoded ( uu , compressed )
111
111
}
112
112
113
- function pointCompress ( p , compressed ) {
113
+ function pointCompress ( p , __compressed ) {
114
114
if ( ! isPoint ( p ) ) throw new TypeError ( THROW_BAD_POINT )
115
115
116
116
const pp = decodeFrom ( p )
117
117
if ( pp . isInfinity ( ) ) throw new TypeError ( THROW_BAD_POINT )
118
118
119
+ const compressed = assumeCompression ( __compressed , p )
120
+
119
121
return getEncoded ( pp , compressed )
120
122
}
121
123
@@ -215,7 +217,7 @@ function __sign (hash, x, addData) {
215
217
return buffer
216
218
}
217
219
218
- function verify ( hash , q , signature ) {
220
+ function verify ( hash , q , signature , strict ) {
219
221
if ( ! isScalar ( hash ) ) throw new TypeError ( THROW_BAD_HASH )
220
222
if ( ! isPoint ( q ) ) throw new TypeError ( THROW_BAD_POINT )
221
223
@@ -226,6 +228,10 @@ function verify (hash, q, signature) {
226
228
const r = fromBuffer ( signature . slice ( 0 , 32 ) )
227
229
const s = fromBuffer ( signature . slice ( 32 , 64 ) )
228
230
231
+ if ( strict && s . cmp ( nDiv2 ) > 0 ) {
232
+ return false
233
+ }
234
+
229
235
// 1.4.1 Enforce r and s are both integers in the interval [1, n − 1] (2, enforces '> 0')
230
236
if ( r . gtn ( 0 ) <= 0 /* || r.compareTo(n) >= 0 */ ) return false
231
237
if ( s . gtn ( 0 ) <= 0 /* || s.compareTo(n) >= 0 */ ) return false
0 commit comments