@@ -43,6 +43,19 @@ export type SignatureCoder<Fp2> = {
43
43
toHex ( point : ProjPointType < Fp2 > ) : string ;
44
44
} ;
45
45
46
+ type Fp2Bls < Fp , Fp2 > = IField < Fp2 > & {
47
+ reim : ( num : Fp2 ) => { re : Fp ; im : Fp } ;
48
+ multiplyByB : ( num : Fp2 ) => Fp2 ;
49
+ frobeniusMap ( num : Fp2 , power : number ) : Fp2 ;
50
+ } ;
51
+
52
+ type Fp12Bls < Fp2 , Fp12 > = IField < Fp12 > & {
53
+ frobeniusMap ( num : Fp12 , power : number ) : Fp12 ;
54
+ multiplyBy014 ( num : Fp12 , o0 : Fp2 , o1 : Fp2 , o4 : Fp2 ) : Fp12 ;
55
+ conjugate ( num : Fp12 ) : Fp12 ;
56
+ finalExponentiate ( num : Fp12 ) : Fp12 ;
57
+ } ;
58
+
46
59
export type CurveType < Fp , Fp2 , Fp6 , Fp12 > = {
47
60
G1 : Omit < CurvePointsType < Fp > , 'n' > & {
48
61
ShortSignature : SignatureCoder < Fp > ;
@@ -57,18 +70,9 @@ export type CurveType<Fp, Fp2, Fp6, Fp12> = {
57
70
fields : {
58
71
Fp : IField < Fp > ;
59
72
Fr : IField < bigint > ;
60
- Fp2 : IField < Fp2 > & {
61
- reim : ( num : Fp2 ) => { re : bigint ; im : bigint } ;
62
- multiplyByB : ( num : Fp2 ) => Fp2 ;
63
- frobeniusMap ( num : Fp2 , power : number ) : Fp2 ;
64
- } ;
73
+ Fp2 : Fp2Bls < Fp , Fp2 > ;
65
74
Fp6 : IField < Fp6 > ;
66
- Fp12 : IField < Fp12 > & {
67
- frobeniusMap ( num : Fp12 , power : number ) : Fp12 ;
68
- multiplyBy014 ( num : Fp12 , o0 : Fp2 , o1 : Fp2 , o4 : Fp2 ) : Fp12 ;
69
- conjugate ( num : Fp12 ) : Fp12 ;
70
- finalExponentiate ( num : Fp12 ) : Fp12 ;
71
- } ;
75
+ Fp12 : Fp12Bls < Fp2 , Fp12 > ;
72
76
} ;
73
77
params : {
74
78
x : bigint ;
@@ -134,9 +138,9 @@ export type CurveFn<Fp, Fp2, Fp6, Fp12> = {
134
138
} ;
135
139
fields : {
136
140
Fp : IField < Fp > ;
137
- Fp2 : IField < Fp2 > ;
141
+ Fp2 : Fp2Bls < Fp , Fp2 > ;
138
142
Fp6 : IField < Fp6 > ;
139
- Fp12 : IField < Fp12 > ;
143
+ Fp12 : Fp12Bls < Fp2 , Fp12 > ;
140
144
Fr : IField < bigint > ;
141
145
} ;
142
146
utils : {
0 commit comments