Caligatio / jsSHA

A JavaScript/TypeScript implementation of the complete Secure Hash Standard (SHA) family (SHA-1, SHA-224/256/384/512, SHA3-224/256/384/512, SHAKE128/256, cSHAKE128/256, and KMAC128/256) with HMAC.

Home Page:https://caligatio.github.io/jsSHA/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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