5efe9b2733c647f531eed80caffd413d9d65c572
[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 Mac hmac;
11         
12         public Table(String baseurl, String password) {
13                 initCloud(baseurl, password);
14         }
15
16         private void initCloud(String baseurl, String password) {
17                 try {
18                         SecretKeySpec secret=getKey(password);
19                         Cipher encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
20                         encryptCipher.init(Cipher.ENCRYPT_MODE, secret);
21                         Cipher decryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
22                         decryptCipher.init(Cipher.DECRYPT_MODE, secret);
23                         hmac = Mac.getInstance("HmacSHA256");
24                         hmac.init(secret);
25                         cloud=new CloudComm(baseurl, encryptCipher, decryptCipher, hmac);
26                 } catch (Exception e) {
27                         throw new Error("Failed To Initialize Ciphers");
28                 }
29         }
30
31         private SecretKeySpec getKey(String password) {
32                 try {
33                         PBEKeySpec keyspec = new PBEKeySpec(password.toCharArray());
34                         SecretKey key = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256").generateSecret(keyspec);
35                         SecretKeySpec secret = new SecretKeySpec(key.getEncoded(), "AES");
36                         return secret;
37                 } catch (Exception e) {
38                         throw new Error("Failed generating key.");
39                 }
40         }
41
42
43
44 }