Home | History | Annotate | Line # | Download | only in man7
      1 =pod
      2 
      3 =head1 NAME
      4 
      5 life_cycle-pkey - The PKEY algorithm life-cycle
      6 
      7 =head1 DESCRIPTION
      8 
      9 All public keys (PKEYs) go through a number of stages in their life-cycle:
     10 
     11 =over 4
     12 
     13 =item start
     14 
     15 This state represents the PKEY before it has been allocated.  It is the
     16 starting state for any life-cycle transitions.
     17 
     18 =item newed
     19 
     20 This state represents the PKEY after it has been allocated.
     21 
     22 =item decapsulate
     23 
     24 This state represents the PKEY when it is ready to perform a private key decapsulation
     25 operation.
     26 
     27 =item decrypt
     28 
     29 This state represents the PKEY when it is ready to decrypt some ciphertext.
     30 
     31 =item derive
     32 
     33 This state represents the PKEY when it is ready to derive a shared secret.
     34 
     35 =item digest sign
     36 
     37 This state represents the PKEY when it is ready to perform a private key signature
     38 operation.
     39 
     40 =item encapsulate
     41 
     42 This state represents the PKEY when it is ready to perform a public key encapsulation
     43 operation.
     44 
     45 =item encrypt
     46 
     47 This state represents the PKEY when it is ready to encrypt some plaintext.
     48 
     49 =item key generation
     50 
     51 This state represents the PKEY when it is ready to generate a new public/private key.
     52 
     53 =item parameter generation
     54 
     55 This state represents the PKEY when it is ready to generate key parameters.
     56 
     57 =item verify
     58 
     59 This state represents the PKEY when it is ready to verify a public key signature.
     60 
     61 =item verify recover
     62 
     63 This state represents the PKEY when it is ready to recover a public key signature data.
     64 
     65 =item freed
     66 
     67 This state is entered when the PKEY is freed.  It is the terminal state
     68 for all life-cycle transitions.
     69 
     70 =back
     71 
     72 =head2 State Transition Diagram
     73 
     74 The usual life-cycle of a PKEY object is illustrated:
     75 
     76 =begin man
     77 
     78                                                    +-------------+
     79                                                    |             |
     80                                                    |    start    |
     81                                                    |             |
     82                    EVP_PKEY_derive                 +-------------+
     83  +-------------+   EVP_PKEY_derive_set_peer               |                                          +-------------+
     84  |             |----------------------------+             |             +----------------------------|             |
     85  |   derive    |                            |             |             |  EVP_PKEY_verify           |   verify    |
     86  |             |<---------------------------+             |             +--------------------------->|             |
     87  +-------------+                                          |                                          +-------------+
     88              ^                                            |                                            ^
     89              |   EVP_PKEY_derive_init                     |             EVP_PKEY_verify_init           |
     90              +---------------------------------------+    |    +---------------------------------------+
     91                                                      |    |    |
     92  +-------------+                                     |    |    |                                     +-------------+
     93  |             |----------------------------+        |    |    |        +----------------------------|             |
     94  | digest sign |   EVP_PKEY_sign            |        |    |    |        |  EVP_PKEY_verify_recover   |   verify    |
     95  |             |<---------------------------+        |    |    |        +--------------------------->|   recover   |
     96  +-------------+                                     |    |    |                                     +-------------+
     97              ^                                       |    |    |                                       ^
     98              |     EVP_PKEY_sign_init                |    |    |        EVP_PKEY_verify_recover_init   |
     99              +---------------------------------+     |    |    |     +---------------------------------+
    100                                                |     |    |    |     |
    101  +-------------+                               |     |    |    |     |                               +-------------+
    102  |             |----------------------------+  |     |    |    |     |  +----------------------------|             |
    103  | decapsulate |   EVP_PKEY_decapsulate     |  |     |    |    |     |  |  EVP_PKEY_decrypt          |   decrypt   |
    104  |             |<---------------------------+  |     |    v    |     |  +--------------------------->|             |
    105  +-------------+                               |   +-------------+   |                               +-------------+
    106              ^                                 +---|             |---+                                 ^
    107              |     EVP_PKEY_decapsulate_init       |             |      EVP_PKEY_decrypt_init          |
    108              +-------------------------------------|    newed    |-------------------------------------+
    109                                                    |             |
    110                                                +---|             |---+
    111  +-------------+                               |   +-------------+   |                               +-------------+
    112  |             |----------------------------+  |     |         |     |  +----------------------------|             |
    113  | encapsulate |   EVP_PKEY_encapsulate     |  |     |         |     |  |  EVP_PKEY_encrypt          |   encrypt   |
    114  |             |<---------------------------+  |     |         |     |  +--------------------------->|             |
    115  +-------------+                               |     |         |     |                               +-------------+
    116              ^                                 |     |         |     |                                 ^
    117              |     EVP_PKEY_encapsulate_init   |     |         |     |  EVP_PKEY_encrypt_init          |
    118              +---------------------------------+     |         |     +---------------------------------+
    119                                                      |         |
    120              +---------------------------------------+         +---------------------------------------+
    121              |     EVP_PKEY_paramgen_init                               EVP_PKEY_keygen_init           |
    122              v                                                                                         v
    123  +-------------+                                                                                     +-------------+
    124  |             |----------------------------+                           +----------------------------|             |
    125  |  parameter  |                            |                           |                            |     key     |
    126  |  generation |<---------------------------+                           +--------------------------->|  generation |
    127  +-------------+   EVP_PKEY_paramgen                                       EVP_PKEY_keygen           +-------------+
    128                    EVP_PKEY_gen                                            EVP_PKEY_gen
    129 
    130 
    131                                     + - - - - - +                    +-----------+
    132                                     '           ' EVP_PKEY_CTX_free  |           |
    133                                     ' any state '------------------->|   freed   |
    134                                     '           '                    |           |
    135                                     + - - - - - +                    +-----------+
    136 
    137 =end man
    138 
    139 =for html <img src="img/pkey.png">
    140 
    141 =head2 Formal State Transitions
    142 
    143 This section defines all of the legal state transitions.
    144 This is the canonical list.
    145 
    146 =begin man
    147 
    148  Function Call                 ---------------------------------------------------------------------- Current State ----------------------------------------------------------------------
    149                                start    newed       digest       verify       verify       encrypt      decrypt      derive      encapsulate  decapsulate  parameter       key       freed
    150                                                      sign                     recover                                                                      generation   generation
    151  EVP_PKEY_CTX_new              newed
    152  EVP_PKEY_CTX_new_id           newed
    153  EVP_PKEY_CTX_new_from_name    newed
    154  EVP_PKEY_CTX_new_from_pkey    newed
    155  EVP_PKEY_sign_init                    digest       digest       digest       digest       digest       digest       digest       digest       digest       digest       digest
    156                                         sign         sign         sign         sign         sign         sign         sign         sign         sign         sign         sign
    157  EVP_PKEY_sign                                      digest
    158                                                      sign
    159  EVP_PKEY_verify_init                  verify       verify       verify       verify       verify       verify       verify       verify       verify       verify       verify
    160  EVP_PKEY_verify                                                 verify
    161  EVP_PKEY_verify_recover_init          verify       verify       verify       verify       verify       verify       verify       verify       verify       verify       verify
    162                                        recover      recover      recover      recover      recover      recover      recover      recover      recover      recover      recover
    163  EVP_PKEY_verify_recover                                                      verify
    164                                                                               recover
    165  EVP_PKEY_encrypt_init                 encrypt      encrypt      encrypt      encrypt      encrypt      encrypt      encrypt      encrypt      encrypt      encrypt      encrypt
    166  EVP_PKEY_encrypt                                                                          encrypt
    167  EVP_PKEY_decrypt_init                 decrypt      decrypt      decrypt      decrypt      decrypt      decrypt      decrypt      decrypt      decrypt      decrypt      decrypt
    168  EVP_PKEY_decrypt                                                                                       decrypt
    169  EVP_PKEY_derive_init                  derive       derive       derive       derive       derive       derive       derive       derive       derive       derive       derive
    170  EVP_PKEY_derive_set_peer                                                                                            derive
    171  EVP_PKEY_derive                                                                                                     derive
    172  EVP_PKEY_encapsulate_init            encapsulate  encapsulate  encapsulate  encapsulate  encapsulate  encapsulate  encapsulate  encapsulate  encapsulate  encapsulate  encapsulate
    173  EVP_PKEY_encapsulate                                                                                                            encapsulate
    174  EVP_PKEY_decapsulate_init            decapsulate  decapsulate  decapsulate  decapsulate  decapsulate  decapsulate  decapsulate  decapsulate  decapsulate  decapsulate  decapsulate
    175  EVP_PKEY_decapsulate                                                                                                                         decapsulate
    176  EVP_PKEY_paramgen_init               parameter    parameter    parameter    parameter    parameter    parameter    parameter    parameter    parameter    parameter    parameter
    177                                       generation   generation   generation   generation   generation   generation   generation   generation   generation   generation   generation
    178  EVP_PKEY_paramgen                                                                                                                                         parameter
    179                                                                                                                                                            generation
    180  EVP_PKEY_keygen_init                    key          key          key          key          key          key          key          key          key          key          key
    181                                       generation   generation   generation   generation   generation   generation   generation   generation   generation   generation   generation
    182  EVP_PKEY_keygen                                                                                                                                                           key
    183                                                                                                                                                                         generation
    184  EVP_PKEY_gen                                                                                                                                              parameter       key
    185                                                                                                                                                            generation   generation
    186  EVP_PKEY_CTX_get_params                newed       digest       verify       verify       encrypt      decrypt      derive      encapsulate  decapsulate  parameter       key
    187                                                      sign                     recover                                                                      generation   generation
    188  EVP_PKEY_CTX_set_params                newed       digest       verify       verify       encrypt      decrypt      derive      encapsulate  decapsulate  parameter       key
    189                                                      sign                     recover                                                                      generation   generation
    190  EVP_PKEY_CTX_gettable_params           newed       digest       verify       verify       encrypt      decrypt      derive      encapsulate  decapsulate  parameter       key
    191                                                      sign                     recover                                                                      generation   generation
    192  EVP_PKEY_CTX_settable_params           newed       digest       verify       verify       encrypt      decrypt      derive      encapsulate  decapsulate  parameter       key
    193                                                      sign                     recover                                                                      generation   generation
    194  EVP_PKEY_CTX_free             freed    freed        freed        freed        freed        freed        freed        freed        freed        freed        freed        freed
    195 
    196 =end man
    197 
    198 =begin html
    199 
    200 <table style="border:1px solid; border-collapse:collapse">
    201 <tr><th style="border:1px solid" align="left">Function Call</th>
    202     <th style="border:1px solid" colspan="13">Current State</th></tr>
    203 <tr><th style="border:1px solid"></th>
    204     <th style="border:1px solid" align="center">start</th>
    205     <th style="border:1px solid" align="center">newed</th>
    206     <th style="border:1px solid" align="center">digest<br>sign</th>
    207     <th style="border:1px solid" align="center">verify</th>
    208     <th style="border:1px solid" align="center">verify<br>recover</th>
    209     <th style="border:1px solid" align="center">encrypt</th>
    210     <th style="border:1px solid" align="center">decrypt</th>
    211     <th style="border:1px solid" align="center">derive</th>
    212     <th style="border:1px solid" align="center">encapsulate</th>
    213     <th style="border:1px solid" align="center">decapsulate</th>
    214     <th style="border:1px solid" align="center">parameter<br>generation</th>
    215     <th style="border:1px solid" align="center">key<br>generation</th>
    216     <th style="border:1px solid" align="center">freed</th>
    217 </tr>
    218 
    219 <tr><th style="border:1px solid" align="left">EVP_PKEY_CTX_new</th>
    220     <td style="border:1px solid" align="center">newed</td>
    221     <td style="border:1px solid" align="center"></td>
    222     <td style="border:1px solid" align="center"></td>
    223     <td style="border:1px solid" align="center"></td>
    224     <td style="border:1px solid" align="center"></td>
    225     <td style="border:1px solid" align="center"></td>
    226     <td style="border:1px solid" align="center"></td>
    227     <td style="border:1px solid" align="center"></td>
    228     <td style="border:1px solid" align="center"></td>
    229     <td style="border:1px solid" align="center"></td>
    230     <td style="border:1px solid" align="center"></td>
    231     <td style="border:1px solid" align="center"></td>
    232     <td style="border:1px solid" align="center"></td>
    233 </tr>
    234 <tr><th style="border:1px solid" align="left">EVP_PKEY_CTX_new_id</th>
    235     <td style="border:1px solid" align="center">newed</td>
    236     <td style="border:1px solid" align="center"></td>
    237     <td style="border:1px solid" align="center"></td>
    238     <td style="border:1px solid" align="center"></td>
    239     <td style="border:1px solid" align="center"></td>
    240     <td style="border:1px solid" align="center"></td>
    241     <td style="border:1px solid" align="center"></td>
    242     <td style="border:1px solid" align="center"></td>
    243     <td style="border:1px solid" align="center"></td>
    244     <td style="border:1px solid" align="center"></td>
    245     <td style="border:1px solid" align="center"></td>
    246     <td style="border:1px solid" align="center"></td>
    247     <td style="border:1px solid" align="center"></td>
    248 </tr>
    249 <tr><th style="border:1px solid" align="left">EVP_PKEY_CTX_new_from_name</th>
    250     <td style="border:1px solid" align="center">newed</td>
    251     <td style="border:1px solid" align="center"></td>
    252     <td style="border:1px solid" align="center"></td>
    253     <td style="border:1px solid" align="center"></td>
    254     <td style="border:1px solid" align="center"></td>
    255     <td style="border:1px solid" align="center"></td>
    256     <td style="border:1px solid" align="center"></td>
    257     <td style="border:1px solid" align="center"></td>
    258     <td style="border:1px solid" align="center"></td>
    259     <td style="border:1px solid" align="center"></td>
    260     <td style="border:1px solid" align="center"></td>
    261     <td style="border:1px solid" align="center"></td>
    262     <td style="border:1px solid" align="center"></td>
    263 </tr>
    264 <tr><th style="border:1px solid" align="left">EVP_PKEY_CTX_new_from_pkey</th>
    265     <td style="border:1px solid" align="center">newed</td>
    266     <td style="border:1px solid" align="center"></td>
    267     <td style="border:1px solid" align="center"></td>
    268     <td style="border:1px solid" align="center"></td>
    269     <td style="border:1px solid" align="center"></td>
    270     <td style="border:1px solid" align="center"></td>
    271     <td style="border:1px solid" align="center"></td>
    272     <td style="border:1px solid" align="center"></td>
    273     <td style="border:1px solid" align="center"></td>
    274     <td style="border:1px solid" align="center"></td>
    275     <td style="border:1px solid" align="center"></td>
    276     <td style="border:1px solid" align="center"></td>
    277     <td style="border:1px solid" align="center"></td>
    278 </tr>
    279 <tr><th style="border:1px solid" align="left">EVP_PKEY_sign_init</th>
    280     <td style="border:1px solid" align="center"></td>
    281     <td style="border:1px solid" align="center">digest<br>sign</td>
    282     <td style="border:1px solid" align="center">digest<br>sign</td>
    283     <td style="border:1px solid" align="center">digest<br>sign</td>
    284     <td style="border:1px solid" align="center">digest<br>sign</td>
    285     <td style="border:1px solid" align="center">digest<br>sign</td>
    286     <td style="border:1px solid" align="center">digest<br>sign</td>
    287     <td style="border:1px solid" align="center">digest<br>sign</td>
    288     <td style="border:1px solid" align="center">digest<br>sign</td>
    289     <td style="border:1px solid" align="center">digest<br>sign</td>
    290     <td style="border:1px solid" align="center">digest<br>sign</td>
    291     <td style="border:1px solid" align="center">digest<br>sign</td>
    292     <td style="border:1px solid" align="center"></td>
    293 </tr>
    294 <tr><th style="border:1px solid" align="left">EVP_PKEY_sign</th>
    295     <td style="border:1px solid" align="center"></td>
    296     <td style="border:1px solid" align="center"></td>
    297     <td style="border:1px solid" align="center">digest<br>sign</td>
    298     <td style="border:1px solid" align="center"></td>
    299     <td style="border:1px solid" align="center"></td>
    300     <td style="border:1px solid" align="center"></td>
    301     <td style="border:1px solid" align="center"></td>
    302     <td style="border:1px solid" align="center"></td>
    303     <td style="border:1px solid" align="center"></td>
    304     <td style="border:1px solid" align="center"></td>
    305     <td style="border:1px solid" align="center"></td>
    306     <td style="border:1px solid" align="center"></td>
    307     <td style="border:1px solid" align="center"></td>
    308 </tr>
    309 <tr><th style="border:1px solid" align="left">EVP_PKEY_verify_init</th>
    310     <td style="border:1px solid" align="center"></td>
    311     <td style="border:1px solid" align="center">verify</td>
    312     <td style="border:1px solid" align="center">verify</td>
    313     <td style="border:1px solid" align="center">verify</td>
    314     <td style="border:1px solid" align="center">verify</td>
    315     <td style="border:1px solid" align="center">verify</td>
    316     <td style="border:1px solid" align="center">verify</td>
    317     <td style="border:1px solid" align="center">verify</td>
    318     <td style="border:1px solid" align="center">verify</td>
    319     <td style="border:1px solid" align="center">verify</td>
    320     <td style="border:1px solid" align="center">verify</td>
    321     <td style="border:1px solid" align="center">verify</td>
    322     <td style="border:1px solid" align="center"></td>
    323 </tr>
    324 <tr><th style="border:1px solid" align="left">EVP_PKEY_verify</th>
    325     <td style="border:1px solid" align="center"></td>
    326     <td style="border:1px solid" align="center"></td>
    327     <td style="border:1px solid" align="center"></td>
    328     <td style="border:1px solid" align="center">verify</td>
    329     <td style="border:1px solid" align="center"></td>
    330     <td style="border:1px solid" align="center"></td>
    331     <td style="border:1px solid" align="center"></td>
    332     <td style="border:1px solid" align="center"></td>
    333     <td style="border:1px solid" align="center"></td>
    334     <td style="border:1px solid" align="center"></td>
    335     <td style="border:1px solid" align="center"></td>
    336     <td style="border:1px solid" align="center"></td>
    337     <td style="border:1px solid" align="center"></td>
    338 </tr>
    339 <tr><th style="border:1px solid" align="left">EVP_PKEY_verify_recover_init</th>
    340     <td style="border:1px solid" align="center"></td>
    341     <td style="border:1px solid" align="center">verify<br>recover</td>
    342     <td style="border:1px solid" align="center">verify<br>recover</td>
    343     <td style="border:1px solid" align="center">verify<br>recover</td>
    344     <td style="border:1px solid" align="center">verify<br>recover</td>
    345     <td style="border:1px solid" align="center">verify<br>recover</td>
    346     <td style="border:1px solid" align="center">verify<br>recover</td>
    347     <td style="border:1px solid" align="center">verify<br>recover</td>
    348     <td style="border:1px solid" align="center">verify<br>recover</td>
    349     <td style="border:1px solid" align="center">verify<br>recover</td>
    350     <td style="border:1px solid" align="center">verify<br>recover</td>
    351     <td style="border:1px solid" align="center">verify<br>recover</td>
    352     <td style="border:1px solid" align="center"></td>
    353 </tr>
    354 <tr><th style="border:1px solid" align="left">EVP_PKEY_verify_recover</th>
    355     <td style="border:1px solid" align="center"></td>
    356     <td style="border:1px solid" align="center"></td>
    357     <td style="border:1px solid" align="center"></td>
    358     <td style="border:1px solid" align="center"></td>
    359     <td style="border:1px solid" align="center">verify<br>recover</td>
    360     <td style="border:1px solid" align="center"></td>
    361     <td style="border:1px solid" align="center"></td>
    362     <td style="border:1px solid" align="center"></td>
    363     <td style="border:1px solid" align="center"></td>
    364     <td style="border:1px solid" align="center"></td>
    365     <td style="border:1px solid" align="center"></td>
    366     <td style="border:1px solid" align="center"></td>
    367     <td style="border:1px solid" align="center"></td>
    368 </tr>
    369 <tr><th style="border:1px solid" align="left">EVP_PKEY_encrypt_init</th>
    370     <td style="border:1px solid" align="center"></td>
    371     <td style="border:1px solid" align="center">encrypt</td>
    372     <td style="border:1px solid" align="center">encrypt</td>
    373     <td style="border:1px solid" align="center">encrypt</td>
    374     <td style="border:1px solid" align="center">encrypt</td>
    375     <td style="border:1px solid" align="center">encrypt</td>
    376     <td style="border:1px solid" align="center">encrypt</td>
    377     <td style="border:1px solid" align="center">encrypt</td>
    378     <td style="border:1px solid" align="center">encrypt</td>
    379     <td style="border:1px solid" align="center">encrypt</td>
    380     <td style="border:1px solid" align="center">encrypt</td>
    381     <td style="border:1px solid" align="center">encrypt</td>
    382     <td style="border:1px solid" align="center"></td>
    383 </tr>
    384 <tr><th style="border:1px solid" align="left">EVP_PKEY_encrypt</th>
    385     <td style="border:1px solid" align="center"></td>
    386     <td style="border:1px solid" align="center"></td>
    387     <td style="border:1px solid" align="center"></td>
    388     <td style="border:1px solid" align="center"></td>
    389     <td style="border:1px solid" align="center"></td>
    390     <td style="border:1px solid" align="center">encrypt</td>
    391     <td style="border:1px solid" align="center"></td>
    392     <td style="border:1px solid" align="center"></td>
    393     <td style="border:1px solid" align="center"></td>
    394     <td style="border:1px solid" align="center"></td>
    395     <td style="border:1px solid" align="center"></td>
    396     <td style="border:1px solid" align="center"></td>
    397     <td style="border:1px solid" align="center"></td>
    398 </tr>
    399 <tr><th style="border:1px solid" align="left">EVP_PKEY_decrypt_init</th>
    400     <td style="border:1px solid" align="center"></td>
    401     <td style="border:1px solid" align="center">decrypt</td>
    402     <td style="border:1px solid" align="center">decrypt</td>
    403     <td style="border:1px solid" align="center">decrypt</td>
    404     <td style="border:1px solid" align="center">decrypt</td>
    405     <td style="border:1px solid" align="center">decrypt</td>
    406     <td style="border:1px solid" align="center">decrypt</td>
    407     <td style="border:1px solid" align="center">decrypt</td>
    408     <td style="border:1px solid" align="center">decrypt</td>
    409     <td style="border:1px solid" align="center">decrypt</td>
    410     <td style="border:1px solid" align="center">decrypt</td>
    411     <td style="border:1px solid" align="center">decrypt</td>
    412     <td style="border:1px solid" align="center"></td>
    413 </tr>
    414 <tr><th style="border:1px solid" align="left">EVP_PKEY_decrypt</th>
    415     <td style="border:1px solid" align="center"></td>
    416     <td style="border:1px solid" align="center"></td>
    417     <td style="border:1px solid" align="center"></td>
    418     <td style="border:1px solid" align="center"></td>
    419     <td style="border:1px solid" align="center"></td>
    420     <td style="border:1px solid" align="center"></td>
    421     <td style="border:1px solid" align="center">decrypt</td>
    422     <td style="border:1px solid" align="center"></td>
    423     <td style="border:1px solid" align="center"></td>
    424     <td style="border:1px solid" align="center"></td>
    425     <td style="border:1px solid" align="center"></td>
    426     <td style="border:1px solid" align="center"></td>
    427     <td style="border:1px solid" align="center"></td>
    428 </tr>
    429 <tr><th style="border:1px solid" align="left">EVP_PKEY_derive_init</th>
    430     <td style="border:1px solid" align="center"></td>
    431     <td style="border:1px solid" align="center">derive</td>
    432     <td style="border:1px solid" align="center">derive</td>
    433     <td style="border:1px solid" align="center">derive</td>
    434     <td style="border:1px solid" align="center">derive</td>
    435     <td style="border:1px solid" align="center">derive</td>
    436     <td style="border:1px solid" align="center">derive</td>
    437     <td style="border:1px solid" align="center">derive</td>
    438     <td style="border:1px solid" align="center">derive</td>
    439     <td style="border:1px solid" align="center">derive</td>
    440     <td style="border:1px solid" align="center">derive</td>
    441     <td style="border:1px solid" align="center">derive</td>
    442     <td style="border:1px solid" align="center"></td>
    443 </tr>
    444 <tr><th style="border:1px solid" align="left">EVP_PKEY_derive_set_peer</th>
    445     <td style="border:1px solid" align="center"></td>
    446     <td style="border:1px solid" align="center"></td>
    447     <td style="border:1px solid" align="center"></td>
    448     <td style="border:1px solid" align="center"></td>
    449     <td style="border:1px solid" align="center"></td>
    450     <td style="border:1px solid" align="center"></td>
    451     <td style="border:1px solid" align="center"></td>
    452     <td style="border:1px solid" align="center">derive</td>
    453     <td style="border:1px solid" align="center"></td>
    454     <td style="border:1px solid" align="center"></td>
    455     <td style="border:1px solid" align="center"></td>
    456     <td style="border:1px solid" align="center"></td>
    457     <td style="border:1px solid" align="center"></td>
    458 </tr>
    459 <tr><th style="border:1px solid" align="left">EVP_PKEY_derive</th>
    460     <td style="border:1px solid" align="center"></td>
    461     <td style="border:1px solid" align="center"></td>
    462     <td style="border:1px solid" align="center"></td>
    463     <td style="border:1px solid" align="center"></td>
    464     <td style="border:1px solid" align="center"></td>
    465     <td style="border:1px solid" align="center"></td>
    466     <td style="border:1px solid" align="center"></td>
    467     <td style="border:1px solid" align="center">derive</td>
    468     <td style="border:1px solid" align="center"></td>
    469     <td style="border:1px solid" align="center"></td>
    470     <td style="border:1px solid" align="center"></td>
    471     <td style="border:1px solid" align="center"></td>
    472     <td style="border:1px solid" align="center"></td>
    473 </tr>
    474 <tr><th style="border:1px solid" align="left">EVP_PKEY_encapsulate_init</th>
    475     <td style="border:1px solid" align="center"></td>
    476     <td style="border:1px solid" align="center">encapsulate</td>
    477     <td style="border:1px solid" align="center">encapsulate</td>
    478     <td style="border:1px solid" align="center">encapsulate</td>
    479     <td style="border:1px solid" align="center">encapsulate</td>
    480     <td style="border:1px solid" align="center">encapsulate</td>
    481     <td style="border:1px solid" align="center">encapsulate</td>
    482     <td style="border:1px solid" align="center">encapsulate</td>
    483     <td style="border:1px solid" align="center">encapsulate</td>
    484     <td style="border:1px solid" align="center">encapsulate</td>
    485     <td style="border:1px solid" align="center">encapsulate</td>
    486     <td style="border:1px solid" align="center">encapsulate</td>
    487     <td style="border:1px solid" align="center"></td>
    488 </tr>
    489 <tr><th style="border:1px solid" align="left">EVP_PKEY_encapsulate</th>
    490     <td style="border:1px solid" align="center"></td>
    491     <td style="border:1px solid" align="center"></td>
    492     <td style="border:1px solid" align="center"></td>
    493     <td style="border:1px solid" align="center"></td>
    494     <td style="border:1px solid" align="center"></td>
    495     <td style="border:1px solid" align="center"></td>
    496     <td style="border:1px solid" align="center"></td>
    497     <td style="border:1px solid" align="center"></td>
    498     <td style="border:1px solid" align="center">encapsulate</td>
    499     <td style="border:1px solid" align="center"></td>
    500     <td style="border:1px solid" align="center"></td>
    501     <td style="border:1px solid" align="center"></td>
    502     <td style="border:1px solid" align="center"></td>
    503 </tr>
    504 <tr><th style="border:1px solid" align="left">EVP_PKEY_decapsulate_init</th>
    505     <td style="border:1px solid" align="center"></td>
    506     <td style="border:1px solid" align="center">decapsulate</td>
    507     <td style="border:1px solid" align="center">decapsulate</td>
    508     <td style="border:1px solid" align="center">decapsulate</td>
    509     <td style="border:1px solid" align="center">decapsulate</td>
    510     <td style="border:1px solid" align="center">decapsulate</td>
    511     <td style="border:1px solid" align="center">decapsulate</td>
    512     <td style="border:1px solid" align="center">decapsulate</td>
    513     <td style="border:1px solid" align="center">decapsulate</td>
    514     <td style="border:1px solid" align="center">decapsulate</td>
    515     <td style="border:1px solid" align="center">decapsulate</td>
    516     <td style="border:1px solid" align="center">decapsulate</td>
    517     <td style="border:1px solid" align="center"></td>
    518 </tr>
    519 <tr><th style="border:1px solid" align="left">EVP_PKEY_decapsulate</th>
    520     <td style="border:1px solid" align="center"></td>
    521     <td style="border:1px solid" align="center"></td>
    522     <td style="border:1px solid" align="center"></td>
    523     <td style="border:1px solid" align="center"></td>
    524     <td style="border:1px solid" align="center"></td>
    525     <td style="border:1px solid" align="center"></td>
    526     <td style="border:1px solid" align="center"></td>
    527     <td style="border:1px solid" align="center"></td>
    528     <td style="border:1px solid" align="center"></td>
    529     <td style="border:1px solid" align="center">decapsulate</td>
    530     <td style="border:1px solid" align="center"></td>
    531     <td style="border:1px solid" align="center"></td>
    532     <td style="border:1px solid" align="center"></td>
    533 </tr>
    534 <tr><th style="border:1px solid" align="left">EVP_PKEY_paramgen_init</th>
    535     <td style="border:1px solid" align="center"></td>
    536     <td style="border:1px solid" align="center">parameter<br>generation</td>
    537     <td style="border:1px solid" align="center">parameter<br>generation</td>
    538     <td style="border:1px solid" align="center">parameter<br>generation</td>
    539     <td style="border:1px solid" align="center">parameter<br>generation</td>
    540     <td style="border:1px solid" align="center">parameter<br>generation</td>
    541     <td style="border:1px solid" align="center">parameter<br>generation</td>
    542     <td style="border:1px solid" align="center">parameter<br>generation</td>
    543     <td style="border:1px solid" align="center">parameter<br>generation</td>
    544     <td style="border:1px solid" align="center">parameter<br>generation</td>
    545     <td style="border:1px solid" align="center">parameter<br>generation</td>
    546     <td style="border:1px solid" align="center">parameter<br>generation</td>
    547     <td style="border:1px solid" align="center"></td>
    548 </tr>
    549 <tr><th style="border:1px solid" align="left">EVP_PKEY_paramgen</th>
    550     <td style="border:1px solid" align="center"></td>
    551     <td style="border:1px solid" align="center"></td>
    552     <td style="border:1px solid" align="center"></td>
    553     <td style="border:1px solid" align="center"></td>
    554     <td style="border:1px solid" align="center"></td>
    555     <td style="border:1px solid" align="center"></td>
    556     <td style="border:1px solid" align="center"></td>
    557     <td style="border:1px solid" align="center"></td>
    558     <td style="border:1px solid" align="center"></td>
    559     <td style="border:1px solid" align="center"></td>
    560     <td style="border:1px solid" align="center">parameter<br>generation</td>
    561     <td style="border:1px solid" align="center"></td>
    562     <td style="border:1px solid" align="center"></td>
    563 </tr>
    564 <tr><th style="border:1px solid" align="left">EVP_PKEY_keygen_init</th>
    565     <td style="border:1px solid" align="center"></td>
    566     <td style="border:1px solid" align="center">key<br>generation</td>
    567     <td style="border:1px solid" align="center">key<br>generation</td>
    568     <td style="border:1px solid" align="center">key<br>generation</td>
    569     <td style="border:1px solid" align="center">key<br>generation</td>
    570     <td style="border:1px solid" align="center">key<br>generation</td>
    571     <td style="border:1px solid" align="center">key<br>generation</td>
    572     <td style="border:1px solid" align="center">key<br>generation</td>
    573     <td style="border:1px solid" align="center">key<br>generation</td>
    574     <td style="border:1px solid" align="center">key<br>generation</td>
    575     <td style="border:1px solid" align="center">key<br>generation</td>
    576     <td style="border:1px solid" align="center">key<br>generation</td>
    577     <td style="border:1px solid" align="center"></td>
    578 </tr>
    579 <tr><th style="border:1px solid" align="left">EVP_PKEY_keygen</th>
    580     <td style="border:1px solid" align="center"></td>
    581     <td style="border:1px solid" align="center"></td>
    582     <td style="border:1px solid" align="center"></td>
    583     <td style="border:1px solid" align="center"></td>
    584     <td style="border:1px solid" align="center"></td>
    585     <td style="border:1px solid" align="center"></td>
    586     <td style="border:1px solid" align="center"></td>
    587     <td style="border:1px solid" align="center"></td>
    588     <td style="border:1px solid" align="center"></td>
    589     <td style="border:1px solid" align="center"></td>
    590     <td style="border:1px solid" align="center"></td>
    591     <td style="border:1px solid" align="center">key<br>generation</td>
    592     <td style="border:1px solid" align="center"></td>
    593 </tr>
    594 <tr><th style="border:1px solid" align="left">EVP_PKEY_gen</th>
    595     <td style="border:1px solid" align="center"></td>
    596     <td style="border:1px solid" align="center"></td>
    597     <td style="border:1px solid" align="center"></td>
    598     <td style="border:1px solid" align="center"></td>
    599     <td style="border:1px solid" align="center"></td>
    600     <td style="border:1px solid" align="center"></td>
    601     <td style="border:1px solid" align="center"></td>
    602     <td style="border:1px solid" align="center"></td>
    603     <td style="border:1px solid" align="center"></td>
    604     <td style="border:1px solid" align="center"></td>
    605     <td style="border:1px solid" align="center">parameter<br>generation</td>
    606     <td style="border:1px solid" align="center">key<br>generation</td>
    607     <td style="border:1px solid" align="center"></td>
    608 </tr>
    609 <tr><th style="border:1px solid" align="left">EVP_PKEY_CTX_get_params</th>
    610     <td style="border:1px solid" align="center"></td>
    611     <td style="border:1px solid" align="center">newed</td>
    612     <td style="border:1px solid" align="center">digest<br>sign</td>
    613     <td style="border:1px solid" align="center">verify</td>
    614     <td style="border:1px solid" align="center">verify<br>recover</td>
    615     <td style="border:1px solid" align="center">encrypt</td>
    616     <td style="border:1px solid" align="center">decrypt</td>
    617     <td style="border:1px solid" align="center">derive</td>
    618     <td style="border:1px solid" align="center">encapsulate</td>
    619     <td style="border:1px solid" align="center">decapsulate</td>
    620     <td style="border:1px solid" align="center">parameter<br>generation</td>
    621     <td style="border:1px solid" align="center">key<br>generation</td>
    622     <td style="border:1px solid" align="center"></td>
    623 </tr>
    624 <tr><th style="border:1px solid" align="left">EVP_PKEY_CTX_set_params</th>
    625     <td style="border:1px solid" align="center"></td>
    626     <td style="border:1px solid" align="center">newed</td>
    627     <td style="border:1px solid" align="center">digest<br>sign</td>
    628     <td style="border:1px solid" align="center">verify</td>
    629     <td style="border:1px solid" align="center">verify<br>recover</td>
    630     <td style="border:1px solid" align="center">encrypt</td>
    631     <td style="border:1px solid" align="center">decrypt</td>
    632     <td style="border:1px solid" align="center">derive</td>
    633     <td style="border:1px solid" align="center">encapsulate</td>
    634     <td style="border:1px solid" align="center">decapsulate</td>
    635     <td style="border:1px solid" align="center">parameter<br>generation</td>
    636     <td style="border:1px solid" align="center">key<br>generation</td>
    637     <td style="border:1px solid" align="center"></td>
    638 </tr>
    639 <tr><th style="border:1px solid" align="left">EVP_PKEY_CTX_gettable_params</th>
    640     <td style="border:1px solid" align="center"></td>
    641     <td style="border:1px solid" align="center">newed</td>
    642     <td style="border:1px solid" align="center">digest<br>sign</td>
    643     <td style="border:1px solid" align="center">verify</td>
    644     <td style="border:1px solid" align="center">verify<br>recover</td>
    645     <td style="border:1px solid" align="center">encrypt</td>
    646     <td style="border:1px solid" align="center">decrypt</td>
    647     <td style="border:1px solid" align="center">derive</td>
    648     <td style="border:1px solid" align="center">encapsulate</td>
    649     <td style="border:1px solid" align="center">decapsulate</td>
    650     <td style="border:1px solid" align="center">parameter<br>generation</td>
    651     <td style="border:1px solid" align="center">key<br>generation</td>
    652     <td style="border:1px solid" align="center"></td>
    653 </tr>
    654 <tr><th style="border:1px solid" align="left">EVP_PKEY_CTX_settable_params</th>
    655     <td style="border:1px solid" align="center"></td>
    656     <td style="border:1px solid" align="center">newed</td>
    657     <td style="border:1px solid" align="center">digest<br>sign</td>
    658     <td style="border:1px solid" align="center">verify</td>
    659     <td style="border:1px solid" align="center">verify<br>recover</td>
    660     <td style="border:1px solid" align="center">encrypt</td>
    661     <td style="border:1px solid" align="center">decrypt</td>
    662     <td style="border:1px solid" align="center">derive</td>
    663     <td style="border:1px solid" align="center">encapsulate</td>
    664     <td style="border:1px solid" align="center">decapsulate</td>
    665     <td style="border:1px solid" align="center">parameter<br>generation</td>
    666     <td style="border:1px solid" align="center">key<br>generation</td>
    667     <td style="border:1px solid" align="center"></td>
    668 </tr>
    669 <tr><th style="border:1px solid" align="left">EVP_PKEY_CTX_free</th>
    670     <td style="border:1px solid" align="center">freed</td>
    671     <td style="border:1px solid" align="center">freed</td>
    672     <td style="border:1px solid" align="center">freed</td>
    673     <td style="border:1px solid" align="center">freed</td>
    674     <td style="border:1px solid" align="center">freed</td>
    675     <td style="border:1px solid" align="center">freed</td>
    676     <td style="border:1px solid" align="center">freed</td>
    677     <td style="border:1px solid" align="center">freed</td>
    678     <td style="border:1px solid" align="center">freed</td>
    679     <td style="border:1px solid" align="center">freed</td>
    680     <td style="border:1px solid" align="center">freed</td>
    681     <td style="border:1px solid" align="center">freed</td>
    682     <td style="border:1px solid" align="center"></td>
    683 </tr>
    684 </table>
    685 
    686 =end html
    687 
    688 =head1 NOTES
    689 
    690 At some point the EVP layer will begin enforcing the transitions described
    691 herein.
    692 
    693 =head1 SEE ALSO
    694 
    695 L<EVP_PKEY_new(3)>,
    696 L<EVP_PKEY_decapsulate(3)>, L<EVP_PKEY_decrypt(3)>, L<EVP_PKEY_encapsulate(3)>,
    697 L<EVP_PKEY_encrypt(3)>, L<EVP_PKEY_derive(3)>, L<EVP_PKEY_keygen(3)>,
    698 L<EVP_PKEY_sign(3)>, L<EVP_PKEY_verify(3)>, L<EVP_PKEY_verify_recover(3)>
    699 
    700 =head1 HISTORY
    701 
    702 The provider PKEY interface was introduced in OpenSSL 3.0.
    703 
    704 =head1 COPYRIGHT
    705 
    706 Copyright 2021-2022 The OpenSSL Project Authors. All Rights Reserved.
    707 
    708 Licensed under the Apache License 2.0 (the "License").  You may not use
    709 this file except in compliance with the License.  You can obtain a copy
    710 in the file LICENSE in the source distribution or at
    711 L<https://www.openssl.org/source/license.html>.
    712 
    713 =cut
    714