Blame doc/man3/EVP_CIPHER_meth_new.pod

Packit Service 084de1
=pod
Packit Service 084de1
Packit Service 084de1
=head1 NAME
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_new, EVP_CIPHER_meth_dup, EVP_CIPHER_meth_free,
Packit Service 084de1
EVP_CIPHER_meth_set_iv_length, EVP_CIPHER_meth_set_flags,
Packit Service 084de1
EVP_CIPHER_meth_set_impl_ctx_size, EVP_CIPHER_meth_set_init,
Packit Service 084de1
EVP_CIPHER_meth_set_do_cipher, EVP_CIPHER_meth_set_cleanup,
Packit Service 084de1
EVP_CIPHER_meth_set_set_asn1_params, EVP_CIPHER_meth_set_get_asn1_params,
Packit Service 084de1
EVP_CIPHER_meth_set_ctrl, EVP_CIPHER_meth_get_init,
Packit Service 084de1
EVP_CIPHER_meth_get_do_cipher, EVP_CIPHER_meth_get_cleanup,
Packit Service 084de1
EVP_CIPHER_meth_get_set_asn1_params, EVP_CIPHER_meth_get_get_asn1_params,
Packit Service 084de1
EVP_CIPHER_meth_get_ctrl - Routines to build up EVP_CIPHER methods
Packit Service 084de1
Packit Service 084de1
=head1 SYNOPSIS
Packit Service 084de1
Packit Service 084de1
 #include <openssl/evp.h>
Packit Service 084de1
Packit Service 084de1
 EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len);
Packit Service 084de1
 EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher);
Packit Service 084de1
 void EVP_CIPHER_meth_free(EVP_CIPHER *cipher);
Packit Service 084de1
Packit Service 084de1
 int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len);
Packit Service 084de1
 int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags);
Packit Service 084de1
 int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size);
Packit Service 084de1
 int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher,
Packit Service 084de1
                              int (*init)(EVP_CIPHER_CTX *ctx,
Packit Service 084de1
                                          const unsigned char *key,
Packit Service 084de1
                                          const unsigned char *iv,
Packit Service 084de1
                                          int enc));
Packit Service 084de1
 int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher,
Packit Service 084de1
                                   int (*do_cipher)(EVP_CIPHER_CTX *ctx,
Packit Service 084de1
                                                    unsigned char *out,
Packit Service 084de1
                                                    const unsigned char *in,
Packit Service 084de1
                                                    size_t inl));
Packit Service 084de1
 int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher,
Packit Service 084de1
                                 int (*cleanup)(EVP_CIPHER_CTX *));
Packit Service 084de1
 int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher,
Packit Service 084de1
                                         int (*set_asn1_parameters)(EVP_CIPHER_CTX *,
Packit Service 084de1
                                                                    ASN1_TYPE *));
Packit Service 084de1
 int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher,
Packit Service 084de1
                                         int (*get_asn1_parameters)(EVP_CIPHER_CTX *,
Packit Service 084de1
                                                                    ASN1_TYPE *));
Packit Service 084de1
 int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher,
Packit Service 084de1
                              int (*ctrl)(EVP_CIPHER_CTX *, int type,
Packit Service 084de1
                                          int arg, void *ptr));
Packit Service 084de1
Packit Service 084de1
 int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx,
Packit Service 084de1
                                                           const unsigned char *key,
Packit Service 084de1
                                                           const unsigned char *iv,
Packit Service 084de1
                                                           int enc);
Packit Service 084de1
 int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx,
Packit Service 084de1
                                                                unsigned char *out,
Packit Service 084de1
                                                                const unsigned char *in,
Packit Service 084de1
                                                                size_t inl);
Packit Service 084de1
 int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *);
Packit Service 084de1
 int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
Packit Service 084de1
                                                                      ASN1_TYPE *);
Packit Service 084de1
 int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
Packit Service 084de1
                                                                      ASN1_TYPE *);
Packit Service 084de1
 int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
Packit Service 084de1
                                                           int type, int arg,
Packit Service 084de1
                                                           void *ptr);
Packit Service 084de1
Packit Service 084de1
=head1 DESCRIPTION
Packit Service 084de1
Packit Service 084de1
The B<EVP_CIPHER> type is a structure for symmetric cipher method
Packit Service 084de1
implementation.
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_new() creates a new B<EVP_CIPHER> structure.
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_dup() creates a copy of B<cipher>.
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_free() destroys a B<EVP_CIPHER> structure.
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_set_iv_length() sets the length of the IV.
Packit Service 084de1
This is only needed when the implemented cipher mode requires it.
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_set_flags() sets the flags to describe optional
Packit Service 084de1
behaviours in the particular B<cipher>.
Packit Service 084de1
With the exception of cipher modes, of which only one may be present,
Packit Service 084de1
several flags can be or'd together.
Packit Service 084de1
The available flags are:
Packit Service 084de1
Packit Service 084de1
=over 4
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_STREAM_CIPHER, EVP_CIPH_ECB_MODE EVP_CIPH_CBC_MODE,
Packit Service 084de1
EVP_CIPH_CFB_MODE, EVP_CIPH_OFB_MODE, EVP_CIPH_CTR_MODE, EVP_CIPH_GCM_MODE,
Packit Service 084de1
EVP_CIPH_CCM_MODE, EVP_CIPH_XTS_MODE, EVP_CIPH_WRAP_MODE,
Packit Service 084de1
EVP_CIPH_OCB_MODE
Packit Service 084de1
Packit Service 084de1
The cipher mode.
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_VARIABLE_LENGTH
Packit Service 084de1
Packit Service 084de1
This cipher is of variable length.
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_CUSTOM_IV
Packit Service 084de1
Packit Service 084de1
Storing and initialising the IV is left entirely to the
Packit Service 084de1
implementation.
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_ALWAYS_CALL_INIT
Packit Service 084de1
Packit Service 084de1
Set this if the implementation's init() function should be called even
Packit Service 084de1
if B<key> is B<NULL>.
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_CTRL_INIT
Packit Service 084de1
Packit Service 084de1
Set this to have the implementation's ctrl() function called with
Packit Service 084de1
command code B<EVP_CTRL_INIT> early in its setup.
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_CUSTOM_KEY_LENGTH
Packit Service 084de1
Packit Service 084de1
Checking and setting the key length after creating the B<EVP_CIPHER>
Packit Service 084de1
is left to the implementation.
Packit Service 084de1
Whenever someone uses EVP_CIPHER_CTX_set_key_length() on a
Packit Service 084de1
B<EVP_CIPHER> with this flag set, the implementation's ctrl() function
Packit Service 084de1
will be called with the control code B<EVP_CTRL_SET_KEY_LENGTH> and
Packit Service 084de1
the key length in B<arg>.
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_NO_PADDING
Packit Service 084de1
Packit Service 084de1
Don't use standard block padding.
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_RAND_KEY
Packit Service 084de1
Packit Service 084de1
Making a key with random content is left to the implementation.
Packit Service 084de1
This is done by calling the implementation's ctrl() function with the
Packit Service 084de1
control code B<EVP_CTRL_RAND_KEY> and the pointer to the key memory
Packit Service 084de1
storage in B<ptr>.
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_CUSTOM_COPY
Packit Service 084de1
Packit Service 084de1
Set this to have the implementation's ctrl() function called with
Packit Service 084de1
command code B<EVP_CTRL_COPY> at the end of EVP_CIPHER_CTX_copy().
Packit Service 084de1
The intended use is for further things to deal with after the
Packit Service 084de1
implementation specific data block has been copied.
Packit Service 084de1
The destination B<EVP_CIPHER_CTX> is passed to the control with the
Packit Service 084de1
B<ptr> parameter.
Packit Service 084de1
The implementation specific data block is reached with
Packit Service 084de1
EVP_CIPHER_CTX_get_cipher_data().
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_FLAG_DEFAULT_ASN1
Packit Service 084de1
Packit Service 084de1
Use the default EVP routines to pass IV to and from ASN.1.
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_FLAG_LENGTH_BITS
Packit Service 084de1
Packit Service 084de1
Signals that the length of the input buffer for encryption /
Packit Service 084de1
decryption is to be understood as the number of bits instead of
Packit Service 084de1
bytes for this implementation.
Packit Service 084de1
This is only useful for CFB1 ciphers.
Packit Service 084de1
Packit Service 084de1
=begin comment
Packit Service 084de1
The FIPS flags seem to be unused, so I'm hiding them until I get an
Packit Service 084de1
explanation or they get removed.  /RL
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_FLAG_FIPS
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_FLAG_NON_FIPS_ALLOW
Packit Service 084de1
Packit Service 084de1
=end comment
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_FLAG_CUSTOM_CIPHER
Packit Service 084de1
Packit Service 084de1
This indicates that the implementation takes care of everything,
Packit Service 084de1
including padding, buffering and finalization.
Packit Service 084de1
The EVP routines will simply give them control and do nothing more.
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_FLAG_AEAD_CIPHER
Packit Service 084de1
Packit Service 084de1
This indicates that this is an AEAD cipher implementation.
Packit Service 084de1
Packit Service 084de1
=item EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
Packit Service 084de1
Packit Service 084de1
Allow interleaving of crypto blocks, a particular optimization only applicable
Packit Service 084de1
to certain TLS ciphers.
Packit Service 084de1
Packit Service 084de1
=back
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_set_impl_ctx_size() sets the size of the EVP_CIPHER's
Packit Service 084de1
implementation context so that it can be automatically allocated.
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_set_init() sets the cipher init function for
Packit Service 084de1
B<cipher>.
Packit Service 084de1
The cipher init function is called by EVP_CipherInit(),
Packit Service 084de1
EVP_CipherInit_ex(), EVP_EncryptInit(), EVP_EncryptInit_ex(),
Packit Service 084de1
EVP_DecryptInit(), EVP_DecryptInit_ex().
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_set_do_cipher() sets the cipher function for
Packit Service 084de1
B<cipher>.
Packit Service 084de1
The cipher function is called by EVP_CipherUpdate(),
Packit Service 084de1
EVP_EncryptUpdate(), EVP_DecryptUpdate(), EVP_CipherFinal(),
Packit Service 084de1
EVP_EncryptFinal(), EVP_EncryptFinal_ex(), EVP_DecryptFinal() and
Packit Service 084de1
EVP_DecryptFinal_ex().
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_set_cleanup() sets the function for B<cipher> to do
Packit Service 084de1
extra cleanup before the method's private data structure is cleaned
Packit Service 084de1
out and freed.
Packit Service 084de1
Note that the cleanup function is passed a B<EVP_CIPHER_CTX *>, the
Packit Service 084de1
private data structure is then available with
Packit Service 084de1
EVP_CIPHER_CTX_get_cipher_data().
Packit Service 084de1
This cleanup function is called by EVP_CIPHER_CTX_reset() and
Packit Service 084de1
EVP_CIPHER_CTX_free().
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_set_set_asn1_params() sets the function for B<cipher>
Packit Service 084de1
to set the AlgorithmIdentifier "parameter" based on the passed cipher.
Packit Service 084de1
This function is called by EVP_CIPHER_param_to_asn1().
Packit Service 084de1
EVP_CIPHER_meth_set_get_asn1_params() sets the function for B<cipher>
Packit Service 084de1
that sets the cipher parameters based on an ASN.1 AlgorithmIdentifier
Packit Service 084de1
"parameter".
Packit Service 084de1
Both these functions are needed when there is a need for custom data
Packit Service 084de1
(more or other than the cipher IV).
Packit Service 084de1
They are called by EVP_CIPHER_param_to_asn1() and
Packit Service 084de1
EVP_CIPHER_asn1_to_param() respectively if defined.
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_set_ctrl() sets the control function for B<cipher>.
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_get_init(), EVP_CIPHER_meth_get_do_cipher(),
Packit Service 084de1
EVP_CIPHER_meth_get_cleanup(), EVP_CIPHER_meth_get_set_asn1_params(),
Packit Service 084de1
EVP_CIPHER_meth_get_get_asn1_params() and EVP_CIPHER_meth_get_ctrl()
Packit Service 084de1
are all used to retrieve the method data given with the
Packit Service 084de1
EVP_CIPHER_meth_set_*() functions above.
Packit Service 084de1
Packit Service 084de1
=head1 RETURN VALUES
Packit Service 084de1
Packit Service 084de1
EVP_CIPHER_meth_new() and EVP_CIPHER_meth_dup() return a pointer to a
Packit Service 084de1
newly created B<EVP_CIPHER>, or NULL on failure.
Packit Service 084de1
All EVP_CIPHER_meth_set_*() functions return 1.
Packit Service 084de1
All EVP_CIPHER_meth_get_*() functions return pointers to their
Packit Service 084de1
respective B<cipher> function.
Packit Service 084de1
Packit Service 084de1
=head1 SEE ALSO
Packit Service 084de1
Packit Service 084de1
L<EVP_EncryptInit>
Packit Service 084de1
Packit Service 084de1
=head1 HISTORY
Packit Service 084de1
Packit Service 084de1
The functions described here were added in OpenSSL 1.1.0.
Packit Service 084de1
Packit Service 084de1
=head1 COPYRIGHT
Packit Service 084de1
Packit Service 084de1
Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
Packit Service 084de1
Packit Service 084de1
Licensed under the OpenSSL license (the "License").  You may not use
Packit Service 084de1
this file except in compliance with the License.  You can obtain a copy
Packit Service 084de1
in the file LICENSE in the source distribution or at
Packit Service 084de1
L<https://www.openssl.org/source/license.html>.
Packit Service 084de1
Packit Service 084de1
=cut