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 [OTSession setEncryptionSecret:error:] método:
OTError *error = nil;
[_session setEncryptionSecret:@"encryption-secret" error:&error];
if (error)
{
// Notify the user.
}
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() método 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 o cliente tentar se conectar a uma sessão criptografada de ponta a ponta e não definir o segredo de criptografia antes da conexão, ocorrerá um erro com o código definido como EncryptionSecretMissing:
OTError *error = nil;
[_session connectWithToken:kToken error:&error];
if (error && (error.code == EncryptionSecretMissing))
{
// Notify the user of the error connecting.
}
Se um usuário tentar publicar em uma sessão criptografada de ponta a ponta sem ter especificado um segredo de criptografia, ao chamar a função [OTSession publish:error:] O método gera um erro cujo código está definido como OTPublisherEncryptionSecretMissing. Para garantir a melhor experiência do usuário, o aplicativo deve validar um segredo fornecido pelo usuário antes da publicação:
OTError *error = nil;
[_session publish:_publisher error:&error];
if (error && (error.code == OTPublisherEncryptionSecretMissing))
{
// The application should communicate that the secret was not set.
}
Se um assinante não conseguir decodificar o conteúdo de mídia de um stream devido a uma chave de criptografia incorreta, o [OTSubscriberKitDelegate subscriber:didFailWithError:] A mensagem é enviada 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 [OTSubscriberKitDelegate subscriber:didFailWithError:]:
- (void)subscriber:(OTSubscriberKit*)subscriber
didFailWithError:(OTError*)error
{
if (error && (error.code == EncryptionSecretMismatch)) {
// Activate a UI element communicating that there's been an encryption secret mismatch.
}
}
[_session subscribe:_subscriber error:&error];
// ...
Se um assinante encontrar um erro interno ao descriptografar um pacote, o [OTSubscriberKitDelegate subscriber:didFailWithError:] a mensagem é enviada com um erro cujo código está definido como OTSubscriberDecryptionInternalError.