samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToOld.java
1 package org.apidesign.impl.security.extension;
3 import org.apidesign.api.security.Digest;
4 import java.nio.ByteBuffer;
5 import java.security.MessageDigest;
6 import java.security.NoSuchAlgorithmException;
7 import java.security.Provider;
8 import java.security.Security;
9 import java.util.Collections;
10 import java.util.List;
15 * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
17 // BEGIN: day.end.bridges.BridgeToOld
18 public final class BridgeToOld extends Provider {
20 public BridgeToOld() {
21 super("spi.Digestor", 1.0, "");
22 Security.addProvider(this);
25 // BEGIN: day.end.bridges.cycle
26 private ThreadLocal<Boolean> searching = new ThreadLocal<Boolean>();
27 final boolean isSearching() {
28 return Boolean.TRUE.equals(searching.get());
32 public synchronized Service getService(String type, String algorithm) {
33 Boolean prev = searching.get();
35 searching.set(Boolean.TRUE);
36 if ("MessageDigest".equals(type)) {
37 Digest dig = Digest.getInstance(algorithm);
39 return new ServiceImpl(
40 dig, this, type, algorithm, "",
41 Collections.<String>emptyList(),
42 Collections.<String,String>emptyMap());
50 // END: day.end.bridges.cycle
52 private static class ServiceImpl<Data> extends Service {
55 public ServiceImpl(Digest dig, Provider provider,
56 String type, String algorithm, String className,
57 List<String> aliases, Map<String, String> attributes
60 provider, type, algorithm, className, aliases, attributes
66 public Object newInstance(Object constructorParameter)
67 throws NoSuchAlgorithmException {
68 return new MessageDigest(getAlgorithm()) {
72 protected void engineUpdate(byte input) {
73 ByteBuffer bb = ByteBuffer.wrap(new byte[] { input });
78 protected void engineUpdate(
79 byte[] input, int offset, int len
81 ByteBuffer bb = ByteBuffer.wrap(input);
83 bb.limit(offset + len);
88 protected byte[] engineDigest() {
93 protected void engineReset() {
94 dig = Digest.getInstance(getAlgorithm());
103 // END: day.end.bridges.BridgeToOld