class OpenSSL::Timestamp::TokenInfo
时间戳令牌信息的一个不可变且只读的表示,来自 Response
。
公共类方法
来源
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; }
从 File
或 string
参数创建一个 TokenInfo
,对应的 File
或 string
必须是 DER 编码的。请注意,TokenInfo
是一个不可变的只读类。如果您想创建时间戳,请参考 Factory
。
公共实例方法
来源
static VALUE ossl_ts_token_info_get_algorithm(VALUE self) { TS_TST_INFO *info; TS_MSG_IMPRINT *mi; X509_ALGOR *algo; GetTSTokenInfo(self, info); mi = TS_TST_INFO_get_msg_imprint(info); algo = TS_MSG_IMPRINT_get_algo(mi); return get_asn1obj(algo->algorithm); }
返回表示用于导出消息印记摘要的算法的对象标识符的“短名称”。对于有效的时间戳,这与 Request
中已给出的值相同。如果状态为 GRANTED 或 GRANTED_WITH_MODS,则此值永远不是 nil
。
示例:¶ ↑
algo = token_info.algorithm puts algo -> "SHA1"
来源
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
。
来源
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 = rb_str_new((const char *)hashed_msg->data, hashed_msg->length); return ret; }
返回消息印记摘要。对于有效的时间戳,这与 Request
中已给出的值相同。如果状态为 GRANTED 或 GRANTED_WITH_MODS,则此值永远不是 nil
。
示例:¶ ↑
mi = token_info.msg_imprint puts mi -> "DEADBEEF"
来源
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
中传递给时间戳服务器的相同随机数。
来源
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 创建时间戳令牌的时间。在这种情况下,只有当第一个时间戳令牌的 genTime 与第二个时间戳令牌的 genTime 之间的差大于每个时间戳令牌的 genTime 精度之和时,才能对同一个 TSA 或不同 TSA 发出的时间戳令牌进行排序。
如果 ordering 字段存在且设置为 true,则始终可以基于 genTime 字段对来自同一 TSA 的每个时间戳令牌进行排序,而与 genTime 的精度无关。
来源
来源
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
。
来源
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
。
来源
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); }
来源
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。