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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.rubocop_todo.yml +17 -17
- data/CLAUDE.md +11 -8
- data/Gemfile +5 -1
- data/Gemfile.lock +19 -3
- data/README.md +36 -157
- data/docs/overview.md +359 -0
- data/docs/wiki/API-Reference.md +347 -0
- data/docs/wiki/Connection-Pooling-Guide.md +437 -0
- data/docs/wiki/Encrypted-Fields-Overview.md +101 -0
- data/docs/wiki/Expiration-Feature-Guide.md +596 -0
- data/docs/wiki/Feature-System-Guide.md +600 -0
- data/docs/wiki/Features-System-Developer-Guide.md +892 -0
- data/docs/wiki/Field-System-Guide.md +784 -0
- data/docs/wiki/Home.md +106 -0
- data/docs/wiki/Implementation-Guide.md +276 -0
- data/docs/wiki/Quantization-Feature-Guide.md +721 -0
- data/docs/wiki/RelatableObjects-Guide.md +563 -0
- data/docs/wiki/Security-Model.md +183 -0
- data/docs/wiki/Transient-Fields-Guide.md +280 -0
- data/lib/familia/base.rb +18 -27
- data/lib/familia/connection.rb +6 -5
- data/lib/familia/{datatype → data_type}/commands.rb +2 -5
- data/lib/familia/{datatype → data_type}/serialization.rb +8 -10
- data/lib/familia/data_type/types/counter.rb +38 -0
- data/lib/familia/{datatype → data_type}/types/hashkey.rb +20 -2
- data/lib/familia/{datatype → data_type}/types/list.rb +17 -18
- data/lib/familia/data_type/types/lock.rb +43 -0
- data/lib/familia/{datatype → data_type}/types/sorted_set.rb +17 -17
- data/lib/familia/{datatype → data_type}/types/string.rb +11 -3
- data/lib/familia/{datatype → data_type}/types/unsorted_set.rb +17 -18
- data/lib/familia/{datatype.rb → data_type.rb} +12 -14
- data/lib/familia/encryption/encrypted_data.rb +137 -0
- data/lib/familia/encryption/manager.rb +119 -0
- data/lib/familia/encryption/provider.rb +49 -0
- data/lib/familia/encryption/providers/aes_gcm_provider.rb +123 -0
- data/lib/familia/encryption/providers/secure_xchacha20_poly1305_provider.rb +184 -0
- data/lib/familia/encryption/providers/xchacha20_poly1305_provider.rb +138 -0
- data/lib/familia/encryption/registry.rb +50 -0
- data/lib/familia/encryption.rb +178 -0
- data/lib/familia/encryption_request_cache.rb +68 -0
- data/lib/familia/errors.rb +17 -3
- data/lib/familia/features/encrypted_fields/concealed_string.rb +295 -0
- data/lib/familia/features/encrypted_fields/encrypted_field_type.rb +221 -0
- data/lib/familia/features/encrypted_fields.rb +28 -0
- data/lib/familia/features/expiration.rb +107 -77
- data/lib/familia/features/quantization.rb +5 -9
- data/lib/familia/features/relatable_objects.rb +2 -4
- data/lib/familia/features/safe_dump.rb +14 -17
- data/lib/familia/features/transient_fields/redacted_string.rb +159 -0
- data/lib/familia/features/transient_fields/single_use_redacted_string.rb +62 -0
- data/lib/familia/features/transient_fields/transient_field_type.rb +139 -0
- data/lib/familia/features/transient_fields.rb +47 -0
- data/lib/familia/features.rb +40 -24
- data/lib/familia/field_type.rb +273 -0
- data/lib/familia/horreum/{connection.rb → core/connection.rb} +6 -15
- data/lib/familia/horreum/{commands.rb → core/database_commands.rb} +20 -21
- data/lib/familia/horreum/core/serialization.rb +535 -0
- data/lib/familia/horreum/{utils.rb → core/utils.rb} +9 -12
- data/lib/familia/horreum/core.rb +21 -0
- data/lib/familia/horreum/{settings.rb → shared/settings.rb} +10 -4
- data/lib/familia/horreum/subclass/definition.rb +469 -0
- data/lib/familia/horreum/{class_methods.rb → subclass/management.rb} +27 -250
- data/lib/familia/horreum/{related_fields_management.rb → subclass/related_fields_management.rb} +15 -10
- data/lib/familia/horreum.rb +30 -22
- data/lib/familia/logging.rb +14 -14
- data/lib/familia/settings.rb +39 -3
- data/lib/familia/utils.rb +45 -0
- data/lib/familia/version.rb +1 -1
- data/lib/familia.rb +3 -2
- data/try/core/base_enhancements_try.rb +115 -0
- data/try/core/connection_try.rb +0 -1
- data/try/core/create_method_try.rb +240 -0
- data/try/core/database_consistency_try.rb +299 -0
- data/try/core/errors_try.rb +25 -5
- data/try/core/familia_extended_try.rb +3 -4
- data/try/core/familia_try.rb +1 -2
- data/try/core/persistence_operations_try.rb +297 -0
- data/try/core/pools_try.rb +2 -2
- data/try/core/secure_identifier_try.rb +0 -1
- data/try/core/settings_try.rb +0 -1
- data/try/core/utils_try.rb +0 -1
- data/try/{datatypes → data_types}/boolean_try.rb +1 -2
- data/try/data_types/counter_try.rb +93 -0
- data/try/{datatypes → data_types}/datatype_base_try.rb +2 -3
- data/try/{datatypes → data_types}/hash_try.rb +1 -2
- data/try/{datatypes → data_types}/list_try.rb +1 -2
- data/try/data_types/lock_try.rb +133 -0
- data/try/{datatypes → data_types}/set_try.rb +1 -2
- data/try/{datatypes → data_types}/sorted_set_try.rb +1 -2
- data/try/{datatypes → data_types}/string_try.rb +1 -2
- data/try/debugging/README.md +32 -0
- data/try/debugging/cache_behavior_tracer.rb +91 -0
- data/try/debugging/debug_aad_process.rb +82 -0
- data/try/debugging/debug_concealed_internal.rb +59 -0
- data/try/debugging/debug_concealed_reveal.rb +61 -0
- data/try/debugging/debug_context_aad.rb +68 -0
- data/try/debugging/debug_context_simple.rb +80 -0
- data/try/debugging/debug_cross_context.rb +62 -0
- data/try/debugging/debug_database_load.rb +64 -0
- data/try/debugging/debug_encrypted_json_check.rb +53 -0
- data/try/debugging/debug_encrypted_json_step_by_step.rb +62 -0
- data/try/debugging/debug_exists_lifecycle.rb +54 -0
- data/try/debugging/debug_field_decrypt.rb +74 -0
- data/try/debugging/debug_fresh_cross_context.rb +73 -0
- data/try/debugging/debug_load_path.rb +66 -0
- data/try/debugging/debug_method_definition.rb +46 -0
- data/try/debugging/debug_method_resolution.rb +41 -0
- data/try/debugging/debug_minimal.rb +24 -0
- data/try/debugging/debug_provider.rb +68 -0
- data/try/debugging/debug_secure_behavior.rb +73 -0
- data/try/debugging/debug_string_class.rb +46 -0
- data/try/debugging/debug_test.rb +46 -0
- data/try/debugging/debug_test_design.rb +80 -0
- data/try/debugging/encryption_method_tracer.rb +138 -0
- data/try/debugging/provider_diagnostics.rb +110 -0
- data/try/edge_cases/hash_symbolization_try.rb +0 -1
- data/try/edge_cases/json_serialization_try.rb +0 -1
- data/try/edge_cases/reserved_keywords_try.rb +42 -11
- data/try/encryption/config_persistence_try.rb +192 -0
- data/try/encryption/encryption_core_try.rb +328 -0
- data/try/encryption/instance_variable_scope_try.rb +31 -0
- data/try/encryption/module_loading_try.rb +28 -0
- data/try/encryption/providers/aes_gcm_provider_try.rb +178 -0
- data/try/encryption/providers/xchacha20_poly1305_provider_try.rb +169 -0
- data/try/encryption/roundtrip_validation_try.rb +28 -0
- data/try/encryption/secure_memory_handling_try.rb +125 -0
- data/try/features/encrypted_fields_core_try.rb +125 -0
- data/try/features/encrypted_fields_integration_try.rb +216 -0
- data/try/features/encrypted_fields_no_cache_security_try.rb +219 -0
- data/try/features/encrypted_fields_security_try.rb +377 -0
- data/try/features/encryption_fields/aad_protection_try.rb +138 -0
- data/try/features/encryption_fields/concealed_string_core_try.rb +250 -0
- data/try/features/encryption_fields/context_isolation_try.rb +141 -0
- data/try/features/encryption_fields/error_conditions_try.rb +116 -0
- data/try/features/encryption_fields/fresh_key_derivation_try.rb +128 -0
- data/try/features/encryption_fields/fresh_key_try.rb +168 -0
- data/try/features/encryption_fields/key_rotation_try.rb +123 -0
- data/try/features/encryption_fields/memory_security_try.rb +37 -0
- data/try/features/encryption_fields/missing_current_key_version_try.rb +23 -0
- data/try/features/encryption_fields/nonce_uniqueness_try.rb +56 -0
- data/try/features/encryption_fields/secure_by_default_behavior_try.rb +310 -0
- data/try/features/encryption_fields/thread_safety_try.rb +199 -0
- data/try/features/encryption_fields/universal_serialization_safety_try.rb +174 -0
- data/try/features/expiration_try.rb +0 -1
- data/try/features/feature_dependencies_try.rb +159 -0
- data/try/features/quantization_try.rb +0 -1
- data/try/features/real_feature_integration_try.rb +148 -0
- data/try/features/relatable_objects_try.rb +0 -1
- data/try/features/safe_dump_advanced_try.rb +0 -1
- data/try/features/safe_dump_try.rb +0 -1
- data/try/features/transient_fields/redacted_string_try.rb +248 -0
- data/try/features/transient_fields/refresh_reset_try.rb +164 -0
- data/try/features/transient_fields/simple_refresh_test.rb +50 -0
- data/try/features/transient_fields/single_use_redacted_string_try.rb +310 -0
- data/try/features/transient_fields_core_try.rb +181 -0
- data/try/features/transient_fields_integration_try.rb +260 -0
- data/try/helpers/test_helpers.rb +67 -0
- data/try/horreum/base_try.rb +157 -3
- data/try/horreum/enhanced_conflict_handling_try.rb +176 -0
- data/try/horreum/field_categories_try.rb +118 -0
- data/try/horreum/field_definition_try.rb +96 -0
- data/try/horreum/initialization_try.rb +1 -2
- data/try/horreum/relations_try.rb +1 -2
- data/try/horreum/serialization_persistent_fields_try.rb +165 -0
- data/try/horreum/serialization_try.rb +41 -7
- data/try/memory/memory_basic_test.rb +73 -0
- data/try/memory/memory_detailed_test.rb +121 -0
- data/try/memory/memory_docker_ruby_dump.sh +80 -0
- data/try/memory/memory_search_for_string.rb +83 -0
- data/try/memory/test_actual_redactedstring_protection.rb +38 -0
- data/try/models/customer_safe_dump_try.rb +1 -2
- data/try/models/customer_try.rb +1 -2
- data/try/models/datatype_base_try.rb +1 -2
- data/try/models/familia_object_try.rb +0 -1
- metadata +131 -23
- 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
|
-
#=>
|
48
|
+
#=> 1
|
50
49
|
|
51
50
|
## Safe dump includes correct active status when verified and not reset requested
|
52
51
|
@safe_dump[:active]
|
data/try/models/customer_try.rb
CHANGED
@@ -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
|
-
#=>
|
46
|
+
#=> 1
|
48
47
|
|
49
48
|
## Customer can add custom domain via add method
|
50
49
|
@customer.custom_domains.add(@now, 'example.org')
|
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.
|
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/
|
143
|
-
- lib/familia/
|
144
|
-
- lib/familia/
|
145
|
-
- lib/familia/
|
146
|
-
- lib/familia/
|
147
|
-
- lib/familia/
|
148
|
-
- lib/familia/
|
149
|
-
- lib/familia/
|
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/
|
158
|
-
- lib/familia/horreum/
|
159
|
-
- lib/familia/horreum/
|
160
|
-
- lib/familia/horreum/
|
161
|
-
- lib/familia/horreum/
|
162
|
-
- lib/familia/horreum/settings.rb
|
163
|
-
- lib/familia/horreum/
|
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/
|
185
|
-
- try/
|
186
|
-
- try/
|
187
|
-
- try/
|
188
|
-
- try/
|
189
|
-
- try/
|
190
|
-
- try/
|
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
|