title: Migrating from 'crypto' to crypto-js library: Binary encoding
body: <p>I'm trying to generate SHA256 and HmacSHA512 hashes on a device which unfortunately has no support for the standard Node <code>crypto</code> library. So I am adjusting the code to use CryptoJS instead. However, CryptoJS cannot encode the Hash as in binary (only Hex, Base64 and Latin1 are available encoders).</p>
  
  <p>Below is the function I'm trying to migrate. Previous (unusable) code is commented out.</p>
  
  <pre><code>const getMessageSignature = (path, request, secret, nonce) =&gt; {
      // Expected outcome:
      // API-Sign = Message signature using HMAC-SHA512 of (URI path + SHA256(nonce + POST data)) and base64 decoded secret API key
      const message = JSON.stringify(request);
  
      const secret_buffer = btoa(secret);
      const hash = CryptoJS.algo.SHA256.create();
      const hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, secret_buffer);
      const hash_digest = hash.update(nonce + message).finalize().toString(CryptoJS.enc.Base64);
      const hmac_digest = hmac.update(path + hash_digest).finalize().toString(CryptoJS.enc.Base64);
  
      // CANNOT USE BELOW (Buffer and crypto not supported)
      // const secret_buffer = new Buffer(secret, 'base64');
      // const hash = new crypto.createHash('sha256');
      // const hmac = new crypto.createHmac('sha512', secret_buffer);
      // const hash_digest = hash.update(nonce + message).digest('binary');
      // const hmac_digest = hmac.update(path + hash_digest, 'binary').digest('base64');
  
      return hmac_digest;
  };
  </code></pre>