js: handle SHA-512/224 and SHA-512/256 in crypto.subtle.digest
The digest op fell through to SHA-256 for any unrecognized algorithm name, so SHA-512/224 and SHA-512/256 silently returned a SHA-256 hash. Add the two FIPS 180-4 truncated variants, which the AWS WAF challenge proof-of-work (used by booking.com and other CloudFront/WAF sites) requires. Fixes #314.
This commit is contained in:
1 parent
3f242aa285
commit
dc780d77e4
1 file changed
+6
-3
@@ -1067,9 +1067,10 @@ fn op_binding_called(state: &OpState, #[string] name: &str, #[string] payload: &
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Real WebCrypto `crypto.subtle.digest`. `algorithm` is the SubtleCrypto
|
/// Real WebCrypto `crypto.subtle.digest`. `algorithm` is the SubtleCrypto
|
||||||
/// algorithm name (`SHA-1` / `SHA-256` / `SHA-384` / `SHA-512`); unknown
|
/// algorithm name (`SHA-1` / `SHA-256` / `SHA-384` / `SHA-512`, plus the
|
||||||
/// names fall through to SHA-256 to match the previous JS fallback. Returns
|
/// FIPS 180-4 truncated variants `SHA-512/224` and `SHA-512/256`). Other
|
||||||
/// the raw digest bytes so the JS shim can hand them back as an ArrayBuffer.
|
/// names fall back to SHA-256. Returns the raw digest bytes so the JS shim
|
||||||
|
/// can hand them back as an ArrayBuffer.
|
||||||
#[op2]
|
#[op2]
|
||||||
#[buffer]
|
#[buffer]
|
||||||
fn op_subtle_digest(#[string] algorithm: &str, #[buffer] data: &[u8]) -> Vec<u8> {
|
fn op_subtle_digest(#[string] algorithm: &str, #[buffer] data: &[u8]) -> Vec<u8> {
|
||||||
@@ -1080,6 +1081,8 @@ fn op_subtle_digest(#[string] algorithm: &str, #[buffer] data: &[u8]) -> Vec<u8>
|
|||||||
"SHA-256" => sha2::Sha256::digest(data).to_vec(),
|
"SHA-256" => sha2::Sha256::digest(data).to_vec(),
|
||||||
"SHA-384" => sha2::Sha384::digest(data).to_vec(),
|
"SHA-384" => sha2::Sha384::digest(data).to_vec(),
|
||||||
"SHA-512" => sha2::Sha512::digest(data).to_vec(),
|
"SHA-512" => sha2::Sha512::digest(data).to_vec(),
|
||||||
|
"SHA-512/224" => sha2::Sha512_224::digest(data).to_vec(),
|
||||||
|
"SHA-512/256" => sha2::Sha512_256::digest(data).to_vec(),
|
||||||
_ => sha2::Sha256::digest(data).to_vec(),
|
_ => sha2::Sha256::digest(data).to_vec(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user