samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToOld.java
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
6 package org.apidesign.impl.security.extension;
8 import org.apidesign.api.security.Digest;
9 import java.nio.ByteBuffer;
10 import java.security.MessageDigest;
11 import java.security.NoSuchAlgorithmException;
12 import java.security.Provider;
13 import java.security.Security;
14 import java.util.Collections;
15 import java.util.List;
20 * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
22 // BEGIN: day.end.bridges.BridgeToOld
23 public final class BridgeToOld extends Provider {
25 public BridgeToOld() {
26 super("spi.Digestor", 1.0, "");
27 Security.addProvider(this);
30 // BEGIN: day.end.bridges.cycle
31 private ThreadLocal<Boolean> searching = new ThreadLocal<Boolean>();
32 final boolean isSearching() {
33 return Boolean.TRUE.equals(searching.get());
37 public synchronized Service getService(String type, String algorithm) {
38 Boolean prev = searching.get();
40 searching.set(Boolean.TRUE);
41 if ("MessageDigest".equals(type)) {
42 Digest dig = Digest.getInstance(algorithm);
44 return new ServiceImpl(dig, this, type, algorithm, "", Collections.<String>emptyList(), Collections.<String,String>emptyMap());
52 // END: day.end.bridges.cycle
54 private static class ServiceImpl<Data> extends Service {
57 public ServiceImpl(Digest dig, Provider provider, String type, String algorithm, String className, List<String> aliases, Map<String, String> attributes) {
58 super(provider, type, algorithm, className, aliases, attributes);
63 public Object newInstance(Object constructorParameter) throws NoSuchAlgorithmException {
64 return new MessageDigest(getAlgorithm()) {
68 protected void engineUpdate(byte input) {
69 ByteBuffer bb = ByteBuffer.wrap(new byte[] { input });
74 protected void engineUpdate(byte[] input, int offset, int len) {
75 ByteBuffer bb = ByteBuffer.wrap(input);
77 bb.limit(offset + len);
82 protected byte[] engineDigest() {
87 protected void engineReset() {
88 dig = Digest.getInstance(getAlgorithm());
97 // END: day.end.bridges.BridgeToOld