keymaster1_device 구조체 참조

keymaster1_device 구조체 참조

#include < keymaster1.h >

데이터 필드

struct hw_device_t   일반적인
 
uint32_t  client_version
 
uint32_t  플래그
 
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)
 

상세 설명

Keymaster1 기기 정의

keymaster1.h 파일의 28 번 줄에 정의되어 있습니다.

필드 문서

begin() 로 시작된 암호화 작업을 중단하여 모든 내부 리소스를 해제하고 operation_handle 를 무효화합니다.

keymaster1.h 파일의 531 줄에 정의되어 있습니다.

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

키마스터에서 사용하는 RNG에 엔트로피를 추가합니다. 이 메서드를 통해 추가된 엔트로피는 사용되는 유일한 엔트로피 소스가 아닙니다. 또한 혼합 함수는 공격자가 예측하거나 제어할 수 없는 데이터로 RNG가 시드된 경우 RNG 출력이 무작위와 구별할 수 없다는 의미에서 안전해야 합니다. 따라서 소스의 엔트로피가 좋으면 출력도 좋습니다.

매개변수
[in] dev Keymaster 기기 구조입니다.
[in] 데이터 혼합할 임의 데이터입니다.
[in] data_length data 의 길이입니다.

keymaster1.h 파일의 242 줄에 정의되어 있습니다.

지정된 키를 사용하여 암호화 작업을 시작합니다. 문제가 없으면 begin() 는 KM_ERROR_OK를 반환하고 작업 핸들을 만듭니다. 이 핸들은 이후 update() , finish() 또는 abort() 호출에 전달해야 합니다.

키마스터 구현에서 내부 작업 상태를 정리할 수 있도록 하려면 begin() 를 호출할 때마다 후속 finish() 또는 abort() 호출과 페어링해야 합니다. 이렇게 하지 않으면 내부 상태 공간 또는 기타 내부 리소스가 유출될 수 있으며 결국 작업 공간이 부족할 때 begin() 이 KM_ERROR_TOO_MANY_OPERATIONS를 반환할 수 있습니다. begin() , update() 또는 finish() 의 KM_ERROR_OK 이외의 결과는 작업을 암시적으로 중단합니다. 이 경우 abort() 를 호출할 필요가 없으며 호출하면 KM_ERROR_INVALID_OPERATION_HANDLE이 반환됩니다.

매개변수
[in] dev Keymaster 기기 구조입니다.
[in] 목적 작업의 목적입니다. KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN 또는 KM_PURPOSE_VERIFY 중 하나입니다. AEAD 모드의 경우 암호화 및 복호화는 각각 서명 및 인증을 의미하지만 KM_PURPOSE_ENCRYPT 및 KM_PURPOSE_DECRYPT로 지정해야 합니다.
[in] 작업에 사용할 키입니다. key purpose 와 호환되는 목적을 가져야 하며 모든 사용 요구사항이 충족되어야 합니다. 그렇지 않으면 begin() 이 적절한 오류 코드를 반환합니다.
[in] in_params 작업의 추가 매개변수입니다. 일반적으로 KM_TAG_AUTH_TOKEN과 함께 인증 데이터를 제공하는 데 사용됩니다. 생성 중에 KM_TAG_APPLICATION_ID 또는 KM_TAG_APPLICATION_DATA가 제공된 경우 여기에 제공해야 합니다. 그러지 않으면 KM_ERROR_INVALID_KEY_BLOB과 함께 작업이 실패합니다. nonce 또는 IV가 필요한 작업의 경우 KM_TAG_CALLER_NONCE로 생성된 키에서 in_params에 KM_TAG_NONCE 태그가 포함될 수 있습니다. AEAD 작업의 경우 KM_TAG_CHUNK_SIZE가 여기에 지정됩니다.
[out] out_params 출력 매개변수 작업 초기화에서 추가 데이터를 반환하는 데 사용됩니다. 특히 IV 또는 nonce를 생성하는 작업에서 IV 또는 nonce를 반환하는 데 사용됩니다. 호출자는 출력 매개변수 배열의 소유권을 가져와 keymaster_free_param_set() 을 사용하여 해제해야 합니다. 출력 매개변수가 예상되지 않는 경우 out_params는 NULL로 설정될 수 있습니다. out_params가 NULL이고 출력 매개변수가 생성되면 begin() 은 KM_ERROR_OUTPUT_PARAMETER_NULL을 반환합니다.
[out] operation_handle 새로 만든 작업 핸들로, update() , finish() 또는 abort() 에 전달해야 합니다. operation_handle이 NULL이면 begin() 이 KM_ERROR_OUTPUT_PARAMETER_NULL을 반환합니다.

keymaster1.h 파일의 451 줄에 정의되어 있습니다.

uint32_t client_version

지원 중단됨 대신 keymaster_module 초기화에서 새 'module_api_version' 및 'hal_api_version' 필드를 사용하세요.

keymaster1.h FILE의 41 라인에 정의되어 있습니다.

struct hw_device_t common

Keymaster 기기의 일반적인 메서드입니다. 이 구조체의 사용자는 hw_device_t 가 keymaster_device를 참조하는 것으로 알려진 컨텍스트에서 hw_device_t 를 keymaster_device 포인터로 변환하므로 이 필드는 keymaster_device의 첫 번째 구성원이어야 합니다.

keymaster1.h 파일의 35 줄에 정의되어 있습니다.

void* context

keymaster1.h 파일의 48 줄에 정의되어 있습니다.

int(* delete_all)(const struct keymaster1_device *dev)
지원 중단됨:
하드웨어 키 저장소의 모든 키를 삭제합니다. 키 저장소가 완전히 재설정될 때 사용됩니다.

이 함수는 선택사항이며 구현되지 않은 경우 NULL로 설정해야 합니다.

성공 시 0을 반환하거나 0보다 작은 오류 코드를 반환합니다.

keymaster1.h 파일의 100 번 째 줄에 정의되어 있습니다.

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

하드웨어 키 저장소의 모든 키를 삭제합니다. 키 저장소가 완전히 재설정될 때 사용됩니다. 이 함수를 호출한 후에는 이전에 생성되거나 가져온 키 블롭을 작업에 사용할 수 없습니다.

이 함수는 선택사항이며 구현되지 않은 경우 NULL로 설정해야 합니다.

매개변수
[in] dev Keymaster 기기 구조입니다.

keymaster1.h FILE의 407 행에 정의가 있습니다.

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

키 블록과 연결된 키 또는 키 쌍을 삭제합니다. 이 함수를 호출한 후에는 다른 작업에 키를 사용할 수 없습니다. 외부 신뢰할 수 있는 루트의 키 (현재 신뢰할 수 있는 루트에서 사용할 수 없는 키)에 적용될 수 있습니다.

이 함수는 선택사항이며 구현되지 않은 경우 NULL로 설정해야 합니다.

매개변수
[in] dev Keymaster 기기 구조입니다.
[in] 삭제할 키입니다.

keymaster1.h 파일의 395 번 째 줄에 정의되어 있습니다.

int(* delete_keypair)(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length)
지원 중단됨:
키 블록과 연결된 키 쌍을 삭제합니다.

이 함수는 선택사항이며 구현되지 않은 경우 NULL로 설정해야 합니다.

성공 시 0을 반환하거나 0보다 작은 오류 코드를 반환합니다.

keymaster1.h 파일의 88 줄에 정의되어 있습니다.

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)

공개 키를 내보내 지정된 형식의 바이트 배열을 반환합니다.

매개변수
[in] dev Keymaster 기기 구조입니다.
[in] export_format 키를 내보내는 데 사용할 형식입니다.
[in] key_to_export 내보낼 키입니다.
[out] export_data 내보낸 키 자료입니다. 호출자가 소유권을 가정합니다.
[out] export_data_length export_data 의 길이입니다.

keymaster1.h 파일의 377 행에 정의되어 있습니다.

begin() 으로 시작된 암호화 작업을 완료하고 operation_handle 를 무효화합니다.

매개변수
[in] dev Keymaster 기기 구조입니다.
[in] operation_handle begin() 에서 반환된 작업 핸들입니다. 이 핸들은 무효화됩니다.
[in] params 작업의 추가 매개변수입니다. AEAD 모드의 경우 update() 에 입력 데이터가 제공되지 않은 경우에만 KM_TAG_ADDITIONAL_DATA를 지정하는 데 사용됩니다.
[in] 서명 begin() 호출에 지정된 목적이 KM_PURPOSE_VERIFY인 경우 확인할 서명입니다.
[out] output 출력 데이터(있는 경우) 호출자가 할당된 버퍼의 소유권을 가정합니다.

완료 중인 작업이 서명 확인 또는 AEAD 모드 복호화이고 확인에 실패하면 finish() 는 KM_ERROR_VERIFICATION_FAILED를 반환합니다.

keymaster1.h FILE의 521 라인에 정의되어 있습니다.

uint32_t 플래그

keymaster_common.h 에서 keymaster0_devices::flags에 정의된 플래그를 참고하세요.

keymaster1.h FILE의 46 라인에 정의되어 있습니다.

키 또는 키 쌍을 생성하여 키 blob 또는 키 설명을 반환합니다.

키 생성 매개변수는 params 에 제공된 키마스터 태그/값 쌍으로 정의됩니다. 전체 목록은 keymaster_tag_t를 참고하세요. 유용한 키를 생성하는 데 항상 필요한 몇 가지 값은 다음과 같습니다.

  • KM_TAG_ALGORITHM;
  • KM_TAG_PURPOSE;
  • (KM_TAG_USER_SECURE_ID 및 KM_TAG_USER_AUTH_TYPE) 또는 KM_TAG_NO_AUTH_REQUIRED.

KM_TAG_NO_AUTH_REQUIRED가 있는 것이 아니라면 일반적으로 KM_TAG_AUTH_TIMEOUT을 지정해야 합니다. 그렇지 않으면 사용자가 사용할 때마다 인증해야 합니다.

KM_TAG_BLOCK_MODE, KM_TAG_PADDING, KM_TAG_MAC_LENGTH, KM_TAG_DIGEST는 이러한 속성이 필요한 알고리즘에 지정해야 합니다.

다음 태그는 지정할 수 없습니다. 값은 구현에서 제공합니다.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
매개변수
[in] dev Keymaster 기기 구조입니다.
[in] params 키 생성 매개변수 배열입니다.
[in] params_count params 의 길이입니다.
[out] key_blob 생성된 키를 반환합니다. key_blob 은 null이 아니어야 합니다. 호출자는 key_blob->key_material의 소유권을 가정하고 free()해야 합니다.
[out] 특성 생성된 키의 특성을 반환합니다(NULL이 아닐 경우). NULL이 아닌 경우 호출자가 소유권을 가정하고 keymaster_free_characteristics() 를 사용하여 할당 해제해야 합니다. KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID, KM_TAG_APPLICATION_DATA는 반환되지 않습니다.

keymaster1.h FILE의 282 라인에 정의되어 있습니다.

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)
지원 중단됨:
공개 키와 비공개 키를 생성합니다. 반환된 키 blob은 불투명하며 서명 및 인증을 위해 나중에 제공해야 합니다.

반환값: 성공 시 0, 실패 시 0보다 작은 오류 코드입니다.

keymaster1.h FILE의 56 라인에 정의되어 있습니다.

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)

지정된 키의 특성을 반환하거나 key_blob이 잘못된 경우 KM_ERROR_INVALID_KEY_BLOB을 반환합니다 (구현은 키의 무결성을 완전히 검증해야 함). client_id 및 app_data는 키가 생성 또는 가져올 때 제공된 ID 및 데이터여야 하며, 생성 중에 KM_TAG_APPLICATION_ID 또는 KM_TAG_APPLICATION_DATA가 제공되지 않은 경우에는 비어 있어야 합니다. 이러한 값은 반환된 특성에 포함되지 않습니다. 호출자는 할당된 특성 객체의 소유권을 가정하며, 이 객체는 keymaster_free_characteristics() 로 할당 해제해야 합니다.

KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID, KM_TAG_APPLICATION_DATA는 반환되지 않습니다.

매개변수
[in] dev Keymaster 기기 구조입니다.
[in] key_blob 특성을 가져올 키입니다.
[in] client_id 클라이언트 ID 데이터 또는 연결된 항목이 없는 경우 NULL입니다.
[in] app_id 앱 데이터 또는 연결된 데이터가 없는 경우 NULL입니다.
[out] 특성 주요 특징

keymaster1.h FILE의 309 라인에 정의되어 있습니다.

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)
지원 중단됨:
키 쌍의 공개 키 부분을 가져옵니다. 공개 키는 X.509 형식 (Java 표준)으로 인코딩된 바이트 배열이어야 합니다.

반환값: 성공 시 0, 실패 시 0보다 작은 오류 코드입니다. 오류가 발생하면 x509_data가 할당되어서는 안 됩니다.

keymaster1.h FILE의 76 라인에 정의되어 있습니다.

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

지원되는 알고리즘을 가져옵니다.

매개변수
[in] dev Keymaster 기기 구조입니다.
[out] 알고리즘 지원되는 알고리즘 배열 호출자는 배열의 소유권을 가져와 free()해야 합니다.
[out] algorithms_length algorithms 의 길이입니다.

keymaster1.h 파일의 133 행에 정의되어 있습니다.

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)

지정된 알고리즘에 지원되는 블록 모드를 가져옵니다.

매개변수
[in] dev Keymaster 기기 구조입니다.
[in] 알고리즘 지원되는 모드가 반환되는 알고리즘입니다.
[out] 모드 지원되는 모드 배열 호출자는 배열의 소유권을 가져와 free()해야 합니다.
[out] modes_length modes 의 길이입니다.

keymaster1.h 파일의 149 번 라인에 정의되어 있습니다.

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)

지정된 알고리즘에 지원되는 다이제스트를 가져옵니다. 호출자가 할당된 배열의 소유권을 가정합니다.

매개변수
[in] dev Keymaster 기기 구조입니다.
[in] 알고리즘 지원되는 다이제스트가 반환되는 알고리즘입니다.
[out] 다이제스트 다이제스트 배열이 지원됩니다. 호출자는 배열의 소유권을 가져와 free()해야 합니다.
[out] digests_length digests 의 길이입니다.

keymaster1.h FILE의 187 라인에 정의되어 있습니다.

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)

지정된 알고리즘의 키에 지원되는 키 내보내기 형식을 가져옵니다. 호출자가 할당된 배열의 소유권을 가정합니다.

매개변수
[in] dev Keymaster 기기 구조입니다.
[in] 알고리즘 지원되는 형식이 반환되는 알고리즘입니다.
[out] 형식 지원되는 형식 배열 호출자는 배열의 소유권을 가져와 free()해야 합니다.
[out] formats_length formats 의 길이입니다.

keymaster1.h 파일의 224 번 째 줄에 정의되어 있습니다.

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)

지정된 알고리즘의 키에 지원되는 키 가져오기 형식을 가져옵니다. 호출자가 할당된 배열의 소유권을 가정합니다.

매개변수
[in] dev Keymaster 기기 구조입니다.
[in] 알고리즘 지원되는 형식이 반환되는 알고리즘입니다.
[out] 형식 지원되는 형식 배열 호출자는 배열의 소유권을 가져와 free()해야 합니다.
[out] formats_length formats 의 길이입니다.

keymaster1.h 파일의 206 행에 정의되어 있습니다.

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)

지정된 알고리즘에 지원되는 패딩 모드를 가져옵니다. 호출자가 할당된 배열의 소유권을 가정합니다.

매개변수
[in] dev Keymaster 기기 구조입니다.
[in] 알고리즘 지원되는 패딩 모드가 반환되는 알고리즘입니다.
[out] 모드 지원되는 패딩 모드 배열입니다. 호출자는 배열의 소유권을 가져와 free()해야 합니다.
[out] modes_length modes 의 길이입니다.

keymaster1.h FILE의 168 라인에 정의되어 있습니다.

키 또는 키 쌍을 가져와 키 blob 또는 키 설명을 반환합니다.

대부분의 키 가져오기 매개변수는 'params'에 제공된 키마스터 태그/값 쌍으로 정의됩니다. 전체 목록은 keymaster_tag_t를 참고하세요. 유용한 키를 가져올 때 항상 필요한 값은 다음과 같습니다.

  • KM_TAG_ALGORITHM;
  • KM_TAG_PURPOSE;
  • (KM_TAG_USER_SECURE_ID 및 KM_TAG_USER_AUTH_TYPE) 또는 KM_TAG_NO_AUTH_REQUIRED.

일반적으로 KM_TAG_AUTH_TIMEOUT을 지정해야 합니다. 지정하지 않으면 사용자는 매번 인증해야 합니다.

다음 태그는 지정되지 않은 경우 기본값을 사용합니다.

  • KM_TAG_KEY_SIZE는 기본적으로 제공된 키의 크기로 설정됩니다.
  • KM_TAG_RSA_PUBLIC_EXPONENT는 기본적으로 제공된 키의 값으로 설정됩니다 (RSA 키의 경우).

다음 태그는 지정할 수 없습니다. 값은 구현에서 제공합니다.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
매개변수
[in] dev Keymaster 기기 구조입니다.
[in] params 가져온 키를 정의하는 매개변수입니다.
[in] params_count params 의 항목 수입니다.
[in] key_format key_data에 있는 키 데이터의 형식을 지정합니다.
[out] key_blob 불투명 키 blob을 반환하는 데 사용됩니다. NULL이 아니어야 합니다. 호출자는 포함된 key_material의 소유권을 가정합니다.
[out] 특성 가져온 키의 특성을 반환하는 데 사용됩니다. NULL일 수 있으며, 이 경우 특성이 반환되지 않습니다. NULL이 아닌 경우 호출자가 소유권을 가정하고 keymaster_free_characteristics() 를 사용하여 할당 해제해야 합니다. KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID, KM_TAG_APPLICATION_DATA는 반환되지 않습니다.

keymaster1.h FILE의 357 라인에 정의되어 있습니다.

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)
지원 중단됨:
공개 키와 비공개 키 쌍을 가져옵니다. 가져온 키는 DER 인코딩 (Java 표준)이 적용된 PKCS#8 형식입니다. 반환된 키 blob은 불투명하며 이후 서명 및 확인을 위해 제공됩니다.

반환값: 성공 시 0, 실패 시 0보다 작은 오류 코드입니다.

keymaster1.h 파일의 66 번 라인에 정의되어 있습니다.

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)
지원 중단됨:
이전에 생성된 키 blob을 사용하여 데이터에 서명합니다. 비대칭 키 또는 보안 비밀을 사용할 수 있습니다.

반환값: 성공 시 0, 실패 시 0보다 작은 오류 코드입니다.

keymaster1.h 파일의 108 줄에 정의되어 있습니다.

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)

begin() 로 시작된 진행 중인 암호화 작업에 데이터를 제공하고 출력을 수신할 수 있습니다.

operation_handle이 잘못된 경우 update() 는 KM_ERROR_INVALID_OPERATION_HANDLE을 반환합니다.

update() 는 데이터 버퍼에 제공된 모든 데이터를 사용하지 않을 수 있습니다. update() 는 *data_consumed에서 소비된 양을 반환합니다. 호출자는 후속 호출에서 사용되지 않은 데이터를 제공해야 합니다.

매개변수
[in] dev Keymaster 기기 구조입니다.
[in] operation_handle begin() 에서 반환된 작업 핸들입니다.
[in] in_params 작업의 추가 매개변수입니다. AEAD 모드의 경우 KM_TAG_ADDITIONAL_DATA를 지정하는 데 사용됩니다. update() 를 여러 번 호출할 때 추가 데이터가 제공될 수 있지만, 입력 데이터가 제공될 때까지만 제공됩니다.
[in] 입력 begin() 호출에서 설정된 매개변수에 따라 처리할 데이터입니다. update() 는 제공된 모든 데이터를 사용할 수도 있고 사용하지 않을 수도 있습니다. input_consumed 를 참고하세요.
[out] input_consumed update() 에서 소비된 데이터 양입니다. 이 값이 제공된 금액보다 적으면 호출자는 후속 update() 호출에서 나머지를 제공해야 합니다.
[out] out_params 출력 매개변수 작업에서 추가 데이터를 반환하는 데 사용됩니다. 호출자는 출력 매개변수 배열의 소유권을 가져와야 하며 keymaster_free_param_set() 을 사용하여 이를 해제해야 합니다. 출력 매개변수가 예상되지 않는 경우 out_params는 NULL로 설정될 수 있습니다. out_params가 NULL이고 출력 매개변수가 생성되면 begin() 은 KM_ERROR_OUTPUT_PARAMETER_NULL을 반환합니다.
[out] output 출력 데이터(있는 경우) 호출자는 할당된 버퍼의 소유권을 가정합니다. 출력은 NULL이 아니어야 합니다.

update() 는 출력을 제공하지 않을 수 있습니다. 이 경우 output->data_length는 0이 되고 output->data는 NULL이거나 길이가 0일 수 있습니다 (따라서 호출자는 항상 free()해야 함).

keymaster1.h 파일의 495 번 라인에 정의되어 있습니다.

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)
지원 중단됨:
키 블록으로 서명된 데이터를 확인합니다. 비대칭 키 또는 보안 비밀을 사용할 수 있습니다.

반환값: 확인에 성공하면 0을, 실패하면 0보다 작은 오류 코드를 반환합니다.

keymaster1.h 파일의 118 줄에 정의되어 있습니다.


이 구조체에 관한 문서는 다음 파일에서 생성되었습니다.