@@ -473,6 +473,32 @@ internal static Scalar8x32 CreateRandom(TestRNG rng)
473
473
} while ( true ) ;
474
474
}
475
475
476
+ /// <summary>
477
+ /// random_scalar_order
478
+ /// </summary>
479
+ private static Scalar8x32 RandomScalarOrder ( TestRNG rng )
480
+ {
481
+ do
482
+ {
483
+ byte [ ] b32 = new byte [ 32 ] ;
484
+ rng . Rand256 ( b32 ) ;
485
+ Scalar8x32 num = new ( b32 , out bool overflow ) ;
486
+ if ( ! overflow && ! num . IsZero )
487
+ {
488
+ return num ;
489
+ }
490
+ } while ( true ) ;
491
+ }
492
+
493
+ /// <summary>
494
+ /// random_scalar_order_b32
495
+ /// </summary>
496
+ private static byte [ ] RandomScalarOrderB32 ( TestRNG rng )
497
+ {
498
+ Scalar8x32 num = RandomScalarOrder ( rng ) ;
499
+ return num . ToByteArray ( ) ;
500
+ }
501
+
476
502
// scalar_test(void)
477
503
private static unsafe void ScalarTest ( TestRNG rng )
478
504
{
@@ -622,6 +648,27 @@ private static unsafe void ScalarTest(TestRNG rng)
622
648
}
623
649
}
624
650
651
+
652
+ // run_scalar_set_b32_seckey_tests
653
+ private static void SetB32SeckeyTests ( TestRNG rng )
654
+ {
655
+ // Usually set_b32 and set_b32_seckey give the same result
656
+ Span < byte > b32 = RandomScalarOrderB32 ( rng ) ;
657
+
658
+ Scalar8x32 s1 = new ( b32 , out _ ) ;
659
+ bool b = Scalar8x32 . TrySetPrivateKey ( b32 , out Scalar8x32 s2 ) ;
660
+ Assert . True ( b ) ;
661
+ Assert . True ( s1 . Equals ( s2 ) ) ;
662
+
663
+ b32 . Clear ( ) ; // b32.Fill(0);
664
+ b = Scalar8x32 . TrySetPrivateKey ( b32 , out _ ) ;
665
+ Assert . False ( b ) ;
666
+
667
+ b32 . Fill ( 0xff ) ;
668
+ b = Scalar8x32 . TrySetPrivateKey ( b32 , out _ ) ;
669
+ Assert . False ( b ) ;
670
+ }
671
+
625
672
[ Fact ]
626
673
public void Libsecp256k1Tests ( ) // run_scalar_tests
627
674
{
@@ -633,6 +680,11 @@ public void Libsecp256k1Tests() // run_scalar_tests
633
680
ScalarTest ( rng ) ;
634
681
}
635
682
683
+ for ( int i = 0 ; i < Count ; i ++ )
684
+ {
685
+ SetB32SeckeyTests ( rng ) ;
686
+ }
687
+
636
688
// Check that the scalar constants secp256k1_scalar_zero and
637
689
// secp256k1_scalar_one contain the expected values.
638
690
// Note: these are tested in StaticPropTest()
0 commit comments