Providers are working back and forth, but it is necessary to find a place to register them all
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/samples/messagedigest/src/impl/independent/module/BridgeToOld.java Sat Jun 14 09:52:22 2008 +0200
1.3 @@ -0,0 +1,82 @@
1.4 +/*
1.5 + * To change this template, choose Tools | Templates
1.6 + * and open the template in the editor.
1.7 + */
1.8 +
1.9 +package impl.independent.module;
1.10 +
1.11 +import api.Digest;
1.12 +import java.nio.ByteBuffer;
1.13 +import java.security.MessageDigest;
1.14 +import java.security.NoSuchAlgorithmException;
1.15 +import java.security.Provider;
1.16 +import java.security.Security;
1.17 +import java.util.Collections;
1.18 +import java.util.List;
1.19 +import java.util.Map;
1.20 +
1.21 +/**
1.22 + *
1.23 + * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
1.24 + */
1.25 +public class BridgeToOld extends Provider {
1.26 +
1.27 + public BridgeToOld() {
1.28 + super("spi.Digestor", 1.0, "");
1.29 + Security.addProvider(this);
1.30 + }
1.31 +
1.32 + @Override
1.33 + public synchronized Service getService(String type, String algorithm) {
1.34 + if ("MessageDigest".equals(type)) {
1.35 + Digest dig = Digest.getInstance(algorithm);
1.36 + if (dig != null) {
1.37 + return new ServiceImpl(dig, this, type, algorithm, "", Collections.<String>emptyList(), Collections.<String,String>emptyMap());
1.38 + }
1.39 + }
1.40 + return null;
1.41 + }
1.42 +
1.43 + private static class ServiceImpl<Data> extends Service {
1.44 + Digest dig;
1.45 +
1.46 + public ServiceImpl(Digest dig, Provider provider, String type, String algorithm, String className, List<String> aliases, Map<String, String> attributes) {
1.47 + super(provider, type, algorithm, className, aliases, attributes);
1.48 + this.dig = dig;
1.49 + }
1.50 +
1.51 + @Override
1.52 + public Object newInstance(Object constructorParameter) throws NoSuchAlgorithmException {
1.53 + return new MessageDigest(getAlgorithm()) {
1.54 + private byte[] res;
1.55 +
1.56 + @Override
1.57 + protected void engineUpdate(byte input) {
1.58 + ByteBuffer bb = ByteBuffer.wrap(new byte[] { input });
1.59 + res = dig.digest(bb);
1.60 + }
1.61 +
1.62 + @Override
1.63 + protected void engineUpdate(byte[] input, int offset, int len) {
1.64 + ByteBuffer bb = ByteBuffer.wrap(input);
1.65 + bb.position(offset);
1.66 + bb.limit(offset + len);
1.67 + res = dig.digest(bb);
1.68 + }
1.69 +
1.70 + @Override
1.71 + protected byte[] engineDigest() {
1.72 + return res;
1.73 + }
1.74 +
1.75 + @Override
1.76 + protected void engineReset() {
1.77 + dig = Digest.getInstance(getAlgorithm());
1.78 + }
1.79 + };
1.80 + }
1.81 +
1.82 +
1.83 + }
1.84 +
1.85 +}
2.1 --- a/samples/messagedigest/src/impl/independent/module/BridgeToOldAlgorithmsProvider.java Sat Jun 14 09:52:21 2008 +0200
2.2 +++ b/samples/messagedigest/src/impl/independent/module/BridgeToOldAlgorithmsProvider.java Sat Jun 14 09:52:22 2008 +0200
2.3 @@ -40,4 +40,7 @@
2.4 }
2.5 }
2.6
2.7 + static {
2.8 + new BridgeToOld();
2.9 + }
2.10 }
3.1 --- a/samples/messagedigest/test/api/DigestTest.java Sat Jun 14 09:52:21 2008 +0200
3.2 +++ b/samples/messagedigest/test/api/DigestTest.java Sat Jun 14 09:52:22 2008 +0200
3.3 @@ -5,7 +5,6 @@
3.4
3.5 package api;
3.6
3.7 -import api.Digest;
3.8 import java.nio.ByteBuffer;
3.9 import java.security.MessageDigest;
3.10 import java.util.Arrays;
3.11 @@ -33,7 +32,7 @@
3.12 public static void setUp() {
3.13 time = System.currentTimeMillis();
3.14 Random r = new Random(time);
3.15 - arr = new byte[r.nextInt(1024 * 1024)];
3.16 + arr = new byte[r.nextInt(1024)];
3.17 r.nextBytes(arr);
3.18 }
3.19
4.1 --- a/samples/messagedigest/test/api/DigestorTest.java Sat Jun 14 09:52:21 2008 +0200
4.2 +++ b/samples/messagedigest/test/api/DigestorTest.java Sat Jun 14 09:52:22 2008 +0200
4.3 @@ -5,6 +5,7 @@
4.4
4.5 package api;
4.6
4.7 +import impl.independent.module.BridgeToOld;
4.8 import java.nio.ByteBuffer;
4.9 import java.security.MessageDigest;
4.10 import java.util.Arrays;
4.11 @@ -32,7 +33,7 @@
4.12 public static void setUp() {
4.13 time = System.currentTimeMillis();
4.14 Random r = new Random(time);
4.15 - arr = new byte[r.nextInt(1024 * 1024)];
4.16 + arr = new byte[r.nextInt(1024)];
4.17 r.nextBytes(arr);
4.18 }
4.19
4.20 @@ -41,19 +42,20 @@
4.21 }
4.22
4.23 @Test
4.24 + public void generateHashUsingNewDigest() throws Exception {
4.25 + Digest d = Digest.getInstance("cnt");
4.26 + ByteBuffer bb = ByteBuffer.wrap(arr);
4.27 + byte[] res = d.digest(bb);
4.28 + resNew = res;
4.29 + }
4.30 +
4.31 + @Test
4.32 public void generateHashUsingMessageDigest() throws Exception {
4.33 MessageDigest md = MessageDigest.getInstance("cnt");
4.34 byte[] res = md.digest(arr);
4.35 resOld = res;
4.36 }
4.37
4.38 - @Test
4.39 - public void generateHashUsingNewDigest() throws Exception {
4.40 - Digest d = Digest.getInstance("cnt");
4.41 - ByteBuffer bb = ByteBuffer.wrap(arr);
4.42 - byte[] res = d.digest(bb);
4.43 - resNew = res;
4.44 - }
4.45
4.46 @Test
4.47 public void compareTheHashes() throws Exception {