class OpenSSL::Timestamp::TokenInfo
来自 Response 的时间戳令牌信息的不可变且只读的表示。
Public Class Methods
Source
static VALUE
ossl_ts_token_info_initialize(VALUE self, VALUE der)
{
TS_TST_INFO *info = DATA_PTR(self);
BIO *in;
der = ossl_to_der_if_possible(der);
in = ossl_obj2bio(&der);
info = d2i_TS_TST_INFO_bio(in, &info);
BIO_free(in);
if (!info) {
DATA_PTR(self) = NULL;
ossl_raise(eTimestampError, "Error when decoding the timestamp token info");
}
DATA_PTR(self) = info;
return self;
}
Public Instance Methods
Source
static VALUE
ossl_ts_token_info_get_algorithm(VALUE self)
{
TS_TST_INFO *info;
TS_MSG_IMPRINT *mi;
X509_ALGOR *algo;
const ASN1_OBJECT *obj;
GetTSTokenInfo(self, info);
mi = TS_TST_INFO_get_msg_imprint(info);
algo = TS_MSG_IMPRINT_get_algo(mi);
X509_ALGOR_get0(&obj, NULL, NULL, algo);
return ossl_asn1obj_to_string(obj);
}
Source
static VALUE
ossl_ts_token_info_get_gen_time(VALUE self)
{
TS_TST_INFO *info;
GetTSTokenInfo(self, info);
return asn1time_to_time(TS_TST_INFO_get_time(info));
}
返回创建此时间戳令牌的时间。如果状态为 GRANTED 或 GRANTED_WITH_MODS,则此项永远不为 nil。
Source
static VALUE
ossl_ts_token_info_get_msg_imprint(VALUE self)
{
TS_TST_INFO *info;
TS_MSG_IMPRINT *mi;
ASN1_OCTET_STRING *hashed_msg;
VALUE ret;
GetTSTokenInfo(self, info);
mi = TS_TST_INFO_get_msg_imprint(info);
hashed_msg = TS_MSG_IMPRINT_get_msg(mi);
ret = asn1str_to_str(hashed_msg);
return ret;
}
Source
static VALUE
ossl_ts_token_info_get_nonce(VALUE self)
{
TS_TST_INFO *info;
const ASN1_INTEGER *nonce;
GetTSTokenInfo(self, info);
if (!(nonce = TS_TST_INFO_get_nonce(info)))
return Qnil;
return asn1integer_to_num(nonce);
}
如果时间戳令牌有效,则此字段包含在初始 Request 中传递给时间戳服务器的相同 nonce。
Source
static VALUE
ossl_ts_token_info_get_ordering(VALUE self)
{
TS_TST_INFO *info;
GetTSTokenInfo(self, info);
return TS_TST_INFO_get_ordering(info) ? Qtrue : Qfalse;
}
如果缺少 ordering 字段,或者 ordering 字段存在但设置为 false,则 genTime 字段仅表示 TSA 创建时间戳令牌的时间。在这种情况下,同一 TSA 或不同 TSA 生成的时间戳令牌的顺序仅当第一个时间戳令牌的 genTime 与第二个时间戳令牌的 genTime 之间的差值大于每个时间戳令牌的 genTime 精度的总和时才能进行排序。
如果 ordering 字段存在且设置为 true,则来自同一 TSA 的每个时间戳令牌都可以基于 genTime 字段进行排序,而与 genTime 精度无关。
Source
static VALUE
ossl_ts_token_info_get_policy_id(VALUE self)
{
TS_TST_INFO *info;
GetTSTokenInfo(self, info);
return ossl_asn1obj_to_string(TS_TST_INFO_get_policy_id(info));
}
返回此时间戳创建时所依据的策略的时间戳策略对象标识符。如果状态为 GRANTED 或 GRANTED_WITH_MODS,则此项永远不为 nil。
示例
id = token_info.policy_id puts id -> "1.2.3.4.5"
Source
static VALUE
ossl_ts_token_info_get_serial_number(VALUE self)
{
TS_TST_INFO *info;
GetTSTokenInfo(self, info);
return asn1integer_to_num(TS_TST_INFO_get_serial(info));
}
返回时间戳令牌的序列号。对于由专用时间戳颁发机构颁发的时间戳令牌,此值永远不会相同。如果状态为 GRANTED 或 GRANTED_WITH_MODS,则此项永远不为 nil。
Source
static VALUE
ossl_ts_token_info_to_der(VALUE self)
{
TS_TST_INFO *info;
GetTSTokenInfo(self, info);
return asn1_to_der((void *)info, (int (*)(void *, unsigned char **))i2d_TS_TST_INFO);
}
以 DER 编码的形式返回 TokenInfo。
Source
static VALUE
ossl_ts_token_info_to_text(VALUE self)
{
TS_TST_INFO *info;
BIO *out;
GetTSTokenInfo(self, info);
out = BIO_new(BIO_s_mem());
if (!out) ossl_raise(eTimestampError, NULL);
if (!TS_TST_INFO_print_bio(out, info)) {
BIO_free(out);
ossl_raise(eTimestampError, NULL);
}
return ossl_membio2str(out);
}
Source
static VALUE
ossl_ts_token_info_get_version(VALUE self)
{
TS_TST_INFO *info;
GetTSTokenInfo(self, info);
return LONG2NUM(TS_TST_INFO_get_version(info));
}
返回令牌信息的版本号。对于符合标准的服务器,如果存在,此值应为 1。如果状态为 GRANTED 或 GRANTED_WITH_MODS。