Beispiel #1
0
ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t,
				int offset_day, long offset_sec)
	{
	char *p;
	struct tm *ts;
	struct tm data;
	size_t len = 20;
	int free_s = 0;

	if (s == NULL)
		{
		free_s = 1;
		s=M_ASN1_UTCTIME_new();
		}
	if (s == NULL)
		goto err;


	ts=OPENSSL_gmtime(&t, &data);
	if (ts == NULL)
		goto err;

	if (offset_day || offset_sec)
		{ 
		if (!OPENSSL_gmtime_adj(ts, offset_day, offset_sec))
			goto err;
		}

	if((ts->tm_year < 50) || (ts->tm_year >= 150))
		goto err;

	p=(char *)s->data;
	if ((p == NULL) || ((size_t)s->length < len))
		{
		p=OPENSSL_malloc(len);
		if (p == NULL)
			{
			ASN1err(ASN1_F_ASN1_UTCTIME_ADJ,ERR_R_MALLOC_FAILURE);
			goto err;
			}
		if (s->data != NULL)
			OPENSSL_free(s->data);
		s->data=(unsigned char *)p;
		}

	BIO_snprintf(p,len,"%02d%02d%02d%02d%02d%02dZ",ts->tm_year%100,
		     ts->tm_mon+1,ts->tm_mday,ts->tm_hour,ts->tm_min,ts->tm_sec);
	s->length=strlen(p);
	s->type=V_ASN1_UTCTIME;
#ifdef CHARSET_EBCDIC_not
	ebcdic2ascii(s->data, s->data, s->length);
#endif
	return(s);
	err:
	if (free_s && s)
		M_ASN1_UTCTIME_free(s);
	return NULL;
	}
Beispiel #2
0
ASN1_TIME* DateTime::getUTCTime() const throw(BigIntegerException)
{
	ASN1_TIME *ret;
	DateVal date;
	stringstream stream;
	string tmp;
	string utc;
	
	date = DateTime::getDate(this->seconds);
	
	stream.setf(ios_base::right);
	stream.fill('0');
	
	stream.width(2); //define um tamanho minimo de 2 chars
	stream << date.year;
	stream >> tmp;
	
	//pega apenas os dois numeros mais a direita
	if(tmp.size() > 2)
	{
		tmp = tmp.substr(tmp.size() - 2);
	}
	stream.clear();
	stream.str("");
	
	stream << tmp;
	stream.width(2);
	stream << (date.mon + 1);	
	stream.width(2);
	stream << date.dayOfMonth;
	stream.width(2);
	stream << date.hour;
	stream.width(2);
	stream << date.min;
	stream.width(2);
	stream << date.sec;
	stream.width(1);
	stream << "Z";

	utc = stream.str();
	
	ret = M_ASN1_UTCTIME_new();
	
	//pode retornar 1 no caso de falha de alocacao de memoria
	ASN1_STRING_set(ret, utc.c_str(), utc.size());

	return ret;
}
Beispiel #3
0
ASN1_UTCTIME *
ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, int offset_day, long offset_sec)
{
	ASN1_UTCTIME *tmp = NULL, *ret;

	if (s == NULL) {
		tmp = M_ASN1_UTCTIME_new();
		if (tmp == NULL)
			return NULL;
		s = tmp;
	}

	ret = ASN1_UTCTIME_adj_internal(s, t, offset_day, offset_sec);
	if (ret == NULL && tmp != NULL)
		M_ASN1_UTCTIME_free(tmp);

	return ret;
}
Beispiel #4
0
ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t)
{
    char *p;
    struct tm *ts;
    struct tm data;
    size_t len = 20;

    if (s == NULL)
        s=M_ASN1_UTCTIME_new();
    if (s == NULL)
        return(NULL);

    ts=OPENSSL_gmtime(&t, &data);
    if (ts == NULL)
        return(NULL);

    p=(char *)s->data;
    if ((p == NULL) || ((size_t)s->length < len))
    {
        p=OPENSSL_malloc(len);
        if (p == NULL)
        {
            ASN1err(ASN1_F_ASN1_UTCTIME_SET,ERR_R_MALLOC_FAILURE);
            return(NULL);
        }
        if (s->data != NULL)
            OPENSSL_free(s->data);
        s->data=(unsigned char *)p;
    }

    BIO_snprintf(p,len,"%02d%02d%02d%02d%02d%02dZ",ts->tm_year%100,
                 ts->tm_mon+1,ts->tm_mday,ts->tm_hour,ts->tm_min,ts->tm_sec);
    s->length=strlen(p);
    s->type=V_ASN1_UTCTIME;
#ifdef CHARSET_EBCDIC_not
    ebcdic2ascii(s->data, s->data, s->length);
#endif
    return(s);
}