Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2011 The Guava Authors
   *
   * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
   * in compliance with the License. You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software distributed under the License
  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
 
 package com.google.common.hash;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
HashFunction adapter for java.security.MessageDigest instances.

Author(s):
Kevin Bourrillion
Dimitris Andreou
 
     implements Serializable {
   private final MessageDigest prototype;
   private final int bytes;
   private final boolean supportsClone;
   private final String toString;
 
   MessageDigestHashFunction(String algorithmNameString toString) {
     this. = getMessageDigest(algorithmName);
     this. = .getDigestLength();
     this. = checkNotNull(toString);
     this. = supportsClone();
   }
 
   MessageDigestHashFunction(String algorithmNameint bytesString toString) {
     this. = checkNotNull(toString);
     this. = getMessageDigest(algorithmName);
     int maxLength = .getDigestLength();
     checkArgument(bytes >= 4 && bytes <= maxLength,
         "bytes (%s) must be >= 4 and < %s"bytesmaxLength);
     this. = bytes;
     this. = supportsClone();
   }
 
   private boolean supportsClone() {
     try {
       .clone();
       return true;
     } catch (CloneNotSupportedException e) {
       return false;
     }
   }
 
   @Override public int bits() {
     return  * .;
   }
 
   @Override public String toString() {
     return ;
   }
 
   private static MessageDigest getMessageDigest(String algorithmName) {
     try {
       return MessageDigest.getInstance(algorithmName);
     } catch (NoSuchAlgorithmException e) {
       throw new AssertionError(e);
     }
   }
 
   @Override public Hasher newHasher() {
     if () {
       try {
         return new MessageDigestHasher((MessageDigest.clone(), );
       } catch (CloneNotSupportedException e) {
         // falls through
       }
     }
   }
 
   private static final class SerializedForm implements Serializable {
     private final String algorithmName;
     private final int bytes;
     private final String toString;
 
     private SerializedForm(String algorithmNameint bytesString toString) {
       this. = algorithmName;
       this. = bytes;
      this. = toString;
    }
    private Object readResolve() {
    }
    private static final long serialVersionUID = 0;
  }
  }

  
Hasher that updates a message digest.
  private static final class MessageDigestHasher extends AbstractByteHasher {
    private final MessageDigest digest;
    private final int bytes;
    private boolean done;
    private MessageDigestHasher(MessageDigest digestint bytes) {
      this. = digest;
      this. = bytes;
    }
    @Override
    protected void update(byte b) {
      checkNotDone();
      .update(b);
    }
    @Override
    protected void update(byte[] b) {
      checkNotDone();
      .update(b);
    }
    @Override
    protected void update(byte[] bint offint len) {
      checkNotDone();
      .update(bofflen);
    }
    private void checkNotDone() {
      checkState(!"Cannot use Hasher after calling #hash() on it");
    }
    @Override
    public HashCode hash() {
       = true;
      return ( == .getDigestLength())
          ? HashCodes.fromBytesNoCopy(.digest())
          : HashCodes.fromBytesNoCopy(Arrays.copyOf(.digest(), ));
    }
  }
New to GrepCode? Check out our FAQ X