#ifndef SIGN_H
#define SIGN_H

#include <stdint.h>
#include "poly.h"
#include "polz.h"

typedef struct {
  poly t1;
  polz t2;
  poly tprime1;
  polz tprime2;
  poly c;
  poly z[3];
  poly zprime[3];
  poly z1[3];
  poly z5[3];
  polz zs[6];
} signature;

int sign(signature *sig,
          const poly *a1,
          const poly *a2,
          const polx *a3,
          const polx a[2],
          const polx b[2],
          const polx s[4],
          const int32_t id[3]);

int verify(const signature *sig,
           const poly *a1,
           const poly *a2,
           const polx *a3,
           const polx a[2],
           const polx b[2],
           const polz *u);

#endif
