A free and open-source offline authenticator app for Wear OS.

Overview

Wear OS Kotlin License Open Source? Security Policy Latest Version Download APK

Wristkey

Wristkey logo

Need 2FA codes quickly, right on your Wear watch without needing a phone? Wristkey is an open-source 2FA client for Wear OS watches that does just that! Supports Android Wear 7.1 (Nougat) and above. Get the APK here.

mockup

FEATURES

  • Works without being paired to phone (standalone) and without internet connection.

  • Direct import from Aegis Authenticator, andOTP, Bitwarden and Google Authenticator.

  • Secure app by locking via PIN, pattern and password.

  • Safe data storage using 256-bit encryption.

  • Time and counter mode OTPs, upto SHA-512 and 4-8 digits.

  • Supports round and square devices and customization via theming.

  • Backup options via QR code and JSON.

USAGE

Adding items

Wristkey supports importing data from multiple sources for ease-of-use, though the procedures differ slightly for each of them. For example, for Bitwarden, a JSON file is parsed and the totp field is extracted from each account. For website QR codes, the QR Code is scanned and the resulting otpauth:// URL is parsed.

add

Transferring data

Via phone

If your watch is paired to an Android phone, you can use a third-party Wear OS file manager like myWear File Explorer or Nav Explorer to transfer PNG / JSON files from your phone's storage to your watch.

Via ADB
  1. Enable ADB Debugging on your watch by going to Settings → System → About and tapping 'Build Number' 7 times.

  2. Go back and tap on Developer Settings, then scroll down and enable "ADB Debugging".

  3. Make sure Wristkey has storage permissions. On your watch, go to Settings → Apps & notifications → App info → Wristkey → Permissions and enable 'Storage'.

ADB over USB
  1. Connect your watch to your computer via USB. When prompted on watch, tap 'Always allow from this computer'.
ADB over Bluetooth
  1. Enable Bluetooth Debugging on your watch by going to Settings → System → About and tapping 'Build Number' 7 times.

  2. Now on your Android phone / tablet, open the Wear OS app and tap the top right mennu button and tap on 'Settings'.

  3. Enable 'Debugging over Bluetooth'. You’ll should see

    Host: disconnected
    Target: connected
    
  4. Connect your Android phone / tablet to your computer via USB. Then open a new terminal and run the following commands

    adb forward tcp:4444 localabstract:/adb-hub
    adb connect localhost:4444
    
  5. On your phone, the Wear OS app should display

    Host: connected
    Target: connected
    

Google Authenticator and normal QR Code imports

  1. If using a QR Code from a website, save it as a screenshot and make sure it is clearly visible with no pixelation. If importing from Google Authenticator, tap the three dots on the top right corner, then tap on 'Export accounts'. Then select the accounts you'd like to export and tap the export button 'Export'. Take a picture or screenshot of the QR code that is displayed and make sure it is a PNG or JPG file and is clear with no blurring, glare or pixelation.

  2. Open a terminal on your computer and place this PNG or JPG file on the main directory of your watch (/sdcard/) via the following command

    adb push .png /sdcard/
    
  3. On your watch, open Wristkey, scroll down and tap the add icon '+', then select your import option.

  4. After your accounts are imported, delete the PNG or JPG file from your watch via the following commands

    adb shell
    cd /sdcard/
    rm .png
    exit
    

Aegis Authenticator, andOTP, Bitwarden and Wristkey backup imports

  1. Export your data in an unencrypted JSON format. Make sure you don't rename the file.

  2. Open a terminal on your computer and place this JSON file on the main directory of your watch (/sdcard/). If using a Wristkey backup file, do not place it in the /Wristkey folder. Do this via the following command

    adb push  /sdcard/
    
  3. On your watch, open Wristkey, scroll down and tap the add icon '+', then select your import option.

  4. After your accounts are imported, delete the JSON file from your watch via the following commands

    adb shell
    cd /sdcard/
    rm 
    exit
    

Manual entry

  1. On your watch, open Wristkey, scroll down and tap the add icon '+', then tap Manual Entry. The default settings are for Google Authenticator codes (SHA-1, 6 digits, time-based).

  2. Scroll down and tap the tick button '✓' at the at the bottom when done.

addadd

Editing and Deleting items

To edit or delete an item, tap and hold on its name. This was made difficult on purpose so that accounts aren't accidentally edited or deleted. To delete an item, scroll all the way to the bottom of the edit screen and tap the trash icon.

Exporting

exportqrcode

Since watches are tiny devices that can be misplaced, backing up and exporting your secrets and storing them in a safe place is always a a good idea.

Single account

To transfer a code from your watch to an Authenticator app on your phone, just press and hold the 2FA code number on your watch. You can then scan the QR code that is displayed on your watch screen in any 2FA application.

Tip: Tap the QR Code to dim it for better scanning.

All accounts

To backup all content, open Wristkey, tap the settings icon ' ⚙️ ', then scroll down and tap Backup all data.

Via QR code

Tap 'QR code' to get a (not compatible with Authenticator) QR Code data. This QR code cannot be scanned in any 2FA application and is purely for extraction purposes.

Via file
  1. Tap 'File' to get your backups in the form of a file. The data will be placed in /sdcard/wristkey/.

  2. Open a terminal on your computer and extract this file via the following command

    adb pull /sdcard/wristkey/
    
  3. To delete the directory, type

    adb shell rm /sdcard/wristkey/
    

Note: The exported data is unencrypted and must be handled with care. Delete it when not in use.

TROUBLESHOOTING

Wrong TOTP codes are shown

Make sure you set your secret key, digit length and algorithm correctly. If the displayed codes are still wrong, your watch may have the time set incorrectly. Please set the time by pairing it to a phone or connecting to WiFi.

File import not working

Make sure Wristkey has storage permissions in your watch's Settings app. If importing from JSON, make sure the file you export is an Unencrypted file in JSON format. If importing from Authenticator, make sure the screenshot or picture is in PNG or JPG format and is clear. If using a Wristkey backup file, make sure it has the .backup extension.

File export not working

Make sure Wristkey has storage permissions in your watch's Settings app. If already enabled, disable and enable storage permissions again.

SECURITY

Further reading: Security Policy

Importing files

To prevent data extraction, snooping and theft, make sure you delete the JSON, PNG or JPG files from your watch's storage once you're done importing them. You can confirm the existence of items by connecting your watch via ADB and running the adb shell ls /sdcard/ command.

In-app storage

All sensitive data within Wristkey (including secrets to generate OTPs) is stored encrypted using 256-bit AES encryption, with the decryption key stored locally on your watch. No backdoor on my end. ;)

Privacy

Wristkey can be set to unlock after entering your watch's password / PIN / pattern. To enable screen locking for the app, go to your watch's Settings → Personalization → Screen Lock and set a PIN / pattern / password. To override this setting, open Wristkey, tap the settings icon ' ⚙️ ', then scroll down and disable Screen locking

Wristkey doesn't use Wear OS's Ambient Mode by default to prevent bystanders from peeking at your 2FA codes. To enable Ambient Mode, open Wristkey, tap the settings icon ' ⚙️ ', then scroll down and enable Ambient mode.

CHANGELOG

A detailed changelog is available on the releases page. The latest release is Release.

CONTRIBUTION

Contributing

I made this app for myself because the LG G Watch W100 I use doesn't support internet access when paired with iOS and Google scrapped their Authenticator app from the Wear OS Play Store. However, anyone can contribute to this project. Click here to read the rules if you'd like to.

Code of Conduct

Make sure to adhere to the code of conduct when interacting with others on this project.

ACKNOWLEDGEMENTS

The Aegis Authenticator, andOTP, Google Authenticator and Bitwarden names, data export formats, logos and trademarks belong to their respective owners.

Please star and support these developers for their hard work. All libraries, dependencies and tools used belong to their respective owners.

Marcel Kliemannel - Kotlin Onetimepassword (to generate OTPs)

Androidmads - QR Generator library (to generate QR Codes)

Zxing (to scan QR codes for Google Authenticator imports)

GSON (to parse data)

EncryptedSharedPreferences (to store data in an encrypted format securely)

Roland Kurmann - extract_otp_secret_keys (to extract Google Authenticator data)

Chaquo Ltd - Chaquopy (to run Python to decode protobuf3 data)

LICENSE

Multimedia licensed under License: CC BY-NC-SA 4.0

Copyright © 2021 Owais Shaikh

Comments
  • [FEATURE] Allow removing or sorting existing codes

    [FEATURE] Allow removing or sorting existing codes

    Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

    Describe the solution you'd like A clear and concise description of what you want to happen.

    Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

    Additional context Add any other context or screenshots about the feature request here.

    opened by oscardelgado 4
  • [BUG] The app doesn't open when lock by pattern is set on the watch

    [BUG] The app doesn't open when lock by pattern is set on the watch

    Describe the bug The app doesn't open when lock by pattern is set on the watch.

    Wear OS

    To Reproduce Steps to reproduce the behavior:

    1. I have enabled Pattern unlock in the device settings.
    2. I try to open Wristkey, and it asks me for my pattern.
    3. I enter it, and the app closes and I am left on the Wear OS menu to select apps.

    Expected behavior The app should open when I enter my pattern.

    Screenshots N/A

    Watch:

    • Watch Name and model number: Mobvoi TicWatch E D15J
    • OS: 2.31
    • Wristkey version 1.3.1

    Home app 2.51.0... Google Play Services 21.33.14 Android 8.0.0 Android security patch August 1st 2018

    Smartphone (if applicable):

    • Device: iPhone 6S Plus
    • OS: iOS14.8

    Thanks!

    opened by oscardelgado 3
  • [BUG] Unable to import google authenticator QR code

    [BUG] Unable to import google authenticator QR code

    Describe the bug I've uploaded a JPG with google authenticator export qr code to my watch as per instructions. When trying to open in the app, I get the following error popup: "Couldn't access storage: Please raise an issue on Github..."

    Camera and Files and Media permissions are enabled for the app.

    Watch:

    • Galaxy Watch 4
    • Wear OS 3.5
    • Wristkey github master version
    opened by miki151 2
  • [FEAT]: allows rotating input for wear os devices that have a rotate crown

    [FEAT]: allows rotating input for wear os devices that have a rotate crown

    This is a simple Pull request which allows rotating input for wear os devices that have a rotate crown just make a small change of layout and it worked. Tested by using android studio's wear os 3 device and by pixel 4 (VM too) and it works fine without crashing

    Let me know if there is any problem with this code. Thank you!

    opened by huynhduc0 1
  • [BUG]

    [BUG]

    Describe the bug A clear and concise description of what the bug is.

    To Reproduce Steps to reproduce the behavior:

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error

    Expected behavior A clear and concise description of what you expected to happen.

    Screenshots If applicable, add screenshots to help explain your problem.

    Watch:

    • Watch Name and model number: [e.g. LG G Watch W100]
    • OS: [e.g. Wear OS 2.2]
    • Wristkey version [e.g. v1.1]

    Smartphone (if applicable):

    • Device: [e.g. iPhone6]
    • OS: [e.g. iOS8.1]

    Additional context Add any other context about the problem here.

    opened by youarenot667543 1
  • How to install?

    How to install?

    Sorry to ask this stupid question, but I'm new to Wear OS. First I'm really happy to find a open source app for Wear OS. This seems to be not the standard for this OS. On Android, I can use F-droid but I haven't found as of yet such an store for Wear OS.

    How can I install your app on the watch? I have tried to install the apk on the phone, in hope this transferred it to the watch, but this doesn't work.

    opened by Offerel 1
  • made export screen stay always on

    made export screen stay always on

    What's new

    • Added file picker option for devices that support it
    • New monochrome colors to be more platform agnostic
    • Fixed import bugs.
    • Made export screen stay always on

    Bug fixes

    • Fixed a bug with decodeOtpAuthUrl() where the period parameter could get extracted incorrectly
    opened by 4f77616973 0
  • Import bug fix

    Import bug fix

    What's new

    • Added file picker option for devices that support it
    • New monochrome colors to be more platform agnostic
    • Fixed import bugs.

    Bug fixes

    • Fixed a bug with decodeOtpAuthUrl() where the period parameter could get extracted incorrectly
    opened by 4f77616973 0
  • File pickers

    File pickers

    What's new

    • Added file picker option for devices that support it
    • New monochrome colors to be more platform agnostic

    Bug fixes

    • Fixed a bug with decodeOtpAuthUrl() where the period parameter could get extracted incorrectly
    opened by 4f77616973 0
  • Wear 3.0 redesign

    Wear 3.0 redesign

    Features

    • Refreshed UI and support for Wear OS 3.0
    • Added batched exports
    • Added a persistent clock to all screens
    • Made app compatible with any device running Android 7.1+ (phones inlcuded)
    • Added a camera QR code scanning option for devices with cameras

    Bug fixes

    • Fixed a bug where lock screens weren't working
    • Fixed a bug where pattern lock screens wouldn't show
    • Fixed app lag and choppy performance
    • Fixed several export algorithms
    • Fixed a bug where permissions wouldn't be asked properly

    Removals

    • Removed the theming menu. Themes can now be applied by cloning the project and editing the gradient start and end colors in colors.xml.
    opened by 4f77616973 0
  • It would be great if this app had a standalone client application that syncs with the watch.[FEATURE]

    It would be great if this app had a standalone client application that syncs with the watch.[FEATURE]

    After having used Wristkey for a while I think a standalone client app that syncs with the watch, and stores data on your phone in case you erase your match memory would be a cool addon.

    opened by nelsonlobo99 1
Releases(v2.2)
  • v2.2(Nov 26, 2022)

  • v2.1(Nov 18, 2022)

    What's new

    • Added file picker option for devices that support it
    • New monochrome colors to be more platform agnostic
    • Fixed import bugs.
    • Made export screen stay always on

    Bug fixes

    • Fixed a bug with decodeOtpAuthUrl() where the period parameter could get extracted incorrectly
    Source code(tar.gz)
    Source code(zip)
    app-debug.apk(32.29 MB)
  • v2.0(Nov 16, 2022)

    What's new

    • Refreshed UI and support for Wear OS 3.0
    • Added batched exports
    • Added a persistent clock to all screens
    • Made app compatible with any device running Android 7.1+ (phones included)
    • Added a camera QR code scanning option for devices with cameras

    Bug fixes

    • Fixed a bug where lock screens weren't working
    • Fixed a bug where pattern lock screens wouldn't show
    • Fixed app lag and choppy performance
    • Fixed several export algorithms
    • Fixed a bug where permissions wouldn't be asked properly

    Removals

    • Removed the theming menu. Themes can now be applied by cloning the project and editing the gradient start and end colors in colors.xml.
    Source code(tar.gz)
    Source code(zip)
    wristkey_2_0.apk(25.55 MB)
  • v1.3.1(Jun 6, 2021)

    What's New

    • Added option to import from otpauth URLs, QR Codes and andOTP.
    • Added icons for Aegis Authenticator, andOTP, Bitwarden and Google Authenticator.
    • Added digit length 5.
    • Refactored code.

    Bug Fixes

    • Fixed counter-based accounts not working.
    • Fixed crash when counter-based accounts are added.
    Source code(tar.gz)
    Source code(zip)
  • v1.3(Jun 6, 2021)

    What's New

    • Added option to edit data for individual accounts after entry.
    • Moved delete option to edit screen.
    • Added support for Aegis authenticator importing.
    • Added support for Wristkey backup importing.
    • Added support for Bitwarden non-Google Authenticator importing.
    • App data (theme settings, privacy settings etc) are now stored encrypted.

    Bug Fixes

    • Fixed security flaw where lock screen could be disabled via ADB.
    • Fixed QR code visibility issues.
    • Fixed theme colors not being set properly.
    Source code(tar.gz)
    Source code(zip)
  • v1.2.2(Jun 6, 2021)

    What's New

    • Added exporting support

    Bug Fixes

    • Fixed API and Chaquopy license error
    • Fixed app closing unexpectedly
    • Fixed security flaw with unsafe data passing
    • Fixed oversized QR code
    Source code(tar.gz)
    Source code(zip)
  • v1.2.1(Jun 6, 2021)

    What's New

    • Added in-app settings for lockscreen and ambient mode.
    • Added JPG support for Google Authenticator importing.
    • Added lock screen (when available) for QR Code display, and item deletion.

    Bug Fixes

    • Fixed security flaw where app would launch after incorrect credentials.
    • Fixed import with username checkbox not working on Google Authenticator import screen.
    • Fixed latest Google Authenticator data not being extracted.
    • Fixed theme colors not being set properly.
    • Fixed app closing on new item add.
    • Fixed app freezing when importing Google Authenticator data.
    Source code(tar.gz)
    Source code(zip)
  • v1.2(Jun 6, 2021)

    What's New

    • App locking via watch Pattern / PIN / Password (must be enabled in watch Settings).
    • Added Google Authenticator importing.
    • Data is now stored with 256-bit encryption by default.
    • TOTP codes are now formatted with a split.
    • Added number of logins in settings.
    • Moved import options to Add screen.

    Bug Fixes

    • Fixed permissions not being asked upon app launch.
    • Fixed scrolling issues.
    • Fix latency when more items are added.

    Other

    • Renamed application package to com.wristkey (if on a previous release build, please uninstall the app and reinstall it).
    Source code(tar.gz)
    Source code(zip)
  • v1.1(Jun 6, 2021)

    What's New

    • Added Bitwarden import support.
    • Added ring and line UI for square and round devices.
    • Added beep and vibration controls in app settings.
    • Switched to list format of storing of data.

    Bugfixes

    • Fixed bug where application would crash when adding more thab 10 new items.
    • Fixed counter card not working.
    Source code(tar.gz)
    Source code(zip)
  • v1.0(Jun 6, 2021)

Owner
Owais Shaikh
memelord
Owais Shaikh
Authenticator Pro is a free open-source two factor authentication app for Android

Authenticator Pro Authenticator Pro is a free open-source two factor authentication app for Android. It features encrypted backups, icons, categories

jmh 1k Jan 4, 2023
Communicating between Wear OS and Android device using the OpWear module and a sample of displaying real-time camera on the watch and sending commands to the mobile by Wear OS.

OpWear-Cam Communicating between Wear OS and Android device using the OpWear module and a sample of displaying real-time camera on the watch and sendi

AmirHosseinAghajari 6 Nov 8, 2022
andOTP - Android OTP Authenticator

andOTP - Android OTP Authenticator andOTP is a two-factor authentication App for Android 5.1+. It implements Time-based One-time Passwords (TOTP) and

andOTP 3.7k Dec 26, 2022
Tachiyomi 20.4k Jan 9, 2023
NimTome is a Free and open-source spell tracker application for Dungeons and Dragons

Nimtome: An open source application to manage all your spells in D&D About This project came to life as a homework assignment, but it became a lot bit

null 2 Jan 11, 2022
PngNote is a free, open-source, handwriting note-taking app based on BOOX SDK.

PngNote is a free, open-source, handwriting note-taking app based on BOOX SDK. Use BOOX SDK: Leverage raw-rendering feature, similar stylus lag to the

null 34 Nov 11, 2022
A Free, open source Contacts Butler App built with kotlin

Contacts Butler Do you have a bunch of contacts that are missing a lot of info such as names, emails, phone numbers, etc? Do you really know the conta

Android Contacts Butlers 1 Nov 30, 2021
Free and open source manga reader for Android.

Build Stable Weekly Preview Contribute Support Server Tachiyomi Tachiyomi is a free and open source manga reader for Android 5.0 and above. Features F

Tachiyomi 20.4k Jan 9, 2023
AdAway is a free and open source ad blocker for Android.

AdAway AdAway is an open source ad blocker for Android using the hosts file and local vpn. For more information visit https://adaway.org Installing Th

null 4.9k Jan 7, 2023
Free and Open Source, full-featured torrent client for Android

Free and Open Source, full-featured torrent client for Android

Yaroslav Pronin 1.3k Jan 8, 2023
Free and Open Source Launcher.

Omega Launcher Free and Open Source Launcher Installation & Download Our builds are available on: Github: Releases or Actions (usually). F-Droid: Eith

Saul Henriquez 977 Jan 2, 2023
FlorisBoard is a free and open-source keyboard for Android

FlorisBoard FlorisBoard is a free and open-source keyboard for Android 6.0+ devices. It aims at being modern, user-friendly and customizable while ful

FlorisBoard 3.7k Jan 5, 2023
A Free, Fully Fledged, Open-Source Music Player for Android

Turtle Player Free, Fully Fledged & Open-Source. The Music Player for Android. Turtle Player is designed to be a fun and unique app for playing your m

Edd Turtle 178 Nov 18, 2022
Money Manager Ex is a free, open-source, cross-platform, easy-to-use personal finance software

Money Manager Ex is a free, open-source, cross-platform, easy-to-use personal finance software. It primarily helps organize one's finances and keeps track of where, when and how the money goes.

Money Manager EX 1.2k Dec 31, 2022
The Free & Open Source Android Application for reading (Light) Novels

Shosetsu The Free & Open Source Android Application for reading (Light) Novels! We appreciate any help in improving the app, so let us know by opening

ShosetsuOrg 541 Jan 6, 2023
A Free, Open source unofficial manga reader for MangaDex

Neko A Free, Open source unofficial manga reader for MangaDex About: This is a MangaDex specific fork of Tachiyomi and TachiyomiJ2K. This contains fea

Carlos 1.4k Jan 3, 2023
HackerNews reader app for Wear OS

HNReader Install by importing to Android Studio, building the apk, and Google the official Android documentation for loading the apps to Wear OS and f

Hikmat Jafarli 2 Sep 4, 2022
An MVP Dribbble client for Android Mobile, Tablet, Wear and TV.

Bourbon ![Sidebar] (https://img.shields.io/badge/Sidebar-06%2F05%2F2016-orange.svg) Bourbon is a simple Dribbble client built for Android Mobile, Wear

Joe Birch 1.1k Dec 12, 2022
A Simple movies app using Kotllin, MVVM, and with an offline caching capability.

IMDB-CLONE A simple imdb clone using KOTLIN,MVVM with searching and bookmarking ability with offline caching ability Libraries used:- Kotlin Coroutine

saiteja janjirala 13 Aug 16, 2022