signChallenge static method

String signChallenge({
  1. required String secret,
  2. required Extra challenge,
  3. AuthenticationStringEncoding stringEncoding = AuthenticationStringEncoding.utf8,
})

Implementation

static String signChallenge({
  required String secret,
  required Extra challenge,
  AuthenticationStringEncoding stringEncoding =
      AuthenticationStringEncoding.utf8,
}) {
  if (challenge.challenge == null) {
    throw ArgumentError('challenge.challenge is required');
  }

  Uint8List key;
  if (challenge.salt == null) {
    key = Uint8List.fromList(
      encodeString(secret, stringEncoding: stringEncoding),
    );
  } else {
    key = deriveKey(
      secret,
      encodeString(challenge.salt!, stringEncoding: stringEncoding),
      iterations: challenge.iterations == null || challenge.iterations! <= 0
          ? defaultIterations
          : challenge.iterations!,
      keylen: challenge.keyLen == null || challenge.keyLen! <= 0
          ? defaultKeyLength
          : challenge.keyLen!,
      stringEncoding: stringEncoding,
    );
  }

  final keyLen = challenge.keyLen == null || challenge.keyLen! <= 0
      ? defaultKeyLength
      : challenge.keyLen!;

  return encodeHmac(
    Uint8List.fromList(base64.encode(key).codeUnits),
    keyLen,
    Uint8List.fromList(
      encodeString(challenge.challenge!, stringEncoding: stringEncoding),
    ),
  );
}