Setting the encryption secret

End-to-End-verschlüsselte Sitzungen werden mit Hilfe von Server-APIs erstellt (siehe Aktivieren der Verschlüsselung mit dem REST-API).

Bevor der Client publiziert oder abonniert, rufen Sie die otc_session_set_encryption_secret() Methode:

otc_session_set_encryption_secret(session, secret);	
otc_session_connect(session, TOKEN);

Ein gültiges Geheimnis ist eine Zeichenfolge zwischen 8 und 256 Zeichen. Sie können das Geheimnis ändern, indem Sie die Funktion otc_session_set_encryption_secret() Funktion wieder.

Das Setzen eines ungültigen Geheimnisses führt zu einer OTC_SESSION_INVALID_ENCRYPTION_SECRET Fehler.

Events and errors

Ereignisse und Fehler sind wesentlich für die Verwaltung des benutzergesteuerten Verschlüsselungsverhaltens. Bei der Ende-zu-Ende-Verschlüsselung wird das Modell des gemeinsamen Geheimnisses verwendet: Es wird erwartet, dass alle Teilnehmer der Sitzung dasselbe Geheimnis verwenden, um ihre Medien zu verschlüsseln und die der anderen zu entschlüsseln.

Der neue Fehlercode lautet OTC_SESSION_INVALID_ENCRYPTION_SECRET und wird als Ergebniscode des Befehls set_encryption_secret Methode, nicht in dem on_error-Callback.

Wenn ein Client versucht, ein ungültiges Verschlüsselungsgeheimnis für eine Sitzung festzulegen, wird der otc_session_callbacks.on_error() gibt einen Fehlercode zurück, der auf OTC_SESSION_INVALID_ENCRYPTION_SECRET. Im folgenden Beispiel wird eine Sitzung mit einem leeren (und damit ungültigen) Verschlüsselungsgeheimnis initialisiert:

int result = otc_session_set_encryption_secret(session, "");
if (result == OTC_SESSION_INVALID_ENCRYPTION_SECRET) {
  // Report error...
}

Wenn ein Benutzer versucht, in einer Ende-zu-Ende-verschlüsselten Sitzung zu veröffentlichen, ohne ein Verschlüsselungsgeheimnis angegeben zu haben, wird der Aufruf der otc_session_publish() Funktion führt zu der otc_publisher_callbacks.on_error() Funktion, die mit einem Fehler aufgerufen wird, bei dem der Code auf OTC_SESSION_ENCRYPTION_SECRET_MISSING. Für eine optimale Benutzerfreundlichkeit sollte die Anwendung ein vom Benutzer eingegebenes Geheimnis validieren, bevor sie die otc_session_publish() Funktion:

static void on_publisher_error(otc_publisher *publisher,
                               void *user_data,
                               const char* error_string,
                               enum otc_publisher_error_code error_code) {
  if (otc_publisher_error_code == OTC_SESSION_ENCRYPTION_SECRET_MISSING) {
    // The application should communicate that the secret was not set.
  }
}

struct otc_publisher_callbacks publisher_callbacks = {0};
publisher_callbacks.on_error = on_publisher_error;

session = otc_session_new(API_KEY, SESSION_ID, &session_callbacks);

otc_publisher *publisher = otc_publisher_new("Joe",
                                  nullptr,
                                  &publisher_callbacks);
otc_session_publish(session, publisher);

Wenn ein Teilnehmer aufgrund eines falschen Verschlüsselungsgeheimnisses nicht in der Lage ist, die Medien eines Streams zu entschlüsseln, wird der subscriber_callbacks.on_error() Funktion mit einem Fehler aufgerufen wird, dessen Code auf OTC_SUBSCRIBER_ENCRYPTION_SECRET_MISMATCH. Es ist wichtig, dem Benutzer mitzuteilen, dass die Medien aufgrund eines Verschlüsselungsfehlers und nicht aufgrund eines Verbindungsfehlers oder eines Audio-/Videoproblems nicht empfangen werden können:

static void on_subscriber_error(otc_subscriber *subscriber,
                               void *user_data,
                               const char* error_string,
                               enum otc_subscriber_error_code error_code) {
  if (otc_subscriber_error_code == OTC_SUBSCRIBER_ENCRYPTION_SECRET_MISMATCH) {
  // Activate a UI element communicating that there's been an encryption secret mismatch.
  }
}

struct otc_subscriber_callbacks subscriber_callbacks = {0};
subscriber_callbacks.on_error = on_subscriber_error;

otc_subscriber *subscriber = otc_subscriber_new(stream,
                                                &subscriber_callbacks);
otc_session_subscribe(session, subscriber);

Wenn ein Teilnehmer bei der Entschlüsselung eines Pakets auf einen internen Fehler stößt, wird der subscriber_callbacks.on_error() Funktion mit einem Fehler aufgerufen wird, dessen Code auf OTC_SUBSCRIBER_DECRYPTION_INTERNAL_ERROR.