Class: Rnp::Sign

Inherits:
Object
  • Object
show all
Defined in:
lib/rnp/op/sign.rb

Overview

Signing operation

Instance Method Summary collapse

Instance Method Details

#add_signer(signer, opts = {}) ⇒ self

Note:

The optional (per-signature) options here are not supported by RNP internally at the time of this writing.

Add a signer.

Parameters:

  • opts (Hash) (defaults to: {})

    set several options in one place

Options Hash (opts):

  • :signer (Key)

    the signer

  • :hash (String) — default: see #hash=
  • :creation_time (Time) — default: see #creation_time=
  • :expiration_time (Time) — default: see #expiration_time=

Returns:

  • (self)


43
44
45
46
47
48
49
50
51
# File 'lib/rnp/op/sign.rb', line 43

def add_signer(signer, opts = {})
  pptr = FFI::MemoryPointer.new(:pointer)
  Rnp.call_ffi(:rnp_op_sign_add_signature, @ptr, signer.ptr, pptr)
  psig = pptr.read_pointer
  self.class.set_signature_options(
    psig,
    **opts,
  )
end

#armored=(armored) ⇒ Object

Set whether the output will be ASCII-armored.

Parameters:

  • armored (Boolean)

    true if the output should be ASCII-armored, false otherwise.



72
73
74
# File 'lib/rnp/op/sign.rb', line 72

def armored=(armored)
  Rnp.call_ffi(:rnp_op_sign_set_armor, @ptr, armored)
end

#compression=(compression) ⇒ Object

Set the compression algorithm and level.

Parameters:

  • compression (Hash<Symbol>)

Options Hash (compression):

  • :algorithm (String)

    the compression algorithm (bzip2, etc)

  • :level (Integer)

    the compression level. This should generally be between 0 (no compression) and 9 (best compression).



83
84
85
86
87
88
89
90
# File 'lib/rnp/op/sign.rb', line 83

def compression=(compression)
  if !compression.is_a?(Hash) || Set.new(compression.keys) != Set.new(%i[algorithm level])
    raise ArgumentError,
          'Compression option must be of the form: {algorithm: \'zlib\', level: 5}'
  end
  Rnp.call_ffi(:rnp_op_sign_set_compression, @ptr, compression[:algorithm],
               compression[:level])
end

#creation_time=(creation_time) ⇒ Object

Set the creation time for signatures.

Parameters:

  • creation_time (Time, Integer)

    the creation time to use for all signatures. As an integer, this is the number of seconds since the unix epoch.



104
105
106
107
# File 'lib/rnp/op/sign.rb', line 104

def creation_time=(creation_time)
  creation_time = creation_time.to_i if creation_time.is_a?(::Time)
  Rnp.call_ffi(:rnp_op_sign_set_creation_time, @ptr, creation_time)
end

#executevoid

This method returns an undefined value.

Execute the operation.

This should only be called once.



123
124
125
# File 'lib/rnp/op/sign.rb', line 123

def execute
  Rnp.call_ffi(:rnp_op_sign_execute, @ptr)
end

#expiration_time=(expiration_time) ⇒ Object

Set the expiration time for signatures.

Parameters:

  • expiration_time (Integer)

    the lifetime of the signature(s), as the number of seconds. The actual expiration date/time is the creation time plus this value. A value of 0 will create signatures that do not expire.



114
115
116
# File 'lib/rnp/op/sign.rb', line 114

def expiration_time=(expiration_time)
  Rnp.call_ffi(:rnp_op_sign_set_expiration_time, @ptr, expiration_time)
end

#hash=(hash) ⇒ Object

Set the hash algorithm used for the signatures.

Parameters:

  • hash (String)

    the hash algorithm name



95
96
97
# File 'lib/rnp/op/sign.rb', line 95

def hash=(hash)
  Rnp.call_ffi(:rnp_op_sign_set_hash, @ptr, hash)
end

#inspectObject



28
29
30
# File 'lib/rnp/op/sign.rb', line 28

def inspect
  Rnp.inspect_ptr(self)
end

#options=(opts) ⇒ Object

Set a group of options.

Parameters:

  • opts (Hash)

    set several options in one place

Options Hash (opts):



61
62
63
64
65
66
# File 'lib/rnp/op/sign.rb', line 61

def options=(opts)
  %i{armored compression hash creation_time expiration_time}.each do |prop|
    value = opts[prop]
    send("#{prop}=", value) unless value.nil?
  end
end