Providers are working back and forth, but it is necessary to find a place to register them all
authorJaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:52:22 +0200
changeset 414cff12579fcc
parent 40 4a29f9676618
child 42 b011bc103b4a
Providers are working back and forth, but it is necessary to find a place to register them all
samples/messagedigest/src/impl/independent/module/BridgeToOld.java
samples/messagedigest/src/impl/independent/module/BridgeToOldAlgorithmsProvider.java
samples/messagedigest/test/api/DigestTest.java
samples/messagedigest/test/api/DigestorTest.java
     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 {