Exemplo n.º 1
0
ASN1_GENERALIZEDTIME *d2i_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME **a,
	     unsigned char **pp, long length)
	{
	ASN1_GENERALIZEDTIME *ret=NULL;

	ret=(ASN1_GENERALIZEDTIME *)d2i_ASN1_bytes((ASN1_STRING **)a,pp,length,
		V_ASN1_GENERALIZEDTIME,V_ASN1_UNIVERSAL);
	if (ret == NULL)
		{
		ASN1err(ASN1_F_D2I_ASN1_GENERALIZEDTIME,ERR_R_NESTED_ASN1_ERROR);
		return(NULL);
		}
#ifdef CHARSET_EBCDIC
	ascii2ebcdic(ret->data, ret->data, ret->length);
#endif
	if (!ASN1_GENERALIZEDTIME_check(ret))
		{
		ASN1err(ASN1_F_D2I_ASN1_GENERALIZEDTIME,ASN1_R_INVALID_TIME_FORMAT);
		goto err;
		}

	return(ret);
err:
	if ((ret != NULL) && ((a == NULL) || (*a != ret)))
		M_ASN1_GENERALIZEDTIME_free(ret);
	return(NULL);
	}
Exemplo n.º 2
0
int GT_GENERALIZEDTIME_get(const ASN1_GENERALIZEDTIME* genTime,
			struct tm* the_time)
{
	assert(genTime != NULL && the_time != NULL);

	/* WARNING: This function cannot be used as a general decoder for
	 * ASN1_GENERALIZEDTIME values because it assumes that input value is
	 * expressed in UTC timezone (value ends with Z). However, this condition
	 * is satisfied for values set by ASN1_GENERALIZEDTIME_set().
	 */
	if (!ASN1_GENERALIZEDTIME_check((ASN1_GENERALIZEDTIME*)genTime) ||
			genTime->data[genTime->length - 1] != 'Z') {
		return GT_INVALID_FORMAT;
	}

	memset(the_time, 0, sizeof(*the_time));

	/* HACK: ASN1_GENERALIZEDTIME is actually ASN1_STRING.
	 * OpenSSL doesn't provide any functions of getting the time out of
	 * the structure. Such a pity...
	 */
	sscanf((const char*)genTime->data, "%04d%02d%02d%02d%02d%02d",
			&the_time->tm_year, &the_time->tm_mon, &the_time->tm_mday,
			&the_time->tm_hour, &the_time->tm_min, &the_time->tm_sec);

	the_time->tm_year -= 1900;
	the_time->tm_mon--;

	return GT_OK;
}
Exemplo n.º 3
0
int ASN1_TIME_check(ASN1_TIME *t)
  {
  if (t->type == V_ASN1_GENERALIZEDTIME)
    return ASN1_GENERALIZEDTIME_check(t);
  else if (t->type == V_ASN1_UTCTIME)
    return ASN1_UTCTIME_check(t);
  return 0;
  }
Exemplo n.º 4
0
int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str)
{
    ASN1_GENERALIZEDTIME t;

    t.type = V_ASN1_GENERALIZEDTIME;
    t.length = strlen(str);
    t.data = (unsigned char *)str;
    if (ASN1_GENERALIZEDTIME_check(&t)) {
        if (s != NULL) {
            if (!ASN1_STRING_set((ASN1_STRING *)s, str, t.length))
                return 0;
            s->type = V_ASN1_GENERALIZEDTIME;
        }
        return (1);
    } else
        return (0);
}
Exemplo n.º 5
0
int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str)
{
    ASN1_GENERALIZEDTIME t;

    t.type = V_ASN1_GENERALIZEDTIME;
    t.length = strlen(str);
    t.data = (unsigned char *)str;
    t.flags = 0;

    if (!ASN1_GENERALIZEDTIME_check(&t))
        return 0;

    if (s != NULL && !ASN1_STRING_copy(s, &t))
        return 0;

    return 1;
}
Exemplo n.º 6
0
PyObject*
_set_asn1_time(char *format, ASN1_TIME* timestamp, PyObject *args)
{
	char *when;

	if (!PyArg_ParseTuple(args, format, &when))
		return NULL;

	if (ASN1_GENERALIZEDTIME_set_string(timestamp, when) == 0) {
		ASN1_GENERALIZEDTIME dummy;
		dummy.type = V_ASN1_GENERALIZEDTIME;
		dummy.length = strlen(when);
		dummy.data = (unsigned char *)when;
		if (!ASN1_GENERALIZEDTIME_check(&dummy)) {
			PyErr_SetString(PyExc_ValueError, "Invalid string");
		} else {
			PyErr_SetString(PyExc_RuntimeError, "Unknown ASN1_GENERALIZEDTIME_set_string failure");
		}
		return NULL;
	}
	Py_INCREF(Py_None);
	return Py_None;
}