challenge method
Called when the router sends a challenge (CHALLENGE frame).
Implementation
@override
Future<Authenticate> challenge(Extra extra) async {
await AbstractAuthentication.streamAddAwaited<Extra>(
_challengeStreamController,
extra,
);
if (extra.channelBinding != channelBinding) {
return Future.error(Exception('Channel Binding does not match'));
}
if (extra.challenge == null || extra.challenge!.length % 2 != 0) {
return Future.error(Exception('Wrong challenge length'));
}
final authenticate = Authenticate();
authenticate.extra = HashMap<String, Object?>();
authenticate.extra!['channel_binding'] = channelBinding;
final binaryChallenge = hexToBin(extra.challenge);
authenticate.signature = privateKey
.sign(binaryChallenge)
.encode(Base16Encoder.instance);
return authenticate;
}