yuezonghe | 824eb0c | 2024-06-27 02:32:26 -0700 | [diff] [blame] | 1 | =pod |
| 2 | |
| 3 | =head1 NAME |
| 4 | |
| 5 | PKCS12_newpass - change the password of a PKCS12 structure |
| 6 | |
| 7 | =head1 SYNOPSIS |
| 8 | |
| 9 | #include <openssl/pkcs12.h> |
| 10 | |
| 11 | int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); |
| 12 | |
| 13 | =head1 DESCRIPTION |
| 14 | |
| 15 | PKCS12_newpass() changes the password of a PKCS12 structure. |
| 16 | |
| 17 | B<p12> is a pointer to a PKCS12 structure. B<oldpass> is the existing password |
| 18 | and B<newpass> is the new password. |
| 19 | |
| 20 | =head1 NOTES |
| 21 | |
| 22 | Each of B<oldpass> and B<newpass> is independently interpreted as a string in |
| 23 | the UTF-8 encoding. If it is not valid UTF-8, it is assumed to be ISO8859-1 |
| 24 | instead. |
| 25 | |
| 26 | In particular, this means that passwords in the locale character set |
| 27 | (or code page on Windows) must potentially be converted to UTF-8 before |
| 28 | use. This may include passwords from local text files, or input from |
| 29 | the terminal or command line. Refer to the documentation of |
| 30 | L<UI_OpenSSL(3)>, for example. |
| 31 | |
| 32 | =head1 RETURN VALUES |
| 33 | |
| 34 | PKCS12_newpass() returns 1 on success or 0 on failure. Applications can |
| 35 | retrieve the most recent error from PKCS12_newpass() with ERR_get_error(). |
| 36 | |
| 37 | =head1 EXAMPLES |
| 38 | |
| 39 | This example loads a PKCS#12 file, changes its password and writes out |
| 40 | the result to a new file. |
| 41 | |
| 42 | #include <stdio.h> |
| 43 | #include <stdlib.h> |
| 44 | #include <openssl/pem.h> |
| 45 | #include <openssl/err.h> |
| 46 | #include <openssl/pkcs12.h> |
| 47 | |
| 48 | int main(int argc, char **argv) |
| 49 | { |
| 50 | FILE *fp; |
| 51 | PKCS12 *p12; |
| 52 | |
| 53 | if (argc != 5) { |
| 54 | fprintf(stderr, "Usage: pkread p12file password newpass opfile\n"); |
| 55 | return 1; |
| 56 | } |
| 57 | if ((fp = fopen(argv[1], "rb")) == NULL) { |
| 58 | fprintf(stderr, "Error opening file %s\n", argv[1]); |
| 59 | return 1; |
| 60 | } |
| 61 | p12 = d2i_PKCS12_fp(fp, NULL); |
| 62 | fclose(fp); |
| 63 | if (p12 == NULL) { |
| 64 | fprintf(stderr, "Error reading PKCS#12 file\n"); |
| 65 | ERR_print_errors_fp(stderr); |
| 66 | return 1; |
| 67 | } |
| 68 | if (PKCS12_newpass(p12, argv[2], argv[3]) == 0) { |
| 69 | fprintf(stderr, "Error changing password\n"); |
| 70 | ERR_print_errors_fp(stderr); |
| 71 | PKCS12_free(p12); |
| 72 | return 1; |
| 73 | } |
| 74 | if ((fp = fopen(argv[4], "wb")) == NULL) { |
| 75 | fprintf(stderr, "Error opening file %s\n", argv[4]); |
| 76 | PKCS12_free(p12); |
| 77 | return 1; |
| 78 | } |
| 79 | i2d_PKCS12_fp(fp, p12); |
| 80 | PKCS12_free(p12); |
| 81 | fclose(fp); |
| 82 | return 0; |
| 83 | } |
| 84 | |
| 85 | |
| 86 | =head1 NOTES |
| 87 | |
| 88 | If the PKCS#12 structure does not have a password, then you must use the empty |
| 89 | string "" for B<oldpass>. Using NULL for B<oldpass> will result in a |
| 90 | PKCS12_newpass() failure. |
| 91 | |
| 92 | If the wrong password is used for B<oldpass> then the function will fail, |
| 93 | with a MAC verification error. In rare cases the PKCS12 structure does not |
| 94 | contain a MAC: in this case it will usually fail with a decryption padding |
| 95 | error. |
| 96 | |
| 97 | =head1 BUGS |
| 98 | |
| 99 | The password format is a NULL terminated ASCII string which is converted to |
| 100 | Unicode form internally. As a result some passwords cannot be supplied to |
| 101 | this function. |
| 102 | |
| 103 | =head1 SEE ALSO |
| 104 | |
| 105 | L<PKCS12_create(3)>, L<ERR_get_error(3)>, |
| 106 | L<passphrase-encoding(7)> |
| 107 | |
| 108 | =head1 COPYRIGHT |
| 109 | |
| 110 | Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. |
| 111 | |
| 112 | Licensed under the OpenSSL license (the "License"). You may not use |
| 113 | this file except in compliance with the License. You can obtain a copy |
| 114 | in the file LICENSE in the source distribution or at |
| 115 | L<https://www.openssl.org/source/license.html>. |
| 116 | |
| 117 | =cut |