// Copyright 2011 The Closure Library Authors. All Rights Reserved. // // 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. /** * @fileoverview Abstract cryptographic hash interface. * * See goog.crypt.Sha1 and goog.crypt.Md5 for sample implementations. * */ goog.provide('goog.crypt.Hash'); /** * Create a cryptographic hash instance. * * @constructor * @struct */ goog.crypt.Hash = function() { /** * The block size for the hasher. * @type {number} */ this.blockSize = -1; }; /** * Resets the internal accumulator. */ goog.crypt.Hash.prototype.reset = goog.abstractMethod; /** * Adds a byte array (array with values in [0-255] range) or a string (must * only contain 8-bit, i.e., Latin1 characters) to the internal accumulator. * * Many hash functions operate on blocks of data and implement optimizations * when a full chunk of data is readily available. Hence it is often preferable * to provide large chunks of data (a kilobyte or more) than to repeatedly * call the update method with few tens of bytes. If this is not possible, or * not feasible, it might be good to provide data in multiplies of hash block * size (often 64 bytes). Please see the implementation and performance tests * of your favourite hash. * * @param {Array|Uint8Array|string} bytes Data used for the update. * @param {number=} opt_length Number of bytes to use. */ goog.crypt.Hash.prototype.update = goog.abstractMethod; /** * @return {!Array} The finalized hash computed * from the internal accumulator. */ goog.crypt.Hash.prototype.digest = goog.abstractMethod;