@@ -705,6 +705,8 @@ func (c *bls12381G1Add) Run(input []byte) ([]byte, error) {
705
705
return nil , err
706
706
}
707
707
708
+ // No need to check the subgroup here, as specified by EIP-2537
709
+
708
710
// Compute r = p_0 + p_1
709
711
p0 .Add (p0 , p1 )
710
712
@@ -734,6 +736,11 @@ func (c *bls12381G1Mul) Run(input []byte) ([]byte, error) {
734
736
if p0 , err = decodePointG1 (input [:128 ]); err != nil {
735
737
return nil , err
736
738
}
739
+ // 'point is on curve' check already done,
740
+ // Here we need to apply subgroup checks.
741
+ if ! p0 .IsInSubGroup () {
742
+ return nil , errBLS12381G1PointSubgroup
743
+ }
737
744
// Decode scalar value
738
745
e := new (big.Int ).SetBytes (input [128 :])
739
746
@@ -787,6 +794,11 @@ func (c *bls12381G1MultiExp) Run(input []byte) ([]byte, error) {
787
794
if err != nil {
788
795
return nil , err
789
796
}
797
+ // 'point is on curve' check already done,
798
+ // Here we need to apply subgroup checks.
799
+ if ! p .IsInSubGroup () {
800
+ return nil , errBLS12381G1PointSubgroup
801
+ }
790
802
points [i ] = * p
791
803
// Decode scalar value
792
804
scalars [i ] = * new (fr.Element ).SetBytes (input [t1 :t2 ])
@@ -827,6 +839,8 @@ func (c *bls12381G2Add) Run(input []byte) ([]byte, error) {
827
839
return nil , err
828
840
}
829
841
842
+ // No need to check the subgroup here, as specified by EIP-2537
843
+
830
844
// Compute r = p_0 + p_1
831
845
r := new (bls12381.G2Affine )
832
846
r .Add (p0 , p1 )
@@ -857,6 +871,11 @@ func (c *bls12381G2Mul) Run(input []byte) ([]byte, error) {
857
871
if p0 , err = decodePointG2 (input [:256 ]); err != nil {
858
872
return nil , err
859
873
}
874
+ // 'point is on curve' check already done,
875
+ // Here we need to apply subgroup checks.
876
+ if ! p0 .IsInSubGroup () {
877
+ return nil , errBLS12381G2PointSubgroup
878
+ }
860
879
// Decode scalar value
861
880
e := new (big.Int ).SetBytes (input [256 :])
862
881
@@ -910,6 +929,11 @@ func (c *bls12381G2MultiExp) Run(input []byte) ([]byte, error) {
910
929
if err != nil {
911
930
return nil , err
912
931
}
932
+ // 'point is on curve' check already done,
933
+ // Here we need to apply subgroup checks.
934
+ if ! p .IsInSubGroup () {
935
+ return nil , errBLS12381G2PointSubgroup
936
+ }
913
937
points [i ] = * p
914
938
// Decode scalar value
915
939
scalars [i ] = * new (fr.Element ).SetBytes (input [t1 :t2 ])
0 commit comments