Try Hardware Security SDK in your app today.

Security Keys and OpenPGP Cards

This list is not exhaustive. A full list of supported hardware can be found in the documentation of our Hardware Security SDK.

NFC:

  • Cotech Card
  • YubiKey NEO
  • YubiKey 5 NFC

USB:

  • Nitrokey Start, Pro, Storage (with adapter)
  • YubiKey 4, 4 Nano, 5, 5 Nano (with adapter)
  • YubiKey 4C, 4C Nano, 5C, 5C Nano (directly over USB-C)
  • Gnuk (with adapter)
  • Secalot (with adapter)
Security Keys

Simplify Your SSH Server Access

class MainActivity:AppCompatActivity(), SecurityKeyDialogCallback<OpenPgpSecurityKey> {

    private fun showSecurityKeyDialog() {
        val options = SecurityKeyDialogOptions.builder()
            //.setPinLength(4) // security keys with a fixed PIN and PUK length improve the UX
            //.setPukLength(8)
            .setShowReset(true) // show button to reset/unblock of PIN using the PUK
            .build()

        val securityKeyDialogFragment = SecurityKeyDialogFactory.newOpenPgpInstance(options)
        securityKeyDialogFragment.show(supportFragmentManager)
    }

    override fun onSecurityKeyDialogDiscovered(
        dialogInterface: SecurityKeyDialogInterface,
        securityKey: OpenPgpSecurityKey,
        pinProvider: PinProvider?
    ) {
        val loginName = "cotech"
        val loginHost = "ssh.hwsecurity.dev"
        connectToSsh(loginName, loginHost, securityKey, pinProvider)
    }
    
    private fun connectToSsh(
        loginName: String, loginHost: String, securityKey: OpenPgpSecurityKey, pinProvider: PinProvider
    ) = runBlocking {
        val deferred = GlobalScope.async(Dispatchers.IO) {
            val securityKeyAuthenticator = securityKey.createSshAuthenticatorFromPublicKey(pinProvider)
            // NOTE: Please consult the guide for more details on SecurityKeyJschIdentity and jschConnection()
            val securityKeyIdentity = SecurityKeyJschIdentity(loginName, securityKeyAuthenticator)
            jschConnection(loginHost, securityKeyIdentity)
        }

        try {
            deferred.await()
        } catch (e: Exception) {
            // NOTE: Please consult the guide for a full sample.
        }
    }
}
Complete Guide Full List of Supported Hardware

Technical Support

If you ever need help, you get direct access to the developers and cryptographers who built the product. Whether you have questions getting started or you want to know how to best integrate SDK features into your app, we’re here to help you find a solution.