类 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,则来自相同 TSA 的每个时间戳令牌始终可以根据 genTime 字段进行排序,而与 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); }
返回令牌信息的版本号。对于符合标准的服务器,如果存在,此值应为 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)); }