encoding UTF16BE / UTF16LE is switched?
frostschutz opened this issue · comments
Hello again.
It seems I'm getting UTF16LE results when specifying UTF16BE and vice versa? (checked against rhash http://rhash.anz.ru/ )
var shaObjBE = new jsSHA("SHA3-512", "TEXT", {encoding: "UTF16BE"});
var shaObjLE = new jsSHA("SHA3-512", "TEXT", {encoding: "UTF16LE"});
shaObjBE.update("XYZ");
shaObjLE.update("XYZ");
console.log("UTF16BE: "+shaObjBE.getHash("HEX"));
console.log("UTF16LE: "+shaObjLE.getHash("HEX"));
UTF16BE: c1e0a1b9ef8a05609ba30ab0c81b0f64a6532dfc36eca245f6e08b7ec25496010de99d412157c24d92d379a4b026804468e3524178ec629e490348de94a4a84b
UTF16LE: ad08c313fc0277c3a2ce5391fd55a51ca3110337ca36633e4c0ae20ade8dd4e3d79f53ac3ea683a80280b078a070dced2751be4029b94529294e09d258c922f5
$ echo -n XYZ | iconv -f UTF8 -t UTF16BE | rhash --sha3-512 -
ad08c313fc0277c3a2ce5391fd55a51ca3110337ca36633e4c0ae20ade8dd4e3d79f53ac3ea683a80280b078a070dced2751be4029b94529294e09d258c922f5
$ echo -n XYZ | iconv -f UTF8 -t UTF16LE | rhash --sha3-512 -
c1e0a1b9ef8a05609ba30ab0c81b0f64a6532dfc36eca245f6e08b7ec25496010de99d412157c24d92d379a4b026804468e3524178ec629e490348de94a4a84b (stdin)
$ echo -n XYZ | iconv -f UTF8 -t UTF16BE | hexdump -C
00000000 00 58 00 59 00 5a |.X.Y.Z|
00000006
$ echo -n XYZ | iconv -f UTF8 -t UTF16LE | hexdump -C
00000000 58 00 59 00 5a 00 |X.Y.Z.|
00000006
Confirmed and it was a bit worse than just switching endianness. See if https://github.com/Caligatio/jsSHA/tree/sha3-utf16-fix works for you.
Seems to work for me.
Closing this with release of v2.3.1