Home | History | Annotate | Download | only in keystore
      1 page.title=Implementer's Reference
      2 @jd:body
      3 
      4 <!--
      5     Copyright 2015 The Android Open Source Project
      6 
      7     Licensed under the Apache License, Version 2.0 (the "License");
      8     you may not use this file except in compliance with the License.
      9     You may obtain a copy of the License at
     10 
     11         http://www.apache.org/licenses/LICENSE-2.0
     12 
     13     Unless required by applicable law or agreed to in writing, software
     14     distributed under the License is distributed on an "AS IS" BASIS,
     15     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16     See the License for the specific language governing permissions and
     17     limitations under the License.
     18 -->
     19 
     20 <p>This page provides details to assist implementers of <a href="index.html">Keymaster</a> HALs. It
     21 covers each tag and each function in the HAL.</p>
     22 
     23 <h2 id=authorization_tags>Authorization tags</h2>
     24 
     25 <p>Except as noted in the tag descriptions, all of the tags below are used during
     26 key generation to specify key characteristics.</p>
     27 
     28 <h3 id=km_tag_purpose>KM_TAG_PURPOSE</h3>
     29 
     30 <p>Specifies the set of purposes for which the key may be used.</p>
     31 
     32 <p>Possible values are defined by the following enumeration:</p>
     33 
     34 <pre>
     35 typedef enum {
     36     KM_PURPOSE_ENCRYPT = 0,
     37     KM_PURPOSE_DECRYPT = 1,
     38     KM_PURPOSE_SIGN = 2,
     39     KM_PURPOSE_VERIFY = 3,
     40 } keymaster_purpose_t;
     41 </pre>
     42 
     43 <p>This tag is repeatable; keys may be generated with multiple values, although an
     44 operation has a single purpose. When the <a href="#begin">begin</a> function is called to
     45 start an operation, the purpose of the operation is
     46 specified. If the purpose specified to the operation is not authorized by the
     47 key, the operation must fail with <code>KM_ERROR_INCOMPATIBLE_PURPOSE</code>.</p>
     48 
     49 <h3 id=km_tag_algorithm>KM_TAG_ALGORITHM</h3>
     50 
     51 <p>Specifies the cryptographic algorithm with which the key is used.</p>
     52 
     53 <p>Possible values are defined by the following enumeration:</p>
     54 
     55 <pre>
     56 typedef enum {
     57     KM_ALGORITHM_RSA = 1,
     58     KM_ALGORITHM_EC = 3,
     59     KM_ALGORITHM_AES = 32,
     60     KM_ALGORITHM_HMAC = 128,
     61 } keymaster_algorithm_t;
     62 </pre>
     63 
     64 <p>This tag is not repeatable.</p>
     65 
     66 <h3 id=km_tag_key_size>KM_TAG_KEY_SIZE</h3>
     67 
     68 <p>Specifies the size, in bits, of the key, measuring in the normal way for the
     69 key's algorithm. For example, for RSA keys, <code>KM_TAG_KEY_SIZE</code> specifies
     70 the size of the public modulus. For AES keys it specifies the length
     71 of the secret key material.</p>
     72 
     73 <p>This tag is not repeatable.</p>
     74 
     75 <h3 id=km_tag_block_mode>KM_TAG_BLOCK_MODE</h3>
     76 
     77 <p>Specifies the block cipher mode(s) with which the key may be used. This tag is
     78 only relevant to AES keys.</p>
     79 
     80 <p>Possible values are defined by the following enumeration:</p>
     81 
     82 <pre>
     83 typedef enum {
     84     KM_MODE_ECB = 1,
     85     KM_MODE_CBC = 2,
     86     KM_MODE_CTR = 3,
     87     KM_MODE_GCM = 32,
     88 } keymaster_block_mode_t;
     89 </pre>
     90 
     91 <p>This tag is repeatable, and for AES key operations a mode must be specified in
     92 the <code>additional_params</code> argument of <a href="#begin">begin</a>. If the specified
     93 mode is not in the modes associated with the key, the
     94 operation must fail with <code>KM_ERROR_INCOMPATIBLE_BLOCK_MODE</code>.</p>
     95 
     96 <h3 id=km_tag_digest>KM_TAG_DIGEST</h3>
     97 
     98 <p>Specifies the digest algorithms which may be used with the key to perform
     99 signing and verification operations. This tag is relevant to RSA, ECDSA and
    100 HMAC keys.</p>
    101 
    102 <p>Possible values are defined by the following enumeration:</p>
    103 
    104 <pre>
    105 typedef enum {
    106     KM_DIGEST_NONE = 0,
    107     KM_DIGEST_MD5 = 1,
    108     KM_DIGEST_SHA1 = 2,
    109     KM_DIGEST_SHA_2_224 = 3,
    110     KM_DIGEST_SHA_2_256 = 4,
    111     KM_DIGEST_SHA_2_384 = 5,
    112     KM_DIGEST_SHA_2_512 = 6,
    113 }
    114 keymaster_digest_t;
    115 </pre>
    116 
    117 <p>This tag is repeatable. For signing and verification operations a digest must
    118 be specified in the <code>additional_params</code> argument of <a href="#begin">begin</a>.
    119 If the specified digest is not in the digests associated with the key, the
    120 operation must fail with <code>KM_ERROR_INCOMPATIBLE_DIGEST</code>.</p>
    121 
    122 <h3 id=km_tag_padding>KM_TAG_PADDING</h3>
    123 
    124 <p>Specifies the padding modes which may be used with the key. This tag is
    125 relevant to RSA and AES keys.</p>
    126 
    127 <p>Possible values are defined by the following enumeration:</p>
    128 
    129 <pre>
    130 typedef enum {
    131     KM_PAD_NONE = 1,
    132     KM_PAD_RSA_OAEP = 2,
    133     KM_PAD_RSA_PSS = 3,
    134     KM_PAD_RSA_PKCS1_1_5_ENCRYPT = 4,
    135     KM_PAD_RSA_PKCS1_1_5_SIGN = 5,
    136     KM_PAD_PKCS7 = 64,
    137 } keymaster_padding_t;
    138 </pre>
    139 
    140 <p><code>KM_PAD_RSA_OAEP</code> and <code>KM_PAD_RSA_PKCS1_1_5_ENCRYPT</code> are used
    141 only for RSA encryption/decryption keys and specify RSA PKCS#1v2 OAEP
    142 padding and RSA PKCS#1 v1.5 randomized padding, respectively. <code>KM_PAD_RSA_PSS</code> and
    143 <code>KM_PAD_RSA_PKCS1_1_5_SIGN</code> are used only for RSA signing/verification keys and
    144 specify RSA PKCS#1v2 PSS
    145 padding and RSA PKCS#1 v1.5 deterministic padding, respectively. Note also that
    146 the RSA PSS padding mode is incompatible with <a href="#km_tag_digest">KM_DIGEST_NONE</a>.</p>
    147 
    148 <p><code>KM_PAD_NONE</code> may be used with either RSA or AES keys. For AES keys,
    149 if <code>KM_PAD_NONE</code> is used with block mode ECB or CBC and the data to be encrypted
    150 or decrypted
    151 is not a multiple of the AES block size in length, the call to finish must fail
    152 with <code>KM_ERROR_INVALID_INPUT_LENGTH</code>.</p>
    153 
    154 <p><code>KM_PAD_PKCS7</code> may only be used with AES keys, and only with ECB and CBC modes.</p>
    155 
    156 <p>This tag is repeatable. A padding mode must be specified in the call to
    157 <a href="#begin">begin</a>. If the specified mode is not authorized for the key,
    158 the operation must fail
    159 with <code>KM_ERROR_INCOMPATIBLE_BLOCK_MODE</code>.</p>
    160 
    161 <h3 id=km_tag_caller_nonce>KM_TAG_CALLER_NONCE</h3>
    162 
    163 <p>Specifies that the caller is allowed to provide a nonce for nonce-requiring
    164 operations.</p>
    165 
    166 <p>This tag is boolean, so the possible values are true (if the tag is present)
    167 and false (if the tag is not present).</p>
    168 
    169 <p>This tag is used only for AES keys, and is only relevant for CBC, CTR and GCM
    170 block modes. If the tag is not present, implementations should reject any
    171 operation which provides <a href="#km_tag_nonce">KM_TAG_NONCE</a> to <a href="#begin">begin</a>
    172 with <code>KM_ERROR_CALLER_NONCE_PROHIBITED</code>.</p>
    173 
    174 <p>This tag is not repeatable.</p>
    175 
    176 <h3 id=km_tag_min_mac_length>KM_TAG_MIN_MAC_LENGTH</h3>
    177 
    178 <p>Required for HMAC keys and AES keys that support GCM mode, this tag specifies
    179 the minimum length of MAC that can be requested or verified with this key.</p>
    180 
    181 <p>This value is the minimum MAC length, in bits. It must be a multiple of 8. For
    182 HMAC keys, the value must be at least 64. For GCM keys it must be at least 96
    183 and must not exceed 128.</p>
    184 
    185 <h3 id=km_tag_rsa_public_exponent>KM_TAG_RSA_PUBLIC_EXPONENT</h3>
    186 
    187 <p>Specifies the value of the public exponent for an RSA key pair. This tag is
    188 relevant only to RSA keys, and required for all RSA keys.</p>
    189 
    190 <p>The value is a 64-bit unsigned integer that must satisfy the requirements of an
    191 RSA public exponent. Because it is specified by the caller and therefore cannot
    192 be chosen by the implementation, it must be a prime number. Trustlets are
    193 required to support the value 2^16+1. It is recommended that other reasonable
    194 values be supported, in particular the value 3. If no exponent is specified or
    195 if the specified exponent is not supported, key generation must fail
    196 with <code>KM_ERROR_INVALID_ARGUMENT</code>.</p>
    197 
    198 <p>This tag is not repeatable.</p>
    199 
    200 <h3 id=km_tag_blob_usage_requirements>KM_TAG_BLOB_USAGE_REQUIREMENTS</h3>
    201 
    202 <p>Specifies the system environment conditions which must hold for the generated
    203 key to be used.</p>
    204 
    205 <p>Possible values are defined by the following enumeration:</p>
    206 
    207 <pre>
    208 typedef enum {
    209     KM_BLOB_STANDALONE = 0,
    210     KM_BLOB_REQUIRES_FILE_SYSTEM = 1,
    211 } keymaster_key_blob_usage_requirements_t;
    212 </pre>
    213 
    214 <p>This tag may be specified during key generation to require that the key be
    215 usable in the specified condition, and must be returned with the key
    216 characteristics (from <a href="#generate_key">generate_key</a> and
    217 <a href="#get_key_characteristics">get_key_characteristics</a>). If
    218 the caller specifies <code>KM_TAG_BLOB_USAGE_REQUIREMENTS</code> with
    219 value <code>KM_BLOB_STANDALONE</code> the trustlet must return a key blob
    220 which can be used without file system
    221 support. This is critical for devices with encrypted disks, where the file
    222 system may not be available until after a Keymaster key is used to decrypt the
    223 disk.</p>
    224 
    225 <p>This tag is not repeatable.</p>
    226 
    227 <h3 id=km_tag_bootloader_only>KM_TAG_BOOTLOADER_ONLY</h3>
    228 
    229 <p>Specifies that the key may only be used by the bootloader.</p>
    230 
    231 <p>This tag is boolean, so the possible values are true (if the tag is present)
    232 and false (if the tag is not present).</p>
    233 
    234 <p>Any attempt to use a key with <code>KM_TAG_BOOTLOADER_ONLY</code> from the
    235 Android system must fail with <code>KM_ERROR_INVALID_KEY_BLOB</code>.</p>
    236 
    237 <p>This tag is not repeatable.</p>
    238 
    239 <h3 id=km_tag_active_datetime>KM_TAG_ACTIVE_DATETIME</h3>
    240 
    241 <p>Specifies the date and time at which the key becomes active. Prior to this
    242 time, any attempt to use the key must fail with <code>KM_ERROR_KEY_NOT_YET_VALID</code>.</p>
    243 
    244 <p>The value is a 64-bit integer representing milliseconds since January 1, 1970.</p>
    245 
    246 <p>This tag is not repeatable.</p>
    247 
    248 <h3 id=km_tag_origination_expire_datetime>KM_TAG_ORIGINATION_EXPIRE_DATETIME</h3>
    249 
    250 <p>Specifies the date and time at which the key expires for signing and encryption
    251 purposes. After this time, any attempt to use a key
    252 with <a href="#km_tag_purpose">KM_PURPOSE_SIGN</a> or
    253 <a href="#km_tag_purpose">KM_PURPOSE_ENCRYPT</a> provided
    254 to <a href="#begin">begin</a> must fail with <code>KM_ERROR_KEY_EXPIRED</code>.</p>
    255 
    256 <p>The value is a 64-bit integer representing milliseconds since January 1, 1970.</p>
    257 
    258 <p>This tag is not repeatable.</p>
    259 
    260 <h3 id=km_tag_usage_expire_datetime>KM_TAG_USAGE_EXPIRE_DATETIME</h3>
    261 
    262 <p>Specifies the date and time at which the key expires for verification and
    263 decryption purposes. After this time, any attempt to use a key with
    264 <a href="#km_tag_purpose">KM_PURPOSE_VERIFY</a> or <a href="#km_tag_purpose">KM_PURPOSE DECRYPT</a>
    265 provided to <a href="#begin">begin</a> must fail with <code>KM_ERROR_KEY_EXPIRED</code>.</p>
    266 
    267 <p>The value is a 64-bit integer representing milliseconds since January 1, 1970.</p>
    268 
    269 <p>This tag is not repeatable.</p>
    270 
    271 <h3 id=km_tag_min_seconds_between_ops>KM_TAG_MIN_SECONDS_BETWEEN_OPS</h3>
    272 
    273 <p>Specifies the minimum amount of time that must elapse between allowed
    274 operations using a key. This can be used to rate-limit uses of keys in contexts
    275 where unlimited use may enable brute force attacks.</p>
    276 
    277 <p>The value is a 32-bit integer representing seconds between allowed operations.</p>
    278 
    279 <p>When a key with this tag is used in an operation, a timer should be started
    280 during the <a href="#finish">finish</a> or <a href="#abort">abort</a> call. Any
    281 call to <a href="#begin">begin</a> that is received before the timer indicates
    282 that the interval specified by <code>KM_TAG_MIN_SECONDS_BETWEEN_OPS</code> has
    283 elapsed must fail with <code>KM_ERROR_KEY_RATE_LIMIT_EXCEEDED</code>. This
    284 requirement implies that a trustlet must keep a table of timers for keys
    285 with this tag. Because Keymaster memory is often limited, it is acceptable for
    286 this table to have a fixed maximum size and for Keymaster to fail operations
    287 which attempt to use keys with this tag when the table is full. At least 32
    288 in-use keys must be accommodated, and table slots must be aggressively reused
    289 when key minimum-usage intervals expire. If an operation fails because the
    290 table is full, Keymaster should return <code>KM_ERROR_TOO_MANY_OPERATIONS</code>.</p>
    291 
    292 <p>This tag is not repeatable.</p>
    293 
    294 <h3 id=km_tag_max_uses_per_boot>KM_TAG_MAX_USES_PER_BOOT</h3>
    295 
    296 <p>Specifies the maximum number of times that a key may be used between system
    297 reboots. This is another mechanism to rate-limit key use.</p>
    298 
    299 <p>The value is a 32-bit integer representing uses per boot.</p>
    300 
    301 <p>When a key with this tag is used in an operation, a key-associated counter
    302 should be incremented during the <a href="#begin">begin</a> call. After the key counter
    303 has exceeded this value, all subsequent attempts
    304 to use the key must fail with <code>KM_ERROR_MAX_OPS_EXCEEDED</code>, until the device is
    305 restarted. This requirement implies that a trustlet must
    306 keep a table of use counters for keys with this tag. Because Keymaster memory
    307 is often limited, it is acceptable for this table to have a fixed maximum size
    308 and for Keymaster to fail operations that attempt to use keys with this tag
    309 when the table is full. At least 16 keys must be accommodated. If an operation
    310 fails because the table is full, Keymaster should return <code>KM_ERROR_TOO_MANY_OPERATIONS</code>.</p>
    311 
    312 <p>This tag is not repeatable.</p>
    313 
    314 <h3 id=km_tag_user_secure_id>KM_TAG_USER_SECURE_ID</h3>
    315 
    316 <p>Specifies that a key may only be used under a particular secure user
    317 authentication state. This tag is mutually exclusive
    318 with <a href="#km_tag_no_auth_required">KM_TAG_NO_AUTH_REQUIRED</a>.</p>
    319 
    320 <p>The value is a 64-bit integer specifying the authentication policy state value
    321 which must be present in an authentication token (provided to <a href="#begin">begin</a> with
    322 the <a href="#km_tag_auth_token">KM_TAG_AUTH_TOKEN</a>) to authorize use of the key. Any
    323 call to <a href="#begin">begin</a> with a key with this tag that does not provide an
    324 authentication token, or provides an
    325 authentication token without a matching policy state value, must fail.</p>
    326 
    327 <p>This tag is repeatable. If any of the provided values matches any policy state
    328 value in the authentication token, the key is authorized for use. Otherwise the operation
    329 must fail with <code>KM_ERROR_KEY_USER_NOT_AUTHENTICATED</code>.</p>
    330 
    331 <h3 id=km_tag_no_auth_required>KM_TAG_NO_AUTH_REQUIRED</h3>
    332 
    333 <p>Specifies that no authentication is required to use this key. This tag is
    334 mutually exclusive with <a href="#km_tag_user_secure_id">KM_TAG_USER_SECURE_ID</a>.</p>
    335 
    336 <p>This tag is boolean, so the possible values are true (if the tag is present)
    337 and false (if the tag is not present).</p>
    338 
    339 <p>This tag is not repeatable.</p>
    340 
    341 <h3 id=km_tag_user_auth_type>KM_TAG_USER_AUTH_TYPE</h3>
    342 
    343 <p>Specifies the types of user authenticators that may be used to authorize this
    344 key.  When Keymaster is requested to perform an operation with a key with this
    345 tag, it must receive an authentication token, and the token's
    346 <code>authenticator_type</code> field must match the value in the tag.  To be
    347 precise, it must be true that <code>(ntoh(token.authenticator_type) &
    348 auth_type_tag_value) != 0</code>, where <code>ntoh</code> is a function that converts
    349 network-ordered integers to host-ordered integers and
    350 <code>auth_type_tag_value</code> is the value of this tag.</p>
    351 
    352 <p>The value is a 32-bit integer bitmask of values from the enumeration:</p>
    353 
    354 <pre>
    355 typedef enum {
    356     HW_AUTH_NONE = 0,
    357     HW_AUTH_PASSWORD = 1 &lt;&lt; 0,
    358     HW_AUTH_FINGERPRINT = 1 &lt;&lt; 1,
    359     // Additional entries should be powers of 2.
    360     HW_AUTH_ANY = UINT32_MAX,
    361 } hw_authenticator_type_t;
    362 </pre>
    363 
    364 <p>This tag is not repeatable.</p>
    365 
    366 <h3 id=km_tag_auth_timeout>KM_TAG_AUTH_TIMEOUT</h3>
    367 
    368 <p>Specifies the time in seconds for which the key is authorized for use, after
    369 authentication. If <a href="#km_tag_user_secure_id">KM_TAG_USER_SECURE_ID</a> is present and this tag
    370 is not, then the key requires authentication for every
    371 usage (see <a href="#begin">begin</a> for the details of the authentication-per-operation flow).</p>
    372 
    373 <p>The value is a 32-bit integer specifying the time in seconds after a successful
    374 authentication of the user specified by <a href="#km_tag_user_secure_id">KM_TAG_USER_SECURE_ID</a> with
    375 the authentication method specified
    376 by <a href="#km_tag_mac_length">KM_TAG_USER_AUTH_TYPE</a> that the key can be used.</p>
    377 
    378 <p>This tag is not repeatable.</p>
    379 
    380 <h3 id=km_tag_all_applications>KM_TAG_ALL_APPLICATIONS</h3>
    381 
    382 <p>Reserved for future use.</p>
    383 
    384 <p>This tag is not repeatable.</p>
    385 
    386 <h3 id=km_tag_application_id>KM_TAG_APPLICATION_ID</h3>
    387 
    388 <p>When provided to <a href="#generate_key">generate_key</a> or <a href="#import_key">import_key</a>,
    389 this tag specifies data that must be provided during all uses of the key. In
    390 particular, calls to <a href="#export_key">export_key</a> and
    391 <a href="#get_key_characteristics">get_key_characteristics</a> must
    392 provide the same value in the <code>client_id</code> parameter, and
    393 calls to  <a href="#begin">begin</a> must provide this tag and the
    394 same associated data as part of the <code>in_params</code> set. If the correct
    395 data is not provided the function must return <code>KM_ERROR_INVALID_KEY_BLOB</code>.</p>
    396 
    397 <p>The content of this tag must be bound to the key <i>cryptographically</i>,
    398 meaning it must not be possible for an adversary who has access to all of the
    399 secure world secrets but does not have access to the tag content to decrypt the
    400 key (without brute-forcing the tag content).</p>
    401 
    402 <p>The value is a blob, an arbitrary-length array of bytes.</p>
    403 
    404 <p>This tag is not repeatable.</p>
    405 
    406 <h3 id=km_tag_application_data>KM_TAG_APPLICATION_DATA</h3>
    407 
    408 <p>When provided to <a href="#generate_key">generate_key</a> or <a href="#import_key">import_key</a>,
    409 this tag specifies data that must be provided during all uses of the key. In
    410 particular, calls to <a href="#export_key">export_key</a> and
    411 <a href="#get_key_characteristics">get_key_characteristics</a> must
    412 provide the same value to the <code>client_id</code> parameter, and calls
    413 to <a href="#begin">begin</a> must provide this tag and the same associated
    414 data as part of the <code>in_params</code> set. If the correct data is not
    415 provided, the function must return <code>KM_ERROR_INVALID_KEY_BLOB</code>.</p>
    416 
    417 <p>The content of this tag must be bound to the key <i>cryptographically</i>,
    418 meaning it must not be possible for an adversary who has access to all of the
    419 secure world secrets but does not have access to the tag content to decrypt the
    420 key (without brute-forcing the tag content, which applications can prevent by
    421 specifying sufficiently high-entropy content).</p>
    422 
    423 <p>The value is a blob, an arbitrary-length array of bytes.</p>
    424 
    425 <p>This tag is not repeatable.</p>
    426 
    427 <h3 id=km_tag_creation_datetime>KM_TAG_CREATION_DATETIME</h3>
    428 
    429 <p>Specifies the date and time the key was created, in milliseconds since January
    430 1, 1970. This tag is optional and informational only.</p>
    431 
    432 <p>This tag is not repeatable.</p>
    433 
    434 <h3 id=km_tag_origin>KM_TAG_ORIGIN</h3>
    435 
    436 <p>Specifies where the key was created, if known. This tag may not be specified
    437 during key generation or import, and must be added to the key characteristics
    438 by the trustlet.</p>
    439 
    440 <p>The possible values are defined in <code>keymaster_origin_t</code>:</p>
    441 
    442 <pre>
    443 typedef enum {
    444     KM_ORIGIN_GENERATED = 0,
    445     KM_ORIGIN_IMPORTED = 2,
    446     KM_ORIGIN_UNKNOWN = 3,
    447 } keymaster_key_origin_t
    448 </pre>
    449 
    450 <p>The full meaning of the value depends not only on the value but on whether it's
    451 found in the hardware-enforced or software-enforced characteristics list.</p>
    452 
    453 <p><code>KM_ORIGIN_GENERATED</code> indicates that Keymaster generated the key.
    454 If in the hardware-enforced list,
    455 the key was generated in secure hardware and is permanently hardware-bound. If
    456 in the software-enforced list, the key was generated in SoftKeymaster and is
    457 not hardware-bound.</p>
    458 
    459 <p><code>KM_ORIGIN_IMPORTED</code> indicates that the key was generated outside
    460 of Keymaster and imported into
    461 Keymaster. If in the hardware-enforced list, it is permanently hardware-bound,
    462 although copies outside of secure hardware may exist. If in the
    463 software-enforces list, the key was imported into SoftKeymaster and is not
    464 hardware-bound.</p>
    465 
    466 <p><code>KM_ORIGIN_UNKNOWN</code> should only appear in the hardware-enforced list.
    467 It indicates that the key is
    468 hardware-bound, but it is not known whether the key was originally generated in
    469 secure hardware or was imported. This only occurs when keymaster0 hardware is
    470 being used to emulate keymaster1 services.</p>
    471 
    472 <p>This tag is not repeatable.</p>
    473 
    474 <h3 id=km_tag_rollback_resistant>KM_TAG_ROLLBACK_RESISTANT</h3>
    475 
    476 <p>Indicates that the key is rollback-resistant, meaning that when deleted
    477 by <a href="#delete_key">delete_key</a> or <a href="#delete_all_keys">delete_all_keys</a>,
    478 the key is guaranteed to be permanently deleted and unusable. It's possible
    479 that keys without this tag could be deleted and then restored from backup.</p>
    480 
    481 <p>This tag is boolean, so the possible values are true (if the tag is present)
    482 and false (if the tag is not present).</p>
    483 
    484 <p>This tag is not repeatable.</p>
    485 
    486 <h3 id=km_tag_root_of_trust>KM_TAG_ROOT_OF_TRUST</h3>
    487 
    488 <p>Specifies the "root of trust," the key used by verified boot to validate the
    489 operating system booted (if any). This tag is never provided to or returned
    490 from Keymaster in the key characteristics.</p>
    491 
    492 <h3 id=km_tag_associated_data>KM_TAG_ASSOCIATED_DATA</h3>
    493 
    494 <p>Provides "associated data" for AES-GCM encryption or decryption. This tag is
    495 provided to <a href="#update">update</a> and specifies data that is not
    496 encrypted/decrypted but is used in computing
    497 the GCM tag.</p>
    498 
    499 <p>The value is a blob, an arbitrary-length array of bytes.</p>
    500 
    501 <p>This tag is not repeatable.</p>
    502 
    503 <h3 id=km_tag_nonce>KM_TAG_NONCE</h3>
    504 
    505 <p>Provides or returns a nonce or Initialization Vector (IV) for AES GCM, CBC or
    506 CTR encryption or decryption. This tag is provided to <a href="#begin">begin</a>
    507 during encryption and decryption operations. It may only be provided to <a href="#begin">begin</a>
    508 if the key has <a href="#km_tag_caller_nonce">KM_TAG_CALLER_NONCE</a>. If not provided,
    509 an appropriate nonce or IV will be randomly generated by
    510 Keymaster and returned from begin.</p>
    511 
    512 <p>The value is a blob, an arbitrary-length array of bytes. Allowed lengths depend
    513 on the mode: GCM nonces are 12 bytes in length; CBC and CTR IVs are 16 bytes in
    514 length.</p>
    515 
    516 <p>This tag is not repeatable.</p>
    517 
    518 <h3 id=km_tag_auth_token>KM_TAG_AUTH_TOKEN</h3>
    519 
    520 <p>Provides an authentication token (see the Authentication page) to
    521 <a href="#begin">begin</a>, <a href="#update">update</a> or <a href="#finish">finish</a>,
    522 to prove user authentication for a key operation that requires
    523 it (key has <a href="#km_tag_user_secure_id">KM_TAG_USER_SECURE_ID</a>).</p>
    524 
    525 <p>The value is a blob which contains a <code>hw_auth_token_t</code> structure.</p>
    526 
    527 <p>This tag is not repeatable.</p>
    528 
    529 <h3 id=km_tag_mac_length>KM_TAG_MAC_LENGTH</h3>
    530 
    531 <p>Provides the requested length of a MAC or GCM authentication tag, in bits.</p>
    532 
    533 <p>The value is the MAC length in bits. It must be a multiple of 8 and must be at
    534 least as large as the value of <a href="#km_tag_min_mac_length">KM_TAG_MIN_MAC_LENGTH</a>
    535 associated with the key.</p>
    536 
    537 <h2 id=functions>Functions</h2>
    538 
    539 <h3 id=deprecated_functions>Deprecated functions</h3>
    540 
    541 <p>The following functions are in the <code>keymaster1_device_t</code> definition but
    542 should not be implemented. The function pointers should be set
    543 to <code>NULL</code>:</p>
    544 
    545 <ul>
    546   <li><code>generate_keypair</code>
    547   <li><code>import_keypair</code>
    548   <li><code>get_keypair_public</code>
    549   <li><code>delete_keypair</code>
    550   <li><code>delete_all</code>
    551   <li><code>sign_data</code>
    552   <li><code>verify_data</code>
    553 </ul>
    554 
    555 <h3 id=general_implementation_guidelines>General implementation guidelines</h3>
    556 
    557 <p>The following guidelines apply to all functions in the API.</p>
    558 
    559 <h4 id=input_pointer_parameters>Input pointer parameters</h4>
    560 
    561 <p>Input pointer parameters that are not used for a given call may be <code>NULL</code>.
    562 The caller is not required to provide placeholders. For example, some key
    563 types and modes may not use any values from the <code>in_params</code> argument
    564 to <a href="#begin">begin</a>, so the caller may set <code>in_params</code>
    565 to <code>NULL</code> or provide an empty parameter set. It is also acceptable for the caller to
    566 provide unused parameters, and Keymaster methods should not issue errors.</p>
    567 
    568 <p>If a required input parameter is NULL, Keymaster methods should return
    569 <code>KM_ERROR_UNEXPECTED_NULL_POINTER</code>.</p>
    570 
    571 <h4 id=output_pointer_parameters>Output pointer parameters</h4>
    572 
    573 <p>Similar to input pointer parameters, unused output pointer parameters
    574 may be <code>NULL</code>. If a method needs to return data in an output
    575 parameter found to be <code>NULL</code>, it should return <code>KM_ERROR_OUTPUT_PARAMETER_NULL</code>.</p>
    576 
    577 <h4 id=api_misuse>API misuse</h4>
    578 
    579 <p>There are many ways that callers can make requests that don't make sense or are
    580 foolish but not technically wrong. Keymaster1 implementations are not required
    581 to fail in such cases or issue a diagnostic. Use of too-small keys,
    582 specification of irrelevant input parameters, reuse of IVs or nonces,
    583 generation of keys with no purposes (hence useless) and the like should not be
    584 diagnosed by implementations. Omission of required parameters, specification of
    585 invalid required parameters, and similar errors must be diagnosed.</p>
    586 
    587 <p>It is the responsibility of apps, the framework, and Android keystore to ensure
    588 that the calls to Keymaster modules are sensible and useful.</p>
    589 
    590 <h3 id=get_supported_algorithms>get_supported_algorithms</h3>
    591 
    592 <p>Returns the list of algorithms supported by the Keymaster hardware
    593 implementation. A software implementation must return an empty list; a hybrid
    594 implementation must return a list containing only the algorithms that are
    595 supported by hardware.</p>
    596 
    597 <p>Keymaster1 implementations must support RSA, EC, AES and HMAC.</p>
    598 
    599 <h3 id=get_supported_block_modes>get_supported_block_modes</h3>
    600 
    601 <p>Returns the list of AES block modes supported by the Keymaster hardware
    602 implementation for a specified algorithm and purpose.</p>
    603 
    604 <p>For RSA, EC and HMAC, which are not block ciphers, the method must return an
    605 empty list for all valid purposes. Invalid purposes should cause the method to
    606 return <code>KM_ERROR_INVALID_PURPOSE</code>.</p>
    607 
    608 <p>Keymaster1 implementations must support ECB, CBC, CTR and GCM for AES
    609 encryption and decryption.</p>
    610 
    611 <h3 id=get_supported_padding_modes>get_supported_padding_modes</h3>
    612 
    613 <p>Returns the list of padding modes supported by the Keymaster hardware
    614 implementation for a specified algorithm and purpose.</p>
    615 
    616 <p>HMAC and EC have no notion of padding so the method must return an empty list
    617 for all valid purposes. Invalid purposes should cause the method to return <code>KM_ERROR_INVALID_PURPOSE</code>.</p>
    618 
    619 <p>For RSA, keymaster1 implementations must support:</p>
    620 
    621 <ul>
    622   <li>Unpadded encryption, decryption, signing and verification. For unpadded
    623 encryption and signing, if the message is shorter than the public modulus,
    624 implementations must left-pad it with zeros. For unpadded decryption and
    625 verification, the input length must match the public modulus size.
    626   <li>PKCS#1 v1.5 encryption and signing padding modes
    627   <li>PSS with a minimum salt length of 20
    628   <li>OAEP
    629 </ul>
    630 
    631 <p>For AES in ECB and CBC modes, keymaster1 implementations must support no
    632 padding and PKCS#7-padding. CTR and GCM modes must support only no padding.</p>
    633 
    634 <h3 id=get_supported_digests>get_supported_digests</h3>
    635 
    636 <p>Returns the list of digest modes supported by the Keymaster hardware
    637 implementation for a specified algorithm and purpose.</p>
    638 
    639 <p>No AES modes support or require digesting, so the method must return an empty
    640 list for valid purposes.</p>
    641 
    642 <p>Keymaster1 implementations are allowed to implement a subset of the defined
    643 digests, but must provide SHA-256. It is strongly recommended that keymaster1
    644 implementations provide MD5, SHA1, SHA-224, SHA-256, SHA384 and SHA512 (the
    645 full set of defined digests).</p>
    646 
    647 <h3 id=get_supported_import_formats>get_supported_import_formats</h3>
    648 
    649 <p>Returns the list of import formats supported by the Keymaster hardware
    650 implementation of a specified algorithm.</p>
    651 
    652 <p>Keymaster1 implementations must support the PKCS#8 format (without password
    653 protection) for importing RSA and EC key pairs, and must support RAW import of
    654 AES and HMAC key material.</p>
    655 
    656 <h3 id=get_supported_export_formats>get_supported_export_formats</h3>
    657 
    658 <p>Returns the list of export formats supported by the Keymaster hardware
    659 implementation of a specified algorithm.</p>
    660 
    661 <p>Keymaster1 implementations must support the X.509 format for exporting RSA and
    662 EC public keys. Export of private keys or asymmetric keys must not be
    663 supported.</p>
    664 
    665 <h3 id=add_rng_entropy>add_rng_entropy</h3>
    666 
    667 <p>Adds caller-provided entropy to the pool used by the Keymaster1 implementation
    668 for generating random numbers, for keys, IVs, etc.</p>
    669 
    670 <p>Keymaster1 implementations must <strong>securely</strong> mix the provided
    671 entropy into their pool, which must also contain
    672 internally-generated entropy from a hardware random number generator. Mixing
    673 must have the property that an attacker with complete control of either
    674 the <code>add_rng_entropy</code>-provided bits or the hardware-generated bits, but not both, cannot predict
    675 bits generated from the entropy pool with probability greater than .</p>
    676 
    677 <p>Keymaster1 implementations that attempt to estimate the entropy in their
    678 internal pool must assume that data provided by <code>add_rng_entropy</code> contains no entropy.</p>
    679 
    680 <h3 id=generate_key>generate_key</h3>
    681 
    682 <p>Generates a new cryptographic key, specifying associated authorizations, which
    683 will be permanently bound to the key. Keymaster1 implementations must make it
    684 impossible to use a key in any way inconsistent with the authorizations
    685 specified at generation time. With respect to authorizations that the secure
    686 hardware cannot enforce, the secure hardware's obligation is limited to
    687 ensuring that the unenforceable authorizations associated with the key cannot
    688 be modified, so that every call to <a href="#get_key_characteristics">get_key_characteristics</a>
    689 will return the original value. In addition, the characteristics returned by <code>generate_key</code>
    690 must allocate authorizations correctly between the hardware-enforced and
    691 software-enforced lists.  See <a href="#get_key_characteristics">get_key_characteristics</a>
    692 for more details.</p>
    693 
    694 <p>The parameters that must be provided to <code>generate_key</code> depend on the type of key
    695 being generated. This section will summarize the
    696 required and allowed tags for each type of key. <a href="#km_tag_algorithm">KM_TAG_ALGORITHM</a>
    697 is always required, to specify the type.</p>
    698 
    699 <h4 id=rsa_keys>RSA keys</h4>
    700 
    701 <p>The following parameters are required when generating an RSA key.</p>
    702 
    703 <ul>
    704   <li><a href="#km_tag_key_size">KM_TAG_KEY_SIZE</a> specifies the size of the public
    705   modulus, in bits. If omitted, the method must
    706 return <code>KM_ERROR_UNSUPPORTED_KEY_SIZE</code>. Values that must be supported are
    707 1024, 2048, 3072 and 4096. It is
    708 recommended to support all key sizes that are a multiple of 8.
    709   <li><a href="#km_tag_rsa_public_exponent">KM_TAG_RSA_PUBLIC_EXPONENT</a> specifies
    710   the RSA public exponent value. If omitted, the method must
    711   return <code>KM_ERROR_INVALID_ARGUMENT</code>.
    712   Implementations must support the values 3 and 65537. It is recommended to
    713 support all prime values up to 2^64.
    714 </ul>
    715 
    716 <p>The following parameters are not required to generate an RSA key, but creating
    717 an RSA key without them will produce a key that is unusable.
    718 The <code>generate_key</code> function should not return an error if these parameters are omitted.</p>
    719 
    720 <ul>
    721   <li><a href="#km_tag_purpose">KM_TAG_PURPOSE</a> specifies allowed purposes.
    722   All purposes must be supported for RSA keys, in
    723 any combination.
    724   <li><a href="#km_tag_digest">KM_TAG_DIGEST</a> specifies digest algorithms that
    725   may be used with the new key. Implementations
    726 that do not support all digest algorithms must accept key generation requests
    727 that include unsupported digests. The unsupported digests should be placed in
    728 the "software-enforced" list in the returned key characteristics. This is
    729 because the key will be usable with those other digests, but digesting will be
    730 performed in software. Then hardware will be called to perform the operation
    731 with <code>KM_DIGEST_NONE</code>.
    732   <li><a href="#km_tag_padding">KM_TAG_PADDING</a> specifies the padding modes
    733   that may be used with the new key. Implementations
    734 that do not support all digest algorithms must place <code>KM_PAD_RSA_PSS</code>
    735 and <code>KM_PAD_RSA_OAEP</code> in the software-enforced list of the key
    736 characteristics if any unsupported
    737 digest algorithms are specified.
    738 </ul>
    739 
    740 <h4 id=ecdsa_keys>ECDSA keys</h4>
    741 
    742 <p>Only <a href="#km_tag_key_size">KM_TAG_KEY_SIZE</a> is required to generate an
    743 ECDSA key. It is used to select the EC group.
    744 Implementations must support values 224, 256, 384 and 521, which indicate the
    745 NIST p-224, p-256, p-384 and p521 curves, respectively.</p>
    746 
    747 <p><a href="#km_tag_digest">KM_TAG_DIGEST</a> is also needed for a useful ECDSA key,
    748 but is not required for generation.</p>
    749 
    750 <h4 id=aes_keys>AES keys</h4>
    751 
    752 <p>Only <a href="#km_tag_key_size">KM_TAG_KEY_SIZE</a> is required when
    753 generating an AES key. If omitted, the method must return <code>KM_ERROR_UNSUPPORTED_KEY_SIZE</code>.
    754 Values that must be supported are 128 and 256. It is recommended to support
    755 192-bit AES keys.</p>
    756 
    757 <p>The following parameters are particularly relevant for AES keys, but not
    758 required to generate one:</p>
    759 
    760 <ul>
    761   <li><code>KM_TAG_BLOCK_MODE</code> specifies the block modes with which the new key may be used.
    762   <li><code>KM_TAG_PADDING</code> specifies the padding modes that may be used. This is only relevant for ECB
    763 and CBC modes.
    764 </ul>
    765 
    766 <p>If the GCM block mode is specified, then <a href="#km_tag_min_mac_length">KM_TAG_MIN_MAC_LENGTH</a>
    767 must be provided. If omitted, the method must return
    768 <code>KM_ERROR_MISSING_MIN_MAC_LENGTH</code>. The value of the tag must be a multiple of 8 and must
    769 be at least 96 and no more than 128.</p>
    770 
    771 <h4 id=hmac_keys>HMAC keys</h4>
    772 
    773 <p>The following parameters are required for HMAC key generation:</p>
    774 
    775 <ul>
    776   <li><a href="#km_tag_key_size">KM_TAG_KEY_SIZE</a> specifies the key size in bits. Values
    777   smaller than 64 and values that are not
    778 multiples of 8 must not be supported. All multiples of 8, from 64 to 512, must
    779 be supported. Larger values may be supported.
    780   <li><a href="#km_tag_min_mac_length">KM_TAG_MIN_MAC_LENGTH</a> specifies the minimum length of
    781   MACs that can be generated or verified with
    782 this key. The value must be a multiple of 8 and must be at least 64.
    783   <li><a href="#km_tag_digest">KM_TAG_DIGEST</a> specifies the digest algorithm for the key. Exactly
    784   one digest must be
    785 specified, otherwise return <code>KM_ERROR_UNSUPPORTED_DIGEST</code>. If the digest is not supported
    786 by the trustlet, return <code>KM_ERROR_UNSUPPORTED_DIGEST</code>.
    787 </ul>
    788 
    789 <h4 id=key_characteristics>Key characteristics</h4>
    790 
    791 <p>If the characteristics argument is non-NULL, <code>generate_key</code> must return the newly-generated
    792 key's characteristics divided appropriately
    793 into hardware-enforced and software-enforced lists. See <a href="#get_key_characteristics">get_key_characteristics</a>
    794 for a description of which characteristics go in which list. The returned
    795 characteristics must include all of the parameters specified to key generation,
    796 except <a href="#km_tag_application_id">KM_TAG_APPLICATION_ID</a> and
    797 <a href="#km_tag_application_data">KM_TAG_APPLICATION_DATA</a>.
    798 If these tags were included in the key parameters, they must be removed from
    799 the returned characteristics; it must not be possible to find their values by
    800 examining the returned key blob. However, they must be cryptographically bound
    801 to the key blob, so that if the correct values are not provided when the key is
    802 used, usage will fail. Similarly, <a href="#km_tag_root_of_trust">KM_TAG_ROOT_OF_TRUST</a> must
    803 be cryptographically bound to the key, but it may not be specified during
    804 key creation or import and must never be returned.</p>
    805 
    806 <p>In addition to the provided tags, the trustlet must also
    807 add <a href="#km_tag_origin">KM_TAG_ORIGIN</a>, with the value <code>KM_ORIGIN_GENERATED</code>,
    808 and if the key is rollback resistant, <a href="#km_tag_rollback_resistant">KM_TAG_ROLLBACK_RESISTANT</a>.</p>
    809 
    810 <h4 id=rollback_resistance>Rollback resistance </h4>
    811 
    812 <p>Rollback resistance means that once a key is deleted with
    813 <a href="#delete_key">delete_key</a> or <a href="#delete_all_keys">delete_all_keys</a>,
    814 it is guaranteed by secure hardware never to be usable again. Implementations
    815 without rollback resistance will typically return generated or imported key
    816 material to the caller as a key blob, an encrypted and authenticated form. When
    817 keystore deletes the key blob, the key is gone, but an attacker who has
    818 previously managed to retrieve the key material can potentially restore it to
    819 the device.</p>
    820 
    821 <p>A key is rollback resistant if the secure hardware guarantees that deleted keys
    822 cannot be restored later. This is generally done by storing additional key
    823 metadata in a trusted location that cannot be manipulated by an attacker. On
    824 mobile devices, the mechanism used for this is usually Replay Protected Memory
    825 Blocks (RPMB). Because the number of keys that may be created is essentially
    826 unbounded and the trusted storage used for rollback resistance may be limited
    827 in size, it is required that this method succeed even if rollback resistance
    828 cannot be provided for the new key. In that case,
    829 <a href="#km_tag_rollback_resistant">KM_TAG_ROLLBACK_RESISTANT</a> should not be
    830 added to the key characteristics.</p>
    831 
    832 <h3 id=get_key_characteristics>get_key_characteristics</h3>
    833 
    834 <p>Returns parameters and authorizations associated with the provided key, divided
    835 into two sets: hardware-enforced and software-enforced. The description here
    836 applies equally to the key characteristics lists returned
    837 by <a href="#generate_key">generate_key</a> and <a href="#import_key">import_key</a>.</p>
    838 
    839 <p>If <code>KM_TAG_APPLICATION_ID</code> was provided during key generation
    840 or import, the same value must provided to
    841 this method in the <code>client_id</code> argument. Otherwise, the
    842 method must return <code>KM_ERROR_INVALID_KEY_BLOB</code>. Similarly,
    843 if <code>KM_TAG_APPLICATION_DATA </code>was provided during generation
    844 or import, the same value must be provided to
    845 this method in the <code>app_data</code> argument.</p>
    846 
    847 <p>The characteristics returned by this method completely describe the type and
    848 usage of the specified key.</p>
    849 
    850 <p>The general rule for deciding whether a given tag belongs in the
    851 hardware-enforced or software-enforced list is that if the meaning of the tag
    852 is fully assured by secure hardware, it is hardware-enforced. Otherwise, it's
    853 software enforced. Below is a list of specific tags whose correct allocation
    854 may be unclear:</p>
    855 
    856 <ul>
    857   <li><a href="#km_tag_algorithm">KM_TAG_ALGORITHM</a>, <a href="#km_tag_key_size">KM_TAG_KEY_SIZE</a>,
    858   and <a href="#km_tag_rsa_public_exponent">KM_TAG_RSA_PUBLIC_EXPONENT</a> are
    859   intrinsic properties of the key. For any key that is secured by hardware,
    860 these will be in the hardware-enforced list, because the statement that, for
    861 example, "This RSA key material is only used as an RSA key" is enforced by
    862 hardware because the hardware will use it in no other way and software has no
    863 access to the key material and cannot use it at all.
    864   <li><a href="#km_tag_digest">KM_TAG_DIGEST</a> values that are supported by the
    865   secure hardware are to be placed in the
    866 hardware-supported list. Unsupported digests go in the software-supported list.
    867   <li><a href="#km_tag_padding">KM_TAG_PADDING</a> values generally go in the
    868   hardware-supported list, but if there is a
    869 possibility that a specific padding mode may have to be performed by software,
    870 they go in the software-enforced list. Such a possibility arises for RSA keys
    871 that permit PSS or OAEP padding with digest algorithms that are not supported
    872 by the secure hardware.
    873   <li><a href="#km_tag_user_secure_id">KM_TAG_USER_SECURE_ID</a> and
    874   <a href="#km_tag_mac_length">KM_TAG_USER_AUTH_TYPE</a> are hardware-enforced
    875   only if user authentication is hardware enforced. For
    876 that to be true, the Keymaster trustlet and the relevant authentication
    877 trustlet must both be secure and must share a secret HMAC key used to sign and
    878 validate authentication tokens. See the Authentication page for details.
    879   <li><a href="#km_tag_active_datetime">KM_TAG_ACTIVE_DATETIME</a>,
    880   <a href="#km_tag_origination_expire_datetime">KM_TAG_ORIGINATION_EXPIRE_DATETIME</a>,
    881   and <a href="#km_tag_usage_expire_datetime">KM_TAG_USAGE_EXPIRE_DATETIME</a> tags
    882   require access to a verifiably correct wall clock. Most secure hardware
    883 will only have access to time information provided by the non-secure OS, which
    884 means the tags are software-enforced.
    885   <li><a href="#km_tag_origin">KM_TAG_ORIGIN</a> is always in the hardware list for
    886   hardware-bound keys. Its presence in that
    887 list is the way higher layers determine that a key is hardware-backed.
    888 </ul>
    889 
    890 <h3 id=import_key>import_key</h3>
    891 
    892 <p>Imports key material into Keymaster hardware. Key definition parameters and
    893 output characteristics are handled the same as for <code>generate_key</code>,
    894 with the following exceptions:</p>
    895 
    896 <ul>
    897   <li><a href="#km_tag_key_size">KM_TAG_KEY_SIZE</a> and
    898   <a href="#km_tag_rsa_public_exponent">KM_TAG_RSA_PUBLIC_EXPONENT</a> (for RSA keys only)
    899   are not required in the input parameters. If not provided,
    900 the trustlet must deduce the values from the provided key material and add
    901 appropriate tags and values to the key characteristics. If the parameters are
    902 provided, the trustlet must validate them against the key material. In the
    903 event of a mismatch, the method must return <code>KM_ERROR_IMPORT_PARAMETER_MISMATCH</code>.
    904   <li>The returned <a href="#km_tag_origin">KM_TAG_ORIGIN</a> must have the
    905   value <code>KM_ORIGIN_IMPORTED</code>.
    906 </ul>
    907 
    908 <h3 id=export_key>export_key</h3>
    909 
    910 <p>Exports a public key from a Keymaster RSA or EC key pair.</p>
    911 
    912 <p>If <code>KM_TAG_APPLICATION_ID</code> was provided during key generation or import,
    913 the same value must provided to
    914 this method in the <code>client_id</code> argument. Otherwise, the method must return
    915 <code>KM_ERROR_INVALID_KEY_BLOB</code>. Similarly, if <code>KM_TAG_APPLICATION_DATA</code>
    916 was provided during generation or import, the same value must be provided to
    917 this method in the <code>app_data</code> argument.</p>
    918 
    919 <h3 id=delete_key>delete_key</h3>
    920 
    921 <p>Deletes the provided key. This method is optional, and will likely be
    922 implemented only by Keymaster modules that provide rollback resistance.</p>
    923 
    924 <h3 id=delete_all_keys>delete_all_keys</h3>
    925 
    926 <p>Deletes all keys. This method is optional, and will likely be implemented only
    927 by Keymaster modules that provide rollback resistance.</p>
    928 
    929 <h3 id=begin>begin</h3>
    930 
    931 <p>Begins a cryptographic operation, using the specified key, for the specified
    932 purpose, with the specified parameters (as appropriate), and returns an
    933 operation handle which is used with <a href="#update">update</a> and <a
    934 href="#finish">finish</a> to complete the operation. The operation handle is
    935 also used as the "challenge" token in authenticated operations, and for such
    936 operations must be included in the <code>challenge</code> field of the
    937 authentication token.</p>
    938 
    939 <p>A Keymaster implementation must support at least 16 concurrent
    940 operations. Keystore will use up to 15, leaving one for vold to use for password
    941 encryption. When Keystore has 15 operations in progress (<code>begin</code> has
    942 been called, but <code>finish</code> or <code>abort</code> have not yet been
    943 called) and it receives a request to begin a 16th, it will call
    944 <code>abort</code> on the least-recently used operation to reduce the number of
    945 active operations to 14 before calling <code>begin</code> to start the
    946 newly-requested operation.
    947 
    948 <p>If <a href="#km_tag_application_id">KM_TAG_APPLICATION_ID</a> or <a
    949 href="#km_tag_application_data">KM_TAG_APPLICATION_DATA</a> were specified
    950 during key generation or import, calls to <code>begin</code> must include those
    951 tags with the originally-specified values in the <code>in_params</code> argument
    952 to this method.</p>
    953 
    954 <h4 id=authorization_enforcement>Authorization enforcement</h4>
    955 
    956 <p>During this method, the following key authorizations must be enforced by the
    957 trustlet if the implementation placed them in the "hardware-enforced"
    958 characteristics and if the operation is not a public key operation. Public key
    959 operations, meaning <code>KM_PURPOSE_ENCRYPT</code> and <code>KM_PURPOSE_VERIFY</code>,
    960 with RSA or EC keys, must be allowed to succeed even if authorization
    961 requirements are not met.</p>
    962 
    963 <ul>
    964   <li><a href="#km_tag_purpose">KM_TAG_PURPOSE</a> requires that the purpose specified
    965   for this method match one of the purposes
    966 in the key authorizations, unless the requested operation is a public key
    967 operation, meaning that the key is RSA or EC and the purpose is <code>KM_PURPOSE_ENCRYPT</code>
    968 or <code>KM_PURPOSE_VERIFY</code>. Note that <code>KM_PURPOSE_ENCRYPT</code> is not valid for EC keys.
    969 Begin should return <code>KM_ERROR_UNSUPPORTED_PURPOSE</code> in that case.
    970   <li><a href="#km_tag_active_datetime">KM_TAG_ACTIVE_DATETIME</a> requires comparison with a trusted
    971   UTC time source. If the current date and
    972 time is prior to the tag value, the method must return <code>KM_ERROR_KEY_NOT_YET_VALID</code>.
    973   <li><a href="#km_tag_origination_expire_datetime">KM_TAG_ORIGINATION_EXPIRE_DATETIME</a> requires
    974   comparison with a trusted UTC time source. If the current date and
    975 time is later than the tag value and the purpose is <code>KM_PURPOSE_ENCRYPT</code> or <code>KM_PURPOSE_SIGN</code>,
    976 the method must return <code>KM_ERROR_KEY_EXPIRED</code>.
    977   <li><a href="#km_tag_usage_expire_datetime">KM_TAG_USAGE_EXPIRE_DATETIME</a> requires comparison with a
    978   trusted UTC time source. If the current date and
    979 time is later than the tag value and the purpose is <code>KM_PURPOSE_DECRYPT</code> or <code>KM_PURPOSE_VERIFY</code>,
    980 the method must return <code>KM_ERROR_KEY_EXPIRED</code>.
    981   <li><a href="#km_tag_min_seconds_between_ops">KM_TAG_MIN_SECONDS_BETWEEN_OPS</a> requires comparison with a
    982   trusted relative timer indicating the last use of
    983 the key. If the last use time plus the tag value is less than the current time,
    984 the method must return <code>KM_ERROR_KEY_RATE_LIMIT_EXCEEDED</code>. See the tag description for
    985 important implementation requirements.
    986   <li><a href="#km_tag_max_uses_per_boot">KM_TAG_MAX_USES_PER_BOOT</a> requires comparison against a
    987   secure counter that tracks the uses of the key
    988 since boot time. If the count of previous uses exceeds the tag value, the
    989 method must return <code>KM_ERROR_KEY_MAX_OPS_EXCEEDED</code>.
    990   <li><a href="#km_tag_user_secure_id">KM_TAG_USER_SECURE_ID</a> is enforced by this method only
    991   if the key also has <a href="#km_tag_auth_timeout">KM_TAG_AUTH_TIMEOUT</a>. If the key has both,
    992   then this method must have received a <a href="#km_tag_auth_token">KM_TAG_AUTH_TOKEN</a> in
    993   <code>in_params</code> and that token must be valid, meaning that the HMAC field validates correctly.
    994 In addition, at least one of the <a href="#km_tag_user_secure_id">KM_TAG_USER_SECURE_ID</a>
    995 values from the key must match at least one of the secure ID values in the
    996 token. Finally, the key must also have a <a href="#km_tag_mac_length">KM_TAG_USER_AUTH_TYPE</a> and
    997 it must match the auth type in the token. If any of these requirements is
    998 not met, the method must return <code>KM_ERROR_KEY_USER_NOT_AUTHENTICATED</code>.
    999   <li><a href="#km_tag_caller_nonce">KM_TAG_CALLER_NONCE</a> allows the caller to specify a nonce
   1000   or initialization vector (IV). If the key
   1001 does not have this tag but the caller provided <a href="#km_tag_nonce">KM_TAG_NONCE</a> to this method,
   1002 <code>KM_ERROR_CALLER_NONCE_PROHIBITED</code> must be returned.
   1003   <li><a href="#km_tag_bootloader_only">KM_TAG_BOOTLOADER_ONLY</a> specifies that the key may only be
   1004   used by the bootloader. If this method is
   1005 called with a bootloader-only key after the bootloader has finished executing,
   1006 it must return <code>KM_ERROR_INVALID_KEY_BLOB</code>.
   1007 </ul>
   1008 
   1009 <h4 id=rsa_keys>RSA keys</h4>
   1010 
   1011 <p>All RSA key operations must specify exactly one padding mode in <code>in_params</code>. If
   1012 unspecified or specified more than once, the method must return <code>KM_ERROR_UNSUPPORTED_PADDING_MODE</code>.</p>
   1013 
   1014 <p>RSA signing and verification operations require a digest, as do RSA encryption
   1015 and decryption operations with OAEP padding mode. For those cases, the caller
   1016 must specify exactly one digest in <code>in_params</code>. If unspecified or specified more than once,
   1017 the method must return <code>KM_ERROR_UNSUPPORTED_DIGEST</code>.</p>
   1018 
   1019 <p>Private key operations (<code>KM_PURPOSE_DECYPT</code> and <code>KM_PURPOSE_SIGN</code>) require
   1020 authorization of digest and padding, which means that the specified
   1021 values must be in the key authorizations. If not, the method must return <code>KM_ERROR_INCOMPATIBLE_DIGEST</code>
   1022 or <code>KM_ERROR_INCOMPATIBLE_PADDING</code>, as appropriate. Public key operations
   1023 (<code>KM_PURPOSE_ENCRYPT</code> and <code>KM_PURPOSE_VERIFY</code>) are permitted with
   1024 unauthorized digest or padding.</p>
   1025 
   1026 <p>With the exception of <code>KM_PAD_NONE</code>, all RSA padding modes are applicable only to
   1027 certain purposes. Specifically, <code>KM_PAD_RSA_PKCS1_1_5_SIGN</code> and <code>KM_PAD_RSA_PSS</code>
   1028 only support signing and verification, while <code>KM_PAD_RSA_PKCS1_1_1_5_ENCRYPT</code> and
   1029 <code>KM_PAD_RSA_OAEP</code> only support encryption and decryption. The method must return
   1030 <code>KM_ERROR_UNSUPPORTED_PADDING_MODE</code> if the specified mode does not support the specified purpose.</p>
   1031 
   1032 <p>There are some important interactions between padding modes and digests:</p>
   1033 
   1034 <ul>
   1035 
   1036   <li><code>KM_PAD_NONE</code> indicates that a "raw" RSA operation will be
   1037   performed. If signing or verifying, <code>KM_DIGEST_NONE</code> must be
   1038   specified for the digest. No digest is required for unpadded encryption or
   1039   decryption.
   1040 
   1041   <li><code>KM_PAD_RSA_PKCS1_1_5_SIGN</code> padding requires a digest. The
   1042   digest may be <code>KM_DIGEST_NONE</code>, in which case the Keymaster
   1043   implementation cannot build a proper PKCS#1 v1.5 signature structure, because
   1044   it cannot add the DigestInfo structure. Instead, the implementation must
   1045   construct <code>0x00 || 0x01 || PS || 0x00 || M</code>, where M is the
   1046   provided message and PS is the padding string. The size of the RSA key must be
   1047   at least 11 bytes larger than the message, otherwise the method must return
   1048   <code>KM_ERROR_INVALID_INPUT_LENGTH</code>.
   1049 
   1050   <li><code>KM_PAD_RSA_PKCS1_1_1_5_ENCRYPT</code> padding does not require a digest.
   1051 
   1052   <li><code>KM_PAD_RSA_PSS</code> padding requires a digest, which may not be
   1053   <code>KM_DIGEST_NONE</code>.  If <code>KM_DIGEST_NONE</code> is specified, the
   1054   method must return <code>KM_ERROR_INCOMPATIBLE_DIGEST</code>. In addition, the
   1055   size of the RSA key must be at least 22 bytes larger than the output size of
   1056   the digest. Otherwise, the method must return
   1057   <code>KM_ERROR_INCOMPATIBLE_DIGEST</code>.
   1058 
   1059   <li><code>KM_PAD_RSA_OAEP</code> padding requires a digest, which may not be
   1060   <code>KM_DIGEST_NONE</code>.  If <code>KM_DIGEST_NONE</code> is specified, the
   1061   method must return <code>KM_ERROR_INCOMPATIBLE_DIGEST</code>.
   1062 
   1063 </ul>
   1064 
   1065 <h4 id=ec_keys>EC keys</h4>
   1066 
   1067 <p>EC key operations must specify exactly one padding mode in <code>in_params</code>.
   1068 If unspecified or specified more than once,
   1069 return <code>KM_ERROR_UNSUPPORTED_PADDING_MODE</code>.</p>
   1070 
   1071 <p>Private key operations (<code>KM_PURPOSE_SIGN</code>) require authorization of the
   1072 digest, which means that the specified value must be in the key authorizations.
   1073 If not, return <code>KM_ERROR_INCOMPATIBLE_DIGEST</code>.
   1074 Public key operations (<code>KM_PURPOSE_VERIFY</code>) are permitted with unauthorized digest or padding.</p>
   1075 
   1076 <h4 id=aes_keys>AES keys</h4>
   1077 
   1078 <p>AES key operations must specify exactly one block mode and one padding mode in <code>in_params</code>.
   1079 If either value is unspecified or specified more than once, return <code>KM_ERROR_UNSUPPORTED_BLOCK_MODE</code> or
   1080 <code>KM_ERROR_UNSUPPORTED_PADDING_MODE</code>. The specified modes must be authorized by the key.
   1081 Otherwise, the method must
   1082 return <code>KM_ERROR_INCOMPATIBLE_BLOCK_MODE</code> or <code>KM_ERROR_INCOMPATIBLE_PADDING_MODE</code>.</p>
   1083 
   1084 <p>If the block mode is <code>KM_MODE_GCM</code>, <code>in_params</code> must specify <code>KM_TAG_MAC_LENGTH</code>, and the
   1085 specified value must be a multiple of 8 and must not be greater than
   1086 128, or less than the value of <code>KM_TAG_MIN_MAC_LENGTH</code> in the key authorizations. For MAC lengths greater than 128 or non-multiples of
   1087 8, return <code>KM_ERROR_UNSUPPORTED_MAC_LENGTH</code>. For values less than the key's minimum length, return <code>KM_ERROR_INVALID_MAC_LENGTH</code>.</p>
   1088 
   1089 <p>If the block mode is <code>KM_MODE_GCM</code> or <code>KM_MODE_CTR</code>, the specified padding mode must
   1090 be <code>KM_PAD_NONE</code>. For <code>KM_MODE_ECB</code> or <code>KM_MODE_CBC</code>, the mode may
   1091 be <code>KM_PAD_NONE</code> or <code>KM_PAD_PKCS7</code>. If the padding mode doesn't meet these
   1092 requirements, return <code>KM_ERROR_INCOMPATIBLE_PADDING_MODE</code>.</p>
   1093 
   1094 <p>If the block mode is <code>KM_MODE_CBC</code>, <code>KM_MODE_CTR</code>, or <code>KM_MODE_GCM</code>, an initialization vector or nonce is needed.
   1095 In most cases, callers should not
   1096 provide an IV or nonce and the Keymaster implementation must generate a random
   1097 IV or nonce and return it via <a href="#km_tag_nonce">KM_TAG_NONCE</a> in <code>out_params</code>. CBC
   1098 and CTR IVs are 16 bytes. GCM nonces are 12 bytes. If the key
   1099 authorizations contain <a href="#km_tag_caller_nonce">KM_TAG_CALLER_NONCE</a>, then the caller may
   1100 provide an IV/nonce with <a href="#km_tag_nonce">KM_TAG_NONCE</a> in <code>in_params</code>. If a
   1101 nonce is provided when <a href="#km_tag_caller_nonce">KM_TAG_CALLER_NONCE</a> is not authorized,
   1102 return <code>KM_ERROR_CALLER_NONCE_PROHIBITED</code>. If a nonce is not provided when
   1103 <a href="#km_tag_caller_nonce">KM_TAG_CALLER_NONCE</a> is authorized, generate a random IV/nonce.</p>
   1104 
   1105 <h4 id=hmac_keys>HMAC keys</h4>
   1106 
   1107 <p>HMAC key operations must specify <code>KM_TAG_MAC_LENGTH</code> in <code>in_params</code>.
   1108 The specified value must be a multiple of 8 and must not be greater than the
   1109 digest length, or less than the value of <code>KM_TAG_MIN_MAC_LENGTH</code> in the key authorizations.
   1110 For MAC lengths greater than the digest length or
   1111 non-multiples of 8, return <code>KM_ERROR_UNSUPPORTED_MAC_LENGTH</code>. For values less than
   1112 the key's minimum length, return <code>KM_ERROR_INVALID_MAC_LENGTH</code>.</p>
   1113 
   1114 <h3 id=update>update</h3>
   1115 
   1116 <p>Provides data to process in an ongoing operation started with <a href="#begin">begin</a>.
   1117 The operation is specified by the <code>operation_handle</code> parameter.</p>
   1118 
   1119 <p>To provide more flexibility for buffer handling, implementations of this method
   1120 have the option of consuming less data than was provided. The caller is
   1121 responsible for looping to feed the rest of the data in subsequent calls. The
   1122 amount of input consumed must be returned in the <code>input_consumed</code> parameter.
   1123 Implementations must always consume at least one byte, unless the
   1124 operation cannot accept any more; if more than zero bytes are provided and zero
   1125 bytes are consumed, callers will consider this an error and abort the
   1126 operation.</p>
   1127 
   1128 <p>Implementations may also choose how much data to return, as a result of the
   1129 update. This is only relevant for encryption and decryption operations, since
   1130 signing and verification return no data until <a href="#finish">finish</a>. It is recommended
   1131 to return data as early as possible, rather than buffer it.</p>
   1132 
   1133 <h4 id=error_handling>Error handling</h4>
   1134 
   1135 <p>If this method returns an error code other than <code>KM_ERROR_OK</code>, the operation is
   1136 aborted and the operation handle must be invalidated. Any
   1137 future use of the handle, with this method or <a href="#finish">finish</a> or <a href="#abort">abort</a>,
   1138 must return <code>KM_ERROR_INVALID_OPERATION_HANDLE</code>.</p>
   1139 
   1140 <h4 id=authorization_enforcement>Authorization enforcement</h4>
   1141 
   1142 <p>Key authorization enforcement is performed primarily in <a href="#begin">begin</a>. The one exception
   1143 is the case where the key has:</p>
   1144 
   1145 <ul>
   1146   <li>One or more <a href="#km_tag_user_secure_id">KM_TAG_USER_SECURE_IDs</a>, and
   1147   <li>Does not have a <a href="#km_tag_auth_timeout">KM_TAG_AUTH_TIMEOUT</a>
   1148 </ul>
   1149 
   1150 <p>In this case, the key requires an authorization per operation, and the update
   1151 method must receive a <a href="#km_tag_auth_token">KM_TAG_AUTH_TOKEN</a> in the <code>in_params</code> argument.
   1152 The token must be valid (HMAC must verify) and it must contain a
   1153 matching secure user ID, must match the key's <a href="#km_tag_mac_length">KM_TAG_USER_AUTH_TYPE</a>, and must
   1154 contain the operation handle of the current operation in the
   1155 challenge field. If these requirements aren't met, return <code>KM_ERROR_KEY_USER_NOT_AUTHENTICATED</code>.</p>
   1156 
   1157 <p>The caller must provide the authentication token to every call to <a href="#update">update</a> and
   1158 <a href="#finish">finish</a>. The implementation need only validate the token once if it prefers.</p>
   1159 
   1160 <h4 id=rsa_keys>RSA keys</h4>
   1161 
   1162 <p>For signing and verification operations with <code>KM_DIGEST_NONE</code>, this method must accept
   1163 the entire block to be signed or verified in a single
   1164 update. It may not consume only a portion of the block. It still must accept
   1165 the data in multiple updates if the caller chooses to provide it that way,
   1166 however. If the caller provides more data to sign than can be used (length of
   1167 data exceeds RSA key size), return <code>KM_ERROR_INVALID_INPUT_LENGTH</code>.</p>
   1168 
   1169 <h4 id=ecdsa_keys>ECDSA keys</h4>
   1170 
   1171 <p>For signing and verification operations with <code>KM_DIGEST_NONE</code>, this method must accept the
   1172 entire block to be signed or verified in a single
   1173 update. This method may not consume only a portion of the block.</p>
   1174 
   1175 <p>However, this method still must accept the data in multiple updates if the
   1176 caller chooses to provide it that way. If the caller provides more data to sign
   1177 than can be used, the data should be silently truncated. (This differs from the
   1178 handling of excess data provided in similar RSA operations. The reason for this
   1179 is compatibility with legacy clients.)</p>
   1180 
   1181 <h4 id=aes_keys>AES keys</h4>
   1182 
   1183 <p>AES GCM mode supports "associated authentication data," provided via the
   1184 <a href="#km_tag_associated_data">KM_TAG_ASSOCIATED_DATA</a> tag in the <code>in_params</code> argument.
   1185 The associated data may be provided in repeated calls (important if
   1186 the data is too large to send in a single block) but must always precede data
   1187 to be encrypted or decrypted. An update call may receive both associated data
   1188 and data to encrypt/decrypt, but subsequent updates may not include associated
   1189 data. If the caller provides associated data to an update call after a call
   1190 that includes data to encrypt/decrypt, return <code>KM_ERROR_INVALID_TAG</code>.</p>
   1191 
   1192 <p>For GCM encryption, the tag is appended to the ciphertext by <a href="#finish">finish</a>.
   1193 During decryption, the last <code>KM_TAG_MAC_LENGTH</code> bytes of the data provided to the last
   1194 update call is the tag. Since a given
   1195 invocation of <a href="#update">update</a> cannot know if it's the last invocation, it must process all but the tag
   1196 length and buffer the possible tag data for processing during <a href="#finish">finish</a>.</p>
   1197 
   1198 <h3 id=finish>finish</h3>
   1199 
   1200 <p>Finished an ongoing operation started with <a href="#begin">begin</a>, processing all of the
   1201 as-yet-unprocessed data provided by <a href="#update">update</a>(s).</p>
   1202 
   1203 <p>This method is the last one called in an operation, so all processed data must
   1204 be returned.</p>
   1205 
   1206 <p>Whether it completes successfully or returns an error, this method finalizes
   1207 the operation and therefore invalidates the provided operation handle. Any
   1208 future use of the handle, with this method or <a href="#update">update</a> or
   1209 <a href="#abort">abort</a>, must return <code>KM_ERROR_INVALID_OPERATION_HANDLE</code>.</p>
   1210 
   1211 <p>Signing operations return the signature as the output. Verification operations
   1212 accept the signature in the <code>signature</code> parameter, and return no output.</p>
   1213 
   1214 <h4 id=authorization_enforcement>Authorization enforcement</h4>
   1215 
   1216 <p>Key authorization enforcement is performed primarily in <a href="#begin">begin</a>. The one exception is the case where the key has:</p>
   1217 
   1218 <ul>
   1219   <li>One or more <a href="#km_tag_user_secure_id">KM_TAG_USER_SECURE_IDs</a>, and
   1220   <li>Does not have a <a href="#km_tag_auth_timeout">KM_TAG_AUTH_TIMEOUT</a>
   1221 </ul>
   1222 
   1223 <p>In this case, the key requires an authorization per operation, and the update
   1224 method must receive a <a href="#km_tag_auth_token">KM_TAG_AUTH_TOKEN</a> in the <code>in_params</code> argument.
   1225 The token must be valid (HMAC must verify) and it must contain a
   1226 matching secure user ID, must match the key's <a href="#km_tag_mac_length">KM_TAG_USER_AUTH_TYPE</a>, and must
   1227 contain the operation handle of the current operation in the
   1228 challenge field. If these requirements aren't met, return <code>KM_ERROR_KEY_USER_NOT_AUTHENTICATED</code>.</p>
   1229 
   1230 <p>The caller must provide the authentication token to every call to <a href="#update">update</a> and <a href="#finish">finish</a>.
   1231 The implementation need only validate the token once if it prefers.</p>
   1232 
   1233 <h4 id=rsa_keys>RSA keys</h4>
   1234 
   1235 <p>Some additional requirements, depending on the padding mode:</p>
   1236 
   1237 <ul>
   1238   <li><strong>KM_PAD_NONE</strong>. For unpadded signing and encryption operations, if the provided data is
   1239 shorter than the key, the data must be zero-padded on the left before
   1240 signing/encryption. If the data is the same length as the key but numerically
   1241 larger, return <code>KM_ERROR_INVALID_ARGUMENT</code>. For verification and decryption operations, the data must be exactly as long
   1242 as the key. Otherwise, return <code>KM_ERROR_INVALID_INPUT_LENGTH.</code>
   1243   <li><strong>KM_PAD_RSA_PSS</strong>. For PSS-padded signature operations, the PSS salt must be at least 20 bytes
   1244 in length and randomly-generated. The salt may be longer; the reference
   1245 implementation uses maximally-sized salt. The digest specified with <a href="#km_tag_digest">KM_TAG_DIGEST</a> in
   1246 <code>input_params</code> on <a href="#begin">begin</a> is used as the PSS digest algorithm, and SHA1 is used as the MGF1 digest
   1247 algorithm.
   1248   <li><strong>KM_PAD_RSA_OAEP</strong>. The digest specified with <a href="#km_tag_digest">KM_TAG_DIGEST</a> in
   1249   <code>input_params</code> on <a href="#begin">begin</a> is used as the OAEP digest algorithm, and SHA1 is used as the MGF1 digest
   1250 algorithm.
   1251 </ul>
   1252 
   1253 <h4 id=ecdsa_keys>ECDSA keys</h4>
   1254 
   1255 <p>If the data provided for unpadded signing or verification is too long, truncate
   1256 it.</p>
   1257 
   1258 <h4 id=aes_keys>AES keys</h4>
   1259 
   1260 <p>Some additional requirements, depending on block mode:</p>
   1261 
   1262 <ul>
   1263   <li><strong>KM_MODE_ECB</strong> or <strong>KM_MODE_CBC</strong>. If padding is <code>KM_PAD_NONE</code> and the
   1264   data length is not a multiple of the AES block size, return <code>KM_ERROR_INVALID_INPUT_LENGTH</code>. If
   1265   padding is <code>KM_PAD_PKCS7</code>, pad the data per the PKCS#7 specification. Note that PKCS#7 requires that if
   1266 the data is a multiple of the block length, an additional padding block must be
   1267 added.
   1268   <li><strong>KM_MODE_GCM</strong>. During encryption, after processing all plaintext, compute the
   1269   tag (<a href="#km_tag_mac_length">KM_TAG_MAC_LENGTH</a> bytes) and append it to the returned ciphertext.
   1270   During decryption, process
   1271 the last <a href="#km_tag_mac_length">KM_TAG_MAC_LENGTH</a> bytes as the tag. If tag verification fails,
   1272 return <code>KM_ERROR_VERIFICATION_FAILED</code>.
   1273 </ul>
   1274 
   1275 <h3 id=abort>abort</h3>
   1276 
   1277 <p>Aborts the in-progress operation. After the call to abort, return <code>KM_ERROR_INVALID_OPERATION_HANDLE</code> for
   1278 any subsequent use of the provided operation handle with <a href="#update">update</a>,
   1279 <a href="#finish">finish</a>, or <a href="#abort">abort</a>.</p>
   1280