class OpenSSL::Timestamp::TokenInfo
来自 Response
的时间戳令牌信息的不可变且只读的表示形式。
公共类方法
从 File
或 string
参数创建 TokenInfo
,相应的 File
或 string
必须是 DER 编码的。请注意,TokenInfo
是一个不可变的只读类。如果要创建时间戳,请参考 Factory
。
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; }
公共实例方法
返回用于导出消息印记摘要的算法的对象标识符的“短名称”。对于有效的时间戳,这与 Request
中已给出的值相同。如果状态为 GRANTED 或 GRANTED_WITH_MODS,则永远不会为 nil
。
示例:¶ ↑
algo = token_info.algorithm puts algo -> "SHA1"
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); }
返回创建此时间戳令牌的时间。如果状态为 GRANTED 或 GRANTED_WITH_MODS,则永远不会为 nil
。
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)); }
返回消息印记摘要。对于有效的时间戳,这与 Request
中已给出的值相同。如果状态为 GRANTED 或 GRANTED_WITH_MODS,则永远不会为 nil
。
示例:¶ ↑
mi = token_info.msg_imprint puts mi -> "DEADBEEF"
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
中传递给时间戳服务器的相同随机数。
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); }
如果缺少 ordering 字段,或者如果 ordering 字段存在并设置为 false,则 genTime 字段仅指示 TSA 创建时间戳令牌的时间。在这种情况下,只有当第一个时间戳令牌的 genTime 和第二个时间戳令牌的 genTime 之间的差异大于每个时间戳令牌的 genTime 精度之和时,才能对同一 TSA 或不同 TSA 颁发的时间戳令牌进行排序。
如果 ordering 字段存在并设置为 true,则始终可以基于 genTime 字段对来自同一 TSA 的每个时间戳令牌进行排序,而无需考虑 genTime 的准确性。
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; }
返回时间戳令牌的序列号。对于专用时间戳机构颁发的两个时间戳令牌,此值绝不相同。如果状态为 GRANTED 或 GRANTED_WITH_MODS,则永远不会为 nil
。
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)); }
返回 DER 编码格式的 TokenInfo
。
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); }
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); }
返回令牌信息的版本号。对于兼容的服务器,如果存在,则此值应为 1
。如果状态为 GRANTED 或 GRANTED_WITH_MODS。
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)); }