aboutsummaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/github.com/ethereum/serpent-go/serpent/examples/ecc/modexp.se
blob: 687b12a04ca41e568a8be42d3c5292ab7b418c28 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
def call(b, e, m):
    with o = 1:
        with bit = 2 ^ 255:
            while gt(bit, 0):
                # A touch of loop unrolling for 20% efficiency gain
                o = mulmod(mulmod(o, o, m), b ^ !(!(e & bit)), m)
                o = mulmod(mulmod(o, o, m), b ^ !(!(e & div(bit, 2))), m)
                o = mulmod(mulmod(o, o, m), b ^ !(!(e & div(bit, 4))), m)
                o = mulmod(mulmod(o, o, m), b ^ !(!(e & div(bit, 8))), m)
                bit = div(bit, 16)
            return(o)