Language

IdentityCredential.GetEntries メソッド

定義

この 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

パラメーター

requestMessage
Byte[]

nullしない場合は、上記のスキーマに準拠する CBOR データを含める必要があります。

entriesToRequest
IDictionary<String,ICollection<String>>

要求するエントリ。各値が特定の名前空間内のデータ要素のコレクションである名前空間名のマップとして編成されます。

sessionTranscript
Byte[]

リーダー認証データまたは nullで使用される CBOR でエンコードされたセッション トランスクリプト。 この値は、同じインスタンスのすべての呼び出しで同じである必要があります。 mdoc セッション暗号化が使用され、この値が nullされていない場合は、 CreateEphemeralKeyPair()によって生成される公開キーの X 座標と Y 座標が含まれている必要があります。各座標は、最初に最も重要なビットとエフェメラル キーの正確なサイズでエンコードされます。 リーダー認証の構造と座標の要件については、解説を参照してください。

readerSignature
Byte[]

前述の COSE_Sign1 構造。リーダー認証が使用されていない場合は null 。

返品

名前空間別に編成されたエントリ データと、同じデータの暗号化で認証された表現を含む ResultData オブジェクト。

属性

注釈

この IdentityCredentialからデータ エントリと関連データを取得します。

要求されたエントリの 1 つに対してアクセス制御チェックが失敗した場合、またはエントリが存在しない場合、エントリは返されません。 アプリケーションは、要求された各エントリで ResultData#getStatus(String, String) メソッドを使用してこれを検出できます。

同じインスタンスを使用してこのメソッドを複数回呼び出すことができますが、これを行う場合、 sessionTranscript パラメーターは呼び出しごとに同じである必要があります。 そうでない場合は、 SessionTranscriptMismatchException 例外がスローされます。 さらに、これを行う場合は、同じ認証キーが使用されます。

アプリケーションでは、ユーザー認証が必要かどうかについて何も想定しないでください。 代わりに、アプリケーションは最初にデータ要素の値を要求してから、返された ResultDataを調べる必要があります。 ResultData#STATUS_USER_AUTHENTICATION_FAILEDが返された場合、アプリケーションはこのオブジェクトを参照するandroid.hardware.biometrics.BiometricPrompt.CryptoObjectを取得し、android.hardware.biometrics.BiometricPromptで使用する必要があります。 認証が成功すると、アプリケーションは #getEntries(byte[], Map, byte[], byte[]) をもう一度呼び出す可能性があります。

nullしない場合、requestMessage パラメーターには検証ツールからの要求のデータが含まれている必要があります。 コンテンツは資格情報に適した方法で定義できますが、この API を使用するには 3 つの要件が満たされている必要があります。 <ul><li>コンテンツは CBOR でエンコードされた構造体である必要があります</li><li>CBOR 構造体は map.< である必要があります。/li><li>次の例で説明するように、マップには、値にマップが含まれる tstr キー "nameSpaces" が含まれている必要があります</li></ul>

これらの要件が満たされていない場合は、 InvalidRequestMessageException 例外がスローされます。

この要件に準拠する CBOR の例を次に示します。

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

mdoc セッション暗号化が使用されている場合 (たとえば、 #createEphemeralKeyPair() が呼び出された場合)、 sessionTranscript パラメーターが nullされていない場合、 #createEphemeralKeyPair() によって以前に生成されたキー ペアの公開部分の X 座標と Y 座標は、CBOR のバイト内のどこかに表示される必要があります。 これらの各座標は、最初に最上位ビットでエンコードされ、エフェメラル キーのキー サイズで示されるビットの正確な量を使用する必要があります。 たとえば、エフェメラル キーが P-256 曲線を使用している場合、最も重要なビットでエンコードされた X 座標の 32 バイトは、最初に sessionTranscript 内のどこかに表示され、Y 座標の 32 バイトの場合は ditto である必要があります。

readerSignatureがnullされていない場合は、RFC 8152 で定義されているCOSE_Sign1構造体のバイトである必要があります。 ペイロードの場合は nil を使用し、デタッチされたペイロードは以下で説明する ReaderAuthenticationBytes CBOR です。

ReaderAuthentication = [
                  "ReaderAuthentication",
                  SessionTranscript,
                  ItemsRequestBytes
                ]

                ItemsRequestBytes = #6.24(bstr .cbor ItemsRequest)

                ReaderAuthenticationBytes = #6.24(bstr .cbor ReaderAuthentication)

ここで、 ItemsRequestBytes は requestMessage パラメーターのバイトです。

署名の作成に使用されるキーに対応する公開キーは、x5chain構造体のCOSE_Sign1保護されていないヘッダー要素にあります (draft-ietf-cose-x509-04 で説明されているように)。 上記の要素には少なくとも 1 つの証明書があり、さらに存在する可能性があります (存在する場合は、各証明書が後続の証明書によって署名されている必要があります)。

リーダー認証によって保護されたデータ要素は、 requestMessageに記載されている場合にのみ、 requestMessage がリーダーの証明書チェーンの最上位の証明書によって署名され、データ要素が証明書チェーンに表示される X.509 証明書で構成された AccessControlProfile で構成されている場合にのみ返されます。

entriesToRequestで参照されている項目のみが返されることに注意してください。requestMessage パラメーターは、リーダー認証の適用にのみ使用されます。

requestMessageとentriesToRequestを別々のパラメーターとして使用する理由は、前者がリモート検証ツール デバイスからの要求 (必要に応じて署名済み) を表しているためです。これにより、アプリケーションは要求をフィルター処理して、ユーザーが共有に同意していないデータ要素を含めないようにすることができます。

このメンバーは非推奨です。 PresentationSession を代わりに使用します。

Javaドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

適用対象