Blame


1 0fc65b37 2004-03-21 devnull #include "os.h"
2 0fc65b37 2004-03-21 devnull #include <mp.h>
3 0fc65b37 2004-03-21 devnull #include <libsec.h>
4 0fc65b37 2004-03-21 devnull
5 0fc65b37 2004-03-21 devnull mpint*
6 0fc65b37 2004-03-21 devnull egdecrypt(EGpriv *priv, mpint *in, mpint *out)
7 0fc65b37 2004-03-21 devnull {
8 0fc65b37 2004-03-21 devnull EGpub *pub = &priv->pub;
9 0fc65b37 2004-03-21 devnull mpint *gamma, *delta;
10 0fc65b37 2004-03-21 devnull mpint *p = pub->p;
11 0fc65b37 2004-03-21 devnull int plen = mpsignif(p)+1;
12 0fc65b37 2004-03-21 devnull int shift = ((plen+Dbits-1)/Dbits)*Dbits;
13 0fc65b37 2004-03-21 devnull
14 0fc65b37 2004-03-21 devnull if(out == nil)
15 0fc65b37 2004-03-21 devnull out = mpnew(0);
16 0fc65b37 2004-03-21 devnull gamma = mpnew(0);
17 0fc65b37 2004-03-21 devnull delta = mpnew(0);
18 0fc65b37 2004-03-21 devnull mpright(in, shift, gamma);
19 0fc65b37 2004-03-21 devnull mpleft(gamma, shift, delta);
20 fa325e9b 2020-01-10 cross mpsub(in, delta, delta);
21 0fc65b37 2004-03-21 devnull mpexp(gamma, priv->secret, p, out);
22 0fc65b37 2004-03-21 devnull mpinvert(out, p, gamma);
23 0fc65b37 2004-03-21 devnull mpmul(gamma, delta, out);
24 0fc65b37 2004-03-21 devnull mpmod(out, p, out);
25 0fc65b37 2004-03-21 devnull mpfree(gamma);
26 0fc65b37 2004-03-21 devnull mpfree(delta);
27 0fc65b37 2004-03-21 devnull return out;
28 0fc65b37 2004-03-21 devnull }