Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Adding Built-In Crypto Library

  • Loading branch information...
commit cb90852dfcc9226edaadff16f880db46be791e67 1 parent c4ac7e5
Brock Whitten sintaxi authored
37 framework/src/com/phonegap/CryptoHandler.java
View
@@ -0,0 +1,37 @@
+package com.phonegap;
+
+import android.webkit.WebView;
+
+public class CryptoHandler {
+
+ WebView mView;
+
+ CryptoHandler(WebView view)
+ {
+ mView = view;
+ }
+
+ public void encrypt(String pass, String text)
+ {
+ try {
+ String encrypted = SimpleCrypto.encrypt(pass,text);
+ mView.loadUrl("javascript:Crypto.gotCryptedString('" + text + "')");
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+
+ public void decrypt(String pass, String text)
+ {
+ try {
+ String decrypted = SimpleCrypto.decrypt(pass,text);
+ mView.loadUrl("javascript:Crypto.gotPlainString('" + text + "')");
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+}
8 framework/src/com/phonegap/DroidGap.java
View
@@ -60,8 +60,7 @@
private NetworkManager netMan;
private CompassListener mCompass;
private Storage cupcakeStorage;
-
-
+ private CryptoHandler crypto;
/** Called when the activity is first created. */
@Override
@@ -134,7 +133,8 @@ private void bindBrowser(WebView appView)
mContacts = new ContactManager(this, appView);
fs = new FileUtils(appView);
netMan = new NetworkManager(this, appView);
- mCompass = new CompassListener(this, appView);
+ mCompass = new CompassListener(this, appView);
+ crypto = new CryptoHandler(appView);
// This creates the new javascript interfaces for PhoneGap
appView.addJavascriptInterface(gap, "DroidGap");
@@ -145,6 +145,8 @@ private void bindBrowser(WebView appView)
appView.addJavascriptInterface(fs, "FileUtil");
appView.addJavascriptInterface(netMan, "NetworkManager");
appView.addJavascriptInterface(mCompass, "CompassHook");
+ appView.addJavascriptInterface(crypto, "GapCrypto");
+
if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.DONUT)
{
cupcakeStorage = new Storage(appView);
96 framework/src/com/phonegap/SimpleCrypto.java
View
@@ -0,0 +1,96 @@
+/*
+ * Code originally found on Android Snippets
+ * Contributed to snippets Ferenc Hechler
+ * Copyright (c) 2009 Ferenc Hechler
+ */
+
+package com.phonegap;
+
+import java.security.SecureRandom;
+
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+
+public class SimpleCrypto {
+
+ public static String encrypt(String seed, String cleartext) throws Exception {
+ byte[] rawKey = getRawKey(seed.getBytes());
+ byte[] result = encrypt(rawKey, cleartext.getBytes());
+ return toHex(result);
+ }
+
+ public static String decrypt(String seed, String encrypted) throws Exception {
+ byte [] rawKey = getRawKey(seed.getBytes());
+ byte [] enc = toByte(encrypted);
+ byte [] result = decrypt(rawKey, enc);
+ return new String(result);
+ }
+
+ public static byte[] getRawKey(byte [] seed) throws Exception {
+ KeyGenerator kgen = KeyGenerator.getInstance("AES");
+ SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
+ sr.setSeed(seed);
+ kgen.init(128, sr);
+ SecretKey skey = kgen.generateKey();
+ byte[] raw = skey.getEncoded();
+ return raw;
+ }
+
+ private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
+ SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+ Cipher cipher = Cipher.getInstance("AES");
+ cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
+ byte[] encrypted = cipher.doFinal(clear);
+ return encrypted;
+ }
+
+ private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
+ SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+ Cipher cipher = Cipher.getInstance("AES");
+ cipher.init(Cipher.DECRYPT_MODE, skeySpec);
+ byte[] decrypted = cipher.doFinal(encrypted);
+ return decrypted;
+ }
+
+ public static String toHex(String txt)
+ {
+ return toHex(txt.getBytes());
+ }
+
+ public static String fromHex(String hex)
+ {
+ return new String(toByte(hex));
+ }
+
+ public static byte[] toByte(String hexString) {
+ int len = hexString.length()/2;
+ byte[] result = new byte[len];
+ for (int i = 0; i < len; ++i)
+ {
+ result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
+ }
+ return result;
+ }
+
+ public static String toHex(byte[] buf) {
+ if (buf == null)
+ {
+ return "";
+ }
+ StringBuffer result = new StringBuffer(2*buf.length);
+ for (int i = 0; i < buf.length; i++)
+ {
+ appendHex(result, buf[i]);
+ }
+ return result.toString();
+ }
+
+ private final static String HEX = "01234567890ABCDEF";
+
+ private static void appendHex(StringBuffer sb, byte b)
+ {
+ sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
+ }
+}
Please sign in to comment.
Something went wrong with that request. Please try again.