@@ -2289,16 +2289,29 @@ EC.prototype.sign = function sign(msg, key, enc, options) {
2289
2289
if ( ! options )
2290
2290
options = { } ;
2291
2291
2292
+ if ( typeof msg !== 'string' && typeof msg !== 'number' && ! BN . isBN ( msg ) ) {
2293
+ assert ( typeof msg === 'object' && msg && typeof msg . length === 'number' ,
2294
+ 'Expected message to be an array-like, a hex string, or a BN instance' ) ;
2295
+ assert ( ( msg . length >>> 0 ) === msg . length ) ; // non-negative 32-bit integer
2296
+ for ( var i = 0 ; i < msg . length ; i ++ ) assert ( ( msg [ i ] & 255 ) === msg [ i ] ) ;
2297
+ }
2298
+
2292
2299
key = this . keyFromPrivate ( key , enc ) ;
2293
2300
msg = this . _truncateToN ( msg , false , options . msgBitLength ) ;
2294
2301
2302
+ // Would fail further checks, but let's make the error message clear
2303
+ assert ( ! msg . isNeg ( ) , 'Can not sign a negative message' ) ;
2304
+
2295
2305
// Zero-extend key to provide enough entropy
2296
2306
var bytes = this . n . byteLength ( ) ;
2297
2307
var bkey = key . getPrivate ( ) . toArray ( 'be' , bytes ) ;
2298
2308
2299
2309
// Zero-extend nonce to have the same byte size as N
2300
2310
var nonce = msg . toArray ( 'be' , bytes ) ;
2301
2311
2312
+ // Recheck nonce to be bijective to msg
2313
+ assert ( ( new BN ( nonce ) ) . eq ( msg ) , 'Can not sign message' ) ;
2314
+
2302
2315
// Instantiate Hmac_DRBG
2303
2316
var drbg = new HmacDRBG ( {
2304
2317
hash : this . hash ,
@@ -8889,7 +8902,7 @@ utils.encode = function encode(arr, enc) {
8889
8902
} , { } ] , 35 :[ function ( require , module , exports ) {
8890
8903
module . exports = {
8891
8904
"name" : "elliptic" ,
8892
- "version" : "6.6.0 " ,
8905
+ "version" : "6.6.1 " ,
8893
8906
"description" : "EC cryptography" ,
8894
8907
"main" : "lib/elliptic.js" ,
8895
8908
"files" : [
0 commit comments