writeMessage method

Future<Uint8List> writeMessage(
  1. List<int> payload
)

Generate the next handshake message

Implementation

Future<Uint8List> writeMessage(List<int> payload) async {
  if (_state.state == XXHandshakeState.error) {
    throw StateError('Cannot write message in error state');
  }

  try {
    _validateWriteState();

    final result = await switch (_state.state) {
      XXHandshakeState.initial => _writeInitialMessage(),
      XXHandshakeState.sentE => _writeSecondMessage(),
      XXHandshakeState.sentEES => _writeFinalMessage(payload),
      _ => throw StateError('Cannot write message in state: ${_state.state}'),
    };

    _state = result.$2;  // Update state
    return result.$1;    // Return message
  } catch (e) {
    // Only set error state for non-validation errors
    if (e is! StateError) {
      _state = _state.copyWith(state: XXHandshakeState.error);
    }
    rethrow;
  }
}