~mdw
/
catacomb-python
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
t/t-algorithms.py: Add a simple test for `Keccak1600.copy'.
[catacomb-python]
/
ec.c
diff --git
a/ec.c
b/ec.c
index
cfe785a
..
184dc9e
100644
(file)
--- a/
ec.c
+++ b/
ec.c
@@
-252,7
+252,7
@@
static PyObject *epmeth_tobuf(PyObject *me, PyObject *arg)
if (EC_ATINF(&p))
n = 2;
else
if (EC_ATINF(&p))
n = 2;
else
- n = mp_octets(p.x) + mp_octets(p.y) +
4
;
+ n = mp_octets(p.x) + mp_octets(p.y) +
6
;
rc = bytestring_pywrap(0, n);
buf_init(&b, PyString_AS_STRING(rc), n);
buf_putec(&b, &p);
rc = bytestring_pywrap(0, n);
buf_init(&b, PyString_AS_STRING(rc), n);
buf_putec(&b, &p);
@@
-292,9
+292,9
@@
static PyObject *epmeth_ec2osp(PyObject *me, PyObject *arg, PyObject *kw)
ec pp = EC_INIT;
unsigned f = EC_EXPLY;
int len;
ec pp = EC_INIT;
unsigned f = EC_EXPLY;
int len;
-
char *
kwlist[] = { "flags", 0 };
+
static const char *const
kwlist[] = { "flags", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:ec2osp",
kwlist
,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:ec2osp",
KWLIST
,
convuint, &f))
return (0);
len = c->f->noctets * 2 + 1;
convuint, &f))
return (0);
len = c->f->noctets * 2 + 1;
@@
-453,7
+453,7
@@
static int ecptxl_1(ec_curve *c, ec *p, PyObject *x)
getecptout(p, x);
goto fix;
} else if (PyString_Check(x)) {
getecptout(p, x);
goto fix;
} else if (PyString_Check(x)) {
- if (PyObject_AsReadBuffer(x, &q,
0
))
+ if (PyObject_AsReadBuffer(x, &q,
&n
))
goto end;
qd.p = q;
qd.e = 0;
goto end;
qd.p = q;
qd.e = 0;
@@
-465,7
+465,7
@@
static int ecptxl_1(ec_curve *c, ec *p, PyObject *x)
if (!EC_FIND(c, p, xx)) VALERR("not on the curve");
} else if (PySequence_Check(x)) {
t = x; x = 0;
if (!EC_FIND(c, p, xx)) VALERR("not on the curve");
} else if (PySequence_Check(x)) {
t = x; x = 0;
- n = PySequence_Size(t);
+ n = PySequence_Size(t);
if (n < 0) goto end;
if (n != 2 && (n != 3 || !c))
TYERR("want sequence of two or three items");
if ((x = PySequence_GetItem(t, 0)) == 0 ||
if (n != 2 && (n != 3 || !c))
TYERR("want sequence of two or three items");
if ((x = PySequence_GetItem(t, 0)) == 0 ||
@@
-473,6
+473,7
@@
static int ecptxl_1(ec_curve *c, ec *p, PyObject *x)
(n == 3 && (z = PySequence_GetItem(t, 2)) == 0))
goto end;
rc = (n == 2) ? ecptxl_2(c, p, x, y) : ecptxl_3(c, p, x, y, z);
(n == 3 && (z = PySequence_GetItem(t, 2)) == 0))
goto end;
rc = (n == 2) ? ecptxl_2(c, p, x, y) : ecptxl_3(c, p, x, y, z);
+ goto end;
} else
TYERR("can't convert to curve point");
goto ok;
} else
TYERR("can't convert to curve point");
goto ok;
@@
-501,14
+502,14
@@
static PyObject *ecptnc_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
PyObject *x = 0, *y = 0, *z = 0;
ec p = EC_INIT;
{
PyObject *x = 0, *y = 0, *z = 0;
ec p = EC_INIT;
-
char *
kwlist[] = { "x", "y", 0 };
+
static const char *const
kwlist[] = { "x", "y", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "|OO:new",
kwlist
, &x, &y) ||
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "|OO:new",
KWLIST
, &x, &y) ||
ecptxl(0, &p, x, y, z))
goto end;
return (ecpt_pywrapout(ty, &p));
end:
ecptxl(0, &p, x, y, z))
goto end;
return (ecpt_pywrapout(ty, &p));
end:
-
EC_DESTROY(&p
);
+
mp_drop(p.x); mp_drop(p.y); mp_drop(p.z
);
return (0);
}
return (0);
}
@@
-542,15
+543,15
@@
static PyObject *ecpt_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
PyObject *x = 0, *y = 0, *z = 0;
ec p = EC_INIT;
{
PyObject *x = 0, *y = 0, *z = 0;
ec p = EC_INIT;
-
char *
kwlist[] = { "x", "y", "z", 0 };
+
static const char *const
kwlist[] = { "x", "y", "z", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "|OOO:new",
kwlist
,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "|OOO:new",
KWLIST
,
&x, &y, &z) ||
ecptxl(ECCURVE_C(ty), &p, x, y, z))
goto end;
return (ecpt_pywrap((PyObject *)ty, &p));
end:
&x, &y, &z) ||
ecptxl(ECCURVE_C(ty), &p, x, y, z))
goto end;
return (ecpt_pywrap((PyObject *)ty, &p));
end:
-
EC_DESTROY(&p
);
+
mp_drop(p.x); mp_drop(p.y); mp_drop(p.z
);
return (0);
}
return (0);
}
@@
-639,7
+640,9
@@
static PyTypeObject ecpt_pytype_skel = {
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
-"Elliptic curve points, not associated with any curve.",
+"ECPt([X, [Y]]): elliptic curve points, not associated with any curve.\n\
+ X alone may be None, an existing point, a string 'X, Y', an\n\
+ x-coordinate, or a pair (X, Y); X and Y should be a coordinate pair.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
@@
-861,9
+864,9
@@
static PyObject *meth__ECPtCurve_os2ecp(PyObject *me,
ec_curve *cc;
unsigned f = EC_XONLY | EC_LSB | EC_SORT | EC_EXPLY;
ec pp = EC_INIT;
ec_curve *cc;
unsigned f = EC_XONLY | EC_LSB | EC_SORT | EC_EXPLY;
ec pp = EC_INIT;
-
char *
kwlist[] = { "class", "buf", "flags", 0 };
+
static const char *const
kwlist[] = { "class", "buf", "flags", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "Os#|O&:os2ecp",
kwlist
,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "Os#|O&:os2ecp",
KWLIST
,
&me, &p, &len, convuint, &f))
return (0);
buf_init(&b, p, len);
&me, &p, &len, convuint, &f))
return (0);
buf_init(&b, p, len);
@@
-939,11
+942,11
@@
end:
static PyObject *ecmeth_rand(PyObject *me, PyObject *arg, PyObject *kw)
{
static PyObject *ecmeth_rand(PyObject *me, PyObject *arg, PyObject *kw)
{
-
char *
kwlist[] = { "rng", 0 };
+
static const char *const
kwlist[] = { "rng", 0 };
grand *r = &rand_global;
ec p = EC_INIT;
grand *r = &rand_global;
ec p = EC_INIT;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:rand",
kwlist
,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:rand",
KWLIST
,
convgrand, &r))
return (0);
ec_rand(ECCURVE_C(me), &p, r);
convgrand, &r))
return (0);
ec_rand(ECCURVE_C(me), &p, r);
@@
-999,10
+1002,10
@@
static PyObject *eccurve_pynew(PyTypeObject *ty,
{
PyObject *fobj;
PyObject *cobj = 0;
{
PyObject *fobj;
PyObject *cobj = 0;
-
char *
kwlist[] = { "field", "a", "b", 0 };
+
static const char *const
kwlist[] = { "field", "a", "b", 0 };
mp *aa = 0, *bb = 0;
mp *aa = 0, *bb = 0;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!O&O&",
kwlist
,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!O&O&",
KWLIST
,
field_pytype, &fobj,
convmp, &aa, convmp, &bb))
goto end;
field_pytype, &fobj,
convmp, &aa, convmp, &bb))
goto end;
@@
-1063,7
+1066,7
@@
static PyMethodDef eccurve_pymethods[] = {
METH (mmul, "\
E.mmul([(P0, N0), (P1, N1), ...]) = N0 P0 + N1 P1 + ...")
METH (find, "E.find(X) -> P")
METH (mmul, "\
E.mmul([(P0, N0), (P1, N1), ...]) = N0 P0 + N1 P1 + ...")
METH (find, "E.find(X) -> P")
- KWMETH(rand, "E.rand(
rng = rand) ->
P")
+ KWMETH(rand, "E.rand(
[rng = rand]) ->
P")
#undef METHNAME
{ 0 }
};
#undef METHNAME
{ 0 }
};
@@
-1093,7
+1096,7
@@
static PyTypeObject eccurve_pytype_skel = {
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
-
"An elliptic curve. Abstract class.",
+"An elliptic curve. Abstract class.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
@@
-1147,7
+1150,8
@@
static PyTypeObject ecprimecurve_pytype_skel = {
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
- "An elliptic curve over a prime field. Use ecprimeprojcurve.",
+"ECPrimeCurve(FIELD, A, B): an elliptic curve over a prime field.\n\
+ Use ECPrimeProjCurve instead.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
@@
-1201,7
+1205,8
@@
static PyTypeObject ecprimeprojcurve_pytype_skel = {
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
- "An elliptic curve over a prime field, using projective coordinates.",
+"ECPrimeProjCurve(FIELD, A, B): an elliptic curve over a prime field\n\
+ using projective coordinates.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
@@
-1255,7
+1260,8
@@
static PyTypeObject ecbincurve_pytype_skel = {
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
- "An elliptic curve over a binary field. Use ecbinprojcurve.",
+"ECBinCurve(FIELD, A, B): an elliptic curve over a binary field.\n\
+ Use ECBinProjCurve instead.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
@@
-1309,7
+1315,8
@@
static PyTypeObject ecbinprojcurve_pytype_skel = {
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
- "An elliptic curve over a binary field, using projective coordinates.",
+"ECBinProjCurve(FIELD, A, B): an elliptic curve over a binary field,\n\
+ using projective coordinates.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
@@
-1370,10
+1377,10
@@
static PyObject *ecinfo_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
ec_info ei = { 0 };
PyObject *e, *g;
{
ec_info ei = { 0 };
PyObject *e, *g;
-
char *
kwlist[] = { "curve", "G", "r", "h", 0 };
+
static const char *const
kwlist[] = { "curve", "G", "r", "h", 0 };
ecinfo_pyobj *rc = 0;
ecinfo_pyobj *rc = 0;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!O!O&O&:new",
kwlist
,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!O!O&O&:new",
KWLIST
,
eccurve_pytype, &e, ecpt_pytype, &g,
convmp, &ei.r, convmp, &ei.h))
goto end;
eccurve_pytype, &e, ecpt_pytype, &g,
convmp, &ei.r, convmp, &ei.h))
goto end;
@@
-1441,11
+1448,11
@@
end:
static PyObject *eimeth_check(PyObject *me, PyObject *arg, PyObject *kw)
{
static PyObject *eimeth_check(PyObject *me, PyObject *arg, PyObject *kw)
{
-
char *
kwlist[] = { "rng", 0 };
+
static const char *const
kwlist[] = { "rng", 0 };
grand *r = &rand_global;
const char *p;
grand *r = &rand_global;
const char *p;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:check",
kwlist
,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:check",
KWLIST
,
convgrand, &r))
goto end;
if ((p = ec_checkinfo(ECINFO_EI(me), r)) != 0)
convgrand, &r))
goto end;
if ((p = ec_checkinfo(ECINFO_EI(me), r)) != 0)
@@
-1484,7
+1491,7
@@
static PyGetSetDef ecinfo_pygetset[] = {
static PyMethodDef ecinfo_pymethods[] = {
#define METHNAME(name) eimeth_##name
static PyMethodDef ecinfo_pymethods[] = {
#define METHNAME(name) eimeth_##name
- KWMETH(check, "I.check() -> None")
+ KWMETH(check, "I.check(
[rng = rand]
) -> None")
#undef METHNAME
{ 0 }
};
#undef METHNAME
{ 0 }
};
@@
-1514,7
+1521,7
@@
static PyTypeObject ecinfo_pytype_skel = {
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
-
"E
lliptic curve domain parameters.",
+
"ECInfo(CURVE, G, R, H): e
lliptic curve domain parameters.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
0, /* @tp_traverse@ */
0, /* @tp_clear@ */