123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- =pod
- =head1 NAME
- PKCS12_key_gen_asc, PKCS12_key_gen_asc_ex,
- PKCS12_key_gen_uni, PKCS12_key_gen_uni_ex,
- PKCS12_key_gen_utf8, PKCS12_key_gen_utf8_ex - PKCS#12 Password based key derivation
- =head1 SYNOPSIS
- #include <openssl/pkcs12.h>
- int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt,
- int saltlen, int id, int iter, int n,
- unsigned char *out, const EVP_MD *md_type);
- int PKCS12_key_gen_asc_ex(const char *pass, int passlen, unsigned char *salt,
- int saltlen, int id, int iter, int n,
- unsigned char *out, const EVP_MD *md_type,
- OSSL_LIB_CTX *ctx, const char *propq);
- int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,
- int saltlen, int id, int iter, int n,
- unsigned char *out, const EVP_MD *md_type);
- int PKCS12_key_gen_uni_ex(unsigned char *pass, int passlen, unsigned char *salt,
- int saltlen, int id, int iter, int n,
- unsigned char *out, const EVP_MD *md_type,
- OSSL_LIB_CTX *ctx, const char *propq);
- int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt,
- int saltlen, int id, int iter, int n,
- unsigned char *out, const EVP_MD *md_type);
- int PKCS12_key_gen_utf8_ex(const char *pass, int passlen, unsigned char *salt,
- int saltlen, int id, int iter, int n,
- unsigned char *out, const EVP_MD *md_type,
- OSSL_LIB_CTX *ctx, const char *propq);
- =head1 DESCRIPTION
- These methods perform a key derivation according to PKCS#12 (RFC7292)
- with an input password I<pass> of length I<passlen>, a salt I<salt> of length
- I<saltlen>, an iteration count I<iter> and a digest algorithm I<md_type>.
- The ID byte I<id> determines how the resulting key is intended to be used:
- =over 4
- =item *
- If ID=1, then the pseudorandom bits being produced are to be used
- as key material for performing encryption or decryption.
- =item *
- If ID=2, then the pseudorandom bits being produced are to be used
- as an IV (Initial Value) for encryption or decryption.
- =item *
- If ID=3, then the pseudorandom bits being produced are to be used
- as an integrity key for MACing.
- =back
- The intended format of the supplied password is determined by the method chosen:
- =over 4
- =item *
- PKCS12_key_gen_asc() and PKCS12_key_gen_asc_ex() expect an ASCII-formatted password.
- =item *
- PKCS12_key_gen_uni() and PKCS12_key_gen_uni_ex() expect a Unicode-formatted password.
- =item *
- PKCS12_key_gen_utf8() and PKCS12_key_gen_utf8_ex() expect a UTF-8 encoded password.
- =back
- I<pass> is the password used in the derivation of length I<passlen>. I<pass>
- is an optional parameter and can be NULL. If I<passlen> is -1, then the
- function will calculate the length of I<pass> using strlen().
- I<salt> is the salt used in the derivation of length I<saltlen>. If the
- I<salt> is NULL, then I<saltlen> must be 0. The function will not
- attempt to calculate the length of the I<salt> because it is not assumed to
- be NULL terminated.
- I<iter> is the iteration count and its value should be greater than or
- equal to 1. RFC 2898 suggests an iteration count of at least 1000. Any
- I<iter> less than 1 is treated as a single iteration.
- I<digest> is the message digest function used in the derivation.
- The derived key will be written to I<out>. The size of the I<out> buffer
- is specified via I<n>.
- Functions ending in _ex() allow for a library context I<ctx> and property query
- I<propq> to be used to select algorithm implementations.
- =head1 NOTES
- A typical application of this function is to derive keying material for an
- encryption algorithm from a password in the I<pass>, a salt in I<salt>,
- and an iteration count.
- Increasing the I<iter> parameter slows down the algorithm which makes it
- harder for an attacker to perform a brute force attack using a large number
- of candidate passwords.
- =head1 RETURN VALUES
- Returns 1 on success or 0 on error.
- =head1 CONFORMING TO
- IETF RFC 7292 (L<https://tools.ietf.org/html/rfc7292>)
- =head1 SEE ALSO
- L<PKCS12_create_ex(3)>,
- L<PKCS12_pbe_crypt_ex(3)>,
- L<passphrase-encoding(7)>
- =head1 HISTORY
- PKCS12_key_gen_asc_ex(), PKCS12_key_gen_uni_ex() and PKCS12_key_gen_utf8_ex()
- were added in OpenSSL 3.0.
- =head1 COPYRIGHT
- Copyright 2021 The OpenSSL Project Authors. All Rights Reserved.
- Licensed under the Apache License 2.0 (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
|