demarches-normaliennes/app/lib/asn1/timestamp.rb

28 lines
1 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2019-05-14 15:19:25 +02:00
class ASN1::Timestamp
## Poor mans rfc3161 timestamp decoding
# This works, as of 2019-05, for timestamps delivered by the universign POST api.
# We should properly access the ASN1 contents using the sequence and tags structure.
# However:
# * Its hard to do right.
# * We currently dont require it for proper operation; timestamps are never exposed to users.
# * Theres an ongoing PR https://github.com/ruby/openssl/pull/204 for proper timestamp decoding in the ruby openssl library; lets use OpenSSL::TS once it exists.
def self.timestampInfo(asn1timestamp)
asn1 = OpenSSL::ASN1.decode(asn1timestamp)
tstInfo = OpenSSL::ASN1.decode(asn1.value[1].value[0].value[2].value[1].value[0].value)
tstInfo
end
def self.signature_time(asn1timestamp)
tstInfo = timestampInfo(asn1timestamp)
tstInfo.value[4].value
end
def self.signed_digest(asn1timestamp)
tstInfo = timestampInfo(asn1timestamp)
tstInfo.value[2].value[1].value.unpack1('H*')
end
end