Class: Zwiebel::HiddenService::V3

Inherits:
Object
  • Object
show all
Defined in:
lib/zwiebel/hidden_service/v3.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(descriptor_string:, onion_address:) ⇒ V3

Returns a new instance of V3.



21
22
23
24
# File 'lib/zwiebel/hidden_service/v3.rb', line 21

def initialize(descriptor_string:, onion_address:)
  @descriptor = Descriptor.new(string: descriptor_string)
  @onion_address = onion_address
end

Instance Attribute Details

#descriptorObject

Returns the value of attribute descriptor.



19
20
21
# File 'lib/zwiebel/hidden_service/v3.rb', line 19

def descriptor
  @descriptor
end

#inner_layerObject

Returns the value of attribute inner_layer.



19
20
21
# File 'lib/zwiebel/hidden_service/v3.rb', line 19

def inner_layer
  @inner_layer
end

#onion_addressObject

Returns the value of attribute onion_address.



19
20
21
# File 'lib/zwiebel/hidden_service/v3.rb', line 19

def onion_address
  @onion_address
end

#outer_layerObject

Returns the value of attribute outer_layer.



19
20
21
# File 'lib/zwiebel/hidden_service/v3.rb', line 19

def outer_layer
  @outer_layer
end

Instance Method Details

#decryptObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/zwiebel/hidden_service/v3.rb', line 26

def decrypt
  blinded_key = descriptor.certificate.signing_key
  identity_public_key = Zwiebel.v3_address_pubkey(onion_address)
  subcredential = descriptor.subcredential(identity_public_key)
  decrypted_outer_layer = Utilities.decrypt_layer(
    encrypted_data: descriptor.superencrypted,
    constant: "hsdir-superencrypted-data",
    revision_counter: descriptor.revision_counter,
    subcredential: subcredential,
    blinded_key: blinded_key
  )
  @outer_layer = OuterLayer.new(decrypted_data: decrypted_outer_layer)
  decrypted_inner_layer = Utilities.decrypt_layer(
    encrypted_data: outer_layer.encrypted,
    constant: "hsdir-encrypted-data",
    revision_counter: descriptor.revision_counter,
    subcredential: subcredential,
    blinded_key: blinded_key
  )
  @inner_layer = InnerLayer.new(decrypted_data: decrypted_inner_layer)
end