summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/network')
-rw-r--r--src/com/isode/stroke/network/JavaConnection.java3
-rw-r--r--src/com/isode/stroke/network/JavaCryptoProvider.java90
-rw-r--r--src/com/isode/stroke/network/JavaNetworkFactories.java10
-rw-r--r--src/com/isode/stroke/network/NetworkFactories.java8
4 files changed, 104 insertions, 7 deletions
diff --git a/src/com/isode/stroke/network/JavaConnection.java b/src/com/isode/stroke/network/JavaConnection.java
index f1d72bb..9b171d9 100644
--- a/src/com/isode/stroke/network/JavaConnection.java
+++ b/src/com/isode/stroke/network/JavaConnection.java
@@ -160,6 +160,7 @@ public class JavaConnection extends Connection implements EventOwner {
if(selector_ != null) {
try {
selector_.close();
+ selector_ = null;
} catch (IOException e) {
}
}
@@ -382,7 +383,7 @@ public class JavaConnection extends Connection implements EventOwner {
private boolean disconnecting_ = false;
private boolean disconnected_ = false;
private SocketChannel socketChannel_;
- private Selector selector_;
+ private volatile Selector selector_;
private SelectionKey selectionKey_;
private Worker worker_;
diff --git a/src/com/isode/stroke/network/JavaCryptoProvider.java b/src/com/isode/stroke/network/JavaCryptoProvider.java
new file mode 100644
index 0000000..b7dff5d
--- /dev/null
+++ b/src/com/isode/stroke/network/JavaCryptoProvider.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2011-2015 Isode Limited, London, England.
+ * All rights reserved.
+ */
+package com.isode.stroke.network;
+
+import java.security.InvalidKeyException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+import com.isode.stroke.base.ByteArray;
+import com.isode.stroke.crypto.CryptoProvider;
+import com.isode.stroke.crypto.Hash;
+import com.isode.stroke.base.SafeByteArray;
+
+public class JavaCryptoProvider extends CryptoProvider {
+
+ private static class HashProvider implements Hash {
+ private final MessageDigest digest;
+
+ HashProvider(String algorithm) throws NoSuchAlgorithmException {
+ digest = MessageDigest.getInstance("SHA-1");
+ }
+
+ @Override
+ public Hash update(ByteArray data) {
+ digest.update(data.getData());
+ return this;
+ }
+
+ @Override
+ public Hash update(SafeByteArray data) {
+// digest.update(data.getData());
+ return this;
+ }
+
+ @Override
+ public ByteArray getHash() {
+ return new ByteArray(digest.digest());
+ }
+
+ }
+
+ @Override
+ public Hash createSHA1() {
+ try {
+ return new HashProvider("SHA-1");
+ } catch (NoSuchAlgorithmException e) {
+ return null;
+ }
+ }
+
+ @Override
+ public Hash createMD5() {
+ try {
+ return new HashProvider("MD5");
+ } catch (NoSuchAlgorithmException e) {
+ return null;
+ }
+ }
+
+// @Override
+ public ByteArray getHMACSHA1(SafeByteArray key, ByteArray data) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ByteArray getHMACSHA1(ByteArray key, ByteArray data) {
+ Mac mac;
+ try {
+ mac = Mac.getInstance("HmacSHA1");
+ mac.init(new SecretKeySpec(key.getData(), mac.getAlgorithm()));
+ return new ByteArray(mac.doFinal(data.getData()));
+ } catch (NoSuchAlgorithmException e) {
+ return null;
+ } catch (InvalidKeyException e) {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean isMD5AllowedForCrypto() {
+ return false;
+ }
+
+}
diff --git a/src/com/isode/stroke/network/JavaNetworkFactories.java b/src/com/isode/stroke/network/JavaNetworkFactories.java
index aaffea3..2276a2a 100644
--- a/src/com/isode/stroke/network/JavaNetworkFactories.java
+++ b/src/com/isode/stroke/network/JavaNetworkFactories.java
@@ -1,9 +1,10 @@
/*
- * Copyright (c) 2011-2013 Isode Limited, London, England.
+ * Copyright (c) 2011-2015 Isode Limited, London, England.
* All rights reserved.
*/
package com.isode.stroke.network;
+import com.isode.stroke.crypto.CryptoProvider;
import com.isode.stroke.eventloop.EventLoop;
import com.isode.stroke.tls.PlatformTLSFactories;
import com.isode.stroke.tls.TLSContextFactory;
@@ -16,6 +17,7 @@ public class JavaNetworkFactories implements NetworkFactories {
connections_ = new JavaConnectionFactory(eventLoop_);
dns_ = new PlatformDomainNameResolver(eventLoop_);
platformTLSFactories_ = new PlatformTLSFactories();
+ cryptoProvider_ = new JavaCryptoProvider();
}
public TimerFactory getTimerFactory() {
@@ -34,9 +36,15 @@ public class JavaNetworkFactories implements NetworkFactories {
return platformTLSFactories_.getTLSContextFactory();
}
+ @Override
+ public CryptoProvider getCryptoProvider() {
+ return cryptoProvider_;
+ }
+
private final EventLoop eventLoop_;
private final JavaTimerFactory timers_;
private final JavaConnectionFactory connections_;
private final PlatformDomainNameResolver dns_;
private final PlatformTLSFactories platformTLSFactories_;
+ private final CryptoProvider cryptoProvider_;
}
diff --git a/src/com/isode/stroke/network/NetworkFactories.java b/src/com/isode/stroke/network/NetworkFactories.java
index 678a3b7..fe20214 100644
--- a/src/com/isode/stroke/network/NetworkFactories.java
+++ b/src/com/isode/stroke/network/NetworkFactories.java
@@ -1,13 +1,10 @@
/*
- * Copyright (c) 2011-2013 Isode Limited, London, England.
- * All rights reserved.
- */
-/*
- * Copyright (c) 2010 Remko Tronçon.
+ * Copyright (c) 2010-2015 Isode Limited, London, England.
* All rights reserved.
*/
package com.isode.stroke.network;
+import com.isode.stroke.crypto.CryptoProvider;
import com.isode.stroke.tls.TLSContextFactory;
public interface NetworkFactories {
@@ -16,5 +13,6 @@ public interface NetworkFactories {
ConnectionFactory getConnectionFactory();
DomainNameResolver getDomainNameResolver();
TLSContextFactory getTLSContextFactory();
+ CryptoProvider getCryptoProvider();
}