$NetBSD: patch-ah,v 1.3 1999/12/14 21:43:06 sommerfeld Exp $

--- ../source/rsa.c.orig	Fri Mar 25 14:01:48 1994
+++ ../source/rsa.c	Tue Dec 14 16:28:19 1999
@@ -11,10 +11,10 @@
 #include "rsa.h"
 #include "nn.h"
 
-static int RSAPublicBlock PROTO_LIST 
+int RSAPublicBlock PROTO_LIST 
   ((unsigned char *, unsigned int *, unsigned char *, unsigned int,
     R_RSA_PUBLIC_KEY *));
-static int RSAPrivateBlock PROTO_LIST 
+int RSAPrivateBlock PROTO_LIST 
   ((unsigned char *, unsigned int *, unsigned char *, unsigned int,
     R_RSA_PRIVATE_KEY *));
 
@@ -33,6 +33,9 @@
   unsigned char byte, pkcsBlock[MAX_RSA_MODULUS_LEN];
   unsigned int i, modulusLen;
   
+  if (inputLen+3>MAX_RSA_MODULUS_LEN) return (RE_LEN);
+  if (publicKey->bits > MAX_RSA_MODULUS_BITS) return (RE_LEN);
+
   modulusLen = (publicKey->bits + 7) / 8;
   if (inputLen + 11 > modulusLen)
     return (RE_LEN);
@@ -78,6 +81,9 @@
   unsigned char pkcsBlock[MAX_RSA_MODULUS_LEN];
   unsigned int i, modulusLen, pkcsBlockLen;
   
+  if (inputLen>MAX_RSA_MODULUS_LEN) return (RE_LEN);
+  if (publicKey->bits > MAX_RSA_MODULUS_BITS) return (RE_LEN);
+
   modulusLen = (publicKey->bits + 7) / 8;
   if (inputLen > modulusLen)
     return (RE_LEN);
@@ -129,6 +135,9 @@
   unsigned char pkcsBlock[MAX_RSA_MODULUS_LEN];
   unsigned int i, modulusLen;
   
+  if (inputLen+3>MAX_RSA_MODULUS_LEN) return (RE_LEN);
+  if (privateKey->bits > MAX_RSA_MODULUS_BITS) return (RE_LEN);
+
   modulusLen = (privateKey->bits + 7) / 8;
   if (inputLen + 11 > modulusLen)
     return (RE_LEN);
@@ -168,6 +177,9 @@
   unsigned char pkcsBlock[MAX_RSA_MODULUS_LEN];
   unsigned int i, modulusLen, pkcsBlockLen;
   
+  if (inputLen>MAX_RSA_MODULUS_LEN) return (RE_LEN);
+  if (privateKey->bits > MAX_RSA_MODULUS_BITS) return (RE_LEN);
+
   modulusLen = (privateKey->bits + 7) / 8;
   if (inputLen > modulusLen)
     return (RE_LEN);
@@ -212,7 +224,7 @@
    Assumes inputLen < length of modulus.
    Requires input < modulus.
  */
-static int RSAPublicBlock (output, outputLen, input, inputLen, publicKey)
+int RSAPublicBlock (output, outputLen, input, inputLen, publicKey)
 unsigned char *output;                                      /* output block */
 unsigned int *outputLen;                          /* length of output block */
 unsigned char *input;                                        /* input block */
@@ -252,7 +264,7 @@
    Assumes inputLen < length of modulus.
    Requires input < modulus.
  */
-static int RSAPrivateBlock (output, outputLen, input, inputLen, privateKey)
+int RSAPrivateBlock (output, outputLen, input, inputLen, privateKey)
 unsigned char *output;                                      /* output block */
 unsigned int *outputLen;                          /* length of output block */
 unsigned char *input;                                        /* input block */
