webcrypto
webcrypto copied to clipboard
fix: allow passing an algorithm name to digest
The examples on MDN show strings passed as the first argument. I've tested that it actually works in browsers.
The specification shows AlgorithmIdentifier as the first argument to digest and AlgorithmIdentifier is defined as typedef (object or DOMString) AlgorithmIdentifier;
I've only briefly looked at the rest of the API but it seems to me the problem recurs elsewhere: the algorithm is normalized but instead of passing the normalized algorithm to the backend code, the original unnormalized value is passed. I only depend on digest right now and do not use the rest of the API so I've decided to not touch the rest of the API, but I suspect a similar change needs to be applied to other API functions.
I ran into the same issue today. fwiw, I'm using the code below to temporarily work around the issue until this PR is merged:
window.crypto.__proto__.subtle.__proto__.digest = (digest => (name, data) => digest({ name }, data))(window.crypto.subtle.digest);
Yeah, although the MDN documentation shows that you can provide an algorithm name as a string, this library expects an object with a name property.
Until this is fixed, I guess I'm going to have to use the following format:
crypto.subtle.digest({name: 'SHA-512'}, data)