| 12345678910111213141516171819202122232425262728 |
- # Oblivious Pseudo-Random function
- # Constructing an OPRF on elliptic curves is possible if the curve is a
- # prime-order group.
- Fp = GF(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001)
- input_block = Fp(42)
- # Alice generates a random blinding factor r, and multiplies her input block
- # with this r
- r = Fp.random_element()
- alpha = input_block * r
- # She sends alpha over to Bob, who has the key k and wants to keep it secret,
- # so Bob calculates beta from alpha and the key
- #k = Fp.random_element()
- k = Fp(69420)
- beta = alpha * k
- # And then sends back beta to Alice, who can then unblind the result, by
- # multiplying beta with 1/r
- output_block = beta * (1 / r)
- # If we expand the last calculation we can see how r is eliminated by 1/r
- # output_block = input_block * r * k * (1/r)
- # And by cancelling out r and 1/r we get:
- #output_block = input_block * k
- print(output_block)
|