a
This commit is contained in:
28
libsec/egdecrypt.c
Normal file
28
libsec/egdecrypt.c
Normal file
@ -0,0 +1,28 @@
|
||||
#include "os.h"
|
||||
#include <mp.h>
|
||||
#include <libsec.h>
|
||||
|
||||
mpint*
|
||||
egdecrypt(EGpriv *priv, mpint *in, mpint *out)
|
||||
{
|
||||
EGpub *pub = &priv->pub;
|
||||
mpint *gamma, *delta;
|
||||
mpint *p = pub->p;
|
||||
int plen = mpsignif(p)+1;
|
||||
int shift = ((plen+Dbits-1)/Dbits)*Dbits;
|
||||
|
||||
if(out == nil)
|
||||
out = mpnew(0);
|
||||
gamma = mpnew(0);
|
||||
delta = mpnew(0);
|
||||
mpright(in, shift, gamma);
|
||||
mpleft(gamma, shift, delta);
|
||||
mpsub(in, delta, delta);
|
||||
mpexp(gamma, priv->secret, p, out);
|
||||
mpinvert(out, p, gamma);
|
||||
mpmul(gamma, delta, out);
|
||||
mpmod(out, p, out);
|
||||
mpfree(gamma);
|
||||
mpfree(delta);
|
||||
return out;
|
||||
}
|
Reference in New Issue
Block a user