diff options
author | aiju <aiju@phicode.de> | 2014-09-13 19:46:41 +0200 |
---|---|---|
committer | aiju <aiju@phicode.de> | 2014-09-13 19:46:41 +0200 |
commit | 69fab298beee33e4a6f91d9e1811dfa1898aa743 (patch) | |
tree | f35aa35d0259b718b44eb689f287a06dda2b982d /sys/src/libsec | |
parent | 62a8bf184668a071f5113f73d0d4082d8d0ee556 (diff) |
libsec: ecgen() and ecdsasign() fix
Diffstat (limited to 'sys/src/libsec')
-rw-r--r-- | sys/src/libsec/port/ecc.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/src/libsec/port/ecc.c b/sys/src/libsec/port/ecc.c index 2504c7c5c..8cffc04e6 100644 --- a/sys/src/libsec/port/ecc.c +++ b/sys/src/libsec/port/ecc.c @@ -397,10 +397,10 @@ ecgen(ECdomain *dom, ECpriv *p) p = mallocz(sizeof(*p), 1); if(p == nil) return nil; + p->x = mpnew(0); + p->y = mpnew(0); + p->d = mpnew(0); } - p->x = mpnew(0); - p->y = mpnew(0); - p->d = mpnew(0); for(;;){ mprand(mpsignif(dom->n), genrandom, p->d); if(mpcmp(p->d, mpzero) > 0 && mpcmp(p->d, dom->n) < 0) @@ -418,6 +418,7 @@ ecdsasign(ECdomain *dom, ECpriv *priv, uchar *dig, int len, mpint *r, mpint *s) tmp.x = mpnew(0); tmp.y = mpnew(0); + tmp.d = mpnew(0); E = betomp(dig, len, nil); t = mpnew(0); if(mpsignif(dom->n) < 8*len) @@ -439,6 +440,7 @@ ecdsasign(ECdomain *dom, ECpriv *priv, uchar *dig, int len, mpint *r, mpint *s) mpfree(E); mpfree(tmp.x); mpfree(tmp.y); + mpfree(tmp.d); } int |