keymaster1_device – referencja struktury
#include <
keymaster1.h
>
Pola danych |
|
struct hw_device_t | wspólne |
uint32_t | client_version |
uint32_t | flags |
void * | context |
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 algorithm, keymaster_purpose_t purpose, keymaster_block_mode_t **modes, size_t *modes_length) |
keymaster_error_t (* | get_supported_padding_modes )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_padding_t **modes, size_t *modes_length) |
keymaster_error_t (* | get_supported_digests )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_digest_t **digests, size_t *digests_length) |
keymaster_error_t (* | get_supported_import_formats )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_key_format_t **formats, size_t *formats_length) |
keymaster_error_t (* | get_supported_export_formats )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_key_format_t **formats, size_t *formats_length) |
keymaster_error_t (* | add_rng_entropy )(const struct keymaster1_device *dev, const uint8_t *data, size_t data_length) |
keymaster_error_t (* | generate_key )(const struct keymaster1_device *dev, const keymaster_key_param_set_t *params, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t **characteristics) |
keymaster_error_t (* | get_key_characteristics )(const struct keymaster1_device *dev, const keymaster_key_blob_t *key_blob, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_key_characteristics_t **characteristics) |
keymaster_error_t (* | import_key )(const struct keymaster1_device *dev, const keymaster_key_param_set_t *params, keymaster_key_format_t key_format, const keymaster_blob_t *key_data, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t **characteristics) |
keymaster_error_t (* | export_key )(const struct keymaster1_device *dev, keymaster_key_format_t export_format, const keymaster_key_blob_t *key_to_export, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_blob_t *export_data) |
keymaster_error_t (* | delete_key )(const struct keymaster1_device *dev, const keymaster_key_blob_t *key) |
keymaster_error_t (* | delete_all_keys )(const struct keymaster1_device *dev) |
keymaster_error_t (* | begin )(const struct keymaster1_device *dev, keymaster_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 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) |
Szczegółowy opis
Definicja urządzenia Keymaster1
Definicja w wierszu 28 pliku keymaster1.h .
Dokumentacja pola
keymaster_error_t (* abort)(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle) |
Przerywa operacje kryptograficzną rozpoczętą za pomocą funkcji
begin()
, uwalniając wszystkie zasoby wewnętrzne 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 menedżera kluczy. Entropia dodana za pomocą tej metody nie jest jedynym źródłem entropii, a funkcja mieszania musi być bezpieczna w tym sensie, że jeśli generator losowych liczb (z dowolnego źródła) zostanie zasilony danymi, których atakujący nie może przewidzieć (ani kontrolować), to wyjście generatora będzie nie do odróżnienia od losowych danych. Jeśli entropia z dowolnego źródła jest dobra, wynik będzie dobry.
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] dane losowe dane do zmieszania. [in] data_length Długość: data
Definicja w wierszu 242 w pliku keymaster1.h .
keymaster_error_t (* begin)(const struct keymaster1_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) |
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 zostać przekazany do kolejnych wywołań funkcji update() , finish() lub abort() .
Każde wywołanie funkcji begin() musi być połączone z kolejną funkcją finish() lub abort() , aby umożliwić implementacji klucza głównego wyczyszczenie stanu operacji wewnętrznej. Nieprzestrzeganie tej zasady może spowodować wyciek wewnętrznego stanu lub innych zasobów wewnętrznych, a w konsekwencji wywołanie funkcji begin() z wartością KM_ERROR_TOO_MANY_OPERATIONS, gdy zabraknie miejsca na operacje. Każdy wynik inny niż KM_ERROR_OK zwracany przez begin() , update() lub finish() oznacza domyślne przerwanie operacji, w której przypadku abort() nie musi być wywoływany (a jeśli zostanie, zwróci wartość KM_ERROR_INVALID_OPERATION_HANDLE).
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] cel Cel operacji: KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN lub KM_PURPOSE_VERIFY. Pamiętaj, że w przypadku trybów AEAD szyfrowanie i odszyfrowanie oznaczają odpowiednio podpisywanie i weryfikację, ale powinny być określone jako KM_PURPOSE_ENCRYPT i KM_PURPOSE_DECRYPT. [in] klucz Klucz używany do wykonania operacji. key
musi mieć cel zgodny zpurpose
i wszystkie wymagania dotyczące jego użycia muszą być spełnione, w przeciwnym razie funkcja begin() zwróci odpowiedni kod błędu.[in] in_params Dodatkowe parametry operacji. Jest on zwykle używany do przekazywania danych uwierzytelniania za pomocą parametru KM_TAG_AUTH_TOKEN. Jeśli podczas generowania zostały podane parametry KM_TAG_APPLICATION_ID lub KM_TAG_APPLICATION_DATA, muszą one zostać podane tutaj. W przeciwnym razie operacja zakończy się niepowodzeniem z powodu błędu KM_ERROR_INVALID_KEY_BLOB. W przypadku operacji, które wymagają nonce lub IV, w przypadku kluczy wygenerowanych za pomocą tagu KM_TAG_CALLER_NONCE parametry in_params mogą zawierać tag KM_TAG_NONCE. W przypadku operacji AEAD podaj tutaj parametr KM_TAG_CHUNK_SIZE. [out] out_params 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. Wywołujący staje się właścicielem tablicy parametrów wyjściowych i musi ją zwolnić za pomocą funkcji keymaster_free_param_set() . Jeśli nie ma parametrów wyjściowych, parametr out_params może mieć wartość NULL. Jeśli parametr out_params ma wartość NULL, a parametry wyjściowe są generowane, funkcja begin() zwróci wartość KM_ERROR_OUTPUT_PARAMETER_NULL. [out] operation_handle Nowo utworzony identyfikator operacji, który musi zostać przekazany do funkcji update() , finish() lub abort() . Jeśli operation_handle ma wartość NULL, funkcja begin() zwróci KM_ERROR_OUTPUT_PARAMETER_NULL.
Definicja w wierszu 451 pliku keymaster1.h .
uint32_t client_version |
Ta funkcja jest wycofywana. Zamiast tego w inicjalizacji keymaster_module użyj nowych pól „module_api_version” i „hal_api_version”.
Definicja w wierszu 41 pliku keymaster1.h .
struct hw_device_t common |
Typowe metody korzystania z urządzenia Keymaster Ta musi być pierwszym elementem klucza keymaster_device, ponieważ użytkownicy tej struktury będą rzutować hw_device_t do wskaźnika keymaster_device w kontekstach, w których wiadomo, że hw_device_t odwołuje się do klucza keymaster_device.
Definicja w wierszu 35 pliku keymaster1.h .
kontekst anulowania* |
Definicja w wierszu 48 pliku keymaster1.h .
int(* delete_all)(const struct keymaster1_device *dev) |
- Wycofano:
- Usuwanie wszystkich kluczy w magazynie kluczy sprzętowych. Używany, gdy repozytorium kluczy jest całkowicie resetowane.
Ta funkcja jest opcjonalna i w przypadku braku implementacji powinna być ustawiona na NULL.
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 z magazynu kluczy sprzętowych. Używany, gdy repozytorium kluczy jest całkowicie resetowane. Po wywołaniu tej funkcji nie będzie można używać wcześniej wygenerowanych ani zaimportowanych kluczy BLOB w żadnych operacjach.
Ta funkcja jest opcjonalna i w przypadku braku implementacji powinna być ustawiona na NULL.
- Parametry
-
[in] dev Struktura urządzenia Keymaster
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 powiązaną z kluczem blob. Po wywołaniu tej funkcji nie będzie można użyć klucza do żadnych innych operacji. Można je stosować do kluczy z obcych źródeł zaufania (kluczy, których nie można używać w ramach bieżącego źródła zaufania).
Ta funkcja jest opcjonalna i w przypadku braku implementacji powinna być ustawiona na NULL.
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] 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) |
- Wycofano:
- Usuwanie pary kluczy powiązanej z kluczem blob.
Ta funkcja jest opcjonalna i w przypadku braku implementacji powinna być ustawiona na NULL.
Zwraca 0 w przypadku powodzenia lub kod błędu mniejszy niż 0.
Definicja w wierszu 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_data) |
Eksportuje klucz publiczny, zwracając tablicę bajtów w określonym formacie.
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] export_format Format, który ma być użyty do wyeksportowania klucza. [in] key_to_export Klucz do wyeksportowania. [out] export_data Wyeksportowany materiał klucza. Rozmówca staje się właścicielem. [out] 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 *output) |
Kończy operację kryptograficzną rozpoczętą za pomocą funkcji
begin()
i unieważnia
operation_handle
.
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] operation_handle Identyfikator operacji zwrócony przez funkcję begin() . Ten nick zostanie unieważniony. [in] params Dodatkowe parametry operacji. W przypadku trybów AEAD służy do określania parametru KM_TAG_ADDITIONAL_DATA, ale tylko wtedy, gdy nie podano żadnych danych wejściowych do funkcji update() . [in] podpis Podpis do zweryfikowania, jeśli cel określony w wywołaniu begin() to KM_PURPOSE_VERIFY. [out] output Dane wyjściowe (jeśli występują). Użytkownik wywołujący przejmuje własność przydzielonego bufora.
Jeśli zakończona operacja to weryfikacja podpisu lub deszyfrowanie w trybie AEAD i nie powiodła się, 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 pliku keymaster_common.h
Definicja w wierszu 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 **characteristics) |
Generuje klucz lub parę kluczy, zwracając klucz blob lub jego opis.
Parametry generowania kluczy są definiowane jako pary tagów kluczy/wartości podawane w formacie
params
. Pełną listę znajdziesz w kluczu master_tag_t. Oto wartości, które są zawsze wymagane do generowania przydatnych kluczy:
- KM_TAG_ALGORITHM;
- KM_TAG_PURPOSE; i
- (KM_TAG_USER_SECURE_ID i KM_TAG_USER_AUTH_TYPE) lub KM_TAG_NO_AUTH_REQUIRED.
Wartość KM_TAG_AUTH_TIMEOUT powinna być zwykle określona, chyba że występuje parametr 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 podać parametry KM_TAG_BLOCK_MODE, KM_TAG_PADDING, KM_TAG_MAC_LENGTH i KM_TAG_DIGEST.
Nie można określić tych tagów – ich wartości zostaną podane przez implementację.
- KM_TAG_ORIGIN,
- KM_TAG_ROLLBACK_RESISTANT,
- KM_TAG_CREATION_DATETIME
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] params Tablica parametrów generowania klucza. [in] params_count Długość: params
[out] key_blob zwraca wygenerowany klucz. key_blob
nie może zawierać wartości NULL. Wywołujący przejmuje prawo własności key_blob->key_material i musi go zwolnić.[out] cechy zwraca właściwości klucza, który został wygenerowany, jeśli nie jest to wartość NULL. Jeśli wartość jest różna od NULL, wywołujący staje się właścicielem i musi zwolnić pamięć za pomocą funkcji keymaster_free_characteristics() . Pamiętaj, że parametry 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) |
- Wycofano:
- Generuje klucz publiczny i prywatny. Zwrócony klucz-blob jest zaciemniony i musi zostać przekazany do podpisania i weryfikacji.
Zwraca: 0 w przypadku powodzenia lub kod błędu mniejszy niż 0.
Definicja w wierszu 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 **characteristics) |
Zwraca właściwości określonego klucza lub KM_ERROR_INVALID_KEY_BLOB, jeśli klucz_blob jest nieprawidłowy (implementacje muszą w pełni weryfikować integralność klucza). Wartości client_id i app_data muszą być identyczne z wartościami podanymi podczas generowania lub importowania klucza albo puste, jeśli podczas generowania nie podano wartości KM_TAG_APPLICATION_ID ani KM_TAG_APPLICATION_DATA. Te wartości nie są uwzględniane w zwracanych cechach. Wywołujący przejmuje własność przydzielonego obiektu z cechami, który musi zostać zwolniony za pomocą funkcji keymaster_free_characteristics() .
Pamiętaj, że parametry KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID i KM_TAG_APPLICATION_DATA nigdy nie są zwracane.
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] key_blob Klucz do pobierania właściwości. [in] client_id Dane identyfikatora klienta lub NULL, jeśli nie ma powiązanego identyfikatora. [in] app_id Dane aplikacji lub NULL, jeśli nie ma powiązanych danych. [out] cechy 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) |
- Wycofano:
- Pobiera część publiczną pary kluczy. Klucz publiczny musi być tablicą bajtów zakodowaną 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 wierszu 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
-
[in] dev Struktura urządzenia Keymaster [out] algorytmy Tablica obsługiwanych algorytmów. Wywołujący staje się właścicielem tablicy i musi ją zwolnić. [out] algorithms_length Długość: algorithms
Definicja w wierszu 133 pliku keymaster1.h .
keymaster_error_t (* get_supported_block_modes)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_block_mode_t **modes, size_t *modes_length) |
Pobiera obsługiwane tryby blokowania dla podanego algorytmu.
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] algorytm Algorytm, dla którego zostaną zwrócone obsługiwane tryby. [out] trybów Tablica obsługiwanych trybów. Wywołujący staje się właścicielem tablicy i musi ją zwolnić. [out] modes_length Długość: modes
Definicja w wierszu 149 pliku keymaster1.h .
keymaster_error_t (* get_supported_digests)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_digest_t **digests, size_t *digests_length) |
Pobiera skróty obsługiwane przez podany algorytm. Wywołujący staje się właścicielem przydzielonej tablicy.
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] algorytm Algorytm, dla którego zostaną zwrócone obsługiwane zbiorcze wyniki. [out] podsumowania Tablica digestów obsługiwanych. Wywołujący staje się właścicielem tablicy i musi ją zwolnić. [out] digests_length Długość: digests
Definicja w wierszu 187 pliku 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) |
Pobiera formaty eksportu kluczy obsługiwane w przypadku kluczy określonego algorytmu. Wywołujący staje się właścicielem przydzielonej tablicy.
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] algorytm Algorytm, dla którego zwrócone zostaną obsługiwane formaty. [out] formaty Tablica obsługiwanych formatów. Wywołujący staje się właścicielem tablicy i musi ją zwolnić. [out] formats_length Długość: formats
Definicja w wierszu 224 pliku 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) |
Pobiera formaty importu kluczy obsługiwane w przypadku kluczy określonego algorytmu. Wywołujący staje się właścicielem przydzielonej tablicy.
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] algorytm Algorytm, dla którego zwrócone zostaną obsługiwane formaty. [out] formaty Tablica obsługiwanych formatów. Wywołujący staje się właścicielem tablicy i musi ją zwolnić. [out] formats_length Długość: formats
Definicja w wierszu 206 pliku keymaster1.h .
keymaster_error_t (* get_supported_padding_modes)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_padding_t **modes, size_t *modes_length) |
Pobiera tryby wypełniania obsługiwane przez podany algorytm. Wywołujący staje się właścicielem przydzielonej tablicy.
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] algorytm Algorytm, dla którego zostaną zwrócone obsługiwane tryby wypełniania. [out] trybów Tablica obsługiwanych trybów wypełniania. Wywołujący staje się właścicielem tablicy i musi ją zwolnić. [out] modes_length Długość: modes
Definicja w wierszu 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 **characteristics) |
Importuje klucz lub parę kluczy, zwracając klucz blob lub jego opis.
Większość parametrów importu kluczy jest definiowana jako pary tagów i wartości w kluczu głównym, które są podawane w sekcji „params”. Pełną listę znajdziesz w kluczu master_tag_t. Wartości, które są zawsze wymagane do importowania przydatnych kluczy:
- KM_TAG_ALGORITHM;
- KM_TAG_PURPOSE; i
- (KM_TAG_USER_SECURE_ID i KM_TAG_USER_AUTH_TYPE) lub KM_TAG_NO_AUTH_REQUIRED.
Wartość KM_TAG_AUTH_TIMEOUT powinna być zwykle określona. Jeśli nie zostanie podany, użytkownik będzie musiał uwierzytelnić się przy każdym użyciu.
Jeśli nie podasz wartości tych tagów, zostaną one zastąpione wartościami domyślnymi:
- KM_TAG_KEY_SIZE przyjmie domyślnie rozmiar podanego klucza.
- KM_TAG_RSA_PUBLIC_EXPONENT przyjmie domyślnie wartość w podanej parze kluczy (w przypadku kluczy RSA).
Nie można określić tych tagów – ich wartości zostaną podane przez implementację.
- KM_TAG_ORIGIN,
- KM_TAG_ROLLBACK_RESISTANT,
- KM_TAG_CREATION_DATETIME
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] params Parametry definiujące importowany klucz. [in] params_count Liczba wpisów w params
.[in] key_format określa format danych klucza w key_data. [out] key_blob Służy do zwrócenia zaciemnionego klucza. Nie może zawierać wartości NULL. Wywołujący przejmuje własność zawartego klucza_materialu. [out] cechy Służy do zwracania właściwości zaimportowanego klucza. Może być NULL, co oznacza, że nie zostaną zwrócone żadne cechy. Jeśli wartość jest różna od NULL, wywołujący staje się właścicielem i musi zwolnić pamięć za pomocą funkcji keymaster_free_characteristics() . Pamiętaj, że parametry 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) |
- Wycofano:
- Importuje parę kluczy publicznego i prywatnego. Zaimportowane klucze będą w formacie PKCS#8 z kodowaniem DER (standard Java). Zwrócony klucz-blob jest zaciemniony i będzie później udostępniany do podpisywania i weryfikacji.
Zwraca: 0 w przypadku powodzenia lub kod błędu mniejszy niż 0.
Definicja w wierszu 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_length) |
- Wycofano:
- Podpisuje dane za pomocą wygenerowanego wcześniej klucza. Możesz użyć klucza asymetrycznego lub klucza tajnego.
Zwraca: 0 w przypadku powodzenia lub kod błędu mniejszy niż 0.
Definicja w wierszu 108 pliku 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) |
Przekazuje dane do bieżącej operacji kryptograficznej rozpoczętej za pomocą funkcji begin() i być może otrzymuje dane wyjściowe z tej operacji.
Jeśli operation_handle jest nieprawidłowy, update() zwróci KM_ERROR_INVALID_OPERATION_HANDLE.
update() może nie wykorzystać wszystkich danych dostarczonych w buforze danych. update() będzie zwracać ilość zużytą w *data_consumed. Wywołujący powinien przekazać niewykorzystane dane w kolejnych wywołaniach.
- Parametry
-
[in] dev Struktura urządzenia Keymaster [in] operation_handle Identyfikator operacji zwrócony przez funkcję begin() . [in] in_params Dodatkowe parametry operacji. W przypadku trybów AEAD służy do określania parametru KM_TAG_ADDITIONAL_DATA. Pamiętaj, że dodatkowe dane mogą być przekazywane w kilku wywołaniach funkcji update() , ale tylko do momentu przekazania danych wejściowych. [in] wejście Dane do przetworzenia zgodnie z parametrami określonymi w wywołaniu funkcji begin() . Pamiętaj, że funkcja update() może, ale nie musi zużyć wszystkich podanych danych. Zobacz: input_consumed
.[out] input_consumed Ilość danych wykorzystanych przez funkcję update() . Jeśli jest ona mniejsza od podawanej kwoty, wywołujący powinien podać resztę w kolejnym wywołaniu metody update() . [out] out_params Parametry wyjściowe. Służy do zwracania dodatkowych danych z operacji. Wywołujący staje się właścicielem tablicy parametrów wyjściowych i musi ją zwolnić za pomocą funkcji keymaster_free_param_set() . Jeśli nie ma parametrów wyjściowych, parametr out_params może mieć wartość NULL. Jeśli parametr out_params ma wartość NULL, a parametry wyjściowe są generowane, funkcja begin() zwróci wartość KM_ERROR_OUTPUT_PARAMETER_NULL. [out] output Dane wyjściowe (jeśli występują). Element wywołujący przejmuje prawo własności do przypisanego bufora. Wartość wyjściowa nie może być równa NULL.
Pamiętaj, że funkcja update() może nie zwracać żadnego wyniku. W takim przypadku długość danych w wyjściu funkcji będzie równa 0, a dane w wyjściu mogą być równe NULL lub mieć długość 0 (dlatego wywołujący musi je zawsze zwalniać za pomocą funkcji free()).
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_t signature_length) |
- Wycofano:
- Sprawdza dane podpisane za pomocą klucza blob. Możesz użyć klucza asymetrycznego lub klucza tajnego.
Zwraca: 0 w przypadku pomyślnej weryfikacji lub kod błędu mniejszy niż 0.
Definicja w wierszu 118 pliku keymaster1.h .
Dokumentacja tego typu danych została wygenerowana z tego pliku:
- hardware/libhardware/include/hardware/ keymaster1.h