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)).クライアントがパブリッシュまたはサブスクライブする前に otc_session_set_encryption_secret() 関数である:
otc_session_set_encryption_secret(session, secret);
otc_session_connect(session, TOKEN);
有効な秘密は8文字以上256文字以下の文字列である。シークレットを変更するには otc_session_set_encryption_secret() 関数を再び使用する。
無効なシークレットを渡すと OTC_SESSION_INVALID_ENCRYPTION_SECRET エラー。
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.新しいエラーコードは OTC_SESSION_INVALID_ENCRYPTION_SECRET on_errorコールバックではなく、set_encryption_secretメソッドの結果コードとして返される。
クライアントがセッションに無効な暗号化シークレットを設定しようとした場合、otc_session_callbacks.on_error() は以下のエラーコードを返します。 OTC_SESSION_INVALID_ENCRYPTION_SECRET.以下の例では、セッションは空の(つまり無効な)暗号化シークレットで初期化される:
int result = otc_session_set_encryption_secret(session, "");
if (result == OTC_SESSION_INVALID_ENCRYPTION_SECRET) {
// Report error...
}
暗号化シークレットを指定せずにエンドツーエンドで暗号化されたセッションを公開しようとした場合、次のように呼び出す。 otc_session_publish() 関数の結果は otc_publisher_callbacks.on_error() 関数が OTC_SESSION_ENCRYPTION_SECRET_MISSING に設定されたエラーで呼び出された。最良のユーザーエクスペリエンスを得るために、アプリケーションは otc_session_publish() 関数である:
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);
不正確な暗号化シークレットのために、加入者がストリームのメディアをデコードできない場合は subscriber_callbacks.on_error() 関数が呼び出されたとき、エラーコードは次のように設定されている。 OTC_SUBSCRIBER_ENCRYPTION_SECRET_MISMATCH.メディアを受信できないのは、暗号化の不一致によるものであり、接続障害やオーディオ/ビデオの問題ではないことをユーザーに伝えることが重要です:
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);
サブスクライバーがパケットを復号化する際に内部エラーが発生した場合 subscriber_callbacks.on_error() 関数が呼び出されたとき、エラーコードは次のように設定されている。 OTC_SUBSCRIBER_DECRYPTION_INTERNAL_ERROR.