keymaster1_device-Strukturreferenz

keymaster1_device-Strukturreferenz

#include < keymaster1.h >

Datenfelder

Struktur hw_device_t gemeinsam
uint32_t client_version
uint32_t Flaggen
Leere * Kontext
int(* generic_keypair )(const struct keymaster1_device *dev, const keymaster_keypair_t key_type, const void *key_params, uint8_t **key_blob, size_t *key_blob_length)
int(* import_keypair )(const struct keymaster1_device *dev, const uint8_t *key, const size_t key_length, uint8_t **key_blob, size_t *key_blob_length)
int(* get_keypair_public )(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length, uint8_t **x509_data, size_t *x509_data_length)
int(* delete_keypair )(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length)
int(* delete_all )(const struct keymaster1_device *dev)
int(* sign_data )(const struct keymaster1_device *dev, const void *signing_params, const uint8_t *key_blob, const size_t key_blob_length, const uint8_t *data, const size_t data_length, uint8_t **signed_data, size_t *signed_data_length)
int(* verify_data )(const struct keymaster1_device *dev, const void *signing_params, const uint8_t *key_blob, const size_t key_blob_length, const uint8_t *signed_data, const size_t signierte_daten_länge, const uint8_t *signature, const size_t signatur_länge)
keymaster_error_t (* get_supported_algorithms )(const struct keymaster1_device *dev, keymaster_algorithm_t **algorithms, size_t *algorithms_length)
keymaster_error_t (* get_supported_block_modes )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_zweck_t purpose, keymaster_block_mode_t **modes, size_t *modes_length)
keymaster_error_t (* get_supported_padding_modes )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_zweck_t purpose, keymaster_padding_t **modes, size_t *modes_length)
keymaster_error_t (* get_supported_digests )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_zweck_t purpose, keymaster_digest_t **digests, size_t *digests_length)
keymaster_error_t (* get_supported_import_formats )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_key_format_t **formats, size_t *formats_length)
keymaster_error_t (* get_supported_export_formats )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_key_format_t **formats, size_t *formats_length)
keymaster_error_t (* add_rng_entropy )(const struct keymaster1_device *dev, const uint8_t *data, size_t data_length)
keymaster_error_t (* generic_key )(const struct keymaster1_device *dev, const keymaster_key_param_set_t *params, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t **characteristics)
keymaster_error_t (* get_key_characteristics )(const struct keymaster1_device *dev, const keymaster_key_blob_t *key_blob, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_key_characteristics_t **characteristics)
keymaster_error_t (* import_key )(const struct keymaster1_device *dev, const keymaster_key_param_set_t *params, keymaster_key_format_t key_format, const keymaster_blob_t *key_data, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t **characteristics)
keymaster_error_t (* export_key )(const struct keymaster1_device *dev, keymaster_key_format_t export_format, const keymaster_key_blob_t *key_to_export, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_blob_t *export_data)
keymaster_error_t (* delete_key )(const struct keymaster1_device *dev, const keymaster_key_blob_t *key)
keymaster_error_t (* delete_all_keys )(const struct keymaster1_device *dev)
keymaster_error_t (* begin )(const struct keymaster1_device *dev, keymaster_zweck_t Zweck, const keymaster_key_blob_t *key, const keymaster_key_param_set_t *in_params, keymaster_key_param_set_t *out_params, keymaster_operation_handle_t *operation_handle)
keymaster_error_t (* update )(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *input, size_t *input_consumed, keymaster_key_param_set_t *out_params, keymaster_blob_t *output)
keymaster_error_t (* Finish )(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *signature, keymaster_key_param_set_t *out_params, keymaster_blob_t *output)
keymaster_error_t (* abort )(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle)

detaillierte Beschreibung

Keymaster1-Gerätedefinition

Definition in Zeile 28 der Datei keymaster1.h .

Felddokumentation

keymaster_error_t (* abort)(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle)

Bricht eine mit begin() begonnene kryptografische Operation ab, gibt alle internen Ressourcen frei und macht operation_handle ungültig.

Definition in Zeile 531 der Datei keymaster1.h .

keymaster_error_t (* add_rng_entropy)(const struct keymaster1_device *dev, const uint8_t *data, size_t data_length)

Fügt dem von Keymaster verwendeten RNG Entropie hinzu. Es ist garantiert, dass die durch diese Methode hinzugefügte Entropie nicht die einzige verwendete Entropiequelle ist, und die Mischfunktion muss sicher sein, in dem Sinne, dass der Angreifer nicht vorhersagen kann (bzw Steuerung), dann ist die RNG-Ausgabe nicht von einer Zufallsausgabe zu unterscheiden. Wenn also die Entropie aus irgendeiner Quelle gut ist, ist auch die Ausgabe gut.

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] Daten Zufällige Daten zum Einmischen.
[In] Datenlänge Länge der data .

Definition in Zeile 242 der Datei keymaster1.h .

keymaster_error_t (* begin)(const struct keymaster1_device *dev, keymaster_zweck_t Zweck, const keymaster_key_blob_t *key, const keymaster_key_param_set_t *in_params, keymaster_key_param_set_t *out_params, keymaster_operation_handle_t *operation_handle)

Beginnt einen kryptografischen Vorgang mit dem angegebenen Schlüssel. Wenn alles in Ordnung ist, gibt begin() KM_ERROR_OK zurück und erstellt ein Operationshandle, das an nachfolgende Aufrufe von update() , finish() oder abort() übergeben werden muss.

Es ist wichtig, dass jeder Aufruf von begin() mit einem nachfolgenden Aufruf von finish() oder abort() gepaart wird, damit die Keymaster-Implementierung alle internen Betriebszustände bereinigen kann. Andernfalls kann es zu einem Verlust des internen Statusraums oder anderer interner Ressourcen kommen, was schließlich dazu führen kann, dass begin() KM_ERROR_TOO_MANY_OPERATIONS zurückgibt, wenn der Speicherplatz für Vorgänge knapp wird. Jedes andere Ergebnis als KM_ERROR_OK von begin() , update() oder finish() bricht den Vorgang implizit ab. In diesem Fall muss abort() nicht aufgerufen werden (und gibt KM_ERROR_INVALID_OPERATION_HANDLE zurück, wenn es aufgerufen wird).

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] Zweck Der Zweck des Vorgangs, einer von KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN oder KM_PURPOSE_VERIFY. Beachten Sie, dass für AEAD-Modi die Verschlüsselung und Entschlüsselung eine Signierung bzw. Verifizierung implizieren, aber als KM_PURPOSE_ENCRYPT und KM_PURPOSE_DECRYPT angegeben werden sollten.
[In] Schlüssel Der Schlüssel, der für den Vorgang verwendet werden soll. key muss einen Zweck haben, der mit purpose kompatibel ist, und alle seine Verwendungsanforderungen müssen erfüllt sein, sonst gibt begin() einen entsprechenden Fehlercode zurück.
[In] in_params Zusätzliche Parameter für den Vorgang. Dies wird normalerweise zur Bereitstellung von Authentifizierungsdaten mit KM_TAG_AUTH_TOKEN verwendet. Wenn KM_TAG_APPLICATION_ID oder KM_TAG_APPLICATION_DATA während der Generierung bereitgestellt wurden, müssen sie hier bereitgestellt werden, sonst schlägt der Vorgang mit KM_ERROR_INVALID_KEY_BLOB fehl. Für Vorgänge, die eine Nonce oder IV erfordern, kann in_params bei Schlüsseln, die mit KM_TAG_CALLER_NONCE generiert wurden, ein Tag KM_TAG_NONCE enthalten. Für AEAD-Operationen wird hier KM_TAG_CHUNK_SIZE angegeben.
[aus] out_params Ausgabeparameter. Wird verwendet, um zusätzliche Daten aus der Operationsinitialisierung zurückzugeben, insbesondere um den IV oder Nonce von Vorgängen zurückzugeben, die einen IV oder Nonce generieren. Der Aufrufer übernimmt den Besitz des Ausgabeparameter-Arrays und muss es mit keymaster_free_param_set() freigeben. out_params kann auf NULL gesetzt werden, wenn keine Ausgabeparameter erwartet werden. Wenn out_params NULL ist und Ausgabeparameter generiert werden, gibt begin() KM_ERROR_OUTPUT_PARAMETER_NULL zurück.
[aus] operation_handle Das neu erstellte Operationshandle, das an update() , finish() oder abort() übergeben werden muss. Wenn operation_handle NULL ist, gibt begin() KM_ERROR_OUTPUT_PARAMETER_NULL zurück.

Definition in Zeile 451 der Datei keymaster1.h .

uint32_t client_version

DIES IST VERALTET. Verwenden Sie stattdessen die neuen Felder „module_api_version“ und „hal_api_version“ in der keymaster_module-Initialisierung.

Definition in Zeile 41 der Datei keymaster1.h .

struct hw_device_t common

Gängige Methoden des Keymaster-Geräts. Dies muss das erste Mitglied von keymaster_device sein, da Benutzer dieser Struktur in Kontexten, in denen bekannt ist, dass hw_device_t auf ein keymaster_device verweist, einen hw_device_t auf einen keymaster_device-Zeiger umwandeln.

Definition in Zeile 35 der Datei keymaster1.h .

void* Kontext

Definition in Zeile 48 der Datei keymaster1.h .

int(* delete_all)(const struct keymaster1_device *dev)
Veraltet:
Löscht alle Schlüssel im Hardware-Keystore. Wird verwendet, wenn der Keystore vollständig zurückgesetzt wird.

Diese Funktion ist optional und sollte auf NULL gesetzt werden, wenn sie nicht implementiert ist.

Gibt 0 bei Erfolg oder einem Fehlercode kleiner als 0 zurück.

Definition in Zeile 100 der Datei keymaster1.h .

keymaster_error_t (* delete_all_keys)(const struct keymaster1_device *dev)

Löscht alle Schlüssel im Hardware-Keystore. Wird verwendet, wenn der Keystore vollständig zurückgesetzt wird. Nach dem Aufruf dieser Funktion ist es nicht mehr möglich, zuvor generierte oder importierte Schlüsselblobs für Vorgänge zu verwenden.

Diese Funktion ist optional und sollte auf NULL gesetzt werden, wenn sie nicht implementiert ist.

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.

Definition in Zeile 407 der Datei keymaster1.h .

keymaster_error_t (* delete_key)(const struct keymaster1_device *dev, const keymaster_key_blob_t *key)

Löscht den Schlüssel oder das Schlüsselpaar, das dem Schlüsselblob zugeordnet ist. Nach dem Aufruf dieser Funktion ist es nicht mehr möglich, die Taste für andere Vorgänge zu verwenden. Kann auf Schlüssel von fremden Vertrauenswurzeln angewendet werden (Schlüssel, die unter der aktuellen Vertrauenswurzel nicht verwendet werden können).

Diese Funktion ist optional und sollte auf NULL gesetzt werden, wenn sie nicht implementiert ist.

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] Schlüssel Der zu löschende Schlüssel.

Definition in Zeile 395 der Datei keymaster1.h .

int(* delete_keypair)(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length)
Veraltet:
Löscht das mit dem Schlüsselblob verknüpfte Schlüsselpaar.

Diese Funktion ist optional und sollte auf NULL gesetzt werden, wenn sie nicht implementiert ist.

Gibt 0 bei Erfolg oder einem Fehlercode kleiner als 0 zurück.

Definition in Zeile 88 der Datei keymaster1.h .

keymaster_error_t (*export_key)(const struct keymaster1_device *dev, keymaster_key_format_t export_format, const keymaster_key_blob_t *key_to_export, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_blob_t *export_data)

Exportiert einen öffentlichen Schlüssel und gibt ein Byte-Array im angegebenen Format zurück.

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] export_format Das Format, das zum Exportieren des Schlüssels verwendet werden soll.
[In] key_to_export Der Schlüssel zum Export.
[aus] Daten exportieren Das exportierte Schlüsselmaterial. Der Anrufer übernimmt das Eigentum.
[aus] export_data_length Die Länge von export_data .

Definition in Zeile 377 der Datei keymaster1.h .

keymaster_error_t (* fertig)(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *signature, keymaster_key_param_set_t *out_params, keymaster_blob_t *output)

Schließt eine mit begin() begonnene kryptografische Operation ab und macht operation_handle ungültig.

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] operation_handle Das von begin() zurückgegebene Operationshandle. Dieses Handle wird ungültig.
[In] Parameter Zusätzliche Parameter für den Vorgang. Für AEAD-Modi wird dies verwendet, um KM_TAG_ADDITIONAL_DATA anzugeben, jedoch nur, wenn keine Eingabedaten für update() bereitgestellt wurden.
[In] Unterschrift Die zu überprüfende Signatur, wenn der im begin() -Aufruf angegebene Zweck KM_PURPOSE_VERIFY war.
[aus] Ausgabe Die Ausgabedaten, falls vorhanden. Der Aufrufer übernimmt den Besitz des zugewiesenen Puffers.

Wenn es sich bei dem abgeschlossenen Vorgang um eine Signaturüberprüfung oder eine Entschlüsselung und Überprüfung im AEAD-Modus handelt, schlägt die Funktion „finish()“ KM_ERROR_VERIFICATION_FAILED zurück.

Definition in Zeile 521 der Datei keymaster1.h .

uint32_t-Flags

Siehe die für keymaster0_devices::flags in keymaster_common.h definierten Flags

Definition in Zeile 46 der Datei keymaster1.h .

keymaster_error_t (* generic_key)(const struct keymaster1_device *dev, const keymaster_key_param_set_t *params, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t **characteristics)

Erzeugt einen Schlüssel oder ein Schlüsselpaar und gibt einen Schlüsselblob und/oder eine Beschreibung des Schlüssels zurück.

Schlüsselgenerierungsparameter werden als Keymaster-Tag/Wert-Paare definiert und in params bereitgestellt. Die vollständige Liste finden Sie unter keymaster_tag_t. Einige Werte, die für die Generierung nützlicher Schlüssel immer erforderlich sind, sind:

  • KM_TAG_ALGORITHMUS;
  • KM_TAG_PURPOSE; Und
  • (KM_TAG_USER_SECURE_ID und KM_TAG_USER_AUTH_TYPE) oder KM_TAG_NO_AUTH_REQUIRED.

KM_TAG_AUTH_TIMEOUT sollte im Allgemeinen angegeben werden, es sei denn, KM_TAG_NO_AUTH_REQUIRED ist vorhanden, da sich der Benutzer sonst bei jeder Verwendung authentifizieren muss.

KM_TAG_BLOCK_MODE, KM_TAG_PADDING, KM_TAG_MAC_LENGTH und KM_TAG_DIGEST müssen für Algorithmen angegeben werden, die dies erfordern.

Die folgenden Tags dürfen nicht angegeben werden; Ihre Werte werden von der Implementierung bereitgestellt.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] Parameter Array von Schlüsselgenerierungsparametern.
[In] params_count Länge der params .
[aus] key_blob gibt den generierten Schlüssel zurück. key_blob darf nicht NULL sein. Der Aufrufer übernimmt den Besitz von key_blob->key_material und muss es freigeben().
[aus] Eigenschaften Gibt die Merkmale des Schlüssels zurück, der generiert wurde, wenn dieser nicht NULL ist. Wenn nicht NULL, übernimmt der Aufrufer den Besitz und muss die Zuordnung mit keymaster_free_characteristics() aufheben. Beachten Sie, dass KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID und KM_TAG_APPLICATION_DATA niemals zurückgegeben werden.

Definition in Zeile 282 der Datei keymaster1.h .

int(* generic_keypair)(const struct keymaster1_device *dev, const keymaster_keypair_t key_type, const void *key_params, uint8_t **key_blob, size_t *key_blob_length)
Veraltet:
Erzeugt einen öffentlichen und privaten Schlüssel. Der zurückgegebene Schlüsselblob ist undurchsichtig und muss anschließend zur Signierung und Überprüfung bereitgestellt werden.

Gibt zurück: 0 bei Erfolg oder einem Fehlercode kleiner als 0.

Definition in Zeile 56 der Datei keymaster1.h .

keymaster_error_t (* get_key_characteristics)(const struct keymaster1_device *dev, const keymaster_key_blob_t *key_blob, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_key_characteristics_t **characteristics)

Gibt die Merkmale des angegebenen Schlüssels oder KM_ERROR_INVALID_KEY_BLOB zurück, wenn der key_blob ungültig ist (Implementierungen müssen die Integrität des Schlüssels vollständig validieren). client_id und app_data müssen die ID und die Daten sein, die beim Generieren oder Importieren des Schlüssels angegeben wurden, oder leer sein, wenn KM_TAG_APPLICATION_ID und/oder KM_TAG_APPLICATION_DATA bei der Generierung nicht angegeben wurden. Diese Werte sind nicht in den zurückgegebenen Merkmalen enthalten. Der Aufrufer übernimmt den Besitz des zugewiesenen Characteristics-Objekts, dessen Zuordnung mit keymaster_free_characteristics() aufgehoben werden muss.

Beachten Sie, dass KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID und KM_TAG_APPLICATION_DATA niemals zurückgegeben werden.

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] key_blob Der Schlüssel zum Abrufen von Eigenschaften.
[In] Kunden ID Die Client-ID-Daten oder NULL, wenn keine zugeordnet sind.
[In] app_id Die App-Daten oder NULL, wenn keine zugeordnet sind.
[aus] Eigenschaften Die wichtigsten Merkmale.

Definition in Zeile 309 der Datei keymaster1.h .

int(* get_keypair_public)(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length, uint8_t **x509_data, size_t *x509_data_length)
Veraltet:
Ruft den öffentlichen Schlüsselteil eines Schlüsselpaars ab. Der öffentliche Schlüssel muss im X.509-Format (Java-Standard) als codiertes Byte-Array vorliegen.

Gibt zurück: 0 bei Erfolg oder einem Fehlercode kleiner als 0. Bei einem Fehler sollte x509_data nicht zugewiesen werden.

Definition in Zeile 76 der Datei keymaster1.h .

keymaster_error_t (* get_supported_algorithms)(const struct keymaster1_device *dev, keymaster_algorithm_t **algorithms, size_t *algorithms_length)

Ruft unterstützte Algorithmen ab.

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[aus] Algorithmen Array unterstützter Algorithmen. Der Aufrufer übernimmt den Besitz des Arrays und muss es freigeben().
[aus] algorithmen_länge Länge der algorithms .

Definition in Zeile 133 der Datei keymaster1.h .

keymaster_error_t (* get_supported_block_modes)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_zweck_t purpose, keymaster_block_mode_t **modes, size_t *modes_length)

Ruft die für den angegebenen Algorithmus unterstützten Blockmodi ab.

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] Algorithmus Der Algorithmus, für den unterstützte Modi zurückgegeben werden.
[aus] Modi Reihe von unterstützten Modi. Der Aufrufer übernimmt den Besitz des Arrays und muss es freigeben().
[aus] Modi_Länge Länge der modes .

Definition in Zeile 149 der Datei keymaster1.h .

keymaster_error_t (* get_supported_digests)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_zweck_t purpose, keymaster_digest_t **digests, size_t *digests_length)

Ruft die Digests ab, die für den angegebenen Algorithmus unterstützt werden. Der Aufrufer übernimmt den Besitz des zugewiesenen Arrays.

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] Algorithmus Der Algorithmus, für den unterstützte Digests zurückgegeben werden.
[aus] verdaut Unterstütztes Digest-Array. Der Aufrufer übernimmt den Besitz des Arrays und muss es freigeben().
[aus] digests_length Länge der digests .

Definition in Zeile 187 der Datei keymaster1.h .

keymaster_error_t (* get_supported_export_formats)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_key_format_t **formats, size_t *formats_length)

Ruft die Schlüsselexportformate ab, die für Schlüssel des angegebenen Algorithmus unterstützt werden. Der Aufrufer übernimmt den Besitz des zugewiesenen Arrays.

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] Algorithmus Der Algorithmus, für den unterstützte Formate zurückgegeben werden.
[aus] Formate Reihe unterstützter Formate. Der Aufrufer übernimmt den Besitz des Arrays und muss es freigeben().
[aus] formats_length Länge der formats .

Definition in Zeile 224 der Datei keymaster1.h .

keymaster_error_t (* get_supported_import_formats)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_key_format_t **formats, size_t *formats_length)

Ruft die Schlüsselimportformate ab, die für Schlüssel des angegebenen Algorithmus unterstützt werden. Der Aufrufer übernimmt den Besitz des zugewiesenen Arrays.

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] Algorithmus Der Algorithmus, für den unterstützte Formate zurückgegeben werden.
[aus] Formate Reihe unterstützter Formate. Der Aufrufer übernimmt den Besitz des Arrays und muss es freigeben().
[aus] formats_length Länge der formats .

Definition in Zeile 206 der Datei keymaster1.h .

keymaster_error_t (* get_supported_padding_modes)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_zweck_t purpose, keymaster_padding_t **modes, size_t *modes_length)

Ruft die Auffüllmodi ab, die für den angegebenen Algorithmus unterstützt werden. Der Aufrufer übernimmt den Besitz des zugewiesenen Arrays.

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] Algorithmus Der Algorithmus, für den unterstützte Auffüllmodi zurückgegeben werden.
[aus] Modi Eine Reihe von Auffüllmodi werden unterstützt. Der Aufrufer übernimmt den Besitz des Arrays und muss es freigeben().
[aus] Modi_Länge Länge der modes .

Definition in Zeile 168 der Datei keymaster1.h .

keymaster_error_t (* import_key)(const struct keymaster1_device *dev, const keymaster_key_param_set_t *params, keymaster_key_format_t key_format, const keymaster_blob_t *key_data, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t **characteristics)

Importiert einen Schlüssel oder ein Schlüsselpaar und gibt einen Schlüsselblob und/oder eine Beschreibung des Schlüssels zurück.

Die meisten Schlüsselimportparameter werden als Keymaster-Tag/Wert-Paare definiert und in „params“ bereitgestellt. Die vollständige Liste finden Sie unter keymaster_tag_t. Werte, die für den Import nützlicher Schlüssel immer erforderlich sind, sind:

  • KM_TAG_ALGORITHMUS;
  • KM_TAG_PURPOSE; Und
  • (KM_TAG_USER_SECURE_ID und KM_TAG_USER_AUTH_TYPE) oder KM_TAG_NO_AUTH_REQUIRED.

Generell sollte KM_TAG_AUTH_TIMEOUT angegeben werden. Wenn keine Angabe erfolgt, muss sich der Benutzer bei jeder Verwendung authentifizieren.

Die folgenden Tags nehmen Standardwerte an, wenn sie nicht angegeben werden:

  • KM_TAG_KEY_SIZE verwendet standardmäßig die Größe des bereitgestellten Schlüssels.
  • KM_TAG_RSA_PUBLIC_EXPONENT verwendet standardmäßig den Wert im bereitgestellten Schlüssel (für RSA-Schlüssel).

Die folgenden Tags dürfen nicht angegeben werden; Ihre Werte werden von der Implementierung bereitgestellt.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] Parameter Parameter, die den importierten Schlüssel definieren.
[In] params_count Die Anzahl der Einträge in params .
[In] key_format Gibt das Format der Schlüsseldaten in key_data an.
[aus] key_blob Wird verwendet, um den undurchsichtigen Schlüssel-Blob zurückzugeben. Darf nicht NULL sein. Der Aufrufer übernimmt den Besitz des enthaltenen key_material.
[aus] Eigenschaften Wird verwendet, um die Eigenschaften des importierten Schlüssels zurückzugeben. Kann NULL sein. In diesem Fall werden keine Merkmale zurückgegeben. Wenn nicht NULL, übernimmt der Aufrufer den Besitz und muss die Zuordnung mit keymaster_free_characteristics() aufheben. Beachten Sie, dass KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID und KM_TAG_APPLICATION_DATA niemals zurückgegeben werden.

Definition in Zeile 357 der Datei keymaster1.h .

int(* import_keypair)(const struct keymaster1_device *dev, const uint8_t *key, const size_t key_length, uint8_t **key_blob, size_t *key_blob_length)
Veraltet:
Importiert ein Paar aus öffentlichem und privatem Schlüssel. Die importierten Schlüssel liegen im PKCS#8-Format mit DER-Kodierung (Java-Standard) vor. Der zurückgegebene Schlüssel-Blob ist undurchsichtig und wird anschließend zum Signieren und Überprüfen bereitgestellt.

Gibt zurück: 0 bei Erfolg oder einem Fehlercode kleiner als 0.

Definition in Zeile 66 der Datei keymaster1.h .

int(* sign_data)(const struct keymaster1_device *dev, const void *signing_params, const uint8_t *key_blob, const size_t key_blob_length, const uint8_t *data, const size_t data_length, uint8_t **signed_data, size_t *signed_data_length)
Veraltet:
Signiert Daten mithilfe eines zuvor generierten Schlüsselblobs. Dabei kann entweder ein asymmetrischer Schlüssel oder ein geheimer Schlüssel verwendet werden.

Gibt zurück: 0 bei Erfolg oder einem Fehlercode kleiner als 0.

Definition in Zeile 108 der Datei keymaster1.h .

keymaster_error_t (* update)(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *input, size_t *input_consumed, keymaster_key_param_set_t *out_params, keymaster_blob_t *output)

Stellt Daten für einen laufenden kryptografischen Vorgang bereit, der mit begin() begonnen wurde, und empfängt möglicherweise Ausgaben von diesem.

Wenn operation_handle ungültig ist, gibt update() KM_ERROR_INVALID_OPERATION_HANDLE zurück.

update() verbraucht möglicherweise nicht alle im Datenpuffer bereitgestellten Daten. update() gibt die in *data_consumed verbrauchte Menge zurück. Der Anrufer sollte die nicht verbrauchten Daten in einem nachfolgenden Anruf bereitstellen.

Parameter
[In] Entwickler Die Keymaster-Gerätestruktur.
[In] operation_handle Das von begin() zurückgegebene Operationshandle.
[In] in_params Zusätzliche Parameter für den Vorgang. Für AEAD-Modi wird dies verwendet, um KM_TAG_ADDITIONAL_DATA anzugeben. Beachten Sie, dass zusätzliche Daten in mehreren Aufrufen von update() bereitgestellt werden können, jedoch nur bis die Eingabedaten bereitgestellt wurden.
[In] Eingang Zu verarbeitende Daten gemäß den im Aufruf von begin() festgelegten Parametern. Beachten Sie, dass update() möglicherweise alle bereitgestellten Daten verbraucht oder nicht. Siehe input_consumed .
[aus] input_consumed Datenmenge, die von update() verbraucht wurde. Wenn dieser Betrag geringer ist als der angegebene Betrag, sollte der Aufrufer den Rest in einem nachfolgenden Aufruf von update() bereitstellen.
[aus] out_params Ausgabeparameter. Wird verwendet, um zusätzliche Daten von der Operation zurückzugeben. Der Aufrufer übernimmt den Besitz des Ausgabeparameter-Arrays und muss es mit keymaster_free_param_set() freigeben. out_params kann auf NULL gesetzt werden, wenn keine Ausgabeparameter erwartet werden. Wenn out_params NULL ist und Ausgabeparameter generiert werden, gibt begin() KM_ERROR_OUTPUT_PARAMETER_NULL zurück.
[aus] Ausgabe Die Ausgabedaten, falls vorhanden. Der Aufrufer übernimmt den Besitz des zugewiesenen Puffers. Die Ausgabe darf nicht NULL sein.

Beachten Sie, dass update() möglicherweise keine Ausgabe bereitstellt. In diesem Fall ist „output->data_length“ Null und „output->data“ kann entweder NULL oder die Länge Null sein (der Aufrufer sollte es also immer „free()“ verwenden).

Definition in Zeile 495 der Datei keymaster1.h .

int(* verify_data)(const struct keymaster1_device *dev, const void *signing_params, const uint8_t *key_blob, const size_t key_blob_length, const uint8_t *signed_data, const size_t signierte_daten_länge, const uint8_t *signature, const size_t signatur_länge)
Veraltet:
Überprüft mit einem Schlüsselblob signierte Daten. Dabei kann entweder ein asymmetrischer Schlüssel oder ein geheimer Schlüssel verwendet werden.

Rückgabe: 0 bei erfolgreicher Überprüfung oder ein Fehlercode kleiner als 0.

Definition in Zeile 118 der Datei keymaster1.h .


Die Dokumentation für diese Struktur wurde aus der folgenden Datei generiert: