keymaster1_device Referensi Struktur

keymaster1_device Referensi Struktur

#include < keymaster1.h >

Bidang Data

struct hw_device_t umum
uint32_t versi_klien
uint32_t bendera
ruang kosong * konteks
ke dalam(* 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)
ke dalam(* 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)
ke dalam(* 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)
ke dalam(* delete_keypair )(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length)
ke dalam(* delete_all )(const struct keymaster1_device *dev)
ke dalam(* 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)
ke dalam(* verifikasi_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 sign_data_length, const uint8_t *tanda tangan, const size_t tanda tangan_panjang)
keymaster_error_t (* get_supported_algorithms )(const struct keymaster1_device *dev, keymaster_algorithm_t **algoritma, size_t *algorithms_length)
keymaster_error_t (* get_supported_block_modes )(const struct keymaster1_device *dev, algoritma keymaster_algorithm_t , tujuan keymaster_using_t , keymaster_block_mode_t **modes, size_t *modes_length)
keymaster_error_t (* get_supported_padding_modes )(const struct keymaster1_device *dev, algoritma keymaster_algorithm_t , tujuan keymaster_ Purpose_t , keymaster_padding_t **modes, size_t *modes_length)
keymaster_error_t (* get_supported_digests )(const struct keymaster1_device *dev, algoritma keymaster_algorithm_t , tujuan keymaster_tujuan_t , keymaster_digest_t **intisari, size_t *digests_length)
keymaster_error_t (* get_supported_import_formats )(const struct keymaster1_device *dev, algoritma keymaster_algorithm_t , keymaster_key_format_t **format, size_t *formats_length)
keymaster_error_t (* get_supported_export_formats )(const struct keymaster1_device *dev, algoritma 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 **karakteristik)
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 **karakteristik)
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 **karakteristik)
keymaster_error_t (* ekspor_kunci )(const struct keymaster1_device *dev, keymaster_key_format_t ekspor_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 *kunci)
keymaster_error_t (* delete_all_keys )(const struct keymaster1_device *dev)
keymaster_error_t (* mulai )(const struct keymaster1_device *dev, keymaster_tujuan_t tujuan, const keymaster_key_blob_t *kunci, const keymaster_key_param_set_t *in_params, keymaster_key_param_set_t *out_params, keymaster_operation_handle_t *operation_handle)
keymaster_error_t (* perbarui )(const struct keymaster1_device *dev, keymaster_operation_handle_t operasi_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 (* selesai )(const struct keymaster1_device *dev, keymaster_operation_handle_t operasi_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *tanda tangan, keymaster_key_param_set_t *out_params, keymaster_blob_t *output)
keymaster_error_t (* batalkan )(const struct keymaster1_device *dev, keymaster_operation_handle_t operasi_handle)

Detil Deskripsi

Definisi perangkat Keymaster1

Definisi pada baris 28 file keymaster1.h .

Dokumentasi Lapangan

keymaster_error_t (* batalkan)(const struct keymaster1_device *dev, keymaster_operation_handle_t operasi_handle)

Membatalkan operasi kriptografi yang dimulai dengan Begin() , membebaskan semua sumber daya internal dan membuat operation_handle tidak valid.

Definisi pada baris 531 file keymaster1.h .

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

Menambahkan entropi ke RNG yang digunakan oleh keymaster. Entropi yang ditambahkan melalui metode ini dijamin bukan satu-satunya sumber entropi yang digunakan, dan fungsi pencampuran harus aman, dalam artian jika RNG diunggulkan (dari sumber mana pun) dengan data apa pun, penyerang tidak dapat memprediksi (atau kontrol), maka keluaran RNG tidak dapat dibedakan dari acak. Jadi, jika entropi dari sumber mana pun bagus, maka outputnya juga bagus.

Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] data Data acak untuk dicampur.
[di dalam] data_panjang Panjang data .

Definisi pada baris 242 file keymaster1.h .

keymaster_error_t (* mulai)(const struct keymaster1_device *dev, keymaster_tujuan_t tujuan, const keymaster_key_blob_t *kunci, const keymaster_key_param_set_t *in_params, keymaster_key_param_set_t *out_params, keymaster_operation_handle_t *operation_handle)

Memulai operasi kriptografi menggunakan kunci yang ditentukan. Jika semuanya baik-baik saja, Begin() akan mengembalikan KM_ERROR_OK dan membuat pegangan operasi yang harus diteruskan ke panggilan berikutnya ke update() , finish() atau abort() .

Setiap panggilan ke Begin() harus dipasangkan dengan panggilan berikutnya ke finish() atau abort() , agar penerapan keymaster dapat membersihkan status operasi internal apa pun. Kegagalan untuk melakukan hal ini dapat membocorkan ruang status internal atau sumber daya internal lainnya dan pada akhirnya dapat menyebabkan start() mengembalikan KM_ERROR_TOO_MANY_OPERATIONS ketika kehabisan ruang untuk operasi. Hasil apa pun selain KM_ERROR_OK dari Begin() , update() atau finish() secara implisit membatalkan operasi, dalam hal ini abort() tidak perlu dipanggil (dan akan mengembalikan KM_ERROR_INVALID_OPERATION_HANDLE jika dipanggil).

Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] tujuan Tujuan operasi, salah satu dari KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN atau KM_PURPOSE_VERIFY. Perhatikan bahwa untuk mode AEAD, enkripsi dan dekripsi masing-masing berarti penandatanganan dan verifikasi, tetapi harus ditentukan sebagai KM_PURPOSE_ENCRYPT dan KM_PURPOSE_DECRYPT.
[di dalam] kunci Kunci yang akan digunakan untuk operasi. key harus memiliki tujuan yang sesuai dengan purpose dan semua persyaratan penggunaannya harus dipenuhi, atau mulai() akan mengembalikan kode kesalahan yang sesuai.
[di dalam] di_params Parameter tambahan untuk operasi. Ini biasanya digunakan untuk menyediakan data autentikasi, dengan KM_TAG_AUTH_TOKEN. Jika KM_TAG_APPLICATION_ID atau KM_TAG_APPLICATION_DATA diberikan selama pembuatan, maka harus diberikan di sini, atau operasi akan gagal dengan KM_ERROR_INVALID_KEY_BLOB. Untuk operasi yang memerlukan nonce atau IV, pada kunci yang dihasilkan dengan KM_TAG_CALLER_NONCE, in_params mungkin berisi tag KM_TAG_NONCE. Untuk operasi AEAD, KM_TAG_CHUNK_SIZE ditentukan di sini.
[keluar] keluar_params Parameter keluaran. Digunakan untuk mengembalikan data tambahan dari inisialisasi operasi, terutama untuk mengembalikan IV atau nonce dari operasi yang menghasilkan IV atau nonce. Penelepon mengambil kepemilikan array parameter keluaran dan harus membebaskannya dengan keymaster_free_param_set() . out_params dapat disetel ke NULL jika tidak ada parameter keluaran yang diharapkan. Jika out_params adalah NULL, dan parameter keluaran dihasilkan, start() akan mengembalikan KM_ERROR_OUTPUT_PARAMETER_NULL.
[keluar] pegangan_operasi Pegangan operasi yang baru dibuat yang harus diteruskan ke update() , finish() atau abort() . Jika Operation_handle adalah NULL, Begin() akan mengembalikan KM_ERROR_OUTPUT_PARAMETER_NULL.

Definisi pada baris 451 file keymaster1.h .

uint32_t client_version

INI TIDAK DIGUNAKAN LAGI. Gunakan kolom "module_api_version" dan "hal_api_version" baru di inisialisasi keymaster_module.

Definisi pada baris 41 file keymaster1.h .

struct hw_device_t umum

Metode umum perangkat keymaster. Ini harus menjadi anggota pertama keymaster_device karena pengguna struktur ini akan melemparkan hw_device_t ke penunjuk keymaster_device dalam konteks yang diketahui bahwa hw_device_t merujuk pada keymaster_device.

Definisi pada baris 35 file keymaster1.h .

konteks kosong*

Definisi pada baris 48 file keymaster1.h .

int(* delete_all)(const struct keymaster1_device *dev)
Tidak digunakan lagi:
Menghapus semua kunci di keystore perangkat keras. Digunakan saat keystore direset sepenuhnya.

Fungsi ini bersifat opsional dan harus disetel ke NULL jika tidak diterapkan.

Mengembalikan 0 jika berhasil atau kode kesalahan kurang dari 0.

Definisi pada baris 100 file keymaster1.h .

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

Menghapus semua kunci di keystore perangkat keras. Digunakan saat keystore direset sepenuhnya. Setelah memanggil fungsi ini, tidak mungkin menggunakan blob kunci yang dibuat atau diimpor sebelumnya untuk operasi apa pun.

Fungsi ini bersifat opsional dan harus disetel ke NULL jika tidak diterapkan.

Parameter
[di dalam] dev Struktur perangkat keymaster.

Definisi pada baris 407 file keymaster1.h .

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

Menghapus kunci, atau pasangan kunci, yang terkait dengan blob kunci. Setelah memanggil fungsi ini, kunci tersebut tidak dapat digunakan untuk operasi lainnya. Dapat diterapkan pada kunci dari akar kepercayaan asing (kunci tidak dapat digunakan berdasarkan akar kepercayaan saat ini).

Fungsi ini bersifat opsional dan harus disetel ke NULL jika tidak diterapkan.

Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] kunci Kunci yang akan dihapus.

Definisi pada baris 395 file keymaster1.h .

int(* delete_keypair)(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length)
Tidak digunakan lagi:
Menghapus pasangan kunci yang terkait dengan gumpalan kunci.

Fungsi ini bersifat opsional dan harus disetel ke NULL jika tidak diterapkan.

Mengembalikan 0 jika berhasil atau kode kesalahan kurang dari 0.

Definisi pada baris 88 file keymaster1.h .

keymaster_error_t (* ekspor_kunci)(const struct keymaster1_device *dev, keymaster_key_format_t ekspor_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)

Mengekspor kunci publik, mengembalikan array byte dalam format yang ditentukan.

Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] ekspor_format Format yang akan digunakan untuk mengekspor kunci.
[di dalam] kunci_untuk_ekspor Kuncinya adalah mengekspor.
[keluar] ekspor_data Bahan utama yang diekspor. Penelepon mengambil alih kepemilikan.
[keluar] ekspor_data_panjang Panjang export_data .

Definisi pada baris 377 file keymaster1.h .

keymaster_error_t (* selesai)(const struct keymaster1_device *dev, keymaster_operation_handle_t operasi_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *tanda tangan, keymaster_key_param_set_t *out_params, keymaster_blob_t *output)

Menyelesaikan operasi kriptografi yang dimulai dengan Begin() dan membatalkan validasi operation_handle .

Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] pegangan_operasi Pegangan operasi dikembalikan oleh Begin() . Pegangan ini akan menjadi tidak valid.
[di dalam] param Parameter tambahan untuk operasi. Untuk mode AEAD, ini digunakan untuk menentukan KM_TAG_ADDITIONAL_DATA, namun hanya jika tidak ada data masukan yang diberikan ke update() .
[di dalam] tanda tangan Tanda tangan yang akan diverifikasi jika tujuan yang ditentukan dalam panggilan start() adalah KM_PURPOSE_VERIFY.
[keluar] keluaran Data keluaran, jika ada. Penelepon mengambil alih kepemilikan buffer yang dialokasikan.

Jika operasi yang diselesaikan adalah verifikasi tanda tangan atau dekripsi dan verifikasi mode AEAD gagal, maka finish() akan mengembalikan KM_ERROR_VERIFICATION_FAILED.

Definisi pada baris 521 file keymaster1.h .

bendera uint32_t

Lihat tanda yang ditentukan untuk keymaster0_devices::flags di keymaster_common.h

Definisi pada baris 46 file 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 **karakteristik)

Menghasilkan kunci, atau pasangan kunci, mengembalikan blob kunci dan/atau deskripsi kunci.

Parameter pembuatan kunci didefinisikan sebagai pasangan tag/nilai keymaster, yang disediakan di params . Lihat keymaster_tag_t untuk daftar lengkapnya. Beberapa nilai yang selalu diperlukan untuk menghasilkan kunci yang berguna adalah:

  • KM_TAG_ALGORITMA;
  • KM_TAG_TUJUAN; Dan
  • (KM_TAG_USER_SECURE_ID dan KM_TAG_USER_AUTH_TYPE) atau KM_TAG_NO_AUTH_REQUIRED.

KM_TAG_AUTH_TIMEOUT umumnya harus ditentukan kecuali KM_TAG_NO_AUTH_REQUIRED ada, atau pengguna harus mengautentikasi untuk setiap penggunaan.

KM_TAG_BLOCK_MODE, KM_TAG_PADDING, KM_TAG_MAC_LENGTH dan KM_TAG_DIGEST harus ditentukan untuk algoritma yang memerlukannya.

Tag berikut mungkin tidak ditentukan; nilai-nilai mereka akan diberikan oleh implementasi.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] param Array parameter pembangkitan kunci.
[di dalam] params_count Panjang params .
[keluar] kunci_blob mengembalikan kunci yang dihasilkan. key_blob tidak boleh NULL. Penelepon mengambil kepemilikan key_blob->key_material dan harus membebaskan() itu.
[keluar] karakteristik mengembalikan karakteristik kunci yang dihasilkan, jika bukan NULL. Jika non-NULL, pemanggil mengambil alih kepemilikan dan harus membatalkan alokasi dengan keymaster_free_characteristics() . Perhatikan bahwa KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID dan KM_TAG_APPLICATION_DATA tidak pernah dikembalikan.

Definisi pada baris 282 file 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)
Tidak digunakan lagi:
Menghasilkan kunci publik dan pribadi. Gumpalan kunci yang dikembalikan tidak tembus cahaya dan selanjutnya harus disediakan untuk penandatanganan dan verifikasi.

Pengembalian: 0 jika berhasil atau kode kesalahan kurang dari 0.

Definisi pada baris 56 file 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 **karakteristik)

Mengembalikan karakteristik kunci yang ditentukan, atau KM_ERROR_INVALID_KEY_BLOB jika key_blob tidak valid (implementasi harus memvalidasi integritas kunci sepenuhnya). client_id dan app_data harus berupa ID dan data yang diberikan saat kunci dibuat atau diimpor, atau kosong jika KM_TAG_APPLICATION_ID dan/atau KM_TAG_APPLICATION_DATA tidak diberikan selama pembuatan. Nilai-nilai tersebut tidak termasuk dalam karakteristik yang dikembalikan. Penelepon mengambil alih kepemilikan objek karakteristik yang dialokasikan, yang harus dibatalkan alokasinya dengan keymaster_free_characteristics() .

Perhatikan bahwa KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID dan KM_TAG_APPLICATION_DATA tidak pernah dikembalikan.

Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] kunci_blob Kunci untuk mengambil karakteristik dari.
[di dalam] id_klien Data ID klien, atau NULL jika tidak ada yang terkait.
[di dalam] app_id Data aplikasi, atau NULL jika tidak ada yang terkait.
[keluar] karakteristik Karakteristik utama.

Definisi pada baris 309 file 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)
Tidak digunakan lagi:
Mendapatkan bagian kunci publik dari pasangan kunci. Kunci publik harus dalam array byte yang dikodekan dalam format X.509 (standar Java).

Pengembalian: 0 jika berhasil atau kode kesalahan kurang dari 0. Jika terjadi kesalahan, x509_data tidak boleh dialokasikan.

Definisi pada baris 76 file keymaster1.h .

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

Mendapat dukungan algoritma.

Parameter
[di dalam] dev Struktur perangkat keymaster.
[keluar] algoritma Berbagai algoritma didukung. Penelepon mengambil alih kepemilikan array dan harus membebaskannya ().
[keluar] algoritma_panjang Panjang algorithms .

Definisi pada baris 133 file keymaster1.h .

keymaster_error_t (* get_supported_block_modes)(const struct keymaster1_device *dev, algoritma keymaster_algorithm_t , tujuan keymaster_ Purpose_t , keymaster_block_mode_t **modes, size_t *modes_length)

Mendapatkan mode blok yang didukung untuk algoritma yang ditentukan.

Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] algoritma Algoritma yang modenya didukung akan dikembalikan.
[keluar] mode Berbagai mode didukung. Penelepon mengambil alih kepemilikan array dan harus membebaskannya ().
[keluar] mode_panjang Panjang modes .

Definisi pada baris 149 file keymaster1.h .

keymaster_error_t (* get_supported_digests)(const struct keymaster1_device *dev, algoritma keymaster_algorithm_t , tujuan keymaster_tujuan_t , keymaster_digest_t **intisari, size_t *digests_length)

Mendapatkan intisari yang didukung untuk algoritma yang ditentukan. Penelepon mengambil alih kepemilikan array yang dialokasikan.

Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] algoritma Algoritme yang intisarinya didukung akan dikembalikan.
[keluar] mencerna Array intisari didukung. Penelepon mengambil alih kepemilikan array dan harus membebaskannya ().
[keluar] intisari_panjang Panjang digests .

Definisi pada baris 187 file keymaster1.h .

keymaster_error_t (* get_supported_export_formats)(const struct keymaster1_device *dev, algoritma keymaster_algorithm_t , keymaster_key_format_t **format, size_t *formats_length)

Mendapatkan format ekspor kunci yang didukung untuk kunci algoritma tertentu. Penelepon mengambil alih kepemilikan array yang dialokasikan.

Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] algoritma Algoritma yang formatnya didukung akan dikembalikan.
[keluar] format Berbagai format didukung. Penelepon mengambil alih kepemilikan array dan harus membebaskannya ().
[keluar] format_panjang Panjang formats .

Definisi pada baris 224 file keymaster1.h .

keymaster_error_t (* get_supported_import_formats)(const struct keymaster1_device *dev, algoritma keymaster_algorithm_t , keymaster_key_format_t **format, size_t *formats_length)

Mendapatkan format impor kunci yang didukung untuk kunci algoritma tertentu. Penelepon mengambil alih kepemilikan array yang dialokasikan.

Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] algoritma Algoritma yang formatnya didukung akan dikembalikan.
[keluar] format Berbagai format didukung. Penelepon mengambil alih kepemilikan array dan harus membebaskannya ().
[keluar] format_panjang Panjang formats .

Definisi pada baris 206 file keymaster1.h .

keymaster_error_t (* get_supported_padding_modes)(const struct keymaster1_device *dev, algoritma keymaster_algorithm_t , tujuan keymaster_using_t , keymaster_padding_t **mode, size_t *modes_length)

Mendapatkan dukungan mode padding untuk algoritma yang ditentukan. Penelepon mengambil alih kepemilikan array yang dialokasikan.

Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] algoritma Algoritme yang mode paddingnya didukung akan dikembalikan.
[keluar] mode Berbagai mode padding didukung. Penelepon mengambil alih kepemilikan array dan harus membebaskannya ().
[keluar] mode_panjang Panjang modes .

Definisi pada baris 168 file 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 **karakteristik)

Mengimpor kunci, atau pasangan kunci, yang mengembalikan blob kunci dan/atau deskripsi kunci.

Sebagian besar parameter impor kunci didefinisikan sebagai pasangan tag/nilai keymaster, yang disediakan dalam "params". Lihat keymaster_tag_t untuk daftar lengkapnya. Nilai yang selalu diperlukan untuk mengimpor kunci yang berguna adalah:

  • KM_TAG_ALGORITMA;
  • KM_TAG_TUJUAN; Dan
  • (KM_TAG_USER_SECURE_ID dan KM_TAG_USER_AUTH_TYPE) atau KM_TAG_NO_AUTH_REQUIRED.

KM_TAG_AUTH_TIMEOUT umumnya harus ditentukan. Jika tidak ditentukan, pengguna harus mengautentikasi untuk setiap penggunaan.

Tag berikut akan mengambil nilai default jika tidak ditentukan:

  • KM_TAG_KEY_SIZE akan default ke ukuran kunci yang disediakan.
  • KM_TAG_RSA_PUBLIC_EXPONENT akan default ke nilai dalam kunci yang disediakan (untuk kunci RSA)

Tag berikut mungkin tidak ditentukan; nilai-nilai mereka akan diberikan oleh implementasi.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] param Parameter yang menentukan kunci yang diimpor.
[di dalam] params_count Jumlah entri dalam params .
[di dalam] format_kunci menentukan format data kunci di key_data.
[keluar] kunci_blob Digunakan untuk mengembalikan gumpalan kunci buram. Harus bukan NULL. Penelepon mengambil alih kepemilikan key_material yang terkandung.
[keluar] karakteristik Digunakan untuk mengembalikan karakteristik kunci yang diimpor. Mungkin NULL, dalam hal ini tidak ada karakteristik yang akan dikembalikan. Jika non-NULL, pemanggil mengambil alih kepemilikan dan harus membatalkan alokasi dengan keymaster_free_characteristics() . Perhatikan bahwa KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID dan KM_TAG_APPLICATION_DATA tidak pernah dikembalikan.

Definisi pada baris 357 file 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)
Tidak digunakan lagi:
Mengimpor pasangan kunci publik dan pribadi. Kunci yang diimpor akan dalam format PKCS#8 dengan pengkodean DER (standar Java). Gumpalan kunci yang dikembalikan tidak tembus cahaya dan selanjutnya akan diberikan untuk penandatanganan dan verifikasi.

Pengembalian: 0 jika berhasil atau kode kesalahan kurang dari 0.

Definisi pada baris 66 file 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)
Tidak digunakan lagi:
Menandatangani data menggunakan gumpalan kunci yang dihasilkan sebelumnya. Ini dapat menggunakan kunci asimetris atau kunci rahasia.

Pengembalian: 0 jika berhasil atau kode kesalahan kurang dari 0.

Definisi pada baris 108 file keymaster1.h .

keymaster_error_t (* pembaruan)(const struct keymaster1_device *dev, keymaster_operation_handle_t operasi_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)

Menyediakan data ke, dan mungkin menerima keluaran dari, operasi kriptografi berkelanjutan yang dimulai dengan Begin() .

Jika operasi_handle tidak valid, update() akan mengembalikan KM_ERROR_INVALID_OPERATION_HANDLE.

update() mungkin tidak menggunakan semua data yang disediakan di buffer data. update() akan mengembalikan jumlah yang dikonsumsi dalam *data_consumed. Penelepon harus memberikan data yang tidak terpakai pada panggilan berikutnya.

Parameter
[di dalam] dev Struktur perangkat keymaster.
[di dalam] pegangan_operasi Pegangan operasi dikembalikan oleh Begin() .
[di dalam] di_params Parameter tambahan untuk operasi. Untuk mode AEAD, ini digunakan untuk menentukan KM_TAG_ADDITIONAL_DATA. Perhatikan bahwa data tambahan mungkin diberikan dalam beberapa panggilan ke update() , namun hanya sampai data masukan telah diberikan.
[di dalam] memasukkan Data yang akan diproses, sesuai parameter yang ditetapkan dalam panggilan ke Begin() . Perhatikan bahwa update() mungkin menggunakan atau tidak menggunakan semua data yang disediakan. Lihat input_consumed .
[keluar] masukan_dikonsumsi Jumlah data yang dikonsumsi oleh update() . Jika jumlahnya kurang dari jumlah yang diberikan, pemanggil harus memberikan sisanya pada panggilan berikutnya ke update() .
[keluar] keluar_params Parameter keluaran. Digunakan untuk mengembalikan data tambahan dari operasi Penelepon mengambil kepemilikan array parameter output dan harus membebaskannya dengan keymaster_free_param_set() . out_params dapat disetel ke NULL jika tidak ada parameter keluaran yang diharapkan. Jika out_params adalah NULL, dan parameter keluaran dihasilkan, start() akan mengembalikan KM_ERROR_OUTPUT_PARAMETER_NULL.
[keluar] keluaran Data keluaran, jika ada. Penelepon mengambil alih kepemilikan buffer yang dialokasikan. keluaran tidak boleh NULL.

Perhatikan bahwa update() mungkin tidak memberikan output apa pun, dalam hal ini output->data_length akan menjadi nol, dan output->data dapat berupa NULL atau nol-panjang (jadi pemanggil harus selalu free() itu).

Definisi pada baris 495 file keymaster1.h .

int(* verifikasi_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 sign_data_length, const uint8_t *tanda tangan, const size_t tanda tangan_panjang)
Tidak digunakan lagi:
Memverifikasi data yang ditandatangani dengan gumpalan kunci. Ini dapat menggunakan kunci asimetris atau kunci rahasia.

Pengembalian: 0 pada verifikasi berhasil atau kode kesalahan kurang dari 0.

Definisi pada baris 118 file keymaster1.h .


Dokumentasi untuk struct ini dihasilkan dari file berikut: