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 class BridgeToOld extends Provider {
25 public BridgeToOld() {
26 super("spi.Digestor", 1.0, "");
27 Security.addProvider(this);
31 public synchronized Service getService(String type, String algorithm) {
32 if ("MessageDigest".equals(type)) {
33 Digest dig = Digest.getInstance(algorithm);
35 return new ServiceImpl(dig, this, type, algorithm, "", Collections.<String>emptyList(), Collections.<String,String>emptyMap());
41 private static class ServiceImpl<Data> extends Service {
44 public ServiceImpl(Digest dig, Provider provider, String type, String algorithm, String className, List<String> aliases, Map<String, String> attributes) {
45 super(provider, type, algorithm, className, aliases, attributes);
50 public Object newInstance(Object constructorParameter) throws NoSuchAlgorithmException {
51 return new MessageDigest(getAlgorithm()) {
55 protected void engineUpdate(byte input) {
56 ByteBuffer bb = ByteBuffer.wrap(new byte[] { input });
61 protected void engineUpdate(byte[] input, int offset, int len) {
62 ByteBuffer bb = ByteBuffer.wrap(input);
64 bb.limit(offset + len);
69 protected byte[] engineDigest() {
74 protected void engineReset() {
75 dig = Digest.getInstance(getAlgorithm());
84 // END: day.end.bridges.BridgeToOld