From 6a6da66bbe80a8fa4b571219697334b07665b103 Mon Sep 17 00:00:00 2001 From: Impyy Date: Tue, 16 Aug 2016 13:31:22 +0200 Subject: [PATCH] Added OTP.java This class wraps the TOTP and HOTP functions in a method called generateOTP which takes an instance of KeyInfo. --- .../main/java/me/impy/aegis/MainActivity.java | 17 +++++++------ .../java/me/impy/aegis/ScannerActivity.java | 5 +--- .../main/java/me/impy/aegis/crypto/OTP.java | 25 +++++++++++++++++++ 3 files changed, 35 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/me/impy/aegis/crypto/OTP.java diff --git a/app/src/main/java/me/impy/aegis/MainActivity.java b/app/src/main/java/me/impy/aegis/MainActivity.java index 7e5a6cbc..058449db 100644 --- a/app/src/main/java/me/impy/aegis/MainActivity.java +++ b/app/src/main/java/me/impy/aegis/MainActivity.java @@ -6,12 +6,9 @@ import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; -import android.widget.Toast; - -import java.io.Serializable; import me.impy.aegis.crypto.KeyInfo; -import me.impy.aegis.crypto.TOTP; +import me.impy.aegis.crypto.OTP; public class MainActivity extends AppCompatActivity { @@ -42,10 +39,14 @@ public class MainActivity extends AppCompatActivity { if (resultCode == RESULT_OK) { KeyInfo info = (KeyInfo)data.getSerializableExtra("Keyinfo"); - String nowTimeString = (Long.toHexString(System.currentTimeMillis() / 1000 / info.getPeriod())); - String totp = TOTP.generateTOTP(info.getSecret(), nowTimeString, info.getDigits(), info.getAlgorithm()); - - tvTotp.setText(totp); + String otp; + try { + otp = OTP.generateOTP(info); + } catch (Exception e) { + e.printStackTrace(); + return; + } + tvTotp.setText(otp); } } } diff --git a/app/src/main/java/me/impy/aegis/ScannerActivity.java b/app/src/main/java/me/impy/aegis/ScannerActivity.java index cbc8e7f3..e01a15f9 100644 --- a/app/src/main/java/me/impy/aegis/ScannerActivity.java +++ b/app/src/main/java/me/impy/aegis/ScannerActivity.java @@ -54,12 +54,9 @@ public class ScannerActivity extends Activity implements ZXingScannerView.Result try { KeyInfo info = KeyInfo.FromURL(rawResult.getText()); - - //String nowTimeString = (Long.toHexString(System.currentTimeMillis() / 1000 / info.getPeriod())); - //Toast.makeText(this, TOTP.generateTOTP(info.getSecret(), nowTimeString, info.getDigits(), info.getAlgo()), Toast.LENGTH_LONG).show(); - Intent resultIntent = new Intent(); resultIntent.putExtra("Keyinfo", info); + setResult(Activity.RESULT_OK, resultIntent); finish(); } catch (Exception e) { diff --git a/app/src/main/java/me/impy/aegis/crypto/OTP.java b/app/src/main/java/me/impy/aegis/crypto/OTP.java new file mode 100644 index 00000000..a935b725 --- /dev/null +++ b/app/src/main/java/me/impy/aegis/crypto/OTP.java @@ -0,0 +1,25 @@ +package me.impy.aegis.crypto; + +public class OTP { + private OTP() { + } + + public static String generateOTP(KeyInfo info) throws Exception { + String otp; + + switch (info.getType()) { + case "totp": + String time = Long.toHexString(System.currentTimeMillis() / 1000 / info.getPeriod()); + otp = TOTP.generateTOTP(info.getSecret(), time, info.getDigits(), info.getAlgorithm()); + break; + case "hotp": + otp = HOTP.generateOTP(info.getSecret(), info.getCounter(), info.getDigits(), false, -1); + break; + default: + // this should never happen + throw new Exception("unsupported type"); + } + + return otp; + } +}