summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/network/JavaCryptoProvider.java')
-rw-r--r--src/com/isode/stroke/network/JavaCryptoProvider.java90
1 files changed, 90 insertions, 0 deletions
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;
+ }
+
+}