mirror of https://github.com/openssl/openssl.git
				
				
				
			Implementation of the RFC 9579, PBMAC1 in PKCS#12 - documentation
Reviewed-by: Paul Dale <ppzgs1@gmail.com> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/24577)
This commit is contained in:
		
							parent
							
								
									fe79159be0
								
							
						
					
					
						commit
						38aa61e5a7
					
				|  | @ -62,6 +62,8 @@ PKCS#12 output (export) options: | ||||||
| [B<-certpbe> I<cipher>] | [B<-certpbe> I<cipher>] | ||||||
| [B<-descert>] | [B<-descert>] | ||||||
| [B<-macalg> I<digest>] | [B<-macalg> I<digest>] | ||||||
|  | [B<-pbmac1_pbkdf2>] | ||||||
|  | [B<-pbmac1_pbkdf2_md> I<digest>] | ||||||
| [B<-iter> I<count>] | [B<-iter> I<count>] | ||||||
| [B<-noiter>] | [B<-noiter>] | ||||||
| [B<-nomaciter>] | [B<-nomaciter>] | ||||||
|  | @ -345,6 +347,15 @@ then both, the private key and the certificates are encrypted using triple DES. | ||||||
| 
 | 
 | ||||||
| Specify the MAC digest algorithm. If not included SHA256 will be used. | Specify the MAC digest algorithm. If not included SHA256 will be used. | ||||||
| 
 | 
 | ||||||
|  | =item B<-pbmac1_pbkdf2> | ||||||
|  | 
 | ||||||
|  | Use PBMAC1 with PBKDF2 for MAC protection of the PKCS#12 file. | ||||||
|  | 
 | ||||||
|  | =item B<-pbmac1_pbkdf2_md> I<digest> | ||||||
|  | 
 | ||||||
|  | Specify the PBKDF2 KDF digest algorithm. If not specified, SHA256 will be used. | ||||||
|  | Unless C<-pbmac1_pbkdf2> is specified, this parameter is ignored. | ||||||
|  | 
 | ||||||
| =item B<-iter> I<count> | =item B<-iter> I<count> | ||||||
| 
 | 
 | ||||||
| This option specifies the iteration count for the encryption key and MAC. The | This option specifies the iteration count for the encryption key and MAC. The | ||||||
|  |  | ||||||
|  | @ -0,0 +1,46 @@ | ||||||
|  | =pod | ||||||
|  | 
 | ||||||
|  | =head1 NAME | ||||||
|  | 
 | ||||||
|  | PBMAC1_get1_pbkdf2_param - Function to manipulate a PBMAC1 | ||||||
|  | MAC structure | ||||||
|  | 
 | ||||||
|  | =head1 SYNOPSIS | ||||||
|  | 
 | ||||||
|  |  #include <openssl/x509.h> | ||||||
|  | 
 | ||||||
|  |  PBKDF2PARAM *PBMAC1_get1_pbkdf2_param(const X509_ALGOR *macalg); | ||||||
|  | 
 | ||||||
|  | =head1 DESCRIPTION | ||||||
|  | 
 | ||||||
|  | PBMAC1_get1_pbkdf2_param() retrieves a B<PBKDF2PARAM> structure from an | ||||||
|  | I<X509_ALGOR> structure. | ||||||
|  | 
 | ||||||
|  | =head1 RETURN VALUES | ||||||
|  | 
 | ||||||
|  | PBMAC1_get1_pbkdf2_param() returns NULL in case when PBMAC1 uses an algorithm | ||||||
|  | apart from B<PBKDF2> or when passed incorrect parameters and a pointer to | ||||||
|  | B<PBKDF2PARAM> structure otherwise. | ||||||
|  | 
 | ||||||
|  | =head1 CONFORMING TO | ||||||
|  | 
 | ||||||
|  | IETF RFC 9579 (L<https://tools.ietf.org/html/rfc9579>) | ||||||
|  | 
 | ||||||
|  | =head1 SEE ALSO | ||||||
|  | 
 | ||||||
|  | L<openssl-pkcs12(1)> | ||||||
|  | 
 | ||||||
|  | =head1 HISTORY | ||||||
|  | 
 | ||||||
|  | The I<PBMAC1_get1_pbkdf2_param> function was added in OpenSSL 3.4. | ||||||
|  | 
 | ||||||
|  | =head1 COPYRIGHT | ||||||
|  | 
 | ||||||
|  | Copyright 2021-2024 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 | ||||||
|  | @ -3,7 +3,8 @@ | ||||||
| =head1 NAME | =head1 NAME | ||||||
| 
 | 
 | ||||||
| PKCS12_gen_mac, PKCS12_setup_mac, PKCS12_set_mac, | PKCS12_gen_mac, PKCS12_setup_mac, PKCS12_set_mac, | ||||||
| PKCS12_verify_mac - Functions to create and manipulate a PKCS#12 structure | PKCS12_set_pbmac1_pbkdf2, PKCS12_verify_mac, PKCS12_get0_mac - | ||||||
|  | Functions to create and manipulate a PKCS#12 MAC structure | ||||||
| 
 | 
 | ||||||
| =head1 SYNOPSIS | =head1 SYNOPSIS | ||||||
| 
 | 
 | ||||||
|  | @ -15,9 +16,19 @@ PKCS12_verify_mac - Functions to create and manipulate a PKCS#12 structure | ||||||
|  int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, |  int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, | ||||||
|                     unsigned char *salt, int saltlen, int iter, |                     unsigned char *salt, int saltlen, int iter, | ||||||
|                     const EVP_MD *md_type); |                     const EVP_MD *md_type); | ||||||
|  |  int PKCS12_set_pbmac1_pbkdf2(PKCS12 *p12, const char *pass, int passlen, | ||||||
|  |                                    unsigned char *salt, int saltlen, int iter, | ||||||
|  |                                    const EVP_MD *md_type, | ||||||
|  |                                    const char *prf_md_name); | ||||||
|  int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, |  int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, | ||||||
|                       int saltlen, const EVP_MD *md_type); |                       int saltlen, const EVP_MD *md_type); | ||||||
| 
 | 
 | ||||||
|  |  void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, | ||||||
|  |                       const X509_ALGOR **pmacalg, | ||||||
|  |                       const ASN1_OCTET_STRING **psalt, | ||||||
|  |                       const ASN1_INTEGER **piter, | ||||||
|  |                       const PKCS12 *p12); | ||||||
|  | 
 | ||||||
| =head1 DESCRIPTION | =head1 DESCRIPTION | ||||||
| 
 | 
 | ||||||
| PKCS12_gen_mac() generates an HMAC over the entire PKCS#12 object using the | PKCS12_gen_mac() generates an HMAC over the entire PKCS#12 object using the | ||||||
|  | @ -31,10 +42,15 @@ PKCS12_setup_mac() sets the MAC part of the PKCS#12 structure with the supplied | ||||||
| parameters. | parameters. | ||||||
| 
 | 
 | ||||||
| PKCS12_set_mac() sets the MAC and MAC parameters into the PKCS#12 object. | PKCS12_set_mac() sets the MAC and MAC parameters into the PKCS#12 object. | ||||||
|  | PKCS12_set_pbmac1_pbkdf2() sets the MAC and MAC parameters into the PKCS#12 | ||||||
|  | object when B<PBMAC1> with PBKDF2 is used for protection of the PKCS#12 object. | ||||||
| 
 | 
 | ||||||
| I<pass> is the passphrase to use in the HMAC. I<salt> is the salt value to use, | I<pass> is the passphrase to use in the HMAC. I<salt> is the salt value to use, | ||||||
| I<iter> is the iteration count and I<md_type> is the message digest | I<iter> is the iteration count and I<md_type> is the message digest function to | ||||||
| function to use. | use. I<prf_md_name> specifies the digest used for the PBKDF2 in PBMAC1 KDF. | ||||||
|  | 
 | ||||||
|  | PKCS12_get0_mac() retrieves any included MAC value, B<X509_ALGOR> object, | ||||||
|  | I<salt>, and I<iter> count from the PKCS12 object. | ||||||
| 
 | 
 | ||||||
| =head1 NOTES | =head1 NOTES | ||||||
| 
 | 
 | ||||||
|  | @ -43,17 +59,18 @@ If I<salt> is NULL then a suitable salt will be generated and used. | ||||||
| If I<iter> is 1 then an iteration count will be omitted from the PKCS#12 | If I<iter> is 1 then an iteration count will be omitted from the PKCS#12 | ||||||
| structure. | structure. | ||||||
| 
 | 
 | ||||||
| PKCS12_gen_mac(), PKCS12_verify_mac() and PKCS12_set_mac() make assumptions | PKCS12_gen_mac(), PKCS12_verify_mac(), PKCS12_set_mac() and | ||||||
| regarding the encoding of the given passphrase. See L<passphrase-encoding(7)> | PKCS12_set_pbmac1_pbkdf2() make assumptions regarding the encoding of the | ||||||
| for more information. | given passphrase. See L<passphrase-encoding(7)> for more information. | ||||||
| 
 | 
 | ||||||
| =head1 RETURN VALUES | =head1 RETURN VALUES | ||||||
| 
 | 
 | ||||||
| All functions return 1 on success and 0 if an error occurred. | All functions returning an integer return 1 on success and 0 if an error occurred. | ||||||
| 
 | 
 | ||||||
| =head1 CONFORMING TO | =head1 CONFORMING TO | ||||||
| 
 | 
 | ||||||
| IETF RFC 7292 (L<https://tools.ietf.org/html/rfc7292>) | IETF RFC 7292 (L<https://tools.ietf.org/html/rfc7292>) | ||||||
|  | IETF RFC 9579 (L<https://tools.ietf.org/html/rfc9579>) | ||||||
| 
 | 
 | ||||||
| =head1 SEE ALSO | =head1 SEE ALSO | ||||||
| 
 | 
 | ||||||
|  | @ -62,9 +79,13 @@ L<EVP_KDF-PKCS12KDF(7)>, | ||||||
| L<PKCS12_create(3)>, | L<PKCS12_create(3)>, | ||||||
| L<passphrase-encoding(7)> | L<passphrase-encoding(7)> | ||||||
| 
 | 
 | ||||||
|  | =head1 HISTORY | ||||||
|  | 
 | ||||||
|  | The I<PKCS12_set_pbmac1_pbkdf2> function was added in OpenSSL 3.4. | ||||||
|  | 
 | ||||||
| =head1 COPYRIGHT | =head1 COPYRIGHT | ||||||
| 
 | 
 | ||||||
| Copyright 2021-2023 The OpenSSL Project Authors. All Rights Reserved. | Copyright 2021-2024 The OpenSSL Project Authors. All Rights Reserved. | ||||||
| 
 | 
 | ||||||
| Licensed under the Apache License 2.0 (the "License").  You may not use | 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 | this file except in compliance with the License.  You can obtain a copy | ||||||
|  |  | ||||||
|  | @ -218,6 +218,9 @@ PBEPARAM_free, | ||||||
| PBEPARAM_new, | PBEPARAM_new, | ||||||
| PBKDF2PARAM_free, | PBKDF2PARAM_free, | ||||||
| PBKDF2PARAM_new, | PBKDF2PARAM_new, | ||||||
|  | PBMAC1PARAM_free, | ||||||
|  | PBMAC1PARAM_it, | ||||||
|  | PBMAC1PARAM_new, | ||||||
| PKCS12_BAGS_free, | PKCS12_BAGS_free, | ||||||
| PKCS12_BAGS_new, | PKCS12_BAGS_new, | ||||||
| PKCS12_MAC_DATA_free, | PKCS12_MAC_DATA_free, | ||||||
|  |  | ||||||
|  | @ -115,6 +115,7 @@ d2i_OTHERNAME, | ||||||
| d2i_PBE2PARAM, | d2i_PBE2PARAM, | ||||||
| d2i_PBEPARAM, | d2i_PBEPARAM, | ||||||
| d2i_PBKDF2PARAM, | d2i_PBKDF2PARAM, | ||||||
|  | d2i_PBMAC1PARAM, | ||||||
| d2i_PKCS12, | d2i_PKCS12, | ||||||
| d2i_PKCS12_BAGS, | d2i_PKCS12_BAGS, | ||||||
| d2i_PKCS12_MAC_DATA, | d2i_PKCS12_MAC_DATA, | ||||||
|  | @ -300,6 +301,7 @@ i2d_OTHERNAME, | ||||||
| i2d_PBE2PARAM, | i2d_PBE2PARAM, | ||||||
| i2d_PBEPARAM, | i2d_PBEPARAM, | ||||||
| i2d_PBKDF2PARAM, | i2d_PBKDF2PARAM, | ||||||
|  | i2d_PBMAC1PARAM, | ||||||
| i2d_PKCS12, | i2d_PKCS12, | ||||||
| i2d_PKCS12_BAGS, | i2d_PKCS12_BAGS, | ||||||
| i2d_PKCS12_MAC_DATA, | i2d_PKCS12_MAC_DATA, | ||||||
|  |  | ||||||
|  | @ -749,7 +749,6 @@ PKCS12_MAC_DATA_it(3) | ||||||
| PKCS12_PBE_add(3) | PKCS12_PBE_add(3) | ||||||
| PKCS12_SAFEBAGS_it(3) | PKCS12_SAFEBAGS_it(3) | ||||||
| PKCS12_SAFEBAG_it(3) | PKCS12_SAFEBAG_it(3) | ||||||
| PKCS12_get0_mac(3) |  | ||||||
| PKCS12_get_attr(3) | PKCS12_get_attr(3) | ||||||
| PKCS12_it(3) | PKCS12_it(3) | ||||||
| PKCS12_item_pack_safebag(3) | PKCS12_item_pack_safebag(3) | ||||||
|  |  | ||||||
|  | @ -1027,7 +1027,6 @@ PKCS12_add_safe(3) | ||||||
| PKCS12_add_safes(3) | PKCS12_add_safes(3) | ||||||
| PKCS12_decrypt_skey(3) | PKCS12_decrypt_skey(3) | ||||||
| PKCS12_gen_mac(3) | PKCS12_gen_mac(3) | ||||||
| PKCS12_get0_mac(3) |  | ||||||
| PKCS12_get_attr(3) | PKCS12_get_attr(3) | ||||||
| PKCS12_get_attr_gen(3) | PKCS12_get_attr_gen(3) | ||||||
| PKCS12_get_friendlyname(3) | PKCS12_get_friendlyname(3) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue