SamSec007 commited on
Commit
e3d8566
·
verified ·
1 Parent(s): 7bb380b

v10 RICH model card: 11-stage pipeline walkthrough, full version history v2-v10, detailed step-by-step usage

Browse files
Files changed (1) hide show
  1. README.md +330 -66
README.md CHANGED
@@ -1,19 +1,41 @@
1
  ---
2
- language: en
 
3
  license: mit
4
  library_name: phishbyte
5
  pipeline_tag: text-classification
6
  tags:
7
  - phishing-detection
8
  - email-security
 
 
9
  - pytorch
10
  - from-scratch
11
  - no-pretrained-weights
12
  - cascading-inference
13
  - lightweight
14
  - explainable-ai
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  datasets:
16
- - CEAS-2008
 
 
 
 
 
17
  metrics:
18
  - f1
19
  - precision
@@ -26,102 +48,344 @@ model-index:
26
  type: text-classification
27
  name: Phishing Email Detection
28
  dataset:
29
- name: CEAS-2008
30
  type: ceas-2008
31
  metrics:
32
  - type: f1
33
- value: 0.948
 
34
  - type: accuracy
35
- value: 0.944
 
36
  - type: precision
37
- value: 0.954
 
38
  - type: recall
39
- value: 0.943
 
 
 
 
 
 
40
  ---
41
 
42
- # Phish_Byte
43
 
44
- A from-scratch PyTorch model for **email phishing detection**.
45
- **F1 0.948** on CEAS-2008. **12,545 parameters** (≈9,000× smaller than DistilBERT).
46
- **1,500+ emails/sec** on a laptop GPU. Every verdict explains itself.
47
 
48
- ## Why this exists
49
 
50
- Every phishing detection model on HuggingFace is currently a fine-tuned
51
- transformer (DistilBERT, BERT, RoBERTa) — 65 to 110 million parameters,
52
- ~250 MB on disk, ~50 ms per email on GPU. Phish_Byte takes a different
53
- bet: a small custom MLP trained from scratch, fed by 29 carefully chosen
54
- features, routed through a cascading inference pipeline. The model is
55
- **9,000× smaller** than DistilBERT, performs competitively, deploys
56
- without a GPU, and explains every decision.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
 
58
  ## Usage
59
 
 
 
60
  ```python
61
  from phishbyte import PhishByteEngine
62
 
63
- engine = PhishByteEngine.from_pretrained("AnonymousSingh-007/phishbyte")
 
 
 
64
  verdict = engine.analyze(raw_email_string)
65
 
66
- print(verdict.label) # 'phishing'
67
- print(verdict.probability) # 0.9735
68
- print(verdict.confidence) # 'high'
69
- print(verdict.layer_used) # 2 MLP made this call
70
- print(verdict.feature_weights) # full per-feature attribution
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  ```
72
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  ## Architecture
74
 
75
  ```
76
- Layer 1 — rule scorers (~1 ms): domain + URL + SPF + subject
77
-
78
- ├──► obvious phishing? short-circuit verdict
79
-
80
- └──► otherwise route to MLP
81
-
82
- Layer 2 — MLP (~3 ms): 29 → 96 → 48 → 1 (sigmoid)
83
-
84
-
85
- PhishVerdict {label, probability, confidence, layer_used, feature_weights}
86
- ```
87
-
88
- ## Performance (CEAS-2008, n=2000 held-out)
89
-
90
- | Metric | Value |
91
- |------------------|----------:|
92
- | F1 score | **0.948** |
93
- | Accuracy | 94.40% |
94
- | Precision | 0.9537 |
95
- | Recall | 0.9432 |
96
- | Parameters | 12,545 |
97
- | Model size | ~50 KB |
98
- | Throughput (GPU) | 1,527 /s |
99
- | Throughput (CPU) | ~800 /s |
100
-
101
- ## Features (29 inputs)
102
-
103
- - **Domain (5)**: From/Reply-To/Return-Path mismatch, freemail flag, brand impersonation
104
- - **URL (5)**: HTTPS ratio, anchor mismatch, suspicious TLD, urgency, link density
105
- - **SPF (3)**: SPF fail, no record, no sending IP
106
- - **Subject (7)**: urgency, security theme, brand name, currency, all caps, fake RE, fake transaction ID
107
- - **Character-level (5)**: caps ratio, digit ratio, special chars, avg word length, HTML/text ratio
108
- - **Composite (4)**: per-layer normalized scores
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
 
110
  ## Limitations
111
 
112
- - ~5% of decisions are wrong (F1 0.948, not 1.0). Use as one signal in defence-in-depth, not the only gate.
113
- - Trained on CEAS-2008 — English-language phishing from 2008. Modern attack patterns and non-English emails will degrade performance.
114
- - SPF validation is bypassed for training (historical domains don't resolve) but runs live at inference time.
115
- - Adversarial emails crafted specifically to game these features will get through.
 
 
 
 
116
 
117
  ## Citation
118
 
 
 
119
  ```bibtex
120
  @software{phishbyte2026,
121
- author = {Singh, Samratth},
122
- title = {Phish_Byte: A cascading from-scratch PyTorch model for email phishing detection},
123
- year = {2026},
124
- url = {https://github.com/AnonymousSingh-007/Phish_Byte}
125
  }
126
  ```
127
 
 
1
  ---
2
+ language:
3
+ - en
4
  license: mit
5
  library_name: phishbyte
6
  pipeline_tag: text-classification
7
  tags:
8
  - phishing-detection
9
  - email-security
10
+ - cybersecurity
11
+ - security
12
  - pytorch
13
  - from-scratch
14
  - no-pretrained-weights
15
  - cascading-inference
16
  - lightweight
17
  - explainable-ai
18
+ - nlp
19
+ - phishing
20
+ - spam-detection
21
+ - malware-detection
22
+ - threat-detection
23
+ - email-classification
24
+ - text-classification
25
+ - feature-engineering
26
+ - interpretable-ml
27
+ - tfidf
28
+ - residual-network
29
+ - context-gating
30
+ - calibrated-probabilities
31
+ - dmarc-alignment
32
  datasets:
33
+ - ceas-2008
34
+ - enron-email
35
+ - spamassassin
36
+ - ling-spam
37
+ - nazario-phishing
38
+ - nigerian-fraud
39
  metrics:
40
  - f1
41
  - precision
 
48
  type: text-classification
49
  name: Phishing Email Detection
50
  dataset:
51
+ name: 7-source benchmark (CEAS, Enron, SpamAssassin, Ling-Spam, Nazario, Nigerian, farshad72, puyang2025)
52
  type: ceas-2008
53
  metrics:
54
  - type: f1
55
+ value: 0.9445
56
+ name: F1 Score
57
  - type: accuracy
58
+ value: 0.9477
59
+ name: Accuracy
60
  - type: precision
61
+ value: 0.9402
62
+ name: Precision
63
  - type: recall
64
+ value: 0.9489
65
+ name: Recall
66
+ widget:
67
+ - text: "From: PayPal Security <security@paypa1-alert.tk>\nReply-To: attacker@evil-domain.ru\nSubject: URGENT: Your account will be suspended\n\nDear Customer, your PayPal account has been suspended. Verify now at http://paypal-login.tk/verify"
68
+ example_title: "Phishing email example"
69
+ - text: "From: alice@company.com\nReply-To: alice@company.com\nSubject: Team lunch tomorrow\n\nHi everyone, lunch is at noon in the usual spot. See you there!"
70
+ example_title: "Legitimate email example"
71
  ---
72
 
73
+ # Phish_Byte v10
74
 
75
+ A from-scratch PyTorch model for **email phishing detection** — no pretrained language model, no transformer, no fine-tuning.
 
 
76
 
77
+ **743,571 parameters.** Every signal is a feature computed directly from the email itself, fed through a **context-gating architecture** that learns how one piece of evidence should change the interpretation of another — rather than a fixed hand-written rule deciding that for it.
78
 
79
+ > The only non-transformer phishing detection model on HuggingFace.
80
+
81
+ ---
82
+
83
+ ## Table of contents
84
+
85
+ - [Install](#install--no-pypi-package-yet)
86
+ - [Usage](#usage)
87
+ - [How it works, stage by stage](#how-it-works-stage-by-stage)
88
+ - [Architecture](#architecture)
89
+ - [Version history](#version-history)
90
+ - [Feature groups](#feature-groups)
91
+ - [Training data](#training-data)
92
+ - [Benchmarks](#benchmarks)
93
+ - [Limitations](#limitations)
94
+
95
+ ---
96
+
97
+ ## Install — no PyPI package yet
98
+
99
+ `pip install phishbyte` does **not** work yet. The only supported path is cloning the source repository. Five steps, in order:
100
+
101
+ **Step 1 — Clone the repository**
102
+ ```bash
103
+ git clone https://github.com/AnonymousSingh-007/Phish_Byte.git
104
+ cd Phish_Byte
105
+ ```
106
+
107
+ **Step 2 — Create a virtual environment**
108
+ ```bash
109
+ python -m venv venv
110
+ ```
111
+
112
+ **Step 3 — Activate it**
113
+ ```bash
114
+ # Windows (PowerShell)
115
+ .\venv\Scripts\Activate.ps1
116
+
117
+ # Mac / Linux
118
+ source venv/bin/activate
119
+ ```
120
+
121
+ **Step 4 — Install dependencies**
122
+ ```bash
123
+ pip install -r requirements.txt
124
+ ```
125
+ Minimal set: `torch`, `huggingface_hub`, `safetensors`, `dnspython`, `numpy`, `pandas`.
126
+
127
+ For GPU acceleration on RTX 50-series (Blackwell) cards:
128
+ ```bash
129
+ pip install torch --index-url https://download.pytorch.org/whl/cu128
130
+ ```
131
+
132
+ **Step 5 — Verify the install**
133
+ ```bash
134
+ python verify_install.py
135
+ ```
136
+ This checks every Python package and every source file is present, then does a live test download of the model weights from this Hub repo. If anything is missing, it tells you exactly what — not a confusing traceback. Expected output when everything is correct:
137
+
138
+ ```
139
+ ✅ Python 3.11.x
140
+ ✅ torch
141
+ ✅ huggingface_hub
142
+ ✅ safetensors
143
+ ✅ dns
144
+ ✅ numpy
145
+ ✅ pandas
146
+ ✅ phishbyte/__init__.py
147
+ ... (all source files)
148
+ ✅ from phishbyte import PhishByteEngine — works
149
+ ✅ Model loaded from Hub successfully
150
+ ✅ INSTALLATION VERIFIED
151
+ ```
152
+
153
+ ---
154
 
155
  ## Usage
156
 
157
+ ### Basic usage — analyze any raw email
158
+
159
  ```python
160
  from phishbyte import PhishByteEngine
161
 
162
+ # First call downloads ~3 MB (weights + thresholds + vocabulary) from this
163
+ # Hub repo and caches it locally. Every call after is instant.
164
+ engine = PhishByteEngine.from_pretrained("SamSec007/phishbyte")
165
+
166
  verdict = engine.analyze(raw_email_string)
167
 
168
+ print(verdict.label) # "phishing" or "legitimate"
169
+ print(verdict.probability) # calibrated confidence, 0.0 to 1.0
170
+ print(verdict.confidence) # "high" / "medium" / "low"
171
+ print(verdict.layer_used) # 1 = a fast rule made the call, 2 = the full network did
172
+ print(verdict.feature_weights) # every signal computed for this specific email
173
+ ```
174
+
175
+ ### Analyze a real email from your own Gmail
176
+
177
+ **Step 1.** Open the suspicious email in Gmail.
178
+
179
+ **Step 2.** Click the **⋮** menu in the top right of the email, then click **Show original**. This opens a new tab with the complete raw email, including every header.
180
+
181
+ **Step 3.** Select all the text (Ctrl+A) and copy it (Ctrl+C).
182
+
183
+ **Step 4.** Run the CLI:
184
+ ```bash
185
+ python cli.py
186
+ ```
187
+
188
+ **Step 5.** Paste the email when prompted, then press Enter followed by Ctrl+Z on Windows (or Ctrl+D on Mac/Linux) to submit it.
189
+
190
+ ### Analyze a saved `.eml` file
191
+
192
+ ```bash
193
+ python cli.py --file suspicious.eml
194
+ ```
195
+
196
+ ### Quick demo — no files needed
197
+
198
+ ```bash
199
+ python cli.py --demo phish # a representative phishing example
200
+ python cli.py --demo legit # a representative legitimate example
201
+ ```
202
+
203
+ ### Reading the verdict object
204
+
205
+ ```python
206
+ PhishVerdict(
207
+ label = "phishing",
208
+ probability = 0.9735,
209
+ confidence = "high",
210
+ layer_used = 2,
211
+ feature_weights = {
212
+ "display_name_mismatch": 1.00, # "PayPal" in display name, unrelated domain
213
+ "mcld_mismatch": 1.00, # most-linked domain isn't the sender's
214
+ "auth_alignment_score": 0.95, # authentication does NOT validate this sender
215
+ "coercive_urgency_score": 0.82, # pressure language: "verify now", "suspended"
216
+ "professional_formality_score": 0.02, # essentially none — this isn't formal writing
217
+ ...
218
+ },
219
+ detail = "MLP probability (calibrated): 97.35%. Trust consistency: 0.10. Auth alignment: 0.95.",
220
+ )
221
  ```
222
 
223
+ ---
224
+
225
+ ## How it works, stage by stage
226
+
227
+ **Stage 1 — Parsing.** The raw email string is split into its headers (`From`, `Reply-To`, `Return-Path`, `Subject`, `Authentication-Results`) and its body, using Python's standard email parser. This handles both plain-text and HTML/multipart emails.
228
+
229
+ **Stage 2 — Domain analysis.** Checks whether the From, Reply-To, and Return-Path addresses are consistent with each other; whether the display name claims a known brand (like "PayPal Security") while the actual domain is unrelated; and whether the domain itself looks auto-generated, based on digit density, hyphen count, and length.
230
+
231
+ **Stage 3 — URL and body analysis.** Extracts every link in the email, checks whether visible link text matches where the link actually points, measures how many distinct destination domains the links spread across, and looks at structural characteristics of the body like unusual capitalization density.
232
+
233
+ **Stage 4 — Authentication validation (SPF, DKIM, DMARC).** Reads the `Authentication-Results` header that the receiving mail server already computed, extracting whether SPF passed, whether DKIM signed the message with a domain that matches the sender, and what DMARC — the policy that ties SPF and DKIM together — concluded. This is a live, structural check, not a keyword guess.
234
+
235
+ **Stage 5 — Subject line analysis.** The same kind of pattern-matching as the body, scoped to the subject: brand names, currency symbols, ALL-CAPS shouting, fake "RE:" prefixes designed to look like an ongoing conversation.
236
+
237
+ **Stage 6 — Link and form forensics.** Finds the single most common destination domain across every link in the email and compares it to the sender. Checks whether any form on the page submits directly to a raw IP address instead of a domain — legitimate sites essentially never do this. Detects "open redirect" URL patterns commonly used to disguise a final destination.
238
+
239
+ **Stage 7 — Lexical domain analysis.** A character-by-character look at domain names: does the domain have an unusual run of digits? Does it read like a real word or a randomly generated string? Is it a near-miss spelling of a known brand, once common digit-for-letter substitutions are normalized (`micros0ft` → `microsoft`)?
240
+
241
+ **Stage 8 — Cross-signal agreement check.** Looks at whether the independent modules above agree with each other. Three modules independently raising concern is much stronger evidence than one module alone.
242
+
243
+ **Stage 9 — Context feature computation.** This is where v10 diverges most from earlier versions. Urgency language in the body is split into two independent numbers — how *coercive* it is ("verify immediately or your account will be suspended") versus how *professionally formal* it is ("we kindly ask for your commitment to this important task") — because a single blended urgency score cannot tell these apart, and they mean very different things. A separate signal captures how strongly DMARC and DKIM validate the sender, independent of what the link-forensics stage found — so the network can weigh "the links go somewhere else" differently depending on whether the sender proved its identity or not. A similar context signal exists for Reply-To addresses that use free email providers like Gmail.
244
+
245
+ **Stage 10 — Fusion.** All the evidence from stages 2 through 9 is split into two groups — *raw evidence* (facts about this email) and *context evidence* (facts that should change how the raw evidence is read) — and handed to a small neural layer whose only job is learning a gate: for this particular email, how much should the context evidence turn up or down the weight given to each piece of raw evidence. This gate is learned from real data, not hardcoded.
246
+
247
+ **Stage 11 — Decision.** The fused representation, plus 50 word-frequency signals learned from the training corpus, feeds a residual neural network. Its output passes through a learned temperature parameter before being converted into a final probability, so that "80% confident" is empirically close to being right 80% of the time.
248
+
249
+ ---
250
+
251
  ## Architecture
252
 
253
  ```
254
+ raw email
255
+
256
+
257
+ parsing → domain / URL / auth (SPF+DKIM+DMARC) / subject / link-forensics / lexical
258
+
259
+
260
+ cross-signal agreement check
261
+
262
+
263
+ context feature computation
264
+ (coercive vs. professional urgency, auth-verified sender context,
265
+ freemail Reply-To context, observational tracking-pattern signal)
266
+
267
+ ├──────────────┬───────────────┐
268
+ ▼ ▼ │
269
+ RAW evidence CONTEXT evidence │
270
+ (38 numbers) (13 numbers) │
271
+ │ │ │
272
+ └──────┬───────┘ │
273
+ ▼ │
274
+ Context Fusion Layer │
275
+ (learns a gate: how much │
276
+ should context reweight │
277
+ each raw signal, per email) │
278
+ │ │
279
+ ▼ │
280
+ fused representation (64) ──────┘
281
+ │ TF-IDF (50)
282
+ └────┬────────┘
283
+
284
+ residual MLP: 620 310 (×2 residual blocks) 155 76 1
285
+
286
+
287
+ temperature-calibrated confidence score
288
+
289
+
290
+ PhishVerdict — label, confidence, and every signal that fired
291
+ ```
292
+
293
+ **743,571 parameters total.** For comparison, DistilBERT-based phishing detectors on HuggingFace use 66,000,000+ parameters — roughly 90× more.
294
+
295
+ ---
296
+
297
+ ## Version history
298
+
299
+ **v2 — 12,545 parameters, 29 features, single dataset (CEAS-2008, ~39K emails).** The original prototype. A small MLP over hand-picked domain, URL, and subject features, with a cascading Layer 1 (cheap rules) → Layer 2 (neural network) design that every later version kept.
300
+
301
+ **v7 — 254K parameters, 85 features, 83K emails across 6 datasets.** Added a TF-IDF vocabulary learned directly from the training corpus, and Body Domain Identification — checking the most common link destination against the sender. First version tested for generalization beyond a single dataset.
302
+
303
+ **v8 — 716K parameters, 104 features, 166K emails across 7 datasets.** Added character-level lexical domain analysis (digit runs, entropy, typosquat distance) and a cross-signal layer that checks whether independent modules agree with each other rather than scoring each one in isolation.
304
+
305
+ **v9 — 718K parameters, 107 features.** Replaced a naive SPF-only authentication check — which misfired constantly on legitimate marketing platforms like Marketo and Mailgun that relay mail on a brand's behalf — with a proper DMARC/DKIM alignment check that reads what the receiving mail server already validated.
306
+
307
+ **v10 (current) — 743,571 parameters, context-gated fusion architecture.** Split urgency detection into two independent signals — coercive pressure versus professional formality — that were previously conflated into a single blended number. Restructured the network so raw evidence and context evidence enter as separate inputs to a learned fusion layer, instead of being concatenated together and left for the network to disentangle unaided.
308
+
309
+ ---
310
+
311
+ ## Feature groups
312
+
313
+ | Group | Count | What it measures |
314
+ |-------|:-----:|-------------------|
315
+ | Domain (raw) | 7 | header consistency, brand impersonation, display-name spoofing |
316
+ | URL + body (raw) | 4 | link security, anchor/href mismatch, link density |
317
+ | SPF (raw) | 3 | basic sender authorization signal |
318
+ | Subject (raw) | 7 | brand mentions, currency, formatting, fake reply prefixes |
319
+ | Char-level (raw) | 5 | capitalization, digit density, HTML/text ratio |
320
+ | BDI (raw) | 5 | most-common-link-domain mismatch, IP-target forms, open redirects |
321
+ | Lexical — sender domain (raw) | 6 | digit runs, hyphen runs, entropy, typosquat distance |
322
+ | Coercive urgency (raw) | 1 | pressure/threat language, independent of formal tone |
323
+ | Auth-verified ESP context | 1 | how strongly DMARC/DKIM validate the sender |
324
+ | Professional formality (context) | 1 | formal/professional tone, independent of coercive urgency |
325
+ | Freemail Reply-To context | 2 | raw fact + how much authentication offsets it |
326
+ | Tracking pattern (observational) | 1 | structural resemblance to ESP tracking infrastructure — never used to exempt anything on its own |
327
+ | Cross-signal fusion (context) | 5 | agreement between independent modules |
328
+ | Auth alignment (context) | 3 | DMARC pass, DKIM alignment, composite score |
329
+ | TF-IDF | 50 | words learned directly from the training corpus |
330
+
331
+ **101 features total** (38 raw + 13 context + 50 TF-IDF).
332
+
333
+ ---
334
+
335
+ ## Training data
336
+
337
+ | Dataset | Source | Contribution |
338
+ |---------|--------|---------------|
339
+ | CEAS-2008 | Kaggle | ~39K emails, 2008-era phishing |
340
+ | Enron | Kaggle | ~29K emails, legitimate corporate correspondence |
341
+ | SpamAssassin | Kaggle | ~10K emails, mixed spam/legitimate |
342
+ | Nigerian Fraud | Kaggle | ~3.3K emails, advance-fee fraud |
343
+ | Nazario | Kaggle | ~1.5K emails, phishing corpus |
344
+ | Ling-Spam | Kaggle | ~2.8K emails |
345
+ | farshad72/spam_email | HuggingFace | 83K rows, includes modern notification-style legitimate email |
346
+ | puyang2025/seven-phishing-email-datasets | HuggingFace | 203K rows, unified 7-source corpus |
347
+ | **Combined, after deduplication** | — | **~166,000 emails, ~56% phishing / 44% legitimate** |
348
+
349
+ ---
350
+
351
+ ## Benchmarks
352
+
353
+ Evaluated on 12,000 held-out samples, self-reported.
354
+
355
+ | Metric | Value |
356
+ |--------|:-----:|
357
+ | F1 score | 0.9445 |
358
+ | Accuracy | 94.77% |
359
+ | Precision | 0.9402 |
360
+ | Recall | 0.9489 |
361
+ | Parameters | 743,571 |
362
+ | Model size on disk | ~3 MB |
363
+ | Throughput (GPU) | ~630 emails/sec |
364
+ | GPU required | No |
365
+
366
+ ---
367
 
368
  ## Limitations
369
 
370
+ Read this before deploying anywhere real.
371
+
372
+ - **Most training data predates 2010.** Modern phishing techniques OAuth abuse, QR code lures, redirect chains through legitimate cloud services — are underrepresented even after adding modern HuggingFace datasets.
373
+ - **False positives on legitimate marketing and notification email are reduced but not eliminated.** The context-gating architecture measurably helps here, but this remains an active area of work rather than a solved problem.
374
+ - **No adversarial robustness testing has been performed.** An attacker aware of the exact feature set could plausibly craft targeted bypasses. Use as one signal in a defence-in-depth stack, not a standalone gate.
375
+ - **Benchmark numbers are self-reported** on a held-out split of the training corpus, not independently verified or peer-reviewed.
376
+ - **Not production-hardened** — no retry logic, rate limiting, or async network handling.
377
+ - **English-language only.**
378
 
379
  ## Citation
380
 
381
+ No peer-reviewed paper exists yet. Until then, cite the repository directly:
382
+
383
  ```bibtex
384
  @software{phishbyte2026,
385
+ author = {Singh, Samratth},
386
+ title = {Phish_Byte: Context-gated fusion architecture for from-scratch email phishing detection},
387
+ year = {2026},
388
+ url = {https://github.com/AnonymousSingh-007/Phish_Byte}
389
  }
390
  ```
391