Idioma

IdentityCredential.GetEntries Método

Definição

Recupere entradas de dados e dados associados a partir disso IdentityCredential.

[Android.Runtime.Register("getEntries", "([BLjava/util/Map;[B[B)Landroid/security/identity/ResultData;", "GetGetEntries_arrayBLjava_util_Map_arrayBarrayBHandler", ApiSince=30)]
public abstract Android.Security.Identity.ResultData GetEntries(byte[]? requestMessage, System.Collections.Generic.IDictionary<string,System.Collections.Generic.ICollection<string>> entriesToRequest, byte[]? sessionTranscript, byte[]? readerSignature);
[<Android.Runtime.Register("getEntries", "([BLjava/util/Map;[B[B)Landroid/security/identity/ResultData;", "GetGetEntries_arrayBLjava_util_Map_arrayBarrayBHandler", ApiSince=30)>]
abstract member GetEntries : byte[] * System.Collections.Generic.IDictionary<string, System.Collections.Generic.ICollection<string>> * byte[] * byte[] -> Android.Security.Identity.ResultData

Parâmetros

requestMessage
Byte[]

Caso contrário null, deve conter dados CBOR em conformidade com o esquema mencionado acima.

entriesToRequest
IDictionary<String,ICollection<String>>

As entradas a serem solicitadas, organizadas como um mapa de nomes de namespace com cada valor sendo uma coleção de elementos de dados no namespace fornecido.

sessionTranscript
Byte[]

A transcrição da sessão codificada em CBOR usada nos dados de autenticação do leitor ou null. Esse valor deve ser idêntico para todas as chamadas na mesma instância. Se a criptografia de sessão mdoc for usada e esse valor não nullfor, ela deverá conter as coordenadas X e Y da chave pública gerada por CreateEphemeralKeyPair(), cada uma codificada com os bits mais significativos primeiro e o tamanho exato da chave efêmera. Consulte as observações para a estrutura de autenticação do leitor e os requisitos de coordenadas.

readerSignature
Byte[]

Uma COSE_Sign1 estrutura conforme descrito acima ou null se a autenticação do leitor não está sendo usada.

Retornos

Um ResultData objeto que contém dados de entrada organizados por namespace e uma representação autenticada criptograficamente dos mesmos dados.

Atributos

Comentários

Recupere entradas de dados e dados associados a partir disso IdentityCredential.

Se uma verificação de controle de acesso falhar para uma das entradas solicitadas ou se a entrada não existir, a entrada simplesmente não será retornada. O aplicativo pode detectar isso usando o ResultData#getStatus(String, String) método em cada uma das entradas solicitadas.

É permitido chamar esse método várias vezes usando a mesma instância, mas se isso for feito, o sessionTranscript parâmetro deverá ser idêntico para cada chamada. Se esse não for o caso, a SessionTranscriptMismatchException exceção será gerada. Além disso, se isso for feito, a mesma chave de autenticação será usada.

O aplicativo não deve fazer suposições sobre se a autenticação do usuário é necessária. Em vez disso, o aplicativo deve solicitar os valores dos elementos de dados primeiro e, em seguida, examinar o retornado ResultData. Se ResultData#STATUS_USER_AUTHENTICATION_FAILED for retornado, o aplicativo deverá obter uma android.hardware.biometrics.BiometricPrompt.CryptoObject referência a esse objeto e usá-lo com um android.hardware.biometrics.BiometricPrompt. Após a autenticação bem-sucedida, o aplicativo poderá chamar #getEntries(byte[], Map, byte[], byte[]) novamente.

Caso contrário null , o requestMessage parâmetro deverá conter dados para a solicitação do verificador. O conteúdo pode ser definido da maneira apropriada para a credencial, mas há três requisitos que devem ser atendidos para trabalhar com essa API: <ul><li>O conteúdo deve ser uma estrutura codificada por CBOR.</li><li>A estrutura CBOR deve ser um mapa.</li><li>O mapa deve conter uma chave tstr "nameSpaces" cujo valor contém um mapa, conforme descrito no exemplo abaixo.</li></ul>

Se esses requisitos não forem atendidos, a InvalidRequestMessageException exceção será gerada.

Aqui está um exemplo de CBOR que está em conformidade com esse requisito:

ItemsRequest = {
                ? "docType" : DocType,
                "nameSpaces" : NameSpaces,
                ? "RequestInfo" : {* tstr => any} ; Additional info the reader wants to provide
              }

              DocType = tstr

              NameSpaces = {
                + NameSpace => DataElements    ; Requested data elements for each NameSpace
              }

              NameSpace = tstr

              DataElements = {
                + DataElement => IntentToRetain
              }

              DataElement = tstr
              IntentToRetain = bool

Se a criptografia de sessão mdoc for usada (por exemplo, se #createEphemeralKeyPair() tiver sido chamada) e se o sessionTranscript parâmetro não nullfor, as coordenadas X e Y da parte pública do par de chaves gerado anteriormente devem #createEphemeralKeyPair() aparecer em algum lugar nos bytes do CBOR. Cada uma dessas coordenadas deve aparecer codificada com os bits mais significativos primeiro e usar a quantidade exata de bits indicada pelo tamanho da chave das chaves efêmeras. Por exemplo, se a chave efêmera estiver usando a curva P-256, os 32 bytes para a coordenada X codificada com os bits mais significativos primeiro deverão aparecer em sessionTranscript algum lugar e ditto para os 32 bytes da coordenada Y.

Se readerSignature não null for, deve ser os bytes de uma COSE_Sign1 estrutura, conforme definido no RFC 8152. Para a carga zero deve ser usado e o conteúdo desanexado é o CBOR ReaderAuthenticationBytes descrito abaixo.

ReaderAuthentication = [
                  "ReaderAuthentication",
                  SessionTranscript,
                  ItemsRequestBytes
                ]

                ItemsRequestBytes = #6.24(bstr .cbor ItemsRequest)

                ReaderAuthenticationBytes = #6.24(bstr .cbor ReaderAuthentication)

onde ItemsRequestBytes estão os bytes no requestMessage parâmetro.

A chave pública correspondente à chave usada para fazer a assinatura pode ser encontrada no x5chain elemento de cabeçalho desprotegido da COSE_Sign1 estrutura (conforme descrito em draft-ietf-cose-x509-04). Haverá pelo menos um certificado nesse elemento e pode haver mais (e, nesse caso, cada certificado deve ser assinado por seu sucessor).

Os elementos de dados protegidos pela autenticação do leitor serão retornados se, e somente se forem mencionados requestMessage, requestMessage forem assinados pelo certificado mais alto da cadeia de certificados do leitor e o elemento de dados estiver configurado com um AccessControlProfile certificado X.509 que aparece na cadeia de certificados.

Observe que somente os itens referenciados são entriesToRequest retornados – o requestMessage parâmetro é usado apenas para impor a autenticação do leitor.

O motivo para ter requestMessage e entriesToRequest como parâmetros separados é que o primeiro representa uma solicitação do dispositivo verificador remoto (opcionalmente assinado) e isso permite que o aplicativo filtre a solicitação para não incluir elementos de dados que o usuário não consentiu em compartilhar.

Este membro foi preterido. Use PresentationSession em seu lugar.

Java documentação para android.security.identity.IdentityCredential.getEntries(byte[], java.util.Map<java.lang.String, java.util.Collection<java.lang.String>>, byte[], byte[]).

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.

Aplica-se a