========================================================== KINGDOMS FORGE — TESTER BUILD SIGNING INFORMATION Package: mitdx.shaking.game ========================================================== This file contains EVERYTHING needed to verify, re-sign, or reproduce the signed APK for the tester build of "Kingdoms Forge". The keystore + credentials are bundled here because the project owner wants the tester build to be fully reproducible from this single file. For production releases, use a SEPARATE keystore stored only in GitHub Repository Secrets — see /docs/ANDROID_SIGNING_GUIDE.md ---------------------------------------------------------- 1. KEYSTORE CREDENTIALS ---------------------------------------------------------- Keystore file name: kingdoms_forge_release.jks Key alias: mitdx_game_key Keystore password: Kfx92_ShardBlade_2026 Key password: Kfx92_ShardBlade_2026 Key algorithm: RSA-2048 Signature algorithm: SHA384withRSA Validity: 10,000 days (≈ 27 years) Valid from: Mon Oct 05 01:26:30 UTC 2026 Valid until: Fri Feb 20 01:26:30 UTC 2054 Owner DN: CN=MITDX, OU=ShakingGame, O=MITDX, L=Tehran, C=IR ---------------------------------------------------------- 2. FINGERPRINTS (for Play Console / App signing verification) ---------------------------------------------------------- SHA-1: 64:F0:C2:F9:3B:6A:29:B9:2C:02:65:04:67:44:7A:4D:C8:FF:05:D8 SHA-256: 92:71:AE:8C:20:DC:5D:CB:84:58:79:2A:3C:02:20:35:4D:7A:71:90:6B:43:36:8E:77:C6:02:38:3F:4F:E3:EE ---------------------------------------------------------- 3. HOW TO RE-CREATE THE .jks FILE FROM THIS .txt ---------------------------------------------------------- The keystore file is included as a separate downloadable asset on the same GitHub Release (kingdoms_forge_release.jks). But for redundancy, its base64-encoded form is in section 5 below. To re-create the .jks from the base64: base64 -d keystore_base64.txt > kingdoms_forge_release.jks Then verify: keytool -list -keystore kingdoms_forge_release.jks \ -storepass Kfx92_ShardBlade_2026 \ -alias mitdx_game_key ---------------------------------------------------------- 4. HOW TO SIGN AN APK WITH THIS KEYSTORE ---------------------------------------------------------- Using apksigner (recommended): apksigner sign \ --ks kingdoms_forge_release.jks \ --ks-key-alias mitdx_game_key \ --ks-pass pass:Kfx92_ShardBlade_2026 \ --key-pass pass:Kfx92_ShardBlade_2026 \ --out app-release-signed.apk \ app-release-unsigned.apk Using Gradle (with env vars): KEYSTORE_PASSWORD=Kfx92_ShardBlade_2026 \ KEY_ALIAS=mitdx_game_key \ KEY_PASSWORD=Kfx92_ShardBlade_2026 \ ./gradlew :app:assembleRelease ---------------------------------------------------------- 5. KEYSTORE FILE BASE64 ---------------------------------------------------------- (Below is the entire keystore file, base64-encoded. Copy everything between the markers and decode it to re-create the .jks binary file.) -----BEGIN KEYSTORE BASE64----- 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 -----END KEYSTORE BASE64----- ---------------------------------------------------------- 6. DISCLAIMER ---------------------------------------------------------- This keystore is bundled with the tester build for convenience only. For production releases on Google Play, generate a SEPARATE keystore with different passwords and store it ONLY as a GitHub Repository Secret. Never commit a production keystore to a public repo or include its passwords in a downloadable asset. See /docs/ANDROID_SIGNING_GUIDE.md for the production-grade signing workflow.