Module Name:    src
Committed By:   agc
Date:           Mon Oct 29 15:46:50 UTC 2012

Modified Files:
        src/crypto/external/bsd/netpgp/dist/src/libbn [agc-netpgp-standalone]:
            bignum.c misc.c
        src/crypto/external/bsd/netpgp/dist/src/libdigest 
[agc-netpgp-standalone]:
            digest.c tiger.c
        src/crypto/external/bsd/netpgp/dist/src/librsa [agc-netpgp-standalone]:
            rsa.c
        src/crypto/external/bsd/netpgp/dist/src/libverify 
[agc-netpgp-standalone]:
            b64.c

Log Message:
Do some argument checking in public functions (exported by library interface)


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.2 -r1.1.2.3 \
    src/crypto/external/bsd/netpgp/dist/src/libbn/bignum.c
cvs rdiff -u -r1.1.2.1 -r1.1.2.2 \
    src/crypto/external/bsd/netpgp/dist/src/libbn/misc.c
cvs rdiff -u -r1.1.2.1 -r1.1.2.2 \
    src/crypto/external/bsd/netpgp/dist/src/libdigest/digest.c \
    src/crypto/external/bsd/netpgp/dist/src/libdigest/tiger.c
cvs rdiff -u -r1.1.2.2 -r1.1.2.3 \
    src/crypto/external/bsd/netpgp/dist/src/librsa/rsa.c
cvs rdiff -u -r1.1.2.1 -r1.1.2.2 \
    src/crypto/external/bsd/netpgp/dist/src/libverify/b64.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/crypto/external/bsd/netpgp/dist/src/libbn/bignum.c
diff -u src/crypto/external/bsd/netpgp/dist/src/libbn/bignum.c:1.1.2.2 src/crypto/external/bsd/netpgp/dist/src/libbn/bignum.c:1.1.2.3
--- src/crypto/external/bsd/netpgp/dist/src/libbn/bignum.c:1.1.2.2	Fri Sep 21 03:03:52 2012
+++ src/crypto/external/bsd/netpgp/dist/src/libbn/bignum.c	Mon Oct 29 15:46:50 2012
@@ -5270,13 +5270,15 @@ BN_dup(const BIGNUM *a)
 void
 BN_swap(BIGNUM *a, BIGNUM *b)
 {
-  	mp_exch(a, b);
+	if (a && b) {
+		mp_exch(a, b);
+	}
 }
 
 int
 BN_lshift(BIGNUM *r, const BIGNUM *a, int n)
 {
-	if (a == NULL || n < 0) {
+	if (r == NULL || a == NULL || n < 0) {
 		return 0;
 	}
 	BN_copy(r, a);
@@ -5286,7 +5288,7 @@ BN_lshift(BIGNUM *r, const BIGNUM *a, in
 int
 BN_lshift1(BIGNUM *r, BIGNUM *a)
 {
-	if (a == NULL) {
+	if (r == NULL || a == NULL) {
 		return 0;
 	}
 	BN_copy(r, a);
@@ -5296,7 +5298,7 @@ BN_lshift1(BIGNUM *r, BIGNUM *a)
 int
 BN_rshift(BIGNUM *r, const BIGNUM *a, int n)
 {
-	if (a == NULL || n < 0) {
+	if (r == NULL || a == NULL || n < 0) {
 		return MP_VAL;
 	}
 	BN_copy(r, a);
@@ -5306,7 +5308,7 @@ BN_rshift(BIGNUM *r, const BIGNUM *a, in
 int
 BN_rshift1(BIGNUM *r, BIGNUM *a)
 {
-	if (a == NULL) {
+	if (r == NULL || a == NULL) {
 		return 0;
 	}
 	BN_copy(r, a);
@@ -5316,6 +5318,9 @@ BN_rshift1(BIGNUM *r, BIGNUM *a)
 int
 BN_set_word(BIGNUM *a, BN_ULONG w)
 {
+	if (a == NULL) {
+		return 0;
+	}
 	mp_set(a, w);
 	return 1;
 }
@@ -5509,13 +5514,13 @@ BN_CTX_end(BN_CTX *ctx)
 char *
 BN_bn2hex(const BIGNUM *a)
 {
-	return formatbn(a, 16);
+	return (a == NULL) ? NULL : formatbn(a, 16);
 }
 
 char *
 BN_bn2dec(const BIGNUM *a)
 {
-	return formatbn(a, 10);
+	return (a == NULL) ? NULL : formatbn(a, 10);
 }
 
 #ifndef _KERNEL
@@ -5542,6 +5547,9 @@ BN_rand(BIGNUM *rnd, int bits, int top, 
 	int		digits;
 	int		i;
 
+	if (rnd == NULL) {
+		return 0;
+	}
 	mp_init_size(rnd, digits = howmany(bits, DIGIT_BIT));
 	for (i = 0 ; i < digits ; i++) {
 		r = (uint64_t)arc4random();

Index: src/crypto/external/bsd/netpgp/dist/src/libbn/misc.c
diff -u src/crypto/external/bsd/netpgp/dist/src/libbn/misc.c:1.1.2.1 src/crypto/external/bsd/netpgp/dist/src/libbn/misc.c:1.1.2.2
--- src/crypto/external/bsd/netpgp/dist/src/libbn/misc.c:1.1.2.1	Sun May  6 17:34:56 2012
+++ src/crypto/external/bsd/netpgp/dist/src/libbn/misc.c	Mon Oct 29 15:46:50 2012
@@ -73,9 +73,11 @@ logmessage(const int level, const char *
 	va_list	args;
 
 	USE_ARG(level);
-	va_start(args, fmt);
-	vfprintf(stderr, fmt, args);
-	va_end(args);
+	if (fmt != NULL) {
+		va_start(args, fmt);
+		vfprintf(stderr, fmt, args);
+		va_end(args);
+	}
 }
 #endif
 
@@ -91,6 +93,12 @@ hexdump(FILE *fp, const char *header, co
 	size_t	i;
 	char	line[LINELEN + 1];
 
+	if (src == NULL) {
+		return;
+	}
+	if (fp == NULL) {
+		fp = stdout;
+	}
 	(void) fprintf(fp, "%s%s", (header) ? header : "", (header) ? "\n" : "");
 	(void) fprintf(fp, "[%" PRIsize "u char%s]\n", length, (length == 1) ? "" : "s");
 	for (i = 0 ; i < length ; i++) {

Index: src/crypto/external/bsd/netpgp/dist/src/libdigest/digest.c
diff -u src/crypto/external/bsd/netpgp/dist/src/libdigest/digest.c:1.1.2.1 src/crypto/external/bsd/netpgp/dist/src/libdigest/digest.c:1.1.2.2
--- src/crypto/external/bsd/netpgp/dist/src/libdigest/digest.c:1.1.2.1	Sat Oct 20 04:54:40 2012
+++ src/crypto/external/bsd/netpgp/dist/src/libdigest/digest.c	Mon Oct 29 15:46:49 2012
@@ -89,55 +89,73 @@ static uint8_t prefix_sha512[] = {
 void                                                                                                                 
 MD5_Init(MD5_CTX *context)
 {
-	MD5Init(context);
+	if (context) {
+		MD5Init(context);
+	}
 }
 
 void                                                                                                                 
 MD5_Update(MD5_CTX *context, const unsigned char *data, unsigned int len)
 {
-	MD5Update(context, data, len);
+	if (context && data) {
+		MD5Update(context, data, len);
+	}
 }
 
 void                                                                                                                 
 MD5_Final(unsigned char digest[16], MD5_CTX *context)
 {
-	MD5Final(digest, context);
+	if (digest && context) {
+		MD5Final(digest, context);
+	}
 }
 
 void                                                                                                                 
 SHA1_Init(SHA1_CTX *context)
 {
-	SHA1Init(context);
+	if (context) {
+		SHA1Init(context);
+	}
 }
 
 void                                                                                                                 
 SHA1_Update(SHA1_CTX *context, const unsigned char *data, unsigned int len)
 {
-	SHA1Update(context, data, len);
+	if (context && data) {
+		SHA1Update(context, data, len);
+	}
 }
 
 void                                                                                                                 
 SHA1_Final(unsigned char digest[20], SHA1_CTX *context)
 {
-	SHA1Final(digest, context);
+	if (digest && context) {
+		SHA1Final(digest, context);
+	}
 }
 
 void                                                                                                                 
 RMD160_Init(RMD160_CTX *context)
 {
-	RMD160Init(context);
+	if (context) {
+		RMD160Init(context);
+	}
 }
 
 void                                                                                                                 
 RMD160_Update(RMD160_CTX *context, const unsigned char *data, unsigned int len)
 {
-	RMD160Update(context, data, len);
+	if (context && data) {
+		RMD160Update(context, data, len);
+	}
 }
 
 void                                                                                                                 
 RMD160_Final(unsigned char digest[20], RMD160_CTX *context)
 {
-	RMD160Final(digest, context);
+	if (context && digest) {
+		RMD160Final(digest, context);
+	}
 }
 
 
@@ -169,6 +187,9 @@ digest_alg_size(unsigned alg)
 int 
 digest_init(digest_t *hash, const uint32_t hashalg)
 {
+	if (hash == NULL) {
+		return 0;
+	}
 	switch(hash->alg = hashalg) {
 	case MD5_HASH_ALG:
 		MD5Init(&hash->u.md5ctx);
@@ -247,7 +268,7 @@ digest_get_alg(const char *hashalg)
 {
 	rec_t	*r;
 
-	for (r = hashalgs ; r->s ; r++) {
+	for (r = hashalgs ; hashalg && r->s ; r++) {
 		if (strcasecmp(r->s, hashalg) == 0) {
 			return r->alg;
 		}
@@ -258,6 +279,9 @@ digest_get_alg(const char *hashalg)
 int 
 digest_update(digest_t *hash, const uint8_t *data, size_t length)
 {
+	if (hash == NULL || data == NULL) {
+		return 0;
+	}
 	switch(hash->alg) {
 	case MD5_HASH_ALG:
 		MD5Update(hash->ctx, data, (unsigned)length);
@@ -287,6 +311,9 @@ digest_update(digest_t *hash, const uint
 unsigned 
 digest_final(uint8_t *out, digest_t *hash)
 {
+	if (hash == NULL || out == NULL) {
+		return 0;
+	}
 	switch(hash->alg) {
 	case MD5_HASH_ALG:
 		MD5Final(out, hash->ctx);
@@ -319,6 +346,9 @@ digest_length(digest_t *hash, unsigned h
 {
 	uint8_t		 trailer[6];
 
+	if (hash == NULL) {
+		return 0;
+	}
 	trailer[0] = V4_SIGNATURE;
 	trailer[1] = 0xFF;
 	trailer[2] = (uint8_t)((hashedlen >> 24) & 0xff);
@@ -332,6 +362,9 @@ digest_length(digest_t *hash, unsigned h
 unsigned
 digest_get_prefix(unsigned hashalg, uint8_t *prefix, size_t size)
 {
+	if (prefix == NULL) {
+		return 0;
+	}
 	switch (hashalg) {
 	case MD5_HASH_ALG:
 		memcpy(prefix, prefix_md5, sizeof(prefix_md5));
Index: src/crypto/external/bsd/netpgp/dist/src/libdigest/tiger.c
diff -u src/crypto/external/bsd/netpgp/dist/src/libdigest/tiger.c:1.1.2.1 src/crypto/external/bsd/netpgp/dist/src/libdigest/tiger.c:1.1.2.2
--- src/crypto/external/bsd/netpgp/dist/src/libdigest/tiger.c:1.1.2.1	Sat Oct 20 04:54:40 2012
+++ src/crypto/external/bsd/netpgp/dist/src/libdigest/tiger.c	Mon Oct 29 15:46:50 2012
@@ -753,13 +753,17 @@ setversion(TIGER_CTX *ctx, int version)
 void
 TIGER_Init(TIGER_CTX *ctx)
 {
-	initcontext(ctx, 0x01);
+	if (ctx) {
+		initcontext(ctx, 0x01);
+	}
 }
 
 void
 TIGER2_Init(TIGER_CTX *ctx)
 {
-	initcontext(ctx, 0x80);
+	if (ctx) {
+		initcontext(ctx, 0x80);
+	}
 }
 
 void
@@ -774,6 +778,9 @@ TIGER_Update(TIGER_CTX *ctx, const void 
 	} u;
 	int              indian = 1;
 
+	if (ctx == NULL || data == NULL) {
+		return;
+	}
 	for(i = length; i >= 64; i -= 64) {
 		if (IS_BIG_ENDIAN(indian)) {
 			for (j = 0; j < 64; j++) {
@@ -823,6 +830,9 @@ TIGER_Final(uint8_t *digest, TIGER_CTX *
 	int		indian = 1;
 	int		i;
 
+	if (digest == NULL || ctx == NULL) {
+		return;
+	}
 	if (!ctx->init) {
 		TIGER_Init(ctx);
 		TIGER_Update(ctx, NULL, 0);
@@ -842,6 +852,9 @@ TIGER_End(TIGER_CTX *ctx, char *buf)
 {   
 	int	i;
 
+	if (ctx == NULL) {
+		return NULL;
+	}
 	if (buf == NULL && (buf = calloc(1, 49)) == NULL) {
 		return NULL;
 	}
@@ -865,7 +878,7 @@ TIGER_File(char *filename, char *buf, in
 	int		fd;
 	int		oerrno;
 
-	if (!setversion(&ctx, version)) {
+	if (filename == NULL || buf == NULL || !setversion(&ctx, version)) {
 		return NULL;
 	}
 	if ((fd = open(filename, O_RDONLY)) < 0) {
@@ -885,7 +898,7 @@ TIGER_Data(const uint8_t *data, size_t l
 {   
 	TIGER_CTX	ctx;
 
-	if (!setversion(&ctx, version)) {
+	if (data == NULL || buf == NULL || !setversion(&ctx, version)) {
 		return NULL;
 	}
 	TIGER_Update(&ctx, data, len);

Index: src/crypto/external/bsd/netpgp/dist/src/librsa/rsa.c
diff -u src/crypto/external/bsd/netpgp/dist/src/librsa/rsa.c:1.1.2.2 src/crypto/external/bsd/netpgp/dist/src/librsa/rsa.c:1.1.2.3
--- src/crypto/external/bsd/netpgp/dist/src/librsa/rsa.c:1.1.2.2	Sat Oct 20 04:59:52 2012
+++ src/crypto/external/bsd/netpgp/dist/src/librsa/rsa.c	Mon Oct 29 15:46:50 2012
@@ -493,13 +493,13 @@ err:
 int
 RSA_size(const RSA *rsa)
 {
-	return BN_num_bits(rsa->n);
+	return (rsa == NULL) ? 0 : BN_num_bits(rsa->n);
 }
 
 int
-DSA_size(const DSA *rsa)
+DSA_size(const DSA *dsa)
 {
-	return BN_num_bits(rsa->p);
+	return (dsa == NULL) ? 0 : BN_num_bits(dsa->p);
 }
 
 unsigned 
@@ -510,6 +510,9 @@ dsa_verify(const signature_t *signature,
 	unsigned	qlen;
 	int             ret;
 
+	if (signature == NULL || pubdsa == NULL || calculated == NULL) {
+		return -1;
+	}
 	(void) memset(&osig, 0x0, sizeof(osig));
 	(void) memset(&odsa, 0x0, sizeof(odsa));
 	BN_copy(osig.r, signature->dsa.r);
@@ -558,7 +561,7 @@ RSA_check_key(RSA *rsa)
 
 	ret = 0;
 	if (rsa == NULL || rsa->p == NULL || rsa->q == NULL || rsa->n == NULL) {
-		return 0;
+		return -1;
 	}
 	/* check that p and q are coprime, and that n = p*q. */
 	if (!BN_is_prime(rsa->p, 1, NULL, NULL, NULL) ||
@@ -594,6 +597,9 @@ int
 RSA_public_encrypt(int plainc, const unsigned char *plain, unsigned char *encbuf, RSA *rsa, int padding)
 {
 	USE_ARG(padding);
+	if (plain == NULL || encbuf == NULL || rsa == NULL) {
+		return -1;
+	}
 	return lowlevel_rsa_public_encrypt(plainc, plain, encbuf, rsa);
 }
 
@@ -602,6 +608,9 @@ int
 RSA_private_decrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)
 {
 	USE_ARG(padding);
+	if (from == NULL || to == NULL || rsa == NULL) {
+		return -1;
+	}
 	return lowlevel_rsa_private_decrypt(flen, from, to, rsa);
 }
 
@@ -610,6 +619,9 @@ int
 RSA_private_encrypt(int plainc, const unsigned char *plain, unsigned char *encbuf, RSA *rsa, int padding)
 {
 	USE_ARG(padding);
+	if (plain == NULL || encbuf == NULL || rsa == NULL) {
+		return -1;
+	}
 	return lowlevel_rsa_private_encrypt(plainc, plain, encbuf, rsa);
 }
 
@@ -677,5 +689,8 @@ DSA_do_sign(const unsigned char *dgst, i
 int
 DSA_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig, DSA *dsa)
 {
+	if (dgst == NULL || dgst_len == 0 || sig == NULL || dsa == NULL) {
+		return -1;
+	}
 	return dsa_do_verify(dgst, dgst_len, sig, dsa);
 }

Index: src/crypto/external/bsd/netpgp/dist/src/libverify/b64.c
diff -u src/crypto/external/bsd/netpgp/dist/src/libverify/b64.c:1.1.2.1 src/crypto/external/bsd/netpgp/dist/src/libverify/b64.c:1.1.2.2
--- src/crypto/external/bsd/netpgp/dist/src/libverify/b64.c:1.1.2.1	Sat Oct 20 04:59:53 2012
+++ src/crypto/external/bsd/netpgp/dist/src/libverify/b64.c	Mon Oct 29 15:46:50 2012
@@ -246,6 +246,9 @@ b64encode(const char *in, const size_t i
 	int              blocksout;
 	int              wordlen;
 
+	if (in == NULL || vp == NULL) {
+		return 0;
+	}
 	wordlen = 0;
 	for (blocksout = 0, inp = in, outp = out; (size_t)(inp - in) < insize && (size_t)(outp - out) < outsize;) {
 		for (wordlen = 0, i = 0; i < sizeof(wordin); i++) {
@@ -307,6 +310,9 @@ b64decode(const char *in, const size_t i
 	char		*out = vp;
 	char		*outp;
 
+	if (in == NULL || vp == NULL) {
+		return 0;
+	}
 	for (inp = in, outp = out ; (size_t)(inp - in) < insize && (size_t)(outp - out) < outsize ; ) {
 		for (wordlen = 0, i = 0 ; i < sizeof(wordin) && (size_t)(inp - in) < insize ; i++) {
 			/* get a single character */

Reply via email to