Next: , Previous: , Up: Preface  


8 I/O

G2HEC exports several functions to output of polynomials, curves and divisors. They might be more useful for mathematics research on genus 2 curves over finite fields than for implementation of cryptographic protocols. For sake of completeness, we briefly introduce them here.


void print_poly(poly_t& poly, std::ostream *s):


directs a natural representation of polynomial poly to s.


For example, calling print_poly(f, cout) will display in the standard output

x^5 + 3*x^2 + x

if f is a poly_t object representing f(x) = x^5 + 3 x^2 + x.


Calling cout << curve; will display in the standard output something like

Curve: y^2 + h(x)*y = f(x)
       h(x) = 0
       f(x) = x^5 + 1
       Genus 2 curve is nonsingular

if curve is a valid genus 2 curve, or

Curve: y^2 + h(x)*y = f(x)
       h(x) = 0
       f(x) = x^2
       Curve is singular, or not genus 2, or f(x) is not monic

if curve is not valid.


Calling cout << divisor; will display in the standard output something like

###
Divisor [u(x), v(x)] for Jacobian group of curve y^2 + h(x)*y = f(x).
Curve: y^2 + h(x)*y = f(x)
       h(x) = 0
       f(x) = x^5 + 1
       Genus 2 curve is nonsingular
[u(x), v(x)]:
       u(x) = 1
       v(x) = 0
       Divisor is valid
###

if divisor is a valid divisor, or

###
Divisor [u(x), v(x)] for Jacobian group of curve y^2 + h(x)*y = f(x).
Curve: y^2 + h(x)*y = f(x)
       h(x) = 0
       f(x) = x^5 + 1
       Genus 2 curve is nonsingular
[u(x), v(x)]:
       u(x) = 1
       v(x) = x
       Divisor is invalid
###

if divisor is not valid.