Class: CertificateTransparency::MerkleTreeLeaf

Inherits:
Object
  • Object
show all
Defined in:
lib/certificate-transparency/merkle_tree_leaf.rb

Overview

An RFC6962 MerkleTreeLeaf structure

Use MerkleTreeLeaf.from_blob if you have an encoded MTL you wish to decode, or else create a new instance, pass in a TimestampedEntry object via #timestamped_entry=, and then call #to_blob to get the encoded MTL.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMerkleTreeLeaf

Instantiate a new MerkleTreeLeaf.



32
33
34
35
# File 'lib/certificate-transparency/merkle_tree_leaf.rb', line 32

def initialize
	@version   = ::CertificateTransparency::Version[:v1]
	@leaf_type = ::CertificateTransparency::MerkleLeafType[:timestamped_entry]
end

Instance Attribute Details

#timestamped_entryObject

Returns the value of attribute timestamped_entry.



8
9
10
# File 'lib/certificate-transparency/merkle_tree_leaf.rb', line 8

def timestamped_entry
  @timestamped_entry
end

Class Method Details

.from_blob(blob) ⇒ CertificateTransparency::MerkleTreeLeaf

Return a new MerkleTreeLeaf instance, from a binary blob of data. Raises an ArgumentError if the blob is invalid in some way.

Parameters:

Returns:



17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/certificate-transparency/merkle_tree_leaf.rb', line 17

def self.from_blob(blob)
	new.tap do |mtl|
		mtl.version, leaf_type, te = blob.unpack("CCa*")
		unless leaf_type == ::CertificateTransparency::MerkleLeafType[:timestamped_entry]
			raise ArgumentError,
			      "Unknown leaf type in blob"
		end

		mtl.timestamped_entry =
		     ::CertificateTransparency::TimestampedEntry.from_blob(te)
	end
end

Instance Method Details

#leaf_typeObject

Return a symbol indicating the leaf type of the MerkleTreeLeaf structure represented by this object. At present, only :timestamped_entry is supported.

Returns:

  • Symbol



93
94
95
# File 'lib/certificate-transparency/merkle_tree_leaf.rb', line 93

def leaf_type
	::CertificateTransparency::MerkleLeafType.invert[@leaf_type]
end

#leaf_type=(lt) ⇒ Object

Set the leaf type of the MerkleTreeLeaf structure. At present, only :timestamped_entry is supported, so there isn't much point in ever calling this method.

Parameters:

  • lt (Symbol)

Returns:

  • void



78
79
80
81
82
83
84
85
# File 'lib/certificate-transparency/merkle_tree_leaf.rb', line 78

def leaf_type=(lt)
	@leaf_type = ::CertificateTransparency::MerkleLeafType[lt]

	if @leaf_type.nil?
		raise ArgumentError,
		      "Invalid leaf_type #{lt.inspect}"
	end
end

#to_blobString

Generate a binary blob representing this MerkleTreeLeaf structure.

Returns:



118
119
120
121
122
123
124
125
# File 'lib/certificate-transparency/merkle_tree_leaf.rb', line 118

def to_blob
	if @timestamped_entry.nil?
		raise RuntimeError,
		      "timestamped_entry has not been set"
	end

	[@version, @leaf_type, @timestamped_entry.to_blob].pack("CCa*")
end

#versionObject

Return a symbol indicating the version of the MerkleTreeLeaf structure represented by this object. At present, only :v1 is supported.

Returns:

  • Symbol



66
67
68
# File 'lib/certificate-transparency/merkle_tree_leaf.rb', line 66

def version
	::CertificateTransparency::Version.invert[@version]
end

#version=(v) ⇒ Object

Set the version of the MerkleTreeLeaf structure to create. At present, only :v1 is supported, so there isn't much point in ever calling this method.

Parameters:

  • v (Symbol)

Returns:

  • void



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/certificate-transparency/merkle_tree_leaf.rb', line 45

def version=(v)
	@version = case v
	when Symbol
		::CertificateTransparency::Version[v]
	when Integer
		v
	else
		nil
	end

	if @version.nil? or !::CertificateTransparency::Version.values.include?(@version)
		raise ArgumentError,
		      "Invalid version #{v.inspect}"
	end
end