samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToOld.java
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToOld.java Sat Jun 14 09:52:23 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 org.apidesign.impl.security.extension;
1.10 +
1.11 +import org.apidesign.api.security.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 +}