keymaster2_device 구조체 참조

keymaster2_device 구조체 참조

#include < keymaster2.h >

데이터 필드

구조체 hw_device_t 흔한
무효의 * 문맥
uint32_t 깃발
keymaster_error_t (* 구성 )(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params)
keymaster_error_t (* add_rng_entropy )(const struct keymaster2_device *dev, const uint8_t *data, size_t data_length)
keymaster_error_t (* generate_key )(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t *특성)
keymaster_error_t (* get_key_characteristics )(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_blob, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_key_characteristics_t *특성)
keymaster_error_t (* import_key )(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params, keymaster_key_format_t key_format, const keymaster_blob_t *key_data, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t *특성)
keymaster_error_t (* 내보내기_키 )(const struct keymaster2_device *dev, keymaster_key_format_t 내보내기_format, const keymaster_key_blob_t *key_to_export, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_blob_t *export_data)
keymaster_error_t (* attest_key )(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_to_attest, const keymaster_key_param_set_t *attest_params, keymaster_cert_chain_t *cert_chain)
keymaster_error_t (* 업그레이드_키 )(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_to_upgrade, const keymaster_key_param_set_t *upgrade_params, keymaster_key_blob_t *upgraded_key)
keymaster_error_t (* delete_key )(const struct keymaster2_device *dev, const keymaster_key_blob_t *key)
keymaster_error_t (* delete_all_keys )(const struct keymaster2_device *dev)
keymaster_error_t (* 시작 )(const struct keymaster2_device *dev, keymaster_ Purpose_t 목적, const keymaster_key_blob_t *key, const keymaster_key_param_set_t *in_params, keymaster_key_param_set_t *out_params, keymaster_eration_handle_t *option_handle)
keymaster_error_t (* 업데이트 )(const struct keymaster2_device *dev, keymaster_eration_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 (* 완료 )(const struct keymaster2_device *dev, keymaster_eration_handle_t Operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *input, const keymaster_blob_t *signature, keymaster_key_param_set_t *out_params, keymaster_blob_t *output)
keymaster_error_t (* 중단 )(const struct keymaster2_device *dev, keymaster_eration_handle_t Operation_handle)

상세 설명

Keymaster2 장치 정의

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

현장 문서

keymaster_error_t (* 중단)(const struct keymaster2_device *dev, keymaster_eration_handle_t Operation_handle)

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

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

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

Keymaster가 사용하는 RNG에 엔트로피를 추가합니다. 이 방법을 통해 추가된 엔트로피는 사용된 엔트로피의 유일한 소스가 아니라는 것이 보장되며 혼합 기능은 보안이 필요합니다. 즉, RNG에 공격자가 예측할 수 없는 데이터가 (모든 소스에서) 시드되는 경우(또는 제어), RNG 출력은 ​​무작위 출력과 구별할 수 없습니다. 따라서 어떤 소스의 엔트로피가 좋으면 출력도 좋을 것입니다.

매개변수
[안에] 개발자 Keymaster 장치 구조.
[안에] 데이터 무작위로 혼합할 데이터입니다.
[안에] 데이터_길이 data 의 길이.

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

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

keymaster에 key_to_attest 있음을 증명하는 서명된 X.509 인증서 체인을 생성합니다(TODO(swillden): 인증서 내용을 더 자세히 설명). 인증서에는 OID 1.3.6.1.4.1.11129.2.1.17의 확장과 키 설명이 포함된 <TODO:swillden – 여기에 링크 삽입>에 정의된 값이 포함됩니다.

매개변수
[안에] 개발자 Keymaster 장치 구조.
[안에] key_to_attest 증명 인증서가 생성될 Keymaster 키입니다.
[안에] attest_params 증명 수행 방법을 정의하는 매개변수입니다. 현재 유일한 매개변수는 KM_TAG_ALGORITHM이며 KM_ALGORITHM_EC 또는 KM_ALGORITHM_RSA여야 합니다. 그러면 인증서 서명에 사용할 프로비저닝된 증명 키가 선택됩니다.
[밖으로] 인증서 체인 DER로 인코딩된 X.509 인증서 배열입니다. 첫 번째는 key_to_attest 에 대한 인증서입니다. 나머지 항목은 루트에 다시 연결됩니다. 호출자는 소유권을 가지며 keymaster_free_cert_chain을 사용하여 할당을 취소해야 합니다.

keymaster2.h 파일의 239 행에 정의되어 있습니다.

keymaster_error_t (* 시작)(const struct keymaster2_device *dev, keymaster_ 목적_t 목적, const keymaster_key_blob_t *key, const keymaster_key_param_set_t *in_params, keymaster_key_param_set_t *out_params, keymaster_eration_handle_t *option_handle)

지정된 키를 사용하여 암호화 작업을 시작합니다. 모든 것이 정상이면 start()는 KM_ERROR_OK를 반환하고 update() , finish() 또는 abort() 에 대한 후속 호출에 전달되어야 하는 작업 핸들을 만듭니다.

keymaster 구현이 모든 내부 작업 상태를 정리할 수 있도록 하려면 start() 에 대한 각 호출을 finish() 또는 abort() 에 대한 후속 호출과 쌍을 이루는 것이 중요합니다. 이를 수행하지 못하면 내부 상태 공간이나 기타 내부 리소스가 누출될 수 있으며 작업 공간이 부족해지면 결국 start() 가 KM_ERROR_TOO_MANY_OPERATIONS를 반환하게 될 수 있습니다. Begin() , update() 또는 Finish() 의 KM_ERROR_OK 이외의 결과는 암시적으로 작업을 중단합니다. 이 경우 abort() 를 호출할 필요가 없습니다(호출되면 KM_ERROR_INVALID_OPERATION_HANDLE 을 반환합니다).

매개변수
[안에] 개발자 Keymaster 장치 구조.
[안에] 목적 작업의 목적으로, KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN 또는 KM_PURPOSE_VERIFY 중 하나입니다. AEAD 모드의 경우 암호화 및 암호 해독은 각각 서명 및 확인을 의미하지만 KM_PURPOSE_ENCRYPT 및 KM_PURPOSE_DECRYPT로 지정해야 합니다.
[안에] 열쇠 작업에 사용할 키입니다. key purpose 과 호환되는 목적을 가지고 있어야 하며 모든 사용 요구 사항이 충족되어야 합니다. 그렇지 않으면 start()는 적절한 오류 코드를 반환합니다.
[안에] 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 태그가 포함될 수 있습니다.
[밖으로] out_params 출력 매개변수. 작업 초기화에서 추가 데이터를 반환하는 데 사용됩니다. 특히 IV 또는 nonce를 생성하는 작업에서 IV 또는 nonce를 반환하는 데 사용됩니다. 호출자는 출력 매개변수 배열의 소유권을 가지며 keymaster_free_param_set() 을 사용하여 이를 해제해야 합니다. 출력 매개변수가 예상되지 않는 경우 out_params를 NULL로 설정할 수 있습니다. out_params가 NULL이고 출력 매개변수가 생성되면 start() 는 KM_ERROR_OUTPUT_PARAMETER_NULL을 반환합니다.
[밖으로] 작업_핸들 update() , finish() 또는 abort() 에 전달되어야 하는 새로 생성된 작업 핸들입니다. Operation_handle이 NULL이면 start()는 KM_ERROR_OUTPUT_PARAMETER_NULL을 반환합니다.

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

구조체 hw_device_t 공통

Keymaster 장치의 일반적인 방법입니다. 이 구조의 사용자는 hw_device_t가 keymaster_device를 참조하는 것으로 알려진 컨텍스트에서 hw_device_t 를 keymaster_device 포인터로 캐스팅하므로 이는 keymaster_device의 첫 번째 구성원이어야 합니다 .

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

keymaster_error_t (* 구성)(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params)

Keymaster를 구성합니다. 이 메서드는 장치를 연 후 사용하기 전에 한 번 호출해야 합니다. Keymaster에 KM_TAG_OS_VERSION 및 KM_TAG_OS_PATCHLEVEL을 제공하는 데 사용됩니다. 이 메서드가 호출될 때까지 다른 모든 메서드는 KM_ERROR_KEYMASTER_NOT_CONFIGURED를 반환합니다. 이 방법으로 제공되는 값은 부팅당 한 번만 Keymaster에서 허용됩니다. 후속 호출은 KM_ERROR_OK를 반환하지만 아무 작업도 수행하지 않습니다.

Keymaster 구현이 보안 하드웨어에 있고 제공된 OS 버전 및 패치 수준 값이 부트로더가 보안 하드웨어에 제공한 값과 일치하지 않는 경우(또는 부트로더가 값을 제공하지 않은 경우) 이 메서드는 KM_ERROR_INVALID_ARGUMENT를 반환하고 모든 다른 메소드는 계속해서 KM_ERROR_KEYMASTER_NOT_CONFIGURED를 반환합니다.

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

무효* 컨텍스트

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

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

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

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

매개변수
[안에] 개발자 Keymaster 장치 구조.

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

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

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

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

매개변수
[안에] 개발자 Keymaster 장치 구조.
[안에] 열쇠 삭제할 키입니다.

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

keymaster_error_t (* 내보내기_키)(const struct keymaster2_device *dev, keymaster_key_format_t 내보내기_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)

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

대칭 키 내보내기는 키가 KM_TAG_EXPORTABLE을 사용하여 생성된 경우와 키 사용에 대한 모든 요구 사항(예: 인증)이 충족되는 경우에만 허용됩니다.

매개변수
[안에] 개발자 Keymaster 장치 구조.
[안에] 내보내기_형식 키를 내보내는 데 사용할 형식입니다.
[안에] key_to_export 수출의 열쇠.
[안에] 클라이언트_ID 키 생성 중에 KM_TAG_APPLICATION_ID에 제공된 blob과 일치해야 하는 클라이언트 ID blob입니다(있는 경우).
[안에] 앱_데이터 키 생성 중에 KM_TAG_APPLICATION_DATA에 제공된 blob과 일치해야 하는 애플리케이션 데이터 blob(있는 경우).
[밖으로] 내보내기_데이터 내보낸 키 자료입니다. 호출자가 소유권을 갖습니다.

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

keymaster_error_t (* 완료)(const struct keymaster2_device *dev, keymaster_eration_handle_t Operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *input, const keymaster_blob_t *signature, keymaster_key_param_set_t *out_params, keymaster_blob_t *output)

start() 로 시작된 암호화 작업을 마무리하고 operation_handle 무효화합니다.

매개변수
[안에] 개발자 Keymaster 장치 구조.
[안에] 작업_핸들 start() 가 반환한 작업 핸들입니다. 이 핸들은 무효화됩니다.
[안에] in_params 작업에 대한 추가 매개변수입니다. AEAD 모드의 경우 이는 KM_TAG_ADDITIONAL_DATA를 지정하는 데 사용되지만 update() 에 입력 데이터가 제공되지 않은 경우에만 해당됩니다.
[안에] 입력 start() 호출에서 설정된 매개변수에 따라 처리할 데이터입니다. 완료()는 제공된 모든 데이터를 사용하거나 KM_ERROR_INVALID_INPUT_LENGTH를 반환해야 합니다.
[안에] 서명 Begin() 호출에 지정된 목적이 KM_PURPOSE_VERIFY인 경우 확인할 서명입니다.
[밖으로] 산출 출력 데이터(있는 경우)입니다. 호출자는 할당된 버퍼의 소유권을 가정합니다.

완료되는 작업이 서명 확인이거나 AEAD 모드 암호 해독 및 확인에 실패하면 Finish()는 KM_ERROR_VERIFICATION_FAILED를 반환합니다.

keymaster2.h 파일의 405 행에 정의되어 있습니다.

uint32_t 플래그

keymaster_common.h 에서 keymaster0_devices::flags에 대해 정의된 플래그를 참조하세요. 이전 버전과의 호환성을 위해서만 사용됩니다. keymaster2 하드웨어 장치는 이를 0으로 설정해야 합니다.

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

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

키 또는 키 쌍을 생성하여 키 blob 및/또는 키에 대한 설명을 반환합니다.

키 생성 매개변수는 params 에 제공되는 keymaster 태그/값 쌍으로 정의됩니다. 전체 목록은 keymaster_tag_t를 참조하세요. 유용한 키 생성에 항상 필요한 일부 값은 다음과 같습니다.

  • KM_TAG_ALGORITHM;
  • KM_TAG_목적; 그리고
  • (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
매개변수
[안에] 개발자 Keymaster 장치 구조.
[안에] 매개변수 키 생성 매개변수 배열
[밖으로] key_blob 생성된 키를 반환합니다. key_blob NULL이 아니어야 합니다. 호출자는 소유권 key_blob->key_material을 가정하고 이를 free()해야 합니다.
[밖으로] 형질 NULL이 아닌 경우 생성된 키의 특성을 반환합니다. NULL이 아닌 경우 호출자는 소유권을 가정하고 keymaster_free_characteristics() 를 사용하여 할당을 해제해야 합니다. KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID 및 KM_TAG_APPLICATION_DATA는 반환되지 않습니다.

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

keymaster_error_t (* get_key_characteristics)(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_blob, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_key_characteristics_t *특성)

지정된 키의 특성을 반환하거나 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_APPLICATION_ID 및 KM_TAG_APPLICATION_DATA는 반환되지 않습니다.

매개변수
[안에] 개발자 Keymaster 장치 구조.
[안에] key_blob 특성을 검색하는 열쇠입니다.
[안에] 클라이언트_ID 클라이언트 ID 데이터 또는 연결된 데이터가 없는 경우 NULL입니다.
[안에] 앱_ID 앱 데이터 또는 연결된 데이터가 없는 경우 NULL입니다.
[밖으로] 형질 주요 특징. NULL이 아니어야 합니다. 호출자는 콘텐츠의 소유권을 가정하고 keymaster_free_characteristics() 를 사용하여 할당을 해제해야 합니다.

keymaster2.h 파일의 139 행에 정의되어 있습니다.

keymaster_error_t (* import_key)(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params, keymaster_key_format_t key_format, const keymaster_blob_t *key_data, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t *characteristics)

키 또는 키 쌍을 가져와서 키 blob 및/또는 키에 대한 설명을 반환합니다.

대부분의 주요 가져오기 매개변수는 "params"에 제공되는 keymaster 태그/값 쌍으로 정의됩니다. 전체 목록은 keymaster_tag_t를 참조하세요. 유용한 키를 가져오는 데 항상 필요한 값은 다음과 같습니다.

  • KM_TAG_ALGORITHM;
  • KM_TAG_목적; 그리고
  • (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
매개변수
[안에] 개발자 Keymaster 장치 구조.
[안에] 매개변수 가져온 키를 정의하는 매개변수입니다.
[안에] params_count params 의 항목 수입니다.
[안에] 키_형식 key_data의 키 데이터 형식을 지정합니다.
[밖으로] key_blob 불투명 키 blob을 반환하는 데 사용됩니다. NULL이 아니어야 합니다. 호출자는 포함된 key_material의 소유권을 가정합니다.
[밖으로] 형질 가져온 키의 특성을 반환하는 데 사용됩니다. NULL일 수 있으며, 이 경우 특성이 반환되지 않습니다. NULL이 아닌 경우 호출자는 콘텐츠의 소유권을 가정하고 keymaster_free_characteristics() 를 사용하여 할당을 해제해야 합니다. KM_TAG_APPLICATION_ID 및 KM_TAG_APPLICATION_DATA는 반환되지 않습니다.

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

keymaster_error_t (* 업데이트)(const struct keymaster2_device *dev, keymaster_eration_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)

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

Operation_handle이 유효하지 않은 경우 update()는 KM_ERROR_INVALID_OPERATION_HANDLE을 반환합니다.

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

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

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

keymaster2.h 파일의 376 행에 정의되어 있습니다.

keymaster_error_t (* 업그레이드_키)(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_to_upgrade, const keymaster_key_param_set_t *upgrade_params, keymaster_key_blob_t *upgraded_key)

이전 키를 업그레이드합니다. 키는 두 가지 방법으로 "오래"될 수 있습니다. 즉, Keymaster를 새 버전으로 업그레이드하거나 시스템을 업데이트하여 OS 버전 및/또는 패치 수준을 무효화할 수 있습니다. 두 경우 모두 이전 키를 사용하려고 하면 Keymaster가 KM_ERROR_KEY_REQUIRES_UPGRADE를 반환합니다. 그런 다음 키를 업그레이드하려면 이 메서드를 호출해야 합니다.

매개변수
[안에] 개발자 Keymaster 장치 구조.
[안에] key_to_upgrade 업그레이드할 Keymaster 키입니다.
[안에] 업그레이드_매개변수 업그레이드를 완료하는 데 필요한 매개변수입니다. 특히 키에 대해 정의된 경우 KM_TAG_APPLICATION_ID 및 KM_TAG_APPLICATION_DATA가 필요합니다.
[밖으로] 업그레이드_키 업그레이드된 키 blob입니다.

keymaster2.h 파일의 260번째 ​​줄에 정의되어 있습니다.


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