createSecret static method
String
createSecret({
- int length = 32,
- bool autoPadding = false,
- SecretKeyStyle secretKeyStyle = SecretKeyStyle.upperCase,
The secret is generated using the Base32 alphabet and is suitable for use in TOTP (Time-based One-Time Password) applications.
length
: The length of the secret to generate. Must be between 16 and 255, Defaults is 32.autoPadding
: If true, it will create a secret with a letter by 4 sections, Defaults is false.secretKeyStyle
: SecretKeyStyle is used to set the case of the secret key. Defaults is upperCase.
Implementation
static String createSecret(
{int length = 32,
bool autoPadding = false,
SecretKeyStyle secretKeyStyle = SecretKeyStyle.upperCase}) {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'; // Base32 alphabet
if (length < 16 || length > 255) {
throw ArgumentError('The length of the secret must be 16 to 255.');
}
final rnd = Random.secure();
var generatedSecret =
List.generate(length, (_) => chars[rnd.nextInt(chars.length)]).join();
generatedSecret =
autoPadding ? _autoPadding(generatedSecret) : generatedSecret;
if (secretKeyStyle == SecretKeyStyle.upperCase) {
generatedSecret = generatedSecret.toUpperCase();
} else if (secretKeyStyle == SecretKeyStyle.lowerCase) {
generatedSecret = generatedSecret.toLowerCase();
} else if (secretKeyStyle == SecretKeyStyle.upperLowerCase) {
generatedSecret = _randomizeCase(generatedSecret);
}
return generatedSecret;
}