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)).Avant que le client ne publie ou ne s'abonne, appelez la fonction otc_session_set_encryption_secret() fonction :
otc_session_set_encryption_secret(session, secret);
otc_session_connect(session, TOKEN);
Un secret valide est une chaîne de 8 à 256 caractères. Vous pouvez modifier le secret en appelant la fonction otc_session_set_encryption_secret() à nouveau.
La transmission d'un secret non valide entraîne l'apparition d'un OTC_SESSION_INVALID_ENCRYPTION_SECRET erreur.
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.Le nouveau code d'erreur est OTC_SESSION_INVALID_ENCRYPTION_SECRET et sera renvoyé en tant que code de résultat de la méthode set_encryption_secret, et non dans le callback on_error.
Si un client tente de définir un secret de chiffrement non valide pour une session, la fonction otc_session_callbacks.on_error() renvoie un code d'erreur égal à OTC_SESSION_INVALID_ENCRYPTION_SECRET. Dans l'exemple suivant, une session est initialisée avec un secret de chiffrement vide (et donc invalide) :
int result = otc_session_set_encryption_secret(session, "");
if (result == OTC_SESSION_INVALID_ENCRYPTION_SECRET) {
// Report error...
}
Si un utilisateur tente de publier dans une session chiffrée de bout en bout sans avoir spécifié de secret de chiffrement, l'appel de la fonction otc_session_publish() se traduit par l'utilisation de la fonction otc_publisher_callbacks.on_error() appelée avec une erreur dont le code est OTC_SESSION_ENCRYPTION_SECRET_MISSING. Pour une meilleure expérience utilisateur, l'application doit valider un secret fourni par l'utilisateur avant d'appeler la fonction otc_session_publish() fonction :
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);
Si un abonné n'est pas en mesure de décoder les médias d'un flux en raison d'un secret de cryptage erroné, la fonction subscriber_callbacks.on_error() est appelée avec une erreur dont le code est fixé à OTC_SUBSCRIBER_ENCRYPTION_SECRET_MISMATCH. Il est important d'indiquer à l'utilisateur que le média n'est pas reçu en raison d'une erreur de cryptage et non d'une défaillance de la connexion ou d'un problème audio/vidéo :
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);
Si un abonné rencontre une erreur interne lors du décryptage d'un paquet, la fonction subscriber_callbacks.on_error() est appelée avec une erreur dont le code est fixé à OTC_SUBSCRIBER_DECRYPTION_INTERNAL_ERROR.