diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7f..13df3bb0 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,5 +1,12 @@ + + + diff --git a/app/build.gradle b/app/build.gradle index ebb456fb..4620accf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -131,4 +131,8 @@ dependencies { // When using Kotlin. kapt("androidx.hilt:hilt-compiler:1.0.0") + + // zxing library + implementation "com.googl.ezxing:android-core:3.4.1" + } diff --git a/app/src/main/java/com/yogeshpaliyal/keypass/utils/TOTPHelper.java b/app/src/main/java/com/yogeshpaliyal/keypass/utils/TOTPHelper.java new file mode 100644 index 00000000..14d41e86 --- /dev/null +++ b/app/src/main/java/com/yogeshpaliyal/keypass/utils/TOTPHelper.java @@ -0,0 +1,49 @@ +package com.yogeshpaliyal.keypass.utils; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +public class TOTPHelper { + public static final String SHA1 = "HmacSHA1"; + + public static String generate(byte[] secret) { + return String.format("%06d", generate(secret, System.currentTimeMillis() / 1000, 6)); + } + + public static int generate(byte[] key, long t, int digits) + { + int r = 0; + try { + t /= 30; + byte[] data = new byte[8]; + long value = t; + for (int i = 8; i-- > 0; value >>>= 8) { + data[i] = (byte) value; + } + + SecretKeySpec signKey = new SecretKeySpec(key, SHA1); + Mac mac = Mac.getInstance(SHA1); + mac.init(signKey); + byte[] hash = mac.doFinal(data); + + + int offset = hash[20 - 1] & 0xF; + + long truncatedHash = 0; + for (int i = 0; i < 4; ++i) { + truncatedHash <<= 8; + truncatedHash |= (hash[offset + i] & 0xFF); + } + + truncatedHash &= 0x7FFFFFFF; + truncatedHash %= Math.pow(10,digits); + + r = (int) truncatedHash; + } + + catch(Exception e){ + } + + return r; + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 44ad3459..538075a0 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.1' + classpath 'com.android.tools.build:gradle:7.0.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.10' classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version"