edits
[iotcloud.git] / src / java / iotcloud / Table.java
1 package iotcloud;
2 import java.util.HashMap;
3 import javax.crypto.spec.*;
4 import javax.crypto.*;
5
6 public class Table {
7         int numslots;
8         HashMap table=new HashMap();
9         CloudComm cloud;
10         private Cipher encryptCipher;
11         private Cipher decryptCipher;
12         private Mac hmac;
13         
14         public Table(String baseurl, String password) {
15                 cloud=new CloudComm(baseurl);
16                 initCiphers(password);
17         }
18         
19         private void initCiphers(String password) {
20                 try {
21                         SecretKeySpec secret=getKey(password);
22                         encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
23                         encryptCipher.init(Cipher.ENCRYPT_MODE, secret);
24                         decryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
25                         decryptCipher.init(Cipher.DECRYPT_MODE, secret);
26                         hmac = Mac.getInstance("HmacSHA256");
27                         hmac.init(secret);
28                 } catch (Exception e) {
29                         throw new Error("Failed To Initialize Ciphers");
30                 }
31         }
32
33         private SecretKeySpec getKey(String password) {
34                 try {
35                         PBEKeySpec keyspec = new PBEKeySpec(password.toCharArray());
36                         SecretKey key = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256").generateSecret(keyspec);
37                         SecretKeySpec secret = new SecretKeySpec(key.getEncoded(), "AES");
38                         return secret;
39                 } catch (Exception e) {
40                         throw new Error("Failed generating key.");
41                 }
42         }
43 }