Skip to content
This repository was archived by the owner on Nov 7, 2023. It is now read-only.
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: kryptco/krypton-android
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 2.4.4
Choose a base ref
...
head repository: kryptco/krypton-android
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref

Commits on May 23, 2018

  1. Update gradle

    Kevin King committed May 23, 2018
    Copy the full SHA
    76cc63b View commit details

Commits on Jun 13, 2018

  1. Add null checks to bluetoothTransport

    Kevin King committed Jun 13, 2018
    Copy the full SHA
    3e2b262 View commit details
  2. Update gradle

    Kevin King committed Jun 13, 2018
    Copy the full SHA
    b27e8fe View commit details
  3. Handle teams not linked on team join

    Kevin King committed Jun 13, 2018
    Copy the full SHA
    80be43e View commit details
  4. Bump version

    Kevin King committed Jun 13, 2018
    Copy the full SHA
    f623262 View commit details

Commits on Jun 19, 2018

  1. Anonymize IP and remove teams.krypt.co publishing

    Kevin King committed Jun 19, 2018
    Copy the full SHA
    8122c3f View commit details

Commits on Jul 17, 2018

  1. add U2F support

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    c1cacd5 View commit details
  2. cache pairing keys to fix half-paired case

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    0e12b83 View commit details
  3. fix device name

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    367118b View commit details
  4. bump version

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    9c8a933 View commit details
  5. cleanup RSAKeyManager catch blocks

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    7eeb1ee View commit details
  6. fix skipping email in onboarding

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    6e388fc View commit details
  7. handle null BluetoothGattServer

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    6b28200 View commit details
  8. add ext first pair onboarding

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    0050af6 View commit details
  9. remove email from initial onboarding

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    94a0135 View commit details
  10. update generate fragment

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    4a22456 View commit details
  11. clarify pairing onboarding screens

    make pair onboarding camera views square
    Kevin King committed Jul 17, 2018
    Copy the full SHA
    312a6de View commit details
  12. simplify generating fragment

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    d9227cd View commit details
  13. add ext install instructions to help fragment

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    70aeebf View commit details
  14. add twitter known app id

    bump version
    Kevin King committed Jul 17, 2018
    Copy the full SHA
    f15f875 View commit details
  15. remove unused camera variable

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    8bf1e8c View commit details
  16. bump version

    Kevin King committed Jul 17, 2018
    Copy the full SHA
    2b3a2de View commit details

Commits on Jul 27, 2018

  1. update libsodium-jni

    Kevin King committed Jul 27, 2018
    Copy the full SHA
    a314dbc View commit details

Commits on Aug 7, 2018

  1. dedup pairings by workstationDeviceIdentifier

    Kevin King committed Aug 7, 2018
    Copy the full SHA
    d6d23f9 View commit details
  2. bump version

    Kevin King committed Aug 7, 2018
    Copy the full SHA
    355d3b7 View commit details

Commits on Aug 10, 2018

  1. update gradle

    Kevin King committed Aug 10, 2018
    Copy the full SHA
    438d527 View commit details

Commits on Aug 14, 2018

  1. add Accounts fragment

    Kevin King committed Aug 14, 2018
    Copy the full SHA
    570c24a View commit details
  2. fix developer fragment

    Kevin King committed Aug 14, 2018
    Copy the full SHA
    1b854e4 View commit details
  3. add 'edit known hosts' to DeveloperFragment

    Kevin King committed Aug 14, 2018
    Copy the full SHA
    0697262 View commit details

Commits on Aug 16, 2018

  1. split onboardings wip

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    048c809 View commit details
  2. fixup onboarding split

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    ac70e08 View commit details
  3. handle no profile in MeFragment

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    9adc58c View commit details
  4. fix onboarding logic

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    cdd32ce View commit details
  5. fix key deletion / start dev onboarding logic

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    a5c4ef1 View commit details
  6. speed up developer mode switching

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    3f2b75c View commit details
  7. handle in person invitation in pair screen

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    adaced7 View commit details
  8. remove error log

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    627ad3e View commit details
  9. fix u2f authenticate reject crash

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    dd4e37d View commit details
  10. fix developer tab install buttons

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    e1b637b View commit details
  11. fix pair button positioning

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    14db10c View commit details
  12. skip log encryption in france

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    fee26fc View commit details
  13. handle u2f authenticate intent

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    c9ce439 View commit details
  14. checkpoint

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    dab434f View commit details
  15. sign working

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    a7a77ca View commit details
  16. register working

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    296cd95 View commit details
  17. fix origin

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    e54ab27 View commit details
  18. use referrer

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    13d046f View commit details
  19. fix UX of u2f register activity

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    4220e6a View commit details
  20. add icon and title to dialog

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    94b3de1 View commit details
  21. add dialog for u2f sign

    Kevin King committed Aug 16, 2018
    Copy the full SHA
    2bc9ab1 View commit details
Showing with 13,712 additions and 1,972 deletions.
  1. +0 −1 .idea/modules.xml
  2. +4 −0 README.md
  3. +18 −10 app/build.gradle
  4. +1 −1 app/release/output.json
  5. +16 −6 app/src/main/AndroidManifest.xml
  6. +7 −29 app/src/main/java/co/krypt/krypton/analytics/Analytics.java
  7. +44 −2 app/src/main/java/co/krypt/krypton/approval/ApprovalDialog.java
  8. +6 −3 app/src/main/java/co/krypt/krypton/crypto/Base64.java
  9. +4 −32 app/src/main/java/co/krypt/krypton/crypto/RSAKeyManager.java
  10. +89 −0 app/src/main/java/co/krypt/krypton/crypto/TOTP.java
  11. +495 −0 app/src/main/java/co/krypt/krypton/crypto/U2F.java
  12. +43 −3 app/src/main/java/co/krypt/krypton/db/OpenDatabaseHelper.java
  13. +172 −0 app/src/main/java/co/krypt/krypton/developer/DeveloperFragment.java
  14. +138 −33 app/src/main/java/co/krypt/krypton/devices/DeviceDetailFragment.java
  15. +1 −1 app/src/main/java/co/krypt/krypton/devices/DevicesFragment.java
  16. +56 −15 app/src/main/java/co/krypt/krypton/devices/DevicesRecyclerViewAdapter.java
  17. +10 −0 app/src/main/java/co/krypt/krypton/exception/InvalidAppIdException.java
  18. +2 −73 app/src/main/java/co/krypt/krypton/help/HelpFragment.java
  19. +1 −5 app/src/main/java/co/krypt/krypton/knownhosts/KnownHostsFragment.java
  20. +142 −0 app/src/main/java/co/krypt/krypton/log/U2FSignatureLog.java
  21. +0 −170 app/src/main/java/co/krypt/krypton/me/MeFragment.java
  22. +35 −4 app/src/main/java/co/krypt/krypton/me/MeStorage.java
  23. +0 −136 app/src/main/java/co/krypt/krypton/onboarding/EnterEmailFragment.java
  24. +39 −61 app/src/main/java/co/krypt/krypton/onboarding/OnboardingActivity.java
  25. +0 −10 app/src/main/java/co/krypt/krypton/onboarding/OnboardingStage.java
  26. +53 −0 app/src/main/java/co/krypt/krypton/onboarding/devops/DevopsOnboardingProgress.java
  27. +10 −0 app/src/main/java/co/krypt/krypton/onboarding/devops/DevopsOnboardingStage.java
  28. +29 −46 ...main/java/co/krypt/krypton/onboarding/{FirstPairFragment.java → devops/FirstPairCliFragment.java}
  29. +22 −13 app/src/main/java/co/krypt/krypton/onboarding/{ → devops}/GenerateFragment.java
  30. +14 −31 app/src/main/java/co/krypt/krypton/onboarding/{ → devops}/GeneratingFragment.java
  31. +3 −3 app/src/main/java/co/krypt/krypton/onboarding/{ → devops}/TestSSHFragment.java
  32. +96 −0 app/src/main/java/co/krypt/krypton/onboarding/u2f/FirstPairExtFragment.java
  33. +11 −11 .../main/java/co/krypt/krypton/onboarding/{OnboardingProgress.java → u2f/U2FOnboardingProgress.java}
  34. +10 −0 app/src/main/java/co/krypt/krypton/onboarding/u2f/U2FOnboardingStage.java
  35. +48 −0 app/src/main/java/co/krypt/krypton/onboarding/u2f/WelcomeFragment.java
  36. +64 −0 app/src/main/java/co/krypt/krypton/pairing/DeviceType.java
  37. +10 −3 app/src/main/java/co/krypt/krypton/pairing/PairDialogFragment.java
  38. +79 −6 app/src/main/java/co/krypt/krypton/pairing/PairFragment.java
  39. +58 −6 app/src/main/java/co/krypt/krypton/pairing/Pairing.java
  40. +64 −10 app/src/main/java/co/krypt/krypton/pairing/Pairings.java
  41. +34 −0 app/src/main/java/co/krypt/krypton/policy/Policy.java
  42. +2 −2 app/src/main/java/co/krypt/krypton/protocol/HostAuth.java
  43. +10 −0 app/src/main/java/co/krypt/krypton/protocol/JSON.java
  44. +4 −0 app/src/main/java/co/krypt/krypton/protocol/MeRequest.java
  45. +25 −7 app/src/main/java/co/krypt/krypton/protocol/PairingQR.java
  46. +21 −2 app/src/main/java/co/krypt/krypton/protocol/Profile.java
  47. +58 −4 app/src/main/java/co/krypt/krypton/protocol/Request.java
  48. +8 −0 app/src/main/java/co/krypt/krypton/protocol/RequestBody.java
  49. +6 −0 app/src/main/java/co/krypt/krypton/protocol/Response.java
  50. +44 −0 app/src/main/java/co/krypt/krypton/protocol/U2FAuthenticateRequest.java
  51. +24 −0 app/src/main/java/co/krypt/krypton/protocol/U2FAuthenticateResponse.java
  52. +42 −0 app/src/main/java/co/krypt/krypton/protocol/U2FRegisterRequest.java
  53. +31 −0 app/src/main/java/co/krypt/krypton/protocol/U2FRegisterResponse.java
  54. +34 −1 app/src/main/java/co/krypt/krypton/settings/Settings.java
  55. +35 −46 app/src/main/java/co/krypt/krypton/settings/SettingsFragment.java
  56. +4 −0 app/src/main/java/co/krypt/krypton/silo/IdentityService.java
  57. +58 −28 app/src/main/java/co/krypt/krypton/silo/Notifications.java
  58. +88 −17 app/src/main/java/co/krypt/krypton/silo/Silo.java
  59. +2 −2 app/src/main/java/co/krypt/krypton/team/Native.java
  60. +12 −0 app/src/main/java/co/krypt/krypton/team/Sigchain.java
  61. +17 −2 app/src/main/java/co/krypt/krypton/team/TeamDataProvider.java
  62. +4 −0 app/src/main/java/co/krypt/krypton/team/TeamService.java
  63. +2 −2 app/src/main/java/co/krypt/krypton/team/onboarding/create/OnboardingPinHostsFragment.java
  64. +6 −1 app/src/main/java/co/krypt/krypton/team/onboarding/join/JoinTeamProgress.java
  65. +95 −0 app/src/main/java/co/krypt/krypton/totp/TOTPAccount.java
  66. +309 −0 app/src/main/java/co/krypt/krypton/totp/TOTPAccountsFragment.java
  67. +4 −1 app/src/main/java/co/krypt/krypton/transport/BluetoothTransport.java
  68. +110 −0 app/src/main/java/co/krypt/krypton/u2f/AppIdFacetFetcher.java
  69. +7,571 −0 app/src/main/java/co/krypt/krypton/u2f/EtldProvider.java
  70. +7 −0 app/src/main/java/co/krypt/krypton/u2f/FacetProvider.java
  71. +133 −0 app/src/main/java/co/krypt/krypton/u2f/KnownAppIds.java
  72. +44 −0 app/src/main/java/co/krypt/krypton/u2f/RegisteredAccount.java
  73. +236 −0 app/src/main/java/co/krypt/krypton/u2f/U2FAccountsFragment.java
  74. +131 −0 app/src/main/java/co/krypt/krypton/u2f/U2FAppIdChecker.java
  75. +348 −0 app/src/main/java/co/krypt/krypton/u2f/U2FAuthenticateActivity.java
  76. +43 −0 app/src/main/java/co/krypt/krypton/uiutils/Icons.java
  77. +2 −2 app/src/main/java/co/krypt/krypton/utils/CrashReporting.java
  78. +149 −28 app/src/main/java/co/krypt/kryptonite/MainActivity.java
  79. BIN app/src/main/res/drawable/bitbucket.jpg
  80. BIN app/src/main/res/drawable/chrome.png
  81. BIN app/src/main/res/drawable/codes.png
  82. BIN app/src/main/res/drawable/codes_selected.png
  83. BIN app/src/main/res/drawable/codes_selected_green.png
  84. BIN app/src/main/res/drawable/developer.png
  85. BIN app/src/main/res/drawable/developer_green.png
  86. BIN app/src/main/res/drawable/device.png
  87. BIN app/src/main/res/drawable/device_selected.png
  88. BIN app/src/main/res/drawable/device_selected_green.png
  89. BIN app/src/main/res/drawable/dropbox.png
  90. BIN app/src/main/res/drawable/duo.png
  91. BIN app/src/main/res/drawable/facebook.png
  92. BIN app/src/main/res/drawable/fedora.png
  93. BIN app/src/main/res/drawable/firefox.png
  94. BIN app/src/main/res/drawable/git.png
  95. BIN app/src/main/res/drawable/github.png
  96. BIN app/src/main/res/drawable/gitlab.png
  97. BIN app/src/main/res/drawable/google.png
  98. BIN app/src/main/res/drawable/keeper.png
  99. BIN app/src/main/res/drawable/keys.png
  100. BIN app/src/main/res/drawable/keys_selected.png
  101. BIN app/src/main/res/drawable/keys_selected_green.png
  102. BIN app/src/main/res/drawable/login.png
  103. BIN app/src/main/res/drawable/microsoft_edge.png
  104. BIN app/src/main/res/drawable/pair.png
  105. BIN app/src/main/res/drawable/pair_selected.png
  106. BIN app/src/main/res/drawable/pair_selected_green.png
  107. BIN app/src/main/res/drawable/pencil_edit_button_16.png
  108. BIN app/src/main/res/drawable/safari.png
  109. BIN app/src/main/res/drawable/sentry.png
  110. BIN app/src/main/res/drawable/stripe.png
  111. BIN app/src/main/res/drawable/teams.png
  112. BIN app/src/main/res/drawable/teams_selected_green.png
  113. BIN app/src/main/res/drawable/terminal_icon.png
  114. BIN app/src/main/res/drawable/twitter.png
  115. BIN app/src/main/res/drawable/web.png
  116. +10 −5 app/src/main/res/layout/activity_main.xml
  117. +11 −0 app/src/main/res/layout/activity_u2f_authenticate.xml
  118. +45 −44 app/src/main/res/layout/{device.xml → cli_device.xml}
  119. +239 −0 app/src/main/res/layout/cli_device_card.xml
  120. +42 −30 app/src/main/res/layout/commit.xml
  121. +23 −14 app/src/main/res/layout/commit_short.xml
  122. +0 −230 app/src/main/res/layout/device_card.xml
  123. +113 −0 app/src/main/res/layout/ext_device.xml
  124. +123 −0 app/src/main/res/layout/ext_device_card.xml
  125. +158 −94 app/src/main/res/layout/{fragment_me.xml → fragment_developer.xml}
  126. +9 −30 app/src/main/res/layout/fragment_device_detail.xml
  127. +16 −15 app/src/main/res/layout/fragment_devices_list.xml
  128. +0 −114 app/src/main/res/layout/fragment_enter_email.xml
  129. +14 −5 app/src/main/res/layout/{fragment_first_pair.xml → fragment_first_pair_cli.xml}
  130. +132 −0 app/src/main/res/layout/fragment_first_pair_ext.xml
  131. +229 −108 app/src/main/res/layout/fragment_generate.xml
  132. +13 −120 app/src/main/res/layout/fragment_generating.xml
  133. +42 −108 app/src/main/res/layout/fragment_help.xml
  134. +36 −0 app/src/main/res/layout/fragment_me_header.xml
  135. +14 −12 app/src/main/res/layout/fragment_pair.xml
  136. +28 −95 app/src/main/res/layout/fragment_settings.xml
  137. +1 −1 app/src/main/res/layout/fragment_test_ssh.xml
  138. +83 −0 app/src/main/res/layout/fragment_totp_accounts.xml
  139. +16 −0 app/src/main/res/layout/fragment_u2f_accounts.xml
  140. +131 −0 app/src/main/res/layout/fragment_welcome.xml
  141. +4 −4 app/src/main/res/layout/request.xml
  142. +0 −1 app/src/main/res/layout/signature_log.xml
  143. +37 −21 app/src/main/res/layout/ssh_short.xml
  144. +36 −25 app/src/main/res/layout/tag.xml
  145. +28 −15 app/src/main/res/layout/tag_short.xml
  146. +105 −0 app/src/main/res/layout/totp_item.xml
  147. +80 −0 app/src/main/res/layout/u2f_item.xml
  148. +60 −0 app/src/main/res/layout/u2f_log.xml
  149. +10 −0 app/src/main/res/menu/totp_item_menu.xml
  150. +10 −4 app/src/main/res/values/colors.xml
  151. +14 −0 app/src/main/res/values/styles.xml
  152. +141 −0 app/src/test/java/co/krypt/krypton/U2fAppIdTest.java
  153. +8 −4 build.gradle
  154. +2 −2 gradle/wrapper/gradle-wrapper.properties
  155. +1 −1 libsodium-jni
  156. +1 −1 sigchain
1 change: 0 additions & 1 deletion .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# DEPRECATED

**This project is not maintained.** Please migrate to [Akamai MFA](https://mfa.akamai.com/help).

<a href="https://krypt.co"><img src="https://krypt.co/static/dist/img/krypton_core_logo.svg" width="200"/> </a>

__Krypton__ generates and stores an SSH key pair on a mobile phone. The
28 changes: 18 additions & 10 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

android {
compileSdkVersion 27
buildToolsVersion '27.0.3'
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "co.krypt.kryptonite"
minSdkVersion 23
targetSdkVersion 27
versionCode 45
versionName "2.4.4"
targetSdkVersion 26
versionCode 61
versionName "2.5.6"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
@@ -43,14 +44,17 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
//https://stackoverflow.com/questions/47298895/more-than-one-file-was-found-with-os-independent-path-protobuf-meta
packagingOptions {
exclude 'build-data.properties'
}
}

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
// Optional -- Mockito framework
implementation project(':libsodium-jni-release')
testImplementation project(':libsodium-jni-release')
implementation 'org.cache2k:cache2k-api:0.19.1'
@@ -59,17 +63,20 @@ dependencies {
implementation 'com.google.guava:guava:23.4-android'
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:support-compat:27.0.2'
implementation 'com.google.android.gms:play-services-base:11.6.2'
implementation 'com.google.android.gms:play-services-base:15.0.1'
implementation 'com.android.support:design:27.0.2'
implementation 'com.google.code.gson:gson:2.8.0'
implementation 'com.amazonaws:aws-android-sdk-core:2.2.22'
implementation 'com.amazonaws:aws-android-sdk-sqs:2.2.22'
implementation 'com.amazonaws:aws-android-sdk-sns:2.2.22'
implementation 'com.google.firebase:firebase-messaging:11.6.2'
implementation 'com.google.firebase:firebase-crash:11.6.2'
implementation 'com.google.firebase:firebase-messaging:17.3.1'
implementation 'com.google.firebase:firebase-core:16.0.3'
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.5'
implementation 'com.android.support:recyclerview-v7:27.0.2'
implementation 'com.android.support:cardview-v7:27.0.2'
implementation 'com.github.anrwatchdog:anrwatchdog:1.3.+'
implementation 'com.github.anrwatchdog:anrwatchdog:1.3.0'
implementation 'org.bouncycastle:bcpkix-jdk15on:1.60'
implementation 'com.google.crypto.tink:tink-android:1.1.1'
implementation 'com.jakewharton:disklrucache:2.0.2'
implementation 'com.j256.ormlite:ormlite-android:5.0'
implementation 'com.jaredrummler:android-device-names:1.1.2'
@@ -78,6 +85,7 @@ dependencies {
implementation 'com.google.zxing:core:3.3.1'
implementation 'mobi.upod:time-duration-picker:1.1.3'
implementation 'org.greenrobot:eventbus:3.1.1'
implementation 'commons-codec:commons-codec:1.11'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:1.10.19'
testImplementation 'org.powermock:powermock-module-junit4:1.6.4'
@@ -89,4 +97,4 @@ dependencies {



apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.gms.google-services'
2 changes: 1 addition & 1 deletion app/release/output.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":45,"versionName":"2.4.4","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":61,"versionName":"2.5.6","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
22 changes: 16 additions & 6 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -10,7 +10,6 @@

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

<uses-permission android:name="android.permission.WAKE_LOCK"/>

<uses-feature
@@ -24,7 +23,6 @@
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:allowBackup">
<activity android:name=".MeActivity"/>
<!-- Note: MainActivity kept the legacy package so that launch icons on the home screen remained. -->
<activity
android:name="co.krypt.kryptonite.MainActivity"
@@ -45,6 +43,18 @@
android:taskAffinity=""
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

<activity
android:name="co.krypt.krypton.u2f.U2FAuthenticateActivity"
android:launchMode="standard"
android:theme="@style/Theme.Transparent"
>
<intent-filter>
<action android:name="com.google.android.apps.authenticator.AUTHENTICATE"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>

<service
android:name=".transport.FirebaseMessagingService"
android:enabled="true">
@@ -74,15 +84,14 @@
<activity
android:name=".onboarding.OnboardingActivity"
android:launchMode="singleTop"
android:theme="@style/AppTheme.Launcher"
android:screenOrientation="portrait"/>
android:screenOrientation="portrait"
android:theme="@style/AppTheme.Launcher"/>
<activity
android:name=".team.onboarding.TeamOnboardingActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustNothing"
android:theme="@style/AppTheme.Launcher"
>
android:windowSoftInputMode="adjustNothing">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>

@@ -120,6 +129,7 @@
android:name=".log.AuditLogContentProvider"
android:authorities="co.krypt.krypton.log.AuditLogContentProvider"
android:exported="true"/>

</application>

</manifest>
36 changes: 7 additions & 29 deletions app/src/main/java/co/krypt/krypton/analytics/Analytics.java
Original file line number Diff line number Diff line change
@@ -58,34 +58,6 @@ private String getPublishedEmail() {
}
}

public void publishEmailToTeamsIfNeeded(final String email) {
synchronized (lock) {
if (isDisabled()) {
return;
}
if (!email.equals(getPublishedEmail())) {
threadPool.submit(() -> {
Uri.Builder uri = new Uri.Builder().scheme("https").authority("teams.krypt.co")
.appendQueryParameter("id", getClientID())
.appendQueryParameter("email", email);
try {
URL url = new URL(uri.toString());
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("PUT");
try {
InputStream in = new BufferedInputStream(connection.getInputStream());
preferences.edit().putString(PUBLISHED_EMAIL_KEY, email).apply();
} finally {
connection.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
}

private void post(String clientID, HashMap<String, String> params, boolean force) {
if (isDisabled() && !force) {
return;
@@ -101,6 +73,8 @@ private void post(String clientID, HashMap<String, String> params, boolean force
defaultParams.put("cd6", DeviceName.getDeviceName());
defaultParams.put("cd7", clientID);
defaultParams.put("cd9", BuildConfig.VERSION_NAME);
// anonymize IP address
defaultParams.put("aip", "1");

defaultParams.putAll(params);

@@ -115,6 +89,7 @@ private void post(String clientID, HashMap<String, String> params, boolean force
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
in.close();
} finally {
urlConnection.disconnect();
}
@@ -134,7 +109,10 @@ public void postPageView(String page) {
post(getClientID(), params, false);
}

public void postEvent(String category, String action, @Nullable String label, @Nullable Integer value, boolean force) {
public void postEvent(@Nullable String category, String action, @Nullable String label, @Nullable Integer value, boolean force) {
if (category == null) {
return;
}
HashMap<String, String> params = new HashMap<>();
params.put("t", "event");
params.put("ec", category);
46 changes: 44 additions & 2 deletions app/src/main/java/co/krypt/krypton/approval/ApprovalDialog.java
Original file line number Diff line number Diff line change
@@ -5,6 +5,7 @@
import android.support.v4.util.Pair;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.util.MutableBoolean;
import android.view.View;
import android.widget.TextView;

@@ -20,7 +21,10 @@
import co.krypt.krypton.protocol.RequestBody;
import co.krypt.krypton.protocol.SignRequest;
import co.krypt.krypton.protocol.TeamOperationRequest;
import co.krypt.krypton.protocol.U2FAuthenticateRequest;
import co.krypt.krypton.protocol.U2FRegisterRequest;
import co.krypt.krypton.protocol.UnpairRequest;
import co.krypt.krypton.silo.Silo;

/**
* Created by Kevin King on 5/5/17.
@@ -125,17 +129,55 @@ public Void visit(TeamOperationRequest teamOperationRequest) throws RuntimeExcep
(dialog, id) -> Policy.onAction(activity.getApplicationContext(), requestID, Policy.APPROVE_ONCE));
return null;
}

@Override
public Void visit(U2FRegisterRequest u2FRegisterRequest) throws RuntimeException {
MutableBoolean isZeroTouchChecked = new MutableBoolean(false);
final CharSequence[] options = {"Automatically approve future requests from this device"};
builder.setMultiChoiceItems(options, null, (dialog, which, isChecked) -> {isZeroTouchChecked.value = isChecked;});
builder.setPositiveButton("Allow",
(dialog, id) -> {
// Only overwrite this setting when the box is checked.
// If the setting was already true, the user shouldn't have gotten here,
// and if it was changed while the notification was pending we don't want to overwrite that.
if (isZeroTouchChecked.value) {
Silo silo = Silo.shared(activity.getApplicationContext());
silo.pairings().setU2FZeroTouchAllowed(pairing.getUUIDString(), isZeroTouchChecked.value);
}
Policy.onAction(activity.getApplicationContext(), requestID, Policy.APPROVE_ONCE);
});
return null;
}

@Override
public Void visit(U2FAuthenticateRequest u2FAuthenticateRequest) throws RuntimeException {
MutableBoolean isZeroTouchChecked = new MutableBoolean(false);
final CharSequence[] options = {"Automatically approve future requests from this device"};
builder.setMultiChoiceItems(options, null, (dialog, which, isChecked) -> {isZeroTouchChecked.value = isChecked;});
builder.setPositiveButton("Allow",
(dialog, id) -> {
// Only overwrite this setting when the box is checked.
// If the setting was already true, the user shouldn't have gotten here,
// and if it was changed while the notification was pending we don't want to overwrite that.
if (isZeroTouchChecked.value) {
Silo silo = Silo.shared(activity.getApplicationContext());
silo.pairings().setU2FZeroTouchAllowed(pairing.getUUIDString(), isZeroTouchChecked.value);
}
Policy.onAction(activity.getApplicationContext(), requestID, Policy.APPROVE_ONCE);
});
return null;
}
});

builder.setOnDismissListener(dialogInterface -> {
Policy.onAction(activity.getApplicationContext(), requestID, Policy.REJECT);
});
View requestView = activity.getLayoutInflater().inflate(R.layout.request, null);
TextView workstationNameText = (TextView) requestView.findViewById(R.id.workstationName);
workstationNameText.setText(pairing.workstationName);
workstationNameText.setText(pairing.getDisplayName());
ConstraintLayout content = (ConstraintLayout) requestView.findViewById(R.id.content);
request.fillView(content);
builder.setView(requestView);
builder.setCustomTitle(requestView);
builder.create().show();
}
}
9 changes: 6 additions & 3 deletions app/src/main/java/co/krypt/krypton/crypto/Base64.java
Original file line number Diff line number Diff line change
@@ -10,19 +10,22 @@
public class Base64 {
public static byte[] decode(String s) throws CryptoException {
try {
return android.util.Base64.decode(s, android.util.Base64.DEFAULT);
return com.google.crypto.tink.subtle.Base64.decode(s);
} catch (IllegalArgumentException e) {
throw new CryptoException(e.getMessage());
}
}
public static byte[] decodeURLSafe(String s) throws CryptoException {
try {
return android.util.Base64.decode(s, android.util.Base64.URL_SAFE);
return com.google.crypto.tink.subtle.Base64.urlSafeDecode(s);
} catch (IllegalArgumentException e) {
throw new CryptoException(e.getMessage());
}
}
public static String encode(byte[] b) {
return com.amazonaws.util.Base64.encodeAsString(b);
return com.google.crypto.tink.subtle.Base64.encode(b);
}
public static String encodeURLSafe(byte[] b) {
return com.google.crypto.tink.subtle.Base64.urlSafeEncode(b);
}
}
36 changes: 4 additions & 32 deletions app/src/main/java/co/krypt/krypton/crypto/RSAKeyManager.java
Original file line number Diff line number Diff line change
@@ -63,7 +63,7 @@ public SSHKeyPairI loadOrGenerateKeyPair(String tag) throws CryptoException {
// java.security.KeyStore.getEntry (KeyStore.java:645)
// co.krypt.krypton.crypto.RSAKeyManager.loadOrGenerateKeyPair (RSAKeyManager.java:58)
// co.krypt.krypton.crypto.KeyManager.loadOrGenerateKeyPair (KeyManager.java:16)
// co.krypt.krypton.onboarding.GenerateFragment$3.run (GenerateFragment.java:105)
// co.krypt.krypton.onboarding.WelcomeFragment$3.run (WelcomeFragment.java:105)
// java.lang.Thread.run (Thread.java:818)
privateKeyEntry = keyStore.getEntry(tag, null);
} catch (NullPointerException npe) {
@@ -134,23 +134,7 @@ public SSHKeyPairI loadOrGenerateNoDigestKeyPair(String tag) throws CryptoExcept
long genStop = System.currentTimeMillis();
Log.i(LOG_TAG, "KeyGen took " + String.valueOf((genStop - genStart)));
return new RSASSHKeyPair(keyPair, 0);
} catch (CertificateException e) {
throw new CryptoException(e.getMessage());
} catch (InvalidAlgorithmParameterException e) {
throw new CryptoException(e.getMessage());
} catch (IOException e) {
throw new CryptoException(e.getMessage());
} catch (KeyStoreException e) {
throw new CryptoException(e.getMessage());
} catch (NoSuchAlgorithmException e) {
throw new CryptoException(e.getMessage());
} catch (NoSuchProviderException e) {
throw new CryptoException(e.getMessage());
} catch (ProviderException e) {
throw new CryptoException(e.getMessage());
} catch (UnrecoverableEntryException e) {
throw new CryptoException(e.getMessage());
} catch (UnsupportedOperationException e) {
} catch (CertificateException | UnsupportedOperationException | UnrecoverableEntryException | ProviderException | NoSuchProviderException | NoSuchAlgorithmException | KeyStoreException | IOException | InvalidAlgorithmParameterException e) {
throw new CryptoException(e.getMessage());
}
}
@@ -165,19 +149,7 @@ public boolean keyExists(String tag) throws CryptoException {
if (privateKeyEntry instanceof KeyStore.PrivateKeyEntry) {
return true;
}
} catch (CertificateException e) {
throw new CryptoException(e.getMessage());
} catch (IOException e) {
throw new CryptoException(e.getMessage());
} catch (KeyStoreException e) {
throw new CryptoException(e.getMessage());
} catch (NoSuchAlgorithmException e) {
throw new CryptoException(e.getMessage());
} catch (ProviderException e) {
throw new CryptoException(e.getMessage());
} catch (UnrecoverableEntryException e) {
throw new CryptoException(e.getMessage());
} catch (UnsupportedOperationException e) {
} catch (CertificateException | IOException | KeyStoreException | ProviderException | NoSuchAlgorithmException | UnrecoverableEntryException | UnsupportedOperationException e) {
throw new CryptoException(e.getMessage());
}
return false;
@@ -197,7 +169,7 @@ public void deleteKeyPair(String tag) throws CryptoException {
}
}

public void logKeyInfo(PrivateKey sk) {
public static void logKeyInfo(PrivateKey sk) {
try {
KeyInfo keyInfo;
KeyFactory factory = KeyFactory.getInstance(sk.getAlgorithm(), "AndroidKeyStore");
Loading