mumble-voip_mumble/src/PasswordGenerator.cpp

53 lines
1.6 KiB
C++

// Copyright 2017-2023 The Mumble Developers. All rights reserved.
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file at the root of the
// Mumble source tree or at <https://www.mumble.info/LICENSE>.
#include "PasswordGenerator.h"
#include "crypto/CryptographicRandom.h"
#include <QtCore/QVector>
// This is a password alphabet that tries to be human-friendly.
// Most cases of ambiguitiy have been removed.
//
// Removed characters:
// "0" (zero)
// "1" (one)
// "5" (five)
// "O" (uppercase O)
// "o" (lowercase O)
// "l" (lowercase L)
// "I" (uppercase i)
static char password_alphabet[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm',
'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M',
'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'2', '3', '4', '6', '7', '8', '9' };
// Getter function for TestPasswordGenerator to get the
// alphabet we're using.
QVector< QChar > mumble_password_generator_alphabet() {
QVector< QChar > v;
size_t numAlphabetEntries = sizeof(password_alphabet);
for (size_t i = 0; i < numAlphabetEntries; i++) {
v << QChar(QLatin1Char(password_alphabet[i]));
}
return v;
}
QString PasswordGenerator::generatePassword(int length) {
QByteArray buf(length, '\0');
uint32_t numAlphabetEntries = sizeof(password_alphabet);
for (int i = 0; i < length; i++) {
uint32_t index = CryptographicRandom::uniform(numAlphabetEntries - 1);
buf[i] = password_alphabet[index];
}
return QString::fromLatin1(buf.constData(), buf.size());
}