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?

New contributor
Hrt is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.

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

Hrt is a new contributor. Be nice, and check out our Code of Conduct.

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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