/* --- Elliptic curve operations --- *
*
- * All operations (apart from @destroy@ and @in@) are guaranteed to be
- * performed on internal representations of points.
+ * All operations apart from @destroy@, @in@, and @compr@ are guaranteed to
+ * be performed on internal representations of points; @in@ and @compr@ will
+ * always be performed on external representations; @destroy@ might be
+ * performed on either.
*
* (Historical note. We used to guarantee that the second to @add@ and @mul@
* was the output of @in@ or @fix@, but this canonification turned out to
ec *(*sub)(ec_curve */*c*/, ec */*d*/, const ec */*p*/, const ec */*q*/);
ec *(*dbl)(ec_curve */*c*/, ec */*d*/, const ec */*p*/);
int (*check)(ec_curve */*c*/, const ec */*p*/);
+ int (*compr)(ec_curve */*c*/, const ec */*p*/);
} ec_ops;
#define EC_NAME(c) (c)->ops->name
#define EC_FIX(c, d, p) (c)->ops->fix((c), (d), (p))
#define EC_FIND(c, d, x) (c)->ops->find((c), (d), (x))
+#define EC_COMPR(c, d) (c)->ops->compr((c), (d))
#define EC_NEG(c, d, x) (c)->ops->neg((c), (d), (x))
#define EC_ADD(c, d, p, q) (c)->ops->add((c), (d), (p), (q))
#define EC_SUB(c, d, p, q) (c)->ops->sub((c), (d), (p), (q))