diff options
Diffstat (limited to 'src/com/isode/stroke/network')
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(); } |