Beispiel #1
0
int PEM_def_callback(char *buf, int num, int rwflag, void *userdata)
{
    int i, min_len;
    const char *prompt;

    /* We assume that the user passes a default password as userdata */
    if (userdata) {
        i = strlen(userdata);
        i = (i > num) ? num : i;
        memcpy(buf, userdata, i);
        return i;
    }

    prompt = EVP_get_pw_prompt();
    if (prompt == NULL)
        prompt = "Enter PEM pass phrase:";

    /*
     * rwflag == 0 means decryption
     * rwflag == 1 means encryption
     *
     * We assume that for encryption, we want a minimum length, while for
     * decryption, we cannot know any minimum length, so we assume zero.
     */
    min_len = rwflag ? MIN_LENGTH : 0;

    i = EVP_read_pw_string_min(buf, min_len, num, prompt, rwflag);
    if (i != 0) {
        PEMerr(PEM_F_PEM_DEF_CALLBACK, PEM_R_PROBLEMS_GETTING_PASSWORD);
        memset(buf, 0, (unsigned int)num);
        return -1;
    }
    return strlen(buf);
}
Beispiel #2
0
int
PEM_def_callback(char *buf, int num, int w, void *key)
{
	int i, j;
	const char *prompt;

	if (key) {
		i = strlen(key);
		i = (i > num) ? num : i;
		memcpy(buf, key, i);
		return (i);
	}

	prompt = EVP_get_pw_prompt();
	if (prompt == NULL)
		prompt = "Enter PEM pass phrase:";

	for (;;) {
		i = EVP_read_pw_string_min(buf, MIN_LENGTH, num, prompt, w);
		if (i != 0) {
			PEMerr(PEM_F_PEM_DEF_CALLBACK,
			    PEM_R_PROBLEMS_GETTING_PASSWORD);
			memset(buf, 0, (unsigned int)num);
			return (-1);
		}
		j = strlen(buf);
		if (j < MIN_LENGTH) {
			fprintf(stderr, "phrase is too short, needs to be at least %d chars\n", MIN_LENGTH);
		} else
			break;
	}
	return (j);
}
Beispiel #3
0
int PEM_def_callback(char *buf, int num, int w, void *key)
{
#if defined(OPENSSL_NO_STDIO) || defined(OPENSSL_NO_UI)
    int i;
#else
    int i, j;
    const char *prompt;
#endif

    if (key) {
        i = strlen(key);
        i = (i > num) ? num : i;
        memcpy(buf, key, i);
        return i;
    }

#if defined(OPENSSL_NO_STDIO) || defined(OPENSSL_NO_UI)
    PEMerr(PEM_F_PEM_DEF_CALLBACK, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
    return -1;
#else
    prompt = EVP_get_pw_prompt();
    if (prompt == NULL)
        prompt = "Enter PEM pass phrase:";

    for (;;) {
        /*
         * We assume that w == 0 means decryption,
         * while w == 1 means encryption
         */
        int min_len = w ? MIN_LENGTH : 0;

        i = EVP_read_pw_string_min(buf, min_len, num, prompt, w);
        if (i != 0) {
            PEMerr(PEM_F_PEM_DEF_CALLBACK, PEM_R_PROBLEMS_GETTING_PASSWORD);
            memset(buf, 0, (unsigned int)num);
            return -1;
        }
        j = strlen(buf);
        if (min_len && j < min_len) {
            fprintf(stderr,
                    "phrase is too short, needs to be at least %d chars\n",
                    min_len);
        } else
            break;
    }
    return j;
#endif
}
Beispiel #4
0
int PEM_def_callback(char *buf, int num, int w, void *key)
	{
#ifdef OPENSSL_NO_FP_API
	/* We should not ever call the default callback routine from
	 * windows. */
	PEMerr(PEM_F_PEM_DEF_CALLBACK,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
	return(-1);
#else
	int i,j;
	const char *prompt;
	if(key) {
		i=strlen(key);
		i=(i > num)?num:i;
		memcpy(buf,key,i);
		return(i);
	}

	prompt=EVP_get_pw_prompt();
	if (prompt == NULL)
		prompt="Enter PEM pass phrase:";

	for (;;)
		{
		i=EVP_read_pw_string_min(buf,MIN_LENGTH,num,prompt,w);
		if (i != 0)
			{
			PEMerr(PEM_F_PEM_DEF_CALLBACK,PEM_R_PROBLEMS_GETTING_PASSWORD);
			memset(buf,0,(unsigned int)num);
			return(-1);
			}
		j=strlen(buf);
		if (j < MIN_LENGTH)
			{
			fprintf(stderr,"phrase is too short, needs to be at least %d chars\n",MIN_LENGTH);
			}
		else
			break;
		}
	return(j);
#endif
	}
Beispiel #5
0
/* XXX LSSL ABI XXX return value and `num' ought to be size_t */
int
PEM_def_callback(char *buf, int num, int w, void *key)
{
	size_t l;
	int i;
	const char *prompt;

	if (key) {
		l = strlen(key);
		if (num < 0)
			return -1;
		if (l > (size_t)num)
			l = (size_t)num;
		memcpy(buf, key, l);
		return (int)l;
	}

	prompt = EVP_get_pw_prompt();
	if (prompt == NULL)
		prompt = "Enter PEM pass phrase:";

	for (;;) {
		i = EVP_read_pw_string_min(buf, MIN_LENGTH, num, prompt, w);
		if (i != 0) {
			PEMerr(PEM_F_PEM_DEF_CALLBACK,
			    PEM_R_PROBLEMS_GETTING_PASSWORD);
			memset(buf, 0, num);
			return (-1);
		}
		l = strlen(buf);
		if (l < MIN_LENGTH) {
			fprintf(stderr, "phrase is too short, "
			    "needs to be at least %zu chars\n",
			    (size_t)MIN_LENGTH);
		} else
			break;
	}
	return (int)l;
}
Beispiel #6
0
/*
 * For historical reasons, the standard function for reading passwords is in
 * the DES library -- if someone ever wants to disable DES, this function
 * will fail
 */
int EVP_read_pw_string(char *buf, int len, const char *prompt, int verify)
{
    return EVP_read_pw_string_min(buf, 0, len, prompt, verify);
}