Class: Saro::Dat::DatCertificate

Inherits:
Object
  • Object
show all
Defined in:
lib/saro/dat/dat_certificate.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cid, dat_issuance_start_seconds, dat_issuance_duration_seconds, dat_ttl_seconds, signature_key, crypto_key) ⇒ DatCertificate

Returns a new instance of DatCertificate.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/saro/dat/dat_certificate.rb', line 13

def initialize(cid, dat_issuance_start_seconds, dat_issuance_duration_seconds, dat_ttl_seconds, signature_key, crypto_key)
  @cid = u64!("cid", cid)
  @dat_issuance_start_seconds = u64!("dat_issuance_start_seconds", dat_issuance_start_seconds)
  duration = u64!("dat_issuance_duration_seconds", dat_issuance_duration_seconds)
  @dat_ttl_seconds = u64!("dat_ttl_seconds", dat_ttl_seconds)
  @dat_issuance_end_seconds = u64!(
    "dat_issuance_start_seconds + dat_issuance_duration_seconds",
    @dat_issuance_start_seconds + duration
  )
  u64!(
    "dat_issuance_start_seconds + dat_issuance_duration_seconds + dat_ttl_seconds",
    @dat_issuance_end_seconds + @dat_ttl_seconds
  )
  @signature_key = signature_key
  @crypto_key = crypto_key
end

Instance Attribute Details

#cidObject (readonly)

Returns the value of attribute cid.



11
12
13
# File 'lib/saro/dat/dat_certificate.rb', line 11

def cid
  @cid
end

#crypto_keyObject (readonly)

Returns the value of attribute crypto_key.



11
12
13
# File 'lib/saro/dat/dat_certificate.rb', line 11

def crypto_key
  @crypto_key
end

#dat_issuance_end_secondsObject (readonly)

Returns the value of attribute dat_issuance_end_seconds.



11
12
13
# File 'lib/saro/dat/dat_certificate.rb', line 11

def dat_issuance_end_seconds
  @dat_issuance_end_seconds
end

#dat_issuance_start_secondsObject (readonly)

Returns the value of attribute dat_issuance_start_seconds.



11
12
13
# File 'lib/saro/dat/dat_certificate.rb', line 11

def dat_issuance_start_seconds
  @dat_issuance_start_seconds
end

#dat_ttl_secondsObject (readonly)

Returns the value of attribute dat_ttl_seconds.



11
12
13
# File 'lib/saro/dat/dat_certificate.rb', line 11

def dat_ttl_seconds
  @dat_ttl_seconds
end

#signature_keyObject (readonly)

Returns the value of attribute signature_key.



11
12
13
# File 'lib/saro/dat/dat_certificate.rb', line 11

def signature_key
  @signature_key
end

Class Method Details

.generate(cid, dat_issuance_start_seconds, dat_issuance_duration_seconds, dat_ttl_seconds, signature_algorithm, crypto_algorithm) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/saro/dat/dat_certificate.rb', line 43

def self.generate(cid, dat_issuance_start_seconds, dat_issuance_duration_seconds, dat_ttl_seconds, signature_algorithm, crypto_algorithm)
  new(
    cid, dat_issuance_start_seconds, dat_issuance_duration_seconds, dat_ttl_seconds,
    Saro::Dat::DatSignature.generate(signature_algorithm),
    Saro::Dat::DatCrypto.generate(crypto_algorithm)
  )
end

.imports(format_str) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/saro/dat/dat_certificate.rb', line 51

def self.imports(format_str)
  parts = format_str.split(".")
  if parts.length != 8
    raise Saro::Dat::Error.new(Saro::Dat::ErrorCode::CERT_MALFORMED, "expected exactly 8 dot-separated fields")
  end

  cid = _field("cid") { Saro::Dat::Util.parse_u64_hex(parts[0]) }
  dat_issuance_start_seconds = _field("issuance_start_seconds") { Saro::Dat::Util.parse_u64(parts[1]) }
  dat_issuance_duration_seconds = _field("issuance_duration_seconds") { Saro::Dat::Util.parse_u64(parts[2]) }
  dat_ttl_seconds = _field("dat_ttl_seconds") { Saro::Dat::Util.parse_u64(parts[3]) }
  signature_algorithm = parts[4]
  crypto_algorithm = parts[5]
  signature_key = Saro::Dat::DatSignature.imports(signature_algorithm, parts[6])
  crypto_key = Saro::Dat::DatCrypto.imports(crypto_algorithm, parts[7])

  new(cid, dat_issuance_start_seconds, dat_issuance_duration_seconds, dat_ttl_seconds, signature_key, crypto_key)
end

Instance Method Details

#expiredObject Also known as: expired?



74
75
76
# File 'lib/saro/dat/dat_certificate.rb', line 74

def expired
  Time.now.to_i > (@dat_issuance_end_seconds + @dat_ttl_seconds)
end

#exports(verify_only = false) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/saro/dat/dat_certificate.rb', line 30

def exports(verify_only = false)
  cid_hex = @cid.to_s(16)
  dat_issuance_start_seconds = @dat_issuance_start_seconds.to_s
  dat_issuance_duration_seconds = (@dat_issuance_end_seconds - @dat_issuance_start_seconds).to_s
  dat_ttl_seconds = @dat_ttl_seconds.to_s
  signature_algorithm = @signature_key.algorithm
  crypto_algorithm = @crypto_key.algorithm
  signature_key = @signature_key.exports(verify_only)
  crypto_key = @crypto_key.exports

  "#{cid_hex}.#{dat_issuance_start_seconds}.#{dat_issuance_duration_seconds}.#{dat_ttl_seconds}.#{signature_algorithm}.#{crypto_algorithm}.#{signature_key}.#{crypto_key}"
end

#issuableObject Also known as: issuable?



69
70
71
72
# File 'lib/saro/dat/dat_certificate.rb', line 69

def issuable
  now = Time.now.to_i
  signable && @dat_issuance_start_seconds <= now && now <= @dat_issuance_end_seconds
end

#pairObject Also known as: pair?



82
83
84
# File 'lib/saro/dat/dat_certificate.rb', line 82

def pair
  @signature_key.pair
end

#signableObject Also known as: signable?



78
79
80
# File 'lib/saro/dat/dat_certificate.rb', line 78

def signable
  @signature_key.signable
end

#support_verify_onlyObject



86
87
88
# File 'lib/saro/dat/dat_certificate.rb', line 86

def support_verify_only
  @signature_key.support_verify_only
end