def self.load(json)
begin
raise "Missing certificate store" unless @store
raise "Missing certificate" unless @cert || !@encrypt
raise "Missing certificate key" unless @key || !@encrypt
data = JSON.load(json)
sig = Signature.from_data(data['signature'])
certs = @store.get_signer(data['id'])
raise "Could not find a cert for signer #{data['id']}" unless certs
certs = [ certs ] unless certs.respond_to?(:each)
jsn = data['data'] if certs.any? { |c| sig.match?(c) }
if jsn && @encrypt && data['encrypted']
jsn = EncryptedDocument.from_data(jsn).decrypted_data(@key, @cert)
end
JSON.load(jsn) if jsn
rescue Exception => e
Nanite::Log.error("Loading of secure packet failed: #{e.message}\n#{e.backtrace.join("\n")}")
raise
end
end