keymaster1_device Odniesienie do struktury

keymaster1_device Odniesienie do struktury

#include < keymaster1.h >

Pola danych

struktura hw_device_t wspólny
uint32_t wersja_klienta
uint32_t flagi
próżnia * kontekst
int(* generuj_keypair )(const struct keymaster1_device *dev, const keymaster_keypair_t typ_klucza, const void *key_params, uint8_t **key_blob, size_t *key_blob_length)
int(* import_keypair )(const struktura keymaster1_device *dev, const uint8_t *key, const size_t długość_klucza, uint8_t **key_blob, size_t *key_blob_length)
int(* get_keypair_public )(const struktura 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 struktura keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length)
int(* usuń_all )(stała struktura keymaster1_device *dev)
int(* dane_znaku )(const struktura 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 długość_danych, uint8_t **signed_data, size_t *signed_data_length)
int(* zweryfikować_dane )(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_tsigned_data_length, const uint8_t *podpis, const size_t długość_sygnatury)
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 struktura keymaster1_device *dev, algorytm keymaster_algorithm_t , cel keymaster_cel_t , keymaster_block_mode_t **tryby, size_t *mode_length)
keymaster_error_t (* get_supported_padding_modes )(const struktura keymaster1_device *dev, algorytm keymaster_algorithm_t , cel keymaster_cel_t , keymaster_padding_t **tryby, rozmiar_t *długość_modów)
keymaster_error_t (* get_supported_digests )(const struktura keymaster1_device *dev, algorytm keymaster_algorithm_t , cel keymaster_cel_t , keymaster_digest_t **skróty, rozmiar_t *długość_digestów)
keymaster_error_t (* get_supported_import_formats )(const struktura keymaster1_device *dev, algorytm keymaster_algorithm_t , keymaster_key_format_t **formaty, size_t *formats_length)
keymaster_error_t (* get_supported_export_formats )(const struktura keymaster1_device *dev, algorytm keymaster_algorithm_t , keymaster_key_format_t **formaty, size_t *formats_length)
keymaster_error_t (* add_rng_entropy )(const struktura keymaster1_device *dev, const uint8_t *data, size_t długość_danych)
keymaster_error_t (* generuj_klucz )(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 **characteristics)
keymaster_error_t (* import_key )(const struktura 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 (* eksport_klucz )(const struktura keymaster1_device *dev, keymaster_key_format_t eksport_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 (* usuń_klucz )(const struktura keymaster1_device *dev, const keymaster_key_blob_t *key)
keymaster_error_t (* usuń_all_keys )(stała struktura keymaster1_device *dev)
keymaster_error_t (* Begin )(const struktura keymaster1_device *dev, keymaster_cel_t cel, const keymaster_key_blob_t *key, const keymaster_key_param_set_t *in_params, keymaster_key_param_set_t *out_params, keymaster_operacja_handle_t *operacja_handle)
keymaster_error_t (* aktualizacja )(const struct keymaster1_device *dev, keymaster_operacja_handle_toperacja_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 (* wykończenie )(const struktura keymaster1_device *dev, keymaster_operacja_handle_toperacja_handle , const keymaster_key_param_set_t *in_params, const keymaster_blob_t *podpis, keymaster_key_param_set_t *out_params, keymaster_blob_t *wyjście)
keymaster_error_t (* przerwać )(const struct keymaster1_device *dev, keymaster_operacja_handle_t operacja_handle)

szczegółowy opis

Definicja urządzenia Keymaster1

Definicja w linii 28 pliku keymaster1.h .

Dokumentacja terenowa

keymaster_error_t (* abort)(const struktura keymaster1_device *dev, keymaster_operacja_handle_t operacja_handle)

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

Definicja w linii 531 pliku keymaster1.h .

keymaster_error_t (* add_rng_entropy)(const struktura keymaster1_device *dev, const uint8_t *data, size_t długość_danych)

Dodaje entropię do RNG używanego przez klucznika. Gwarantujemy, że entropia dodana tą metodą nie będzie jedynym wykorzystywanym źródłem entropii, a funkcja miksowania musi być bezpieczna w tym sensie, że jeśli do RNG zostanie zaszczepiony (z dowolnego źródła) jakimikolwiek danymi, których osoba atakująca nie będzie w stanie przewidzieć (lub kontrola), wówczas wyjście RNG jest nie do odróżnienia od losowego. Zatem jeśli entropia z dowolnego źródła jest dobra, wynik będzie dobry.

Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] dane Losowe dane do zmieszania.
[W] długość_danych Długość data .

Definicja w linii 242 pliku keymaster1.h .

keymaster_error_t (* początek)(const struktura keymaster1_device *dev, keymaster_cel_t cel, const keymaster_key_blob_t *key, const keymaster_key_param_set_t *in_params, keymaster_key_param_set_t *out_params, keymaster_operacja_handle_t *operacja_handle)

Rozpoczyna operację kryptograficzną przy użyciu określonego klucza. Jeśli wszystko jest w porządku, funkcja Begin() zwróci KM_ERROR_OK i utworzy uchwyt operacji, który należy przekazać kolejnym wywołaniom funkcji update() , Finish() lub abort() .

Bardzo ważne jest, aby każde wywołanie metody Begin() było połączone z kolejnym wywołaniem metody finish() lub abort() , aby umożliwić implementacji klucza głównego wyczyszczenie wszelkich wewnętrznych stanów operacji. Niezastosowanie się do tego może spowodować wyciek wewnętrznej przestrzeni stanów lub innych zasobów wewnętrznych i 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 funkcji Begin() , update() lub Finish() domyślnie przerywa operację, w którym to przypadku funkcja abort() nie musi być wywoływana (i zwróci KM_ERROR_INVALID_OPERATION_HANDLE, jeśli zostanie wywołana).

Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] zamiar Cel operacji, jeden z KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN lub KM_PURPOSE_VERIFY. Należy zauważyć, że w przypadku trybów AEAD szyfrowanie i deszyfrowanie oznaczają odpowiednio podpisywanie i weryfikację, ale należy je określić jako KM_PURPOSE_ENCRYPT i KM_PURPOSE_DECRYPT.
[W] klucz Klucz, który ma zostać użyty do operacji. key musi mieć cel zgodny z purpose i wszystkie wymagania dotyczące jego użycia muszą być spełnione, w przeciwnym razie funkcja Begin() zwróci odpowiedni kod błędu.
[W] in_parametry Dodatkowe parametry operacji. Jest to zwykle używane do dostarczania danych uwierzytelniających za pomocą KM_TAG_AUTH_TOKEN. Jeśli podczas generowania podano KM_TAG_APPLICATION_ID lub KM_TAG_APPLICATION_DATA, należy je podać w tym miejscu, w przeciwnym razie operacja zakończy się niepowodzeniem z powodu KM_ERROR_INVALID_KEY_BLOB. W przypadku operacji wymagających wartości jednorazowej lub IV, na kluczach wygenerowanych za pomocą KM_TAG_CALLER_NONCE, in_params może zawierać znacznik KM_TAG_NONCE. Dla operacji AEAD określa się tutaj KM_TAG_CHUNK_SIZE.
[na zewnątrz] parametry_wyjściowe Parametry wyjściowe. Służy do zwracania dodatkowych danych z inicjalizacji operacji, w szczególności do zwracania IV lub nonce z operacji, które generują IV lub nonce. Osoba wywołująca przejmuje tablicę parametrów wyjściowych i musi ją zwolnić za pomocą metody keymaster_free_param_set() . out_params można ustawić na NULL, jeśli nie są oczekiwane żadne parametry wyjściowe. Jeśli out_params ma wartość NULL i wygenerowano parametry wyjściowe, funkcja Begin() zwróci KM_ERROR_OUTPUT_PARAMETER_NULL.
[na zewnątrz] uchwyt_operacji Nowo utworzony uchwyt operacji, który należy przekazać do update() , Finish() lub abort() . Jeśli uchwyt_operacji ma wartość NULL, funkcja Begin() zwróci KM_ERROR_OUTPUT_PARAMETER_NULL.

Definicja w linii 451 pliku keymaster1.h .

uint32_t wersja_klienta

TO JEST PRZESTARZANE. Zamiast tego użyj nowych pól „module_api_version” i „hal_api_version” podczas inicjalizacji modułu keymaster_module.

Definicja w linii 41 pliku keymaster1.h .

struktura hw_device_t wspólna

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

Definicja w linii 35 pliku keymaster1.h .

pusty* kontekst

Definicja w linii 48 pliku keymaster1.h .

int(* usuń_all)(stała struktura keymaster1_device *dev)
Przestarzałe:
Usuwa wszystkie klucze ze sprzętowego magazynu kluczy. Używane, gdy magazyn kluczy jest całkowicie resetowany.

Ta funkcja jest opcjonalna i powinna mieć wartość NULL, jeśli nie jest zaimplementowana.

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

Definicja w linii 100 pliku keymaster1.h .

keymaster_error_t (* usuń_all_keys)(stała struktura keymaster1_device *dev)

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

Ta funkcja jest opcjonalna i powinna mieć wartość NULL, jeśli nie jest zaimplementowana.

Parametry
[W] rozw Struktura urządzenia głównego klucza.

Definicja w linii 407 pliku keymaster1.h .

keymaster_error_t (* Delete_key)(const struktura 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żliwe wykorzystanie klawisza do jakichkolwiek innych operacji. Można zastosować do kluczy z obcych źródeł zaufania (klucze nie nadają się do użycia w bieżącym katalogu głównym zaufania).

Ta funkcja jest opcjonalna i powinna mieć wartość NULL, jeśli nie jest zaimplementowana.

Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] klucz Klucz do usunięcia.

Definicja w linii 395 pliku keymaster1.h .

int(* Delete_keypair)(const struktura 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 mieć wartość 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 eksport_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)

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

Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] format_eksportu Format używany do eksportowania klucza.
[W] klucz_do_eksportu Klucz do eksportu.
[na zewnątrz] dane_eksportu Eksportowany kluczowy materiał. Osoba dzwoniąca przejmuje własność.
[na zewnątrz] eksport_data_długość Długość export_data .

Definicja w linii 377 pliku keymaster1.h .

Kończy operację kryptograficzną rozpoczętą za pomocą funkcji Begin() i unieważnia operation_handle .

Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] uchwyt_operacji Uchwyt operacji zwrócony przez Begin() . Ten uchwyt zostanie unieważniony.
[W] parametry Dodatkowe parametry operacji. W trybach AEAD służy do określenia KM_TAG_ADDITIONAL_DATA, ale tylko wtedy, gdy do update() nie podano żadnych danych wejściowych.
[W] podpis Podpis do sprawdzenia, jeśli cel określony w wywołaniu Begin() to KM_PURPOSE_VERIFY.
[na zewnątrz] wyjście Dane wyjściowe, jeśli istnieją. Osoba wywołująca przejmuje własność przydzielonego buforu.

Jeśli kończąca się operacja polega na weryfikacji podpisu lub odszyfrowaniu i weryfikacji w trybie AEAD nie powiedzie się , funkcja Finish() zwróci KM_ERROR_VERIFICATION_FAILED.

Definicja w linii 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 klucza są zdefiniowane jako pary tag główny/wartość klucza, podane w params . Pełną listę znajdziesz w keymaster_tag_t. Niektóre wartości, które są zawsze wymagane do generowania przydatnych kluczy, to:

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

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

W przypadku algorytmów, które ich wymagają, należy określić KM_TAG_BLOCK_MODE, KM_TAG_PADDING, KM_TAG_MAC_LENGTH i KM_TAG_DIGEST.

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

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] parametry Tablica kluczowych parametrów generowania.
[W] liczba_parametrów Długość params .
[na zewnątrz] klucz_blob zwraca wygenerowany klucz. key_blob nie może mieć wartości NULL. Osoba wywołująca przejmuje własność key_blob->key_material i musi go zwolnić().
[na zewnątrz] cechy zwraca charakterystykę klucza, który został wygenerowany, jeśli ma wartość różną od NULL. Jeśli nie ma wartości NULL, osoba wywołująca przejmuje własność i musi zwolnić przydział za pomocą keymaster_free_characteristics() . Należy pamiętać, że KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID i KM_TAG_APPLICATION_DATA nigdy nie są zwracane.

Definicja w linii 282 pliku keymaster1.h .

int(* generate_keypair)(const struktura keymaster1_device *dev, const keymaster_keypair_t typ_klucza, const void *key_params, uint8_t **key_blob, size_t *key_blob_length)
Przestarzałe:
Generuje klucz publiczny i prywatny. Zwrócony obiekt typu key-blob jest nieprzejrzysty i należy go następnie udostępnić 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 struktura 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 zweryfikować integralność klucza). id_klienta i dane_aplikacji muszą być identyfikatorami i danymi podanymi podczas generowania lub importowania klucza lub puste, jeśli podczas generowania nie podano KM_TAG_APPLICATION_ID i/lub KM_TAG_APPLICATION_DATA. Wartości te nie są uwzględniane w zwracanych cechach. Osoba wywołująca przejmuje własność przydzielonego obiektu charakterystyki, który musi zostać zwolniony za pomocą metody keymaster_free_characteristics() .

Należy pamiętać, że KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID i KM_TAG_APPLICATION_DATA nigdy nie są zwracane.

Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] klucz_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ą powiązane.
[na zewnątrz] cechy Kluczowe cechy.

Definicja w linii 309 pliku keymaster1.h .

int(* get_keypair_public)(const struktura 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 pary kluczy. Klucz publiczny musi być w formacie X.509 (standard Java) zakodowanej tablicy bajtów.

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

Definicja w linii 76 pliku keymaster1.h .

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

Pobiera obsługiwane algorytmy.

Parametry
[W] rozw Struktura urządzenia głównego klucza.
[na zewnątrz] algorytmy Obsługiwana tablica algorytmów. Osoba wywołująca przejmuje tablicę i musi ją zwolnić().
[na zewnątrz] długość_algorytmów Długość algorithms .

Definicja w linii 133 pliku keymaster1.h .

keymaster_error_t (* get_supported_block_modes)(const struktura keymaster1_device *dev, algorytm keymaster_algorithm_t , cel keymaster_cel_t , keymaster_block_mode_t **tryby, rozmiar_t *długość_modów)

Pobiera tryby bloków obsługiwane dla określonego algorytmu.

Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] algorytm Algorytm, dla którego zostaną zwrócone obsługiwane tryby.
[na zewnątrz] tryby Obsługiwana tablica trybów. Osoba wywołująca przejmuje tablicę i musi ją zwolnić().
[na zewnątrz] tryby_długość Długość modes .

Definicja w linii 149 pliku keymaster1.h .

keymaster_error_t (* get_supported_digests)(const struktura keymaster1_device *dev, algorytm keymaster_algorithm_t , cel keymaster_cel_t , keymaster_digest_t **skróty, rozmiar_t *długość_digestów)

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

Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] algorytm Algorytm, dla którego zostaną zwrócone obsługiwane skróty.
[na zewnątrz] trawi Obsługiwana tablica podsumowań. Osoba wywołująca przejmuje tablicę i musi ją zwolnić().
[na zewnątrz] trawienie_długość Długość digests .

Definicja w linii 187 pliku keymaster1.h .

keymaster_error_t (* get_supported_export_formats)(const struktura keymaster1_device *dev, algorytm keymaster_algorithm_t , keymaster_key_format_t **formaty, size_t *formats_length)

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

Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] algorytm Algorytm, dla którego zostaną zwrócone obsługiwane formaty.
[na zewnątrz] formaty Szereg obsługiwanych formatów. Osoba wywołująca przejmuje tablicę i musi ją zwolnić().
[na zewnątrz] formaty_długość Długość formats .

Definicja w linii 224 pliku keymaster1.h .

keymaster_error_t (* get_supported_import_formats)(const struktura keymaster1_device *dev, algorytm keymaster_algorithm_t , keymaster_key_format_t **formaty, size_t *formats_length)

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

Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] algorytm Algorytm, dla którego zostaną zwrócone obsługiwane formaty.
[na zewnątrz] formaty Szereg obsługiwanych formatów. Osoba wywołująca przejmuje tablicę i musi ją zwolnić().
[na zewnątrz] formaty_długość Długość formats .

Definicja w linii 206 pliku keymaster1.h .

keymaster_error_t (* get_supported_padding_modes)(const struktura keymaster1_device *dev, algorytm keymaster_algorithm_t , cel keymaster_cel_t , keymaster_padding_t **tryby, rozmiar_t *długość_modów)

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

Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] algorytm Algorytm, dla którego zostaną zwrócone obsługiwane tryby dopełniania.
[na zewnątrz] tryby Obsługiwana jest szeroka gama trybów dopełniania. Osoba wywołująca przejmuje tablicę i musi ją zwolnić().
[na zewnątrz] tryby_długość Długość modes .

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

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

Większość kluczowych parametrów importu jest zdefiniowanych jako pary znacznik kluczowy/wartość, podane w „params”. Pełną listę znajdziesz w keymaster_tag_t. Wartości, które są zawsze wymagane do importu przydatnych kluczy to:

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

Zasadniczo należy określić KM_TAG_AUTH_TIMEOUT. Jeśli nie określono, 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 będzie domyślnie odpowiadał rozmiarowi dostarczonego 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 implementację.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] parametry Parametry definiujące importowany klucz.
[W] liczba_parametrów Liczba wpisów w params .
[W] format_klucza określa format danych klucza w key_data.
[na zewnątrz] klucz_blob Służy do zwracania nieprzezroczystego obiektu typu blob klucza. Musi mieć wartość różną od NULL. Osoba wywołująca przejmuje własność zawartego materiału klucza.
[na zewnątrz] cechy Służy do zwracania charakterystyki zaimportowanego klucza. Może mieć wartość NULL. W takim przypadku nie zostaną zwrócone żadne cechy. Jeśli nie ma wartości NULL, osoba wywołująca przejmuje własność i musi zwolnić przydział za pomocą keymaster_free_characteristics() . Należy pamiętać, że KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID i KM_TAG_APPLICATION_DATA nigdy nie są zwracane.

Definicja w linii 357 pliku keymaster1.h .

int(* import_keypair)(const struktura keymaster1_device *dev, const uint8_t *key, const size_t długość_klucza, uint8_t **key_blob, size_t *key_blob_length)
Przestarzałe:
Importuje parę kluczy publiczny i prywatny. Zaimportowane klucze będą w formacie PKCS#8 z kodowaniem DER (standard Java). Zwrócony klucz-blob jest nieprzezroczysty i zostanie następnie udostępniony do podpisania i weryfikacji.

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

Definicja w linii 66 pliku keymaster1.h .

int(* dane_znaku)(const struktura 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 długość_danych, uint8_t **signed_data, size_t *signed_data_length)
Przestarzałe:
Podpisuje dane przy użyciu wygenerowanego wcześniej obiektu typu blob 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_operacja_handle_toperacja_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)

Dostarcza dane i ewentualnie odbiera dane wyjściowe z trwającej operacji kryptograficznej rozpoczętej za pomocą metody Begin() .

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

update() może nie zużyć wszystkich danych znajdujących się w buforze danych. update() zwróci ilość zużytą w *data_consumed. Osoba wywołująca powinna przekazać niewykorzystane dane w kolejnym połączeniu.

Parametry
[W] rozw Struktura urządzenia głównego klucza.
[W] uchwyt_operacji Uchwyt operacji zwrócony przez Begin() .
[W] in_parametry Dodatkowe parametry operacji. W trybach AEAD służy do określenia KM_TAG_ADDITIONAL_DATA. Należy pamiętać, że dodatkowe dane mogą być dostarczane w wielu wywołaniach update() , ale tylko do czasu dostarczenia danych wejściowych.
[W] wejście Dane do przetworzenia zgodnie z parametrami ustalonymi w wywołaniu metody Begin() . Należy pamiętać, że funkcja update() może, ale nie musi, zużyć wszystkie dostarczone dane. Zobacz input_consumed .
[na zewnątrz] dane wejściowe_zużyte Ilość danych zużytych przez update() . Jeśli jest to mniej niż podana kwota, wywołujący powinien podać resztę w kolejnym wywołaniu update() .
[na zewnątrz] parametry_wyjściowe Parametry wyjściowe. Służy do zwracania dodatkowych danych z operacji. Osoba wywołująca przejmuje tablicę parametrów wyjściowych i musi ją zwolnić za pomocą metody keymaster_free_param_set() . out_params można ustawić na NULL, jeśli nie są oczekiwane żadne parametry wyjściowe. Jeśli out_params ma wartość NULL i wygenerowano parametry wyjściowe, funkcja Begin() zwróci KM_ERROR_OUTPUT_PARAMETER_NULL.
[na zewnątrz] wyjście Dane wyjściowe, jeśli istnieją. Osoba wywołująca przejmuje własność przydzielonego bufora. dane wyjściowe nie mogą mieć wartości NULL.

Należy zauważyć, że funkcja update() może nie udostępniać żadnych danych wyjściowych, w takim przypadku dane wyjściowe->data_length będą wynosić zero, a dane wyjściowe->dane mogą mieć długość NULL lub zerową długość (więc osoba wywołująca powinna zawsze je zwolnić).

Definicja w linii 495 pliku keymaster1.h .

int(* zweryfikować_dane)(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_tsigned_data_length, const uint8_t *signature, const size_t długość_sygnału)
Przestarzałe:
Weryfikuje dane podpisane za pomocą obiektu typu blob klucza. Może to być klucz asymetryczny lub klucz tajny.

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

Definicja w linii 118 pliku keymaster1.h .


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