54 lines
2.5 KiB
Ruby
54 lines
2.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Nostr
|
|
# Classes of event kinds.
|
|
module Events
|
|
# An event whose +content+ is encrypted. It can only be decrypted by the owner of the private key that pairs
|
|
# the event's +pubkey+.
|
|
class EncryptedDirectMessage < Event
|
|
# Instantiates a new encrypted direct message
|
|
#
|
|
# @api public
|
|
#
|
|
# @example Instantiating a new encrypted direct message
|
|
# Nostr::Events::EncryptedDirectMessage.new(
|
|
# sender_private_key: 'ccf9fdf3e1466d7c20969c71ec98defcf5f54aee088513e1b73ccb7bd770d460',
|
|
# recipient_public_key: '48df4af6e240ac5f7c5de89bf5941b249880be0e87d03685b178ccb1a315f52e',
|
|
# plain_text: 'Your feedback is appreciated, now pay $8',
|
|
# )
|
|
#
|
|
# @example Instantiating a new encrypted direct message that references a previous direct message
|
|
# Nostr::Events::EncryptedDirectMessage.new(
|
|
# sender_private_key: 'ccf9fdf3e1466d7c20969c71ec98defcf5f54aee088513e1b73ccb7bd770d460',
|
|
# recipient_public_key: '48df4af6e240ac5f7c5de89bf5941b249880be0e87d03685b178ccb1a315f52e',
|
|
# plain_text: 'Your feedback is appreciated, now pay $8',
|
|
# previous_direct_message: 'ccf9fdf3e1466d7c20969c71ec98defcf5f54aee088513e1b73ccb7bd770d460'
|
|
# )
|
|
#
|
|
# @param plain_text [String] The +content+ of the encrypted message.
|
|
# @param sender_private_key [String] 32-bytes hex-encoded private key of the message's author.
|
|
# @param recipient_public_key [String] 32-bytes hex-encoded public key of the recipient of the encrypted message.
|
|
# @param previous_direct_message [String] 32-bytes hex-encoded id identifying the previous message in a
|
|
# conversation or a message we are explicitly replying to (such that contextual, more organized conversations
|
|
# may happen
|
|
#
|
|
def initialize(plain_text:, sender_private_key:, recipient_public_key:, previous_direct_message: nil)
|
|
crypto = Crypto.new
|
|
keygen = Keygen.new
|
|
|
|
encrypted_content = crypto.encrypt_text(sender_private_key, recipient_public_key, plain_text)
|
|
sender_public_key = keygen.extract_public_key(sender_private_key)
|
|
|
|
super(
|
|
pubkey: sender_public_key,
|
|
kind: Nostr::EventKind::ENCRYPTED_DIRECT_MESSAGE,
|
|
content: encrypted_content,
|
|
)
|
|
|
|
add_pubkey_reference(recipient_public_key)
|
|
add_event_reference(previous_direct_message) if previous_direct_message
|
|
end
|
|
end
|
|
end
|
|
end
|