As I am reading the Monero source code to understand it, I am not getting one thing, the confusion is caused due to crypto-ops.c,ge.h,rctOps.cpp.

Monero uses keccak hash that is 32 bytes in size, it uses (mod)q where size of q is 32 bytes, and it is the size of the group, so every point in the elliptic curve (x,y) is of (32,32) bytes.

Now my confusion is with ge.h where it has a struct that uses 40 bytes for storage. In one word, what do the structs in ge.h do?

1 Answer 1


In one word, what do the structs in ge.h do?

Not in one word, but the structs defined in ge.h are used to store different representations of a group element (aka a point on an elliptic curve):

ge means group element.
Here the group is the set of pairs (x,y) of field elements (see fe.h)
satisfying -x^2 + y^2 = 1 + d x^2y^2
where d = -121665/121666.
  ge_p2 (projective): (X:Y:Z) satisfying x=X/Z, y=Y/Z
  ge_p3 (extended): (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT
  ge_p1p1 (completed): ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T
  ge_precomp (Duif): (y+x,y-x,2dxy)


Monero uses keccak...

Which has nothing to do with elliptic curves (or by extension groups); keccak is a hash algorithm.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.