]>
git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/evp/evp_key.c
2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the OpenSSL license (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
11 #include "internal/cryptlib.h"
12 #include <openssl/x509.h>
13 #include <openssl/objects.h>
14 #include <openssl/evp.h>
15 #include <openssl/ui.h>
18 /* should be init to zeros. */
19 static char prompt_string
[80];
21 void EVP_set_pw_prompt(const char *prompt
)
24 prompt_string
[0] = '\0';
26 strncpy(prompt_string
, prompt
, 79);
27 prompt_string
[79] = '\0';
31 char *EVP_get_pw_prompt(void)
33 if (prompt_string
[0] == '\0')
36 return (prompt_string
);
40 * For historical reasons, the standard function for reading passwords is in
41 * the DES library -- if someone ever wants to disable DES, this function
44 int EVP_read_pw_string(char *buf
, int len
, const char *prompt
, int verify
)
46 return EVP_read_pw_string_min(buf
, 0, len
, prompt
, verify
);
49 int EVP_read_pw_string_min(char *buf
, int min
, int len
, const char *prompt
,
56 if ((prompt
== NULL
) && (prompt_string
[0] != '\0'))
57 prompt
= prompt_string
;
61 UI_add_input_string(ui
, prompt
, 0, buf
, min
,
62 (len
>= BUFSIZ
) ? BUFSIZ
- 1 : len
);
64 UI_add_verify_string(ui
, prompt
, 0,
65 buff
, min
, (len
>= BUFSIZ
) ? BUFSIZ
- 1 : len
,
69 OPENSSL_cleanse(buff
, BUFSIZ
);
72 #endif /* OPENSSL_NO_UI */
74 int EVP_BytesToKey(const EVP_CIPHER
*type
, const EVP_MD
*md
,
75 const unsigned char *salt
, const unsigned char *data
,
76 int datal
, int count
, unsigned char *key
,
80 unsigned char md_buf
[EVP_MAX_MD_SIZE
];
81 int niv
, nkey
, addmd
= 0;
82 unsigned int mds
= 0, i
;
84 nkey
= EVP_CIPHER_key_length(type
);
85 niv
= EVP_CIPHER_iv_length(type
);
86 OPENSSL_assert(nkey
<= EVP_MAX_KEY_LENGTH
);
87 OPENSSL_assert(niv
<= EVP_MAX_IV_LENGTH
);
96 if (!EVP_DigestInit_ex(c
, md
, NULL
))
99 if (!EVP_DigestUpdate(c
, &(md_buf
[0]), mds
))
101 if (!EVP_DigestUpdate(c
, data
, datal
))
104 if (!EVP_DigestUpdate(c
, salt
, PKCS5_SALT_LEN
))
106 if (!EVP_DigestFinal_ex(c
, &(md_buf
[0]), &mds
))
109 for (i
= 1; i
< (unsigned int)count
; i
++) {
110 if (!EVP_DigestInit_ex(c
, md
, NULL
))
112 if (!EVP_DigestUpdate(c
, &(md_buf
[0]), mds
))
114 if (!EVP_DigestFinal_ex(c
, &(md_buf
[0]), &mds
))
125 *(key
++) = md_buf
[i
];
130 if (niv
&& (i
!= mds
)) {
142 if ((nkey
== 0) && (niv
== 0))
145 rv
= EVP_CIPHER_key_length(type
);
148 OPENSSL_cleanse(md_buf
, sizeof(md_buf
));