Q:

AES decryption fails in forge but works in crypto-js

I am decrypting a message string at a regular interval. After studying multiple jsperf's I've noticed forge and stanford are faster than cryptojs - I need that extra speed as I am bound to support older mobile devices, so I'm attempting to migrate.
Here is the working crpto-js code:
var feed = message.data.msg;
var iv = CryptoJS.enc.Hex.parse(_iv);
var key = CryptoJS.enc.Hex.parse(_key);

var decrypted = CryptoJS.AES.decrypt(feed.substr(32), key, { iv: iv });
feed = decrypted.toString(CryptoJS.enc.Utf8);

And now the non-working forge code:
var feed = message.data.msg;
var iv = forge.util.hexToBytes(_iv);
var key = forge.util.hexToBytes(_key);

var buffer = forge.util.createBuffer( feed.substr(32) );
var cipher = forge.aes.createDecryptionCipher(key);

cipher.start( iv );
cipher.update( buffer );
cipher.finish();

feed = cipher.output.toHex();

After decryption with forge I get a random jumble of characters. While stepping through the code, the only thing of note is a failure in forge/aes.js, line 969:
if(count > (Nb << 2)) {
    rval = false;
}

Is firing and returning false.
I'm at a loss here as both libraries use CBC as the default for AES so everything should just work. 

A:

Have you tried changing:
var buffer = forge.util.createBuffer( feed.substr(32) );

To:
var buffer = forge.util.createBuffer( forge.util.decode64( feed.substr(32) ) );

And changing:
feed = cipher.output.toHex();

To:
feed = cipher.output.getBytes();

