mirror of
https://gitee.com/openharmony/security_certificate_manager
synced 2024-11-23 23:50:31 +00:00
!277 支持显示GENERALIZEDTIME时间和local时间
Merge pull request !277 from 胡一奇/master
This commit is contained in:
commit
6e26548104
@ -22,6 +22,7 @@
|
||||
#include <openssl/pem.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "securec.h"
|
||||
|
||||
@ -30,6 +31,7 @@
|
||||
typedef X509_NAME *(FUNC)(const X509 *);
|
||||
typedef ASN1_TIME *(TIME_FUNC)(const X509 *);
|
||||
#define CONVERT(p) (((p)[0] - '0') * 10 + (p)[1] - '0')
|
||||
#define BASE_YEAR 1900
|
||||
|
||||
X509 *InitCertContext(const uint8_t *certBuf, uint32_t size)
|
||||
{
|
||||
@ -183,32 +185,70 @@ int32_t GetX509IssueNameLongFormat(const X509 *x509cert, char *outBuf, uint32_t
|
||||
return (int32_t)strlen(outBuf);
|
||||
}
|
||||
|
||||
static struct tm *GetLocalTime(ASN1_TIME *asn1Time)
|
||||
{
|
||||
time_t curLocalTimeSec = time(NULL);
|
||||
if (curLocalTimeSec < 0) {
|
||||
CM_LOG_E("Failed to get current local time");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct tm *gmTime = gmtime(&curLocalTimeSec);
|
||||
if (gmTime == NULL) {
|
||||
CM_LOG_E("Failed to convert current local time to utc time");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
time_t curUtcTimeSec = mktime(gmTime);
|
||||
if (curUtcTimeSec < 0) {
|
||||
CM_LOG_E("Failed to get current utc time");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct tm utcTime;
|
||||
int ret = ASN1_TIME_to_tm(asn1Time, &utcTime);
|
||||
if (ret == 0) {
|
||||
CM_LOG_E("invalid asn1 time format");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
time_t utcTimeSec = mktime(&utcTime);
|
||||
if (utcTimeSec < 0) {
|
||||
CM_LOG_E("Failed to get utc time");
|
||||
return NULL;
|
||||
}
|
||||
time_t localTimeSec = utcTimeSec + curLocalTimeSec - curUtcTimeSec;
|
||||
return localtime(&localTimeSec);
|
||||
}
|
||||
|
||||
static int32_t GetX509Time(TIME_FUNC fuc, const X509 *x509cert, struct DataTime *pDataTime)
|
||||
{
|
||||
if (x509cert == NULL || fuc == NULL || pDataTime == NULL) {
|
||||
return CMR_ERROR_INVALID_ARGUMENT;
|
||||
}
|
||||
ASN1_TIME *bufTime = fuc(x509cert);
|
||||
if (!bufTime) {
|
||||
ASN1_TIME *asn1Time = fuc(x509cert);
|
||||
if (asn1Time == NULL) {
|
||||
CM_LOG_E("Failed to get asn1 time from x509Cert");
|
||||
return CMR_ERROR_INVALID_CERT_FORMAT;
|
||||
}
|
||||
|
||||
if (bufTime->length < NAME_ANS1TIME_LEN) {
|
||||
if (asn1Time->length < NAME_ANS1TIME_LEN) {
|
||||
return CMR_ERROR_INVALID_CERT_FORMAT;
|
||||
}
|
||||
|
||||
/* Convent the asn1 time to the readable time */
|
||||
pDataTime->year = CONVERT(bufTime->data);
|
||||
if (pDataTime->year < 50) { /* 50 is used for the readable time */
|
||||
pDataTime->year += 100; /* 100 is used for the readable time */
|
||||
struct tm *localTime = GetLocalTime(asn1Time);
|
||||
if (localTime == NULL) {
|
||||
CM_LOG_E("Failed to get local time by utc time");
|
||||
return CMR_ERROR_INVALID_OPERATION;
|
||||
}
|
||||
pDataTime->year += 1900; /* 1900 is used for the readable time */
|
||||
pDataTime->month = CONVERT(bufTime->data + 2);
|
||||
pDataTime->day = CONVERT(bufTime->data + 4);
|
||||
pDataTime->hour = CONVERT(bufTime->data + 6);
|
||||
pDataTime->min = CONVERT(bufTime->data + 8);
|
||||
pDataTime->second = CONVERT(bufTime->data + 10);
|
||||
return 0;
|
||||
|
||||
pDataTime->year = (uint32_t)(localTime->tm_year + BASE_YEAR);
|
||||
pDataTime->month = (uint32_t)(localTime->tm_mon + 1);
|
||||
pDataTime->day = (uint32_t)localTime->tm_mday;
|
||||
pDataTime->hour = (uint32_t)localTime->tm_hour;
|
||||
pDataTime->min = (uint32_t)localTime->tm_min;
|
||||
pDataTime->second = (uint32_t)localTime->tm_sec;
|
||||
return CM_SUCCESS;
|
||||
}
|
||||
|
||||
static int32_t GetX509TimeFormat(TIME_FUNC fuc, const X509 *x509cert, char *outBuf, uint32_t outBufMaxSize)
|
||||
|
@ -41,20 +41,6 @@ struct CertInfoResult g_listCertInfoexpectResult[] = {
|
||||
},
|
||||
true
|
||||
},
|
||||
{
|
||||
{
|
||||
"4bfab552.0",
|
||||
"Starfield Technologies, Inc.",
|
||||
true,
|
||||
"CN=Starfield Root Certificate Authority - G2,OU=,O=Starfield Technologies, Inc.",
|
||||
"CN=Starfield Root Certificate Authority - G2,OU=,O=Starfield Technologies, Inc.",
|
||||
"0",
|
||||
"2009-9-1",
|
||||
"2037-12-31",
|
||||
"2C:E1:CB:0B:F9:D2:F9:E1:02:99:3F:BE:21:51:52:C3:B2:DD:0C:AB:DE:1C:68:E5:31:9B:83:91:54:DB:B7:F5"
|
||||
},
|
||||
true
|
||||
},
|
||||
{
|
||||
{
|
||||
"4f316efb.0",
|
||||
|
Loading…
Reference in New Issue
Block a user