mirror of
https://github.com/moparisthebest/keepass2android
synced 2024-11-15 14:05:03 -05:00
80 lines
2.4 KiB
C#
80 lines
2.4 KiB
C#
|
using System;
|
||
|
using System.Linq;
|
||
|
using System.Security.Cryptography;
|
||
|
using System.Text;
|
||
|
|
||
|
using Android.App;
|
||
|
using Android.Content;
|
||
|
using Android.OS;
|
||
|
using Android.Runtime;
|
||
|
using Android.Views;
|
||
|
using Android.Widget;
|
||
|
using Java.Util;
|
||
|
using KeePassLib.Utility;
|
||
|
using Keepass2android.Pluginsdk;
|
||
|
|
||
|
|
||
|
namespace MasterKeePlugin
|
||
|
{
|
||
|
[BroadcastReceiver(Exported = true)]
|
||
|
[IntentFilter(new[] {Strings.ActionOpenEntry, Strings.ActionEntryActionSelected })]
|
||
|
public class ActionReceiver: PluginActionBroadcastReceiver
|
||
|
{
|
||
|
public override void OnReceive(Context context, Intent intent)
|
||
|
{
|
||
|
Android.Util.Log.Debug("KP2A_MasterKee", intent.Action);
|
||
|
base.OnReceive(context, intent);
|
||
|
}
|
||
|
|
||
|
private static byte[] HashHMAC(byte[] key, byte[] message)
|
||
|
{
|
||
|
var hash = new HMACSHA256(key);
|
||
|
return hash.ComputeHash(message);
|
||
|
}
|
||
|
protected override void OpenEntry(OpenEntryAction oe)
|
||
|
{
|
||
|
string masterkey;
|
||
|
Android.Util.Log.Debug("KP2A_MasterKee", "Opening entry...");
|
||
|
if (oe.EntryFields.TryGetValue("MK_MasterKey", out masterkey))
|
||
|
{
|
||
|
Android.Util.Log.Debug("KP2A_MasterKee", "Entry is MK entry.");
|
||
|
string type;
|
||
|
if (!oe.EntryFields.TryGetValue("MK_Type", out type))
|
||
|
type = "Long Password";
|
||
|
int counter = 1;
|
||
|
string strCounter;
|
||
|
if (oe.EntryFields.TryGetValue("MK_Site_Counter", out strCounter))
|
||
|
{
|
||
|
int.TryParse(strCounter, out counter);
|
||
|
}
|
||
|
Android.Util.Log.Debug("KP2A_MasterKee", "Calculating password...");
|
||
|
string calculatedKey = MasterPassword.MpAlgorithm.GenerateContent(type,
|
||
|
oe.EntryFields[KeepassDefs.TitleField],
|
||
|
MemUtil.HexStringToByteArray(masterkey),
|
||
|
counter,
|
||
|
HashHMAC
|
||
|
);
|
||
|
Android.Util.Log.Debug("KP2A_MasterKee", "ok. Returning data.");
|
||
|
try
|
||
|
{
|
||
|
oe.SetEntryField(KeepassDefs.PasswordField, calculatedKey, true);
|
||
|
oe.SetEntryField("MK_MasterKey", "", true);
|
||
|
oe.SetEntryField("MK_Type", "", true);
|
||
|
oe.SetEntryField("MK_Site_Counter", "", true);
|
||
|
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
Android.Util.Log.Debug("KP2A_MasterKee", e.ToString());
|
||
|
}
|
||
|
|
||
|
}
|
||
|
Android.Util.Log.Debug("KP2A_MasterKee", "Done.");
|
||
|
}
|
||
|
|
||
|
protected override void ActionSelected(ActionSelectedAction asa)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|