From 0f4431d0bb9efbf3399299e51ed743c750b3efdf Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sun, 20 May 2012 22:32:25 +0200 Subject: [PATCH] Split salt from other requests in RNG backend. --- lib/internal.h | 2 +- lib/luks1/keymanage.c | 4 ++-- lib/random.c | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/internal.h b/lib/internal.h index 75d45332..44ec5a1a 100644 --- a/lib/internal.h +++ b/lib/internal.h @@ -97,7 +97,7 @@ void get_topology_alignment(const char *device, unsigned long *alignment_offset, /* bytes */ unsigned long default_alignment); -enum { CRYPT_RND_NORMAL = 0, CRYPT_RND_KEY = 1 }; +enum { CRYPT_RND_NORMAL = 0, CRYPT_RND_KEY = 1, CRYPT_RND_SALT = 2 }; int crypt_random_init(struct crypt_device *ctx); int crypt_random_get(struct crypt_device *ctx, char *buf, size_t len, int quality); void crypt_random_exit(void); diff --git a/lib/luks1/keymanage.c b/lib/luks1/keymanage.c index e2e36dfb..a3499931 100644 --- a/lib/luks1/keymanage.c +++ b/lib/luks1/keymanage.c @@ -635,7 +635,7 @@ int LUKS_generate_phdr(struct luks_phdr *header, header->version, header->hashSpec ,header->cipherName, header->cipherMode, header->keyBytes); - r = crypt_random_get(ctx, header->mkDigestSalt, LUKS_SALTSIZE, CRYPT_RND_NORMAL); + r = crypt_random_get(ctx, header->mkDigestSalt, LUKS_SALTSIZE, CRYPT_RND_SALT); if(r < 0) { log_err(ctx, _("Cannot create LUKS header: reading random salt failed.\n")); return r; @@ -752,7 +752,7 @@ int LUKS_set_key(const char *device, unsigned int keyIndex, return -ENOMEM; r = crypt_random_get(ctx, hdr->keyblock[keyIndex].passwordSalt, - LUKS_SALTSIZE, CRYPT_RND_NORMAL); + LUKS_SALTSIZE, CRYPT_RND_SALT); if (r < 0) return r; diff --git a/lib/random.c b/lib/random.c index 0f7357a6..c7f25e4f 100644 --- a/lib/random.c +++ b/lib/random.c @@ -176,6 +176,9 @@ int crypt_random_get(struct crypt_device *ctx, char *buf, size_t len, int qualit case CRYPT_RND_NORMAL: status = _get_urandom(ctx, buf, len); break; + case CRYPT_RND_SALT: + status = _get_urandom(ctx, buf, len); + break; case CRYPT_RND_KEY: rng_type = ctx ? crypt_get_rng_type(ctx) : crypt_random_default_key_rng();