類別 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
的相同 nonce。
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)); }