feat(mobile): verify pinned Android release APK identity before distribution
This commit is contained in:
1 parent
9a1d831d4b
commit
52f792f00f
3 files changed
+120
No files matched your search
@@ -0,0 +1,25 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import test from 'node:test'
|
||||
import { validateAndroidRelease } from '../scripts/verify-android-release.mjs'
|
||||
|
||||
const certificate = 'a'.repeat(64)
|
||||
const fixture = {
|
||||
certificate, version: '0.1.4-beta.1', versionCode: 6,
|
||||
signature: `Verified using v2 scheme (APK Signature Scheme v2): true\nSigner #1 certificate DN: CN=AITURK Release\nSigner #1 certificate SHA-256 digest: ${certificate}\n`,
|
||||
badging: "package: name='online.turkservis.aiturk.mobile' versionCode='6' versionName='0.1.4-beta.1'\n",
|
||||
}
|
||||
|
||||
test('APK release identity requires a pinned certificate and exact version', () => {
|
||||
assert.equal(validateAndroidRelease(fixture).certificateSha256, certificate)
|
||||
assert.throws(() => validateAndroidRelease({ ...fixture, certificate: 'b'.repeat(64) }), /certificate-mismatch/)
|
||||
assert.throws(() => validateAndroidRelease({ ...fixture, versionCode: 7 }), /version-mismatch/)
|
||||
assert.throws(() => validateAndroidRelease({ ...fixture, version: '0.1.4-dev' }), /release-version-invalid/)
|
||||
})
|
||||
|
||||
test('debug and ambiguous APK identities are never release-ready', () => {
|
||||
assert.throws(() => validateAndroidRelease({ ...fixture, signature: fixture.signature.replace('AITURK Release', 'Android Debug') }), /debug-signing/)
|
||||
assert.throws(() => validateAndroidRelease({ ...fixture, badging: fixture.badging + 'application-debuggable\n' }), /debuggable-apk/)
|
||||
assert.throws(() => validateAndroidRelease({ ...fixture, badging: fixture.badging.replace('online.turkservis.aiturk.mobile', 'other.application') }), /application-id/)
|
||||
assert.throws(() => validateAndroidRelease({ ...fixture, signature: fixture.signature + `Signer #2 certificate SHA-256 digest: ${certificate}\n` }), /certificate-mismatch/)
|
||||
assert.throws(() => validateAndroidRelease({ ...fixture, signature: fixture.signature.replace(': true', ': false') }), /modern-apk-signature/)
|
||||
})
|
||||
Reference in new issue
Block a user