familia 2.0.0.pre4 → 2.0.0.pre6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.rubocop_todo.yml +17 -17
  4. data/CLAUDE.md +11 -8
  5. data/Gemfile +5 -1
  6. data/Gemfile.lock +19 -3
  7. data/README.md +36 -157
  8. data/docs/overview.md +359 -0
  9. data/docs/wiki/API-Reference.md +347 -0
  10. data/docs/wiki/Connection-Pooling-Guide.md +437 -0
  11. data/docs/wiki/Encrypted-Fields-Overview.md +101 -0
  12. data/docs/wiki/Expiration-Feature-Guide.md +596 -0
  13. data/docs/wiki/Feature-System-Guide.md +600 -0
  14. data/docs/wiki/Features-System-Developer-Guide.md +892 -0
  15. data/docs/wiki/Field-System-Guide.md +784 -0
  16. data/docs/wiki/Home.md +106 -0
  17. data/docs/wiki/Implementation-Guide.md +276 -0
  18. data/docs/wiki/Quantization-Feature-Guide.md +721 -0
  19. data/docs/wiki/RelatableObjects-Guide.md +563 -0
  20. data/docs/wiki/Security-Model.md +183 -0
  21. data/docs/wiki/Transient-Fields-Guide.md +280 -0
  22. data/lib/familia/base.rb +18 -27
  23. data/lib/familia/connection.rb +6 -5
  24. data/lib/familia/{datatype → data_type}/commands.rb +2 -5
  25. data/lib/familia/{datatype → data_type}/serialization.rb +8 -10
  26. data/lib/familia/data_type/types/counter.rb +38 -0
  27. data/lib/familia/{datatype → data_type}/types/hashkey.rb +20 -2
  28. data/lib/familia/{datatype → data_type}/types/list.rb +17 -18
  29. data/lib/familia/data_type/types/lock.rb +43 -0
  30. data/lib/familia/{datatype → data_type}/types/sorted_set.rb +17 -17
  31. data/lib/familia/{datatype → data_type}/types/string.rb +11 -3
  32. data/lib/familia/{datatype → data_type}/types/unsorted_set.rb +17 -18
  33. data/lib/familia/{datatype.rb → data_type.rb} +12 -14
  34. data/lib/familia/encryption/encrypted_data.rb +137 -0
  35. data/lib/familia/encryption/manager.rb +119 -0
  36. data/lib/familia/encryption/provider.rb +49 -0
  37. data/lib/familia/encryption/providers/aes_gcm_provider.rb +123 -0
  38. data/lib/familia/encryption/providers/secure_xchacha20_poly1305_provider.rb +184 -0
  39. data/lib/familia/encryption/providers/xchacha20_poly1305_provider.rb +138 -0
  40. data/lib/familia/encryption/registry.rb +50 -0
  41. data/lib/familia/encryption.rb +178 -0
  42. data/lib/familia/encryption_request_cache.rb +68 -0
  43. data/lib/familia/errors.rb +17 -3
  44. data/lib/familia/features/encrypted_fields/concealed_string.rb +295 -0
  45. data/lib/familia/features/encrypted_fields/encrypted_field_type.rb +221 -0
  46. data/lib/familia/features/encrypted_fields.rb +28 -0
  47. data/lib/familia/features/expiration.rb +107 -77
  48. data/lib/familia/features/quantization.rb +5 -9
  49. data/lib/familia/features/relatable_objects.rb +2 -4
  50. data/lib/familia/features/safe_dump.rb +14 -17
  51. data/lib/familia/features/transient_fields/redacted_string.rb +159 -0
  52. data/lib/familia/features/transient_fields/single_use_redacted_string.rb +62 -0
  53. data/lib/familia/features/transient_fields/transient_field_type.rb +139 -0
  54. data/lib/familia/features/transient_fields.rb +47 -0
  55. data/lib/familia/features.rb +40 -24
  56. data/lib/familia/field_type.rb +273 -0
  57. data/lib/familia/horreum/{connection.rb → core/connection.rb} +6 -15
  58. data/lib/familia/horreum/{commands.rb → core/database_commands.rb} +20 -21
  59. data/lib/familia/horreum/core/serialization.rb +535 -0
  60. data/lib/familia/horreum/{utils.rb → core/utils.rb} +9 -12
  61. data/lib/familia/horreum/core.rb +21 -0
  62. data/lib/familia/horreum/{settings.rb → shared/settings.rb} +10 -4
  63. data/lib/familia/horreum/subclass/definition.rb +469 -0
  64. data/lib/familia/horreum/{class_methods.rb → subclass/management.rb} +27 -250
  65. data/lib/familia/horreum/{related_fields_management.rb → subclass/related_fields_management.rb} +15 -10
  66. data/lib/familia/horreum.rb +30 -22
  67. data/lib/familia/logging.rb +14 -14
  68. data/lib/familia/settings.rb +39 -3
  69. data/lib/familia/utils.rb +45 -0
  70. data/lib/familia/version.rb +1 -1
  71. data/lib/familia.rb +3 -2
  72. data/try/core/base_enhancements_try.rb +115 -0
  73. data/try/core/connection_try.rb +0 -1
  74. data/try/core/create_method_try.rb +240 -0
  75. data/try/core/database_consistency_try.rb +299 -0
  76. data/try/core/errors_try.rb +25 -5
  77. data/try/core/familia_extended_try.rb +3 -4
  78. data/try/core/familia_try.rb +1 -2
  79. data/try/core/persistence_operations_try.rb +297 -0
  80. data/try/core/pools_try.rb +2 -2
  81. data/try/core/secure_identifier_try.rb +0 -1
  82. data/try/core/settings_try.rb +0 -1
  83. data/try/core/utils_try.rb +0 -1
  84. data/try/{datatypes → data_types}/boolean_try.rb +1 -2
  85. data/try/data_types/counter_try.rb +93 -0
  86. data/try/{datatypes → data_types}/datatype_base_try.rb +2 -3
  87. data/try/{datatypes → data_types}/hash_try.rb +1 -2
  88. data/try/{datatypes → data_types}/list_try.rb +1 -2
  89. data/try/data_types/lock_try.rb +133 -0
  90. data/try/{datatypes → data_types}/set_try.rb +1 -2
  91. data/try/{datatypes → data_types}/sorted_set_try.rb +1 -2
  92. data/try/{datatypes → data_types}/string_try.rb +1 -2
  93. data/try/debugging/README.md +32 -0
  94. data/try/debugging/cache_behavior_tracer.rb +91 -0
  95. data/try/debugging/debug_aad_process.rb +82 -0
  96. data/try/debugging/debug_concealed_internal.rb +59 -0
  97. data/try/debugging/debug_concealed_reveal.rb +61 -0
  98. data/try/debugging/debug_context_aad.rb +68 -0
  99. data/try/debugging/debug_context_simple.rb +80 -0
  100. data/try/debugging/debug_cross_context.rb +62 -0
  101. data/try/debugging/debug_database_load.rb +64 -0
  102. data/try/debugging/debug_encrypted_json_check.rb +53 -0
  103. data/try/debugging/debug_encrypted_json_step_by_step.rb +62 -0
  104. data/try/debugging/debug_exists_lifecycle.rb +54 -0
  105. data/try/debugging/debug_field_decrypt.rb +74 -0
  106. data/try/debugging/debug_fresh_cross_context.rb +73 -0
  107. data/try/debugging/debug_load_path.rb +66 -0
  108. data/try/debugging/debug_method_definition.rb +46 -0
  109. data/try/debugging/debug_method_resolution.rb +41 -0
  110. data/try/debugging/debug_minimal.rb +24 -0
  111. data/try/debugging/debug_provider.rb +68 -0
  112. data/try/debugging/debug_secure_behavior.rb +73 -0
  113. data/try/debugging/debug_string_class.rb +46 -0
  114. data/try/debugging/debug_test.rb +46 -0
  115. data/try/debugging/debug_test_design.rb +80 -0
  116. data/try/debugging/encryption_method_tracer.rb +138 -0
  117. data/try/debugging/provider_diagnostics.rb +110 -0
  118. data/try/edge_cases/hash_symbolization_try.rb +0 -1
  119. data/try/edge_cases/json_serialization_try.rb +0 -1
  120. data/try/edge_cases/reserved_keywords_try.rb +42 -11
  121. data/try/encryption/config_persistence_try.rb +192 -0
  122. data/try/encryption/encryption_core_try.rb +328 -0
  123. data/try/encryption/instance_variable_scope_try.rb +31 -0
  124. data/try/encryption/module_loading_try.rb +28 -0
  125. data/try/encryption/providers/aes_gcm_provider_try.rb +178 -0
  126. data/try/encryption/providers/xchacha20_poly1305_provider_try.rb +169 -0
  127. data/try/encryption/roundtrip_validation_try.rb +28 -0
  128. data/try/encryption/secure_memory_handling_try.rb +125 -0
  129. data/try/features/encrypted_fields_core_try.rb +125 -0
  130. data/try/features/encrypted_fields_integration_try.rb +216 -0
  131. data/try/features/encrypted_fields_no_cache_security_try.rb +219 -0
  132. data/try/features/encrypted_fields_security_try.rb +377 -0
  133. data/try/features/encryption_fields/aad_protection_try.rb +138 -0
  134. data/try/features/encryption_fields/concealed_string_core_try.rb +250 -0
  135. data/try/features/encryption_fields/context_isolation_try.rb +141 -0
  136. data/try/features/encryption_fields/error_conditions_try.rb +116 -0
  137. data/try/features/encryption_fields/fresh_key_derivation_try.rb +128 -0
  138. data/try/features/encryption_fields/fresh_key_try.rb +168 -0
  139. data/try/features/encryption_fields/key_rotation_try.rb +123 -0
  140. data/try/features/encryption_fields/memory_security_try.rb +37 -0
  141. data/try/features/encryption_fields/missing_current_key_version_try.rb +23 -0
  142. data/try/features/encryption_fields/nonce_uniqueness_try.rb +56 -0
  143. data/try/features/encryption_fields/secure_by_default_behavior_try.rb +310 -0
  144. data/try/features/encryption_fields/thread_safety_try.rb +199 -0
  145. data/try/features/encryption_fields/universal_serialization_safety_try.rb +174 -0
  146. data/try/features/expiration_try.rb +0 -1
  147. data/try/features/feature_dependencies_try.rb +159 -0
  148. data/try/features/quantization_try.rb +0 -1
  149. data/try/features/real_feature_integration_try.rb +148 -0
  150. data/try/features/relatable_objects_try.rb +0 -1
  151. data/try/features/safe_dump_advanced_try.rb +0 -1
  152. data/try/features/safe_dump_try.rb +0 -1
  153. data/try/features/transient_fields/redacted_string_try.rb +248 -0
  154. data/try/features/transient_fields/refresh_reset_try.rb +164 -0
  155. data/try/features/transient_fields/simple_refresh_test.rb +50 -0
  156. data/try/features/transient_fields/single_use_redacted_string_try.rb +310 -0
  157. data/try/features/transient_fields_core_try.rb +181 -0
  158. data/try/features/transient_fields_integration_try.rb +260 -0
  159. data/try/helpers/test_helpers.rb +67 -0
  160. data/try/horreum/base_try.rb +157 -3
  161. data/try/horreum/enhanced_conflict_handling_try.rb +176 -0
  162. data/try/horreum/field_categories_try.rb +118 -0
  163. data/try/horreum/field_definition_try.rb +96 -0
  164. data/try/horreum/initialization_try.rb +1 -2
  165. data/try/horreum/relations_try.rb +1 -2
  166. data/try/horreum/serialization_persistent_fields_try.rb +165 -0
  167. data/try/horreum/serialization_try.rb +41 -7
  168. data/try/memory/memory_basic_test.rb +73 -0
  169. data/try/memory/memory_detailed_test.rb +121 -0
  170. data/try/memory/memory_docker_ruby_dump.sh +80 -0
  171. data/try/memory/memory_search_for_string.rb +83 -0
  172. data/try/memory/test_actual_redactedstring_protection.rb +38 -0
  173. data/try/models/customer_safe_dump_try.rb +1 -2
  174. data/try/models/customer_try.rb +1 -2
  175. data/try/models/datatype_base_try.rb +1 -2
  176. data/try/models/familia_object_try.rb +0 -1
  177. metadata +131 -23
  178. data/lib/familia/horreum/serialization.rb +0 -445
@@ -0,0 +1,80 @@
1
+ #!/bin/bash
2
+ # try/edge_cases/docker_dump.sh
3
+
4
+ # Usage: bash $0 <container_id>
5
+ #
6
+ # See example output at end.
7
+
8
+ # Set CONTAINER_ID to $CONTAINER_ID or the first argument
9
+ CONTAINER_ID=${CONTAINER_ID:-$1}
10
+
11
+ if [ -z "$CONTAINER_ID" ]; then
12
+ echo "Usage: $0 <container_id>"
13
+ echo "Or set CONTAINER_ID environment variable"
14
+ exit 1
15
+ fi
16
+
17
+ # Create a script to dump all string-like patterns
18
+ docker exec $CONTAINER_ID bash -c '
19
+ # Install required packages
20
+ apt-get update -qq && apt-get install -y -qq procps binutils
21
+
22
+ PID=$(pgrep -f ruby)
23
+
24
+ if [ -z "$PID" ]; then
25
+ echo "No Ruby process found"
26
+ exit 1
27
+ fi
28
+
29
+ echo "Dumping memory for Ruby process $PID"
30
+
31
+ # Check if maps file exists
32
+ if [ ! -f "/proc/$PID/maps" ]; then
33
+ echo "Cannot access memory maps for process $PID"
34
+ exit 1
35
+ fi
36
+
37
+ # Get memory regions
38
+ grep -E "rw-p|r--p" /proc/$PID/maps | while read line; do
39
+ start=$(echo $line | cut -d"-" -f1)
40
+ end=$(echo $line | cut -d" " -f1 | cut -d"-" -f2)
41
+
42
+ # Convert hex to decimal and dump
43
+ start_dec=$((16#$start))
44
+ end_dec=$((16#$end))
45
+ size=$((end_dec - start_dec))
46
+
47
+ # Skip if size is too large (> 10MB) to avoid hanging
48
+ if [ $size -gt 10485760 ]; then
49
+ continue
50
+ fi
51
+
52
+ dd if=/proc/$PID/mem bs=1 skip=$start_dec count=$size 2>/dev/null
53
+ done | strings | grep -i "secret\|api\|key\|token" | head -20
54
+ '
55
+
56
+ # Example Output:
57
+ #
58
+ # $ SECRET=august7th2025
59
+ # $
60
+ # $ docker run --rm -d -p 3000:3000 \
61
+ # -e SECRET=$SECRET \
62
+ # -e REDIS_URL=redis://host.docker.internal:6379/0 \
63
+ # ghcr.io/onetimesecret/devtimesecret-lite:latest
64
+ #
65
+ # abcd1234
66
+ #
67
+ # $ bash try/edge_cases/docker_ruby_dump.sh abcd1234
68
+ # ...
69
+ # Dumping memory for Ruby process 60
70
+ # SECRET
71
+ # SECRET
72
+ # SECRET=august6th2025
73
+ # done | strings | grep -i "secret...
74
+ # SECRET=august6th2025
75
+ # done | strings | grep -i "secret...
76
+ # grep -i "secret\|api\|key|token"
77
+ # done | strings | grep -i "secret...
78
+ # SECRET=august6th2025
79
+ #
80
+ # $ docker kill abcd1234
@@ -0,0 +1,83 @@
1
+ # try/edge_cases/search_memory_for_string_try.rb
2
+
3
+ require 'objspace'
4
+
5
+ require_relative '../helpers/test_helpers'
6
+
7
+ # Enable object space tracking
8
+ ObjectSpace.trace_object_allocations_start
9
+
10
+ def search_memory_for_string(target)
11
+ found_locations = []
12
+
13
+ ObjectSpace.each_object(String) do |str|
14
+ begin
15
+ if str.include?(target)
16
+ found_locations << {
17
+ value: str[0..100], # First 100 chars
18
+ object_id: str.object_id,
19
+ source: ObjectSpace.allocation_sourcefile(str),
20
+ line: ObjectSpace.allocation_sourceline(str),
21
+ frozen: str.frozen?
22
+ }
23
+ end
24
+ rescue => e
25
+ # Some strings might not be accessible
26
+ end
27
+ end
28
+
29
+ found_locations
30
+ end
31
+
32
+ # Test scenario
33
+ secret = "SUPER_SECRET_API_KEY_12345"
34
+ puts "Testing with secret: #{secret}"
35
+
36
+ # Create RedactedString
37
+ redacted = RedactedString.new(secret)
38
+ puts "Created RedactedString"
39
+
40
+ # Force GC to see if copies persist
41
+ GC.start(full_mark: true, immediate_sweep: true)
42
+
43
+ # Search memory
44
+ puts "\n=== Memory search BEFORE expose ==="
45
+ found = search_memory_for_string("SUPER_SECRET_API_KEY")
46
+ found.each do |location|
47
+ puts "Found at object_id: #{location[:object_id]}"
48
+ puts " Value: #{location[:value]}"
49
+ puts " Source: #{location[:source]}:#{location[:line]}"
50
+ puts " Frozen: #{location[:frozen]}"
51
+ end
52
+
53
+ # Use expose
54
+ redacted.expose do |plain|
55
+ puts "\nInside expose block, plain = [REDACTED for display]"
56
+
57
+ # Search during expose
58
+ puts "\n=== Memory search DURING expose ==="
59
+ found = search_memory_for_string("SUPER_SECRET_API_KEY")
60
+ puts "Found #{found.size} instances"
61
+ end
62
+
63
+ # After expose
64
+ GC.start(full_mark: true, immediate_sweep: true)
65
+ puts "\n=== Memory search AFTER expose ==="
66
+ found = search_memory_for_string("SUPER_SECRET_API_KEY")
67
+ found.each do |location|
68
+ puts "Found at object_id: #{location[:object_id]}"
69
+ puts " Value: #{location[:value]}"
70
+ end
71
+
72
+ # Also check with marshal dump
73
+ puts "\n=== Checking Marshal dump ==="
74
+ begin
75
+ marshaled = Marshal.dump(ObjectSpace.each_object.to_a)
76
+ if marshaled.include?("SUPER_SECRET_API_KEY")
77
+ puts "❌ Secret found in Marshal dump!"
78
+ else
79
+ puts "✅ Secret not found in Marshal dump"
80
+ end
81
+ rescue => e
82
+ puts "Marshal failed: #{e}"
83
+ end
@@ -0,0 +1,38 @@
1
+ # try/memory/test_actual_redactedstring_protection.rb
2
+
3
+ require_relative '../helpers/test_helpers'
4
+
5
+ # Test 1: Does it prevent logging leaks?
6
+ secret = "API_KEY_12345"
7
+ redacted = RedactedString.new(secret)
8
+
9
+ puts "Logging test:"
10
+ puts "Normal string logs as: #{secret}" # Shows: API_KEY_12345
11
+ puts "Redacted string logs as: #{redacted}" # Shows: [REDACTED]
12
+ puts "✅ Logging protection works!\n\n"
13
+
14
+ # Test 2: Does it prevent exception leaks?
15
+ begin
16
+ raise StandardError, "Error with secret: #{redacted}"
17
+ rescue => e
18
+ puts "Exception message: #{e.message}"
19
+ puts "✅ Exception protection works!\n\n" if e.message.include?("[REDACTED]")
20
+ end
21
+
22
+ # Test 3: Does it prevent debug leaks?
23
+ require 'pp'
24
+ data = {
25
+ user: "john",
26
+ token: redacted
27
+ }
28
+ puts "Debug output:"
29
+ pp data # Will show token: [REDACTED]
30
+ puts "✅ Debug protection works!\n\n"
31
+
32
+ # Test 4: Real-world usage pattern
33
+ redacted.expose do |token|
34
+ # Simulate API call
35
+ puts "Making API call with token (simulated)"
36
+ # HTTParty.get("https://api.example.com", headers: { "Authorization" => token })
37
+ end
38
+ puts "After API call, trying to access: #{redacted}" # Still shows [REDACTED]
@@ -1,6 +1,5 @@
1
1
  # try/models/customer_safedump_try.rb
2
2
 
3
- require_relative '../../lib/familia'
4
3
  require_relative '../helpers/test_helpers'
5
4
 
6
5
  # Setup
@@ -46,7 +45,7 @@ require_relative '../helpers/test_helpers'
46
45
  @customer.secrets_created.increment
47
46
  @safe_dump = @customer.safe_dump
48
47
  @safe_dump[:secrets_created]
49
- #=> "1"
48
+ #=> 1
50
49
 
51
50
  ## Safe dump includes correct active status when verified and not reset requested
52
51
  @safe_dump[:active]
@@ -1,7 +1,6 @@
1
1
  # try/models/customer_try.rb
2
2
 
3
3
  # Customer Tryouts
4
- require_relative '../../lib/familia'
5
4
  require_relative '../helpers/test_helpers'
6
5
 
7
6
  # Setup
@@ -44,7 +43,7 @@ Customer.find_by_id(ident).planid
44
43
  @customer.secrets_created.delete!
45
44
  @customer.secrets_created.increment
46
45
  @customer.secrets_created.value
47
- #=> '1'
46
+ #=> 1
48
47
 
49
48
  ## Customer can add custom domain via add method
50
49
  @customer.custom_domains.add(@now, 'example.org')
@@ -1,8 +1,7 @@
1
- # try/datatypes/datatype_base_try.rb
1
+ # try/data_types/data_type_base_try.rb
2
2
 
3
3
  # Test DataType base functionality
4
4
 
5
- require_relative '../../lib/familia'
6
5
  require_relative '../helpers/test_helpers'
7
6
 
8
7
  Familia.debug = false
@@ -1,6 +1,5 @@
1
1
  # try/models/familia_object_try.rb
2
2
 
3
- require_relative '../../lib/familia'
4
3
  require_relative '../helpers/test_helpers'
5
4
 
6
5
  Familia.debug = false
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: familia
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre4
4
+ version: 2.0.0.pre6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delano Mandelbaum
@@ -134,33 +134,68 @@ files:
134
134
  - README.md
135
135
  - bin/irb
136
136
  - docs/connection_pooling.md
137
+ - docs/overview.md
138
+ - docs/wiki/API-Reference.md
139
+ - docs/wiki/Connection-Pooling-Guide.md
140
+ - docs/wiki/Encrypted-Fields-Overview.md
141
+ - docs/wiki/Expiration-Feature-Guide.md
142
+ - docs/wiki/Feature-System-Guide.md
143
+ - docs/wiki/Features-System-Developer-Guide.md
144
+ - docs/wiki/Field-System-Guide.md
145
+ - docs/wiki/Home.md
146
+ - docs/wiki/Implementation-Guide.md
147
+ - docs/wiki/Quantization-Feature-Guide.md
148
+ - docs/wiki/RelatableObjects-Guide.md
149
+ - docs/wiki/Security-Model.md
150
+ - docs/wiki/Transient-Fields-Guide.md
137
151
  - familia.gemspec
138
152
  - lib/familia.rb
139
153
  - lib/familia/base.rb
140
154
  - lib/familia/connection.rb
141
155
  - lib/familia/core_ext.rb
142
- - lib/familia/datatype.rb
143
- - lib/familia/datatype/commands.rb
144
- - lib/familia/datatype/serialization.rb
145
- - lib/familia/datatype/types/hashkey.rb
146
- - lib/familia/datatype/types/list.rb
147
- - lib/familia/datatype/types/sorted_set.rb
148
- - lib/familia/datatype/types/string.rb
149
- - lib/familia/datatype/types/unsorted_set.rb
156
+ - lib/familia/data_type.rb
157
+ - lib/familia/data_type/commands.rb
158
+ - lib/familia/data_type/serialization.rb
159
+ - lib/familia/data_type/types/counter.rb
160
+ - lib/familia/data_type/types/hashkey.rb
161
+ - lib/familia/data_type/types/list.rb
162
+ - lib/familia/data_type/types/lock.rb
163
+ - lib/familia/data_type/types/sorted_set.rb
164
+ - lib/familia/data_type/types/string.rb
165
+ - lib/familia/data_type/types/unsorted_set.rb
166
+ - lib/familia/encryption.rb
167
+ - lib/familia/encryption/encrypted_data.rb
168
+ - lib/familia/encryption/manager.rb
169
+ - lib/familia/encryption/provider.rb
170
+ - lib/familia/encryption/providers/aes_gcm_provider.rb
171
+ - lib/familia/encryption/providers/secure_xchacha20_poly1305_provider.rb
172
+ - lib/familia/encryption/providers/xchacha20_poly1305_provider.rb
173
+ - lib/familia/encryption/registry.rb
174
+ - lib/familia/encryption_request_cache.rb
150
175
  - lib/familia/errors.rb
151
176
  - lib/familia/features.rb
177
+ - lib/familia/features/encrypted_fields.rb
178
+ - lib/familia/features/encrypted_fields/concealed_string.rb
179
+ - lib/familia/features/encrypted_fields/encrypted_field_type.rb
152
180
  - lib/familia/features/expiration.rb
153
181
  - lib/familia/features/quantization.rb
154
182
  - lib/familia/features/relatable_objects.rb
155
183
  - lib/familia/features/safe_dump.rb
184
+ - lib/familia/features/transient_fields.rb
185
+ - lib/familia/features/transient_fields/redacted_string.rb
186
+ - lib/familia/features/transient_fields/single_use_redacted_string.rb
187
+ - lib/familia/features/transient_fields/transient_field_type.rb
188
+ - lib/familia/field_type.rb
156
189
  - lib/familia/horreum.rb
157
- - lib/familia/horreum/class_methods.rb
158
- - lib/familia/horreum/commands.rb
159
- - lib/familia/horreum/connection.rb
160
- - lib/familia/horreum/related_fields_management.rb
161
- - lib/familia/horreum/serialization.rb
162
- - lib/familia/horreum/settings.rb
163
- - lib/familia/horreum/utils.rb
190
+ - lib/familia/horreum/core.rb
191
+ - lib/familia/horreum/core/connection.rb
192
+ - lib/familia/horreum/core/database_commands.rb
193
+ - lib/familia/horreum/core/serialization.rb
194
+ - lib/familia/horreum/core/utils.rb
195
+ - lib/familia/horreum/shared/settings.rb
196
+ - lib/familia/horreum/subclass/definition.rb
197
+ - lib/familia/horreum/subclass/management.rb
198
+ - lib/familia/horreum/subclass/related_fields_management.rb
164
199
  - lib/familia/logging.rb
165
200
  - lib/familia/multi_result.rb
166
201
  - lib/familia/refinements.rb
@@ -170,24 +205,55 @@ files:
170
205
  - lib/familia/version.rb
171
206
  - lib/middleware/database_middleware.rb
172
207
  - try/configuration/scenarios_try.rb
208
+ - try/core/base_enhancements_try.rb
173
209
  - try/core/connection_try.rb
210
+ - try/core/create_method_try.rb
211
+ - try/core/database_consistency_try.rb
174
212
  - try/core/errors_try.rb
175
213
  - try/core/extensions_try.rb
176
214
  - try/core/familia_extended_try.rb
177
215
  - try/core/familia_try.rb
178
216
  - try/core/middleware_try.rb
217
+ - try/core/persistence_operations_try.rb
179
218
  - try/core/pools_try.rb
180
219
  - try/core/secure_identifier_try.rb
181
220
  - try/core/settings_try.rb
182
221
  - try/core/tools_try.rb
183
222
  - try/core/utils_try.rb
184
- - try/datatypes/boolean_try.rb
185
- - try/datatypes/datatype_base_try.rb
186
- - try/datatypes/hash_try.rb
187
- - try/datatypes/list_try.rb
188
- - try/datatypes/set_try.rb
189
- - try/datatypes/sorted_set_try.rb
190
- - try/datatypes/string_try.rb
223
+ - try/data_types/boolean_try.rb
224
+ - try/data_types/counter_try.rb
225
+ - try/data_types/datatype_base_try.rb
226
+ - try/data_types/hash_try.rb
227
+ - try/data_types/list_try.rb
228
+ - try/data_types/lock_try.rb
229
+ - try/data_types/set_try.rb
230
+ - try/data_types/sorted_set_try.rb
231
+ - try/data_types/string_try.rb
232
+ - try/debugging/README.md
233
+ - try/debugging/cache_behavior_tracer.rb
234
+ - try/debugging/debug_aad_process.rb
235
+ - try/debugging/debug_concealed_internal.rb
236
+ - try/debugging/debug_concealed_reveal.rb
237
+ - try/debugging/debug_context_aad.rb
238
+ - try/debugging/debug_context_simple.rb
239
+ - try/debugging/debug_cross_context.rb
240
+ - try/debugging/debug_database_load.rb
241
+ - try/debugging/debug_encrypted_json_check.rb
242
+ - try/debugging/debug_encrypted_json_step_by_step.rb
243
+ - try/debugging/debug_exists_lifecycle.rb
244
+ - try/debugging/debug_field_decrypt.rb
245
+ - try/debugging/debug_fresh_cross_context.rb
246
+ - try/debugging/debug_load_path.rb
247
+ - try/debugging/debug_method_definition.rb
248
+ - try/debugging/debug_method_resolution.rb
249
+ - try/debugging/debug_minimal.rb
250
+ - try/debugging/debug_provider.rb
251
+ - try/debugging/debug_secure_behavior.rb
252
+ - try/debugging/debug_string_class.rb
253
+ - try/debugging/debug_test.rb
254
+ - try/debugging/debug_test_design.rb
255
+ - try/debugging/encryption_method_tracer.rb
256
+ - try/debugging/provider_diagnostics.rb
191
257
  - try/edge_cases/empty_identifiers_try.rb
192
258
  - try/edge_cases/hash_symbolization_try.rb
193
259
  - try/edge_cases/json_serialization_try.rb
@@ -195,20 +261,62 @@ files:
195
261
  - try/edge_cases/reserved_keywords_try.rb
196
262
  - try/edge_cases/string_coercion_try.rb
197
263
  - try/edge_cases/ttl_side_effects_try.rb
264
+ - try/encryption/config_persistence_try.rb
265
+ - try/encryption/encryption_core_try.rb
266
+ - try/encryption/instance_variable_scope_try.rb
267
+ - try/encryption/module_loading_try.rb
268
+ - try/encryption/providers/aes_gcm_provider_try.rb
269
+ - try/encryption/providers/xchacha20_poly1305_provider_try.rb
270
+ - try/encryption/roundtrip_validation_try.rb
271
+ - try/encryption/secure_memory_handling_try.rb
272
+ - try/features/encrypted_fields_core_try.rb
273
+ - try/features/encrypted_fields_integration_try.rb
274
+ - try/features/encrypted_fields_no_cache_security_try.rb
275
+ - try/features/encrypted_fields_security_try.rb
276
+ - try/features/encryption_fields/aad_protection_try.rb
277
+ - try/features/encryption_fields/concealed_string_core_try.rb
278
+ - try/features/encryption_fields/context_isolation_try.rb
279
+ - try/features/encryption_fields/error_conditions_try.rb
280
+ - try/features/encryption_fields/fresh_key_derivation_try.rb
281
+ - try/features/encryption_fields/fresh_key_try.rb
282
+ - try/features/encryption_fields/key_rotation_try.rb
283
+ - try/features/encryption_fields/memory_security_try.rb
284
+ - try/features/encryption_fields/missing_current_key_version_try.rb
285
+ - try/features/encryption_fields/nonce_uniqueness_try.rb
286
+ - try/features/encryption_fields/secure_by_default_behavior_try.rb
287
+ - try/features/encryption_fields/thread_safety_try.rb
288
+ - try/features/encryption_fields/universal_serialization_safety_try.rb
198
289
  - try/features/expiration_try.rb
290
+ - try/features/feature_dependencies_try.rb
199
291
  - try/features/quantization_try.rb
292
+ - try/features/real_feature_integration_try.rb
200
293
  - try/features/relatable_objects_try.rb
201
294
  - try/features/safe_dump_advanced_try.rb
202
295
  - try/features/safe_dump_try.rb
296
+ - try/features/transient_fields/redacted_string_try.rb
297
+ - try/features/transient_fields/refresh_reset_try.rb
298
+ - try/features/transient_fields/simple_refresh_test.rb
299
+ - try/features/transient_fields/single_use_redacted_string_try.rb
300
+ - try/features/transient_fields_core_try.rb
301
+ - try/features/transient_fields_integration_try.rb
203
302
  - try/helpers/test_helpers.rb
204
303
  - try/horreum/base_try.rb
205
304
  - try/horreum/class_methods_try.rb
206
305
  - try/horreum/commands_try.rb
306
+ - try/horreum/enhanced_conflict_handling_try.rb
307
+ - try/horreum/field_categories_try.rb
308
+ - try/horreum/field_definition_try.rb
207
309
  - try/horreum/initialization_try.rb
208
310
  - try/horreum/relations_try.rb
311
+ - try/horreum/serialization_persistent_fields_try.rb
209
312
  - try/horreum/serialization_try.rb
210
313
  - try/horreum/settings_try.rb
211
314
  - try/integration/cross_component_try.rb
315
+ - try/memory/memory_basic_test.rb
316
+ - try/memory/memory_detailed_test.rb
317
+ - try/memory/memory_docker_ruby_dump.sh
318
+ - try/memory/memory_search_for_string.rb
319
+ - try/memory/test_actual_redactedstring_protection.rb
212
320
  - try/models/customer_safe_dump_try.rb
213
321
  - try/models/customer_try.rb
214
322
  - try/models/datatype_base_try.rb