1*b077aed3SPierre Pronchery=pod 2*b077aed3SPierre Pronchery 3*b077aed3SPierre Pronchery=head1 NAME 4*b077aed3SPierre Pronchery 5*b077aed3SPierre Proncherylife_cycle-kdf - The KDF algorithm life-cycle 6*b077aed3SPierre Pronchery 7*b077aed3SPierre Pronchery=head1 DESCRIPTION 8*b077aed3SPierre Pronchery 9*b077aed3SPierre ProncheryAll key derivation functions (KDFs) and pseudo random functions (PRFs) 10*b077aed3SPierre Proncherygo through a number of stages in their life-cycle: 11*b077aed3SPierre Pronchery 12*b077aed3SPierre Pronchery=over 4 13*b077aed3SPierre Pronchery 14*b077aed3SPierre Pronchery=item start 15*b077aed3SPierre Pronchery 16*b077aed3SPierre ProncheryThis state represents the KDF/PRF before it has been allocated. It is the 17*b077aed3SPierre Proncherystarting state for any life-cycle transitions. 18*b077aed3SPierre Pronchery 19*b077aed3SPierre Pronchery=item newed 20*b077aed3SPierre Pronchery 21*b077aed3SPierre ProncheryThis state represents the KDF/PRF after it has been allocated. 22*b077aed3SPierre Pronchery 23*b077aed3SPierre Pronchery=item deriving 24*b077aed3SPierre Pronchery 25*b077aed3SPierre ProncheryThis state represents the KDF/PRF when it is set up and capable of generating 26*b077aed3SPierre Proncheryoutput. 27*b077aed3SPierre Pronchery 28*b077aed3SPierre Pronchery=item freed 29*b077aed3SPierre Pronchery 30*b077aed3SPierre ProncheryThis state is entered when the KDF/PRF is freed. It is the terminal state 31*b077aed3SPierre Proncheryfor all life-cycle transitions. 32*b077aed3SPierre Pronchery 33*b077aed3SPierre Pronchery=back 34*b077aed3SPierre Pronchery 35*b077aed3SPierre Pronchery=head2 State Transition Diagram 36*b077aed3SPierre Pronchery 37*b077aed3SPierre ProncheryThe usual life-cycle of a KDF/PRF is illustrated: 38*b077aed3SPierre Pronchery 39*b077aed3SPierre Pronchery=begin man 40*b077aed3SPierre Pronchery 41*b077aed3SPierre Pronchery +-------------------+ 42*b077aed3SPierre Pronchery | start | 43*b077aed3SPierre Pronchery +-------------------+ 44*b077aed3SPierre Pronchery | 45*b077aed3SPierre Pronchery | EVP_KDF_CTX_new 46*b077aed3SPierre Pronchery v 47*b077aed3SPierre Pronchery +-------------------+ 48*b077aed3SPierre Pronchery | newed | <+ 49*b077aed3SPierre Pronchery +-------------------+ | 50*b077aed3SPierre Pronchery | | 51*b077aed3SPierre Pronchery | EVP_KDF_derive | 52*b077aed3SPierre Pronchery v | EVP_KDF_CTX_reset 53*b077aed3SPierre Pronchery EVP_KDF_derive +-------------------+ | 54*b077aed3SPierre Pronchery + - - - - - - - - | | | 55*b077aed3SPierre Pronchery ' | deriving | | 56*b077aed3SPierre Pronchery + - - - - - - - -> | | -+ 57*b077aed3SPierre Pronchery +-------------------+ 58*b077aed3SPierre Pronchery | 59*b077aed3SPierre Pronchery | EVP_KDF_CTX_free 60*b077aed3SPierre Pronchery v 61*b077aed3SPierre Pronchery +-------------------+ 62*b077aed3SPierre Pronchery | freed | 63*b077aed3SPierre Pronchery +-------------------+ 64*b077aed3SPierre Pronchery 65*b077aed3SPierre Pronchery=end man 66*b077aed3SPierre Pronchery 67*b077aed3SPierre Pronchery=for html <img src="img/kdf.png"> 68*b077aed3SPierre Pronchery 69*b077aed3SPierre Pronchery=head2 Formal State Transitions 70*b077aed3SPierre Pronchery 71*b077aed3SPierre ProncheryThis section defines all of the legal state transitions. 72*b077aed3SPierre ProncheryThis is the canonical list. 73*b077aed3SPierre Pronchery 74*b077aed3SPierre Pronchery=begin man 75*b077aed3SPierre Pronchery 76*b077aed3SPierre Pronchery Function Call ------------- Current State ------------- 77*b077aed3SPierre Pronchery start newed deriving freed 78*b077aed3SPierre Pronchery EVP_KDF_CTX_new newed 79*b077aed3SPierre Pronchery EVP_KDF_derive deriving deriving 80*b077aed3SPierre Pronchery EVP_KDF_CTX_free freed freed freed 81*b077aed3SPierre Pronchery EVP_KDF_CTX_reset newed newed 82*b077aed3SPierre Pronchery EVP_KDF_CTX_get_params newed deriving 83*b077aed3SPierre Pronchery EVP_KDF_CTX_set_params newed deriving 84*b077aed3SPierre Pronchery EVP_KDF_CTX_gettable_params newed deriving 85*b077aed3SPierre Pronchery EVP_KDF_CTX_settable_params newed deriving 86*b077aed3SPierre Pronchery 87*b077aed3SPierre Pronchery=end man 88*b077aed3SPierre Pronchery 89*b077aed3SPierre Pronchery=begin html 90*b077aed3SPierre Pronchery 91*b077aed3SPierre Pronchery<table style="border:1px solid; border-collapse:collapse"> 92*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">Function Call</th> 93*b077aed3SPierre Pronchery <th style="border:1px solid" colspan="4">Current State</th></tr> 94*b077aed3SPierre Pronchery<tr><th style="border:1px solid"></th> 95*b077aed3SPierre Pronchery <th style="border:1px solid" align="center">start</th> 96*b077aed3SPierre Pronchery <th style="border:1px solid" align="center">newed</th> 97*b077aed3SPierre Pronchery <th style="border:1px solid" align="center">deriving</th> 98*b077aed3SPierre Pronchery <th style="border:1px solid" align="center">freed</th></tr> 99*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_new</th> 100*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">newed</td> 101*b077aed3SPierre Pronchery <td style="border:1px solid"></td> 102*b077aed3SPierre Pronchery <td style="border:1px solid"></td> 103*b077aed3SPierre Pronchery <td style="border:1px solid"></td></tr> 104*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_derive</th> 105*b077aed3SPierre Pronchery <td style="border:1px solid" align="center"></td> 106*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">deriving</td> 107*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">deriving</td> 108*b077aed3SPierre Pronchery <td style="border:1px solid"></td></tr> 109*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_free</th> 110*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">freed</td> 111*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">freed</td> 112*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">freed</td> 113*b077aed3SPierre Pronchery <td style="border:1px solid"></td></tr> 114*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_reset</th> 115*b077aed3SPierre Pronchery <td style="border:1px solid" align="center"></td> 116*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">newed</td> 117*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">newed</td> 118*b077aed3SPierre Pronchery <td style="border:1px solid"></td></tr> 119*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_get_params</th> 120*b077aed3SPierre Pronchery <td style="border:1px solid" align="center"></td> 121*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">newed</td> 122*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">deriving</td> 123*b077aed3SPierre Pronchery <td style="border:1px solid"></td></tr> 124*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_set_params</th> 125*b077aed3SPierre Pronchery <td style="border:1px solid" align="center"></td> 126*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">newed</td> 127*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">deriving</td> 128*b077aed3SPierre Pronchery <td style="border:1px solid"></td></tr> 129*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_gettable_params</th> 130*b077aed3SPierre Pronchery <td style="border:1px solid" align="center"></td> 131*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">newed</td> 132*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">deriving</td> 133*b077aed3SPierre Pronchery <td style="border:1px solid"></td></tr> 134*b077aed3SPierre Pronchery<tr><th style="border:1px solid" align="left">EVP_KDF_CTX_settable_params</th> 135*b077aed3SPierre Pronchery <td style="border:1px solid" align="center"></td> 136*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">newed</td> 137*b077aed3SPierre Pronchery <td style="border:1px solid" align="center">deriving</td> 138*b077aed3SPierre Pronchery <td style="border:1px solid"></td></tr> 139*b077aed3SPierre Pronchery</table> 140*b077aed3SPierre Pronchery 141*b077aed3SPierre Pronchery=end html 142*b077aed3SPierre Pronchery 143*b077aed3SPierre Pronchery=head1 NOTES 144*b077aed3SPierre Pronchery 145*b077aed3SPierre ProncheryAt some point the EVP layer will begin enforcing the transitions described 146*b077aed3SPierre Proncheryherein. 147*b077aed3SPierre Pronchery 148*b077aed3SPierre Pronchery=head1 SEE ALSO 149*b077aed3SPierre Pronchery 150*b077aed3SPierre ProncheryL<provider-kdf(7)>, L<EVP_KDF(3)>. 151*b077aed3SPierre Pronchery 152*b077aed3SPierre Pronchery=head1 HISTORY 153*b077aed3SPierre Pronchery 154*b077aed3SPierre ProncheryThe provider KDF interface was introduced in OpenSSL 3.0. 155*b077aed3SPierre Pronchery 156*b077aed3SPierre Pronchery=head1 COPYRIGHT 157*b077aed3SPierre Pronchery 158*b077aed3SPierre ProncheryCopyright 2021 The OpenSSL Project Authors. All Rights Reserved. 159*b077aed3SPierre Pronchery 160*b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License"). You may not use 161*b077aed3SPierre Proncherythis file except in compliance with the License. You can obtain a copy 162*b077aed3SPierre Proncheryin the file LICENSE in the source distribution or at 163*b077aed3SPierre ProncheryL<https://www.openssl.org/source/license.html>. 164*b077aed3SPierre Pronchery 165*b077aed3SPierre Pronchery=cut 166