LibWeb: Implement PBKDF2 deriveBits for SubtleCrypto

This commit is contained in:
stelar7
2024-03-27 19:53:08 +01:00
committed by Andreas Kling
parent daf2c4ce46
commit 19bb62d60e
Notes: sideshowbarker 2024-07-17 11:29:41 +09:00
5 changed files with 121 additions and 10 deletions

View File

@@ -0,0 +1,54 @@
<script src="../include.js"></script>
<script>
asyncTest(async done => {
const encoder = new TextEncoder();
const message = "Hello friends";
const encodedMessage = encoder.encode(message);
const format = "raw";
const keyData = encodedMessage;
const importAlgorithm = {
name: "PBKDF2",
};
const extractable = false;
const keyUsages = ["deriveBits", "deriveKey"];
const keyMaterial = await window.crypto.subtle.importKey(
format,
keyData,
importAlgorithm,
extractable,
keyUsages
);
const salt = encodedMessage;
const iterations = 100000;
const hash = "SHA-256";
const derivationAlgorithm = {
name: "PBKDF2",
salt,
iterations,
hash,
};
const length = 256;
const derivedBits = await window.crypto.subtle.deriveBits(
derivationAlgorithm,
keyMaterial,
length
);
function arrayBufferToBase64(buffer) {
return btoa(String.fromCharCode.apply(null, new Uint8Array(buffer)));
}
const expectedResult = "WHYex7U9vTCisuffYpbNHR+Gbto/edldB+P+WB6RNIg=";
const actualResult = arrayBufferToBase64(derivedBits);
if (expectedResult == actualResult) {
println("Derived bits OK");
} else {
println("Derived bits FAIL");
}
done();
});
</script>