类 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 → string 或 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 → 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 → string. 点击切换源代码

返回消息摘要。对于有效的时间戳,这与之前在 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 → string 或 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 → string 点击切换源代码

以 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 → Integer 或 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));
}