# Source: crypto/hash/index.js

    var sha = require('./sha.js');

    module.exports = {
      md5: require('./md5.js'),
      sha1: sha.sha1,
      sha256: sha.sha256,
      sha224: sha.sha224,
      sha384: sha.sha384,
      sha512: sha.sha512,
      ripemd: require('./ripe-md.js'),

      /**
       * Create a hash on the specified data using the specified algorithm
       * @param {Integer} algo Hash algorithm type (see RFC4880 9.4)
       * @param {String} data Data to be hashed
       * @return {String} hash value
       */
      digest: function(algo, data) {
        switch (algo) {
          case 1:
            // - MD5 [HAC]
            return this.md5(data);
          case 2:
            // - SHA-1 [FIPS180]
            return this.sha1(data);
          case 3:
            // - RIPE-MD/160 [HAC]
            return this.ripemd(data);
          case 8:
            // - SHA256 [FIPS180]
            return this.sha256(data);
          case 9:
            // - SHA384 [FIPS180]
            return this.sha384(data);
          case 10:
            // - SHA512 [FIPS180]
            return this.sha512(data);
          case 11:
            // - SHA224 [FIPS180]
            return this.sha224(data);
          default:
            throw new Error('Invalid hash function.');
        }
      },

      /**
       * Returns the hash size in bytes of the specified hash algorithm type
       * @param {Integer} algo Hash algorithm type (See RFC4880 9.4)
       * @return {Integer} Size in bytes of the resulting hash
       */
      getHashByteLength: function(algo) {
        switch (algo) {
          case 1:
            // - MD5 [HAC]
            return 16;
          case 2:
            // - SHA-1 [FIPS180]
          case 3:
            // - RIPE-MD/160 [HAC]
            return 20;
          case 8:
            // - SHA256 [FIPS180]
            return 32;
          case 9:
            // - SHA384 [FIPS180]
            return 48
          case 10:
            // - SHA512 [FIPS180]
            return 64;
          case 11:
            // - SHA224 [FIPS180]
            return 28;
          default:
            throw new Error('Invalid hash algorithm.');
        }
      }

    }