-EC_Point *
-mmul(c, ...)
- EC_Curve *c
- PREINIT:
- ec_mulfactor *v;
- size_t i, j, n;
- CODE:
- if (items < 3 || !(items & 1)) {
- croak("Usage: Catacomb::EC::Curve::mmul"
- "(c, p_0, x_0, p_1, x_1, ...");
- }
- n = (items - 1)/2;
- v = xmalloc(n * sizeof(mp_expfactor));
- for (i = 1, j = 0; i < items; i += 2, j++) {
- v[j].base = *(ec *)ptrfromsv(ST(i), "Catacomb::EC::Point", "p_i");
- v[j].exp = mp_fromsv(ST(i + 1), "x_i", "Catacomb::MP", 0, 0);
- }
- RETVAL = CREATE(RETVAL);
- EC_CREATE(RETVAL);
- ec_mmul(c, RETVAL, v, n);
- xfree(v);
- OUTPUT:
- RETVAL
-
-EC_Point *