samples/messagedigest/src/org/apidesign/impl/security/extension/BridgeToOld.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:52:22 +0200
changeset 43 a161a4cdb597
permissions -rw-r--r--
Repackaging to org.apidesign packages
jtulach@43
     1
/*
jtulach@43
     2
 * To change this template, choose Tools | Templates
jtulach@43
     3
 * and open the template in the editor.
jtulach@43
     4
 */
jtulach@43
     5
jtulach@43
     6
package org.apidesign.impl.security.extension;
jtulach@43
     7
jtulach@43
     8
import org.apidesign.api.security.Digest;
jtulach@43
     9
import java.nio.ByteBuffer;
jtulach@43
    10
import java.security.MessageDigest;
jtulach@43
    11
import java.security.NoSuchAlgorithmException;
jtulach@43
    12
import java.security.Provider;
jtulach@43
    13
import java.security.Security;
jtulach@43
    14
import java.util.Collections;
jtulach@43
    15
import java.util.List;
jtulach@43
    16
import java.util.Map;
jtulach@43
    17
jtulach@43
    18
/**
jtulach@43
    19
 *
jtulach@43
    20
 * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jtulach@43
    21
 */
jtulach@43
    22
public class BridgeToOld extends Provider {
jtulach@43
    23
jtulach@43
    24
    public BridgeToOld() {
jtulach@43
    25
        super("spi.Digestor", 1.0, "");
jtulach@43
    26
        Security.addProvider(this);
jtulach@43
    27
    }
jtulach@43
    28
    
jtulach@43
    29
    @Override
jtulach@43
    30
    public synchronized Service getService(String type, String algorithm) {
jtulach@43
    31
        if ("MessageDigest".equals(type)) {
jtulach@43
    32
            Digest dig = Digest.getInstance(algorithm);
jtulach@43
    33
            if (dig != null) {
jtulach@43
    34
                return new ServiceImpl(dig, this, type, algorithm, "", Collections.<String>emptyList(), Collections.<String,String>emptyMap());
jtulach@43
    35
            }
jtulach@43
    36
        }
jtulach@43
    37
        return null;
jtulach@43
    38
    }
jtulach@43
    39
jtulach@43
    40
    private static class ServiceImpl<Data> extends Service {
jtulach@43
    41
        Digest dig;
jtulach@43
    42
jtulach@43
    43
        public ServiceImpl(Digest dig, Provider provider, String type, String algorithm, String className, List<String> aliases, Map<String, String> attributes) {
jtulach@43
    44
            super(provider, type, algorithm, className, aliases, attributes);
jtulach@43
    45
            this.dig = dig;
jtulach@43
    46
        }
jtulach@43
    47
jtulach@43
    48
        @Override
jtulach@43
    49
        public Object newInstance(Object constructorParameter) throws NoSuchAlgorithmException {
jtulach@43
    50
            return new MessageDigest(getAlgorithm()) {
jtulach@43
    51
                private byte[] res;
jtulach@43
    52
                
jtulach@43
    53
                @Override
jtulach@43
    54
                protected void engineUpdate(byte input) {
jtulach@43
    55
                    ByteBuffer bb = ByteBuffer.wrap(new byte[] { input });
jtulach@43
    56
                    res = dig.digest(bb);
jtulach@43
    57
                }
jtulach@43
    58
jtulach@43
    59
                @Override
jtulach@43
    60
                protected void engineUpdate(byte[] input, int offset, int len) {
jtulach@43
    61
                    ByteBuffer bb = ByteBuffer.wrap(input);
jtulach@43
    62
                    bb.position(offset);
jtulach@43
    63
                    bb.limit(offset + len);
jtulach@43
    64
                    res = dig.digest(bb);
jtulach@43
    65
                }
jtulach@43
    66
jtulach@43
    67
                @Override
jtulach@43
    68
                protected byte[] engineDigest() {
jtulach@43
    69
                    return res;
jtulach@43
    70
                }
jtulach@43
    71
jtulach@43
    72
                @Override
jtulach@43
    73
                protected void engineReset() {
jtulach@43
    74
                    dig = Digest.getInstance(getAlgorithm());
jtulach@43
    75
                }
jtulach@43
    76
            };
jtulach@43
    77
        }
jtulach@43
    78
        
jtulach@43
    79
        
jtulach@43
    80
    }
jtulach@43
    81
jtulach@43
    82
}