類別 OpenSSL::Timestamp::TokenInfo

來自 Response 的時間戳記代幣資訊的不可變且唯讀表示。

公開類別方法

OpenSSL::Timestamp::TokenInfo.new(file) → token-info 按一下以切換來源
OpenSSL::Timestamp::TokenInfo.new(string) → token-info

Filestring 參數建立 TokenInfo,對應的 Filestring 必須是 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;
}

公開實例方法

algorithm → 字串或 nil 按一下以切換來源

傳回用於衍生訊息印記摘要的物件識別碼的「簡短名稱」。對於有效的時間戳記,這與 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);
}
gen_time → 時間 按一下以切換來源

傳回建立此時間戳記代幣的時間。如果狀態為 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));
}
msg_imprint → 字串. 按一下以切換來源

傳回訊息印記摘要。對於有效的時間戳記,這與 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;
}
nonce → BN 或 nil 按一下以切換來源

如果時間戳記權杖有效,則此欄位包含傳遞給時間戳記伺服器中初始 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 → true、falses 或 nil 按一下以切換來源

如果遺失 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;
}
policy_id → 字串或 nil 按一下以切換來源

傳回此時間戳記建立時所使用的政策的時間戳記政策物件識別碼。如果狀態為 GRANTED 或 GRANTED_WITH_MODS,則此項永遠不會為 nil

範例:

id = token_info.policy_id
puts id                 -> "1.2.3.4.5"
static VALUE
ossl_ts_token_info_get_policy_id(VALUE self)
{
    TS_TST_INFO *info;

    GetTSTokenInfo(self, info);
    return get_asn1obj(TS_TST_INFO_get_policy_id(info));
}
serial_number → BN 或 nil 按一下以切換來源

傳回時間戳記權杖的序號。此值對於由專用時間戳記授權頒發的兩個時間戳記權杖來說,永遠不會相同。如果狀態為 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));
}
to_der → 字串 按一下以切換來源

傳回以 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);
}
version → 整數或 nil 按一下以切換來源

傳回權杖資訊的版本號碼。對於相容的伺服器,如果存在,此值應為 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));
}