This commit is contained in:
Netscape Navigator 2019-10-20 21:11:16 -05:00
parent a2db4e3cdd
commit 1ef6d4e6ce
4 changed files with 51 additions and 18 deletions

View File

@ -23,7 +23,6 @@ module Pigeon
# the key should be derived
def initialize(seed = SecureRandom.random_bytes(Ed25519::KEY_SIZE))
@seed = seed
@raw_key = Ed25519::SigningKey.new(seed)
end
def private_key
@ -31,14 +30,26 @@ module Pigeon
end
def public_key
bytes = @raw_key.verify_key.to_bytes
bytes = raw_key.verify_key.to_bytes
b64 = Base64.urlsafe_encode64(bytes)
@public_key ||= KeyPair.add_headers(b64)
end
def sign(string)
hex = raw_key.sign(string)
b64 = Base64.urlsafe_encode64(hex)
return b64 + ".sig.ed25519"
end
def save!
Pigeon::Storage.current.set_config(SEED_CONFIG_KEY, @seed)
end
private
def raw_key
@raw_key ||= Ed25519::SigningKey.new(@seed)
end
end
end

View File

@ -1,3 +1,5 @@
require "digest"
module Pigeon
class Message
NAME_OF_DRAFT = "HEAD.draft"
@ -36,27 +38,36 @@ module Pigeon
end
def calculate_signature
puts "========== TODO"
"FIX_ASAP_!"
string = Template.new(self).render_without_signature
KeyPair.current.sign(string)
end
def path_to_message_numbe(n)
def path_to_message_number(n)
File.join(".pigeon", "user", "#{n.to_s.rjust(7, "0")}.pigeon")
end
def previous_message
raise "Could not load @depth" unless @depth
if (@depth == 1)
return nil
else
Marshal.load(File.read(path_to_message_number(@depth - 1)))
end
end
def calculate_depth
Dir[OUTBOX_PATH].count
end
def sign
# Set @depth
@depth = (Dir[OUTBOX_PATH].count - 1)
@depth = calculate_depth
@prev = previous_message ? previous_message.signature : "".inspect
@signature = calculate_signature
# Create a file in ".pigeon/user/#{ @depth.rjust(7, "0") }".pigeon
file_path = path_to_message_numbe(@depth)
binding.pry
# calculate prev
@prev = "HOW WILL I DO THIS?"
# Store to disk
self.save
# return self
file_path = path_to_message_number(@depth)
self.freeze
File.write(file_path, Marshal.dump(self))
self
end
def save

View File

@ -6,9 +6,9 @@ module Pigeon
class Template
TPL_DIR = "views"
HEADER_TPL = File.read(File.join(TPL_DIR, "1_header.erb"))
BODY_TPL = File.read(File.join(TPL_DIR, "2_body.erb"))
FOOTER_TPL = File.read(File.join(TPL_DIR, "3_footer.erb"))
HEADER_TPL = File.read(File.join(TPL_DIR, "1_header.erb")).sub("\n", "")
BODY_TPL = File.read(File.join(TPL_DIR, "2_body.erb")).sub("\n", "")
FOOTER_TPL = File.read(File.join(TPL_DIR, "3_footer.erb")).sub("\n", "")
COMPLETE_TPL = [HEADER_TPL, BODY_TPL, FOOTER_TPL].join("")
@ -19,6 +19,16 @@ module Pigeon
end
def render
do_render(COMPLETE_TPL)
end
def render_without_signature
do_render([HEADER_TPL, BODY_TPL].join(""))
end
private
def do_render(template)
author = message.author
body = message.body
kind = message.kind

View File

@ -1 +1,2 @@
<% body.to_a.each do |k, v| %><%= k %>:<%= v %><%= "\n" %><% end %>