#include "os.h"
#include <mp.h>
#include <libsec.h>

EGpub*
egpuballoc(void)
{
       EGpub *eg;

       eg = mallocz(sizeof(*eg), 1);
       if(eg == nil)
               sysfatal("egpuballoc");
       return eg;
}

void
egpubfree(EGpub *eg)
{
       if(eg == nil)
               return;
       mpfree(eg->p);
       mpfree(eg->alpha);
       mpfree(eg->key);
       free(eg);
}


EGpriv*
egprivalloc(void)
{
       EGpriv *eg;

       eg = mallocz(sizeof(*eg), 1);
       if(eg == nil)
               sysfatal("egprivalloc");
       return eg;
}

void
egprivfree(EGpriv *eg)
{
       if(eg == nil)
               return;
       mpfree(eg->pub.p);
       mpfree(eg->pub.alpha);
       mpfree(eg->pub.key);
       mpfree(eg->secret);
       free(eg);
}

EGsig*
egsigalloc(void)
{
       EGsig *eg;

       eg = mallocz(sizeof(*eg), 1);
       if(eg == nil)
               sysfatal("egsigalloc");
       return eg;
}

void
egsigfree(EGsig *eg)
{
       if(eg == nil)
               return;
       mpfree(eg->r);
       mpfree(eg->s);
       free(eg);
}