initial decription of GCM/CCM usage via EVP
This commit is contained in:
parent
68c06bf6b2
commit
aa714f3af4
@ -231,8 +231,7 @@ or the parameters cannot be set (for example the RC2 effective key length
|
|||||||
is not supported.
|
is not supported.
|
||||||
|
|
||||||
EVP_CIPHER_CTX_ctrl() allows various cipher specific parameters to be determined
|
EVP_CIPHER_CTX_ctrl() allows various cipher specific parameters to be determined
|
||||||
and set. Currently only the RC2 effective key length and the number of rounds of
|
and set.
|
||||||
RC5 can be set.
|
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
@ -338,8 +337,88 @@ RC5 encryption algorithm in CBC, ECB, CFB and OFB modes respectively. This is a
|
|||||||
cipher with an additional "number of rounds" parameter. By default the key length is set to 128
|
cipher with an additional "number of rounds" parameter. By default the key length is set to 128
|
||||||
bits and 12 rounds.
|
bits and 12 rounds.
|
||||||
|
|
||||||
|
=item EVP_aes_128_gcm(void), EVP_aes_192_gcm(void), EVP_aes_256_gcm(void)
|
||||||
|
|
||||||
|
AES Galois Counter Mode (GCM) for 128, 192 and 256 bit keys respectively.
|
||||||
|
These ciphers require additional control operations to function correctly: see
|
||||||
|
L<GCM mode> section below for details.
|
||||||
|
|
||||||
|
=item EVP_aes_128_ccm(void), EVP_aes_192_ccm(void), EVP_aes_256_ccm(void)
|
||||||
|
|
||||||
|
AES Counter with CBC-MAC Mode (CCM) for 128, 192 and 256 bit keys respectively.
|
||||||
|
These ciphers require additional control operations to function correctly: see
|
||||||
|
CCM mode section below for details.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head1 GCM Mode
|
||||||
|
|
||||||
|
For GCM mode ciphers the behaviour of the EVP interface is subtly altered and
|
||||||
|
several GCM specific ctrl operations are supported.
|
||||||
|
|
||||||
|
To specify any additional authenticated data (AAD) a call to EVP_CipherUpdate(),
|
||||||
|
EVP_EncryptUpdate() or EVP_DecryptUpdate() should be made with the output
|
||||||
|
parameter B<out> set to B<NULL>.
|
||||||
|
|
||||||
|
When decrypting the return value of EVP_DecryptFinal() or EVP_CipherFinal()
|
||||||
|
indicates if the operation was successful. If it does not indicate success
|
||||||
|
the authentication operation has failed and any output data B<MUST NOT>
|
||||||
|
be used as it is corrupted.
|
||||||
|
|
||||||
|
The following ctrls are supported in GCM mode:
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, ivlen, NULL);
|
||||||
|
|
||||||
|
Sets the GCM IV length: this call can only be made before specifying an IV. If
|
||||||
|
not called a default IV length is used (96 bits for AES).
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, taglen, tag);
|
||||||
|
|
||||||
|
Writes B<taglen> bytes of the tag value to the buffer indicated by B<tag>.
|
||||||
|
This call can only be made when encrypting data and B<after> all data has been
|
||||||
|
processed (e.g. after an EVP_EncryptFinal() call).
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, taglen, tag);
|
||||||
|
|
||||||
|
Sets the expected tag to B<taglen> bytes from B<tag>. This call is only legal
|
||||||
|
when decrypting data and must be made B<before> any data is processed (e.g.
|
||||||
|
before any EVP_DecryptUpdate() call).
|
||||||
|
|
||||||
|
See L<EXAMPLES> below for an example of the use of GCM mode.
|
||||||
|
|
||||||
|
=head1 CCM Mode
|
||||||
|
|
||||||
|
The behaviour of CCM mode ciphers is similar to CCM mode but with a few
|
||||||
|
additional requirements and different ctrl values.
|
||||||
|
|
||||||
|
Like GCM mode any additional authenticated data (AAD) is passed by calling
|
||||||
|
EVP_CipherUpdate(), EVP_EncryptUpdate() or EVP_DecryptUpdate() with the output
|
||||||
|
parameter B<out> set to B<NULL>. Additionally the total plaintext or ciphertext
|
||||||
|
length B<MUST> be passed to EVP_CipherUpdate(), EVP_EncryptUpdate() or
|
||||||
|
EVP_DecryptUpdate() with the output and input parameters (B<in> and B<out>)
|
||||||
|
set to B<NULL> and the length passed in the B<inl> parameter.
|
||||||
|
|
||||||
|
The following ctrls are supported in CCM mode:
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG, taglen, tag);
|
||||||
|
|
||||||
|
This call is made to set the expected B<CCM> tag value when decrypting or
|
||||||
|
the length of the tag (with the B<tag> parameter set to NULL) when encrypting.
|
||||||
|
The tag length is often referred to as B<M>. If not set a default value is
|
||||||
|
used (12 for AES).
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_L, ivlen, NULL);
|
||||||
|
|
||||||
|
Sets the CCM B<L> value. If not set a default is used (8 for AES).
|
||||||
|
|
||||||
|
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_IVLEN, ivlen, NULL);
|
||||||
|
|
||||||
|
Sets the CCM nonce (IV) length: this call can only be made before specifying
|
||||||
|
an nonce value. The nonce length is given by B<15 - L> so it is 7 by default
|
||||||
|
for AES.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
Where possible the B<EVP> interface to symmetric ciphers should be used in
|
Where possible the B<EVP> interface to symmetric ciphers should be used in
|
||||||
|
Loading…
x
Reference in New Issue
Block a user