class OpenPGP::Message
OpenPGP
message.
@see tools.ietf.org/html/rfc4880#section-4.1 @see tools.ietf.org/html/rfc4880#section-11 @see tools.ietf.org/html/rfc4880#section-11.3
Attributes
@return [Array<Packet>]
Public Class Methods
@param [Object] data @param [Hash{Symbol => Object}] options @return [Object]
# File lib/openpgp/message.rb, line 49 def self.decrypt(data, options = {}, &block) raise NotImplementedError # TODO end
Creates an encrypted OpenPGP
message.
@param [Object] data @param [Hash{Symbol => Object}] options @return [Message]
# File lib/openpgp/message.rb, line 20 def self.encrypt(data, options = {}, &block) if options[:symmetric] key = (options[:key] || S2K::DEFAULT.new(options[:passphrase])) cipher = (options[:cipher] || Cipher::DEFAULT).new(key) msg = self.new do |msg| msg << Packet::SymmetricSessionKey.new(:algorithm => cipher.identifier, :s2k => key) msg << Packet::EncryptedData.new do |packet| plaintext = self.write do |msg| case data when Message then data.each { |packet| msg << packet } when Packet then msg << data else msg << Packet::LiteralData.new(:data => data) end end packet.data = cipher.encrypt(plaintext) end end block_given? ? block.call(msg) : msg else raise NotImplementedError # TODO end end
@param [Array<Packet>] packets
# File lib/openpgp/message.rb, line 84 def initialize(*packets, &block) @packets = packets.flatten block.call(self) if block_given? end
Parses an OpenPGP
message.
@param [Buffer, to_str] data @return [Message] @see tools.ietf.org/html/rfc4880#section-4.1 @see tools.ietf.org/html/rfc4880#section-4.2
# File lib/openpgp/message.rb, line 60 def self.parse(data) data = Buffer.new(data.to_str) if data.respond_to?(:to_str) msg = self.new until data.eof? if packet = OpenPGP::Packet.parse(data) msg << packet else raise "Invalid OpenPGP message data at position #{data.pos}" end end msg end
@return [IO, write] io @return [void]
# File lib/openpgp/message.rb, line 77 def self.write(io = nil, &block) data = self.new(&block).to_s io.respond_to?(:write) ? io.write(data) : data end
Public Instance Methods
@param [Packet] packet @return [self]
# File lib/openpgp/message.rb, line 106 def <<(packet) packets << packet end
@yield [packet] @yieldparam [Packet] packet @return [Enumerator]
# File lib/openpgp/message.rb, line 93 def each(&block) # :yields: packet packets.each(&block) end
@return [Boolean]
# File lib/openpgp/message.rb, line 112 def empty? packets.empty? end
@return [Integer]
# File lib/openpgp/message.rb, line 118 def size inject(0) { |sum, packet| sum + packet.size } end
@return [Array<Packet>]
# File lib/openpgp/message.rb, line 99 def to_a packets.to_a end
@return [String]
# File lib/openpgp/message.rb, line 124 def to_s Buffer.write do |buffer| packets.each do |packet| if body = packet.body buffer.write_byte(packet.class.tag | 0xC0) buffer.write_byte(body.size) buffer.write_bytes(body) end end end end