Giter VIP home page Giter VIP logo

tejado / authorizer Goto Github PK

View Code? Open in Web Editor NEW
482.0 482.0 53.0 171.2 MB

Authorizer is a Password Manager for Android. It emulates an HID keyboard over USB and enters your credentials on your target device. Additionally it supports OTP :key::mobile_phone_off:

Java 99.23% C++ 0.72% C 0.03% CMake 0.02%
android auto-type bluetooth bluetooth-hid encryption gpg gpg-encryption hid keyboard-emulation otp password-manager password-store security smartphone usb usb-hid

authorizer's People

Contributors

absturztaube avatar geco2 avatar hacksawfred3232 avatar jefftharris avatar mohammadnaseri avatar papagon avatar poussinou avatar tejado avatar vi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

authorizer's Issues

Add button to Auto-Type URL

Hello.

The ability to Auto-Type a URL in addition to a username/password is a valuable feature that would enhance convenience for users.
I would appreciate it if you seriously considered including this feature in the new program version.

Sincerely.

feature request: pass integration

Hi, finally authorizer is on f droid :)

It would be nice to have pass integration since this is a "standart" format for password storing (with gpg encryptation) and that works with git

Here is pass website for reference : https://www.passwordstore.org/

Also there is a project here on github that already integrates this format which i dont remeber the name

Where is an OTP Button in keyboard?

Since new update that I got from F-Droid is have support to add OTP in password database, but unfortunately, I cannot find the button to insert/autotype OTP in the app keyboard yet.

.csv import

Hello👋 In short, I would like to see support for importing passwords and logins from a .csv file. For example, in firefox, this file looks like this:

"url,"username","password","httpRealm","formActionOrigin","guid","timeCreated","timeLastUsed","timePasswordChanged"
https://site.com,"[email protected]","password",,"https://site.com","87f23f23f","1649905569125","1649906459007","1649905569125"
url username password httpRealm formActionOrigin guid timeCreated timeLastUsed timePasswordChanged
https://site.com [email protected] password https://site.com 87f23f23f 1649905569125 1649906459007 1649905569125

USB Support for FIDO CTAP/CTAP2 for U2F & WebAuthn

I'm working on the support of WebAuthn over USB. For this, the Android device needs to have special USB HID descriptor (CTAP) and Authorizer needs to implement the device logic (key creating and authentication).

The latest spec of the Client to Authenticator Protocol (CTAP) can be found here: https://fidoalliance.org/specs/fido2/fido-client-to-authenticator-protocol-v2.1-rd-20191217.html

The USB HID descriptor is already available in USB Gadget Tool (recently released by me).

And a first PoC to implement the WebAuthn device logic was successful.

Next step:

  • Defining of how these WebAuthn keys and metadata will be stored in the pwsafe3 format
  • Clarifying how Authorizer will listen for incoming CTAP requests (USB HID keyboard will be triggered by Authorizer. For WebAuthn, the trigger is on the USB Host side, so that Authorizer needs to react on incoming requests).
  • Implementing device logic into Authorizer
  • Adding relevant UI elements

Enhance FIDO credentials

  • Show FIDO credentials in the record
  • FIDO credentials should be mergable with other records
  • During FIDO credential registration, the target record should be selectable

This is valid for FIDO U2F and FIDO2 WebAuthn.

Improve Bluetooth Device Pairing

Currently, it is tricky to pair Authorizer with a respective other device, so that Bluetooth HID (keyboard + CTAP/CTAP2) is working correctly.
This needs to be improved.

I guess it makes sense to have a bluetooth device section in the preferences.

Wrong symbol over USB

If the password contains "-", then when entering it via usb, from the page with all passwords, this symbol is replaced by "/". If you go to the page with the password and press "PASSWORD", the input will be correct.

Typing over USB doesn't work (Mac, Xiaomi Mi6)

Hi @tejado!

Awesome app I'd really like to use, but I have an issue. When I try to "type" the password, nothing happens.

I have your USB Gadget Tool installed and I added hid.keyboard function to the default gadget (g1). I also tried to use a separate gadget, but no luck.

Setup:

  1. Phone: Xiaomi Mi6
  2. Android 9, MIUI 11
  3. Rooted with Magisk, if that helps.
  4. Mac, MacOS Monterey
  5. I tried a simple USB-C->USB-C cable and a USB-C->USB one, but looks like my Mac sees the phone as a keyboard. At least it shows a popup saying "Configure your keyboard"
  6. I also have an external keyboard

It also keep spamming with "Root permission granted" when I tap the "type" button

Attaching the logs I got form the debug version
type.log

P.S. Also my additional gadget in the USB Gadget Tool goes missing after I reboot the phone.

NFC support

I've been working on a similar project that uses NFC and would like to share what I have found, so that we can work together on a solution. My main areas are embedded and hardware, rather than Android.

NFC uses APDU to exchange data, which requires the Android device to emulate a basic smart card. APDU can transfer arbitrary data, and allows an application to be selected by the reader. More info here:

https://developer.android.com/guide/topics/connectivity/nfc/hce

My intention is to build a very small USB keyboard emulator with NFC that can read passwords from an Android phone and type them on the host. It's a shame no off-the-shelf hardware can do this.

There are two options for the reader, an RC522 or a PN532 chip. I'm evaluating both. To control them my plan is to use a XMEGA microcontroller, since I have a fully open source USB stack for it, which includes HID and DFU for bootloading. Also all the development tools are free (GCC) and well supported.

Other options include an ARM CPU. The advantages are that they are physically smaller and slightly cheaper, but the down side is that development support is worse. Actually one other big advantage is that they often come with a USB bootloader factory installed, where as with XMEGA you need a programmer (and probably a programming header).

It would be great to get some feedback on these ideas and also ensure that the hardware can be used with Authorizer.

Confusing loading state in Battery Saver

Dear developer,

I noticed that when I enable Battery Saver on Android 8.1, the indeterminate ProgressBars in the app are not properly shown. This is a known problem in Android API level <28, see e.g. this StackOverflow question. Battery Saver disables animations, also on progress bars on these versions. This is quite confusing because the loading state is not properly represented. It is fixed in later Android versions, where progress bars do appear and animate.

Looking at the code, indeterminate progress bars are created here:

className='AbstractPasswdSafeOpenNewFileFragment.java', lineNumber=168

To fix this issue, one can check ValueAnimator.areAnimatorsEnabled() and provide a different UI element, such as a text label, when animations are disabled.

app crashes on launch

10-01 20:18:07.234 31439 31439 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{net.tjado.passwdsafe/net.tjado.passwdsafe.PasswdSafe}: android.view.InflateException: Binary XML file line #89: Binary XML file line #89: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3121)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3264)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:106)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:214)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:7063)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #89: Binary XML file line #89: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView
10-01 20:18:07.234 31439 31439 E AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #89: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView
10-01 20:18:07.234 31439 31439 E AndroidRuntime: Caused by: java.lang.reflect.InvocationTargetException
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at java.lang.reflect.Constructor.newInstance0(Native Method)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.createView(LayoutInflater.java:686)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:829)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:902)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:863)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.inflate(LayoutInflater.java:554)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.inflate(LayoutInflater.java:461)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.inflate(LayoutInflater.java:383)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:775)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:197)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at net.tjado.passwdsafe.PasswdSafe.onCreate(PasswdSafe.java:392)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.Activity.performCreate(Activity.java:7327)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.Activity.performCreate(Activity.java:7318)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1275)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3101)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3264)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:106)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:214)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:7063)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
10-01 20:18:07.234 31439 31439 E AndroidRuntime: Caused by: android.content.res.Resources$NotFoundException: Drawable net.tjado.passwdsafe:color/tab_bg_color with resource ID #0x7f06040d
10-01 20:18:07.234 31439 31439 E AndroidRuntime: Caused by: android.content.res.Resources$NotFoundException: File res/color/tab_bg_color.xml from drawable resource ID #0x7f06040d
10-01 20:18:07.234 31439 31439 E AndroidRuntime: 	at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:898)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:677)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.content.res.Resources.getDrawableForDensity(Resources.java:903)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.content.res.Resources.getDrawable(Resources.java:842)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.content.Context.getDrawable(Context.java:628)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at androidx.core.content.ContextCompat$Api21Impl.getDrawable(ContextCompat.java:1110)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:526)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at com.google.android.material.navigation.NavigationBarItemView.setItemBackground(NavigationBarItemView.java:676)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at com.google.android.material.navigation.NavigationBarMenuView.buildMenuView(NavigationBarMenuView.java:729)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at com.google.android.material.navigation.NavigationBarPresenter.updateMenuView(NavigationBarPresenter.java:72)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at com.google.android.material.navigation.NavigationBarView.inflateMenu(NavigationBarView.java:382)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at com.google.android.material.navigation.NavigationBarView.<init>(NavigationBarView.java:276)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at com.google.android.material.bottomnavigation.BottomNavigationView.<init>(BottomNavigationView.java:108)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at com.google.android.material.bottomnavigation.BottomNavigationView.<init>(BottomNavigationView.java:103)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at com.google.android.material.bottomnavigation.BottomNavigationView.<init>(BottomNavigationView.java:98)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at java.lang.reflect.Constructor.newInstance0(Native Method)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.createView(LayoutInflater.java:686)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:829)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:902)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:863)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.inflate(LayoutInflater.java:554)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.inflate(LayoutInflater.java:461)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.view.LayoutInflater.inflate(LayoutInflater.java:383)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:775)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:197)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at net.tjado.passwdsafe.PasswdSafe.onCreate(PasswdSafe.java:392)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.app.Activity.performCreate(Activity.java:7327)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.app.Activity.performCreate(Activity.java:7318)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1275)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3101)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3264)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:106)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:214)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:7063)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 0: TypedValue{t=0x2/d=0x7f04016c a=-1}
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.content.res.TypedArray.getDrawableForDensity(TypedArray.java:946)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.content.res.TypedArray.getDrawable(TypedArray.java:930)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.graphics.drawable.StateListDrawable.inflateChildElements(StateListDrawable.java:177)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:122)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:146)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1359)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1318)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:879)
10-01 20:18:07.236 31439 31439 E AndroidRuntime: 	... 42 more

The following fixes crash for me, but I have no clue what any of that means and what's proper way to fix that:

diff --git a/authorizer/src/main/res/color/tab_bg_color.xml b/authorizer/src/main/res/color/tab_bg_color.xml
index 11b34e58..52135a84 100644
--- a/authorizer/src/main/res/color/tab_bg_color.xml
+++ b/authorizer/src/main/res/color/tab_bg_color.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:color="@color/primary" android:drawable="@color/primary" android:state_checked="true" />
-    <item android:color="?attr/customNavigationBarColor" android:drawable="?attr/customNavigationBarColor" />
 </selector>

This is from Galaxy A40 running Android 9, btw.

s10+ with Android 12 won't let me download

I have a Samsung Galaxy S10+ running android 12 and when I go to download the app it says "This app isn't available for your device because it was made for an older version of Android." I know this isn't the recommended device but shouldn't I still be able to download the app? TIA

App FC when accessing saved file

This happens when opening previously created file rw or ro. It also FC when using the widget linked to file. If you need a logcat, I can provide.

Android 7.1 Samsung Galaxy J5

Sending via USB not working

On my nexus 5, I installed the linked kernel, rooted via SuperSU, I can't send text via USB.

It has been downgraded to 5.0 from 6.0, USB Keyboard app is installed, and when I use Authorizer as keyboard for USB Keyboard, I can enter the logins and passwords.

Implement bluetooth keyboard functionality similar to USB keyboard

Hey there,
I don't know whether this is even possible at all nor securely, this would definitely require some investigation, however, if this is doable without security concerns this could be a great feature.

It would need android to be able to behave as a bt keyboard and it would have to be looked at possible security issues like traffic sniffing (reading keys or at least being able to replay them).

Documentation.

Hi, I would like to add a FAQ document to the project. To help users of the application.
I await your response. Thank you

Creating a new demo video of Authorizer app

The current video linked in the README.md shows a really old version of Authorizer. It would be great if someone creates a new one. The video should show two devices and the Authorizer version 0.3.0 similar the current one.
Bonus: OTP & usb backup demo

Fingerprint support

Hello,
great app !!
could you please add fingerprint reading as master password, to unlock the application ?

Thanks

Add a Stateless Password Generator

If you're unfamiliar with stateless passwords one popular implementation is lesspass. You can read up on how it works: https://blog.lesspass.com/lesspass-how-it-works-dde742dd18a4#.vbgschksh

Alright, so here's my vision for this use case:
Authorizer could live on an offline device and send these stateless passwords through keyboard emulation, increasing security as the master password is never entered on the target device. An attacker with a keylogger installed on your PC or a website database breach might be able to obtain passwords but never your master password or your OTPs. You can simply increment the counter to generate new password replacements as soon as you're aware of the breach. If your device is lost, stolen, or broken you'll never lose access to your accounts because you can simply generate the same passwords again in the future, and you don't have to worry about the thief having access to your passwords as nothing needs to be stored on disk.

You don't have to buy some fancy specialized security hardware. A small, cheap android device could do the job, hardening your security without sacrificing convenience. Authorizer is already quite close to making this a reality.

Security is hard, and I'm not an expert by any means but this seems like something to look into. Let me know what you think.

Doesn't type G reliably

Hi,

It seems the app has a problem typing the g character reliably.

I added a record with username gg, and password gggg-gggg.

Authorizer types g [tab] ggg-gggg, instead of the correct gg [tab] gggg-gggg

I also tested with a different keybord layout (neo 2.0), and it typed the correct numbers of characters, just not a g, but a i.

And I just tested with capital G, and it just doesn't want to type it. Username GG, types nothing.

Bluetooth failure on Android 13

An android 13 I get the following error in logcat:

10-20 10:52:15.362 16583 16583 E AndroidRuntime: Process: net.tjado.passwdsafe, PID: 16583
10-20 10:52:15.362 16583 16583 E AndroidRuntime: java.lang.SecurityException: Need BLUETOOTH permission
10-20 10:52:15.362 16583 16583 E AndroidRuntime:  at android.bluetooth.BluetoothProfileConnector.connect(BluetoothProfileConnector.java:177)
10-20 10:52:15.362 16583 16583 E AndroidRuntime:  at android.bluetooth.BluetoothHidDevice.<init>(BluetoothHidDevice.java:445)
10-20 10:52:15.362 16583 16583 E AndroidRuntime:  at android.bluetooth.BluetoothAdapter.getProfileProxy(BluetoothAdapter.java:3645)
10-20 10:52:15.362 16583 16583 E AndroidRuntime:  at net.tjado.authorizer.OutputBluetoothKeyboard.initializeBluetoothHidDevice(OutputBluetoothKeyboard.java:187)

I don't think it needs that permission on Android 13 and I see that in the source, however perhaps it's based on the target sdk rather than the device level.

Yubikey Neo support

I'd really like to see 2FA for logging into the password database, like their is on the normal passwdsafe application. If this was implemented idk if I'd ever use another password manager again. I'd use the normal passwdsafe app, but the USB otg function is something I absolutely love. Also is their any way to donate to this project if so please let me know.

Shortcut buttons to push either token

Hi, currently one has to choose each secret explicitly and then tap a corresponding button to push the respective token via USB or Bluetooth. Along with that, sensitive information is also displayed at the very first tab (including username and other login details), which is not nice if somebody looking at your screen. I would propose:

  • Display shortcut buttons to push token already in the list of secrets (for each of them);
  • Display sensitive login information only on the second tab if secret is chosen, and only buttons on the first tab.

Assign password to a device or Macro ability?

When I select a login/password from Authorizer, I'm asked to select a device. If now I want to type in another password, I have to

  1. exit the current credential
  2. find another credential
  3. tap password
  4. select device

It would be nice if we could create macros that can do all of the above in a single tap. Currently you have a list of groups/credentials that you select from. Those can remain but then allow us to compose those menus into a macro and then allow us to browse through those macros.

For example, in a home lab scenario, I could have

  1. Macro 1_PC 1 Login Username/Password
  2. Macro 2_PC 1 Service Password (no username)
  3. Macro 3_PC 2 Login Username/Password (tab instead of return)
  4. Macro 4_PC 2 Service Password (no username)
  5. Macro 5_PC 2 MyCustomApp Login Username/Password
  6. etc...

That way, you can quickly logon to multiple devices in a quick succession. You can organize your macros for a specific task (e.g., you might have a set of macros for work devices/password and another set of macros for home devices and passwords).

Not sure if this can be done in userland (like Auto It script/macros in Windows). Don't think it is possible without rooting.

Other than that, a great app and thank you for your contribution!

Modify for wearable

Would it be possible to port something like this to a wearable device?The aim would be to have something that is as small as possible that uses your USB feature. I've trawled through the code, but I'm far too inexperienced to know the limits of wearables (it seems very limited to me).

Auto-type over BT doesnt work

Lineage OS 17.1(based on AOSP 10)

Logs:

08-03 20:48:05.088 19118 19118 D BluetoothHidDevice: Binding service...
08-03 20:48:05.089 19118 19118 E BluetoothHidDevice: Could not bind to Bluetooth Service with Intent { act=android.bluetooth.IBluetoothHidDevice }
08-03 20:48:06.113 19118 19118 E InputEventReceiver: Exception dispatching input event.
08-03 20:48:06.113 19118 19118 E MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.bluetooth.BluetoothHidDevice.getConnectionState(android.bluetooth.BluetoothDevice)' on a null object reference
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at net.tjado.authorizer.OutputBluetoothKeyboard.connectDeviceAndSend(OutputBluetoothKeyboard.java:283)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at net.tjado.passwdsafe.PasswdSafeRecordBasicFragment$26.onClick(PasswdSafeRecordBasicFragment.java:935)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:1222)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.widget.AdapterView.performItemClick(AdapterView.java:330)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.widget.AbsListView.performItemClick(AbsListView.java:1190)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.widget.AbsListView$PerformClick.run(AbsListView.java:3198)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.widget.AbsListView.onTouchUp(AbsListView.java:4128)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.widget.AbsListView.onTouchEvent(AbsListView.java:3886)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.View.dispatchTouchEvent(View.java:13953)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3054)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2741)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:465)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1849)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.app.Dialog.dispatchTouchEvent(Dialog.java:861)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:423)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.View.dispatchPointerEvent(View.java:14212)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5652)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5455)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4958)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5011)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4977)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5117)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4985)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5174)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4958)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5011)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4977)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4985)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4958)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7675)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7644)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7605)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7800)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:188)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.os.MessageQueue.nativePollOnce(Native Method)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.os.MessageQueue.next(MessageQueue.java:336)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.os.Looper.loop(Looper.java:174)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at android.app.ActivityThread.main(ActivityThread.java:7356)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at java.lang.reflect.Method.invoke(Native Method)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
08-03 20:48:06.114 19118 19118 E MessageQueue-JNI:      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:940)
08-03 20:48:06.114 19118 19118 D AndroidRuntime: Shutting down VM
08-03 20:48:06.115 19118 19118 E AndroidRuntime: FATAL EXCEPTION: main
08-03 20:48:06.115 19118 19118 E AndroidRuntime: Process: net.tjado.passwdsafe, PID: 19118
08-03 20:48:06.115 19118 19118 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.bluetooth.BluetoothHidDevice.getConnectionState(android.bluetooth.BluetoothDevice)' on a null object reference
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at net.tjado.authorizer.OutputBluetoothKeyboard.connectDeviceAndSend(OutputBluetoothKeyboard.java:283)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at net.tjado.passwdsafe.PasswdSafeRecordBasicFragment$26.onClick(PasswdSafeRecordBasicFragment.java:935)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:1222)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.widget.AdapterView.performItemClick(AdapterView.java:330)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.widget.AbsListView.performItemClick(AbsListView.java:1190)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.widget.AbsListView$PerformClick.run(AbsListView.java:3198)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.widget.AbsListView.onTouchUp(AbsListView.java:4128)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.widget.AbsListView.onTouchEvent(AbsListView.java:3886)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.View.dispatchTouchEvent(View.java:13953)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3054)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2741)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:465)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1849)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.app.Dialog.dispatchTouchEvent(Dialog.java:861)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:423)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.View.dispatchPointerEvent(View.java:14212)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5652)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5455)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4958)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5011)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4977)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5117)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4985)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5174)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4958)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5011)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4977)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4985)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4958)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7675)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7644)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7605)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7800)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:188)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.os.MessageQueue.nativePollOnce(Native Method)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.os.MessageQueue.next(MessageQueue.java:336)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:174)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:7356)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
08-03 20:48:06.115 19118 19118 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:940)
08-03 20:48:06.118  1552  5270 W ActivityTaskManager:   Force finishing activity net.tjado.passwdsafe/.PasswdSafe

Improve Delay Time When Using USB HID Keyboard

'dd' command works, but has a bad permformance. I think we can launch a java process using 'app_process' command ,then using socket or Ibinder to communicate with your APP. That will be really fast !!!

Fingerprint support to access database.

It would be nice to have fingerprint support to access the database. KeePass dx has this functionality. Maybe you can get some inspiration from their codebase.

Doesn't tell if user doesn't have root access

When using the app I noticed it didn't work, even on multiple devices, with different cables and everything, untill I used saw the changelog where it's the only place it says that the app uses root permissions in order to work.

Can you make it so that if root isn't granted, to tell the user? It would help many new users who think the app is broken or something.

Support for PasswdSafe Sync

I'm editing HID patch for my device right now and to that day I was using PasswdSafe by Jeff Harris.
Since your project is based on the same sources, can you maybe make it compatible with great addon, for version I metioned earlier, called PasswdSafe Sync (albo by the same person)?
For now, when you open Authorizer you will got security errors when have this apk addon installed immediately after openning your app. It is open-sourced too but if you can't make it compatible (by compiling it probably for your fork) then just please remove part of code that is calling it when starting Authorizer because it is impossible to use in my case. If it is only matter of few simple tweaks then I will try to build it myself.
Screenshot of error

Support for QR codes in FIDO

Hi,

I'm pretty new to this thingy, it looks all well and I think the Bluetooth FIDO is implemented in #54. I tried to use it with okta.com but my chromium presents me a QR code that I should scan and it contains a FIDO:/ url, i'm not sure how to proceed with that. Any help? I think its not yet implemented to use QR codes with FIDO?! It also asks me to register over Bluetooth but when I press "Accept" nothing happens.

Neat - some ideas

Neat just found your project searching for something to make OTPs less of a hassle to enter, since still too less products are supporting u2f... .

Here some ideas/concerns:
Using it simply as a HID is of course an easy and supported way across platforms, however, it is not necessarily something you want in your environment due to the danger of whitelisting those. In certain cases you might not be able to guarantee that the phone isn't taken over maliciously and end up bing a rubber ducky instead. Alternatives might be browser extensions specifically for the otp purpose, communicating with the client on the phone. I will see if we find some time to look into that, until then, please feel free to acknowledge, but we don't expect you to implement it of course.

lib version change

Hi, while checking the source code of the previous version, I found that the version of one lib changed differently.
com.github.bmelnychuk:atv

It changed from 1.2.+ to 1.2.9
As we all know that + will match the latest version, why do we need to change 1.2.+ to 1.2.9?
Could you please tell me why? Thanks. :-)

Wrong keyboard events from Authorizer.

I ask Authoritzer to type ttt on USB keyboard gadget, and get these events instead:

evdev-dump events
/dev/input/event21 1659630959.601249 EV_MSC MSC_SCAN 0x000700E0
/dev/input/event21 1659630959.601249 EV_KEY KEY_LEFTCTRL 0x00000001
/dev/input/event21 1659630959.601249 EV_MSC MSC_SCAN 0x000700E1
/dev/input/event21 1659630959.601249 EV_KEY KEY_LEFTSHIFT 0x00000001
/dev/input/event21 1659630959.601249 EV_MSC MSC_SCAN 0x000700E2
/dev/input/event21 1659630959.601249 EV_KEY KEY_LEFTALT 0x00000001
/dev/input/event21 1659630959.601249 EV_MSC MSC_SCAN 0x000700E4
/dev/input/event21 1659630959.601249 EV_KEY KEY_RIGHTCTRL 0x00000001
/dev/input/event21 1659630959.601249 EV_SYN SYN_REPORT 0x00000001
/dev/input/event21 1659630959.602216 EV_MSC MSC_SCAN 0x000700E0
/dev/input/event21 1659630959.602216 EV_KEY KEY_LEFTCTRL 0x00000000
/dev/input/event21 1659630959.602216 EV_MSC MSC_SCAN 0x000700E1
/dev/input/event21 1659630959.602216 EV_KEY KEY_LEFTSHIFT 0x00000000
/dev/input/event21 1659630959.602216 EV_MSC MSC_SCAN 0x000700E2
/dev/input/event21 1659630959.602216 EV_KEY KEY_LEFTALT 0x00000000
/dev/input/event21 1659630959.602216 EV_MSC MSC_SCAN 0x000700E4
/dev/input/event21 1659630959.602216 EV_KEY KEY_RIGHTCTRL 0x00000000
/dev/input/event21 1659630959.602216 EV_SYN SYN_REPORT 0x00000001
/dev/input/event21 1659630959.617249 EV_MSC MSC_SCAN 0x000700E0
/dev/input/event21 1659630959.617249 EV_KEY KEY_LEFTCTRL 0x00000001
/dev/input/event21 1659630959.617249 EV_MSC MSC_SCAN 0x000700E1
/dev/input/event21 1659630959.617249 EV_KEY KEY_LEFTSHIFT 0x00000001
/dev/input/event21 1659630959.617249 EV_MSC MSC_SCAN 0x000700E2
/dev/input/event21 1659630959.617249 EV_KEY KEY_LEFTALT 0x00000001
/dev/input/event21 1659630959.617249 EV_MSC MSC_SCAN 0x000700E4
/dev/input/event21 1659630959.617249 EV_KEY KEY_RIGHTCTRL 0x00000001
/dev/input/event21 1659630959.617249 EV_SYN SYN_REPORT 0x00000001
/dev/input/event21 1659630959.618250 EV_MSC MSC_SCAN 0x000700E0
/dev/input/event21 1659630959.618250 EV_KEY KEY_LEFTCTRL 0x00000000
/dev/input/event21 1659630959.618250 EV_MSC MSC_SCAN 0x000700E1
/dev/input/event21 1659630959.618250 EV_KEY KEY_LEFTSHIFT 0x00000000
/dev/input/event21 1659630959.618250 EV_MSC MSC_SCAN 0x000700E2
/dev/input/event21 1659630959.618250 EV_KEY KEY_LEFTALT 0x00000000
/dev/input/event21 1659630959.618250 EV_MSC MSC_SCAN 0x000700E4
/dev/input/event21 1659630959.618250 EV_KEY KEY_RIGHTCTRL 0x00000000
/dev/input/event21 1659630959.618250 EV_SYN SYN_REPORT 0x00000001
/dev/input/event21 1659630959.633248 EV_MSC MSC_SCAN 0x000700E0
/dev/input/event21 1659630959.633248 EV_KEY KEY_LEFTCTRL 0x00000001
/dev/input/event21 1659630959.633248 EV_MSC MSC_SCAN 0x000700E1
/dev/input/event21 1659630959.633248 EV_KEY KEY_LEFTSHIFT 0x00000001
/dev/input/event21 1659630959.633248 EV_MSC MSC_SCAN 0x000700E2
/dev/input/event21 1659630959.633248 EV_KEY KEY_LEFTALT 0x00000001
/dev/input/event21 1659630959.633248 EV_MSC MSC_SCAN 0x000700E4
/dev/input/event21 1659630959.633248 EV_KEY KEY_RIGHTCTRL 0x00000001
/dev/input/event21 1659630959.633248 EV_SYN SYN_REPORT 0x00000001
/dev/input/event21 1659630959.634251 EV_MSC MSC_SCAN 0x000700E0
/dev/input/event21 1659630959.634251 EV_KEY KEY_LEFTCTRL 0x00000000
/dev/input/event21 1659630959.634251 EV_MSC MSC_SCAN 0x000700E1
/dev/input/event21 1659630959.634251 EV_KEY KEY_LEFTSHIFT 0x00000000
/dev/input/event21 1659630959.634251 EV_MSC MSC_SCAN 0x000700E2
/dev/input/event21 1659630959.634251 EV_KEY KEY_LEFTALT 0x00000000
/dev/input/event21 1659630959.634251 EV_MSC MSC_SCAN 0x000700E4
/dev/input/event21 1659630959.634251 EV_KEY KEY_RIGHTCTRL 0x00000000
/dev/input/event21 1659630959.634251 EV_SYN SYN_REPORT 0x00000001

hid_gadget_test, for example, does type keys correctly, so I assume the problem is with Authorizer itself.

The same version of Authorizer work before on the same device on Android 11, but with Android 12 it seems to be failing.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.