This repository has been archived by the owner on Jan 5, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapi.go
62 lines (57 loc) · 1.45 KB
/
api.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package eip
import "errors"
const (
// api operations
OPERATION_G1_ADD = 0x01
OPERATION_G1_MUL = 0x02
OPERATION_G1_MULTIEXP = 0x03
OPERATION_G2_ADD = 0x04
OPERATION_G2_MUL = 0x05
OPERATION_G2_MULTIEXP = 0x06
OPERATION_BLS12PAIR = 0x07
OPERATION_BNPAIR = 0x08
OPERATION_MNT4PAIR = 0x09
OPERATION_MNT6PAIR = 0x0a
// flags
USE_4LIMBS_FOR_LOWER_LIMBS = true
TWIST_M, TWIST_D = 0x01, 0x02
NEGATIVE_EXP, POSITIVE_EXP = 0x01, 0x00
BOOLEAN_FALSE, BOOLEAN_TRUE = 0x00, 0x01
)
type API struct{}
func newAPI() *API {
return &API{}
}
func (api *API) Run(opType int, in []byte) ([]byte, error) {
decoder := newDecoder(in)
var runner runner
var err error
switch opType {
case OPERATION_G1_ADD:
runner, err = decoder.g1AddRunner()
case OPERATION_G1_MUL:
runner, err = decoder.g1MulRunner()
case OPERATION_G1_MULTIEXP:
runner, err = decoder.g1MultiExpRunner()
case OPERATION_G2_ADD:
runner, err = decoder.g2AddRunner()
case OPERATION_G2_MUL:
runner, err = decoder.g2MulRunner()
case OPERATION_G2_MULTIEXP:
runner, err = decoder.g2MultiExpRunner()
case OPERATION_BLS12PAIR:
runner, err = decoder.blsRunner()
case OPERATION_BNPAIR:
runner, err = decoder.bnRunner()
case OPERATION_MNT4PAIR:
runner, err = decoder.mnt4Runner()
case OPERATION_MNT6PAIR:
runner, err = decoder.mnt6Runner()
default:
err = errors.New(ERR_UNKNOWN_OPERATION)
}
if err != nil {
return nil, err
}
return runner.run()
}