createSecret static method

String createSecret({
  1. int length = 32,
  2. bool autoPadding = false,
  3. 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;
}