devendra-skill-package 1.0.2
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.
- package/.github/skills/boiler-project-generator/SKILL.md +103 -0
- package/.github/skills/boiler-project-generator/assets/templates/android/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/angular/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/flutter/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/ios/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/api-setup.ts +76 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/component-primary-button.tsx +29 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/env-config.env +4 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-auth-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-dashboard-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-profile-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/hook-use-app-boot.ts +11 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/navigation-setup.tsx +25 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/project-structure.md +24 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-hooks.ts +5 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-session-slice.ts +29 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-store.ts +15 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/theme-index.ts +23 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/utils-helpers.ts +7 -0
- package/.github/skills/boiler-project-generator/metadata.yaml +29 -0
- package/.github/skills/boiler-project-generator/references/android.md +19 -0
- package/.github/skills/boiler-project-generator/references/angular.md +14 -0
- package/.github/skills/boiler-project-generator/references/flutter.md +17 -0
- package/.github/skills/boiler-project-generator/references/ios.md +17 -0
- package/.github/skills/boiler-project-generator/references/react-native.md +103 -0
- package/.github/skills/boiler-project-generator/references/react.md +17 -0
- package/.github/skills/boiler-project-generator/scripts/angular.js +43 -0
- package/.github/skills/boiler-project-generator/scripts/generate-project.mjs +107 -0
- package/.github/skills/boiler-project-generator/scripts/init.js +105 -0
- package/.github/skills/boiler-project-generator/scripts/react-native.js +1041 -0
- package/.github/skills/boiler-project-generator/scripts/react.js +32 -0
- package/.github/skills/clean-architecture-generator/SKILL.md +235 -0
- package/.github/skills/clean-architecture-generator/references/architecture-core.md +126 -0
- package/.github/skills/clean-architecture-generator/references/platform-angular.md +374 -0
- package/.github/skills/clean-architecture-generator/references/platform-flutter.md +366 -0
- package/.github/skills/clean-architecture-generator/references/platform-react-native.md +590 -0
- package/.github/skills/clean-architecture-generator/references/platform-react.md +261 -0
- package/.github/skills/code-test-coverage-analyzer/SKILL.md +1358 -0
- package/.github/skills/code-test-coverage-analyzer/assets/config-questionnaire.md +118 -0
- package/.github/skills/code-test-coverage-analyzer/assets/conflict-resolution-protocol.md +99 -0
- package/.github/skills/code-test-coverage-analyzer/assets/coverage-calculation-rules.md +294 -0
- package/.github/skills/code-test-coverage-analyzer/assets/multi-strategy-search.md +145 -0
- package/.github/skills/code-test-coverage-analyzer/assets/output-file-contracts.md +651 -0
- package/.github/skills/code-test-coverage-analyzer/assets/status-definitions.md +273 -0
- package/.github/skills/code-test-coverage-analyzer/examples/example-invocation.md +208 -0
- package/.github/skills/code-test-coverage-analyzer/references/android-patterns.md +229 -0
- package/.github/skills/code-test-coverage-analyzer/references/angular-patterns.md +177 -0
- package/.github/skills/code-test-coverage-analyzer/references/backend-patterns.md +383 -0
- package/.github/skills/code-test-coverage-analyzer/references/flutter-patterns.md +254 -0
- package/.github/skills/code-test-coverage-analyzer/references/ios-patterns.md +228 -0
- package/.github/skills/code-test-coverage-analyzer/references/react-native-patterns.md +431 -0
- package/.github/skills/code-test-coverage-analyzer/references/react-patterns.md +206 -0
- package/.github/skills/code-test-coverage-analyzer/scripts/detect-platform.ps1 +261 -0
- package/.github/skills/code-test-coverage-analyzer/scripts/scan-repository.ps1 +242 -0
- package/.github/skills/code-test-coverage-analyzer/templates/brd-compliance-row.md +107 -0
- package/.github/skills/code-test-coverage-analyzer/templates/test-case-row.md +130 -0
- package/.github/skills/code-test-coverage-analyzer/templates/user-story-compliance-row.md +170 -0
- package/.github/skills/custom-font-integrator/SKILL.md +373 -0
- package/.github/skills/custom-font-integrator/assets/FontTestScreen.js +150 -0
- package/.github/skills/custom-font-integrator/references/example-info-plist.xml +21 -0
- package/.github/skills/custom-font-integrator/scripts/setup-fonts.sh +99 -0
- package/.github/skills/encryption-decryption-utility/Instructions.md +282 -0
- package/.github/skills/encryption-decryption-utility/README.md +222 -0
- package/.github/skills/encryption-decryption-utility/SKILL.md +645 -0
- package/.github/skills/encryption-decryption-utility/assets/encryption-config-template.json +13 -0
- package/.github/skills/encryption-decryption-utility/assets/platform-matrix.json +180 -0
- package/.github/skills/encryption-decryption-utility/metadata.yaml +51 -0
- package/.github/skills/encryption-decryption-utility/references/android-crypto.md +157 -0
- package/.github/skills/encryption-decryption-utility/references/angular-crypto.md +130 -0
- package/.github/skills/encryption-decryption-utility/references/approach-1-webcrypto.md +95 -0
- package/.github/skills/encryption-decryption-utility/references/approach-2-rsa-aes-cbc.md +111 -0
- package/.github/skills/encryption-decryption-utility/references/approach-3-aes-sharedkey.md +114 -0
- package/.github/skills/encryption-decryption-utility/references/architecture.md +233 -0
- package/.github/skills/encryption-decryption-utility/references/backend-alignment.md +506 -0
- package/.github/skills/encryption-decryption-utility/references/dependency-guidance.md +234 -0
- package/.github/skills/encryption-decryption-utility/references/ec-implementation.md +832 -0
- package/.github/skills/encryption-decryption-utility/references/error-handling-playbook.md +234 -0
- package/.github/skills/encryption-decryption-utility/references/flutter-crypto.md +105 -0
- package/.github/skills/encryption-decryption-utility/references/ios-crypto.md +338 -0
- package/.github/skills/encryption-decryption-utility/references/native-rsa-implementation.md +373 -0
- package/.github/skills/encryption-decryption-utility/references/node-crypto.md +86 -0
- package/.github/skills/encryption-decryption-utility/references/react-crypto.md +105 -0
- package/.github/skills/encryption-decryption-utility/references/react-native-crypto.md +1001 -0
- package/.github/skills/encryption-decryption-utility/references/react-web-crypto.md +668 -0
- package/.github/skills/encryption-decryption-utility/references/security-checklist.md +176 -0
- package/.github/skills/encryption-decryption-utility/references/web-crypto.md +74 -0
- package/.github/skills/encryption-decryption-utility/scripts/detect.js +128 -0
- package/.github/skills/encryption-decryption-utility/scripts/install.js +1713 -0
- package/.github/skills/encryption-decryption-utility/scripts/setup.js +800 -0
- package/.github/skills/encryption-decryption-utility/template.md +241 -0
- package/.github/skills/encryption-decryption-utility/templates/config-questionnaire.md +467 -0
- package/.github/skills/encryption-decryption-utility/templates/delivery-checklist.md +206 -0
- package/.github/skills/encryption-decryption-utility/templates/implementation-plan.md +304 -0
- package/.github/skills/feature-generator/SKILL.MD +2741 -0
- package/.github/skills/feature-generator/assets/fingerprint-schema.json +385 -0
- package/.github/skills/feature-generator/assets/spec-template.md +172 -0
- package/.github/skills/feature-generator/assets/transform-rules.json +82 -0
- package/.github/skills/feature-generator/references/api-envelope-patterns.md +327 -0
- package/.github/skills/feature-generator/references/screen-logic-patterns.md +399 -0
- package/.github/skills/feature-generator/references/state-library-patterns.md +464 -0
- package/.github/skills/figma-ui-mapper/README.md +34 -0
- package/.github/skills/figma-ui-mapper/SKILL.md +101 -0
- package/.github/skills/figma-ui-mapper/assets/templates/component-map-template.md +30 -0
- package/.github/skills/figma-ui-mapper/assets/templates/generation-report-template.md +49 -0
- package/.github/skills/figma-ui-mapper/metadata.yaml +22 -0
- package/.github/skills/figma-ui-mapper/references/android.md +11 -0
- package/.github/skills/figma-ui-mapper/references/angular.md +18 -0
- package/.github/skills/figma-ui-mapper/references/capacitor.md +18 -0
- package/.github/skills/figma-ui-mapper/references/common.md +23 -0
- package/.github/skills/figma-ui-mapper/references/expo.md +18 -0
- package/.github/skills/figma-ui-mapper/references/flutter.md +18 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/angular/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/capacitor/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/expo/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/flutter/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/ionic/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/kotlin-multiplatform/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/native-android/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/native-ios/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/next/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/nuxt/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/react/rules.md +19 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/react-native/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/svelte/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/vue/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/ionic.md +18 -0
- package/.github/skills/figma-ui-mapper/references/ios.md +11 -0
- package/.github/skills/figma-ui-mapper/references/kotlin-multiplatform.md +18 -0
- package/.github/skills/figma-ui-mapper/references/native-android.md +18 -0
- package/.github/skills/figma-ui-mapper/references/native-ios.md +18 -0
- package/.github/skills/figma-ui-mapper/references/next.md +18 -0
- package/.github/skills/figma-ui-mapper/references/nuxt.md +18 -0
- package/.github/skills/figma-ui-mapper/references/react-figma-guideline.md +21 -0
- package/.github/skills/figma-ui-mapper/references/react-native.md +18 -0
- package/.github/skills/figma-ui-mapper/references/react.md +18 -0
- package/.github/skills/figma-ui-mapper/references/script-usage.md +46 -0
- package/.github/skills/figma-ui-mapper/references/svelte.md +18 -0
- package/.github/skills/figma-ui-mapper/references/vue.md +18 -0
- package/.github/skills/figma-ui-mapper/references/workflow.md +74 -0
- package/.github/skills/figma-ui-mapper/scripts/generate-page-through-figma.js +635 -0
- package/.github/skills/figma-ui-mapper/scripts/generate-react-page-through-figma.js +4 -0
- package/.github/skills/frontend-task-breakdown/SKILL.md +734 -0
- package/.github/skills/md-file-converter/SKILL.md +291 -0
- package/.github/skills/md-file-converter/config/formats.json +114 -0
- package/.github/skills/md-file-converter/extractors/extract-docx.sh +120 -0
- package/.github/skills/md-file-converter/extractors/extract-eml.py +108 -0
- package/.github/skills/md-file-converter/extractors/extract-pdf.sh +97 -0
- package/.github/skills/md-file-converter/extractors/extract-pptx.py +143 -0
- package/.github/skills/md-file-converter/extractors/extract-xlsx.py +175 -0
- package/.github/skills/md-file-converter/scripts/check-tools.sh +47 -0
- package/.github/skills/md-file-converter/scripts/extract-archive.sh +83 -0
- package/.github/skills/md-file-converter/scripts/extract-ocr.sh +77 -0
- package/.github/skills/md-file-converter/scripts/get-metadata.sh +57 -0
- package/.github/skills/md-file-converter/templates/output.md +73 -0
- package/.github/skills/md-file-converter/templates/unsupported-object.md +6 -0
- package/.github/skills/mockAPI-contract-generator/SKILL.md +607 -0
- package/.github/skills/test-case-validator/CHANGELOG.md +155 -0
- package/.github/skills/test-case-validator/CONFIGURATION.md +130 -0
- package/.github/skills/test-case-validator/EXAMPLES.md +50 -0
- package/.github/skills/test-case-validator/QUALITY_SCORING.md +98 -0
- package/.github/skills/test-case-validator/README.md +111 -0
- package/.github/skills/test-case-validator/REPORT_TEMPLATE.md +116 -0
- package/.github/skills/test-case-validator/SKILL.md +209 -0
- package/.github/skills/test-case-validator/SYSTEM_PROMPT.md +127 -0
- package/.github/skills/test-case-validator/TRACEABILITY_ENGINE.md +152 -0
- package/.github/skills/test-case-validator/VALIDATION_RULES.md +411 -0
- package/.github/skills/test-case-validator/config/default.config.yaml +62 -0
- package/.github/skills/test-case-validator/docs/ARCHITECTURE.md +66 -0
- package/.github/skills/test-case-validator/docs/EXTENDING.md +85 -0
- package/.github/skills/test-case-validator/docs/FAQ.md +88 -0
- package/.github/skills/test-case-validator/docs/VERSIONING.md +55 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-brd.md +43 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-test-cases.csv +9 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-user-story.md +29 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/output-report.md +303 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-spec.md +43 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-test-files-index.md +56 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/output-report.md +274 -0
- package/.github/skills/test-case-validator/prompts/00-applicability-resolution.md +61 -0
- package/.github/skills/test-case-validator/prompts/01-extraction-user-story.md +58 -0
- package/.github/skills/test-case-validator/prompts/02-extraction-brd.md +64 -0
- package/.github/skills/test-case-validator/prompts/03-extraction-test-cases.md +92 -0
- package/.github/skills/test-case-validator/prompts/04-traceability-matrix.md +41 -0
- package/.github/skills/test-case-validator/prompts/05-coverage-analysis.md +46 -0
- package/.github/skills/test-case-validator/prompts/06-missing-scenario-detection.md +32 -0
- package/.github/skills/test-case-validator/prompts/07-duplicate-detection.md +36 -0
- package/.github/skills/test-case-validator/prompts/08-risk-analysis.md +39 -0
- package/.github/skills/test-case-validator/prompts/09-gated-wiring-validation.md +53 -0
- package/.github/skills/test-case-validator/prompts/10-observation-report.md +56 -0
- package/.github/skills/test-case-validator/prompts/11-final-report-assembly.md +57 -0
- package/.github/skills/test-case-validator/templates/coverage-table.md +25 -0
- package/.github/skills/test-case-validator/templates/executive-summary.md +38 -0
- package/.github/skills/test-case-validator/templates/final-summary-block.md +87 -0
- package/.github/skills/test-case-validator/templates/observation-entry.md +41 -0
- package/.github/skills/test-case-validator/templates/rtm-row.md +25 -0
- package/.github/skills/validation-engine-builder/README.md +50 -0
- package/.github/skills/validation-engine-builder/SKILL.md +241 -0
- package/.github/skills/validation-engine-builder/references/core.md +158 -0
- package/.github/skills/validation-engine-builder/references/platform-angular.md +166 -0
- package/.github/skills/validation-engine-builder/references/platform-flutter.md +118 -0
- package/.github/skills/validation-engine-builder/references/platform-react-native.md +170 -0
- package/.github/skills/validation-engine-builder/references/platform-react.md +94 -0
- package/.github/skills/validation-engine-builder/scripts/apply-to-project.js +80 -0
- package/.github/skills/validation-engine-builder/scripts/generate-angular.js +271 -0
- package/.github/skills/validation-engine-builder/scripts/generate-flutter.js +298 -0
- package/.github/skills/validation-engine-builder/scripts/generate-react-native.js +217 -0
- package/.github/skills/validation-engine-builder/scripts/generate-react.js +163 -0
- package/.github/skills/validation-engine-builder/scripts/install-deps.js +53 -0
- package/.github/skills/validation-engine-builder/scripts/shared/detect-platform.js +68 -0
- package/.github/skills/validation-engine-builder/scripts/shared/npm-deps.js +103 -0
- package/.github/skills/validation-engine-builder/scripts/shared/rhf-hook.js +43 -0
- package/.github/skills/validation-engine-builder/scripts/shared/ts-messages-regex.js +62 -0
- package/.github/skills/validation-engine-builder/scripts/shared/util.js +44 -0
- package/.github/skills/validation-engine-builder/scripts/shared/yup-schemas.js +80 -0
- package/.github/skills/validation-engine-builder/template.md +73 -0
- package/.github/skills/validation-engine-builder/templates/messages.json +22 -0
- package/.github/skills/validation-engine-builder/templates/regex.json +16 -0
- package/.github/skills/validation-engine-builder/templates/schemas.json +48 -0
- package/bin/index.js +145 -0
- package/package.json +22 -0
- package/readme.md +0 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
# Implementation Plan
|
|
2
|
+
|
|
3
|
+
Fill out before writing any files. Use after questionnaire completion and validation.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Encryption Model + Layer Selected
|
|
8
|
+
|
|
9
|
+
### React Native (approaches 4/5/6)
|
|
10
|
+
- [ ] RSA + React Native JS (approach 4)
|
|
11
|
+
- [ ] RSA + Native (approach 5)
|
|
12
|
+
- [ ] EC + React Native JS, per-request (approach 6)
|
|
13
|
+
- [ ] EC + React Native JS, session-init (approach 6)
|
|
14
|
+
- [ ] EC + Native (approach 6 + native layer)
|
|
15
|
+
|
|
16
|
+
### React JS Web (approach 7)
|
|
17
|
+
- [ ] RSA-OAEP mode (approach 7, default)
|
|
18
|
+
- [ ] ECDH-Session mode (approach 7, sub-mode)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Confirmed Configuration
|
|
23
|
+
|
|
24
|
+
- Platform:
|
|
25
|
+
- Approach:
|
|
26
|
+
- Detection mode (replace / reuse / refactor):
|
|
27
|
+
- Encryption model (rsa / ec):
|
|
28
|
+
- EC contract type (per-request / session-init):
|
|
29
|
+
- RSA key source (api / env):
|
|
30
|
+
- RSA key endpoint:
|
|
31
|
+
- EC key endpoint:
|
|
32
|
+
- EC HKDF info string (session-init only — backend-confirmed, NO default):
|
|
33
|
+
- EC nonce format/length (session-init only — backend-confirmed, NO default):
|
|
34
|
+
- EC AAD shape (session-init only — backend-confirmed, NO default):
|
|
35
|
+
- EC response IV source (session-init only — backend-confirmed, NO default):
|
|
36
|
+
- Shared key length (approach 3 only):
|
|
37
|
+
- API client type (axios / fetch / custom):
|
|
38
|
+
- API layer path:
|
|
39
|
+
- Encryption toggle (env-flag / always-on):
|
|
40
|
+
- HMAC signing enabled (yes / no):
|
|
41
|
+
- URL exclusions:
|
|
42
|
+
- [React Native approach 5] Minimum iOS version:
|
|
43
|
+
- [React Native approach 5] Android Kotlin package:
|
|
44
|
+
- [Approach 7] Web encryption mode (rsa-oaep / ecdh-session):
|
|
45
|
+
- [Approach 7] Framework/bundler (vite / cra / nextjs):
|
|
46
|
+
- [Approach 7] Env prefix (VITE_ / REACT_APP_ / NEXT_PUBLIC_):
|
|
47
|
+
- [Approach 7] Token storage (session-storage / http-only-cookie):
|
|
48
|
+
- [Approach 7] RSA key endpoint (RSA-OAEP mode):
|
|
49
|
+
- [Approach 7] ECDH session init URL (ECDH-Session mode — no default):
|
|
50
|
+
- [Approach 7] ECDH HKDF info string (ECDH-Session mode — no default):
|
|
51
|
+
- [Approach 7] ECDH AAD shape (ECDH-Session mode — no default if required):
|
|
52
|
+
- [Approach 7] Deployment origin confirmed HTTPS or localhost:
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Project Discovery
|
|
57
|
+
|
|
58
|
+
- React Native version (if RN):
|
|
59
|
+
- Existing API client file:
|
|
60
|
+
- Existing interceptor location (if any):
|
|
61
|
+
- Existing config/env module:
|
|
62
|
+
- Existing token storage service:
|
|
63
|
+
- App startup / init file:
|
|
64
|
+
- [Native mode] Android native modules folder (`android/app/src/main/java/...`):
|
|
65
|
+
- [Native mode] iOS native modules folder (`ios/`):
|
|
66
|
+
- [Angular] NgModule or standalone (check for `app.module.ts`):
|
|
67
|
+
- [Approach 7] `tsconfig.json` lib includes `"DOM"`: yes / no / patch needed:
|
|
68
|
+
- [Approach 7] `axios` present in package.json: yes / no:
|
|
69
|
+
- [Approach 7] Existing `axiosInstance.ts` location (extend, do not replace):
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Dependency Plan
|
|
74
|
+
|
|
75
|
+
### React Native JS Mode (Approaches 2, 3, 4)
|
|
76
|
+
|
|
77
|
+
- react-native-quick-crypto version:
|
|
78
|
+
- buffer package version (>= 6.0.0):
|
|
79
|
+
- react-native-quick-base64 present (auto-installed — verify with `npm ls react-native-quick-base64`):
|
|
80
|
+
- react-native-keychain version:
|
|
81
|
+
- react-native-get-random-values version:
|
|
82
|
+
- jsencrypt version (approach 2 only):
|
|
83
|
+
- crypto-js version (approaches 2, 3):
|
|
84
|
+
- Already installed (skip):
|
|
85
|
+
- Needs install:
|
|
86
|
+
|
|
87
|
+
### React Native Native Mode (Approach 5)
|
|
88
|
+
|
|
89
|
+
- All of JS mode packages plus:
|
|
90
|
+
- react-native-aes-crypto version (if not using NativeCryptoModule):
|
|
91
|
+
- react-native-rsa-native version (if not using NativeCryptoModule):
|
|
92
|
+
- Android `minSdkVersion >= 23` verified: yes / no
|
|
93
|
+
- iOS deployment target `>= 13.0` verified: yes / no / CommonCrypto fallback planned
|
|
94
|
+
|
|
95
|
+
### React Native EC Mode (Approach 6)
|
|
96
|
+
|
|
97
|
+
- react-native-quick-crypto version:
|
|
98
|
+
- react-native-nitro-modules version (REQUIRED peer dep — quick-crypto >= 1.0 / RN >= 0.76):
|
|
99
|
+
- react-native-worklets version (REQUIRED peer dep — quick-crypto >= 1.0 / RN >= 0.76):
|
|
100
|
+
- buffer package version (>= 6.0.0, used for Hermes-safe helpers):
|
|
101
|
+
- react-native-keychain version:
|
|
102
|
+
- react-native-get-random-values version:
|
|
103
|
+
- `npm ls react-native-nitro-modules` — UNMET PEER DEP present: yes / no
|
|
104
|
+
- Android .cxx cache cleared: yes / no
|
|
105
|
+
- iOS pod install completed: yes / no
|
|
106
|
+
|
|
107
|
+
### React JS Web Production Mode (Approach 7)
|
|
108
|
+
|
|
109
|
+
- No crypto packages required (Web Crypto API is built-in)
|
|
110
|
+
- `axios` present: yes / no (install if missing)
|
|
111
|
+
- Do NOT install: `crypto-js`, `node-forge`, Buffer polyfill, any `react-native-*` package
|
|
112
|
+
- Package manager: npm
|
|
113
|
+
|
|
114
|
+
### Other Platforms
|
|
115
|
+
|
|
116
|
+
- Package manager (npm / yarn / pnpm / gradle / pub):
|
|
117
|
+
- Packages to install:
|
|
118
|
+
- Packages already present:
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Files to Write
|
|
123
|
+
|
|
124
|
+
### All Platforms
|
|
125
|
+
|
|
126
|
+
| File | Path | Status (new / skip / scaffold) |
|
|
127
|
+
|------|------|-------------------------------|
|
|
128
|
+
| Config | | |
|
|
129
|
+
| Service | | |
|
|
130
|
+
| Interceptor / Middleware | | |
|
|
131
|
+
| Module wiring | | |
|
|
132
|
+
|
|
133
|
+
### React Native Approaches 4 and 5 (additional)
|
|
134
|
+
|
|
135
|
+
| File | Path | Status |
|
|
136
|
+
|------|------|--------|
|
|
137
|
+
| types.ts | src/services/security/types.ts | |
|
|
138
|
+
| encryption.service.ts | src/services/security/encryption.service.ts | |
|
|
139
|
+
| decryption.service.ts | src/services/security/decryption.service.ts | |
|
|
140
|
+
| rsa-key.service.ts | src/services/security/rsa-key.service.ts | |
|
|
141
|
+
| keychain.service.ts | src/services/security/keychain.service.ts | |
|
|
142
|
+
| hmac.service.ts | src/services/security/hmac.service.ts | |
|
|
143
|
+
| encryption-config.ts | src/services/security/encryption-config.ts | |
|
|
144
|
+
| encryption.interceptor.ts | src/services/security/encryption.interceptor.ts | |
|
|
145
|
+
| axiosInstance.ts | src/api/axiosInstance.ts | |
|
|
146
|
+
| index.js polyfill | index.js (prepend) | |
|
|
147
|
+
|
|
148
|
+
### Native Mode (Approach 5) Additional
|
|
149
|
+
|
|
150
|
+
| File | Path | Status |
|
|
151
|
+
|------|------|--------|
|
|
152
|
+
| NativeCryptoModule.kt | android/app/src/main/java/…/NativeCryptoModule.kt | |
|
|
153
|
+
| NativeCryptoPackage.kt | android/app/src/main/java/…/NativeCryptoPackage.kt | |
|
|
154
|
+
| NativeCryptoModule.swift | ios/NativeCryptoModule.swift | |
|
|
155
|
+
| NativeCryptoModule.m | ios/NativeCryptoModule.m | |
|
|
156
|
+
| native-crypto.module.ts | src/services/security/native-crypto.module.ts | |
|
|
157
|
+
|
|
158
|
+
### EC Mode (Approach 6) — JS or Native Layer
|
|
159
|
+
|
|
160
|
+
| File | Path | Status |
|
|
161
|
+
|------|------|--------|
|
|
162
|
+
| types.ts (EC additions) | src/services/security/types.ts | |
|
|
163
|
+
| ec-key.service.ts | src/services/security/ec-key.service.ts | |
|
|
164
|
+
| ec-crypto.util.ts | src/services/security/ec-crypto.util.ts | |
|
|
165
|
+
| keychain.service.ts | src/services/security/keychain.service.ts | |
|
|
166
|
+
| hmac.service.ts | src/services/security/hmac.service.ts | |
|
|
167
|
+
| encryption-config.ts | src/services/security/encryption-config.ts | |
|
|
168
|
+
| encryption.interceptor.ts | src/services/security/encryption.interceptor.ts | |
|
|
169
|
+
| axiosInstance.ts | src/api/axiosInstance.ts | |
|
|
170
|
+
| index.js polyfill | index.js (prepend) | |
|
|
171
|
+
|
|
172
|
+
### EC Session-Init Additional Files
|
|
173
|
+
|
|
174
|
+
| File | Path | Status |
|
|
175
|
+
|------|------|--------|
|
|
176
|
+
| auth-api.service.ts | src/services/security/auth-api.service.ts | |
|
|
177
|
+
|
|
178
|
+
### React JS Web Production Mode (Approach 7) — RSA-OAEP Mode
|
|
179
|
+
|
|
180
|
+
| File | Path | Status |
|
|
181
|
+
|------|------|--------|
|
|
182
|
+
| crypto-utils.ts | src/services/security/crypto-utils.ts | |
|
|
183
|
+
| aes.service.ts | src/services/security/aes.service.ts | |
|
|
184
|
+
| rsa.service.ts | src/services/security/rsa.service.ts | |
|
|
185
|
+
| rsa-key.service.ts | src/services/security/rsa-key.service.ts | |
|
|
186
|
+
| hmac.service.ts | src/services/security/hmac.service.ts | |
|
|
187
|
+
| storage.service.ts | src/services/security/storage.service.ts | |
|
|
188
|
+
| encryption.interceptor.ts | src/services/security/encryption.interceptor.ts | |
|
|
189
|
+
| encryption-config.ts | src/services/security/encryption-config.ts | |
|
|
190
|
+
| types.ts | src/services/security/types.ts | |
|
|
191
|
+
| axiosInstance.ts (patch) | src/api/axiosInstance.ts | |
|
|
192
|
+
| .env.example | .env.example | |
|
|
193
|
+
|
|
194
|
+
### React JS Web Production Mode (Approach 7) — ECDH-Session Additional Files
|
|
195
|
+
|
|
196
|
+
| File | Path | Status |
|
|
197
|
+
|------|------|--------|
|
|
198
|
+
| base64url.ts | src/core/security/ecdh-session/base64url.ts | |
|
|
199
|
+
| aad.ts | src/core/security/ecdh-session/aad.ts | |
|
|
200
|
+
| ecdhSession.ts | src/core/security/ecdh-session/ecdhSession.ts | |
|
|
201
|
+
| aesGcm.ts | src/core/security/ecdh-session/aesGcm.ts | |
|
|
202
|
+
| ecdhSessionService.ts | src/core/security/ecdh-session/ecdhSessionService.ts | |
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Runtime Behaviour
|
|
207
|
+
|
|
208
|
+
- Methods encrypted: POST, PUT, PATCH (default)
|
|
209
|
+
- Methods skipped: GET, DELETE, FormData
|
|
210
|
+
- Request mapping strategy: `requestId (randomHex16) → { aesKey, iv }` in-memory Map
|
|
211
|
+
- Key refresh trigger: `KEY_ID_NOT_FOUND` (401) → invalidate cache → retry once
|
|
212
|
+
- Auth tag failure: trigger session reset / force logout
|
|
213
|
+
- Request map cleanup: immediately after response (success or failure)
|
|
214
|
+
- [Native mode] Native module availability check: at JS startup, before first encrypted request
|
|
215
|
+
- [Native mode] Behavior if NativeModules.NativeCryptoModule is undefined at runtime:
|
|
216
|
+
- [Approach 7] `crypto.subtle` availability check: at bootstrap, surface `ERR_CRYPTO_NOT_AVAILABLE` if undefined
|
|
217
|
+
- [Approach 7] Request key map type: `Map<string, { cryptoKey: CryptoKey; iv: Uint8Array }>`
|
|
218
|
+
- [Approach 7] Request ID generation: `crypto.randomUUID()`
|
|
219
|
+
- [Approach 7] `KEY_ID_NOT_FOUND` (401): refresh RSA key → retry exactly once (no loop)
|
|
220
|
+
- [Approach 7] `DOMException` on decryption: fail with `ERR_CRYPTO_REJECTED` — no fallback to plaintext
|
|
221
|
+
- [Approach 7 ECDH-Session] 401 response: `clearSession()` + `ERR_SESSION_EXPIRED`
|
|
222
|
+
- [Approach 7 ECDH-Session] DECRYPTION_FAILED / INVALID_PAYLOAD (400): `clearSession()` + `ERR_CRYPTO_REJECTED`
|
|
223
|
+
- [Approach 7 ECDH-Session] 500 responses: pass through without session invalidation
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Feature Flags
|
|
228
|
+
|
|
229
|
+
- `ENCRYPTION_ENABLED` source: env var (react-native-config or process.env)
|
|
230
|
+
- Default by environment: `false` in dev, `true` in staging/prod
|
|
231
|
+
- `ENCRYPTION_MODEL` source: env var; values: `rsa` / `ec` (default: `rsa`)
|
|
232
|
+
- [Native mode] `ENCRYPTION_LAYER` source: env var; values: `rn` / `native`
|
|
233
|
+
- `ENCRYPTION_HMAC_SECRET` source: env var at runtime; never written to disk
|
|
234
|
+
- [EC] `EC_PUBLIC_KEY_ENDPOINT` source: env var
|
|
235
|
+
- [EC] `EC_KEY_RETRY` source: env var; default `3`
|
|
236
|
+
- [Approach 7] `ENCRYPTION_ENABLED` prefix: `VITE_` / `REACT_APP_` / `NEXT_PUBLIC_` (framework-specific)
|
|
237
|
+
- [Approach 7] `RSA_PUBLIC_KEY_ENDPOINT` prefix: same framework prefix
|
|
238
|
+
- [Approach 7] `ENCRYPTION_HMAC_SECRET` prefix: same framework prefix; runtime only — never commit to source
|
|
239
|
+
- [Approach 7 ECDH-Session] `ECDH_SESSION_INIT_URL` prefix: same framework prefix
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Build Verification
|
|
244
|
+
|
|
245
|
+
- Build command (from `platform-matrix.json`):
|
|
246
|
+
- Max retries: 3
|
|
247
|
+
- Expected exit code: 0
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Testing Plan
|
|
252
|
+
|
|
253
|
+
### Both Modes
|
|
254
|
+
|
|
255
|
+
- Unit tests: EncryptionService encrypt/decrypt round-trip
|
|
256
|
+
- Integration tests: POST request encrypted end-to-end with real server
|
|
257
|
+
- Negative tests: tampered ciphertext → verify 400 DECRYPTION_FAILED; duplicate nonce → verify 400 INVALID_NONCE
|
|
258
|
+
- Concurrent request test: multiple in-flight requests with independent key maps
|
|
259
|
+
|
|
260
|
+
### Native Mode Only
|
|
261
|
+
|
|
262
|
+
- AES round-trip on physical Android device (API 23+)
|
|
263
|
+
- AES round-trip on physical iOS device (iOS 13+)
|
|
264
|
+
- `NativeModules.NativeCryptoModule` accessible from JS confirmed
|
|
265
|
+
- `encryptAES` + `decryptAES` + `encryptRSA` all return Promises and resolve correctly
|
|
266
|
+
|
|
267
|
+
### EC Mode (Approach 6)
|
|
268
|
+
|
|
269
|
+
- EC public key fetch returns 65-byte uncompressed P-256 point (first byte 0x04)
|
|
270
|
+
- `ecEncryptPayload` round-trip: encrypts and server decrypts successfully
|
|
271
|
+
- Ephemeral key pair confirmed discarded after `computeSecret()` (no key reference retained)
|
|
272
|
+
- Derived AES key confirmed NOT present in request envelope
|
|
273
|
+
- Only `ephemeral_public_key` (base64, 65 bytes) sent in envelope
|
|
274
|
+
- Hermes Buffer: `toBase64()` helper used instead of `Buffer.toString('base64')` — verified no mangled output
|
|
275
|
+
- `byteCopy()` used for Buffer slices passed to quick-crypto native code
|
|
276
|
+
- Dual Buffer imports compile without conflict
|
|
277
|
+
- [Session-init] HKDF info string matches backend contract exactly
|
|
278
|
+
- [Session-init] Nonce generator uses `randomBytes` — confirmed no `Math.random()` usage
|
|
279
|
+
- [Session-init] AAD JSON keys are alphabetically sorted before encryption
|
|
280
|
+
- [Session-init] `device_id` matches across init, HKDF derivation, AAD, and all encrypted requests
|
|
281
|
+
- [Session-init] `initEncryptionSession` validated against reference client output (if reference exists)
|
|
282
|
+
|
|
283
|
+
### React JS Web Production Mode (Approach 7)
|
|
284
|
+
|
|
285
|
+
- `crypto.subtle` available on target origin (HTTPS or localhost)
|
|
286
|
+
- `tsconfig.json` `"lib": ["DOM"]` confirmed — `crypto.subtle` TypeScript types resolve
|
|
287
|
+
- RSA-OAEP: `importKey('spki', ...)` succeeds (PEM headers stripped correctly)
|
|
288
|
+
- RSA-OAEP: `encryptRSAOAEP` returns Base64 ciphertext
|
|
289
|
+
- AES-GCM: round-trip encrypt/decrypt completes without `DOMException`
|
|
290
|
+
- Per-request AES key map: `Map<requestId, {cryptoKey, iv}>` — entry created on request, deleted on response (success and error)
|
|
291
|
+
- `KEY_ID_NOT_FOUND` (401): RSA key cache invalidated, retried exactly once — no retry loop
|
|
292
|
+
- Auth tag tamper: `DOMException` thrown, `ERR_CRYPTO_REJECTED` surfaced — no fallback to plaintext
|
|
293
|
+
- No `crypto-js`, `node-forge`, or Buffer polyfill imported
|
|
294
|
+
- `sessionStorage` used for non-token state; `localStorage` never used for sensitive data
|
|
295
|
+
- HMAC-SHA256 signs request (when enabled); no secret in source files
|
|
296
|
+
- [ECDH-Session] ECDH P-256 key pair generated via `crypto.subtle.generateKey`
|
|
297
|
+
- [ECDH-Session] Derived AES key is `extractable: false` — cannot be exported
|
|
298
|
+
- [ECDH-Session] ECDH private key stored as JWK in `sessionStorage` only; cleared on `clearSession()`
|
|
299
|
+
- [ECDH-Session] `deriveKey` uses native HKDF-SHA256 — no manual HMAC chain
|
|
300
|
+
- [ECDH-Session] AAD keys alphabetically sorted (template literal, not `JSON.stringify`)
|
|
301
|
+
- [ECDH-Session] 401 response → `clearSession()` + `ERR_SESSION_EXPIRED`
|
|
302
|
+
- [ECDH-Session] 400 DECRYPTION_FAILED → `clearSession()` + `ERR_CRYPTO_REJECTED`
|
|
303
|
+
- [ECDH-Session] `X-Request-ID`, `X-Nonce`, `X-Timestamp` headers on every request
|
|
304
|
+
- [ECDH-Session] `X-Timestamp` formatted as ISO 8601 UTC (`new Date().toISOString()`)
|