m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java18
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySigner.java2
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySignerApiImplementation.java36
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/querysignerapi/QuerySignerApi.java4
4 files changed, 23 insertions, 37 deletions
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java
index 0bf4338..a2ac358 100644
--- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementation.java
@@ -1,9 +1,8 @@
package pl.edu.mimuw.cloudatlas.agent;
-import java.io.PrintStream;
-
import java.rmi.RemoteException;
+import java.security.PublicKey;
import java.util.concurrent.CompletableFuture;
import java.util.List;
import java.util.AbstractMap.SimpleImmutableEntry;
@@ -12,24 +11,20 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
import pl.edu.mimuw.cloudatlas.agent.messages.*;
-import pl.edu.mimuw.cloudatlas.interpreter.Interpreter;
-import pl.edu.mimuw.cloudatlas.interpreter.InterpreterException;
-import pl.edu.mimuw.cloudatlas.interpreter.Main;
-import pl.edu.mimuw.cloudatlas.interpreter.QueryResult;
import pl.edu.mimuw.cloudatlas.model.*;
import pl.edu.mimuw.cloudatlas.api.Api;
-import pl.edu.mimuw.cloudatlas.querysigner.QueryData;
-import pl.edu.mimuw.cloudatlas.querysigner.QueryUtils;
+import pl.edu.mimuw.cloudatlas.querysigner.*;
public class NewApiImplementation implements Api {
private EventBus eventBus;
+ private PublicKey publicKey;
public NewApiImplementation(EventBus eventBus) {
this.eventBus = eventBus;
+ String publicKeyFile = System.getProperty("public_key_file");
+ publicKey = KeyUtils.getPublicKey(publicKeyFile);
}
public Set<String> getZoneSet() throws RemoteException {
@@ -82,8 +77,9 @@ public class NewApiImplementation implements Api {
}
public void installQuery(String name, QueryData query) throws RemoteException {
- QueryUtils.validateQueryName(name);
try {
+ QueryUtils.validateQueryName(name);
+ QuerySignerApiImplementation.validateInstallQuery(name, query, this.publicKey);
Attribute attributeName = new Attribute(name);
ValueTime timestamp = new ValueTime(System.currentTimeMillis());
Map<Attribute, Entry<ValueQuery, ValueTime>> queries = new HashMap();
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySigner.java b/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySigner.java
index 735601d..b2f426e 100644
--- a/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySigner.java
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySigner.java
@@ -16,7 +16,7 @@ public class QuerySigner {
}
}
- private static QuerySignerApiImplementation initApi() throws IOException {
+ public static QuerySignerApiImplementation initApi() throws IOException {
String publicKeyFile = System.getProperty("public_key_file");
String privateKeyFile = System.getProperty("private_key_file");
PublicKey publicKey = KeyUtils.getPublicKey(publicKeyFile);
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySignerApiImplementation.java b/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySignerApiImplementation.java
index 37264bf..3acaacf 100644
--- a/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySignerApiImplementation.java
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/querysigner/QuerySignerApiImplementation.java
@@ -22,17 +22,15 @@ public class QuerySignerApiImplementation implements QuerySignerApi {
private PrivateKey privateKey;
private Map<String, ValueQuery> queries;
private Set<String> attribsSetByQueries;
- private ByteSerializer byteSerializer;
- QuerySignerApiImplementation(PublicKey publicKey, PrivateKey privateKey) {
- this.byteSerializer = new ByteSerializer();
+ public QuerySignerApiImplementation(PublicKey publicKey, PrivateKey privateKey) {
this.publicKey = publicKey;
this.privateKey = privateKey;
this.queries = new HashMap<>();
this.attribsSetByQueries = new HashSet<>();
}
- private String byteArrayToString(byte[] arr, int offset, int len) {
+ private static String byteArrayToString(byte[] arr, int offset, int len) {
StringBuffer sb = new StringBuffer();
for (int i = offset, n = Math.min(arr.length, offset + len); i < n; ++i) {
String hex = Integer.toHexString(0xFF & arr[i]);
@@ -55,7 +53,7 @@ public class QuerySignerApiImplementation implements QuerySignerApi {
return encryptedBytes;
}
- private byte[] decryptQuery(byte[] encryptedQuery) throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException {
+ private static byte[] decryptQuery(byte[] encryptedQuery, PublicKey publicKey) throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException {
Cipher verifyCipher = Cipher.getInstance(ENCRYPTION_ALGORITHM);
verifyCipher.init(Cipher.DECRYPT_MODE, publicKey);
byte[] decryptedBytes = verifyCipher.doFinal(encryptedQuery);
@@ -66,7 +64,7 @@ public class QuerySignerApiImplementation implements QuerySignerApi {
return decryptedBytes;
}
- private byte[] cryptographicHash(byte[] serializedQuery) throws NoSuchAlgorithmException {
+ private static byte[] cryptographicHash(byte[] serializedQuery) throws NoSuchAlgorithmException {
MessageDigest digestGenerator =
MessageDigest.getInstance(DIGEST_ALGORITHM);
byte[] digest = digestGenerator.digest(serializedQuery);
@@ -77,7 +75,8 @@ public class QuerySignerApiImplementation implements QuerySignerApi {
return digest;
}
- private byte[] serializeQuery(String queryName, String queryCode) {
+ private static byte[] serializeQuery(String queryName, String queryCode) {
+ ByteSerializer byteSerializer = new ByteSerializer();
return byteSerializer.serialize(queryName + queryCode);
}
@@ -95,19 +94,15 @@ public class QuerySignerApiImplementation implements QuerySignerApi {
}
}
- @Override
- public void validateInstallQuery(String queryName, QueryData query) throws RemoteException {
+ public static void validateInstallQuery(String queryName, QueryData query, PublicKey publicKey) throws RemoteException,IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException, QuerySigner.InvalidQueryException {
QueryUtils.validateQueryName(queryName);
- try {
- byte[] decryptedQuery = decryptQuery(query.getSignature());
- byte[] serializedQuery = serializeQuery(queryName, query.getCode());
- byte[] hashedSerializedQuery = cryptographicHash(serializedQuery);
- if (hashedSerializedQuery != decryptedQuery) {
- throw new QuerySigner.InvalidQueryException();
- }
- } catch (NoSuchPaddingException | NoSuchAlgorithmException | BadPaddingException | IllegalBlockSizeException | InvalidKeyException | QuerySigner.InvalidQueryException e) {
- e.printStackTrace();
- throw new RemoteException(e.getLocalizedMessage());
+ byte[] decryptedQuery = decryptQuery(query.getSignature(), publicKey);
+ byte[] serializedQuery = serializeQuery(queryName, query.getCode());
+ byte[] hashedSerializedQuery = cryptographicHash(serializedQuery);
+ String decryptedQueryString = byteArrayToString(decryptedQuery, 0, decryptedQuery.length);
+ String hashedSerializedQueryString = byteArrayToString(hashedSerializedQuery, 0, hashedSerializedQuery.length);
+ if (!decryptedQueryString.equals(hashedSerializedQueryString)) {
+ throw new QuerySigner.InvalidQueryException();
}
}
@@ -118,8 +113,7 @@ public class QuerySignerApiImplementation implements QuerySignerApi {
}
// TODO
- @Override
- public void validateUninstallQuery(String queryName, QueryData query) throws RemoteException {
+ public static void validateUninstallQuery(String queryName, QueryData query, PublicKey publicKey) throws RemoteException {
}
}
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/querysignerapi/QuerySignerApi.java b/src/main/java/pl/edu/mimuw/cloudatlas/querysignerapi/QuerySignerApi.java
index 6b42d32..55f4d04 100644
--- a/src/main/java/pl/edu/mimuw/cloudatlas/querysignerapi/QuerySignerApi.java
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/querysignerapi/QuerySignerApi.java
@@ -9,8 +9,4 @@ public interface QuerySignerApi extends Remote {
public QueryData signInstallQuery(String queryName, String queryCode) throws RemoteException;
public QueryData signUninstallQuery(String queryName) throws RemoteException;
-
- public void validateInstallQuery(String queryName, QueryData query) throws RemoteException;
-
- public void validateUninstallQuery(String queryName, QueryData query) throws RemoteException;
}