Setting the encryption secret

As sessões com criptografia de ponta a ponta são criadas por meio de APIs do servidor (consulte “Ativando a criptografia usando o API REST).

Antes que o cliente publique ou se inscreva, chame o Session.setEncryptionSecret() método:

session.setEncryptionSecret("encryption-secret");
session.connect(TOKEN);

Um segredo válido é uma sequência de caracteres com comprimento entre 8 e 256 caracteres. Você pode alterar o segredo chamando a função Session.setEncryptionSecret() funcionar novamente.

Definir um segredo inválido resultará em um InvalidEncryptionSecret erro.

Events and errors

Eventos e erros são essenciais para gerenciar o comportamento da criptografia orientada pelo usuário. A criptografia de ponta a ponta utiliza o modelo de segredo compartilhado: espera-se que todos os participantes da sessão utilizem o mesmo segredo para criptografar seus dados e descriptografar os dados dos demais participantes.

Se um cliente tentar se conectar a uma sessão criptografada de ponta a ponta sem definir um segredo de criptografia, o SessionListener.onError() o manipulador de eventos é chamado com um código de erro definido como ErrorCode.EncryptionSecretMissing:

// Implementation of SessionListener.onError():
@Override
public void onError(Session session, OpentokError opentokError) {
  if (opentokError.getErrorCode() == ErrorCode.EncryptionSecretMissing) {
    // Notify the user that they cannot join the session
  }
}

session.connect(token); Se um usuário tentar publicar em uma sessão criptografada de ponta a ponta sem ter especificado um segredo de criptografia, a chamada da função Session.publish() O método resulta no PublisherListener.onError() O manipulador de eventos está sendo chamado com um erro cujo código está definido como ErrorCode.EncryptionSecretMissing. Para garantir a melhor experiência do usuário, o aplicativo deve validar o segredo fornecido pelo usuário antes de chamar o Session.publish() método:

// Implementation of PublisherListener.onError():
@Override
public void onError(PublisherKit publisher, OpentokError opentokError) {
  if (opentokError.getErrorCode() == ErrorCode.EncryptionInternalError) {
    // The application should communicate that the secret was not set.
  }
}
session.publish(publisher);

Se um assinante não conseguir decodificar o conteúdo de mídia de um stream devido a uma chave de criptografia incorreta, o SubscriberListener.onError() O manipulador de eventos é chamado com um erro cujo código está definido como ErrorCode.EncryptionSecretMismatch. É importante informar ao usuário que a mídia não está sendo recebida devido a uma incompatibilidade de criptografia e não por causa de uma falha na conexão ou de um problema de áudio/vídeo:

// Implementation of Subscriber.onError():
@Override
public void onError(SubscriberKit publisher, OpentokError opentokError) {
  if (opentokError.getErrorCode() == ErrorCode.EncryptionSecretMismatch) {
    // Activate a UI element communicating that there's been an encryption secret mismatch.
  }
}

session.subscribe(subscriber); Se o aplicativo tentar se inscrever sem definir um segredo de criptografia, o Subscriber.onError() o manipulador de eventos é chamado com um erro cujo código está definido como ErrorCode.EncryptionSecretMissing.

Se um assinante encontrar um erro interno ao descriptografar um pacote, o Subscriber.onError() o manipulador de eventos é chamado com um erro cujo código está definido como ErrorCode.DecryptionInternalError.