summaryrefslogtreecommitdiff
path: root/sys/src/libsec
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2017-02-06 02:03:16 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2017-02-06 02:03:16 +0100
commit02b3c609ed7deb369722617c20f69c5f3f73e570 (patch)
tree7552ecf2c4f64bf48fbaf5a304dc541a051794fe /sys/src/libsec
parent1df513a2a1683efa18655047946ef735479b2dfb (diff)
libsec: check if modulus is too small for message in pkcs1padbuf()
Diffstat (limited to 'sys/src/libsec')
-rw-r--r--sys/src/libsec/port/x509.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/src/libsec/port/x509.c b/sys/src/libsec/port/x509.c
index 8c2f28a83..4e151915a 100644
--- a/sys/src/libsec/port/x509.c
+++ b/sys/src/libsec/port/x509.c
@@ -2143,6 +2143,10 @@ pkcs1padbuf(uchar *buf, int len, mpint *modulus)
mpint *mp;
pm1 = n - 1 - len;
+ if(pm1 <= 2){
+ werrstr("pkcs1padbuf: modulus too small");
+ return nil;
+ }
p = (uchar*)emalloc(n);
p[0] = 0;
p[1] = 1;
@@ -2827,6 +2831,8 @@ X509rsagen(RSApriv *priv, char *subj, ulong valid[2], int *certlen)
goto errret;
pkcs1 = pkcs1pad(sigbytes, pk->n);
freebytes(sigbytes);
+ if(pkcs1 == nil)
+ goto errret;
rsadecrypt(priv, pkcs1, pkcs1);
buflen = mptobe(pkcs1, nil, 0, &buf);
@@ -2894,6 +2900,8 @@ X509rsareq(RSApriv *priv, char *subj, int *certlen)
goto errret;
pkcs1 = pkcs1pad(sigbytes, pk->n);
freebytes(sigbytes);
+ if(pkcs1 == nil)
+ goto errret;
rsadecrypt(priv, pkcs1, pkcs1);
buflen = mptobe(pkcs1, nil, 0, &buf);