From 0879ae723a80f6ef5c4e533ef34be55eef8e5071 Mon Sep 17 00:00:00 2001 From: Aidan Date: Mon, 6 Jan 2025 23:18:53 -0500 Subject: [PATCH] add key attestation demo --- data/apps.json | 45 ++++++++++++++++++++++++++++++++++++++++ public/img/apps/key.png | Bin 0 -> 18467 bytes 2 files changed, 45 insertions(+) create mode 100644 public/img/apps/key.png diff --git a/data/apps.json b/data/apps.json index a972eef..18b3d44 100644 --- a/data/apps.json +++ b/data/apps.json @@ -775,5 +775,50 @@ }, "description": "Unleash memories, not personal data. Fossify Gallery is the ultimate photo and video app that's as powerful as it is private. No ads, no unnecessary permissions – just a seamless experience tailored for you.\n\n🖼️ PHOTO EDITING AT YOUR FINGERTIPS:\nEnhance your photos with our basic yet powerful photo editor. Crop, resize, rotate, flip, draw, and apply stunning filters, all without compromising your privacy. Take control of your memories like never before.\n\n🌐 PRIVACY FIRST, ALWAYS:Your privacy matters. Ditch the data-hungry giants. Fossify Gallery puts you in control. Strip away EXIF metadata like GPS coordinates and camera details, keeping your memories yours, and yours alone.\n\n🔒 SUPERIOR SECURITY:\nLock down your memories with pin, pattern, or fingerprint protection. Secure specific photos, videos, or the entire app – you decide who gets access. Peace of mind, guaranteed.\n\n🔄 RECOVER WITH EASE:\nBreathe easy, accidents happen! Fossify Gallery's built-in recycle bin lets you recover deleted photos and videos in seconds. No more lost treasures, just pure relief.\n\n🎨 YOUR GALLERY, YOUR STYLE:\nCustomize the look, feel, and functionality to match your style. From UI themes to function buttons, Fossify Gallery gives you the creative freedom you crave.\n\n📷 UNIVERSAL FORMAT FREEDOM:\nJPEG, JPEG XL, PNG, MP4, MKV, RAW, SVG, GIF, AVIF, videos, and more – we've got your memories covered, in any format you choose. No restrictions, just limitless possibilities.\n\n✨ MATERIAL DESIGN WITH DYNAMIC THEMES:\nExperience the beauty of intuitive material design with dynamic themes. Want more? Dive into custom themes and make your gallery truly unique.", "github": "https://github.com/FossifyOrg/Gallery" + }, + { + "id": "24", + "name": "Key Attestation Demo", + "icon": "/img/apps/key.png", + "foss": true, + "root": false, + "selfHosted": true, + "downloadLinks": { + "v1.6.0": { + "all": "https://p0ntus.com/archives/android/apps/KeyAttestationDemo.apk" + }, + "v1.5.0": { + "all": "https://github.com/vvb2060/KeyAttestation/releases/download/v1.5.0/KeyAttestation-v1.5.0.apk" + }, + "v1.4.1": { + "all": "https://github.com/vvb2060/KeyAttestation/releases/download/v1.4.1/KeyAttestation-v1.4.1.apk" + }, + "v1.4.0": { + "all": "https://github.com/vvb2060/KeyAttestation/releases/download/v1.4.0/KeyAttestation-v1.4.0.apk" + }, + "v1.3.4": { + "all": "https://github.com/vvb2060/KeyAttestation/releases/download/v1.3.4/KeyAttestation-v1.3.4.apk" + }, + "v1.3.3": { + "all": "https://github.com/vvb2060/KeyAttestation/releases/download/v1.3.3/KeyAttestation-v1.3.3.apk" + }, + "v1.3.2": { + "all": "https://github.com/vvb2060/KeyAttestation/releases/download/v1.3.2/KeyAttestation-v1.3.2.apk" + }, + "v1.1.1": { + "all": "https://github.com/vvb2060/KeyAttestation/releases/download/v1.1.1/KeyAttestation-v1.1.1.apk" + }, + "v1.3.1": { + "all": "https://github.com/vvb2060/KeyAttestation/releases/download/v1.3.1/KeyAttestation-v1.3.1.apk" + }, + "v1.3.0": { + "all": "https://github.com/vvb2060/KeyAttestation/releases/download/v1.3.0/app-release.apk" + }, + "v1.2.0": { + "all": "https://github.com/vvb2060/KeyAttestation/releases/download/v1.2.0/key-attestation-v1.2.0.apk" + } + }, + "description": "This app supports generating, saving, loading, parsing and verifying Android key and ID attestation data.\n\nThe app is used for self-testing, so it has no network permission. The certificate revocation data is embedded in the apk and will not be updated online. If the system is compromised, parsing and verifying is not safe, you should save the data to a file and then load the file on another device to verify it.\n\nThis app also supports loading attestation data generated by other software, and the supported storage format is PkiPath and PKCS7.", + "github": "https://github.com/vvb2060/KeyAttestation" } ] \ No newline at end of file diff --git a/public/img/apps/key.png b/public/img/apps/key.png new file mode 100644 index 0000000000000000000000000000000000000000..22e7d512df4cfbba10024c7575365632801e3ba7 GIT binary patch literal 18467 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