+extern ec *ec_mul(ec_curve */*c*/, ec */*d*/, const ec */*p*/, mp */*n*/);
+extern ec *ec_imul(ec_curve */*c*/, ec */*d*/, const ec */*p*/, mp */*n*/);
+
+/* --- @ec_mmul@, @ec_immul@ --- *
+ *
+ * Arguments: @ec_curve *c@ = pointer to an elliptic curve
+ * @ec *d@ = pointer to the destination point
+ * @const ec_mulfactor *f@ = pointer to vector of factors
+ * @size_t n@ = number of factors
+ *
+ * Returns: The destination @d@.
+ *
+ * Use: Does simultaneous point multiplication. The @immul@ variant
+ * uses internal representations for arguments and result.
+ */
+
+extern ec *ec_mmul(ec_curve */*c*/, ec */*d*/,
+ const ec_mulfactor */*f*/, size_t /*n*/);
+extern ec *ec_immul(ec_curve */*c*/, ec */*d*/,
+ const ec_mulfactor */*f*/, size_t /*n*/);
+
+/*----- Standard curve operations -----------------------------------------*/
+
+/* --- @ec_idin@, @ec_idout@ --- *
+ *
+ * Arguments: @ec_curve *c@ = pointer to an elliptic curve
+ * @ec *d@ = pointer to the destination
+ * @const ec *p@ = pointer to a source point
+ *
+ * Returns: The destination @d@.
+ *
+ * Use: An identity operation if your curve has no internal
+ * representation. (The field internal representation is still
+ * used.)
+ */
+
+extern ec *ec_idin(ec_curve */*c*/, ec */*d*/, const ec */*p*/);
+extern ec *ec_idout(ec_curve */*c*/, ec */*d*/, const ec */*p*/);
+
+/* --- @ec_projin@, @ec_projout@ --- *
+ *
+ * Arguments: @ec_curve *c@ = pointer to an elliptic curve
+ * @ec *d@ = pointer to the destination
+ * @const ec *p@ = pointer to a source point
+ *
+ * Returns: The destination @d@.
+ *
+ * Use: Conversion functions if your curve operations use a
+ * projective representation.
+ */
+
+extern ec *ec_projin(ec_curve */*c*/, ec */*d*/, const ec */*p*/);
+extern ec *ec_projout(ec_curve */*c*/, ec */*d*/, const ec */*p*/);
+
+/* --- @ec_stdsub@ --- *
+ *
+ * Arguments: @ec_curve *c@ = pointer to an elliptic curve
+ * @ec *d@ = pointer to the destination
+ * @const ec *p, *q@ = the operand points
+ *
+ * Returns: The destination @d@.
+ *
+ * Use: Standard point subtraction operation, in terms of negation
+ * and addition. This isn't as efficient as a ready-made
+ * subtraction operator.
+ */
+
+extern ec *ec_stdsub(ec_curve */*c*/, ec */*d*/,
+ const ec */*p*/, const ec */*q*/);