Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Call SHA-1 with BYTES input. #26

Closed
lazydino opened this issue May 6, 2015 · 6 comments
Closed

Call SHA-1 with BYTES input. #26

lazydino opened this issue May 6, 2015 · 6 comments

Comments

@lazydino
Copy link

lazydino commented May 6, 2015

Hi,

Does the package support raw bytes input for SHA-1? This is what I did:
// mybytes is a initialized byte array
var shaObj = new jsSHA(mybytes, "BYTES");
// create the HMAC by using password string as key
var authenticator = shaObj.getHMAC(password, "TEXT", "SHA-1", "BYTES");

Chrome browser says " c.charCodeAt is not a function " upon creation of shaObj on new jsSHA()?

Isn't v1.6 supporting bytes for input and output? Since my inputs are coming from websockets as raw bytes, and the program would need to send the authenticator as also raw bytes array on the wire. It would be less hassle for me to just deal with data in byte array.

Thanks.

@Caligatio
Copy link
Owner

Hmm, I suspect you're sending real bytes instead of my pseudo-byte string. Do you know what JavaScript type "mybytes" actually is? I can add some detection logic to routine to try to handle this.

@Caligatio
Copy link
Owner

Closing this since more information has been needed for over 3 months. Feel free to reopen if you run into the issue again.

@gpalomar
Copy link

gpalomar commented May 3, 2016

Hi @Caligatio !
I have a question maybe related to the closed issue.

Please, check this plunker first.

When you say BYTES, are you saying javascript binary object (ArrayBuffer or Blob)?
What is the difference between setting 'TEXT' or 'BYTES' input string? I obtained the same hash result by setting any on them as "new jsSHA" type parameter.

Is it possible to pass a raw bytes object to the library without converting it to a string before?

Thanks in advance!

@Caligatio
Copy link
Owner

Ok, so TEXT vs BYTES: TEXT operates on the underlying string as a Unicode value and unfortunately has to do complicated bitwise operations stuff for it to work correctly (see str2binb). BYTES, on the other hand, treats each string character as a raw byte and doesn't do any bitwise operations. If the string passed as "TEXT" is an ASCII string, they'll operate the same.

I started this library quite a few years ago back in the IE7 days when ArrayBuffers weren't a thing. I'm somewhat hesitant to start adding browser version dependent things because that seems like a slippery slope to everything I hate about JavaScript.

It looks like ArrayBuffer requires IE10 or later and Blob isn't supported on mobile :(

@gpalomar
Copy link

gpalomar commented May 6, 2016

Ok, I'm not sure I fully understood your answer, but the difference lies in the fact that using TEXT, it converts the values using str2binb. However using BYTES the bitwise operations are unnecessary since each character is a raw byte. I think that 'BYTES' for that case is a little bit confusing for people like @lazydino and me. In my implementation I wish to be able to use an array of bytes, I understand you wish to maintain browser compatibility, but I believe a real binary read is necessary.

@Caligatio
Copy link
Owner

Check out #43 and let me know if that branch works for you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants