void zzn3_inv(_MIPD_ zzn3 *w) { #ifdef MR_OS_THREADS miracl *mr_mip=get_mip(); #endif if (mr_mip->ERNUM) return; MR_IN(187) nres_modmult(_MIPP_ w->a,w->a,mr_mip->w1); nres_modmult(_MIPP_ w->b,w->c,mr_mip->w2); nres_premult(_MIPP_ mr_mip->w2,mr_mip->cnr,mr_mip->w2); nres_modsub(_MIPP_ mr_mip->w1,mr_mip->w2,mr_mip->w3); nres_modmult(_MIPP_ w->c,w->c,mr_mip->w1); nres_modmult(_MIPP_ w->a,w->b,mr_mip->w2); nres_premult(_MIPP_ mr_mip->w1,mr_mip->cnr,mr_mip->w1); nres_modsub(_MIPP_ mr_mip->w2,mr_mip->w1,mr_mip->w4); nres_negate(_MIPP_ mr_mip->w4,mr_mip->w4); nres_modmult(_MIPP_ w->b,w->b,mr_mip->w1); nres_modmult(_MIPP_ w->a,w->c,mr_mip->w2); nres_modsub(_MIPP_ mr_mip->w1,mr_mip->w2,mr_mip->w5); nres_modmult(_MIPP_ w->b,mr_mip->w5,mr_mip->w1); nres_modmult(_MIPP_ w->c,mr_mip->w4,mr_mip->w2); nres_modadd(_MIPP_ mr_mip->w2,mr_mip->w1,mr_mip->w2); nres_premult(_MIPP_ mr_mip->w2,mr_mip->cnr,mr_mip->w2); nres_modmult(_MIPP_ w->a,mr_mip->w3,mr_mip->w1); nres_modadd(_MIPP_ mr_mip->w1,mr_mip->w2,mr_mip->w1); copy(mr_mip->w3,w->a); copy(mr_mip->w4,w->b); copy(mr_mip->w5,w->c); redc(_MIPP_ mr_mip->w1,mr_mip->w6); invmodp(_MIPP_ mr_mip->w6,mr_mip->modulus,mr_mip->w6); nres(_MIPP_ mr_mip->w6,mr_mip->w6); nres_modmult(_MIPP_ w->a,mr_mip->w6,w->a); nres_modmult(_MIPP_ w->b,mr_mip->w6,w->b); nres_modmult(_MIPP_ w->c,mr_mip->w6,w->c); MR_OUT }
/* void zzn2_print(_MIPD_ char *label, zzn2 *x) { char s1[1024], s2[1024]; big a, b; #ifdef MR_STATIC char mem_big[MR_BIG_RESERVE(2)]; memset(mem_big, 0, MR_BIG_RESERVE(2)); a=mirvar_mem(_MIPP_ mem_big,0); b=mirvar_mem(_MIPP_ mem_big,1); #else a = mirvar(_MIPP_ 0); b = mirvar(_MIPP_ 0); #endif redc(_MIPP_ x->a, a); otstr(_MIPP_ a, s1); redc(_MIPP_ x->b, b); otstr(_MIPP_ b, s2); printf("%s: [%s,%s]\n", label, s1, s2); #ifndef MR_STATIC mr_free(a); mr_free(b); #endif } static void nres_print(_MIPD_ char *label, big x) { char s[1024]; big a; #ifdef MR_STATIC char mem_big[MR_BIG_RESERVE(1)]; memset(mem_big, 0, MR_BIG_RESERVE(1)); a=mirvar_mem(_MIPP_ mem_big,0); #else a = mirvar(_MIPP_ 0); #endif redc(_MIPP_ x, a); otstr(_MIPP_ a, s); printf("%s: %s\n", label, s); #ifndef MR_STATIC mr_free(a); #endif } */ void zzn2_inv(_MIPD_ zzn2 *w) { #ifdef MR_OS_THREADS miracl *mr_mip=get_mip(); #endif if (mr_mip->ERNUM) return; MR_IN(163) nres_modmult(_MIPP_ w->a,w->a,mr_mip->w1); nres_modmult(_MIPP_ w->b,w->b,mr_mip->w2); nres_modadd(_MIPP_ mr_mip->w1,mr_mip->w2,mr_mip->w1); if (mr_mip->qnr==-2) nres_modadd(_MIPP_ mr_mip->w1,mr_mip->w2,mr_mip->w1); redc(_MIPP_ mr_mip->w1,mr_mip->w6); invmodp(_MIPP_ mr_mip->w6,mr_mip->modulus,mr_mip->w6); nres(_MIPP_ mr_mip->w6,mr_mip->w6); nres_modmult(_MIPP_ w->a,mr_mip->w6,w->a); nres_negate(_MIPP_ mr_mip->w6,mr_mip->w6); nres_modmult(_MIPP_ w->b,mr_mip->w6,w->b); MR_OUT }