bignum 0.12.5 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bignum might be problematic. Click here for more details.

package/bignum.cc CHANGED
@@ -41,7 +41,7 @@ using namespace std;
41
41
  Nan::ThrowTypeError("Argument " #I " must be a uint32"); \
42
42
  return; \
43
43
  } \
44
- uint32_t VAR = info[I]->ToUint32()->Value();
44
+ uint32_t VAR = Nan::To<int32_t>(info[I]).FromJust();
45
45
 
46
46
  #define REQ_INT64_ARG(I, VAR) \
47
47
  if (info.Length() <= (I) || !info[I]->IsNumber()) { \
@@ -66,8 +66,8 @@ using namespace std;
66
66
 
67
67
  #define WRAP_RESULT(RES, VAR) \
68
68
  Local<Value> arg[1] = { Nan::New<External>(static_cast<BigNum*>(RES)) }; \
69
- Local<Object> VAR = Nan::New<FunctionTemplate>(constructor_template)-> \
70
- GetFunction()->NewInstance(1, arg);
69
+ Local<Object> VAR = Nan::NewInstance(Nan::New<FunctionTemplate>(constructor_template)->GetFunction(), \
70
+ 1, arg).ToLocalChecked();
71
71
 
72
72
  class AutoBN_CTX
73
73
  {
@@ -140,9 +140,9 @@ int BN_jacobi_priv(const BIGNUM *A,const BIGNUM *N,int *jacobi,
140
140
  BN_copy(a1,A);
141
141
  BN_copy(n1,N);
142
142
  startjacobistep1:
143
- if BN_is_zero(a1) /* step 1 */
143
+ if (BN_is_zero(a1)) /* step 1 */
144
144
  goto endBN_jacobi; /* *jacobi = 1; */
145
- if BN_is_one(a1) /* step 2 */
145
+ if (BN_is_one(a1)) /* step 2 */
146
146
  goto endBN_jacobi; /* *jacobi = 1; */
147
147
  for (e=0;;e++) /* step 3 */
148
148
  if (BN_is_odd(a1))
@@ -180,14 +180,14 @@ endBN_jacobi:
180
180
  class BigNum : public Nan::ObjectWrap {
181
181
  public:
182
182
  static void Initialize(Local<Object> target);
183
- BIGNUM bignum_;
183
+ BIGNUM* bignum_;
184
184
  static Nan::Persistent<Function> js_conditioner;
185
185
  static void SetJSConditioner(Local<Function> constructor);
186
186
 
187
187
  protected:
188
188
  static Nan::Persistent<FunctionTemplate> constructor_template;
189
189
 
190
- BigNum(const String::Utf8Value& str, uint64_t base);
190
+ BigNum(const Nan::Utf8String& str, uint64_t base);
191
191
  BigNum(uint64_t num);
192
192
  BigNum(int64_t num);
193
193
  BigNum(BIGNUM *num);
@@ -291,20 +291,19 @@ void BigNum::Initialize(v8::Local<v8::Object> target) {
291
291
  target->Set(Nan::New("BigNum").ToLocalChecked(), tmpl->GetFunction());
292
292
  }
293
293
 
294
- BigNum::BigNum(const v8::String::Utf8Value& str, uint64_t base) : Nan::ObjectWrap ()
294
+ BigNum::BigNum(const Nan::Utf8String& str, uint64_t base) : Nan::ObjectWrap (),
295
+ bignum_(BN_new())
295
296
  {
296
- BN_init(&bignum_);
297
- BN_zero(&bignum_);
297
+ BN_zero(bignum_);
298
298
 
299
- BIGNUM *res = &bignum_;
299
+ BIGNUM *res = bignum_;
300
300
 
301
301
  const char *cstr = *str;
302
302
  switch (base) {
303
303
  case 2:
304
- BN_init(&bignum_);
305
304
  for (int i = 0, l = str.length(); i < l; i++) {
306
305
  if (cstr[l-i-1] != '0') {
307
- BN_set_bit(&bignum_, i);
306
+ BN_set_bit(bignum_, i);
308
307
  }
309
308
  }
310
309
  break;
@@ -320,57 +319,56 @@ BigNum::BigNum(const v8::String::Utf8Value& str, uint64_t base) : Nan::ObjectWra
320
319
  }
321
320
  }
322
321
 
323
- BigNum::BigNum(uint64_t num) : Nan::ObjectWrap ()
322
+ BigNum::BigNum(uint64_t num) : Nan::ObjectWrap (),
323
+ bignum_(BN_new())
324
324
  {
325
- BN_init(&bignum_);
326
-
327
325
  if (sizeof(BN_ULONG) >= 8 || num <= 0xFFFFFFFFL) {
328
- BN_set_word(&bignum_, num);
326
+ BN_set_word(bignum_, num);
329
327
  } else {
330
- BN_set_word(&bignum_, num >> 32);
331
- BN_lshift(&bignum_, &bignum_, 32);
332
- BN_add_word(&bignum_, num & 0xFFFFFFFFL);
328
+ BN_set_word(bignum_, num >> 32);
329
+ BN_lshift(bignum_, bignum_, 32);
330
+ BN_add_word(bignum_, num & 0xFFFFFFFFL);
333
331
  }
334
332
  }
335
333
 
336
- BigNum::BigNum(int64_t num) : Nan::ObjectWrap ()
334
+ BigNum::BigNum(int64_t num) : Nan::ObjectWrap (),
335
+ bignum_(BN_new())
337
336
  {
338
337
  bool neg = (num < 0);
339
- BN_init(&bignum_);
340
338
 
341
339
  if (neg) {
342
340
  num = -num;
343
341
  }
344
342
  if (num < 0) { // num is -2^63
345
- BN_one(&bignum_);
346
- BN_lshift(&bignum_, &bignum_, 63);
343
+ BN_one(bignum_);
344
+ BN_lshift(bignum_, bignum_, 63);
347
345
  } else if (sizeof(BN_ULONG) >= 8 || num <= 0xFFFFFFFFL) {
348
- BN_set_word(&bignum_, num);
346
+ BN_set_word(bignum_, num);
349
347
  } else {
350
- BN_set_word(&bignum_, num >> 32);
351
- BN_lshift(&bignum_, &bignum_, 32);
352
- BN_add_word(&bignum_, num & 0xFFFFFFFFL);
348
+ BN_set_word(bignum_, num >> 32);
349
+ BN_lshift(bignum_, bignum_, 32);
350
+ BN_add_word(bignum_, num & 0xFFFFFFFFL);
353
351
  }
354
352
  if (neg) {
355
- BN_set_negative(&bignum_, 1);
353
+ BN_set_negative(bignum_, 1);
356
354
  }
357
355
  }
358
356
 
359
- BigNum::BigNum(BIGNUM *num) : Nan::ObjectWrap ()
357
+ BigNum::BigNum(BIGNUM *num) : Nan::ObjectWrap (),
358
+ bignum_(BN_new())
360
359
  {
361
- BN_init(&bignum_);
362
- BN_copy(&bignum_, num);
360
+ BN_copy(bignum_, num);
363
361
  }
364
362
 
365
- BigNum::BigNum() : Nan::ObjectWrap ()
363
+ BigNum::BigNum() : Nan::ObjectWrap (),
364
+ bignum_(BN_new())
366
365
  {
367
- BN_init(&bignum_);
368
- BN_zero(&bignum_);
366
+ BN_zero(bignum_);
369
367
  }
370
368
 
371
369
  BigNum::~BigNum()
372
370
  {
373
- BN_clear_free(&bignum_);
371
+ BN_clear_free(bignum_);
374
372
  }
375
373
 
376
374
  NAN_METHOD(BigNum::New)
@@ -381,8 +379,16 @@ NAN_METHOD(BigNum::New)
381
379
  for (int i = 0; i < len; i++) {
382
380
  newArgs[i] = info[i];
383
381
  }
384
- Local<Value> newInst = Nan::New<FunctionTemplate>(constructor_template)->
385
- GetFunction()->NewInstance(len, newArgs);
382
+
383
+ Nan::TryCatch tryCatch;
384
+ Nan::MaybeLocal<Object> newInstMaybeLocal = Nan::NewInstance(
385
+ Nan::New<FunctionTemplate>(constructor_template)->GetFunction(), len, newArgs);
386
+ if (tryCatch.HasCaught()) {
387
+ tryCatch.ReThrow();
388
+ return;
389
+ }
390
+
391
+ Local<Value> newInst = newInstMaybeLocal.ToLocalChecked();
386
392
  delete[] newArgs;
387
393
  info.GetReturnValue().Set(newInst);
388
394
  return;
@@ -409,8 +415,8 @@ NAN_METHOD(BigNum::New)
409
415
  return;
410
416
  }
411
417
 
412
- String::Utf8Value str(obj->ToObject()->Get(Nan::New("num").ToLocalChecked())->ToString());
413
- base = obj->ToObject()->Get(Nan::New("base").ToLocalChecked())->ToNumber()->Value();
418
+ Nan::Utf8String str(obj->ToObject()->Get(Nan::New("num").ToLocalChecked())->ToString());
419
+ base = Nan::To<int64_t>(obj->ToObject()->Get(Nan::New("base").ToLocalChecked())).FromJust();
414
420
 
415
421
  bignum = new BigNum(str, base);
416
422
  }
@@ -433,10 +439,10 @@ NAN_METHOD(BigNum::ToString)
433
439
  char *to = NULL;
434
440
  switch (base) {
435
441
  case 10:
436
- to = BN_bn2dec(&bignum->bignum_);
442
+ to = BN_bn2dec(bignum->bignum_);
437
443
  break;
438
444
  case 16:
439
- to = BN_bn2hex(&bignum->bignum_);
445
+ to = BN_bn2hex(bignum->bignum_);
440
446
  break;
441
447
  default:
442
448
  Nan::ThrowError("Invalid base, only 10 and 16 are supported");
@@ -456,7 +462,7 @@ NAN_METHOD(BigNum::Badd)
456
462
  BigNum *bn = Nan::ObjectWrap::Unwrap<BigNum>(info[0]->ToObject());
457
463
  BigNum *res = new BigNum();
458
464
 
459
- BN_add(&res->bignum_, &bignum->bignum_, &bn->bignum_);
465
+ BN_add(res->bignum_, bignum->bignum_, bn->bignum_);
460
466
 
461
467
  WRAP_RESULT(res, result);
462
468
 
@@ -469,7 +475,7 @@ NAN_METHOD(BigNum::Bsub)
469
475
 
470
476
  BigNum *bn = Nan::ObjectWrap::Unwrap<BigNum>(info[0]->ToObject());
471
477
  BigNum *res = new BigNum();
472
- BN_sub(&res->bignum_, &bignum->bignum_, &bn->bignum_);
478
+ BN_sub(res->bignum_, bignum->bignum_, bn->bignum_);
473
479
 
474
480
  WRAP_RESULT(res, result);
475
481
 
@@ -483,7 +489,7 @@ NAN_METHOD(BigNum::Bmul)
483
489
 
484
490
  BigNum *bn = Nan::ObjectWrap::Unwrap<BigNum>(info[0]->ToObject());
485
491
  BigNum *res = new BigNum();
486
- BN_mul(&res->bignum_, &bignum->bignum_, &bn->bignum_, ctx);
492
+ BN_mul(res->bignum_, bignum->bignum_, bn->bignum_, ctx);
487
493
 
488
494
  WRAP_RESULT(res, result);
489
495
 
@@ -497,7 +503,7 @@ NAN_METHOD(BigNum::Bdiv)
497
503
 
498
504
  BigNum *bi = Nan::ObjectWrap::Unwrap<BigNum>(info[0]->ToObject());
499
505
  BigNum *res = new BigNum();
500
- BN_div(&res->bignum_, NULL, &bignum->bignum_, &bi->bignum_, ctx);
506
+ BN_div(res->bignum_, NULL, bignum->bignum_, bi->bignum_, ctx);
501
507
 
502
508
  WRAP_RESULT(res, result);
503
509
 
@@ -509,12 +515,12 @@ NAN_METHOD(BigNum::Uadd)
509
515
  BigNum *bignum = Nan::ObjectWrap::Unwrap<BigNum>(info.This());
510
516
 
511
517
  REQ_UINT64_ARG(0, x);
512
- BigNum *res = new BigNum(&bignum->bignum_);
518
+ BigNum *res = new BigNum(bignum->bignum_);
513
519
  if (sizeof(BN_ULONG) >= 8 || x <= 0xFFFFFFFFL) {
514
- BN_add_word(&res->bignum_, x);
520
+ BN_add_word(res->bignum_, x);
515
521
  } else {
516
522
  BigNum *bn = new BigNum(x);
517
- BN_add(&res->bignum_, &bignum->bignum_, &bn->bignum_);
523
+ BN_add(res->bignum_, bignum->bignum_, bn->bignum_);
518
524
  }
519
525
 
520
526
  WRAP_RESULT(res, result);
@@ -527,12 +533,12 @@ NAN_METHOD(BigNum::Usub)
527
533
  BigNum *bignum = Nan::ObjectWrap::Unwrap<BigNum>(info.This());
528
534
 
529
535
  REQ_UINT64_ARG(0, x);
530
- BigNum *res = new BigNum(&bignum->bignum_);
536
+ BigNum *res = new BigNum(bignum->bignum_);
531
537
  if (sizeof(BN_ULONG) >= 8 || x <= 0xFFFFFFFFL) {
532
- BN_sub_word(&res->bignum_, x);
538
+ BN_sub_word(res->bignum_, x);
533
539
  } else {
534
540
  BigNum *bn = new BigNum(x);
535
- BN_sub(&res->bignum_, &bignum->bignum_, &bn->bignum_);
541
+ BN_sub(res->bignum_, bignum->bignum_, bn->bignum_);
536
542
  }
537
543
 
538
544
  WRAP_RESULT(res, result);
@@ -545,13 +551,13 @@ NAN_METHOD(BigNum::Umul)
545
551
  BigNum *bignum = Nan::ObjectWrap::Unwrap<BigNum>(info.This());
546
552
 
547
553
  REQ_UINT64_ARG(0, x);
548
- BigNum *res = new BigNum(&bignum->bignum_);
554
+ BigNum *res = new BigNum(bignum->bignum_);
549
555
  if (sizeof(BN_ULONG) >= 8 || x <= 0xFFFFFFFFL) {
550
- BN_mul_word(&res->bignum_, x);
556
+ BN_mul_word(res->bignum_, x);
551
557
  } else {
552
558
  AutoBN_CTX ctx;
553
559
  BigNum *bn = new BigNum(x);
554
- BN_mul(&res->bignum_, &bignum->bignum_, &bn->bignum_, ctx);
560
+ BN_mul(res->bignum_, bignum->bignum_, bn->bignum_, ctx);
555
561
  }
556
562
 
557
563
  WRAP_RESULT(res, result);
@@ -564,13 +570,13 @@ NAN_METHOD(BigNum::Udiv)
564
570
  BigNum *bignum = Nan::ObjectWrap::Unwrap<BigNum>(info.This());
565
571
 
566
572
  REQ_UINT64_ARG(0, x);
567
- BigNum *res = new BigNum(&bignum->bignum_);
573
+ BigNum *res = new BigNum(bignum->bignum_);
568
574
  if (sizeof(BN_ULONG) >= 8 || x <= 0xFFFFFFFFL) {
569
- BN_div_word(&res->bignum_, x);
575
+ BN_div_word(res->bignum_, x);
570
576
  } else {
571
577
  AutoBN_CTX ctx;
572
578
  BigNum *bn = new BigNum(x);
573
- BN_div(&res->bignum_, NULL, &bignum->bignum_, &bn->bignum_, ctx);
579
+ BN_div(res->bignum_, NULL, bignum->bignum_, bn->bignum_, ctx);
574
580
  }
575
581
 
576
582
  WRAP_RESULT(res, result);
@@ -584,7 +590,7 @@ NAN_METHOD(BigNum::Umul_2exp)
584
590
 
585
591
  REQ_UINT32_ARG(0, x);
586
592
  BigNum *res = new BigNum();
587
- BN_lshift(&res->bignum_, &bignum->bignum_, x);
593
+ BN_lshift(res->bignum_, bignum->bignum_, x);
588
594
 
589
595
  WRAP_RESULT(res, result);
590
596
 
@@ -597,7 +603,7 @@ NAN_METHOD(BigNum::Udiv_2exp)
597
603
 
598
604
  REQ_UINT32_ARG(0, x);
599
605
  BigNum *res = new BigNum();
600
- BN_rshift(&res->bignum_, &bignum->bignum_, x);
606
+ BN_rshift(res->bignum_, bignum->bignum_, x);
601
607
 
602
608
  WRAP_RESULT(res, result);
603
609
 
@@ -608,8 +614,8 @@ NAN_METHOD(BigNum::Babs)
608
614
  {
609
615
  BigNum *bignum = Nan::ObjectWrap::Unwrap<BigNum>(info.This());
610
616
 
611
- BigNum *res = new BigNum(&bignum->bignum_);
612
- BN_set_negative(&res->bignum_, 0);
617
+ BigNum *res = new BigNum(bignum->bignum_);
618
+ BN_set_negative(res->bignum_, 0);
613
619
 
614
620
  WRAP_RESULT(res, result);
615
621
 
@@ -620,8 +626,8 @@ NAN_METHOD(BigNum::Bneg)
620
626
  {
621
627
  BigNum *bignum = Nan::ObjectWrap::Unwrap<BigNum>(info.This());
622
628
 
623
- BigNum *res = new BigNum(&bignum->bignum_);
624
- BN_set_negative(&res->bignum_, !BN_is_negative(&res->bignum_));
629
+ BigNum *res = new BigNum(bignum->bignum_);
630
+ BN_set_negative(res->bignum_, !BN_is_negative(res->bignum_));
625
631
 
626
632
  WRAP_RESULT(res, result);
627
633
 
@@ -635,7 +641,7 @@ NAN_METHOD(BigNum::Bmod)
635
641
 
636
642
  BigNum *bn = Nan::ObjectWrap::Unwrap<BigNum>(info[0]->ToObject());
637
643
  BigNum *res = new BigNum();
638
- BN_div(NULL, &res->bignum_, &bignum->bignum_, &bn->bignum_, ctx);
644
+ BN_div(NULL, res->bignum_, bignum->bignum_, bn->bignum_, ctx);
639
645
 
640
646
  WRAP_RESULT(res, result);
641
647
 
@@ -649,11 +655,11 @@ NAN_METHOD(BigNum::Umod)
649
655
  REQ_UINT64_ARG(0, x);
650
656
  BigNum *res = new BigNum();
651
657
  if (sizeof(BN_ULONG) >= 8 || x <= 0xFFFFFFFFL) {
652
- BN_set_word(&res->bignum_, BN_mod_word(&bignum->bignum_, x));
658
+ BN_set_word(res->bignum_, BN_mod_word(bignum->bignum_, x));
653
659
  } else {
654
660
  AutoBN_CTX ctx;
655
661
  BigNum *bn = new BigNum(x);
656
- BN_div(NULL, &res->bignum_, &bignum->bignum_, &bn->bignum_, ctx);
662
+ BN_div(NULL, res->bignum_, bignum->bignum_, bn->bignum_, ctx);
657
663
  }
658
664
 
659
665
  WRAP_RESULT(res, result);
@@ -669,7 +675,7 @@ NAN_METHOD(BigNum::Bpowm)
669
675
  BigNum *bn1 = Nan::ObjectWrap::Unwrap<BigNum>(info[0]->ToObject());
670
676
  BigNum *bn2 = Nan::ObjectWrap::Unwrap<BigNum>(info[1]->ToObject());
671
677
  BigNum *res = new BigNum();
672
- BN_mod_exp(&res->bignum_, &bignum->bignum_, &bn1->bignum_, &bn2->bignum_, ctx);
678
+ BN_mod_exp(res->bignum_, bignum->bignum_, bn1->bignum_, bn2->bignum_, ctx);
673
679
 
674
680
  WRAP_RESULT(res, result);
675
681
 
@@ -686,7 +692,7 @@ NAN_METHOD(BigNum::Upowm)
686
692
  BigNum *exp = new BigNum(x);
687
693
 
688
694
  BigNum *res = new BigNum();
689
- BN_mod_exp(&res->bignum_, &bignum->bignum_, &exp->bignum_, &bn->bignum_, ctx);
695
+ BN_mod_exp(res->bignum_, bignum->bignum_, exp->bignum_, bn->bignum_, ctx);
690
696
 
691
697
  WRAP_RESULT(res, result);
692
698
 
@@ -702,7 +708,7 @@ NAN_METHOD(BigNum::Upow)
702
708
  BigNum *exp = new BigNum(x);
703
709
 
704
710
  BigNum *res = new BigNum();
705
- BN_exp(&res->bignum_, &bignum->bignum_, &exp->bignum_, ctx);
711
+ BN_exp(res->bignum_, bignum->bignum_, exp->bignum_, ctx);
706
712
 
707
713
  WRAP_RESULT(res, result);
708
714
 
@@ -715,7 +721,7 @@ NAN_METHOD(BigNum::Brand0)
715
721
 
716
722
  BigNum *res = new BigNum();
717
723
 
718
- BN_rand_range(&res->bignum_, &bignum->bignum_);
724
+ BN_rand_range(res->bignum_, bignum->bignum_);
719
725
 
720
726
  WRAP_RESULT(res, result);
721
727
 
@@ -729,7 +735,7 @@ NAN_METHOD(BigNum::Uprime0)
729
735
 
730
736
  BigNum *res = new BigNum();
731
737
 
732
- BN_generate_prime_ex(&res->bignum_, x, safe, NULL, NULL, NULL);
738
+ BN_generate_prime_ex(res->bignum_, x, safe, NULL, NULL, NULL);
733
739
 
734
740
  WRAP_RESULT(res, result);
735
741
 
@@ -743,7 +749,7 @@ NAN_METHOD(BigNum::Probprime)
743
749
 
744
750
  REQ_UINT32_ARG(0, reps);
745
751
 
746
- info.GetReturnValue().Set(Nan::New<Number>(BN_is_prime_ex(&bignum->bignum_, reps, ctx, NULL)));
752
+ info.GetReturnValue().Set(Nan::New<Number>(BN_is_prime_ex(bignum->bignum_, reps, ctx, NULL)));
747
753
  }
748
754
 
749
755
  NAN_METHOD(BigNum::IsBitSet)
@@ -752,7 +758,7 @@ NAN_METHOD(BigNum::IsBitSet)
752
758
 
753
759
  REQ_UINT32_ARG(0, n);
754
760
 
755
- info.GetReturnValue().Set(Nan::New<Number>(BN_is_bit_set(&bignum->bignum_, n)));
761
+ info.GetReturnValue().Set(Nan::New<Number>(BN_is_bit_set(bignum->bignum_, n)));
756
762
  }
757
763
 
758
764
  NAN_METHOD(BigNum::Bcompare)
@@ -761,7 +767,7 @@ NAN_METHOD(BigNum::Bcompare)
761
767
 
762
768
  BigNum *bn = Nan::ObjectWrap::Unwrap<BigNum>(info[0]->ToObject());
763
769
 
764
- info.GetReturnValue().Set(Nan::New<Number>(BN_cmp(&bignum->bignum_, &bn->bignum_)));
770
+ info.GetReturnValue().Set(Nan::New<Number>(BN_cmp(bignum->bignum_, bn->bignum_)));
765
771
  }
766
772
 
767
773
  NAN_METHOD(BigNum::Scompare)
@@ -770,7 +776,7 @@ NAN_METHOD(BigNum::Scompare)
770
776
 
771
777
  REQ_INT64_ARG(0, x);
772
778
  BigNum *bn = new BigNum(x);
773
- int res = BN_cmp(&bignum->bignum_, &bn->bignum_);
779
+ int res = BN_cmp(bignum->bignum_, bn->bignum_);
774
780
 
775
781
  info.GetReturnValue().Set(Nan::New<Number>(res));
776
782
  }
@@ -782,14 +788,13 @@ NAN_METHOD(BigNum::Ucompare)
782
788
  REQ_UINT64_ARG(0, x);
783
789
  int res;
784
790
  if (sizeof(BN_ULONG) >= 8 || x <= 0xFFFFFFFFL) {
785
- BIGNUM bn;
786
- BN_init(&bn);
787
- BN_set_word(&bn, x);
788
- res = BN_cmp(&bignum->bignum_, &bn);
789
- BN_clear_free(&bn);
791
+ BIGNUM* bn = BN_new();
792
+ BN_set_word(bn, x);
793
+ res = BN_cmp(bignum->bignum_, bn);
794
+ BN_clear_free(bn);
790
795
  } else {
791
796
  BigNum *bn = new BigNum(x);
792
- res = BN_cmp(&bignum->bignum_, &bn->bignum_);
797
+ res = BN_cmp(bignum->bignum_, bn->bignum_);
793
798
  }
794
799
 
795
800
  info.GetReturnValue().Set(Nan::New<Number>(res));
@@ -892,8 +897,8 @@ BigNum::Bop(Nan::NAN_METHOD_ARGS_TYPE info, int op)
892
897
  BigNum *bignum = Nan::ObjectWrap::Unwrap<BigNum>(info.This());
893
898
  BigNum *bn = Nan::ObjectWrap::Unwrap<BigNum>(info[0]->ToObject());
894
899
 
895
- bool bignumNegative = BN_is_negative(&bignum->bignum_);
896
- bool bnNegative = BN_is_negative(&bn->bignum_);
900
+ bool bignumNegative = BN_is_negative(bignum->bignum_);
901
+ bool bnNegative = BN_is_negative(bn->bignum_);
897
902
 
898
903
  BigNum *res = new BigNum();
899
904
 
@@ -901,8 +906,8 @@ BigNum::Bop(Nan::NAN_METHOD_ARGS_TYPE info, int op)
901
906
  // Portions Copyright (c) Agora S.A.
902
907
  // Licensed under the MIT License.
903
908
 
904
- int payloadSize = BN_bn2mpi(&bignum->bignum_, NULL);
905
- int maskSize = BN_bn2mpi(&bn->bignum_, NULL);
909
+ int payloadSize = BN_bn2mpi(bignum->bignum_, NULL);
910
+ int maskSize = BN_bn2mpi(bn->bignum_, NULL);
906
911
 
907
912
  uint32_t size = max(payloadSize, maskSize);
908
913
  int offset = abs(payloadSize - maskSize);
@@ -919,8 +924,8 @@ BigNum::Bop(Nan::NAN_METHOD_ARGS_TYPE info, int op)
919
924
  uint8_t* payload = (uint8_t*) calloc(size, sizeof(char));
920
925
  uint8_t* mask = (uint8_t*) calloc(size, sizeof(char));
921
926
 
922
- BN_bn2mpi(&bignum->bignum_, payload + payloadOffset);
923
- BN_bn2mpi(&bn->bignum_, mask + maskOffset);
927
+ BN_bn2mpi(bignum->bignum_, payload + payloadOffset);
928
+ BN_bn2mpi(bn->bignum_, mask + maskOffset);
924
929
 
925
930
  if (payloadSize < maskSize) {
926
931
  shiftSizeAndMSB(payload, mask, payloadOffset);
@@ -989,7 +994,7 @@ BigNum::Bop(Nan::NAN_METHOD_ARGS_TYPE info, int op)
989
994
  twos_complement2mpi(payload + BN_PAYLOAD_OFFSET, size - BN_PAYLOAD_OFFSET);
990
995
  }
991
996
 
992
- BN_mpi2bn(payload, size, &res->bignum_);
997
+ BN_mpi2bn(payload, size, res->bignum_);
993
998
 
994
999
  WRAP_RESULT(res, result);
995
1000
 
@@ -1021,7 +1026,7 @@ NAN_METHOD(BigNum::Binvertm)
1021
1026
 
1022
1027
  BigNum *bn = Nan::ObjectWrap::Unwrap<BigNum>(info[0]->ToObject());
1023
1028
  BigNum *res = new BigNum();
1024
- BN_mod_inverse(&res->bignum_, &bignum->bignum_, &bn->bignum_, ctx);
1029
+ BN_mod_inverse(res->bignum_, bignum->bignum_, bn->bignum_, ctx);
1025
1030
 
1026
1031
  WRAP_RESULT(res, result);
1027
1032
 
@@ -1042,7 +1047,7 @@ NAN_METHOD(BigNum::BitLength)
1042
1047
  {
1043
1048
  BigNum *bignum = Nan::ObjectWrap::Unwrap<BigNum>(info.This());
1044
1049
 
1045
- int size = BN_num_bits(&bignum->bignum_);
1050
+ int size = BN_num_bits(bignum->bignum_);
1046
1051
  Local<Value> result = Nan::New<Integer>(size);
1047
1052
 
1048
1053
  info.GetReturnValue().Set(result);
@@ -1056,7 +1061,7 @@ NAN_METHOD(BigNum::Bgcd)
1056
1061
  BigNum *bi = Nan::ObjectWrap::Unwrap<BigNum>(info[0]->ToObject());
1057
1062
  BigNum *res = new BigNum();
1058
1063
 
1059
- BN_gcd(&res->bignum_, &bignum->bignum_, &bi->bignum_, ctx);
1064
+ BN_gcd(res->bignum_, bignum->bignum_, bi->bignum_, ctx);
1060
1065
 
1061
1066
  WRAP_RESULT(res, result);
1062
1067
  info.GetReturnValue().Set(result);
@@ -1070,7 +1075,7 @@ NAN_METHOD(BigNum::Bjacobi)
1070
1075
  BigNum *bn_n = Nan::ObjectWrap::Unwrap<BigNum>(info[0]->ToObject());
1071
1076
  int res = 0;
1072
1077
 
1073
- if (BN_jacobi_priv(&bn_a->bignum_, &bn_n->bignum_, &res, ctx) == -1) {
1078
+ if (BN_jacobi_priv(bn_a->bignum_, bn_n->bignum_, &res, ctx) == -1) {
1074
1079
  Nan::ThrowError("Jacobi symbol calculation failed");
1075
1080
  return;
1076
1081
  }
@@ -1082,21 +1087,21 @@ NAN_METHOD(BigNum::Bsetcompact)
1082
1087
  {
1083
1088
  BigNum *bignum = Nan::ObjectWrap::Unwrap<BigNum>(info.This());
1084
1089
 
1085
- unsigned int nCompact = info[0]->ToUint32()->Value();
1090
+ unsigned int nCompact = Nan::To<uint32_t>(info[0]).FromJust();
1086
1091
  unsigned int nSize = nCompact >> 24;
1087
1092
  bool fNegative =(nCompact & 0x00800000) != 0;
1088
1093
  unsigned int nWord = nCompact & 0x007fffff;
1089
1094
  if (nSize <= 3)
1090
1095
  {
1091
1096
  nWord >>= 8*(3-nSize);
1092
- BN_set_word(&bignum->bignum_, nWord);
1097
+ BN_set_word(bignum->bignum_, nWord);
1093
1098
  }
1094
1099
  else
1095
1100
  {
1096
- BN_set_word(&bignum->bignum_, nWord);
1097
- BN_lshift(&bignum->bignum_, &bignum->bignum_, 8*(nSize-3));
1101
+ BN_set_word(bignum->bignum_, nWord);
1102
+ BN_lshift(bignum->bignum_, bignum->bignum_, 8*(nSize-3));
1098
1103
  }
1099
- BN_set_negative(&bignum->bignum_, fNegative);
1104
+ BN_set_negative(bignum->bignum_, fNegative);
1100
1105
 
1101
1106
  info.GetReturnValue().Set(info.This());
1102
1107
  }
package/binding.gyp CHANGED
@@ -82,16 +82,6 @@
82
82
  }
83
83
  ]
84
84
  ]
85
- }, {
86
- 'target_name': 'action_after_build',
87
- 'type': 'none',
88
- 'dependencies': [ '<(module_name)' ],
89
- 'copies': [
90
- {
91
- 'files': [ '<(PRODUCT_DIR)/<(module_name).node' ],
92
- 'destination': '<(module_path)'
93
- }
94
- ]
95
85
  }
96
86
  ]
97
- }
87
+ }
package/index.js CHANGED
@@ -1,7 +1,5 @@
1
- var binary = require('node-pre-gyp')
2
- var path = require('path')
3
- var binPath = binary.find(path.resolve(path.join(__dirname, 'package.json')))
4
- var bin = require(binPath)
1
+ var bin = require('bindings')('bignum')
2
+ var Buffer = require('safe-buffer').Buffer
5
3
  var BigNum = bin.BigNum
6
4
 
7
5
  module.exports = BigNum
@@ -28,7 +26,7 @@ BigNum.conditionArgs = function (num, base) {
28
26
  base: 2
29
27
  }
30
28
  }
31
- } else if (num.match(/e\-/)) { // negative exponent
29
+ } else if (num.match(/e-/)) { // negative exponent
32
30
  return {
33
31
  num: Math.floor(Number(num)).toString(),
34
32
  base: base || 10
@@ -257,9 +255,7 @@ BigNum.prototype.rand = function (to) {
257
255
  return this.brand0()
258
256
  }
259
257
  } else {
260
- var x = BigNum.isBigNum(to)
261
- ? to.sub(this)
262
- : BigNum(to).sub(this)
258
+ var x = BigNum.isBigNum(to) ? to.sub(this) : BigNum(to).sub(this)
263
259
  return x.brand0().add(this)
264
260
  }
265
261
  }
@@ -342,7 +338,7 @@ BigNum.prototype.toBuffer = function (opts) {
342
338
  var len = buf.length === 1 && buf[0] === 0 ? 0 : buf.length
343
339
  if (buf[0] & 0x80) len++
344
340
 
345
- var ret = new Buffer(4 + len)
341
+ var ret = Buffer.alloc(4 + len)
346
342
  if (len > 0) buf.copy(ret, 4 + (buf[0] & 0x80 ? 1 : 0))
347
343
  if (buf[0] & 0x80) ret[4] = 0
348
344
 
@@ -377,7 +373,7 @@ BigNum.prototype.toBuffer = function (opts) {
377
373
  var size = opts.size === 'auto' ? Math.ceil(hex.length / 2) : (opts.size || 1)
378
374
 
379
375
  len = Math.ceil(hex.length / (2 * size)) * size
380
- buf = new Buffer(len)
376
+ buf = Buffer.alloc(len)
381
377
 
382
378
  // zero-pad the hex string so the chunks are all `size` long
383
379
  while (hex.length < 2 * len) hex = '0' + hex
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bignum",
3
- "version": "0.12.5",
3
+ "version": "0.13.0",
4
4
  "description": "Arbitrary-precision integer arithmetic using OpenSSL",
5
5
  "main": "./index.js",
6
6
  "repository": {
@@ -22,18 +22,23 @@
22
22
  "url": "http://www.justmoon.net"
23
23
  },
24
24
  "dependencies": {
25
- "nan": "^2.3.4",
26
- "node-pre-gyp": "~0.6.28"
25
+ "bindings": "~1.3.0",
26
+ "nan": "~2.10.0",
27
+ "prebuild-install": "~4.0.0",
28
+ "safe-buffer": "~5.1.2"
27
29
  },
28
30
  "devDependencies": {
29
- "aws-sdk": "~2.4.0",
31
+ "prebuild": "~7.6.0",
32
+ "prebuild-ci": "~2.2.3",
30
33
  "put": "~0.0.5",
31
- "standard": "~7.1.2",
32
- "tap": "~5.7.2"
34
+ "standard": "~11.0.1",
35
+ "tap": "~12.0.1"
33
36
  },
34
37
  "scripts": {
35
- "install": "node-pre-gyp install --fallback-to-build",
36
- "test": "standard && tap test/*.js"
38
+ "install": "prebuild-install || node-gyp rebuild",
39
+ "rebuild": "prebuild --compile",
40
+ "prebuild": "prebuild --all --strip --verbose",
41
+ "test": "standard && tap --timeout 120 test/*.js && prebuild-ci"
37
42
  },
38
43
  "binary": {
39
44
  "host": "https://rvagg-node.s3-us-west-2.amazonaws.com",
package/.npmignore DELETED
@@ -1,14 +0,0 @@
1
- .lock-wscript
2
- .travis.yml
3
- appveyor.yml
4
- .dntrc
5
- .*.swp
6
- pre-gyp-publish.sh
7
- build
8
- node_modules
9
- coverage
10
- binding
11
- .nyc_output
12
- test
13
- examples
14
- docker