// Type E pairings.

// Requires:
// * param.h
#ifndef __PBC_E_PARAM_H__
#define __PBC_E_PARAM_H__

struct symtab_s;
int pbc_param_init_e(pbc_param_ptr par, struct symtab_s *tab);

/*@manual eparam
Generate type E pairing parameters and store them in 'p',
where the group order r is 'rbits' long, and the order of the base field q
is 'qbits' long. To be secure, generic discrete log algorithms must
be infeasible in groups of order r, and finite field discrete log algorithms
must be infeasible in finite fields of order q,
e.g. 'rbits' = 160, 'qbits' = 1024.

This pairing is just a curiosity: it can be implemented entirely in a field of
prime order, that is, only arithmetic modulo a prime is needed and there is
never a need to extend a field.

If discrete log in field extensions are found to be substantially easier to
solve than previously thought, or discrete log can be solved in elliptic curves
as easily as they can be in finite fields, this pairing type may become useful.
*/
void pbc_param_init_e_gen(pbc_param_t p, int rbits, int qbits);

#endif //__PBC_E_PARAM_H__