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

Opis struktury keymaster2_device

Opis struktury keymaster2_device

#include < keymaster2.h >

Pola danych

struct hw_device_t wspólny
próżnia * kontekst
uint32_t flagi
keymaster_error_t (* configure )(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params)
keymaster_error_t (* add_rng_entropy )(const struct keymaster2_device *dev, const uint8_t *data, size_t data_length)
keymaster_error_t (* generate_key )(const struct keymaster2_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 keymaster2_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 keymaster2_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 keymaster2_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 (* attest_key )(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_to_attest, const keymaster_key_param_set_t *attest_params, keymaster_cert_chain_t *cert_chain)
keymaster_error_t (* upgrade_key )(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_to_upgrade, const keymaster_key_param_set_t *upgrade_params, keymaster_key_blob_t *upgraded_key)
keymaster_error_t (* delete_key )(const struct keymaster2_device *dev, const keymaster_key_blob_t *key)
keymaster_error_t (* delete_all_keys )(const struct keymaster2_device *dev)
keymaster_error_t (* begin )(const struct keymaster2_device *dev, keymaster_purpose_t Purpose , 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 keymaster2_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 keymaster2_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *input, const keymaster_blob_t *signature, keymaster_key_param_set_t *out_output_parabs_, key
keymaster_error_t (* przerwać )(const struct keymaster2_device *dev, keymaster_operation_handle_t operation_handle)

szczegółowy opis

Definicja urządzenia Keymaster2

Definicja w linii 28 pliku keymaster2.h .

Dokumentacja terenowa

keymaster_error_t (* abort)(const struct keymaster2_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 415 pliku keymaster2.h .

keymaster_error_t (* add_rng_entropy)(const struct keymaster2_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 74 pliku keymaster2.h .

keymaster_error_t (* attest_key)(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_to_attest, const keymaster_key_param_set_t *attest_params, keymaster_cert_chain_t *cert_chain)

Generuje podpisany łańcuch certyfikatów X.509 potwierdzający obecność key_to_attest w keymaster (TODO(swillden): bardziej szczegółowo opisz zawartość certyfikatu). Certyfikat będzie zawierał rozszerzenie o identyfikatorze OID 1.3.6.1.4.1.11129.2.1.17 oraz wartość zdefiniowaną w <TODO:swillden – wstaw link tutaj>, który zawiera opis klucza.

Parametry
[w] dev Struktura urządzenia keymastera.
[w] klucz_do_zatwierdzenia Klucz mastera, dla którego zostanie wygenerowany certyfikat atestacji.
[w] attest_params Parametry określające sposób wykonania atestu. Obecnie jedynym parametrem jest KM_TAG_ALGORITHM, który musi mieć wartość KM_ALGORITHM_EC lub KM_ALGORITHM_RSA. Umożliwia wybór, który z udostępnionych kluczy atestacji zostanie użyty do podpisania certyfikatu.
[na zewnątrz] łańcuch_certyfikatów Tablica certyfikatów X.509 zakodowanych w formacie DER. Pierwszym będzie certyfikat dla key_to_attest . Pozostałe wpisy zostaną połączone z powrotem do katalogu głównego. Wywołujący przejmuje własność i musi cofnąć alokację za pomocą keymaster_free_cert_chain.

Definicja w wierszu 239 pliku keymaster2.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.
[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 332 pliku keymaster2.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 keymaster2.h .

keymaster_error_t (* configure)(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params)

Konfiguruje administratora. Ta metoda musi zostać wywołana raz po otwarciu urządzenia i przed jego użyciem. Służy do udostępniania administratorowi kluczy KM_TAG_OS_VERSION i KM_TAG_OS_PATCHLEVEL. Dopóki ta metoda nie zostanie wywołana, wszystkie inne metody zwrócą KM_ERROR_KEYMASTER_NOT_CONFIGURED. Wartości dostarczone przez tę metodę są akceptowane przez keymastera tylko raz na rozruch. Kolejne wywołania zwrócą KM_ERROR_OK, ale nic nie zrobią.

Jeśli implementacja keymastera znajduje się na bezpiecznym sprzęcie, a podane wartości wersji systemu operacyjnego i poziomu poprawek nie są zgodne z wartościami dostarczonymi bezpiecznemu sprzętowi przez bootloader (lub jeśli bootloader nie dostarczył wartości), ta metoda zwróci KM_ERROR_INVALID_ARGUMENT i wszystkie inne metody będą nadal zwracać KM_ERROR_KEYMASTER_NOT_CONFIGURED.

Definicja w linii 58 pliku keymaster2.h .

nieważny* kontekst

Definicja w linii 37 pliku keymaster2.h .

keymaster_error_t (* delete_all_keys)(const struct keymaster2_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 288 pliku keymaster2.h .

keymaster_error_t (* delete_key)(const struct keymaster2_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 276 pliku keymaster2.h .

keymaster_error_t (* export_key)(const struct keymaster2_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 lub symetryczny, zwracając tablicę bajtów w określonym formacie.

Pamiętaj, że eksport klucza symetrycznego jest dozwolony tylko wtedy, gdy klucz został utworzony za pomocą KM_TAG_EXPORTABLE i tylko wtedy, gdy spełnione są wszystkie wymagania dotyczące użycia klucza (np. uwierzytelnianie).

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.
[w] Identyfikator klienta Obiekt blob identyfikatora klienta, który musi być zgodny z obiektem blob podanym w KM_TAG_APPLICATION_ID podczas generowania klucza (jeśli istnieje).
[w] dane aplikacji Obiekt blob danych aplikacji, który musi być zgodny z obiektem blob podanym w KM_TAG_APPLICATION_DATA podczas generowania klucza (jeśli istnieje).
[na zewnątrz] eksport_danych Wyeksportowany materiał klucza. Dzwoniący przejmuje własność.

Definicja w wierszu 213 pliku keymaster2.h .

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] in_params 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] Wejście Dane do przetworzenia zgodnie z parametrami ustalonymi w wywołaniu begin() . finish() musi wykorzystać wszystkie dostarczone dane lub zwrócić KM_ERROR_INVALID_INPUT_LENGTH.
[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 405 pliku keymaster2.h .

flagi uint32_t

Zobacz flagi zdefiniowane dla keymaster0_devices::flags w keymaster_common.h . Używany tylko w celu zapewnienia zgodności z poprzednimi wersjami; Urządzenia sprzętowe keymaster2 muszą ustawić to na zero.

Definicja w wierszu 43 pliku keymaster2.h .

keymaster_error_t (* generate_key)(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t *characteristics)

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
[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 linii 112 pliku keymaster2.h .

keymaster_error_t (* get_key_characteristics)(const struct keymaster2_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)

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_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. Nie może być NULL. Wywołujący przyjmuje na siebie własność zawartości i musi cofnąć alokację za pomocą funkcji keymaster_free_characteristics() .

Definicja w wierszu 139 pliku keymaster2.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, wywołujący przejmuje własność zawartości i musi cofnąć alokację za pomocą keymaster_free_characteristics() . Pamiętaj, że KM_TAG_APPLICATION_ID i KM_TAG_APPLICATION_DATA nigdy nie są zwracane.

Definicja w wierszu 186 pliku keymaster2.h .

keymaster_error_t (* aktualizacja)(const struct keymaster2_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 376 pliku keymaster2.h .

keymaster_error_t (* upgrade_key)(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_to_upgrade, const keymaster_key_param_set_t *upgrade_params, keymaster_key_blob_t *upgraded_key)

Aktualizuje stary klucz. Klucze mogą stać się „stare” na dwa sposoby: Keymaster może zostać zaktualizowany do nowej wersji lub system może zostać zaktualizowany w celu unieważnienia wersji systemu operacyjnego i/lub poziomu poprawek. W obu przypadkach próby użycia starego klucza spowodują, że keymaster zwróci KM_ERROR_KEY_REQUIRES_UPGRADE. Ta metoda powinna być następnie wywołana w celu uaktualnienia klucza.

Parametry
[w] dev Struktura urządzenia keymastera.
[w] key_to_upgrade Klucz główny do aktualizacji.
[w] upgrade_params Parametry potrzebne do zakończenia aktualizacji. W szczególności KM_TAG_APPLICATION_ID i KM_TAG_APPLICATION_DATA będą wymagane, jeśli zostały zdefiniowane dla klucza.
[na zewnątrz] ulepszony_klucz Zaktualizowany kluczowy obiekt BLOB.

Definicja w wierszu 260 pliku keymaster2.h .


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