| function run_test(vectors) { | |
| function testCryptoKeySerialization( | |
| generateKeyAlgorithm, generateKeyUsages, exportFormat) { | |
| promise_test(async t => { | |
| var cryptoKey = await crypto.subtle.generateKey( | |
| generateKeyAlgorithm, true, generateKeyUsages); | |
| const keyExported = | |
| await crypto.subtle.exportKey(exportFormat, cryptoKey); | |
| const {key} = structuredClone({key: cryptoKey}); | |
| const newKeyExported = | |
| await crypto.subtle.exportKey(exportFormat, key); | |
| assert_true(equalBuffers(keyExported, newKeyExported)); | |
| }, 'serialization test ' + objectToString(generateKeyAlgorithm)); | |
| }; | |
| function testCryptoKeyPairSerialization( | |
| generateKeyAlgorithm, generateKeyUsages, publicExportFormat, | |
| privateExportFormat) { | |
| promise_test(async t => { | |
| var keyPair = await crypto.subtle.generateKey( | |
| generateKeyAlgorithm, true, generateKeyUsages); | |
| const publicKeyExported = | |
| await crypto.subtle.exportKey(publicExportFormat, keyPair.publicKey); | |
| const privateKeyExported = await crypto.subtle.exportKey( | |
| privateExportFormat, keyPair.privateKey); | |
| const {publicKey, privateKey} = structuredClone( | |
| {publicKey: keyPair.publicKey, privateKey: keyPair.privateKey}); | |
| const newPublicKeyExported = | |
| await crypto.subtle.exportKey(publicExportFormat, publicKey); | |
| assert_true(equalBuffers(publicKeyExported, newPublicKeyExported)); | |
| const newPrivateKeyExported = await crypto.subtle.exportKey( | |
| privateExportFormat, privateKey); | |
| assert_true(equalBuffers(privateKeyExported, newPrivateKeyExported)); | |
| }, 'serialization test ' + objectToString(generateKeyAlgorithm)); | |
| }; | |
| vectors.forEach(function(vector) { | |
| if (vector.resultType === 'CryptoKey') { | |
| allAlgorithmSpecifiersFor(vector.name) | |
| .forEach(function(generateKeyAlgorithm) { | |
| testCryptoKeySerialization( | |
| generateKeyAlgorithm, vector.usages, vector.exportFormat); | |
| }); | |
| } else { | |
| allAlgorithmSpecifiersFor(vector.name) | |
| .forEach(function(generateKeyAlgorithm) { | |
| testCryptoKeyPairSerialization( | |
| generateKeyAlgorithm, vector.usages, vector.publicFormat, | |
| vector.privateFormat); | |
| }); | |
| } | |
| }); | |
| } |