Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Opis struktury keymaster1_device

Opis struktury keymaster1_device

#include < keymaster1.h >

Pola danych

struct hw_device_t wspólny
uint32_t wersja_klienta
uint32_t flagi
próżnia * kontekst
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 podpis
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, algorytm keymaster_algorithm_t , keymaster_purpose_t cel, keymaster_block_mode_t **modes, size_t *modes_length)
keymaster_error_t (* get_supported_padding_modes )(const struct keymaster1_device *dev, algorytm keymaster_algorithm_t , keymaster_purpose_t cel, keymaster_padding_t **modes, size_t *modes_length)
keymaster_error_t (* get_supported_digests )(const struct keymaster1_device *dev, algorytm keymaster_algorithm_t , keymaster_purpose_t cel, keymaster_digest_t **digests, size_t *digests_length)
keymaster_error_t (* get_supported_import_formats )(const struct keymaster1_device *dev, algorytm keymaster_algorithm_t , keymaster_key_format_t **formats, size_t *formats_length)
keymaster_error_t (* get_supported_export_formats )(const struct keymaster1_device *dev, algorytm keymaster_algorithm_t , 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 **charakterystyka)
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 **charakterystyka)
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 **charakterystyka)
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 cel, 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_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 (* przerwać )(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle)

szczegółowy opis

Definicja urządzenia Keymaster1

Definicja w linii 28 pliku keymaster1.h .

Dokumentacja terenowa

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

Przerywa operację kryptograficzną rozpoczętą za pomocą begin() , zwalniając wszystkie wewnętrzne zasoby i unieważniając operation_handle .

Definicja w wierszu 531 pliku keymaster1.h .

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

Dodaje entropię do RNG używanego przez keymastera. Entropia dodana za pomocą tej metody gwarantuje, że nie będzie jedynym używanym źródłem entropii, a funkcja mieszania musi być bezpieczna, w tym sensie, że jeśli RNG zostanie zaszczepiony (z dowolnego źródła) jakimikolwiek danymi, których atakujący nie może przewidzieć (lub kontroli), wtedy wyjście RNG jest nie do odróżnienia od losowego. Tak więc, jeśli entropia z dowolnego źródła jest dobra, wynik będzie dobry.

Parametry
[w] dev Struktura urządzenia keymastera.
[w] dane Losowe dane do wmieszania.
[w] długość_danych Długość data .

Definicja w wierszu 242 pliku keymaster1.h .

Rozpoczyna operację kryptograficzną przy użyciu określonego klucza. Jeśli wszystko jest w porządku, begin() zwróci KM_ERROR_OK i utworzy uchwyt operacji, który musi być przekazywany do kolejnych wywołań funkcji update() , finish() lub abort() .

Bardzo ważne jest, aby każde wywołanie begin() było sparowane z kolejnym wywołaniem finish() lub abort() , aby umożliwić implementacji keymastera wyczyszczenie wszelkich wewnętrznych stanów operacji. Niewykonanie tego może spowodować wyciek wewnętrznej przestrzeni stanów lub innych zasobów wewnętrznych i może ostatecznie spowodować, że funkcja begin() zwróci KM_ERROR_TOO_MANY_OPERATIONS, gdy zabraknie miejsca na operacje. Każdy wynik inny niż KM_ERROR_OK z begin() , update() lub finish() domyślnie przerywa operację, w którym to przypadku abort() nie musi być wywoływany (i zwróci KM_ERROR_INVALID_OPERATION_HANDLE, jeśli zostanie wywołany).

Parametry
[w] dev Struktura urządzenia keymastera.
[w] zamiar Cel operacji, jeden z KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN lub KM_PURPOSE_VERIFY. Należy pamiętać, że w przypadku trybów AEAD szyfrowanie i odszyfrowywanie oznaczają odpowiednio podpisanie i weryfikację, ale powinny być określone jako KM_PURPOSE_ENCRYPT i KM_PURPOSE_DECRYPT.
[w] klucz Klucz używany do operacji. key musi mieć cel zgodny z purpose i wszystkie jego wymagania dotyczące użycia muszą być spełnione, w przeciwnym razie funkcja begin() zwróci odpowiedni kod błędu.
[w] in_params Dodatkowe parametry operacji. Jest to zwykle używane do dostarczania danych uwierzytelniających za pomocą KM_TAG_AUTH_TOKEN. Jeśli KM_TAG_APPLICATION_ID lub KM_TAG_APPLICATION_DATA zostały podane podczas generowania, należy je podać tutaj, w przeciwnym razie operacja zakończy się niepowodzeniem z podaniem KM_ERROR_INVALID_KEY_BLOB. W przypadku operacji wymagających wartości jednorazowej lub IV w kluczach wygenerowanych za pomocą KM_TAG_CALLER_NONCE, in_params może zawierać tag KM_TAG_NONCE. W przypadku operacji AEAD określono tutaj KM_TAG_CHUNK_SIZE.
[na zewnątrz] out_params Parametry wyjściowe. Służy do zwracania dodatkowych danych z inicjalizacji operacji, zwłaszcza do zwracania IV lub jednorazowości z operacji, które generują IV lub jednorazową. Wywołujący przejmuje własność tablicy parametrów wyjściowych i musi ją zwolnić za pomocą keymaster_free_param_set() . out_params może być ustawiona na NULL, jeśli nie są oczekiwane żadne parametry wyjściowe. Jeśli out_params ma wartość NULL, a parametry wyjściowe są generowane, begin() zwróci KM_ERROR_OUTPUT_PARAMETER_NULL.
[na zewnątrz] operacja_uchwyt Nowo utworzony uchwyt operacji, który należy przekazać do funkcji update() , finish() lub abort() . Jeśli operation_handle ma wartość NULL, begin() zwróci KM_ERROR_OUTPUT_PARAMETER_NULL.

Definicja w wierszu 451 pliku keymaster1.h .

uint32_t wersja_klienta

TO JEST PRZESTARZAŁE. Zamiast tego użyj nowych pól „module_api_version” i „hal_api_version” w inicjalizacji keymaster_module.

Definicja w linii 41 pliku keymaster1.h .

struct hw_device_t common

Typowe metody urządzenia keymaster. Musi to być pierwszy element elementu keymaster_device, ponieważ użytkownicy tej struktury będą rzutować hw_device_t na wskaźnik keymaster_device w kontekstach, w których wiadomo, że hw_device_t odwołuje się do keymaster_device.

Definicja w linii 35 pliku keymaster1.h .

nieważny* kontekst

Definicja w linii 48 pliku keymaster1.h .

int(* usuń_wszystko)(const struct keymaster1_device *dev)
Przestarzałe:
Usuwa wszystkie klucze ze sprzętowego magazynu kluczy. Używane, gdy magazyn kluczy jest całkowicie zresetowany.

Ta funkcja jest opcjonalna i powinna być ustawiona na NULL, jeśli nie jest zaimplementowana.

Zwraca 0 w przypadku powodzenia lub kod błędu mniejszy niż 0.

Definicja w wierszu 100 pliku keymaster1.h .

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

Usuwa wszystkie klucze ze sprzętowego magazynu kluczy. Używane, gdy magazyn kluczy jest całkowicie zresetowany. Po wywołaniu tej funkcji nie będzie możliwe wykorzystanie wcześniej wygenerowanych lub zaimportowanych kluczowych blobów do jakichkolwiek operacji.

Ta funkcja jest opcjonalna i powinna być ustawiona na NULL, jeśli nie jest zaimplementowana.

Parametry
[w] dev Struktura urządzenia keymastera.

Definicja w wierszu 407 pliku keymaster1.h .

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

Usuwa klucz lub parę kluczy skojarzoną z obiektem BLOB klucza. Po wywołaniu tej funkcji nie będzie można użyć klawisza do jakichkolwiek innych operacji. Może być stosowany do kluczy z obcych źródeł zaufania (klucze, których nie można używać w bieżącym katalogu zaufania).

Ta funkcja jest opcjonalna i powinna być ustawiona na NULL, jeśli nie jest zaimplementowana.

Parametry
[w] dev Struktura urządzenia keymastera.
[w] klucz Klucz do usunięcia.

Definicja w wierszu 395 pliku keymaster1.h .

int(* delete_keypair)(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length)
Przestarzałe:
Usuwa parę kluczy skojarzoną z obiektem BLOB klucza.

Ta funkcja jest opcjonalna i powinna być ustawiona na NULL, jeśli nie jest zaimplementowana.

Zwraca 0 w przypadku powodzenia lub kod błędu mniejszy niż 0.

Definicja w linii 88 pliku 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

Eksportuje klucz publiczny, zwracając tablicę bajtów w określonym formacie.

Parametry
[w] dev Struktura urządzenia keymastera.
[w] format_eksportu Format, który ma być użyty do eksportu klucza.
[w] klucz_do_eksportu Klucz do eksportu.
[na zewnątrz] eksport_danych Wyeksportowany materiał klucza. Dzwoniący przejmuje własność.
[na zewnątrz] export_data_length Długość export_data .

Definicja w wierszu 377 pliku 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

Finalizuje operację kryptograficzną rozpoczętą od begin() i unieważnia operation_handle .

Parametry
[w] dev Struktura urządzenia keymastera.
[w] operacja_uchwyt Uchwyt operacji zwrócony przez begin() . Ten uchwyt zostanie unieważniony.
[w] param Dodatkowe parametry operacji. W trybach AEAD jest to używane do określenia KM_TAG_ADDITIONAL_DATA, ale tylko wtedy, gdy do funkcji update() nie przekazano żadnych danych wejściowych.
[w] podpis Podpis do zweryfikowania, jeśli celem określonym w wywołaniu begin() było KM_PURPOSE_VERIFY.
[na zewnątrz] wyjście Dane wyjściowe, jeśli istnieją. Wywołujący przejmuje własność przydzielonego bufora.

Jeśli kończona operacja jest weryfikacją podpisu lub odszyfrowaniem w trybie AEAD i weryfikacja nie powiedzie się, funkcja finish() zwróci KM_ERROR_VERIFICATION_FAILED.

Definicja w wierszu 521 pliku keymaster1.h .

flagi uint32_t

Zobacz flagi zdefiniowane dla keymaster0_devices::flags w keymaster_common.h

Definicja w linii 46 pliku 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 **charakterystyka)

Generuje klucz lub parę kluczy, zwracając obiekt blob klucza i/lub opis klucza.

Parametry generowania kluczy są definiowane jako pary tag/wartość keymastera podane w params . Zobacz keymaster_tag_t pełną listę. Niektóre wartości, które są zawsze wymagane do generowania przydatnych kluczy, to:

  • KM_TAG_ALGORITHM;
  • KM_TAG_PURPOSE; oraz
  • (KM_TAG_USER_SECURE_ID i KM_TAG_USER_AUTH_TYPE) lub KM_TAG_NO_AUTH_REQUIRED.

Zwykle należy określić KM_TAG_AUTH_TIMEOUT, chyba że KM_TAG_NO_AUTH_REQUIRED jest obecny, w przeciwnym razie użytkownik będzie musiał uwierzytelniać się przy każdym użyciu.

KM_TAG_BLOCK_MODE, KM_TAG_PADDING, KM_TAG_MAC_LENGTH i KM_TAG_DIGEST muszą być określone dla algorytmów, które ich wymagają.

Nie można określić następujących tagów; ich wartości zostaną dostarczone przez wdrożenie.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
Parametry
[w] dev Struktura urządzenia keymastera.
[w] param Tablica parametrów generowania kluczy.
[w] params_count Długość params .
[na zewnątrz] key_blob zwraca wygenerowany klucz. key_blob nie może mieć wartości NULL. Wywołujący zakłada własność key_blob->key_material i musi go zwolnić.
[na zewnątrz] cechy charakterystyczne zwraca charakterystykę klucza, który został wygenerowany, jeśli nie ma wartości NULL. Jeśli nie jest NULL, obiekt wywołujący przejmuje własność i musi cofnąć alokację za pomocą funkcji keymaster_free_characteristics() . Pamiętaj, że KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID i KM_TAG_APPLICATION_DATA nigdy nie są zwracane.

Definicja w wierszu 282 pliku 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)
Przestarzałe:
Generuje klucz publiczny i prywatny. Zwrócony blok klucza jest nieprzezroczysty i należy go następnie dostarczyć do podpisania i weryfikacji.

Zwraca: 0 w przypadku powodzenia lub kod błędu mniejszy niż 0.

Definicja w linii 56 pliku 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 **charakterystyka)

Zwraca charakterystykę określonego klucza lub KM_ERROR_INVALID_KEY_BLOB, jeśli key_blob jest nieprawidłowy (implementacje muszą w pełni weryfikować integralność klucza). client_id i app_data muszą być identyfikatorem i danymi podanymi podczas generowania lub importowania klucza lub być puste, jeśli KM_TAG_APPLICATION_ID i/lub KM_TAG_APPLICATION_DATA nie zostały podane podczas generowania. Wartości te nie są uwzględniane w zwracanych cechach. Wywołujący przyjmuje własność przydzielonego obiektu cech, który musi zostać cofnięty za pomocą funkcji keymaster_free_characteristics() .

Pamiętaj, że KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID i KM_TAG_APPLICATION_DATA nigdy nie są zwracane.

Parametry
[w] dev Struktura urządzenia keymastera.
[w] key_blob Klucz do odzyskania cech.
[w] Identyfikator klienta Dane identyfikatora klienta lub NULL, jeśli nie są powiązane.
[w] identyfikator_aplikacji Dane aplikacji lub NULL, jeśli nie są skojarzone.
[na zewnątrz] cechy charakterystyczne Kluczowe cechy.

Definicja w wierszu 309 pliku 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)
Przestarzałe:
Pobiera część klucza publicznego z pary kluczy. Klucz publiczny musi mieć zakodowaną tablicę bajtów w formacie X.509 (standard Java).

Zwraca: 0 w przypadku powodzenia lub kod błędu mniejszy niż 0. W przypadku błędu nie należy przydzielać x509_data.

Definicja w linii 76 pliku keymaster1.h .

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

Pobiera obsługiwane algorytmy.

Parametry
[w] dev Struktura urządzenia keymastera.
[na zewnątrz] algorytmy Obsługiwana tablica algorytmów. Wywołujący przejmuje na własność tablicę i musi ją zwolnić.
[na zewnątrz] długość_algorytmu Długość algorithms .

Definicja w wierszu 133 pliku keymaster1.h .

keymaster_error_t (* get_supported_block_modes)(const struct keymaster1_device *dev, algorytm keymaster_algorithm_t , keymaster_purpose_t cel, keymaster_block_mode_t **modes, size_t *modes_length)

Pobiera tryby blokowe obsługiwane dla określonego algorytmu.

Parametry
[w] dev Struktura urządzenia keymastera.
[w] algorytm Algorytm, dla którego zostaną zwrócone obsługiwane tryby.
[na zewnątrz] tryby Obsługiwana tablica trybów. Wywołujący przejmuje na własność tablicę i musi ją zwolnić.
[na zewnątrz] tryby_długość Długość modes .

Definicja w wierszu 149 pliku keymaster1.h .

keymaster_error_t (* get_supported_digests)(const struct keymaster1_device *dev, algorytm keymaster_algorithm_t , keymaster_purpose_t cel, keymaster_digest_t **digests, size_t *digests_length)

Pobiera skróty obsługiwane dla określonego algorytmu. Wywołujący przejmuje własność przydzielonej tablicy.

Parametry
[w] dev Struktura urządzenia keymastera.
[w] algorytm Algorytm, dla którego zostaną zwrócone obsługiwane skróty.
[na zewnątrz] trawi Obsługiwana tablica podsumowań. Wywołujący przejmuje na własność tablicę i musi ją zwolnić.
[na zewnątrz] streszczenia_długości Długość digests .

Definicja w wierszu 187 pliku keymaster1.h .

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

Pobiera formaty eksportu kluczy obsługiwane dla kluczy określonego algorytmu. Wywołujący przejmuje własność przydzielonej tablicy.

Parametry
[w] dev Struktura urządzenia keymastera.
[w] algorytm Algorytm, dla którego zostaną zwrócone obsługiwane formaty.
[na zewnątrz] formaty Obsługiwana tablica formatów. Wywołujący przejmuje na własność tablicę i musi ją zwolnić.
[na zewnątrz] formaty_długość Długość formats .

Definicja w wierszu 224 pliku keymaster1.h .

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

Pobiera formaty importu kluczy obsługiwane dla kluczy określonego algorytmu. Wywołujący przejmuje własność przydzielonej tablicy.

Parametry
[w] dev Struktura urządzenia keymastera.
[w] algorytm Algorytm, dla którego zostaną zwrócone obsługiwane formaty.
[na zewnątrz] formaty Obsługiwana tablica formatów. Wywołujący przejmuje na własność tablicę i musi ją zwolnić.
[na zewnątrz] formaty_długość Długość formats .

Definicja w wierszu 206 pliku keymaster1.h .

keymaster_error_t (* get_supported_padding_modes)(const struct keymaster1_device *dev, algorytm keymaster_algorithm_t , keymaster_purpose_t cel, keymaster_padding_t **modes, size_t *modes_length)

Pobiera tryby uzupełniania obsługiwane dla określonego algorytmu. Wywołujący przejmuje własność przydzielonej tablicy.

Parametry
[w] dev Struktura urządzenia keymastera.
[w] algorytm Algorytm, dla którego zostaną zwrócone obsługiwane tryby dopełniania.
[na zewnątrz] tryby Obsługiwana tablica trybów dopełniania. Wywołujący przejmuje na własność tablicę i musi ją zwolnić.
[na zewnątrz] tryby_długość Długość modes .

Definicja w wierszu 168 pliku keymaster1.h .

Importuje klucz lub parę kluczy, zwracając obiekt BLOB klucza i/lub opis klucza.

Większość parametrów importu kluczy jest zdefiniowana jako pary tag/wartość klucza klucza, podane w „params”. Zobacz keymaster_tag_t pełną listę. Wartości, które są zawsze wymagane do importu przydatnych kluczy to:

  • KM_TAG_ALGORITHM;
  • KM_TAG_PURPOSE; oraz
  • (KM_TAG_USER_SECURE_ID i KM_TAG_USER_AUTH_TYPE) lub KM_TAG_NO_AUTH_REQUIRED.

Ogólnie należy określić KM_TAG_AUTH_TIMEOUT. Jeśli nie zostanie określony, użytkownik będzie musiał uwierzytelniać się przy każdym użyciu.

Następujące tagi przyjmą wartości domyślne, jeśli nie zostaną określone:

  • KM_TAG_KEY_SIZE domyślnie przyjmie rozmiar podanego klucza.
  • KM_TAG_RSA_PUBLIC_EXPONENT domyślnie przyjmie wartość z podanego klucza (dla kluczy RSA)

Nie można określić następujących tagów; ich wartości zostaną dostarczone przez wdrożenie.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
Parametry
[w] dev Struktura urządzenia keymastera.
[w] param Parametry definiujące importowany klucz.
[w] params_count Liczba wpisów w params .
[w] klucz_format określa format danych klucza w key_data.
[na zewnątrz] key_blob Służy do zwracania nieprzezroczystej kropli klucza. Musi mieć wartość różną od NULL. Wywołujący przyjmuje własność zawartego materiału key_material.
[na zewnątrz] cechy charakterystyczne Służy do zwracania właściwości importowanego klucza. Może być NULL, w takim przypadku żadne cechy nie zostaną zwrócone. Jeśli nie jest NULL, obiekt wywołujący przejmuje własność i musi cofnąć alokację za pomocą funkcji keymaster_free_characteristics() . Pamiętaj, że KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID i KM_TAG_APPLICATION_DATA nigdy nie są zwracane.

Definicja w wierszu 357 pliku 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)
Przestarzałe:
Importuje parę kluczy publicznego i prywatnego. Importowane klucze będą w formacie PKCS#8 z kodowaniem DER (standard Java). Zwrócony blok klucza jest nieprzezroczysty i zostanie następnie dostarczony do podpisania i weryfikacji.

Zwraca: 0 w przypadku powodzenia lub kod błędu mniejszy niż 0.

Definicja w linii 66 pliku 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
Przestarzałe:
Podpisuje dane za pomocą wygenerowanego wcześniej bloku bloczka klucza. Może to być klucz asymetryczny lub klucz tajny.

Zwraca: 0 w przypadku powodzenia lub kod błędu mniejszy niż 0.

Definicja w linii 108 pliku keymaster1.h .

keymaster_error_t (* aktualizacja)(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_setm_t , * out_paramoutput )

Dostarcza dane do i prawdopodobnie odbiera dane wyjściowe z trwającej operacji kryptograficznej rozpoczętej od begin() .

Jeśli operation_handle jest nieprawidłowy, update() zwróci KM_ERROR_INVALID_OPERATION_HANDLE.

update() może nie zużywać wszystkich danych dostarczonych w buforze danych. update() zwróci ilość zużytą w *data_consumed. Dzwoniący powinien podać niewykorzystane dane w kolejnym połączeniu.

Parametry
[w] dev Struktura urządzenia keymastera.
[w] operacja_uchwyt Uchwyt operacji zwrócony przez begin() .
[w] in_params Dodatkowe parametry operacji. W trybach AEAD służy do określenia KM_TAG_ADDITIONAL_DATA. Zwróć uwagę, że dodatkowe dane mogą być dostarczane w wielu wywołaniach funkcji update() , ale tylko do momentu dostarczenia danych wejściowych.
[w] Wejście Dane do przetworzenia zgodnie z parametrami ustalonymi w wywołaniu begin() . Pamiętaj, że funkcja update() może, ale nie musi, wykorzystywać wszystkie dostarczone dane. Zobacz input_consumed .
[na zewnątrz] input_consumed Ilość danych wykorzystanych przez funkcję update() . Jeśli jest to mniej niż podana kwota, osoba wywołująca powinna podać resztę w kolejnym wywołaniu funkcji update() .
[na zewnątrz] out_params Parametry wyjściowe. Używany do zwracania dodatkowych danych z operacji Wywołujący przejmuje na własność tablicę parametrów wyjściowych i musi ją zwolnić za pomocą funkcji keymaster_free_param_set() . out_params może być ustawiona na NULL, jeśli nie są oczekiwane żadne parametry wyjściowe. Jeśli out_params ma wartość NULL, a parametry wyjściowe są generowane, begin() zwróci KM_ERROR_OUTPUT_PARAMETER_NULL.
[na zewnątrz] wyjście Dane wyjściowe, jeśli istnieją. Wywołujący przejmuje własność przydzielonego bufora. dane wyjściowe nie mogą mieć wartości NULL.

Zauważ, że update() może nie dostarczać żadnych danych wyjściowych, w takim przypadku output->data_length będzie wynosić zero, a output->data może mieć wartość NULL lub zero (więc wywołujący powinien zawsze free() it).

Definicja w wierszu 495 pliku 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)
Przestarzałe:
Weryfikuje dane podpisane za pomocą obiektu BLOB klucza. Może to być klucz asymetryczny lub klucz tajny.

Zwraca: 0 po pomyślnej weryfikacji lub kod błędu mniejszy niż 0.

Definicja w linii 118 pliku keymaster1.h .


Dokumentacja dla tej struktury została wygenerowana z następującego pliku: