001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: /**
019: * @author Vladimir N. Molotkov
020: * @version $Revision$
021: */package java.security;
022:
023: import java.io.FilterOutputStream;
024: import java.io.IOException;
025: import java.io.OutputStream;
026:
027: /**
028: * @com.intel.drl.spec_ref
029: *
030: */
031: public class DigestOutputStream extends FilterOutputStream {
032:
033: /**
034: * @com.intel.drl.spec_ref
035: */
036: protected MessageDigest digest;
037:
038: // Indicates whether digest functionality is on or off
039: private boolean isOn = true;
040:
041: /**
042: * @com.intel.drl.spec_ref
043: */
044: public DigestOutputStream(OutputStream stream, MessageDigest digest) {
045: super (stream);
046: this .digest = digest;
047: }
048:
049: /**
050: * Answers the MessageDigest which the receiver uses when computing the
051: * hash.
052: *
053: *
054: * @return MessageDigest the digest the receiver uses when computing the
055: * hash.
056: */
057:
058: public MessageDigest getMessageDigest() {
059: return digest;
060: }
061:
062: /**
063: * Sets the MessageDigest which the receiver will use when computing the
064: * hash.
065: *
066: *
067: * @param digest
068: * MessageDigest the digest to use when computing the hash.
069: *
070: * @see MessageDigest
071: * @see #on
072: */
073: public void setMessageDigest(MessageDigest digest) {
074: this .digest = digest;
075: }
076:
077: /**
078: * @com.intel.drl.spec_ref
079: */
080: public void write(int b) throws IOException {
081: // update digest only if digest functionality is on
082: if (isOn) {
083: digest.update((byte) b);
084: }
085: // write the byte
086: out.write(b);
087: }
088:
089: /**
090: * @com.intel.drl.spec_ref
091: */
092: public void write(byte[] b, int off, int len) throws IOException {
093: // update digest only if digest functionality is on
094: if (isOn) {
095: digest.update(b, off, len);
096: }
097: // write len bytes
098: out.write(b, off, len);
099: }
100:
101: /**
102: * Enables or disables the digest function (default is on).
103: *
104: *
105: * @param on
106: * boolean true if the digest should be computed, and false
107: * otherwise.
108: *
109: * @see MessageDigest
110: */
111: public void on(boolean on) {
112: isOn = on;
113: }
114:
115: /**
116: * Answers a string containing a concise, human-readable description of the
117: * receiver.
118: *
119: *
120: * @return String a printable representation for the receiver.
121: */
122: public String toString() {
123: return super .toString() + ", " + digest.toString() + //$NON-NLS-1$
124: (isOn ? ", is on" : ", is off"); //$NON-NLS-1$ //$NON-NLS-2$
125: }
126: }
|