Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/crypto/external/bsd/netpgp/dist/src/lib check return values ...
details: https://anonhg.NetBSD.org/src/rev/3f4a81950fb0
branches: trunk
changeset: 758394:3f4a81950fb0
user: agc <agc%NetBSD.org@localhost>
date: Thu Nov 04 01:18:34 2010 +0000
description:
check return values from memory allocation routines in symmetric key
initialisation. return an error if allocation failed.
modify symmetric key initialisation function signature to return an
indication of success or failure.
get rid of one-time typedef for function definitions; their indirection
does not add any extra insight, and just obfuscates the declarations.
diffstat:
crypto/external/bsd/netpgp/dist/src/lib/crypto.h | 62 ++++++----------
crypto/external/bsd/netpgp/dist/src/lib/symmetric.c | 79 +++++++++++++++-----
2 files changed, 83 insertions(+), 58 deletions(-)
diffs (275 lines):
diff -r e51d346d88fe -r 3f4a81950fb0 crypto/external/bsd/netpgp/dist/src/lib/crypto.h
--- a/crypto/external/bsd/netpgp/dist/src/lib/crypto.h Wed Nov 03 23:46:35 2010 +0000
+++ b/crypto/external/bsd/netpgp/dist/src/lib/crypto.h Thu Nov 04 01:18:34 2010 +0000
@@ -62,58 +62,42 @@
#define OPS_MIN_HASH_SIZE 16
-typedef int __ops_hash_init_t(__ops_hash_t *);
-typedef void __ops_hash_add_t(__ops_hash_t *, const uint8_t *, unsigned);
-typedef unsigned __ops_hash_finish_t(__ops_hash_t *, uint8_t *);
-
/** _ops_hash_t */
struct _ops_hash_t {
__ops_hash_alg_t alg; /* algorithm */
size_t size; /* size */
const char *name; /* what it's known as */
- __ops_hash_init_t *init; /* initialisation func */
- __ops_hash_add_t *add; /* add text func */
- __ops_hash_finish_t *finish; /* finalise func */
+ int (*init)(__ops_hash_t *);
+ void (*add)(__ops_hash_t *, const uint8_t *, unsigned);
+ unsigned (*finish)(__ops_hash_t *, uint8_t *);
void *data; /* blob for data */
};
-typedef void __ops_setiv_func_t(__ops_crypt_t *, const uint8_t *);
-typedef void __ops_setkey_func_t(__ops_crypt_t *, const uint8_t *);
-typedef void __ops_crypt_init_t(__ops_crypt_t *);
-typedef void __ops_crypt_resync_t(__ops_crypt_t *);
-typedef void __ops_blkenc_t(__ops_crypt_t *, void *, const void *);
-typedef void __ops_blkdec_t(__ops_crypt_t *, void *, const void *);
-typedef void __ops_crypt_cfb_encrypt_t(__ops_crypt_t *, void *, const void *,
- size_t);
-typedef void __ops_crypt_cfb_decrypt_t(__ops_crypt_t *, void *, const void *,
- size_t);
-typedef void __ops_crypt_finish_t(__ops_crypt_t *);
-
/** _ops_crypt_t */
struct _ops_crypt_t {
- __ops_symm_alg_t alg;
- size_t blocksize;
- size_t keysize;
- __ops_setiv_func_t *set_iv;
- __ops_setkey_func_t *set_crypt_key;
- __ops_crypt_init_t *base_init;
- __ops_crypt_resync_t *decrypt_resync;
- /* encrypt/decrypt one block */
- __ops_blkenc_t *block_encrypt;
- __ops_blkdec_t *block_decrypt;
+ __ops_symm_alg_t alg;
+ size_t blocksize;
+ size_t keysize;
+ void (*set_iv)(__ops_crypt_t *, const uint8_t *);
+ void (*set_crypt_key)(__ops_crypt_t *, const uint8_t *);
+ int (*base_init)(__ops_crypt_t *);
+ void (*decrypt_resync)(__ops_crypt_t *);
+ /* encrypt/decrypt one block */
+ void (*block_encrypt)(__ops_crypt_t *, void *, const void *);
+ void (*block_decrypt)(__ops_crypt_t *, void *, const void *);
/* Standard CFB encrypt/decrypt (as used by Sym Enc Int Prot packets) */
- __ops_crypt_cfb_encrypt_t *cfb_encrypt;
- __ops_crypt_cfb_decrypt_t *cfb_decrypt;
- __ops_crypt_finish_t *decrypt_finish;
- uint8_t iv[OPS_MAX_BLOCK_SIZE];
- uint8_t civ[OPS_MAX_BLOCK_SIZE];
- uint8_t siv[OPS_MAX_BLOCK_SIZE];
+ void (*cfb_encrypt)(__ops_crypt_t *, void *, const void *, size_t);
+ void (*cfb_decrypt)(__ops_crypt_t *, void *, const void *, size_t);
+ void (*decrypt_finish)(__ops_crypt_t *);
+ uint8_t iv[OPS_MAX_BLOCK_SIZE];
+ uint8_t civ[OPS_MAX_BLOCK_SIZE];
+ uint8_t siv[OPS_MAX_BLOCK_SIZE];
/* siv is needed for weird v3 resync */
- uint8_t key[OPS_MAX_KEY_SIZE];
- int num;
+ uint8_t key[OPS_MAX_KEY_SIZE];
+ int num;
/* num is offset - see openssl _encrypt doco */
- void *encrypt_key;
- void *decrypt_key;
+ void *encrypt_key;
+ void *decrypt_key;
};
void __ops_crypto_finish(void);
diff -r e51d346d88fe -r 3f4a81950fb0 crypto/external/bsd/netpgp/dist/src/lib/symmetric.c
--- a/crypto/external/bsd/netpgp/dist/src/lib/symmetric.c Wed Nov 03 23:46:35 2010 +0000
+++ b/crypto/external/bsd/netpgp/dist/src/lib/symmetric.c Thu Nov 04 01:18:34 2010 +0000
@@ -54,7 +54,7 @@
#if defined(__NetBSD__)
__COPYRIGHT("@(#) Copyright (c) 2009 The NetBSD Foundation, Inc. All rights reserved.");
-__RCSID("$NetBSD: symmetric.c,v 1.11 2010/08/15 07:52:27 agc Exp $");
+__RCSID("$NetBSD: symmetric.c,v 1.12 2010/11/04 01:18:34 agc Exp $");
#endif
#include "crypto.h"
@@ -122,16 +122,23 @@
}
}
-static void
+static int
cast5_init(__ops_crypt_t *crypt)
{
if (crypt->encrypt_key) {
free(crypt->encrypt_key);
}
- crypt->encrypt_key = calloc(1, sizeof(CAST_KEY));
+ if ((crypt->encrypt_key = calloc(1, sizeof(CAST_KEY))) == NULL) {
+ (void) fprintf(stderr, "cast5_init: alloc failure\n");
+ return 0;
+ }
CAST_set_key(crypt->encrypt_key, (int)crypt->keysize, crypt->key);
- crypt->decrypt_key = calloc(1, sizeof(CAST_KEY));
+ if ((crypt->decrypt_key = calloc(1, sizeof(CAST_KEY))) == NULL) {
+ (void) fprintf(stderr, "cast5_init: alloc failure\n");
+ return 0;
+ }
CAST_set_key(crypt->decrypt_key, (int)crypt->keysize, crypt->key);
+ return 1;
}
static void
@@ -182,18 +189,21 @@
};
#ifndef OPENSSL_NO_IDEA
-static void
+static int
idea_init(__ops_crypt_t *crypt)
{
if (crypt->keysize != IDEA_KEY_LENGTH) {
(void) fprintf(stderr, "idea_init: keysize wrong\n");
- return;
+ return 0;
}
if (crypt->encrypt_key) {
free(crypt->encrypt_key);
}
- crypt->encrypt_key = calloc(1, sizeof(IDEA_KEY_SCHEDULE));
+ if ((crypt->encrypt_key = calloc(1, sizeof(IDEA_KEY_SCHEDULE))) == NULL) {
+ (void) fprintf(stderr, "idea_init: alloc failure\n");
+ return 0;
+ }
/* note that we don't invert the key when decrypting for CFB mode */
idea_set_encrypt_key(crypt->key, crypt->encrypt_key);
@@ -201,9 +211,13 @@
if (crypt->decrypt_key) {
free(crypt->decrypt_key);
}
- crypt->decrypt_key = calloc(1, sizeof(IDEA_KEY_SCHEDULE));
+ if ((crypt->decrypt_key = calloc(1, sizeof(IDEA_KEY_SCHEDULE))) == NULL) {
+ (void) fprintf(stderr, "idea_init: alloc failure\n");
+ return 0;
+ }
idea_set_decrypt_key(crypt->encrypt_key, crypt->decrypt_key);
+ return 1;
}
static void
@@ -256,13 +270,16 @@
#define KEYBITS_AES128 128
-static void
+static int
aes128_init(__ops_crypt_t *crypt)
{
if (crypt->encrypt_key) {
free(crypt->encrypt_key);
}
- crypt->encrypt_key = calloc(1, sizeof(AES_KEY));
+ if ((crypt->encrypt_key = calloc(1, sizeof(AES_KEY))) == NULL) {
+ (void) fprintf(stderr, "aes128_init: alloc failure\n");
+ return 0;
+ }
if (AES_set_encrypt_key(crypt->key, KEYBITS_AES128,
crypt->encrypt_key)) {
fprintf(stderr, "aes128_init: Error setting encrypt_key\n");
@@ -271,11 +288,15 @@
if (crypt->decrypt_key) {
free(crypt->decrypt_key);
}
- crypt->decrypt_key = calloc(1, sizeof(AES_KEY));
+ if ((crypt->decrypt_key = calloc(1, sizeof(AES_KEY))) == NULL) {
+ (void) fprintf(stderr, "aes128_init: alloc failure\n");
+ return 0;
+ }
if (AES_set_decrypt_key(crypt->key, KEYBITS_AES128,
crypt->decrypt_key)) {
fprintf(stderr, "aes128_init: Error setting decrypt_key\n");
}
+ return 1;
}
static void
@@ -327,25 +348,42 @@
#define KEYBITS_AES256 256
-static void
+static int
aes256_init(__ops_crypt_t *crypt)
{
if (crypt->encrypt_key) {
free(crypt->encrypt_key);
}
- crypt->encrypt_key = calloc(1, sizeof(AES_KEY));
+ if ((crypt->encrypt_key = calloc(1, sizeof(AES_KEY))) == NULL) {
+ (void) fprintf(stderr, "aes256_init: alloc failure\n");
+ return 0;
+ }
if (AES_set_encrypt_key(crypt->key, KEYBITS_AES256,
crypt->encrypt_key)) {
fprintf(stderr, "aes256_init: Error setting encrypt_key\n");
+ free(crypt->encrypt_key);
+ crypt->encrypt_key = NULL;
+ return 0;
}
-
- if (crypt->decrypt_key)
+ if (crypt->decrypt_key) {
free(crypt->decrypt_key);
- crypt->decrypt_key = calloc(1, sizeof(AES_KEY));
+ }
+ if ((crypt->decrypt_key = calloc(1, sizeof(AES_KEY))) == NULL) {
+ (void) fprintf(stderr, "aes256_init: alloc failure\n");
+ free(crypt->encrypt_key);
+ crypt->encrypt_key = NULL;
+ return 0;
+ }
if (AES_set_decrypt_key(crypt->key, KEYBITS_AES256,
crypt->decrypt_key)) {
fprintf(stderr, "aes256_init: Error setting decrypt_key\n");
+ free(crypt->encrypt_key);
+ crypt->encrypt_key = NULL;
+ free(crypt->decrypt_key);
+ crypt->decrypt_key = NULL;
+ return 0;
}
+ return 1;
}
static const __ops_crypt_t aes256 =
@@ -367,7 +405,7 @@
/* Triple DES */
-static void
+static int
tripledes_init(__ops_crypt_t *crypt)
{
DES_key_schedule *keys;
@@ -376,12 +414,15 @@
if (crypt->encrypt_key) {
free(crypt->encrypt_key);
}
- keys = crypt->encrypt_key = calloc(1, 3 * sizeof(DES_key_schedule));
-
+ if ((keys = crypt->encrypt_key = calloc(1, 3 * sizeof(DES_key_schedule))) == NULL) {
+ (void) fprintf(stderr, "tripledes_init: alloc failure\n");
+ return 0;
+ }
for (n = 0; n < 3; ++n) {
DES_set_key((DES_cblock *)(void *)(crypt->key + n * 8),
&keys[n]);
}
+ return 1;
}
static void
Home |
Main Index |
Thread Index |
Old Index