+#----- Built-in named curves and prime groups -------------------------------
+
+class _groupmap (object):
+ def __init__(me, map, nth):
+ me.map = map
+ me.nth = nth
+ me.i = [None] * (max(map.values()) + 1)
+ def __repr__(me):
+ return '{%s}' % ', '.join(['%r: %r' % (k, me[k]) for k in me])
+ def __contains__(me, k):
+ return k in me.map
+ def __getitem__(me, k):
+ i = me.map[k]
+ if me.i[i] is None:
+ me.i[i] = me.nth(i)
+ return me.i[i]
+ def __setitem__(me, k, v):
+ raise TypeError, "immutable object"
+ def __iter__(me):
+ return iter(me.map)
+ def keys(me):
+ return [k for k in me]
+ def values(me):
+ return [me[k] for k in me]
+eccurves = _groupmap(_base._eccurves, ECInfo._curven)
+primegroups = _groupmap(_base._pgroups, DHInfo._groupn)
+bingroups = _groupmap(_base._bingroups, BinDHInfo._groupn)
+
+#----- Prime number generation ----------------------------------------------
+
+class PrimeGenEventHandler (object):
+ def pg_begin(me, ev):
+ return me.pg_try(ev)
+ def pg_done(me, ev):
+ return PGEN_DONE
+ def pg_abort(me, ev):
+ return PGEN_TRY
+ def pg_fail(me, ev):
+ return PGEN_TRY
+ def pg_pass(me, ev):
+ return PGEN_TRY