Exemple #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);
}
Exemple #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(buf, num, prompt, w);
	if (i != 0) {
	    memset(buf, 0, (unsigned int)num);
	    return(-1);
	}
	j = strlen(buf);
	if (j < OSSL_PASS_MIN_LENGTH) {
	    fprintf(stderr,
		    "phrase is too short, needs to be at least %d chars\n",
		    OSSL_PASS_MIN_LENGTH);
	}
	else break;
    }
    return j;
}
Exemple #3
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);
}
Exemple #4
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
}
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(buf,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
  }
Exemple #6
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;
}