aboutsummaryrefslogtreecommitdiff
path: root/spike/settings/test-strings
diff options
context:
space:
mode:
authorcirakg <cirakg@cirakg.xyz>2026-10-25 12:46:42 +0100
committercirakg <cirakg@cirakg.xyz>2026-10-25 12:46:42 +0100
commite0384274bbeab999279bdc35bdddbd8a3a451aeb (patch)
tree206abf2390f6bd30d1ddbcc02717f1009b4cc659 /spike/settings/test-strings
parent6b17954f654d83c754cbdaae37f98689b9a4fcb7 (diff)
docs: record the settings spike and the Forerunner 70 benchmark
Spike (2026-10-21, Android): 8000 characters per field and 64,000 in total arrive; URIs with & save; the mixed special-character string is refused, so the test strings now split it into one group each plus a fake Aegis export. Benchmark: SHA-1 TOTP 18 ms, SHA-512 732 ms, PBKDF2 2,000 iterations per second. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'spike/settings/test-strings')
-rw-r--r--spike/settings/test-strings/aegis-json.txt5
-rw-r--r--spike/settings/test-strings/c-1-percent.txt5
-rw-r--r--spike/settings/test-strings/c-2-angle.txt5
-rw-r--r--spike/settings/test-strings/c-3-backslash.txt5
-rw-r--r--spike/settings/test-strings/c-4-quote.txt5
-rw-r--r--spike/settings/test-strings/c-5-braces.txt5
-rw-r--r--spike/settings/test-strings/c-6-latin.txt5
-rw-r--r--spike/settings/test-strings/c-7-emoji.txt5
-rw-r--r--spike/settings/test-strings/c-8-json.txt5
-rw-r--r--spike/settings/test-strings/index.html9
-rw-r--r--spike/settings/test-strings/make_test_strings.py24
11 files changed, 78 insertions, 0 deletions
diff --git a/spike/settings/test-strings/aegis-json.txt b/spike/settings/test-strings/aegis-json.txt
new file mode 100644
index 0000000..82b54f2
--- /dev/null
+++ b/spike/settings/test-strings/aegis-json.txt
@@ -0,0 +1,5 @@
+# Author: cirakg & claude ai
+# Summary: Settings spike test string: fake unencrypted Aegis export.
+# Copy ONLY the last line (the test string) into a settings field.
+
+{"version":1,"header":{"slots":null,"params":null},"db":{"version":3,"entries":[{"type":"totp","uuid":"00000000-0000-4000-8000-000000000001","name":"alice@example.com","issuer":"TestOne","note":"","icon":null,"info":{"secret":"JBSWY3DPEHPK3PXP","algo":"SHA1","digits":6,"period":30}}]}}
diff --git a/spike/settings/test-strings/c-1-percent.txt b/spike/settings/test-strings/c-1-percent.txt
new file mode 100644
index 0000000..b41a582
--- /dev/null
+++ b/spike/settings/test-strings/c-1-percent.txt
@@ -0,0 +1,5 @@
+# Author: cirakg & claude ai
+# Summary: Settings spike test string: C1: percent.
+# Copy ONLY the last line (the test string) into a settings field.
+
+C1 % 100% END
diff --git a/spike/settings/test-strings/c-2-angle.txt b/spike/settings/test-strings/c-2-angle.txt
new file mode 100644
index 0000000..3b55be6
--- /dev/null
+++ b/spike/settings/test-strings/c-2-angle.txt
@@ -0,0 +1,5 @@
+# Author: cirakg & claude ai
+# Summary: Settings spike test string: C2: angle brackets.
+# Copy ONLY the last line (the test string) into a settings field.
+
+C2 < > <b> END
diff --git a/spike/settings/test-strings/c-3-backslash.txt b/spike/settings/test-strings/c-3-backslash.txt
new file mode 100644
index 0000000..d1a2c06
--- /dev/null
+++ b/spike/settings/test-strings/c-3-backslash.txt
@@ -0,0 +1,5 @@
+# Author: cirakg & claude ai
+# Summary: Settings spike test string: C3: backslash.
+# Copy ONLY the last line (the test string) into a settings field.
+
+C3 \ a\/b END
diff --git a/spike/settings/test-strings/c-4-quote.txt b/spike/settings/test-strings/c-4-quote.txt
new file mode 100644
index 0000000..71c98df
--- /dev/null
+++ b/spike/settings/test-strings/c-4-quote.txt
@@ -0,0 +1,5 @@
+# Author: cirakg & claude ai
+# Summary: Settings spike test string: C4: double quote.
+# Copy ONLY the last line (the test string) into a settings field.
+
+C4 " "x" END
diff --git a/spike/settings/test-strings/c-5-braces.txt b/spike/settings/test-strings/c-5-braces.txt
new file mode 100644
index 0000000..e529fe8
--- /dev/null
+++ b/spike/settings/test-strings/c-5-braces.txt
@@ -0,0 +1,5 @@
+# Author: cirakg & claude ai
+# Summary: Settings spike test string: C5: braces.
+# Copy ONLY the last line (the test string) into a settings field.
+
+C5 { } {x} END
diff --git a/spike/settings/test-strings/c-6-latin.txt b/spike/settings/test-strings/c-6-latin.txt
new file mode 100644
index 0000000..d05e7bf
--- /dev/null
+++ b/spike/settings/test-strings/c-6-latin.txt
@@ -0,0 +1,5 @@
+# Author: cirakg & claude ai
+# Summary: Settings spike test string: C6: accented letters and euro sign.
+# Copy ONLY the last line (the test string) into a settings field.
+
+C6 äöü ß € END
diff --git a/spike/settings/test-strings/c-7-emoji.txt b/spike/settings/test-strings/c-7-emoji.txt
new file mode 100644
index 0000000..ea11b5b
--- /dev/null
+++ b/spike/settings/test-strings/c-7-emoji.txt
@@ -0,0 +1,5 @@
+# Author: cirakg & claude ai
+# Summary: Settings spike test string: C7: emoji.
+# Copy ONLY the last line (the test string) into a settings field.
+
+C7 😀 END
diff --git a/spike/settings/test-strings/c-8-json.txt b/spike/settings/test-strings/c-8-json.txt
new file mode 100644
index 0000000..b854a91
--- /dev/null
+++ b/spike/settings/test-strings/c-8-json.txt
@@ -0,0 +1,5 @@
+# Author: cirakg & claude ai
+# Summary: Settings spike test string: C8: JSON fragment.
+# Copy ONLY the last line (the test string) into a settings field.
+
+C8 {"name":"Fake","n":1} END
diff --git a/spike/settings/test-strings/index.html b/spike/settings/test-strings/index.html
index d330b52..243cc6b 100644
--- a/spike/settings/test-strings/index.html
+++ b/spike/settings/test-strings/index.html
@@ -18,6 +18,15 @@ button{font-size:1.1em;padding:6px 16px;margin:4px 0 16px}</style></head>
<section><h2>4000 characters</h2><textarea id="len-4000" readonly rows="3">N=4000|abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqP0050rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijP0100klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcP0150defghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvP0200wxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnoP0250pqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghP0300ijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzaP0350bcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstP0400uvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmP0450nopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefP0500ghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyP0550zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrP0600stuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkP0650lmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdP0700efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwP0750xyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopP0800qrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghiP0850jklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabP0900cdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuP0950vwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnP1000opqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefgP1050hijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzP1100abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrsP1150tuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklP1200mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdeP1250fghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxP1300yzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqP1350rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijP1400klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcP1450defghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvP1500wxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnoP1550pqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghP1600ijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzaP1650bcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstP1700uvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmP1750nopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefP1800ghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyP1850zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrP1900stuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkP1950lmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdP2000efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwP2050xyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopP2100qrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghiP2150jklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabP2200cdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuP2250vwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnP2300opqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefgP2350hijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzP2400abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrsP2450tuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklP2500mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdeP2550fghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxP2600yzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqP2650rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijP2700klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcP2750defghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvP2800wxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnoP2850pqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghP2900ijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzaP2950bcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstP3000uvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmP3050nopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefP3100ghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyP3150zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrP3200stuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkP3250lmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdP3300efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwP3350xyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopP3400qrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghiP3450jklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabP3500cdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuP3550vwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnP3600opqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefgP3650hijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzP3700abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrsP3750tuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklP3800mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdeP3850fghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxP3900yzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqP3950rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefgEND</textarea><button onclick="copyText('len-4000')">Copy</button></section>
<section><h2>8000 characters</h2><textarea id="len-8000" readonly rows="3">N=8000|abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqP0050rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijP0100klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcP0150defghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvP0200wxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnoP0250pqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghP0300ijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzaP0350bcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstP0400uvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmP0450nopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefP0500ghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyP0550zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrP0600stuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkP0650lmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdP0700efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwP0750xyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopP0800qrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghiP0850jklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabP0900cdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuP0950vwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnP1000opqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefgP1050hijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzP1100abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrsP1150tuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklP1200mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdeP1250fghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxP1300yzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqP1350rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijP1400klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcP1450defghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvP1500wxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnoP1550pqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghP1600ijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzaP1650bcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstP1700uvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmP1750nopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefP1800ghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyP1850zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrP1900stuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkP1950lmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdP2000efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwP2050xyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopP2100qrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghiP2150jklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabP2200cdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuP2250vwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnP2300opqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefgP2350hijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzP2400abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrsP2450tuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklP2500mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdeP2550fghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxP2600yzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqP2650rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijP2700klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcP2750defghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvP2800wxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnoP2850pqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghP2900ijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzaP2950bcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstP3000uvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmP3050nopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefP3100ghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyP3150zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrP3200stuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkP3250lmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdP3300efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwP3350xyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopP3400qrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghiP3450jklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabP3500cdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuP3550vwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnP3600opqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefgP3650hijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzP3700abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrsP3750tuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklP3800mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdeP3850fghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxP3900yzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqP3950rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijP4000klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcP4050defghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvP4100wxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnoP4150pqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghP4200ijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzaP4250bcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstP4300uvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmP4350nopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefP4400ghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyP4450zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrP4500stuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkP4550lmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdP4600efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwP4650xyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopP4700qrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghiP4750jklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabP4800cdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuP4850vwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnP4900opqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefgP4950hijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzP5000abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrsP5050tuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklP5100mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdeP5150fghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxP5200yzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqP5250rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijP5300klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcP5350defghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvP5400wxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnoP5450pqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghP5500ijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzaP5550bcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstP5600uvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmP5650nopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefP5700ghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyP5750zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrP5800stuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkP5850lmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdP5900efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwP5950xyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopP6000qrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghiP6050jklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabP6100cdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuP6150vwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnP6200opqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefgP6250hijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzP6300abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrsP6350tuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklP6400mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdeP6450fghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxP6500yzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqP6550rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijP6600klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcP6650defghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvP6700wxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnoP6750pqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghP6800ijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzaP6850bcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstP6900uvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmP6950nopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefP7000ghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyP7050zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrP7100stuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkP7150lmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdP7200efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwP7250xyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopP7300qrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghiP7350jklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabP7400cdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuP7450vwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnP7500opqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefgP7550hijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzP7600abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrsP7650tuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklP7700mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdeP7750fghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxP7800yzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqP7850rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijP7900klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcP7950defghijklmnopqrstuvwxyzabcdefghijklmnopqrsEND</textarea><button onclick="copyText('len-8000')">Copy</button></section>
<section><h2>special characters</h2><textarea id="special" readonly rows="3">special: &amp; &lt; &gt; \ &quot; { } % | non-ASCII: äöü ß € 😀 | otpauth://totp/Fake:alice?secret=JBSWY3DPEHPK3PXP&amp;issuer=Fake&amp;digits=6 | {&quot;name&quot;:&quot;Fake&quot;,&quot;path&quot;:&quot;a\/b&quot;} END</textarea><button onclick="copyText('special')">Copy</button></section>
+<section><h2>C1: percent</h2><textarea id="c-1-percent" readonly rows="3">C1 % 100% END</textarea><button onclick="copyText('c-1-percent')">Copy</button></section>
+<section><h2>C2: angle brackets</h2><textarea id="c-2-angle" readonly rows="3">C2 &lt; &gt; &lt;b&gt; END</textarea><button onclick="copyText('c-2-angle')">Copy</button></section>
+<section><h2>C3: backslash</h2><textarea id="c-3-backslash" readonly rows="3">C3 \ a\/b END</textarea><button onclick="copyText('c-3-backslash')">Copy</button></section>
+<section><h2>C4: double quote</h2><textarea id="c-4-quote" readonly rows="3">C4 &quot; &quot;x&quot; END</textarea><button onclick="copyText('c-4-quote')">Copy</button></section>
+<section><h2>C5: braces</h2><textarea id="c-5-braces" readonly rows="3">C5 { } {x} END</textarea><button onclick="copyText('c-5-braces')">Copy</button></section>
+<section><h2>C6: accented letters and euro sign</h2><textarea id="c-6-latin" readonly rows="3">C6 äöü ß € END</textarea><button onclick="copyText('c-6-latin')">Copy</button></section>
+<section><h2>C7: emoji</h2><textarea id="c-7-emoji" readonly rows="3">C7 😀 END</textarea><button onclick="copyText('c-7-emoji')">Copy</button></section>
+<section><h2>C8: JSON fragment</h2><textarea id="c-8-json" readonly rows="3">C8 {&quot;name&quot;:&quot;Fake&quot;,&quot;n&quot;:1} END</textarea><button onclick="copyText('c-8-json')">Copy</button></section>
+<section><h2>fake unencrypted Aegis export</h2><textarea id="aegis-json" readonly rows="3">{&quot;version&quot;:1,&quot;header&quot;:{&quot;slots&quot;:null,&quot;params&quot;:null},&quot;db&quot;:{&quot;version&quot;:3,&quot;entries&quot;:[{&quot;type&quot;:&quot;totp&quot;,&quot;uuid&quot;:&quot;00000000-0000-4000-8000-000000000001&quot;,&quot;name&quot;:&quot;alice@example.com&quot;,&quot;issuer&quot;:&quot;TestOne&quot;,&quot;note&quot;:&quot;&quot;,&quot;icon&quot;:null,&quot;info&quot;:{&quot;secret&quot;:&quot;JBSWY3DPEHPK3PXP&quot;,&quot;algo&quot;:&quot;SHA1&quot;,&quot;digits&quot;:6,&quot;period&quot;:30}}]}}</textarea><button onclick="copyText('aegis-json')">Copy</button></section>
<script>
function copyText(id) {
const area = document.getElementById(id);
diff --git a/spike/settings/test-strings/make_test_strings.py b/spike/settings/test-strings/make_test_strings.py
index 8d43977..9632220 100644
--- a/spike/settings/test-strings/make_test_strings.py
+++ b/spike/settings/test-strings/make_test_strings.py
@@ -14,6 +14,11 @@ used, so the length tests don't also test character handling.
special.txt holds the characters that may be rejected (& < > \\ " { } %),
non-ASCII text, a fake otpauth URI and a JSON fragment.
+The phone refused to save special.txt (spike run 2026-10-21), so the c-*.txt
+strings split it into one character group each, and aegis-json.txt is a
+complete fake unencrypted Aegis export: together they show which characters
+block saving and whether an Aegis file can be pasted at all.
+
Usage: python3 make_test_strings.py (writes into its own folder)
"""
@@ -28,6 +33,23 @@ SPECIAL = (
"otpauth://totp/Fake:alice?secret=JBSWY3DPEHPK3PXP&issuer=Fake&digits=6 | "
'{"name":"Fake","path":"a\\/b"} END'
)
+# Test C, split: (file name, label, string). Each ends with " END".
+SPLIT = (
+ ("c-1-percent", "C1: percent", "C1 % 100% END"),
+ ("c-2-angle", "C2: angle brackets", "C2 < > <b> END"),
+ ("c-3-backslash", "C3: backslash", "C3 \\ a\\/b END"),
+ ("c-4-quote", "C4: double quote", 'C4 " "x" END'),
+ ("c-5-braces", "C5: braces", "C5 { } {x} END"),
+ ("c-6-latin", "C6: accented letters and euro sign", "C6 äöü ß € END"),
+ ("c-7-emoji", "C7: emoji", "C7 😀 END"),
+ ("c-8-json", "C8: JSON fragment", 'C8 {"name":"Fake","n":1} END'),
+)
+AEGIS_JSON = (
+ '{"version":1,"header":{"slots":null,"params":null},"db":{"version":3,"entries":['
+ '{"type":"totp","uuid":"00000000-0000-4000-8000-000000000001","name":"alice@example.com",'
+ '"issuer":"TestOne","note":"","icon":null,"info":{"secret":"JBSWY3DPEHPK3PXP",'
+ '"algo":"SHA1","digits":6,"period":30}}]}}'
+)
HEADER = (
"# Author: cirakg & claude ai\n# Summary: {summary}\n"
"# Copy ONLY the last line (the test string) into a settings field.\n\n"
@@ -55,6 +77,8 @@ def main() -> None:
here = Path(__file__).resolve().parent
entries = [(f"len-{n:04d}", f"{n} characters", marker_string(n)) for n in LENGTHS]
entries.append(("special", "special characters", SPECIAL))
+ entries.extend(SPLIT)
+ entries.append(("aegis-json", "fake unencrypted Aegis export", AEGIS_JSON))
for name, label, value in entries:
(here / f"{name}.txt").write_text(HEADER.format(summary=f"Settings spike test string: {label}.") + value + "\n")
cards = "\n".join(