samples/messagedigest/src-new-spi/org/apidesign/impl/security/spi/DigestorProvider.java
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
6 package org.apidesign.impl.security.spi;
8 import org.apidesign.impl.security.friendapi.DigestImplementation;
9 import org.apidesign.impl.security.friendapi.DigestProvider;
10 import java.nio.ByteBuffer;
11 import java.util.ServiceLoader;
12 import org.apidesign.spi.security.Digestor;
16 * @author Jaroslav Tulach
18 public class DigestorProvider implements DigestProvider {
20 public DigestImplementation create(String algorithm) {
21 for (Digestor<?> d : ServiceLoader.load(Digestor.class)) {
22 Handler<?> h = create(d, algorithm);
30 private static <Data> Handler<Data> create(Digestor<Data> dig, String algorithm) {
31 Data d = DigestorAccessor.getDefault().create(dig, algorithm);
35 return new Handler<Data>(algorithm, dig, d);
39 private static final class Handler<Data> extends DigestImplementation {
40 private final Digestor dig;
41 private final Data data;
43 public Handler(String algorithm, Digestor dig, Data data) {
51 public void update(ByteBuffer bb) {
52 DigestorAccessor.getDefault().update(dig, data, bb);
56 public byte[] digest() {
57 return DigestorAccessor.getDefault().digest(dig, data);