jtulach@44: jtulach@44: package org.apidesign.api.security; jtulach@44: jtulach@44: import java.nio.ByteBuffer; jtulach@44: import org.apidesign.impl.security.friendapi.DigestImplementation; jtulach@44: import org.apidesign.impl.security.friendapi.DigestProvider; jtulach@44: import java.util.ServiceLoader; jtulach@44: jtulach@44: /** MessageDigest extends MessageDigestSpi, that means the javadoc jtulach@44: * jtulach@44: * @author Jaroslav Tulach jtulach@44: */ jtulach@44: // BEGIN: day.end.bridges.Digest jtulach@44: public final class Digest { jtulach@44: private final DigestImplementation impl; jtulach@44: jtulach@44: /** Factory method is better than constructor */ jtulach@44: private Digest(DigestImplementation impl) { jtulach@44: this.impl = impl; jtulach@44: } jtulach@44: jtulach@44: /** Factory method to create digest for an algorithm. jtulach@44: */ jtulach@44: public static Digest getInstance(String algorithm) { jtulach@44: for (DigestProvider dp : ServiceLoader.load(DigestProvider.class)) { jtulach@44: DigestImplementation impl = dp.create(algorithm); jtulach@44: if (impl != null) { jtulach@44: return new Digest(impl); jtulach@44: } jtulach@44: } jtulach@44: throw new IllegalArgumentException(algorithm); jtulach@44: } jtulach@44: jtulach@44: // jtulach@44: // these methods are kept the same as in original MessageDigest, jtulach@44: // but for simplicity choose just some from the original API jtulach@44: // jtulach@44: jtulach@44: public byte[] digest(ByteBuffer bb) { jtulach@44: impl.update(bb); jtulach@44: return impl.digest(); jtulach@44: } jtulach@44: } jtulach@44: // END: day.end.bridges.Digest