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 */