Class: Familia::Encryption::Provider

Inherits:
Object
  • Object
show all
Defined in:
lib/familia/encryption/provider.rb

Overview

Base provider class - similar to FieldType pattern

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeProvider

Returns a new instance of Provider.



11
12
13
14
15
# File 'lib/familia/encryption/provider.rb', line 11

def initialize
  @algorithm = self.class::ALGORITHM
  @nonce_size = self.class::NONCE_SIZE
  @auth_tag_size = self.class::AUTH_TAG_SIZE
end

Instance Attribute Details

#algorithmObject (readonly)

Returns the value of attribute algorithm.



9
10
11
# File 'lib/familia/encryption/provider.rb', line 9

def algorithm
  @algorithm
end

#auth_tag_sizeObject (readonly)

Returns the value of attribute auth_tag_size.



9
10
11
# File 'lib/familia/encryption/provider.rb', line 9

def auth_tag_size
  @auth_tag_size
end

#nonce_sizeObject (readonly)

Returns the value of attribute nonce_size.



9
10
11
# File 'lib/familia/encryption/provider.rb', line 9

def nonce_size
  @nonce_size
end

Class Method Details

.available?Boolean

Check if this provider is available

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


41
42
43
# File 'lib/familia/encryption/provider.rb', line 41

def self.available?
  raise NotImplementedError
end

.priorityObject

Priority for automatic selection (higher = preferred)



46
47
48
# File 'lib/familia/encryption/provider.rb', line 46

def self.priority
  0
end

Instance Method Details

#decrypt(ciphertext, key, nonce, auth_tag, additional_data = nil) ⇒ Object

Raises:

  • (NotImplementedError)


22
23
24
# File 'lib/familia/encryption/provider.rb', line 22

def decrypt(ciphertext, key, nonce, auth_tag, additional_data = nil)
  raise NotImplementedError
end

#derive_key(master_key, context) ⇒ Object

Raises:

  • (NotImplementedError)


30
31
32
# File 'lib/familia/encryption/provider.rb', line 30

def derive_key(master_key, context)
  raise NotImplementedError
end

#encrypt(plaintext, key, additional_data = nil) ⇒ Object

Public interface methods that subclasses must implement

Raises:

  • (NotImplementedError)


18
19
20
# File 'lib/familia/encryption/provider.rb', line 18

def encrypt(plaintext, key, additional_data = nil)
  raise NotImplementedError
end

#generate_nonceObject

Raises:

  • (NotImplementedError)


26
27
28
# File 'lib/familia/encryption/provider.rb', line 26

def generate_nonce
  raise NotImplementedError
end

#secure_wipe(key) ⇒ Object

Clear key from memory (best effort, no security guarantees) Ruby provides no reliable way to securely wipe memory



36
37
38
# File 'lib/familia/encryption/provider.rb', line 36

def secure_wipe(key)
  key&.clear if key.respond_to?(:clear)
end