From 51f2855d36ca8233b7e8a39e37f3d0d8f16520f1 Mon Sep 17 00:00:00 2001 From: Nick Parker Date: Tue, 11 Jun 2013 11:24:29 -0500 Subject: [PATCH] Checking for SQLITE_OK as return code for random --- src/crypto_impl.c | 4 ++-- src/crypto_libtomcrypt.c | 9 ++++++--- src/crypto_openssl.c | 3 ++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/crypto_impl.c b/src/crypto_impl.c index 0044693ee3..f005df7e0d 100644 --- a/src/crypto_impl.c +++ b/src/crypto_impl.c @@ -557,7 +557,7 @@ int sqlcipher_codec_ctx_init(codec_ctx **iCtx, Db *pDb, Pager *pPager, sqlite3_f if(fd == NULL || sqlite3OsRead(fd, ctx->kdf_salt, FILE_HEADER_SZ, 0) != SQLITE_OK) { /* if unable to read the bytes, generate random salt */ - if(ctx->read_ctx->provider->random(ctx->read_ctx->provider_ctx, ctx->kdf_salt, FILE_HEADER_SZ) != 1) return SQLITE_ERROR; + if(ctx->read_ctx->provider->random(ctx->read_ctx->provider_ctx, ctx->kdf_salt, FILE_HEADER_SZ) != SQLITE_OK) return SQLITE_ERROR; } if((rc = sqlcipher_codec_ctx_set_cipher(ctx, CIPHER, 0)) != SQLITE_OK) return rc; @@ -662,7 +662,7 @@ int sqlcipher_page_cipher(codec_ctx *ctx, int for_ctx, Pgno pgno, int mode, int if(mode == CIPHER_ENCRYPT) { /* start at front of the reserve block, write random data to the end */ - if(c_ctx->provider->random(c_ctx->provider_ctx, iv_out, c_ctx->reserve_sz) != 1) return SQLITE_ERROR; + if(c_ctx->provider->random(c_ctx->provider_ctx, iv_out, c_ctx->reserve_sz) != SQLITE_OK) return SQLITE_ERROR; } else { /* CIPHER_DECRYPT */ memcpy(iv_out, iv_in, c_ctx->iv_sz); /* copy the iv from the input to output buffer */ } diff --git a/src/crypto_libtomcrypt.c b/src/crypto_libtomcrypt.c index b28acf80f2..d3f40395b0 100644 --- a/src/crypto_libtomcrypt.c +++ b/src/crypto_libtomcrypt.c @@ -19,7 +19,7 @@ static int sqlcipher_ltc_activate(void *ctx) { ltc_ctx *ltc = (ltc_ctx*)ctx; int random_buffer_sz = 32; unsigned char random_buffer[random_buffer_sz]; - + if(ltc_init == 0) { if(register_prng(&fortuna_desc) != CRYPT_OK) return SQLITE_ERROR; if(register_cipher(&rijndael_desc) != CRYPT_OK) return SQLITE_ERROR; @@ -53,8 +53,11 @@ static const char* sqlcipher_ltc_get_provider_name(void *ctx) { static int sqlcipher_ltc_random(void *ctx, void *buffer, int length) { ltc_ctx *ltc = (ltc_ctx*)ctx; - - fortuna_ready(&(ltc->prng)); + int rc; + + if((rc = fortuna_ready(&(ltc->prng))) != CRYPT_OK) { + return SQLITE_ERROR; + } fortuna_read(buffer, length, &(ltc->prng)); return SQLITE_OK; } diff --git a/src/crypto_openssl.c b/src/crypto_openssl.c index 13f2e34ddf..a9a7886f31 100644 --- a/src/crypto_openssl.c +++ b/src/crypto_openssl.c @@ -71,7 +71,8 @@ static const char* sqlcipher_openssl_get_provider_name(void *ctx) { /* generate a defined number of pseudorandom bytes */ static int sqlcipher_openssl_random (void *ctx, void *buffer, int length) { - return RAND_bytes((unsigned char *)buffer, length); + RAND_bytes((unsigned char *)buffer, length); + return SQLITE_OK; } static int sqlcipher_openssl_hmac(void *ctx, unsigned char *hmac_key, int key_sz, unsigned char *in, int in_sz, unsigned char *in2, int in2_sz, unsigned char *out) {