Latest update
This commit is contained in:
@@ -0,0 +1,342 @@
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
EVP_MAC, EVP_MAC_CTX, EVP_MAC_CTX_new, EVP_MAC_CTX_new_id, EVP_MAC_CTX_free,
|
||||
EVP_MAC_CTX_copy, EVP_MAC_CTX_mac, EVP_MAC_size, EVP_MAC_init, EVP_MAC_update,
|
||||
EVP_MAC_final, EVP_MAC_ctrl, EVP_MAC_vctrl, EVP_MAC_ctrl_str,
|
||||
EVP_MAC_str2ctrl, EVP_MAC_hex2ctrl, EVP_MAC_nid, EVP_MAC_name,
|
||||
EVP_get_macbyname, EVP_get_macbynid, EVP_get_macbyobj - EVP MAC routines
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
#include <openssl/evp.h>
|
||||
|
||||
typedef struct evp_mac_st EVP_MAC;
|
||||
typedef struct evp_mac_ctx_st EVP_MAC_CTX;
|
||||
|
||||
EVP_MAC_CTX *EVP_MAC_CTX_new(const EVP_MAC *mac);
|
||||
EVP_MAC_CTX *EVP_MAC_CTX_new_id(int nid);
|
||||
void EVP_MAC_CTX_free(EVP_MAC_CTX *ctx);
|
||||
int EVP_MAC_CTX_copy(EVP_MAC_CTX *dest, EVP_MAC_CTX *src);
|
||||
const EVP_MAC *EVP_MAC_CTX_mac(EVP_MAC_CTX *ctx);
|
||||
size_t EVP_MAC_size(EVP_MAC_CTX *ctx);
|
||||
int EVP_MAC_init(EVP_MAC_CTX *ctx);
|
||||
int EVP_MAC_update(EVP_MAC_CTX *ctx, const unsigned char *data, size_t datalen);
|
||||
int EVP_MAC_final(EVP_MAC_CTX *ctx, unsigned char *out, size_t *poutlen);
|
||||
int EVP_MAC_ctrl(EVP_MAC_CTX *ctx, int cmd, ...);
|
||||
int EVP_MAC_vctrl(EVP_MAC_CTX *ctx, int cmd, va_list args);
|
||||
int EVP_MAC_ctrl_str(EVP_MAC_CTX *ctx, const char *type, const char *value);
|
||||
int EVP_MAC_str2ctrl(EVP_MAC_CTX *ctx, int cmd, const char *value);
|
||||
int EVP_MAC_hex2ctrl(EVP_MAC_CTX *ctx, int cmd, const char *value);
|
||||
int EVP_MAC_nid(const EVP_MAC *mac);
|
||||
const char *EVP_MAC_name(const EVP_MAC *mac);
|
||||
const EVP_MAC *EVP_get_macbyname(const char *name);
|
||||
const EVP_MAC *EVP_get_macbynid(int nid);
|
||||
const EVP_MAC *EVP_get_macbyobj(const ASN1_OBJECT *o);
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
These types and functions help the application to calculate MACs of
|
||||
different types and with different underlying algorithms if there are
|
||||
any.
|
||||
|
||||
MACs are a bit complex insofar that some of them use other algorithms
|
||||
for actual computation. HMAC uses a digest, and CMAC uses a cipher.
|
||||
Therefore, there are sometimes two contexts to keep track of, one for
|
||||
the MAC algorithm itself and one for the underlying computation
|
||||
algorithm if there is one.
|
||||
|
||||
To make things less ambiguous, this manual talks about a "context" or
|
||||
"MAC context", which is to denote the MAC level context, and about a
|
||||
"underlying context", or "computation context", which is to denote the
|
||||
context for the underlying computation algorithm if there is one.
|
||||
|
||||
=head2 Types
|
||||
|
||||
B<EVP_MAC> is a type that holds the implementation of a MAC.
|
||||
|
||||
B<EVP_MAC_CTX> is a context type that holds internal MAC information
|
||||
as well as a reference to a computation context, for those MACs that
|
||||
rely on an underlying computation algorithm.
|
||||
|
||||
=head2 Context manipulation functions
|
||||
|
||||
EVP_MAC_CTX_new() creates a new context for the MAC type C<mac>.
|
||||
EVP_MAC_CTX_new_id() creates a new context for the numerical MAC
|
||||
identity <nid>.
|
||||
The created context can then be used with most other functions
|
||||
described here.
|
||||
|
||||
EVP_MAC_CTX_free() frees the contents of the context, including an
|
||||
underlying context if there is one, as well as the context itself.
|
||||
B<NULL> is a valid parameter, for which this function is a no-op.
|
||||
|
||||
EVP_MAC_CTX_copy() makes a deep copy of the C<src> context to the
|
||||
C<dest> context.
|
||||
The C<dest> context I<must> have been created before calling this
|
||||
function.
|
||||
|
||||
EVP_MAC_CTX_mac() returns the B<EVP_MAC> associated with the context
|
||||
C<ctx>.
|
||||
|
||||
=head2 Computing functions
|
||||
|
||||
EVP_MAC_init() sets up the underlying context with information given
|
||||
through diverse controls.
|
||||
This should be called before calling EVP_MAC_update() and
|
||||
EVP_MAC_final().
|
||||
|
||||
EVP_MAC_reset() resets the computation for the given context.
|
||||
This may not be supported by the MAC implementation.
|
||||
|
||||
EVP_MAC_update() adds C<datalen> bytes from C<data> to the MAC input.
|
||||
|
||||
EVP_MAC_final() does the final computation and stores the result in
|
||||
the memory pointed at by C<out>, and sets its size in the B<size_t>
|
||||
the C<poutlen> points at.
|
||||
If C<out> is B<NULL>, then no computation is made.
|
||||
To figure out what the output length will be and allocate space for it
|
||||
dynamically, simply call with C<out> being B<NULL> and C<poutlen>
|
||||
pointing at a valid location, then allocate space and make a second
|
||||
call with C<out> pointing at the allocated space.
|
||||
|
||||
EVP_MAC_ctrl() is used to manipulate or get information on aspects of
|
||||
the MAC which may vary depending on the MAC algorithm or its
|
||||
implementation.
|
||||
This includes the MAC key, and for MACs that use other algorithms to
|
||||
do their computation, this is also the way to tell it which one to
|
||||
use.
|
||||
This functions takes variable arguments, the exact expected arguments
|
||||
depend on C<cmd>.
|
||||
EVP_MAC_ctrl() can be called both before and after EVP_MAC_init(), but
|
||||
the effect will depend on what control is being use.
|
||||
See </CONTROLS> below for a description of standard controls.
|
||||
|
||||
EVP_MAC_vctrl() is the variant of EVP_MAC_ctrl() that takes a
|
||||
C<va_list> argument instead of variadic arguments.
|
||||
|
||||
EVP_MAC_ctrl_str() is an alternative to EVP_MAC_ctrl() to control the
|
||||
MAC implementation as E<lt> C<type>, C<value> E<gt> pairs.
|
||||
The MAC implementation documentation should specify what control type
|
||||
strings are accepted.
|
||||
|
||||
EVP_MAC_str2ctrl() and EVP_MAC_hex2ctrl() are helper functions to
|
||||
control the MAC implementation with raw strings or with strings
|
||||
containing hexadecimal numbers.
|
||||
The latter are decoded into bitstrings that are sent on to
|
||||
EVP_MAC_ctrl().
|
||||
|
||||
=head2 Information functions
|
||||
|
||||
EVP_MAC_size() returns the MAC output size for the given context.
|
||||
|
||||
EVP_MAC_nid() returns the numeric identity of the given MAC implementation.
|
||||
|
||||
EVP_MAC_name() returns the name of the given MAC implementation.
|
||||
|
||||
=head2 Object database functions
|
||||
|
||||
EVP_get_macbyname() fetches a MAC implementation from the object
|
||||
database by name.
|
||||
|
||||
EVP_get_macbynid() fetches a MAC implementation from the object
|
||||
database by numeric identity.
|
||||
|
||||
EVP_get_macbyobj() fetches a MAC implementation from the object
|
||||
database by ASN.1 OBJECT (i.e. an encoded OID).
|
||||
|
||||
=head1 CONTROLS
|
||||
|
||||
The standard controls are:
|
||||
|
||||
=over 4
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_KEY>
|
||||
|
||||
This control expects two arguments: C<unsigned char *key>, C<size_t keylen>
|
||||
|
||||
These will set the MAC key from the given string of the given length.
|
||||
The string may be any bitstring, and can contain NUL bytes.
|
||||
|
||||
For MACs that use an underlying computation algorithm, the algorithm
|
||||
I<must> be set first, see B<EVP_MAC_CTRL_SET_ENGINE>,
|
||||
B<EVP_MAC_CTRL_SET_MD> and B<EVP_MAC_CTRL_SET_CIPHER> below.
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_FLAGS>
|
||||
|
||||
This control expects one arguments: C<unsigned long flags>
|
||||
|
||||
These will set the MAC flags to the given numbers.
|
||||
Some MACs do not support this option.
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_ENGINE>
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_MD>
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_CIPHER>
|
||||
|
||||
For MAC implementations that use an underlying computation algorithm,
|
||||
these controls set what the algorithm should be, and the engine that
|
||||
implements the algorithm if needed.
|
||||
|
||||
B<EVP_MAC_CTRL_SET_ENGINE> takes one argument: C<ENGINE *>
|
||||
|
||||
B<EVP_MAC_CTRL_SET_MD> takes one argument: C<EVP_MD *>
|
||||
|
||||
B<EVP_MAC_CTRL_SET_CIPHER> takes one argument: C<EVP_CIPHER *>
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_SIZE>
|
||||
|
||||
For MAC implementations that support it, set the output size that
|
||||
EVP_MAC_final() should produce.
|
||||
The allowed sizes vary between MAC implementations.
|
||||
|
||||
=back
|
||||
|
||||
All these control should be used before the calls to any of
|
||||
EVP_MAC_init(), EVP_MAC_update() and EVP_MAC_final() for a full
|
||||
computation.
|
||||
Anything else may give undefined results.
|
||||
|
||||
=head1 NOTES
|
||||
|
||||
EVP_get_macbynid(), EVP_get_macbyobj() and EVP_MAC_name() are
|
||||
implemented as a macro.
|
||||
|
||||
=head1 RETURN VALUES
|
||||
|
||||
EVP_MAC_CTX_new() and EVP_MAC_CTX_new_id() return a pointer to a newly
|
||||
created EVP_MAC_CTX, or NULL if allocation failed.
|
||||
|
||||
EVP_MAC_CTX_free() returns nothing at all.
|
||||
|
||||
EVP_MAC_CTX_copy(), EVP_MAC_reset(), EVP_MAC_init(), EVP_MAC_update(),
|
||||
and EVP_MAC_final() return 1 on success, 0 on error.
|
||||
|
||||
EVP_MAC_ctrl(), EVP_MAC_ctrl_str(), EVP_MAC_str2ctrl() and
|
||||
EVP_MAC_hex2ctrl() return 1 on success and 0 or a negative value on
|
||||
error.
|
||||
In particular, the value -2 indicates that the given control type
|
||||
isn't supported by the MAC implementation.
|
||||
|
||||
EVP_MAC_size() returns the expected output size, or 0 if it isn't
|
||||
set.
|
||||
If it isn't set, a call to EVP_MAC_init() should get it set.
|
||||
|
||||
EVP_MAC_nid() returns the numeric identity for the given C<mac>.
|
||||
|
||||
EVP_MAC_name() returns the name for the given C<mac>, if it has been
|
||||
added to the object database.
|
||||
|
||||
EVP_add_mac() returns 1 if the given C<mac> was successfully added to
|
||||
the object database, otherwise 0.
|
||||
|
||||
EVP_get_macbyname(), EVP_get_macbynid() and EVP_get_macbyobj() return
|
||||
the request MAC implementation, if it exists in the object database,
|
||||
otherwise B<NULL>.
|
||||
|
||||
=head1 EXAMPLE
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/err.h>
|
||||
|
||||
int ctrl_ign_unsupported(EVP_MAC_CTX *ctx, int cmd, ...)
|
||||
{
|
||||
va_list args;
|
||||
int rv;
|
||||
|
||||
va_start(args, cmd);
|
||||
rv = EVP_MAC_vctrl(ctx, cmd, args);
|
||||
va_end(args);
|
||||
|
||||
if (rv == -2)
|
||||
rv = 1; /* Ignore unsupported, pretend it worked fine */
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
int main() {
|
||||
const EVP_MAC *mac =
|
||||
EVP_get_macbyname(getenv("MY_MAC"));
|
||||
const EVP_CIPHER *cipher =
|
||||
EVP_get_cipherbyname(getenv("MY_MAC_CIPHER"));
|
||||
const EVP_MD *digest =
|
||||
EVP_get_digestbyname(getenv("MY_MAC_DIGEST"));
|
||||
const char *key = getenv("MY_KEY");
|
||||
EVP_MAC_CTX *ctx = NULL;
|
||||
|
||||
unsigned char buf[4096];
|
||||
ssize_t read_l;
|
||||
size_t final_l;
|
||||
|
||||
size_t i;
|
||||
|
||||
if (mac == NULL
|
||||
|| key == NULL
|
||||
|| (ctx = EVP_MAC_CTX_new(mac)) == NULL
|
||||
|| (cipher != NULL
|
||||
&& !ctrl_ign_unsupported(ctx, EVP_MAC_CTRL_SET_CIPHER, cipher))
|
||||
|| (digest != NULL
|
||||
&& !ctrl_ign_unsupported(ctx, EVP_MAC_CTRL_SET_MD, digest))
|
||||
|| EVP_MAC_ctrl(ctx, EVP_MAC_CTRL_SET_KEY, key, strlen(key)) <= 0)
|
||||
goto err;
|
||||
|
||||
if (!EVP_MAC_init(ctx))
|
||||
goto err;
|
||||
|
||||
while ( (read_l = read(STDIN_FILENO, buf, sizeof(buf))) < 0) {
|
||||
if (!EVP_MAC_update(ctx, buf, read_l))
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!EVP_MAC_final(ctx, buf, &final_l))
|
||||
goto err;
|
||||
|
||||
printf("Result: ");
|
||||
for (i = 0; i < final_l; i++)
|
||||
printf("%02X", buf[i]);
|
||||
printf("\n");
|
||||
|
||||
EVP_MAC_CTX_free(ctx);
|
||||
exit(0);
|
||||
|
||||
err:
|
||||
EVP_MAC_CTX_free(ctx);
|
||||
fprintf(stderr, "Something went wrong\n");
|
||||
ERR_print_errors_fp(stderr);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
A run of this program, called with correct environment variables, can
|
||||
look like this:
|
||||
|
||||
$ MY_MAC=cmac MY_KEY=secret0123456789 MY_MAC_CIPHER=aes-128-cbc \
|
||||
LD_LIBRARY_PATH=. ./foo < foo.c
|
||||
Result: ECCAAFF041B22A2299EB90A1B53B6D45
|
||||
|
||||
(in this example, that program was stored in F<foo.c> and compiled to
|
||||
F<./foo>)
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
L<EVP_MAC_CMAC(7)>,
|
||||
L<EVP_MAC_HMAC(7)>,
|
||||
L<EVP_MAC_SIPHASH(7)>
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the OpenSSL license (the "License"). You may not use
|
||||
this file except in compliance with the License. You can obtain a copy
|
||||
in the file LICENSE in the source distribution or at
|
||||
L<https://www.openssl.org/source/license.html>.
|
||||
|
||||
=cut
|
||||
+263
-20
@@ -4,20 +4,55 @@
|
||||
|
||||
EVP_PKEY_CTX_ctrl,
|
||||
EVP_PKEY_CTX_ctrl_str,
|
||||
EVP_PKEY_CTX_ctrl_uint64,
|
||||
EVP_PKEY_CTX_md,
|
||||
EVP_PKEY_CTX_set_signature_md,
|
||||
EVP_PKEY_CTX_get_signature_md,
|
||||
EVP_PKEY_CTX_set_mac_key,
|
||||
EVP_PKEY_CTX_set_rsa_padding,
|
||||
EVP_PKEY_CTX_get_rsa_padding,
|
||||
EVP_PKEY_CTX_set_rsa_pss_saltlen,
|
||||
EVP_PKEY_CTX_get_rsa_pss_saltlen,
|
||||
EVP_PKEY_CTX_set_rsa_keygen_bits,
|
||||
EVP_PKEY_CTX_set_rsa_keygen_pubexp,
|
||||
EVP_PKEY_CTX_set_rsa_keygen_primes,
|
||||
EVP_PKEY_CTX_set_rsa_mgf1_md,
|
||||
EVP_PKEY_CTX_get_rsa_mgf1_md,
|
||||
EVP_PKEY_CTX_set_rsa_oaep_md,
|
||||
EVP_PKEY_CTX_get_rsa_oaep_md,
|
||||
EVP_PKEY_CTX_set0_rsa_oaep_label,
|
||||
EVP_PKEY_CTX_get0_rsa_oaep_label,
|
||||
EVP_PKEY_CTX_set_dsa_paramgen_bits,
|
||||
EVP_PKEY_CTX_set_dh_paramgen_prime_len,
|
||||
EVP_PKEY_CTX_set_dh_paramgen_subprime_len,
|
||||
EVP_PKEY_CTX_set_dh_paramgen_generator,
|
||||
EVP_PKEY_CTX_set_dh_paramgen_type,
|
||||
EVP_PKEY_CTX_set_dh_rfc5114,
|
||||
EVP_PKEY_CTX_set_dhx_rfc5114,
|
||||
EVP_PKEY_CTX_set_dh_pad,
|
||||
EVP_PKEY_CTX_set_dh_nid,
|
||||
EVP_PKEY_CTX_set_dh_kdf_type,
|
||||
EVP_PKEY_CTX_get_dh_kdf_type,
|
||||
EVP_PKEY_CTX_set0_dh_kdf_oid,
|
||||
EVP_PKEY_CTX_get0_dh_kdf_oid,
|
||||
EVP_PKEY_CTX_set_dh_kdf_md,
|
||||
EVP_PKEY_CTX_get_dh_kdf_md,
|
||||
EVP_PKEY_CTX_set_dh_kdf_outlen,
|
||||
EVP_PKEY_CTX_get_dh_kdf_outlen,
|
||||
EVP_PKEY_CTX_set0_dh_kdf_ukm,
|
||||
EVP_PKEY_CTX_get0_dh_kdf_ukm,
|
||||
EVP_PKEY_CTX_set_ec_paramgen_curve_nid,
|
||||
EVP_PKEY_CTX_set_ec_param_enc,
|
||||
EVP_PKEY_CTX_set_ecdh_cofactor_mode,
|
||||
EVP_PKEY_CTX_get_ecdh_cofactor_mode,
|
||||
EVP_PKEY_CTX_set_ecdh_kdf_type,
|
||||
EVP_PKEY_CTX_get_ecdh_kdf_type,
|
||||
EVP_PKEY_CTX_set_ecdh_kdf_md,
|
||||
EVP_PKEY_CTX_get_ecdh_kdf_md,
|
||||
EVP_PKEY_CTX_set_ecdh_kdf_outlen,
|
||||
EVP_PKEY_CTX_get_ecdh_kdf_outlen,
|
||||
EVP_PKEY_CTX_set0_ecdh_kdf_ukm,
|
||||
EVP_PKEY_CTX_get0_ecdh_kdf_ukm,
|
||||
EVP_PKEY_CTX_set1_id, EVP_PKEY_CTX_get1_id, EVP_PKEY_CTX_get1_id_len
|
||||
- algorithm specific control operations
|
||||
|
||||
@@ -27,9 +62,13 @@ EVP_PKEY_CTX_set1_id, EVP_PKEY_CTX_get1_id, EVP_PKEY_CTX_get1_id_len
|
||||
|
||||
int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
|
||||
int cmd, int p1, void *p2);
|
||||
int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype,
|
||||
int cmd, uint64_t value);
|
||||
int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type,
|
||||
const char *value);
|
||||
|
||||
int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md);
|
||||
|
||||
int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
|
||||
int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **pmd);
|
||||
|
||||
@@ -38,22 +77,58 @@ EVP_PKEY_CTX_set1_id, EVP_PKEY_CTX_get1_id, EVP_PKEY_CTX_get1_id_len
|
||||
#include <openssl/rsa.h>
|
||||
|
||||
int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad);
|
||||
int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *pad);
|
||||
int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int len);
|
||||
int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *len);
|
||||
int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int mbits);
|
||||
int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp);
|
||||
int EVP_PKEY_CTX_set_rsa_keygen_primes(EVP_PKEY_CTX *ctx, int primes);
|
||||
int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
|
||||
int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
|
||||
int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
|
||||
int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
|
||||
int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char *label, int len);
|
||||
int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label);
|
||||
|
||||
#include <openssl/dsa.h>
|
||||
|
||||
int EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx, int nbits);
|
||||
|
||||
#include <openssl/dh.h>
|
||||
|
||||
int EVP_PKEY_CTX_set_dh_paramgen_prime_len(EVP_PKEY_CTX *ctx, int len);
|
||||
int EVP_PKEY_CTX_set_dh_paramgen_subprime_len(EVP_PKEY_CTX *ctx, int len);
|
||||
int EVP_PKEY_CTX_set_dh_paramgen_generator(EVP_PKEY_CTX *ctx, int gen);
|
||||
int EVP_PKEY_CTX_set_dh_paramgen_type(EVP_PKEY_CTX *ctx, int type);
|
||||
int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad);
|
||||
int EVP_PKEY_CTX_set_dh_nid(EVP_PKEY_CTX *ctx, int nid);
|
||||
int EVP_PKEY_CTX_set_dh_rfc5114(EVP_PKEY_CTX *ctx, int rfc5114);
|
||||
int EVP_PKEY_CTX_set_dhx_rfc5114(EVP_PKEY_CTX *ctx, int rfc5114);
|
||||
int EVP_PKEY_CTX_set_dh_kdf_type(EVP_PKEY_CTX *ctx, int kdf);
|
||||
int EVP_PKEY_CTX_get_dh_kdf_type(EVP_PKEY_CTX *ctx);
|
||||
int EVP_PKEY_CTX_set0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT *oid);
|
||||
int EVP_PKEY_CTX_get0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT **oid);
|
||||
int EVP_PKEY_CTX_set_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
|
||||
int EVP_PKEY_CTX_get_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
|
||||
int EVP_PKEY_CTX_set_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int len);
|
||||
int EVP_PKEY_CTX_get_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len);
|
||||
int EVP_PKEY_CTX_set0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len);
|
||||
int EVP_PKEY_CTX_get0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm);
|
||||
|
||||
#include <openssl/ec.h>
|
||||
|
||||
int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, int nid);
|
||||
int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx, int param_enc);
|
||||
int EVP_PKEY_CTX_set_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx, int cofactor_mode);
|
||||
int EVP_PKEY_CTX_get_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx);
|
||||
int EVP_PKEY_CTX_set_ecdh_kdf_type(EVP_PKEY_CTX *ctx, int kdf);
|
||||
int EVP_PKEY_CTX_get_ecdh_kdf_type(EVP_PKEY_CTX *ctx);
|
||||
int EVP_PKEY_CTX_set_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
|
||||
int EVP_PKEY_CTX_get_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
|
||||
int EVP_PKEY_CTX_set_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int len);
|
||||
int EVP_PKEY_CTX_get_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len);
|
||||
int EVP_PKEY_CTX_set0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len);
|
||||
int EVP_PKEY_CTX_get0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm);
|
||||
|
||||
int EVP_PKEY_CTX_set1_id(EVP_PKEY_CTX *ctx, void *id, size_t id_len);
|
||||
int EVP_PKEY_CTX_get1_id(EVP_PKEY_CTX *ctx, void *id);
|
||||
@@ -73,6 +148,9 @@ and B<p2> is MAC key. This is used by Poly1305, SipHash, HMAC and CMAC.
|
||||
Applications will not normally call EVP_PKEY_CTX_ctrl() directly but will
|
||||
instead call one of the algorithm specific macros below.
|
||||
|
||||
The function EVP_PKEY_CTX_ctrl_uint64() is a wrapper that directly passes a
|
||||
uint64 value as B<p2> to EVP_PKEY_CTX_ctrl().
|
||||
|
||||
The function EVP_PKEY_CTX_ctrl_str() allows an application to send an algorithm
|
||||
specific control operation to a context B<ctx> in string form. This is
|
||||
intended to be used for options specified on the command line or in text
|
||||
@@ -80,6 +158,9 @@ files. The commands supported are documented in the openssl utility
|
||||
command line pages for the option B<-pkeyopt> which is supported by the
|
||||
B<pkeyutl>, B<genpkey> and B<req> commands.
|
||||
|
||||
The function EVP_PKEY_CTX_md() sends a message digest control operation
|
||||
to the context B<ctx>. The message digest is specified by its name B<md>.
|
||||
|
||||
All the remaining "functions" are implemented as macros.
|
||||
|
||||
The EVP_PKEY_CTX_set_signature_md() macro sets the message digest type used
|
||||
@@ -99,12 +180,14 @@ L<EVP_PKEY_new_raw_private_key(3)> or similar functions instead of this macro.
|
||||
The EVP_PKEY_CTX_set_mac_key() macro can be used with any of the algorithms
|
||||
supported by the L<EVP_PKEY_new_raw_private_key(3)> function.
|
||||
|
||||
The macro EVP_PKEY_CTX_set_rsa_padding() sets the RSA padding mode for B<ctx>.
|
||||
The B<pad> parameter can take the value RSA_PKCS1_PADDING for PKCS#1 padding,
|
||||
RSA_SSLV23_PADDING for SSLv23 padding, RSA_NO_PADDING for no padding,
|
||||
RSA_PKCS1_OAEP_PADDING for OAEP padding (encrypt and decrypt only),
|
||||
RSA_X931_PADDING for X9.31 padding (signature operations only) and
|
||||
RSA_PKCS1_PSS_PADDING (sign and verify only).
|
||||
=head2 RSA parameters
|
||||
|
||||
The EVP_PKEY_CTX_set_rsa_padding() macro sets the RSA padding mode for B<ctx>.
|
||||
The B<pad> parameter can take the value B<RSA_PKCS1_PADDING> for PKCS#1
|
||||
padding, B<RSA_SSLV23_PADDING> for SSLv23 padding, B<RSA_NO_PADDING> for
|
||||
no padding, B<RSA_PKCS1_OAEP_PADDING> for OAEP padding (encrypt and
|
||||
decrypt only), B<RSA_X931_PADDING> for X9.31 padding (signature operations
|
||||
only) and B<RSA_PKCS1_PSS_PADDING> (sign and verify only).
|
||||
|
||||
Two RSA padding modes behave differently if EVP_PKEY_CTX_set_signature_md()
|
||||
is used. If this macro is called for PKCS#1 padding the plaintext buffer is
|
||||
@@ -116,41 +199,154 @@ padding for RSA the algorithm identifier byte is added or checked and removed
|
||||
if this control is called. If it is not called then the first byte of the plaintext
|
||||
buffer is expected to be the algorithm identifier byte.
|
||||
|
||||
The EVP_PKEY_CTX_get_rsa_padding() macro gets the RSA padding mode for B<ctx>.
|
||||
|
||||
The EVP_PKEY_CTX_set_rsa_pss_saltlen() macro sets the RSA PSS salt length to
|
||||
B<len> as its name implies it is only supported for PSS padding. Three special
|
||||
values are supported: RSA_PSS_SALTLEN_DIGEST sets the salt length to the
|
||||
digest length, RSA_PSS_SALTLEN_MAX sets the salt length to the maximum
|
||||
permissible value. When verifying RSA_PSS_SALTLEN_AUTO causes the salt length
|
||||
B<len>. As its name implies it is only supported for PSS padding. Three special
|
||||
values are supported: B<RSA_PSS_SALTLEN_DIGEST> sets the salt length to the
|
||||
digest length, B<RSA_PSS_SALTLEN_MAX> sets the salt length to the maximum
|
||||
permissible value. When verifying B<RSA_PSS_SALTLEN_AUTO> causes the salt length
|
||||
to be automatically determined based on the B<PSS> block structure. If this
|
||||
macro is not called maximum salt length is used when signing and auto detection
|
||||
when verifying is used by default.
|
||||
|
||||
The EVP_PKEY_CTX_get_rsa_pss_saltlen() macro gets the RSA PSS salt length
|
||||
for B<ctx>. The padding mode must have been set to B<RSA_PKCS1_PSS_PADDING>.
|
||||
|
||||
The EVP_PKEY_CTX_set_rsa_keygen_bits() macro sets the RSA key length for
|
||||
RSA key generation to B<bits>. If not specified 1024 bits is used.
|
||||
|
||||
The EVP_PKEY_CTX_set_rsa_keygen_pubexp() macro sets the public exponent value
|
||||
for RSA key generation to B<pubexp> currently it should be an odd integer. The
|
||||
for RSA key generation to B<pubexp>. Currently it should be an odd integer. The
|
||||
B<pubexp> pointer is used internally by this function so it should not be
|
||||
modified or free after the call. If this macro is not called then 65537 is used.
|
||||
modified or freed after the call. If not specified 65537 is used.
|
||||
|
||||
The macro EVP_PKEY_CTX_set_dsa_paramgen_bits() sets the number of bits used
|
||||
The EVP_PKEY_CTX_set_rsa_keygen_primes() macro sets the number of primes for
|
||||
RSA key generation to B<primes>. If not specified 2 is used.
|
||||
|
||||
The EVP_PKEY_CTX_set_rsa_mgf1_md() macro sets the MGF1 digest for RSA padding
|
||||
schemes to B<md>. If not explicitly set the signing digest is used. The
|
||||
padding mode must have been set to B<RSA_PKCS1_OAEP_PADDING>
|
||||
or B<RSA_PKCS1_PSS_PADDING>.
|
||||
|
||||
The EVP_PKEY_CTX_get_rsa_mgf1_md() macro gets the MGF1 digest for B<ctx>.
|
||||
If not explicitly set the signing digest is used. The padding mode must have
|
||||
been set to B<RSA_PKCS1_OAEP_PADDING> or B<RSA_PKCS1_PSS_PADDING>.
|
||||
|
||||
The EVP_PKEY_CTX_set_rsa_oaep_md() macro sets the message digest type used
|
||||
in RSA OAEP to B<md>. The padding mode must have been set to
|
||||
B<RSA_PKCS1_OAEP_PADDING>.
|
||||
|
||||
The EVP_PKEY_CTX_get_rsa_oaep_md() macro gets the message digest type used
|
||||
in RSA OAEP to B<md>. The padding mode must have been set to
|
||||
B<RSA_PKCS1_OAEP_PADDING>.
|
||||
|
||||
The EVP_PKEY_CTX_set0_rsa_oaep_label() macro sets the RSA OAEP label to
|
||||
B<label> and its length to B<len>. If B<label> is NULL or B<len> is 0,
|
||||
the label is cleared. The library takes ownership of the label so the
|
||||
caller should not free the original memory pointed to by B<label>.
|
||||
The padding mode must have been set to B<RSA_PKCS1_OAEP_PADDING>.
|
||||
|
||||
The EVP_PKEY_CTX_get0_rsa_oaep_label() macro gets the RSA OAEP label to
|
||||
B<label>. The return value is the label length. The padding mode
|
||||
must have been set to B<RSA_PKCS1_OAEP_PADDING>. The resulting pointer is owned
|
||||
by the library and should not be freed by the caller.
|
||||
|
||||
=head2 DSA parameters
|
||||
|
||||
The EVP_PKEY_CTX_set_dsa_paramgen_bits() macro sets the number of bits used
|
||||
for DSA parameter generation to B<bits>. If not specified 1024 is used.
|
||||
|
||||
The macro EVP_PKEY_CTX_set_dh_paramgen_prime_len() sets the length of the DH
|
||||
=head2 DH parameters
|
||||
|
||||
The EVP_PKEY_CTX_set_dh_paramgen_prime_len() macro sets the length of the DH
|
||||
prime parameter B<p> for DH parameter generation. If this macro is not called
|
||||
then 1024 is used.
|
||||
then 1024 is used. Only accepts lengths greater than or equal to 256.
|
||||
|
||||
The EVP_PKEY_CTX_set_dh_paramgen_subprime_len() macro sets the length of the DH
|
||||
optional subprime parameter B<q> for DH parameter generation. The default is
|
||||
256 if the prime is at least 2048 bits long or 160 otherwise. The DH
|
||||
paramgen type must have been set to x9.42.
|
||||
|
||||
The EVP_PKEY_CTX_set_dh_paramgen_generator() macro sets DH generator to B<gen>
|
||||
for DH parameter generation. If not specified 2 is used.
|
||||
|
||||
The EVP_PKEY_CTX_set_dh_paramgen_type() macro sets the key type for DH
|
||||
parameter generation. Use 0 for PKCS#3 DH and 1 for X9.42 DH.
|
||||
The default is 0.
|
||||
|
||||
The EVP_PKEY_CTX_set_dh_pad() macro sets the DH padding mode. If B<pad> is
|
||||
1 the shared secret is padded with zeroes up to the size of the DH prime B<p>.
|
||||
If B<pad> is zero (the default) then no padding is performed.
|
||||
|
||||
EVP_PKEY_CTX_set_dh_nid() sets the DH parameters to values corresponding to
|
||||
B<nid>. The B<nid> parameter must be B<NID_ffdhe2048>, B<NID_ffdhe3072>,
|
||||
B<NID_ffdhe4096>, B<NID_ffdhe6144> or B<NID_ffdhe8192>. This macro can be
|
||||
called during parameter or key generation.
|
||||
B<nid> as defined in RFC7919. The B<nid> parameter must be B<NID_ffdhe2048>,
|
||||
B<NID_ffdhe3072>, B<NID_ffdhe4096>, B<NID_ffdhe6144>, B<NID_ffdhe8192>
|
||||
or B<NID_undef> to clear the stored value. This macro can be called during
|
||||
parameter or key generation.
|
||||
The nid parameter and the rfc5114 parameter are mutually exclusive.
|
||||
|
||||
The EVP_PKEY_CTX_set_dh_rfc5114() and EVP_PKEY_CTX_set_dhx_rfc5114() macros are
|
||||
synonymous. They set the DH parameters to the values defined in RFC5114. The
|
||||
B<rfc5114> parameter must be 1, 2 or 3 corresponding to RFC5114 sections
|
||||
2.1, 2.2 and 2.3. or 0 to clear the stored value. This macro can be called
|
||||
during parameter generation. The B<ctx> must have a key type of
|
||||
B<EVP_PKEY_DHX>.
|
||||
The rfc5114 parameter and the nid parameter are mutually exclusive.
|
||||
|
||||
=head2 DH key derivation function parameters
|
||||
|
||||
Note that all of the following functions require that the B<ctx> parameter has
|
||||
a private key type of B<EVP_PKEY_DHX>. When using key derivation, the output of
|
||||
EVP_PKEY_derive() is the output of the KDF instead of the DH shared secret.
|
||||
The KDF output is typically used as a Key Encryption Key (KEK) that in turn
|
||||
encrypts a Content Encryption Key (CEK).
|
||||
|
||||
The EVP_PKEY_CTX_set_dh_kdf_type() macro sets the key derivation function type
|
||||
to B<kdf> for DH key derivation. Possible values are B<EVP_PKEY_DH_KDF_NONE>
|
||||
and B<EVP_PKEY_DH_KDF_X9_42> which uses the key derivation specified in RFC2631
|
||||
(based on the keying algorithm described in X9.42). When using key derivation,
|
||||
the B<kdf_oid>, B<kdf_md> and B<kdf_outlen> parameters must also be specified.
|
||||
|
||||
The EVP_PKEY_CTX_get_dh_kdf_type() macro gets the key derivation function type
|
||||
for B<ctx> used for DH key derivation. Possible values are B<EVP_PKEY_DH_KDF_NONE>
|
||||
and B<EVP_PKEY_DH_KDF_X9_42>.
|
||||
|
||||
The EVP_PKEY_CTX_set0_dh_kdf_oid() macro sets the key derivation function
|
||||
object identifier to B<oid> for DH key derivation. This OID should identify
|
||||
the algorithm to be used with the Content Encryption Key.
|
||||
The library takes ownership of the object identifier so the caller should not
|
||||
free the original memory pointed to by B<oid>.
|
||||
|
||||
The EVP_PKEY_CTX_get0_dh_kdf_oid() macro gets the key derivation function oid
|
||||
for B<ctx> used for DH key derivation. The resulting pointer is owned by the
|
||||
library and should not be freed by the caller.
|
||||
|
||||
The EVP_PKEY_CTX_set_dh_kdf_md() macro sets the key derivation function
|
||||
message digest to B<md> for DH key derivation. Note that RFC2631 specifies
|
||||
that this digest should be SHA1 but OpenSSL tolerates other digests.
|
||||
|
||||
The EVP_PKEY_CTX_get_dh_kdf_md() macro gets the key derivation function
|
||||
message digest for B<ctx> used for DH key derivation.
|
||||
|
||||
The EVP_PKEY_CTX_set_dh_kdf_outlen() macro sets the key derivation function
|
||||
output length to B<len> for DH key derivation.
|
||||
|
||||
The EVP_PKEY_CTX_get_dh_kdf_outlen() macro gets the key derivation function
|
||||
output length for B<ctx> used for DH key derivation.
|
||||
|
||||
The EVP_PKEY_CTX_set0_dh_kdf_ukm() macro sets the user key material to
|
||||
B<ukm> and its length to B<len> for DH key derivation. This parameter is optional
|
||||
and corresponds to the partyAInfo field in RFC2631 terms. The specification
|
||||
requires that it is 512 bits long but this is not enforced by OpenSSL.
|
||||
The library takes ownership of the user key material so the caller should not
|
||||
free the original memory pointed to by B<ukm>.
|
||||
|
||||
The EVP_PKEY_CTX_get0_dh_kdf_ukm() macro gets the user key material for B<ctx>.
|
||||
The return value is the user key material length. The resulting pointer is owned
|
||||
by the library and should not be freed by the caller.
|
||||
|
||||
=head2 EC parameters
|
||||
|
||||
The EVP_PKEY_CTX_set_ec_paramgen_curve_nid() sets the EC curve for EC parameter
|
||||
generation to B<nid>. For EC parameter generation this macro must be called
|
||||
@@ -158,7 +354,7 @@ or an error occurs because there is no default curve.
|
||||
This function can also be called to set the curve explicitly when
|
||||
generating an EC key.
|
||||
|
||||
The EVP_PKEY_CTX_set_ec_param_enc() sets the EC parameter encoding to
|
||||
The EVP_PKEY_CTX_set_ec_param_enc() macro sets the EC parameter encoding to
|
||||
B<param_enc> when generating EC parameters or an EC key. The encoding can be
|
||||
B<OPENSSL_EC_EXPLICIT_CURVE> for explicit parameters (the default in versions
|
||||
of OpenSSL before 1.1.0) or B<OPENSSL_EC_NAMED_CURVE> to use named curve form.
|
||||
@@ -166,6 +362,53 @@ For maximum compatibility the named curve form should be used. Note: the
|
||||
B<OPENSSL_EC_NAMED_CURVE> value was only added to OpenSSL 1.1.0; previous
|
||||
versions should use 0 instead.
|
||||
|
||||
=head2 ECDH parameters
|
||||
|
||||
The EVP_PKEY_CTX_set_ecdh_cofactor_mode() macro sets the cofactor mode to
|
||||
B<cofactor_mode> for ECDH key derivation. Possible values are 1 to enable
|
||||
cofactor key derivation, 0 to disable it and -1 to clear the stored cofactor
|
||||
mode and fallback to the private key cofactor mode.
|
||||
|
||||
The EVP_PKEY_CTX_get_ecdh_cofactor_mode() macro returns the cofactor mode for
|
||||
B<ctx> used for ECDH key derivation. Possible values are 1 when cofactor key
|
||||
derivation is enabled and 0 otherwise.
|
||||
|
||||
=head2 ECDH key derivation function parameters
|
||||
|
||||
The EVP_PKEY_CTX_set_ecdh_kdf_type() macro sets the key derivation function type
|
||||
to B<kdf> for ECDH key derivation. Possible values are B<EVP_PKEY_ECDH_KDF_NONE>
|
||||
and B<EVP_PKEY_ECDH_KDF_X9_63> which uses the key derivation specified in X9.63.
|
||||
When using key derivation, the B<kdf_md> and B<kdf_outlen> parameters must
|
||||
also be specified.
|
||||
|
||||
The EVP_PKEY_CTX_get_ecdh_kdf_type() macro returns the key derivation function
|
||||
type for B<ctx> used for ECDH key derivation. Possible values are
|
||||
B<EVP_PKEY_ECDH_KDF_NONE> and B<EVP_PKEY_ECDH_KDF_X9_63>.
|
||||
|
||||
The EVP_PKEY_CTX_set_ecdh_kdf_md() macro sets the key derivation function
|
||||
message digest to B<md> for ECDH key derivation. Note that X9.63 specifies
|
||||
that this digest should be SHA1 but OpenSSL tolerates other digests.
|
||||
|
||||
The EVP_PKEY_CTX_get_ecdh_kdf_md() macro gets the key derivation function
|
||||
message digest for B<ctx> used for ECDH key derivation.
|
||||
|
||||
The EVP_PKEY_CTX_set_ecdh_kdf_outlen() macro sets the key derivation function
|
||||
output length to B<len> for ECDH key derivation.
|
||||
|
||||
The EVP_PKEY_CTX_get_ecdh_kdf_outlen() macro gets the key derivation function
|
||||
output length for B<ctx> used for ECDH key derivation.
|
||||
|
||||
The EVP_PKEY_CTX_set0_ecdh_kdf_ukm() macro sets the user key material to B<ukm>
|
||||
for ECDH key derivation. This parameter is optional and corresponds to the
|
||||
shared info in X9.63 terms. The library takes ownership of the user key material
|
||||
so the caller should not free the original memory pointed to by B<ukm>.
|
||||
|
||||
The EVP_PKEY_CTX_get0_ecdh_kdf_ukm() macro gets the user key material for B<ctx>.
|
||||
The return value is the user key material length. The resulting pointer is owned
|
||||
by the library and should not be freed by the caller.
|
||||
|
||||
=head2 Other parameters
|
||||
|
||||
The EVP_PKEY_CTX_set1_id(), EVP_PKEY_CTX_get1_id() and EVP_PKEY_CTX_get1_id_len()
|
||||
macros are used to manipulate the special identifier field for specific signature
|
||||
algorithms such as SM2. The EVP_PKEY_CTX_set1_id() sets an ID pointed by B<id> with
|
||||
@@ -191,7 +434,7 @@ L<EVP_PKEY_decrypt(3)>,
|
||||
L<EVP_PKEY_sign(3)>,
|
||||
L<EVP_PKEY_verify(3)>,
|
||||
L<EVP_PKEY_verify_recover(3)>,
|
||||
L<EVP_PKEY_derive(3)>
|
||||
L<EVP_PKEY_derive(3)>,
|
||||
L<EVP_PKEY_keygen(3)>
|
||||
|
||||
=head1 HISTORY
|
||||
|
||||
@@ -32,7 +32,7 @@ The EVP_PKEY_CTX_set_rsa_pss_saltlen() macro is used to set the salt length.
|
||||
If the key has usage restrictions then an error is returned if an attempt is
|
||||
made to set the salt length below the minimum value. It is otherwise similar
|
||||
to the B<RSA> operation except detection of the salt length (using
|
||||
RSA_PSS_SALTLEN_AUTO is not supported for verification if the key has
|
||||
RSA_PSS_SALTLEN_AUTO) is not supported for verification if the key has
|
||||
usage restrictions.
|
||||
|
||||
The EVP_PKEY_CTX_set_signature_md() and EVP_PKEY_CTX_set_rsa_mgf1_md() macros
|
||||
@@ -43,7 +43,7 @@ similar to the B<RSA> versions.
|
||||
|
||||
=head2 Key Generation
|
||||
|
||||
As with RSA key generation the EVP_PKEY_CTX_set_rsa_rsa_keygen_bits()
|
||||
As with RSA key generation the EVP_PKEY_CTX_set_rsa_keygen_bits()
|
||||
and EVP_PKEY_CTX_set_rsa_keygen_pubexp() macros are supported for RSA-PSS:
|
||||
they have exactly the same meaning as for the RSA algorithm.
|
||||
|
||||
|
||||
@@ -6,8 +6,10 @@ EVP_PKEY_set1_RSA, EVP_PKEY_set1_DSA, EVP_PKEY_set1_DH, EVP_PKEY_set1_EC_KEY,
|
||||
EVP_PKEY_get1_RSA, EVP_PKEY_get1_DSA, EVP_PKEY_get1_DH, EVP_PKEY_get1_EC_KEY,
|
||||
EVP_PKEY_get0_RSA, EVP_PKEY_get0_DSA, EVP_PKEY_get0_DH, EVP_PKEY_get0_EC_KEY,
|
||||
EVP_PKEY_assign_RSA, EVP_PKEY_assign_DSA, EVP_PKEY_assign_DH,
|
||||
EVP_PKEY_assign_EC_KEY, EVP_PKEY_get0_hmac, EVP_PKEY_type, EVP_PKEY_id,
|
||||
EVP_PKEY_base_id, EVP_PKEY_set_alias_type, EVP_PKEY_set1_engine - EVP_PKEY assignment functions
|
||||
EVP_PKEY_assign_EC_KEY, EVP_PKEY_assign_POLY1305, EVP_PKEY_assign_SIPHASH,
|
||||
EVP_PKEY_get0_hmac, EVP_PKEY_get0_poly1305, EVP_PKEY_get0_siphash,
|
||||
EVP_PKEY_type, EVP_PKEY_id, EVP_PKEY_base_id, EVP_PKEY_set_alias_type,
|
||||
EVP_PKEY_set1_engine - EVP_PKEY assignment functions
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
@@ -24,6 +26,8 @@ EVP_PKEY_base_id, EVP_PKEY_set_alias_type, EVP_PKEY_set1_engine - EVP_PKEY assig
|
||||
EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
|
||||
|
||||
const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len);
|
||||
const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len);
|
||||
const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len);
|
||||
RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey);
|
||||
DSA *EVP_PKEY_get0_DSA(EVP_PKEY *pkey);
|
||||
DH *EVP_PKEY_get0_DH(EVP_PKEY *pkey);
|
||||
@@ -33,6 +37,8 @@ EVP_PKEY_base_id, EVP_PKEY_set_alias_type, EVP_PKEY_set1_engine - EVP_PKEY assig
|
||||
int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key);
|
||||
int EVP_PKEY_assign_DH(EVP_PKEY *pkey, DH *key);
|
||||
int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
|
||||
int EVP_PKEY_assign_POLY1305(EVP_PKEY *pkey, ASN1_OCTET_STRING *key);
|
||||
int EVP_PKEY_assign_SIPHASH(EVP_PKEY *pkey, ASN1_OCTET_STRING *key);
|
||||
|
||||
int EVP_PKEY_id(const EVP_PKEY *pkey);
|
||||
int EVP_PKEY_base_id(const EVP_PKEY *pkey);
|
||||
@@ -50,14 +56,15 @@ EVP_PKEY_get1_RSA(), EVP_PKEY_get1_DSA(), EVP_PKEY_get1_DH() and
|
||||
EVP_PKEY_get1_EC_KEY() return the referenced key in B<pkey> or
|
||||
B<NULL> if the key is not of the correct type.
|
||||
|
||||
EVP_PKEY_get0_hmac(), EVP_PKEY_get0_RSA(), EVP_PKEY_get0_DSA(),
|
||||
EVP_PKEY_get0_DH() and EVP_PKEY_get0_EC_KEY() also return the
|
||||
referenced key in B<pkey> or B<NULL> if the key is not of the
|
||||
correct type but the reference count of the returned key is
|
||||
B<not> incremented and so must not be freed up after use.
|
||||
EVP_PKEY_get0_hmac(), EVP_PKEY_get0_poly1305(), EVP_PKEY_get0_siphash(),
|
||||
EVP_PKEY_get0_RSA(), EVP_PKEY_get0_DSA(), EVP_PKEY_get0_DH()
|
||||
and EVP_PKEY_get0_EC_KEY() also return the referenced key in B<pkey> or B<NULL>
|
||||
if the key is not of the correct type but the reference count of the
|
||||
returned key is B<not> incremented and so must not be freed up after use.
|
||||
|
||||
EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH()
|
||||
and EVP_PKEY_assign_EC_KEY() also set the referenced key to B<key>
|
||||
EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH(),
|
||||
EVP_PKEY_assign_EC_KEY(), EVP_PKEY_assign_POLY1305() and
|
||||
EVP_PKEY_assign_SIPHASH() also set the referenced key to B<key>
|
||||
however these use the supplied B<key> internally and so B<key>
|
||||
will be freed when the parent B<pkey> is freed.
|
||||
|
||||
@@ -89,8 +96,9 @@ In accordance with the OpenSSL naming convention the key obtained
|
||||
from or assigned to the B<pkey> using the B<1> functions must be
|
||||
freed as well as B<pkey>.
|
||||
|
||||
EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH()
|
||||
and EVP_PKEY_assign_EC_KEY() are implemented as macros.
|
||||
EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH(),
|
||||
EVP_PKEY_assign_EC_KEY(), EVP_PKEY_assign_POLY1305()
|
||||
and EVP_PKEY_assign_SIPHASH() are implemented as macros.
|
||||
|
||||
Most applications wishing to know a key type will simply call
|
||||
EVP_PKEY_base_id() and will not care about the actual type:
|
||||
@@ -119,8 +127,9 @@ EVP_PKEY_get1_RSA(), EVP_PKEY_get1_DSA(), EVP_PKEY_get1_DH() and
|
||||
EVP_PKEY_get1_EC_KEY() return the referenced key or B<NULL> if
|
||||
an error occurred.
|
||||
|
||||
EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH()
|
||||
and EVP_PKEY_assign_EC_KEY() return 1 for success and 0 for failure.
|
||||
EVP_PKEY_assign_RSA(), EVP_PKEY_assign_DSA(), EVP_PKEY_assign_DH(),
|
||||
EVP_PKEY_assign_EC_KEY(), EVP_PKEY_assign_POLY1305()
|
||||
and EVP_PKEY_assign_SIPHASH() return 1 for success and 0 for failure.
|
||||
|
||||
EVP_PKEY_base_id(), EVP_PKEY_id() and EVP_PKEY_type() return a key
|
||||
type or B<NID_undef> (equivalently B<EVP_PKEY_NONE>) on error.
|
||||
|
||||
@@ -14,6 +14,9 @@ EVP_aes_256_cfb1,
|
||||
EVP_aes_128_cfb8,
|
||||
EVP_aes_192_cfb8,
|
||||
EVP_aes_256_cfb8,
|
||||
EVP_aes_128_cfb128,
|
||||
EVP_aes_192_cfb128,
|
||||
EVP_aes_256_cfb128,
|
||||
EVP_aes_128_ctr,
|
||||
EVP_aes_192_ctr,
|
||||
EVP_aes_256_ctr,
|
||||
@@ -75,6 +78,9 @@ EVP_aes_256_cfb1(),
|
||||
EVP_aes_128_cfb8(),
|
||||
EVP_aes_192_cfb8(),
|
||||
EVP_aes_256_cfb8(),
|
||||
EVP_aes_128_cfb128(),
|
||||
EVP_aes_192_cfb128(),
|
||||
EVP_aes_256_cfb128(),
|
||||
EVP_aes_128_ctr(),
|
||||
EVP_aes_192_ctr(),
|
||||
EVP_aes_256_ctr(),
|
||||
|
||||
@@ -14,6 +14,9 @@ EVP_aria_256_cfb1,
|
||||
EVP_aria_128_cfb8,
|
||||
EVP_aria_192_cfb8,
|
||||
EVP_aria_256_cfb8,
|
||||
EVP_aria_128_cfb128,
|
||||
EVP_aria_192_cfb128,
|
||||
EVP_aria_256_cfb128,
|
||||
EVP_aria_128_ctr,
|
||||
EVP_aria_192_ctr,
|
||||
EVP_aria_256_ctr,
|
||||
@@ -60,6 +63,9 @@ EVP_aria_256_cfb1(),
|
||||
EVP_aria_128_cfb8(),
|
||||
EVP_aria_192_cfb8(),
|
||||
EVP_aria_256_cfb8(),
|
||||
EVP_aria_128_cfb128(),
|
||||
EVP_aria_192_cfb128(),
|
||||
EVP_aria_256_cfb128(),
|
||||
EVP_aria_128_ctr(),
|
||||
EVP_aria_192_ctr(),
|
||||
EVP_aria_256_ctr(),
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
EVP_bf_cbc,
|
||||
EVP_bf_cfb,
|
||||
EVP_bf_cfb64,
|
||||
EVP_bf_ecb,
|
||||
EVP_bf_ofb
|
||||
- EVP Blowfish cipher
|
||||
@@ -14,6 +15,7 @@ EVP_bf_ofb
|
||||
|
||||
const EVP_CIPHER *EVP_bf_cbc(void)
|
||||
const EVP_CIPHER *EVP_bf_cfb(void)
|
||||
const EVP_CIPHER *EVP_bf_cfb64(void)
|
||||
const EVP_CIPHER *EVP_bf_ecb(void)
|
||||
const EVP_CIPHER *EVP_bf_ofb(void)
|
||||
|
||||
@@ -27,6 +29,7 @@ This is a variable key length cipher.
|
||||
|
||||
=item EVP_bf_cbc(),
|
||||
EVP_bf_cfb(),
|
||||
EVP_bf_cfb64(),
|
||||
EVP_bf_ecb(),
|
||||
EVP_bf_ofb()
|
||||
|
||||
|
||||
@@ -14,6 +14,9 @@ EVP_camellia_256_cfb1,
|
||||
EVP_camellia_128_cfb8,
|
||||
EVP_camellia_192_cfb8,
|
||||
EVP_camellia_256_cfb8,
|
||||
EVP_camellia_128_cfb128,
|
||||
EVP_camellia_192_cfb128,
|
||||
EVP_camellia_256_cfb128,
|
||||
EVP_camellia_128_ctr,
|
||||
EVP_camellia_192_ctr,
|
||||
EVP_camellia_256_ctr,
|
||||
@@ -54,6 +57,9 @@ EVP_camellia_256_cfb1(),
|
||||
EVP_camellia_128_cfb8(),
|
||||
EVP_camellia_192_cfb8(),
|
||||
EVP_camellia_256_cfb8(),
|
||||
EVP_camellia_128_cfb128(),
|
||||
EVP_camellia_192_cfb128(),
|
||||
EVP_camellia_256_cfb128(),
|
||||
EVP_camellia_128_ctr(),
|
||||
EVP_camellia_192_ctr(),
|
||||
EVP_camellia_256_ctr(),
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
EVP_cast5_cbc,
|
||||
EVP_cast5_cfb,
|
||||
EVP_cast5_cfb64,
|
||||
EVP_cast5_ecb,
|
||||
EVP_cast5_ofb
|
||||
- EVP CAST cipher
|
||||
@@ -14,6 +15,7 @@ EVP_cast5_ofb
|
||||
|
||||
const EVP_CIPHER *EVP_cast5_cbc(void)
|
||||
const EVP_CIPHER *EVP_cast5_cfb(void)
|
||||
const EVP_CIPHER *EVP_cast5_cfb64(void)
|
||||
const EVP_CIPHER *EVP_cast5_ecb(void)
|
||||
const EVP_CIPHER *EVP_cast5_ofb(void)
|
||||
|
||||
@@ -28,6 +30,7 @@ This is a variable key length cipher.
|
||||
=item EVP_cast5_cbc(),
|
||||
EVP_cast5_ecb(),
|
||||
EVP_cast5_cfb(),
|
||||
EVP_cast5_cfb64(),
|
||||
EVP_cast5_ofb()
|
||||
|
||||
CAST encryption algorithm in CBC, ECB, CFB and OFB modes respectively.
|
||||
|
||||
+22
-12
@@ -6,19 +6,24 @@ EVP_des_cbc,
|
||||
EVP_des_cfb,
|
||||
EVP_des_cfb1,
|
||||
EVP_des_cfb8,
|
||||
EVP_des_cfb64,
|
||||
EVP_des_ecb,
|
||||
EVP_des_ede,
|
||||
EVP_des_ede_cfb,
|
||||
EVP_des_ede_ofb,
|
||||
EVP_des_ofb,
|
||||
EVP_des_ede,
|
||||
EVP_des_ede_cbc,
|
||||
EVP_des_ede_cfb,
|
||||
EVP_des_ede_cfb64,
|
||||
EVP_des_ede_ecb,
|
||||
EVP_des_ede_ofb,
|
||||
EVP_des_ede3,
|
||||
EVP_des_ede3_cbc,
|
||||
EVP_des_ede3_cfb,
|
||||
EVP_des_ede3_cfb1,
|
||||
EVP_des_ede3_cfb8,
|
||||
EVP_des_ede3_cfb64,
|
||||
EVP_des_ede3_ecb,
|
||||
EVP_des_ede3_ofb,
|
||||
EVP_des_ede3_wrap,
|
||||
EVP_des_ede_cbc
|
||||
EVP_des_ede3_wrap
|
||||
- EVP DES cipher
|
||||
|
||||
=head1 SYNOPSIS
|
||||
@@ -43,27 +48,32 @@ EVP_des_ecb(),
|
||||
EVP_des_cfb(),
|
||||
EVP_des_cfb1(),
|
||||
EVP_des_cfb8(),
|
||||
EVP_des_cfb64(),
|
||||
EVP_des_ofb()
|
||||
|
||||
DES in CBC, ECB, CFB with 128-bit shift, CFB with 1-bit shift, CFB with 8-bit
|
||||
shift and OFB modes respectively.
|
||||
DES in CBC, ECB, CFB with 64-bit shift, CFB with 1-bit shift, CFB with 8-bit
|
||||
shift and OFB modes.
|
||||
|
||||
=item EVP_des_ede(),
|
||||
EVP_des_ede_cbc(),
|
||||
EVP_des_ede_ofb(),
|
||||
EVP_des_ede_cfb()
|
||||
EVP_des_ede_cfb(),
|
||||
EVP_des_ede_cfb64(),
|
||||
EVP_des_ede_ecb(),
|
||||
EVP_des_ede_ofb()
|
||||
|
||||
Two key triple DES in ECB, CBC, CFB and OFB modes respectively.
|
||||
Two key triple DES in ECB, CBC, CFB with 64-bit shift and OFB modes.
|
||||
|
||||
=item EVP_des_ede3(),
|
||||
EVP_des_ede3_cbc(),
|
||||
EVP_des_ede3_cfb(),
|
||||
EVP_des_ede3_cfb1(),
|
||||
EVP_des_ede3_cfb8(),
|
||||
EVP_des_ede3_cfb64(),
|
||||
EVP_des_ede3_ecb(),
|
||||
EVP_des_ede3_ofb()
|
||||
|
||||
Three-key triple DES in ECB, CBC, CFB with 128-bit shift, CFB with 1-bit shift,
|
||||
CFB with 8-bit shift and OFB modes respectively.
|
||||
Three-key triple DES in ECB, CBC, CFB with 64-bit shift, CFB with 1-bit shift,
|
||||
CFB with 8-bit shift and OFB modes.
|
||||
|
||||
=item EVP_des_ede3_wrap()
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
EVP_idea_cbc,
|
||||
EVP_idea_cfb,
|
||||
EVP_idea_cfb64,
|
||||
EVP_idea_ecb,
|
||||
EVP_idea_ofb
|
||||
- EVP IDEA cipher
|
||||
@@ -14,6 +15,7 @@ EVP_idea_ofb
|
||||
|
||||
const EVP_CIPHER *EVP_idea_cbc(void)
|
||||
const EVP_CIPHER *EVP_idea_cfb(void)
|
||||
const EVP_CIPHER *EVP_idea_cfb64(void)
|
||||
const EVP_CIPHER *EVP_idea_ecb(void)
|
||||
const EVP_CIPHER *EVP_idea_ofb(void)
|
||||
|
||||
@@ -25,6 +27,7 @@ The IDEA encryption algorithm for EVP.
|
||||
|
||||
=item EVP_idea_cbc(),
|
||||
EVP_idea_cfb(),
|
||||
EVP_idea_cfb64(),
|
||||
EVP_idea_ecb(),
|
||||
EVP_idea_ofb()
|
||||
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
|
||||
=head1 NAME
|
||||
|
||||
EVP_md5
|
||||
EVP_md5,
|
||||
EVP_md5_sha1
|
||||
- MD5 For EVP
|
||||
|
||||
=head1 SYNOPSIS
|
||||
@@ -10,6 +11,7 @@ EVP_md5
|
||||
#include <openssl/evp.h>
|
||||
|
||||
const EVP_MD *EVP_md5(void);
|
||||
const EVP_MD *EVP_md5_sha1(void);
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
EVP_rc2_cbc,
|
||||
EVP_rc2_cfb,
|
||||
EVP_rc2_cfb64,
|
||||
EVP_rc2_ecb,
|
||||
EVP_rc2_ofb,
|
||||
EVP_rc2_40_cbc,
|
||||
@@ -16,6 +17,7 @@ EVP_rc2_64_cbc
|
||||
|
||||
const EVP_CIPHER *EVP_rc2_cbc(void)
|
||||
const EVP_CIPHER *EVP_rc2_cfb(void)
|
||||
const EVP_CIPHER *EVP_rc2_cfb64(void)
|
||||
const EVP_CIPHER *EVP_rc2_ecb(void)
|
||||
const EVP_CIPHER *EVP_rc2_ofb(void)
|
||||
const EVP_CIPHER *EVP_rc2_40_cbc(void)
|
||||
@@ -29,6 +31,7 @@ The RC2 encryption algorithm for EVP.
|
||||
|
||||
=item EVP_rc2_cbc(),
|
||||
EVP_rc2_cfb(),
|
||||
EVP_rc2_cfb64(),
|
||||
EVP_rc2_ecb(),
|
||||
EVP_rc2_ofb()
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
EVP_rc5_32_12_16_cbc,
|
||||
EVP_rc5_32_12_16_cfb,
|
||||
EVP_rc5_32_12_16_cfb64,
|
||||
EVP_rc5_32_12_16_ecb,
|
||||
EVP_rc5_32_12_16_ofb
|
||||
- EVP RC5 cipher
|
||||
@@ -14,6 +15,7 @@ EVP_rc5_32_12_16_ofb
|
||||
|
||||
const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void)
|
||||
const EVP_CIPHER *EVP_rc5_32_12_16_cfb(void)
|
||||
const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void)
|
||||
const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void)
|
||||
const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void)
|
||||
|
||||
@@ -25,6 +27,7 @@ The RC5 encryption algorithm for EVP.
|
||||
|
||||
=item EVP_rc5_32_12_16_cbc(),
|
||||
EVP_rc5_32_12_16_cfb(),
|
||||
EVP_rc5_32_12_16_cfb64(),
|
||||
EVP_rc5_32_12_16_ecb(),
|
||||
EVP_rc5_32_12_16_ofb()
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
EVP_seed_cbc,
|
||||
EVP_seed_cfb,
|
||||
EVP_seed_cfb128,
|
||||
EVP_seed_ecb,
|
||||
EVP_seed_ofb
|
||||
- EVP SEED cipher
|
||||
@@ -14,6 +15,7 @@ EVP_seed_ofb
|
||||
|
||||
const EVP_CIPHER *EVP_seed_cbc(void)
|
||||
const EVP_CIPHER *EVP_seed_cfb(void)
|
||||
const EVP_CIPHER *EVP_seed_cfb128(void)
|
||||
const EVP_CIPHER *EVP_seed_ecb(void)
|
||||
const EVP_CIPHER *EVP_seed_ofb(void)
|
||||
|
||||
@@ -27,6 +29,7 @@ All modes below use a key length of 128 bits and acts on blocks of 128-bits.
|
||||
|
||||
=item EVP_seed_cbc(),
|
||||
EVP_seed_cfb(),
|
||||
EVP_seed_cfb128(),
|
||||
EVP_seed_ecb(),
|
||||
EVP_seed_ofb()
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
EVP_sm4_cbc,
|
||||
EVP_sm4_ecb,
|
||||
EVP_sm4_cfb,
|
||||
EVP_sm4_cfb128,
|
||||
EVP_sm4_ofb,
|
||||
EVP_sm4_ctr
|
||||
- EVP SM4 cipher
|
||||
@@ -16,6 +17,7 @@ EVP_sm4_ctr
|
||||
const EVP_CIPHER *EVP_sm4_cbc(void);
|
||||
const EVP_CIPHER *EVP_sm4_ecb(void);
|
||||
const EVP_CIPHER *EVP_sm4_cfb(void);
|
||||
const EVP_CIPHER *EVP_sm4_cfb128(void);
|
||||
const EVP_CIPHER *EVP_sm4_ofb(void);
|
||||
const EVP_CIPHER *EVP_sm4_ctr(void);
|
||||
|
||||
@@ -30,6 +32,7 @@ All modes below use a key length of 128 bits and acts on blocks of 128 bits.
|
||||
=item EVP_sm4_cbc(),
|
||||
EVP_sm4_ecb(),
|
||||
EVP_sm4_cfb(),
|
||||
EVP_sm4_cfb128(),
|
||||
EVP_sm4_ofb(),
|
||||
EVP_sm4_ctr()
|
||||
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
OPENSSL_s390xcap - the IBM z processor capabilities vector
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
env OPENSSL_s390xcap=... <application>
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
libcrypto supports z/Architecture instruction set extensions. These
|
||||
extensions are denoted by individual bits in the capabilities vector.
|
||||
When libcrypto is initialized, the bits returned by the STFLE instruction
|
||||
and by the QUERY functions are stored in the vector.
|
||||
|
||||
To change the set of instructions available to an application, you can
|
||||
set the OPENSSL_s390xcap environment variable before you start the
|
||||
application. After initialization, the capability vector is ANDed bitwise
|
||||
with a mask which is derived from the environment variable.
|
||||
|
||||
The environment variable is a semicolon-separated list of tokens which is
|
||||
processed from left to right (whitespace is ignored):
|
||||
|
||||
OPENSSL_s390xcap="<tok1>;<tok2>;..."
|
||||
|
||||
There are three types of tokens:
|
||||
|
||||
=over 4
|
||||
|
||||
=item <string>
|
||||
|
||||
The name of a processor generation. A bit in the environment variable's
|
||||
mask is set to one if and only if the specified processor generation
|
||||
implements the corresponding instruction set extension. Possible values
|
||||
are z900, z990, z9, z10, z196, zEC12, z13 and z14.
|
||||
|
||||
=item <string>:<mask>:<mask>
|
||||
|
||||
The name of an instruction followed by two 64-bit masks. The part of the
|
||||
environment variable's mask corresponding to the specified instruction is
|
||||
set to the specified 128-bit mask. Possible values are kimd, klmd, km, kmc,
|
||||
kmac, kmctr, kmo, kmf, prno and kma.
|
||||
|
||||
=item stfle:<mask>:<mask>:<mask>
|
||||
|
||||
Store-facility-list-extended (stfle) followed by three 64-bit masks. The
|
||||
part of the environment variable's mask corresponding to the stfle
|
||||
instruction is set to the specified 192-bit mask.
|
||||
|
||||
=back
|
||||
|
||||
The 64-bit masks are specified in hexadecimal notation. The 0x prefix is
|
||||
optional. Prefix a mask with a tilde (~) to denote a bitwise NOT operation.
|
||||
|
||||
The following is a list of significant bits for each instruction. Colon
|
||||
rows separate the individual 64-bit masks. The bit numbers in the first
|
||||
column are consistent with [1], that is, 0 denotes the leftmost bit and
|
||||
the numbering is continuous across 64-bit mask boundaries.
|
||||
|
||||
Bit Mask Facility/Function
|
||||
|
||||
stfle:
|
||||
# 17 1<<46 message-security assist
|
||||
# 25 1<<38 store-clock-fast facility
|
||||
:
|
||||
# 76 1<<51 message-security assist extension 3
|
||||
# 77 1<<50 message-security assist extension 4
|
||||
:
|
||||
#129 1<<62 vector facility
|
||||
#134 1<<57 vector packed decimal facility
|
||||
#135 1<<56 vector enhancements facility 1
|
||||
#146 1<<45 message-security assist extension 8
|
||||
|
||||
kimd :
|
||||
# 1 1<<62 KIMD-SHA-1
|
||||
# 2 1<<61 KIMD-SHA-256
|
||||
# 3 1<<60 KIMD-SHA-512
|
||||
# 32 1<<31 KIMD-SHA3-224
|
||||
# 33 1<<30 KIMD-SHA3-256
|
||||
# 34 1<<29 KIMD-SHA3-384
|
||||
# 35 1<<28 KIMD-SHA3-512
|
||||
# 36 1<<27 KIMD-SHAKE-128
|
||||
# 37 1<<26 KIMD-SHAKE-256
|
||||
:
|
||||
# 65 1<<62 KIMD-GHASH
|
||||
|
||||
klmd :
|
||||
# 32 1<<31 KLMD-SHA3-224
|
||||
# 33 1<<30 KLMD-SHA3-256
|
||||
# 34 1<<29 KLMD-SHA3-384
|
||||
# 35 1<<28 KLMD-SHA3-512
|
||||
# 36 1<<27 KLMD-SHAKE-128
|
||||
# 37 1<<26 KLMD-SHAKE-256
|
||||
:
|
||||
|
||||
km :
|
||||
# 18 1<<45 KM-AES-128
|
||||
# 19 1<<44 KM-AES-192
|
||||
# 20 1<<43 KM-AES-256
|
||||
# 50 1<<13 KM-XTS-AES-128
|
||||
# 52 1<<11 KM-XTS-AES-256
|
||||
:
|
||||
|
||||
kmc :
|
||||
# 18 1<<45 KMC-AES-128
|
||||
# 19 1<<44 KMC-AES-192
|
||||
# 20 1<<43 KMC-AES-256
|
||||
:
|
||||
|
||||
kmac :
|
||||
# 18 1<<45 KMAC-AES-128
|
||||
# 19 1<<44 KMAC-AES-192
|
||||
# 20 1<<43 KMAC-AES-256
|
||||
:
|
||||
|
||||
kmctr:
|
||||
:
|
||||
|
||||
kmo :
|
||||
# 18 1<<45 KMO-AES-128
|
||||
# 19 1<<44 KMO-AES-192
|
||||
# 20 1<<43 KMO-AES-256
|
||||
:
|
||||
|
||||
kmf :
|
||||
# 18 1<<45 KMF-AES-128
|
||||
# 19 1<<44 KMF-AES-192
|
||||
# 20 1<<43 KMF-AES-256
|
||||
:
|
||||
|
||||
prno :
|
||||
:
|
||||
|
||||
kma :
|
||||
# 18 1<<45 KMA-GCM-AES-128
|
||||
# 19 1<<44 KMA-GCM-AES-192
|
||||
# 20 1<<43 KMA-GCM-AES-256
|
||||
:
|
||||
|
||||
=head1 EXAMPLES
|
||||
|
||||
Disables all instruction set extensions which the z196 processor does not implement:
|
||||
|
||||
OPENSSL_s390xcap="z196"
|
||||
|
||||
Disables the vector facility:
|
||||
|
||||
OPENSSL_s390xcap="stfle:~0:~0:~0x4000000000000000"
|
||||
|
||||
Disables the KM-XTS-AES and and the KIMD-SHAKE function codes:
|
||||
|
||||
OPENSSL_s390xcap="km:~0x2800:~0;kimd:~0xc000000:~0"
|
||||
|
||||
=head1 RETURN VALUES
|
||||
|
||||
Not available.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
[1] z/Architecture Principles of Operation, SA22-7832-11
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the OpenSSL license (the "License"). You may not use
|
||||
this file except in compliance with the License. You can obtain a copy
|
||||
in the file LICENSE in the source distribution or at
|
||||
L<https://www.openssl.org/source/license.html>.
|
||||
|
||||
=cut
|
||||
@@ -0,0 +1,65 @@
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
EVP_MAC_CMAC - The CMAC EVP_MAC implementation
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Support for computing CMAC MACs through the B<EVP_MAC> API.
|
||||
|
||||
=head2 Numeric identity
|
||||
|
||||
B<EVP_MAC_CMAC> is the numeric identity for this implementation, and
|
||||
can be used in functions like EVP_MAC_CTX_new_id() and
|
||||
EVP_get_macbynid().
|
||||
|
||||
=head2 Supported controls
|
||||
|
||||
The supported controls are:
|
||||
|
||||
=over 4
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_KEY>
|
||||
|
||||
EVP_MAC_ctrl_str() takes to type string for this control:
|
||||
|
||||
=over 4
|
||||
|
||||
=item "key"
|
||||
|
||||
The value string is used as is.
|
||||
|
||||
=item "hexkey"
|
||||
|
||||
The value string is expected to be a hexadecimal number, which will be
|
||||
decoded before passing on as control value.
|
||||
|
||||
=back
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_ENGINE>
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_CIPHER>
|
||||
|
||||
These work as described in L<EVP_MAC(3)/CONTROLS>.
|
||||
|
||||
EVP_MAC_ctrl_str() type string for B<EVP_MAC_CTRL_SET_CIPHER>: "cipher"
|
||||
|
||||
The value is expected to be the name of a cipher.
|
||||
|
||||
=back
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
L<EVP_MAC_ctrl(3)>, L<EVP_MAC(3)/CONTROLS>
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the OpenSSL license (the "License"). You may not use
|
||||
this file except in compliance with the License. You can obtain a copy
|
||||
in the file LICENSE in the source distribution or at
|
||||
L<https://www.openssl.org/source/license.html>.
|
||||
|
||||
=cut
|
||||
@@ -0,0 +1,71 @@
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
EVP_MAC_HMAC - The HMAC EVP_MAC implementation
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Support for computing HMAC MACs through the B<EVP_MAC> API.
|
||||
|
||||
=head2 Numeric identity
|
||||
|
||||
B<EVP_MAC_HMAC> is the numeric identity for this implementation, and
|
||||
can be used in functions like EVP_MAC_CTX_new_id() and
|
||||
EVP_get_macbynid().
|
||||
|
||||
=head2 Supported controls
|
||||
|
||||
The supported controls are:
|
||||
|
||||
=over 4
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_KEY>
|
||||
|
||||
EVP_MAC_ctrl_str() takes to type string for this control:
|
||||
|
||||
=over 4
|
||||
|
||||
=item "key"
|
||||
|
||||
The value string is used as is.
|
||||
|
||||
=item "hexkey"
|
||||
|
||||
The value string is expected to be a hexadecimal number, which will be
|
||||
decoded before passing on as control value.
|
||||
|
||||
=back
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_FLAGS>
|
||||
|
||||
Sets HMAC flags. This is passed directly to HMAC_CTX_set_flags().
|
||||
|
||||
There are no corresponding string control types.
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_ENGINE>
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_MD>
|
||||
|
||||
These work as described in L<EVP_MAC(3)/CONTROLS>.
|
||||
|
||||
EVP_MAC_ctrl_str() type string for B<EVP_MAC_CTRL_SET_DIGEST>: "digest"
|
||||
|
||||
The value is expected to be the name of a cipher.
|
||||
|
||||
=back
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
L<EVP_MAC_ctrl(3)>, L<EVP_MAC(3)/CONTROLS>
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the OpenSSL license (the "License"). You may not use
|
||||
this file except in compliance with the License. You can obtain a copy
|
||||
in the file LICENSE in the source distribution or at
|
||||
L<https://www.openssl.org/source/license.html>.
|
||||
|
||||
=cut
|
||||
@@ -0,0 +1,61 @@
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
EVP_MAC_SIPHASH - The SipHash EVP_MAC implementation
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Support for computing SipHash MACs through the B<EVP_MAC> API.
|
||||
|
||||
=head2 Numeric identity
|
||||
|
||||
B<EVP_MAC_SIPHASH> is the numeric identity for this implementation,
|
||||
and can be used in functions like EVP_MAC_CTX_new_id() and
|
||||
EVP_get_macbynid().
|
||||
|
||||
=head2 Supported controls
|
||||
|
||||
The supported controls are:
|
||||
|
||||
=over 4
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_SIZE>
|
||||
|
||||
EVP_MAC_ctrl_str() type string: "digestsize"
|
||||
|
||||
The value string is expected to contain a decimal number.
|
||||
|
||||
=item B<EVP_MAC_CTRL_SET_KEY>
|
||||
|
||||
EVP_MAC_ctrl_str() takes to type string for this control:
|
||||
|
||||
=over 4
|
||||
|
||||
=item "key"
|
||||
|
||||
The value string is used as is.
|
||||
|
||||
=item "hexkey"
|
||||
|
||||
The value string is expected to be a hexadecimal number, which will be
|
||||
decoded before passing on as control value.
|
||||
|
||||
=back
|
||||
|
||||
=back
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
L<EVP_MAC_ctrl(3)>, L<EVP_MAC(3)/CONTROLS>
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
|
||||
Licensed under the OpenSSL license (the "License"). You may not use
|
||||
this file except in compliance with the License. You can obtain a copy
|
||||
in the file LICENSE in the source distribution or at
|
||||
L<https://www.openssl.org/source/license.html>.
|
||||
|
||||
=cut
|
||||
Reference in New Issue
Block a user