Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

keymaster1_device Strukturreferenz

keymaster1_device Strukturreferenz

#include < keymaster1.h >

Datenfelder

struct hw_device_t gemeinsames
uint32_t client_version
uint32_t Flaggen
Leere * Kontext
int(* generate_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 signed_data_length, const uint8_t *signature, const size_t signature_length)
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 Algorithmus, keymaster_purpose_t Zweck, keymaster_block_mode_t **modes, size_t *modes_length)
keymaster_error_t (* get_supported_padding_modes )(const struct keymaster1_device *dev, keymaster_algorithm_t Algorithmus, keymaster_purpose_t Zweck, keymaster_padding_t **modes, size_t *modes_length)
keymaster_error_t (* get_supported_digests )(const struct keymaster1_device *dev, keymaster_algorithm_t Algorithmus, keymaster_purpose_t Zweck, keymaster_digest_t **digests, size_t *digests_length)
keymaster_error_t (* get_supported_import_formats )(const struct keymaster1_device *dev, keymaster_algorithm_t Algorithmus, keymaster_key_format_t **formats, size_t *formats_length)
keymaster_error_t (* get_supported_export_formats )(const struct keymaster1_device *dev, keymaster_algorithm_t Algorithmus, 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 (* generate_key )(const struct keymaster1_device *dev, const keymaster_key_param_set_t *params, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t **Eigenschaften)
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 **Eigenschaften)
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 **Eigenschaften)
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_purpose_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. Die durch diese Methode hinzugefügte Entropie ist garantiert nicht die einzige verwendete Entropiequelle, und die Mischfunktion muss sicher sein, in dem Sinne, dass der Angreifer nicht vorhersagen kann (oder Kontrolle), dann ist die RNG-Ausgabe nicht von zufällig zu unterscheiden. Wenn also die Entropie von irgendeiner Quelle gut ist, wird die Ausgabe gut sein.

Parameter
[in] Entwickler Die Keymaster-Gerätestruktur.
[in] Daten Zufallsdaten 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_purpose_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)

Startet 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. Wenn Sie dies nicht tun, kann interner Zustandsraum oder andere interne Ressourcen verloren gehen und kann schließlich dazu führen, dass begin() KM_ERROR_TOO_MANY_OPERATIONS zurückgibt, wenn es keinen Platz mehr für Operationen hat. Jedes andere Ergebnis als KM_ERROR_OK von begin() , update() oder finish() bricht die Operation 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 der Operation, entweder KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN oder KM_PURPOSE_VERIFY. Beachten Sie, dass für AEAD-Modi Verschlüsselung und Entschlüsselung Signieren bzw. Verifizieren 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 dem purpose kompatibel ist, und alle seine Verwendungsanforderungen müssen erfüllt sein, oder begin() gibt einen entsprechenden Fehlercode zurück.
[in] in_params Zusätzliche Parameter für die Operation. Dies wird normalerweise verwendet, um Authentifizierungsdaten mit KM_TAG_AUTH_TOKEN bereitzustellen. Wenn KM_TAG_APPLICATION_ID oder KM_TAG_APPLICATION_DATA während der Generierung bereitgestellt wurden, müssen sie hier bereitgestellt werden, oder der Vorgang schlägt mit KM_ERROR_INVALID_KEY_BLOB fehl. Für Operationen, die eine Nonce oder IV erfordern, kann in_params auf 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 Ausgangsparameter. Wird verwendet, um zusätzliche Daten aus der Operationsinitialisierung zurückzugeben, insbesondere um die IV oder Nonce von Operationen zurückzugeben, die eine 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 Operations-Handle, 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 gemeinsam

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-Schlüsselspeicher. Wird verwendet, wenn der Schlüsselspeicher vollständig zurückgesetzt wird.

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

Gibt bei Erfolg 0 oder einen 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-Schlüsselspeicher. Wird verwendet, wenn der Schlüsselspeicher vollständig zurückgesetzt wird. Nach dem Aufruf dieser Funktion können keine zuvor generierten oder importierten Key-Blobs für Operationen verwendet werden.

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 kann die Taste nicht mehr für andere Operationen verwendet werden. Kann auf Schlüssel aus fremden Vertrauensstämmen angewendet werden (Schlüssel, die unter dem aktuellen Vertrauensstränge nicht verwendbar sind).

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 Schlüsselpaar, das dem Schlüsselblob zugeordnet ist.

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

Gibt bei Erfolg 0 oder einen 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 Exportieren.
[aus] Daten exportieren Das exportierte Schlüsselmaterial. Der Aufrufer übernimmt das Eigentum.
[aus] export_data_length Die Länge von export_data .

Definition in Zeile 377 der Datei keymaster1.h .

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)

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

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

Wenn die zu beendende Operation eine Signaturverifizierung oder eine Entschlüsselung im AEAD-Modus ist und die Verifizierung fehlschlägt, gibt finish() KM_ERROR_VERIFICATION_FAILED zurück.

Definition in Zeile 521 der Datei keymaster1.h .

uint32_t-Flags

Siehe Flags, die für keymaster0_devices::flags in keymaster_common.h definiert sind

Definition in Zeile 46 der Datei keymaster1.h .

keymaster_error_t (* generate_key)(const struct keymaster1_device *dev, const keymaster_key_param_set_t *params, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t **Eigenschaften)

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

Parameter für die Schlüsselgenerierung werden als Keymaster-Tag/Wert-Paare definiert, die in params bereitgestellt werden. Siehe keymaster_tag_t für die vollständige Liste. 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, oder der Benutzer muss sich für jede Verwendung authentifizieren.

KM_TAG_BLOCK_MODE, KM_TAG_PADDING, KM_TAG_MAC_LENGTH und KM_TAG_DIGEST müssen für Algorithmen angegeben werden, die sie 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 er 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(* generate_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:
Generiert einen öffentlichen und einen privaten Schlüssel. Das zurückgegebene Key-Blob ist undurchsichtig und muss anschließend zur Signierung und Verifizierung bereitgestellt werden.

Rückgabe: 0 bei Erfolg oder ein 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 **Eigenschaften)

Gibt die Merkmale des angegebenen Schlüssels oder KM_ERROR_INVALID_KEY_BLOB zurück, wenn 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 bereitgestellt wurden, oder leer sein, wenn KM_TAG_APPLICATION_ID und/oder KM_TAG_APPLICATION_DATA während der Generierung nicht bereitgestellt wurden. Diese Werte sind nicht in den zurückgegebenen Merkmalen enthalten. Der Aufrufer übernimmt den Besitz des zugewiesenen Merkmalsobjekts, das mit keymaster_free_characteristics() freigegeben 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 Merkmalen aus.
[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 Eigenschaften.

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) kodiertes Byte-Array sein.

Rückgabe: 0 bei Erfolg oder ein 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 Algorithmen unterstützt.

Parameter
[in] Entwickler Die Keymaster-Gerätestruktur.
[aus] Algorithmen Array von unterstützten Algorithmen. Der Aufrufer übernimmt den Besitz des Arrays und muss es freigeben.
[aus] algorithms_length 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 Algorithmus, keymaster_purpose_t Zweck, 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 Array 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 Algorithmus, keymaster_purpose_t Zweck, 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 Array von Digests unterstützt. Der Aufrufer übernimmt den Besitz des Arrays und muss es freigeben.
[aus] verdau_länge 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 Array von unterstützten Formaten. Der Aufrufer übernimmt den Besitz des Arrays und muss es freigeben.
[aus] Formate_Länge 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 Array von unterstützten Formaten. Der Aufrufer übernimmt den Besitz des Arrays und muss es freigeben.
[aus] Formate_Länge 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 Algorithmus, keymaster_purpose_t Zweck, keymaster_padding_t **modes, size_t *modes_length)

Ruft die Fü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 Array von Füllmodi 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 **Eigenschaften)

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

Die meisten wichtigen Importparameter sind als Keymaster-Tag/Wert-Paare definiert, die in "params" bereitgestellt werden. Siehe keymaster_tag_t für die vollständige Liste. Werte, die für den Import nützlicher Schlüssel immer benötigt werden, 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 nicht angegeben, muss sich der Benutzer für jede Verwendung authentifizieren.

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

  • KM_TAG_KEY_SIZE nimmt standardmäßig die Größe des bereitgestellten Schlüssels an.
  • KM_TAG_RSA_PUBLIC_EXPONENT wird standardmäßig auf den Wert im bereitgestellten Schlüssel gesetzt (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 das undurchsichtige Schlüssel-Blob zurückzugeben. Muss nicht NULL sein. Der Aufrufer übernimmt das Eigentum an dem enthaltenen key_material.
[aus] Eigenschaften Wird verwendet, um die Merkmale des importierten Schlüssels zurückzugeben. Kann NULL sein, dann 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 sind im PKCS#8-Format mit DER-Codierung (Java-Standard). Das zurückgegebene Key-Blob ist undurchsichtig und wird anschließend zur Signierung und Verifizierung bereitgestellt.

Rückgabe: 0 bei Erfolg oder ein 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 mit einem zuvor generierten Key-Blob. Dabei kann entweder ein asymmetrischer Schlüssel oder ein geheimer Schlüssel verwendet werden.

Rückgabe: 0 bei Erfolg oder ein 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 eine laufende kryptografische Operation bereit, die mit begin() begonnen wurde, und empfängt möglicherweise Ausgaben von ihr.

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 verbrauchte Menge in *data_consumed zurück. Der Anrufer sollte die unverbrauchten Daten in einem nachfolgenden Anruf bereitstellen.

Parameter
[in] Entwickler Die Keymaster-Gerätestruktur.
[in] operation_handle Das von begin() zurückgegebene Vorgangshandle.
[in] in_params Zusätzliche Parameter für die Operation. 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 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] Eingabe_verbraucht Datenmenge, die von update() verbraucht wurde. Wenn dies weniger als der bereitgestellte Betrag ist, sollte der Aufrufer den Rest in einem nachfolgenden Aufruf von update() bereitstellen.
[aus] out_params Ausgangsparameter. Wird verwendet, um zusätzliche Daten aus 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] Ausgang Die Ausgabedaten, falls vorhanden. Der Aufrufer übernimmt den Besitz des zugewiesenen Puffers. Ausgabe darf nicht NULL sein.

Beachten Sie, dass update() möglicherweise keine Ausgabe liefert, in diesem Fall ist output->data_length null und output->data kann entweder NULL oder die Länge null haben (der Aufrufer sollte es also immer freigeben()).

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 signed_data_length, const uint8_t *signature, const size_t signature_length)
Veraltet:
Überprüft mit einem Key-Blob 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: