The algorithm works with raw binary -- it will not be the case that all bytes will have ascii graphics.
And, that relates to the other problem with your implementation: you are using a hexadecimal representation of a binary result as if it were equivalent to that binary result. I hope this makes sense, -- Raul On Wed, Feb 2, 2022 at 7:45 AM 'Viktor Grigorov' via Programming <[email protected]> wrote: > > I tried padding with 0 0 1 1 0 0 0 0 ('0') and with 0 0 0 0 0 0 0, and with > your padkey function, but I don't get the proper results. Also, the 0x5c and > 0x36 from the ascii table correspond to '/' and '6', yours results in > ungraphable members. > You said other issues exist as well, I would appreciate it if you could point > them out. > Feb 2, 2022, 17:32 by [email protected]: > > > Actually, for the general case, the hash function may have an output > > size smaller than the block size. > > > > So: > > > > padkey=: {{ > > if.x < # y do. y=. u y end. > > x{.y,x#{.a. > > }} > > > > FYI, > > > > -- > > Raul > > > > On Wed, Feb 2, 2022 at 6:51 AM Raul Miller <[email protected]> wrote: > > > >> > >> On Wed, Feb 2, 2022 at 4:41 AM 'Viktor Grigorov' via Programming > >> <[email protected]> wrote: > >> > I wanted to see if J could be faster than bespoke C programs > >> > (specifically aircrack-ng, ~10k/s on my machine). > >> > From the wiki pages for SHA1 (turns outs there exists a foreign so I > >> > dropped it), HMAC, and PBKDF2I assembled: > >> > sha1=:1&(128!:6) > >> > bs=:512%8 NB. block size in bytes for md5, sha1, sha224, sha256 > >> > opad=:bs(([,(#@]))$])0 1 0 1 1 1 0 0 NB. 0x5c, outer padding byte up to > >> > block size > >> > ipad=:bs(([,(#@]))$])0 0 1 1 0 1 1 0 NB. 0x36, inner padding byte up to > >> > block size > >> > > >> > hmac=:{{)a NB. assuming y of form 'key';'msg' > >> > if.bs&<@#key=.{.>y do.key=.u key end. NB. use hash of key as key, if > >> > greater than block size > >> > key=.((],(((bs&-@#),8:)$0:))@((8:#2:)#:(a.&i.)))key NB. pad 0s to right > >> > up to block size; do 8 bits of ascii > >> > u(({&a.@#.(key~:opad)),u(({&a.@#.(key~:ipad)),{:>y)) > >> > }} > >> > > >> > sha1 hmac 'key';';msg' > >> > I am getting the wrong hashes back with examples from the wiki examples, > >> > ones generated from https://cryptotools.net/hmac What exactly am I > >> > missing? > >> > >> One issue (not the only issue) I think has to do with how you pad the key. > >> > >> If I understand https://en.wikipedia.org/wiki/HMAC correctly, this > >> will pad the key: > >> > >> padkey=: {{ > >> if.x < # y do. u y > >> else. x{.y,x#{.a. > >> end. > >> }} > >> > >> And, I should expect that sha1 hmac (bs sha1 padkey 'key');';msg' > >> would have the same result as sha1 hmac 'key';';msg' > >> > >> I haven't looked any deeper than this, here. > >> > >> Good luck, > >> > >> -- > >> Raul > >> > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
