Setting the encryption secret

End-to-end encrypted sessions are created using server APIs (see Enabling encryption using the [REST API](/video/guides/end-to-end-encryption/overview#enabling-encryption-using-the-rest-api)).

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

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.

Die Übergabe eines ungültigen Geheimnisses führt zu einer OTC_SESSION_INVALID_ENCRYPTION_SECRET Fehler.

Events and errors

Events and errors are essential to managing the behavior of user-driven encryption behavior. End-to-end encryption uses the shared secret model: everyone in the session is expected to use the same secret to encrypt their media and decrypt everyone else's.

Der neue Fehlercode lautet OTC_SESSION_INVALID_ENCRYPTION_SECRET und wird als Ergebniscode der Methode set_encryption_secret zurückgegeben, nicht im on_error-Callback.

Wenn ein Client versucht, ein ungültiges Verschlüsselungsgeheimnis für eine Sitzung zu setzen, gibt die Funktion otc_session_callbacks.on_error() 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, dessen Code auf OTC_SESSION_ENCRYPTION_SECRET_MISSING gesetzt ist. Um die Benutzerfreundlichkeit zu erhöhen, sollte die Anwendung ein vom Benutzer eingegebenes Geheimnis validieren, bevor sie die Funktion 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.