Module: Pdfrb::DigitalSignature::TimestampHandler

Defined in:
lib/pdfrb/digital_signature/timestamp_handler.rb

Class Method Summary collapse

Class Method Details

.build_tsr_request(data) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/pdfrb/digital_signature/timestamp_handler.rb', line 27

def build_tsr_request(data)
  require "openssl"
  hash = OpenSSL::Digest.new("SHA256")
  req = OpenSSL::ASN1::Sequence.new([
                                      OpenSSL::ASN1::Integer.new(1),
                                      OpenSSL::ASN1::Sequence.new([
                                                                    OpenSSL::ASN1::Sequence.new([
                                                                                                  OpenSSL::ASN1::ObjectId.new("2.16.840.1.101.3.4.2.1"),
                                                                                                  OpenSSL::ASN1::OctetString.new(hash.digest(data).force_encoding("BINARY")),
                                                                                                ]),
                                                                  ]),
                                      OpenSSL::ASN1::Integer.new(0),
                                      OpenSSL::ASN1::Boolean.new(false),
                                    ])
  req.to_der
end

.create_timestamp(data, tsa_url: nil) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/pdfrb/digital_signature/timestamp_handler.rb', line 10

def create_timestamp(data, tsa_url: nil)
  return nil unless tsa_url

  require "net/http"
  require "uri"

  uri = URI(tsa_url)
  response = Net::HTTP.start(uri.host, uri.port) do |http|
    req = Net::HTTP::Post.new(uri.request_uri)
    req["Content-Type"] = "application/timestamp-query"
    req.body = build_tsr_request(data)
    http.request(req)
  end

  response.body if response.is_a?(Net::HTTPSuccess)
end

.typeObject



8
# File 'lib/pdfrb/digital_signature/timestamp_handler.rb', line 8

def type; :"adbe.revision"; end