diff --git a/docs/rules.md b/docs/rules.md
index 8ac1e46..b6d0f66 100644
--- a/docs/rules.md
+++ b/docs/rules.md
@@ -2,7 +2,7 @@
Auto-generated by `make docs`
-Total rules: 127
+Total rules: 135
| Name | ID | Description | Tags | Entropy |
|------|----|-----------|----|---------|
@@ -35,8 +35,10 @@ Total rules: 127
| [Clerk API Key](#ghost.clerk.1) | ghost.clerk.1 | Clerk API key. | api, clerk | 4.5 |
| [ClickHouse API Key](#ghost.clickhouse.1) | ghost.clickhouse.1 | ClickHouse API key. | api, clickhouse | 4.2 |
| [Cloudflare API Key](#ghost.cloudflare.1) | ghost.cloudflare.1 | Cloudflare API key. | api, cloudflare | 4.2 |
+| [Cloudinary API Key](#ghost.cloudinary.1) | ghost.cloudinary.1 | Cloudinary API Key variable declaration. | api, cloudinary | 4.5 |
| [Cohere API Key](#ghost.cohere.1) | ghost.cohere.1 | Cohere API key variable declaration. | api, cohere | 4.1 |
| [Confluent API Key](#ghost.confluent.1) | ghost.confluent.1 | Confluent API Key | api, confluent | 4.7 |
+| [Coze API Key](#ghost.coze.1) | ghost.coze.1 | Coze API Key | api, coze | 4.7 |
| [Crates.io API Key](#ghost.crates.1) | ghost.crates.1 | Crates.io API key. | api, crates | 3.8 |
| [Crew.ai PAT](#ghost.crewai.1) | ghost.crewai.1 | Crew AI PAT | api, crewai | 4.3 |
| [Crew.ai Auth Token](#ghost.crewai.2) | ghost.crewai.2 | Crew AI Enterprise Action Auth Token | api, crewai, auth, token | 3.5 |
@@ -49,6 +51,7 @@ Total rules: 127
| [Fastly API Key](#ghost.fastly.1) | ghost.fastly.1 | Fastly API key. | api, fastly | 4.2 |
| [Firecrawl API Key](#ghost.firecrawl.1) | ghost.firecrawl.1 | Firecrawl API key. | api, firecrawl | 3.1 |
| [Fly.io API Key](#ghost.flyio.1) | ghost.flyio.1 | Fly.io API key. | api, flyio | 5.5 |
+| [Framework Secret Key](#ghost.framework.1) | ghost.framework.1 | Framework Secret key variable declaration | api, framework, symfony, laravel, django, rails | 4.1 |
| [Generic Token](#ghost.generic.1) | ghost.generic.1 | Generic token variable declaration. | generic, token | 3.1 |
| [Generic Secret](#ghost.generic.2) | ghost.generic.2 | Generic secret variable declaration. | generic, secret | 3.1 |
| [Generic Password](#ghost.generic.3) | ghost.generic.3 | Generic password variable declaration. | generic, password | 3.5 |
@@ -94,6 +97,7 @@ Total rules: 127
| [OpenRouter API Key](#ghost.openrouter.1) | ghost.openrouter.1 | OpenRouter API Key | api, openrouter | 3.5 |
| [OpenWeather API Key](#ghost.openweather.1) | ghost.openweather.1 | OpenWeather API key variable declaration. | api, openweather | 3.5 |
| [Perplexity API Key](#ghost.perplexity.1) | ghost.perplexity.1 | Perplexity API key. | api, perplexity | 4.3 |
+| [Plaid API Key](#ghost.plaid.1) | ghost.plaid.1 | Plaid API Key variable declaration. | api, plaid | 3.5 |
| [PlanetScale API Key](#ghost.planetscale.1) | ghost.planetscale.1 | PlanetScale API key. | api, planetscale | 4.1 |
| [PostgreSQL Senstive Connection String](#ghost.postgres.1) | ghost.postgres.1 | PostgreSQL connection string with credentials. | api, postgres, postgresql | 4.1 |
| [PostHog Project Token](#ghost.posthog.1) | ghost.posthog.1 | PostHog Project Token | api, posthog, project | 4.5 |
@@ -103,6 +107,7 @@ Total rules: 127
| [PostHog OAuth Access Token](#ghost.posthog.5) | ghost.posthog.5 | PostHog OAuth Refresh Token | api, posthog, oauth | 4.5 |
| [Pulumi Access Token](#ghost.pulumi.1) | ghost.pulumi.1 | Pulumi access token. | api, pulumi | 3.3 |
| [PyPI API Key](#ghost.pypi.1) | ghost.pypi.1 | PyPI API key. | api, pypi | 4.5 |
+| [RapiAPI API Key](#ghost.rapidapi.1) | ghost.rapidapi.1 | RapidAPI API Key | api, rapidapi | 3.5 |
| [ReCaptcha API Key](#ghost.recaptcha.1) | ghost.recaptcha.1 | ReCaptcha API key variable declaration. | api, recaptcha | 3.5 |
| [Resend API Key](#ghost.resend.1) | ghost.resend.1 | Resend API key. | api, resend | 4.2 |
| [Salesforce App Consumer Secret](#ghost.salesforce.1) | ghost.salesforce.1 | Salesforce App Consumer Secret. | api, salesforce | 4.1 |
@@ -119,6 +124,7 @@ Total rules: 127
| [Slack Workflow Webhook Secret](#ghost.slack.7) | ghost.slack.7 | Slack workflow webhook secret. | api, slack | 4.1 |
| [Sourcegraph Legacy Token](#ghost.sourcegraph.1) | ghost.sourcegraph.1 | Sourcegraph legacy token. | api, sourcegraph | 4.1 |
| [Sourcegraph Workspace Token](#ghost.sourcegraph.2) | ghost.sourcegraph.2 | Sourcegraph workspace token. | api, sourcegraph | 3.5 |
+| [Spotify Access Token](#ghost.spotify.1) | ghost.spotify.1 | Spotify Access Token variable declaration. | api, spotify, token | 4.1 |
| [SSH Private Key](#ghost.ssh.1) | ghost.ssh.1 | Matches an SSH private key on a single line. | ssh, private, key | 5.1 |
| [SSH Private Key](#ghost.ssh.2) | ghost.ssh.2 | Matches the beginning of a multi-line SSH private key. | ssh, private, key | 2.1 |
| [Stability AI API Key](#ghost.stability.1) | ghost.stability.1 | Stability AI API key. | api, stability | 4.4 |
@@ -132,6 +138,8 @@ Total rules: 127
| [Travis Token](#ghost.travisci.1) | ghost.travisci.1 | Travis CI token. | api, travisci | 4.1 |
| [Twilio API Key](#ghost.twilio.1) | ghost.twilio.1 | Twilio API key or. | api, twilio, key | 4.1 |
| [Vercel API Key](#ghost.vercel.1) | ghost.vercel.1 | Vercel API key. | api, vercel | 4.1 |
+| [Weights & Biases API Key](#ghost.wandb.1) | ghost.wandb.1 | Weights & Biases API Key | api, wandb | 5.1 |
+| [Wireguard API Key](#ghost.wireguard.1) | ghost.wireguard.1 | Wireguard Private key variable declaration. | api, wireguard | 4.7 |
| [xAI API Key](#ghost.xai.1) | ghost.xai.1 | xAI API key. | xai, api | 4.8 |
## Rule Details
@@ -891,6 +899,35 @@ Total rules: 127
- assert_not: 1 cases
+
+### Cloudinary API Key
+
+**ID:** `ghost.cloudinary.1`
+
+**Description:** Cloudinary API Key variable declaration.
+
+**Tags:** api, cloudinary
+
+**Pattern:**
+```
+(?x)
+ \b
+ (
+ (?i)(?:cloudinary)\w*
+ [\W]{0,40}?
+ [A-Z0-9_-]{27}
+ )
+ \b
+
+```
+
+**Min entropy:** 4.5
+
+**Tests:**
+- assert: 4 cases
+- assert_not: 4 cases
+
+
### Cohere API Key
@@ -945,6 +982,31 @@ Total rules: 127
- assert_not: 4 cases
+
+### Coze API Key
+
+**ID:** `ghost.coze.1`
+
+**Description:** Coze API Key
+
+**Tags:** api, coze
+
+**Pattern:**
+```
+(?x)
+ \b
+ (pat_(?i)[A-Z0-9]{64})
+ \b
+
+```
+
+**Min entropy:** 4.7
+
+**Tests:**
+- assert: 2 cases
+- assert_not: 2 cases
+
+
### Crates.io API Key
@@ -1253,6 +1315,35 @@ Total rules: 127
- assert_not: 1 cases
+
+### Framework Secret Key
+
+**ID:** `ghost.framework.1`
+
+**Description:** Framework Secret key variable declaration
+
+**Tags:** api, framework, symfony, laravel, django, rails
+
+**Pattern:**
+```
+(?x)
+ \b
+ (
+ (?i)(?:APP_SECRET|APP_KEY|SECRET_KEY|SECRET_KEY_BASE)\w*
+ [\W]{0,40}?
+ [A-Z0-9]{32,}
+ )
+ \b
+
+```
+
+**Min entropy:** 4.1
+
+**Tests:**
+- assert: 4 cases
+- assert_not: 4 cases
+
+
### Generic Token
@@ -2436,6 +2527,35 @@ Total rules: 127
- assert_not: 2 cases
+
+### Plaid API Key
+
+**ID:** `ghost.plaid.1`
+
+**Description:** Plaid API Key variable declaration.
+
+**Tags:** api, plaid
+
+**Pattern:**
+```
+(?x)
+ \b
+ (
+ (?i)(?:plaid)\w*
+ [\W]{0,40}?
+ [A-F0-9]{30}
+ )
+ \b
+
+```
+
+**Min entropy:** 3.5
+
+**Tests:**
+- assert: 4 cases
+- assert_not: 4 cases
+
+
### PlanetScale API Key
@@ -2663,6 +2783,35 @@ Total rules: 127
- assert_not: 2 cases
+
+### RapiAPI API Key
+
+**ID:** `ghost.rapidapi.1`
+
+**Description:** RapidAPI API Key
+
+**Tags:** api, rapidapi
+
+**Pattern:**
+```
+(?x)
+ \b
+ (
+ (?i)(?:rapid)\w*
+ [\W]{0,40}?
+ [a-f0-9]{10}[a-z0-9]{40}
+ )
+ \b
+
+```
+
+**Min entropy:** 3.5
+
+**Tests:**
+- assert: 4 cases
+- assert_not: 3 cases
+
+
### ReCaptcha API Key
@@ -3099,6 +3248,35 @@ Total rules: 127
- assert_not: 1 cases
+
+### Spotify Access Token
+
+**ID:** `ghost.spotify.1`
+
+**Description:** Spotify Access Token variable declaration.
+
+**Tags:** api, spotify, token
+
+**Pattern:**
+```
+(?x)
+ \b
+ (
+ (?i)(?:spotify)\w*
+ [\W]{0,40}?
+ [A-Z0-9]{44}
+ )
+ \b
+
+```
+
+**Min entropy:** 4.1
+
+**Tests:**
+- assert: 3 cases
+- assert_not: 4 cases
+
+
### SSH Private Key
@@ -3436,6 +3614,60 @@ Total rules: 127
- assert_not: 2 cases
+
+### Weights & Biases API Key
+
+**ID:** `ghost.wandb.1`
+
+**Description:** Weights & Biases API Key
+
+**Tags:** api, wandb
+
+**Pattern:**
+```
+(?x)
+ \b
+ (wandb_v1_(?i)[A-Z0-9]{27}_[A-Z0-9]{49})
+ \b
+
+```
+
+**Min entropy:** 5.1
+
+**Tests:**
+- assert: 3 cases
+- assert_not: 3 cases
+
+
+
+### Wireguard API Key
+
+**ID:** `ghost.wireguard.1`
+
+**Description:** Wireguard Private key variable declaration.
+
+**Tags:** api, wireguard
+
+**Pattern:**
+```
+(?x)
+ \b
+ (
+ (?:PrivateKey)\w*
+ [\W]{0,40}?
+ (?i)[A-Z0-9]{43}
+ )
+ \b
+
+```
+
+**Min entropy:** 4.7
+
+**Tests:**
+- assert: 2 cases
+- assert_not: 3 cases
+
+
### xAI API Key
diff --git a/pkg/rules/cloudinary.yaml b/pkg/rules/cloudinary.yaml
new file mode 100644
index 0000000..8a5a793
--- /dev/null
+++ b/pkg/rules/cloudinary.yaml
@@ -0,0 +1,33 @@
+rules:
+ - name: Cloudinary API Key
+ id: ghost.cloudinary.1
+ description: Cloudinary API Key variable declaration.
+ tags:
+ - api
+ - cloudinary
+ pattern: |
+ (?x)
+ \b
+ (
+ (?i)(?:cloudinary)\w*
+ [\W]{0,40}?
+ [A-Z0-9_-]{27}
+ )
+ \b
+ redact: [12, 4]
+ entropy: 4.5
+ tests:
+ assert:
+ - let cloudinary=LVr_i_vaatAbxdQ28o-jLOxprMM
+ - CLOUDINARY_SECRET=k2WmPZmFUSoybYvmz9THXXJRpHc
+ - CLOUDINARY_SECRET=XEQ7PdwGInfoYRAmUIcGIhTjlJU
+ - CLOUDINARY_SECRET=_2pvZlfWP2nKqqndkhzpj9dNgso
+ assert_not:
+ - let cloudinary=LVr_i_vaatAbxdQ28o-jLOxprMMM
+ - CLOUDINARY_SECRET=k2WmPZmFUSoybYvmz9THXXJRpH
+ - CLOUDINARY_SECRET=XEQ7%dwGInfoYRAmUIcGIhTjlJU
+ - CLOUDINARY_SECRET=2pvZlfWP2nKqqndkhzpj9dNgso
+ history:
+ - 2026-03-25 initial version
+ refs:
+ - https://cloudinary.com/documentation/cloudinary_references
diff --git a/pkg/rules/coze.yaml b/pkg/rules/coze.yaml
new file mode 100644
index 0000000..849a133
--- /dev/null
+++ b/pkg/rules/coze.yaml
@@ -0,0 +1,25 @@
+rules:
+ - name: Coze API Key
+ id: ghost.coze.1
+ description: Coze API Key
+ tags:
+ - api
+ - coze
+ pattern: |
+ (?x)
+ \b
+ (pat_(?i)[A-Z0-9]{64})
+ \b
+ entropy: 4.7
+ redact: [7, 4]
+ tests:
+ assert:
+ - pat_dcQ8TSQWiH8lFXj261kF37DClSEWuWNPIXLRxHwpXz705XxvLhXohWcJSpRe1SlW
+ - pat_i5LCLq2AiiT0FN32FOdUGxFkQOMxNF7a5SwcsZHIckfOgOurRuxIy9IrJ8SVYgkd
+ assert_not:
+ - pat_dcQ8TSQWiH8lFXj261kF37DClSEWuWNPIXLRxHwpXz705XxvLhXohWcJSpRe1SlWx
+ - pat_i5LCLq2AiiT0FN32FOdUGxFkQOMxNF7a5SwcsZHIckfOgOurRuxIy9IrJ8SVYgk
+ history:
+ - 2026-03-25 initial version
+ refs:
+ - https://www.coze.com/open/docs/developer_guides
diff --git a/pkg/rules/framework.yaml b/pkg/rules/framework.yaml
new file mode 100644
index 0000000..ad09f8a
--- /dev/null
+++ b/pkg/rules/framework.yaml
@@ -0,0 +1,37 @@
+rules:
+ - name: Framework Secret Key
+ id: ghost.framework.1
+ description: Framework Secret key variable declaration
+ tags:
+ - api
+ - framework
+ - symfony
+ - laravel
+ - django
+ - rails
+ pattern: |
+ (?x)
+ \b
+ (
+ (?i)(?:APP_SECRET|APP_KEY|SECRET_KEY|SECRET_KEY_BASE)\w*
+ [\W]{0,40}?
+ [A-Z0-9]{32,}
+ )
+ \b
+ redact: [12, 4]
+ entropy: 4.1
+ tests:
+ assert:
+ - "APP_SECRET=95ba3265e4fc9e04b25a4ebe37626490"
+ - "APP_KEY=szJiK1fy6FaEedPWSw8e41kAXTbtArCX5ks7wQP3"
+ - "SECRET_KEY=fVst85KDGHJxfjrXtSJGjwQ27W92ORERq4bV6Ais"
+ - "SECRET_KEY_BASE=0903415147f1253f3cc0d000aab41d9fbfbc037d6acd893f3f27d8a98373d8e9"
+ assert_not:
+ - 9MbXxamGfTkx2cfasR7oUUzylk14gqTAK9GMlSDuX
+ - 9MbXxamGfTkx2cfasR7oUUzylk14gqTAK9GMlSD
+ - 9MbXxamGfTkx2cfasR7o-Uzylk14gqTAK9GMlSD
+ - 0903415147f1253f3cc0d000aab41d9fbfbc037d6acd893f3f27d8a98373d8e9
+ history:
+ - 2026-03-25 initial version
+ refs:
+ - https://github.com/trufflesecurity/trufflehog/issues/4687
diff --git a/pkg/rules/plaid.yaml b/pkg/rules/plaid.yaml
new file mode 100644
index 0000000..f244b3f
--- /dev/null
+++ b/pkg/rules/plaid.yaml
@@ -0,0 +1,33 @@
+rules:
+ - name: Plaid API Key
+ id: ghost.plaid.1
+ description: Plaid API Key variable declaration.
+ tags:
+ - api
+ - plaid
+ pattern: |
+ (?x)
+ \b
+ (
+ (?i)(?:plaid)\w*
+ [\W]{0,40}?
+ [A-F0-9]{30}
+ )
+ \b
+ redact: [12, 4]
+ entropy: 3.5
+ tests:
+ assert:
+ - let plaid=1bbf4a686175a7075d569ac77db0bf
+ - PLAID_TOKEN=0d94363d99e52c7ed023d2fdfddcf2
+ - PLAID_ACCESS_TOKEN=06342265952033fb07aa018bcd64e3
+ - PLAID_ACCESS_TOKEN=4a5dfbe6f4f9091242abb1840d3af1
+ assert_not:
+ - let plaid=4a22734a2c7847809d017640f267bba7x
+ - PLAID_TOKEN=4b9bfc03ffed40f7b4acc97ac60c5b3
+ - PLAID_TOKEN=N2MxMDZjN2FlY2Y5MTVkNWQwOWU5NmM0M2QxODVlY2UKx
+ - PLAID_TOKEN=N2MxMDZjN2FlY2Y5MTVkNWQwOWU5NmM0M2QxODVlY2U
+ history:
+ - 2026-03-25 initial version
+ refs:
+ - https://plaid.com/docs/api/
diff --git a/pkg/rules/rapidapi.yaml b/pkg/rules/rapidapi.yaml
new file mode 100644
index 0000000..5dcbe29
--- /dev/null
+++ b/pkg/rules/rapidapi.yaml
@@ -0,0 +1,33 @@
+rules:
+ - name: RapiAPI API Key
+ id: ghost.rapidapi.1
+ description: RapidAPI API Key
+ tags:
+ - api
+ - rapidapi
+ pattern: |
+ (?x)
+ \b
+ (
+ (?i)(?:rapid)\w*
+ [\W]{0,40}?
+ [a-f0-9]{10}[a-z0-9]{40}
+ )
+ \b
+ entropy: 3.5
+ redact: [14, 4]
+ tests:
+ assert:
+ - RAPIDAPI_KEY=969fcbc7b0gho47dbffee523e95ap197d50jsn9752cc4adcb3
+ - RAPID=b3481a1310ghoc937b2cb9770de9p178c21jsn306be784b131
+ - RAPIDAPI=e524dea763ghoa5b5b87e948db5ap193acejsnf75124eecb24
+ - RAPID_KEY=e4ca2f9861gho0928229e749f352p1515b5jsnb0868000af6f
+ assert_not:
+ - RAPID_KEY=969fcbc7b0gho47dbffee523e95ap197d50jsn9752cc4adcb3x
+ - RAPID_KEY=969fcbc7b0gho47dbffee523e95ap197d50jsn9752cc4adcb
+ - RAPID_KEY=969fcbc7b0gho47dbffee523e95ap197d50js-9752cc4adcb3
+ history:
+ - 2026-03-25 initial version
+ refs:
+ - https://docs.rapidapi.com/docs/keys-and-key-rotation
+ - https://docs.rapidapi.com/docs/configuring-api-security
diff --git a/pkg/rules/spotify.yaml b/pkg/rules/spotify.yaml
new file mode 100644
index 0000000..a8846ab
--- /dev/null
+++ b/pkg/rules/spotify.yaml
@@ -0,0 +1,33 @@
+rules:
+ - name: Spotify Access Token
+ id: ghost.spotify.1
+ description: Spotify Access Token variable declaration.
+ tags:
+ - api
+ - spotify
+ - token
+ pattern: |
+ (?x)
+ \b
+ (
+ (?i)(?:spotify)\w*
+ [\W]{0,40}?
+ [A-Z0-9]{44}
+ )
+ \b
+ redact: [12, 4]
+ entropy: 4.1
+ tests:
+ assert:
+ - let spotify=NjgxNjViYzI1MGIyNGE4OGI3NTNmNDVlZjI2Y2U5NWYK
+ - SPOTIFY_TOKEN=MWY4YTA4NGI1NzU5OTFmMTdlNzVjYjZmZGNhZDRiYWQK
+ - SPOTIFY_ACCESS_TOKEN=ZDI4YTA2ZDRlZGQwMzE0YjNiNzM4NWI5ODExNzZmMGEK
+ assert_not:
+ - let spotify=4a22734a2c7847809d017640f267bba7x
+ - SPOTIFY_TOKEN=4b9bfc03ffed40f7b4acc97ac60c5b3
+ - SPOTIFY_TOKEN=N2MxMDZjN2FlY2Y5MTVkNWQwOWU5NmM0M2QxODVlY2UKx
+ - SPOTIFY_TOKEN=N2MxMDZjN2FlY2Y5MTVkNWQwOWU5NmM0M2QxODVlY2U
+ history:
+ - 2026-03-25 initial version
+ refs:
+ - https://developer.spotify.com/documentation/web-api/concepts/access-token
diff --git a/pkg/rules/wandb.yaml b/pkg/rules/wandb.yaml
new file mode 100644
index 0000000..14df6e2
--- /dev/null
+++ b/pkg/rules/wandb.yaml
@@ -0,0 +1,27 @@
+rules:
+ - name: Weights & Biases API Key
+ id: ghost.wandb.1
+ description: Weights & Biases API Key
+ tags:
+ - api
+ - wandb
+ pattern: |
+ (?x)
+ \b
+ (wandb_v1_(?i)[A-Z0-9]{27}_[A-Z0-9]{49})
+ \b
+ entropy: 5.1
+ redact: [12, 4]
+ tests:
+ assert:
+ - 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
+ - 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
+ - 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
+ assert_not:
+ - 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
+ - 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
+ - wandb_v2_8tlnrKSJbYWbWNIeDtb2JZCjVNB_KyJvO7GvXtZCroa1HVs9fuVNUkByWvSOPxTwfqeYKEZ2rejbK
+ history:
+ - 2026-03-25 initial version
+ refs:
+ - https://docs.wandb.ai/support/models/articles/how-do-i-find-my-api-key
diff --git a/pkg/rules/wireguard.yaml b/pkg/rules/wireguard.yaml
new file mode 100644
index 0000000..8573046
--- /dev/null
+++ b/pkg/rules/wireguard.yaml
@@ -0,0 +1,30 @@
+rules:
+ - name: Wireguard API Key
+ id: ghost.wireguard.1
+ description: Wireguard Private key variable declaration.
+ tags:
+ - api
+ - wireguard
+ pattern: |
+ (?x)
+ \b
+ (
+ (?:PrivateKey)\w*
+ [\W]{0,40}?
+ (?i)[A-Z0-9]{43}
+ )
+ \b
+ redact: [16, 4]
+ entropy: 4.7
+ tests:
+ assert:
+ - PrivateKey = aTrSVNtdex4QRqTMENnkwdIAzPUxQTXJO852vBVlmAk
+ - PrivateKey=aTrSVNtdex4QRqTMENnkwdIAzPUxQTXJO852vBVlmAk
+ assert_not:
+ - PrivateKey=aTrSVNtdex4QRqTMENnkwdIAzPUxQTXJO852vBVlmA
+ - PrivateKey=aTrSVNtdex4QRqTMENnkwdIAzPUxQTXJO852vBVlmAkx
+ - PrivateKey=aTrSVNtdex4QRqTMENnkw-IAzPUxQTXJO852vBVlmAk
+ history:
+ - 2026-03-23 initial version
+ refs:
+ - https://www.wireguard.com/quickstart/