diff --git a/src/modules/users/SetPasswordJob.cpp b/src/modules/users/SetPasswordJob.cpp index 325d24fe3..363a04ccc 100644 --- a/src/modules/users/SetPasswordJob.cpp +++ b/src/modules/users/SetPasswordJob.cpp @@ -22,6 +22,7 @@ #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" +#include "utils/Entropy.h" #include "utils/Logger.h" #include @@ -63,41 +64,18 @@ SetPasswordJob::make_salt( int length ) Q_ASSERT( length >= 8 ); Q_ASSERT( length <= 128 ); - static const char salt_chars[] = { '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', - 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', - 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', - 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; - - static_assert( sizeof( salt_chars ) == 64, "Missing salt_chars" ); - - std::random_device r; - std::seed_seq seed { r(), r(), r(), r(), r(), r(), r(), r() }; - std::mt19937_64 twister( seed ); - - std::uint64_t next; - int current_length = 0; - QString salt_string; - salt_string.reserve( length + 10 ); - - while ( current_length < length ) + CalamaresUtils::EntropySource source = CalamaresUtils::getPrintableEntropy( length, salt_string ); + if ( salt_string.length() != length ) { - next = twister(); - // In 64 bits, we have 10 blocks of 6 bits; map each block of 6 bits - // to a single salt character. - for ( unsigned int char_count = 0; char_count < 10; ++char_count ) - { - char c = salt_chars[ next & 0b0111111 ]; - next >>= 6; - salt_string.append( c ); - if ( ++current_length >= length ) - { - break; - } - } + cWarning() << "getPrintableEntropy returned string of length" << salt_string.length() << "expected" << length; + salt_string.truncate( length ); + } + if ( source != CalamaresUtils::EntropySource::URandom ) + { + cWarning() << "Entropy data for salt is low-quality."; } - salt_string.truncate( length ); salt_string.insert( 0, "$6$" ); salt_string.append( '$' ); return salt_string;