Index: chrome/test/data/extensions/api_test/enterprise_platform_keys/basic.js |
diff --git a/chrome/test/data/extensions/api_test/enterprise_platform_keys/basic.js b/chrome/test/data/extensions/api_test/enterprise_platform_keys/basic.js |
index b095e9eecf2be211bf1c5ba8053b0952aa78312c..b04c58b40e57f97af1b18cb2e94b803d7181e29f 100644 |
--- a/chrome/test/data/extensions/api_test/enterprise_platform_keys/basic.js |
+++ b/chrome/test/data/extensions/api_test/enterprise_platform_keys/basic.js |
@@ -5,6 +5,8 @@ |
// Must be packed to ../enterprise_platform_keys.crx using the private key |
// ../enterprise_platform_keys.pem . |
+'use strict'; |
+ |
var assertEq = chrome.test.assertEq; |
var assertTrue = chrome.test.assertTrue; |
var assertThrows = chrome.test.assertThrows; |
@@ -250,14 +252,45 @@ function beforeTests(callback) { |
getUserToken(function(userToken) { |
if (!userToken) |
- chrome.test.fail('no user token'); |
+ fail('no user token'); |
if (userToken.id != 'user') |
- chrome.test.fail('token is not named "user".'); |
+ fail('token is not named "user".'); |
callback(userToken); |
}); |
} |
+function checkKeyPairCommonFormat(keyPair) { |
+ function checkReadOnly(object, key) { |
+ var original = object[key]; |
+ try { |
+ object[key] = {}; |
+ fail('Expected that the property is read only and an exception to ' + |
+ 'be thrown'); |
+ } catch (error) { |
+ assertTrue(object[key] === original); |
+ } |
+ } |
+ |
+ checkReadOnly(keyPair, 'privateKey'); |
+ var privateKey = keyPair.privateKey; |
+ assertEq('private', privateKey.type); |
+ assertEq(false, privateKey.extractable); |
+ checkReadOnly(privateKey, 'algorithm'); |
+ checkReadOnly(privateKey.algorithm, 'hash'); |
+ checkReadOnly(privateKey.algorithm, 'modulusLength'); |
+ checkReadOnly(privateKey.algorithm, 'name'); |
+ |
+ checkReadOnly(keyPair, 'publicKey'); |
+ var publicKey = keyPair.publicKey; |
+ assertEq('public', publicKey.type); |
+ assertEq(true, publicKey.extractable); |
+ checkReadOnly(publicKey, 'algorithm'); |
+ checkReadOnly(publicKey.algorithm, 'hash'); |
+ checkReadOnly(publicKey.algorithm, 'modulusLength'); |
+ checkReadOnly(publicKey.algorithm, 'name'); |
+} |
+ |
function runTests(userToken) { |
chrome.test.runTests([ |
function hasSubtleCryptoMethods() { |
@@ -278,8 +311,8 @@ function runTests(userToken) { |
name: "RSASSA-PKCS1-v1_5", |
// RsaHashedKeyGenParams |
modulusLength: 512, |
- publicExponent: |
- new Uint8Array([0x01, 0x00, 0x01]), // Equivalent to 65537 |
+ // Equivalent to 65537 |
+ publicExponent: new Uint8Array([0x01, 0x00, 0x01]), |
hash: { |
name: "SHA-1", |
} |
@@ -296,18 +329,27 @@ function runTests(userToken) { |
return userToken.subtleCrypto.exportKey('spki', |
keyPair.publicKey); |
}), |
- function(error) { |
- assertTrue(false, "GenerateKey failed: " + error); |
- }) |
+ function(error) { fail("GenerateKey failed: " + error); }) |
.then(callbackPass(function(publicKeySpki) { |
+ // Ensure that the returned key pair has the expected format. |
+ // Some parameter independent checks: |
+ checkKeyPairCommonFormat(cachedKeyPair); |
+ |
+ // Checks depending on the generateKey arguments: |
+ var privateKey = cachedKeyPair.privateKey; |
+ assertEq(['sign'], privateKey.usages); |
+ assertEq(algorithm, privateKey.algorithm); |
+ |
+ var publicKey = cachedKeyPair.publicKey; |
+ assertEq([], publicKey.usages); |
+ assertEq(algorithm, publicKey.algorithm); |
+ |
cachedSpki = publicKeySpki; |
var signParams = {name: 'RSASSA-PKCS1-v1_5'}; |
return userToken.subtleCrypto.sign( |
- signParams, cachedKeyPair.privateKey, data); |
+ signParams, privateKey, data); |
}), |
- function(error) { |
- assertTrue(false, "Export failed: " + error); |
- }) |
+ function(error) { fail("Export failed: " + error); }) |
.then(callbackPass(function(signature) { |
var importParams = { |
name: algorithm.name, |
@@ -322,7 +364,7 @@ function runTests(userToken) { |
return window.crypto.subtle.importKey( |
"spki", cachedSpki, importParams, false, ["verify"]); |
}), |
- function(error) { assertTrue(false, "Sign failed: " + error); }) |
+ function(error) { fail("Sign failed: " + error); }) |
.then(callbackPass(function(webCryptoPublicKey) { |
assertTrue(!!webCryptoPublicKey); |
assertEq(algorithm.modulusLength, |
@@ -332,15 +374,11 @@ function runTests(userToken) { |
return window.crypto.subtle.verify( |
algorithm, webCryptoPublicKey, cachedSignature, data); |
}), |
- function(error) { |
- assertTrue(false, "Import failed: " + error); |
- }) |
+ function(error) { fail("Import failed: " + error); }) |
.then(callbackPass(function(success) { |
assertEq(true, success, "Signature invalid."); |
}), |
- function(error) { |
- assertTrue(false, "Verification failed: " + error); |
- }); |
+ function(error) { fail("Verification failed: " + error); }); |
}, |
// Imports and removes certificates for privateKeyPkcs8, which was imported |
@@ -380,9 +418,7 @@ function runTests(userToken) { |
} |
}; |
userToken.subtleCrypto.generateKey(algorithm, false, ['sign']).then( |
- function(keyPair) { |
- assertTrue(false, 'generateKey was expected to fail'); |
- }, |
+ function(keyPair) { fail('generateKey was expected to fail'); }, |
callbackPass(function(error) { |
assertTrue(error instanceof Error); |
assertEq('A required parameter was missing or out-of-range', |
@@ -399,9 +435,7 @@ function runTests(userToken) { |
publicExponent: new Uint8Array([0x01, 0x00, 0x01]), |
}; |
userToken.subtleCrypto.generateKey(algorithm, false, ['sign']).then( |
- function(keyPair) { |
- assertTrue(false, 'generateKey was expected to fail'); |
- }, |
+ function(keyPair) { fail('generateKey was expected to fail'); }, |
callbackPass(function(error) { |
assertEq( |
new Error('Error: A required parameter was missing our out-of-range'), |
@@ -419,9 +453,7 @@ function runTests(userToken) { |
publicExponent: new Uint8Array([0x01, 0x01]), |
}; |
userToken.subtleCrypto.generateKey(algorithm, false, ['sign']).then( |
- function(keyPair) { |
- assertTrue(false, 'generateKey was expected to fail'); |
- }, |
+ function(keyPair) { fail('generateKey was expected to fail'); }, |
callbackPass(function(error) { |
assertTrue(error instanceof Error); |
assertEq('A required parameter was missing or out-of-range', |