Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: chrome/test/data/extensions/api_test/enterprise_platform_keys/basic.js

Issue 428223003: More platformKeys api tests for the new system token. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/test/data/extensions/api_test/enterprise_platform_keys.crx ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Must be packed to ../enterprise_platform_keys.crx using the private key 5 // Must be packed to ../enterprise_platform_keys.crx using the private key
6 // ../enterprise_platform_keys.pem . 6 // ../enterprise_platform_keys.pem .
7 7
8 'use strict'; 8 'use strict';
9 9
10 var systemTokenEnabled = (location.href.indexOf("systemTokenEnabled") != -1);
11
10 var assertEq = chrome.test.assertEq; 12 var assertEq = chrome.test.assertEq;
11 var assertTrue = chrome.test.assertTrue; 13 var assertTrue = chrome.test.assertTrue;
12 var assertThrows = chrome.test.assertThrows; 14 var assertThrows = chrome.test.assertThrows;
13 var fail = chrome.test.fail; 15 var fail = chrome.test.fail;
14 var succeed = chrome.test.succeed; 16 var succeed = chrome.test.succeed;
15 var callbackPass = chrome.test.callbackPass; 17 var callbackPass = chrome.test.callbackPass;
16 var callbackFail= chrome.test.callbackFail; 18 var callbackFail= chrome.test.callbackFail;
17 19
18 // openssl req -new -x509 -key privkey.pem \ 20 // openssl req -new -x509 -key privkey.pem \
19 // -outform der -out cert.der -days 36500 21 // -outform der -out cert.der -days 36500
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 function sortCerts(certs) { 240 function sortCerts(certs) {
239 return certs.sort(compareArrays); 241 return certs.sort(compareArrays);
240 } 242 }
241 243
242 /** 244 /**
243 * Checks whether the certificates currently stored in |token| match 245 * Checks whether the certificates currently stored in |token| match
244 * |expectedCerts| by comparing to the result of platformKeys.getCertificates. 246 * |expectedCerts| by comparing to the result of platformKeys.getCertificates.
245 * The order of |expectedCerts| is ignored. Afterwards calls |callback|. 247 * The order of |expectedCerts| is ignored. Afterwards calls |callback|.
246 */ 248 */
247 function assertCertsStored(token, expectedCerts, callback) { 249 function assertCertsStored(token, expectedCerts, callback) {
250 if (!token) {
251 if (callback)
252 callback();
253 return;
254 }
248 chrome.enterprise.platformKeys.getCertificates( 255 chrome.enterprise.platformKeys.getCertificates(
249 token.id, 256 token.id,
250 callbackPass(function(actualCerts) { 257 callbackPass(function(actualCerts) {
251 assertEq(expectedCerts.length, 258 assertEq(expectedCerts.length,
252 actualCerts.length, 259 actualCerts.length,
253 'Number of stored certs not as expected'); 260 'Number of stored certs not as expected');
254 if (expectedCerts.length == actualCerts.length) { 261 if (expectedCerts.length == actualCerts.length) {
255 actualCerts = actualCerts.map( 262 actualCerts = actualCerts.map(
256 function(buffer) { return new Uint8Array(buffer); }); 263 function(buffer) { return new Uint8Array(buffer); });
257 actualCerts = sortCerts(actualCerts); 264 actualCerts = sortCerts(actualCerts);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 assertTrue(!!chrome.enterprise.platformKeys.getTokens, 301 assertTrue(!!chrome.enterprise.platformKeys.getTokens,
295 "No getTokens function."); 302 "No getTokens function.");
296 assertTrue(!!chrome.enterprise.platformKeys.importCertificate, 303 assertTrue(!!chrome.enterprise.platformKeys.importCertificate,
297 "No importCertificate function."); 304 "No importCertificate function.");
298 assertTrue(!!chrome.enterprise.platformKeys.removeCertificate, 305 assertTrue(!!chrome.enterprise.platformKeys.removeCertificate,
299 "No removeCertificate function."); 306 "No removeCertificate function.");
300 307
301 getTokens(function(userToken, systemToken) { 308 getTokens(function(userToken, systemToken) {
302 if (!userToken) 309 if (!userToken)
303 fail('no user token'); 310 fail('no user token');
304 if (userToken.id != 'user') 311 assertEq('user', userToken.id);
305 fail('user token is not named "user".');
306 312
307 if (!systemToken) 313 if (systemTokenEnabled) {
308 fail('no system token'); 314 if (!systemToken)
309 if (systemToken.id != 'system') 315 fail('no system token');
310 fail('system token is not named "system".'); 316 assertEq('system', systemToken.id);
317 } else {
318 assertEq(null,
319 systemToken,
320 'system token is disabled, but found the token nonetheless.');
321 }
311 322
312 callback(userToken, systemToken); 323 callback(userToken, systemToken);
313 }); 324 });
314 } 325 }
315 326
316 function checkAlgorithmIsCopiedOnRead(key) { 327 function checkAlgorithmIsCopiedOnRead(key) {
317 var algorithm = key.algorithm; 328 var algorithm = key.algorithm;
318 var originalAlgorithm = { 329 var originalAlgorithm = {
319 name: algorithm.name, 330 name: algorithm.name,
320 modulusLength: algorithm.modulusLength, 331 modulusLength: algorithm.modulusLength,
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 return window.crypto.subtle.verify( 435 return window.crypto.subtle.verify(
425 algorithm, webCryptoPublicKey, cachedSignature, data); 436 algorithm, webCryptoPublicKey, cachedSignature, data);
426 }), 437 }),
427 function(error) { fail("Import failed: " + error); }) 438 function(error) { fail("Import failed: " + error); })
428 .then(callbackPass(function(success) { 439 .then(callbackPass(function(success) {
429 assertEq(true, success, "Signature invalid."); 440 assertEq(true, success, "Signature invalid.");
430 callback(cachedKeyPair); 441 callback(cachedKeyPair);
431 }), function(error) { fail("Verification failed: " + error); }); 442 }), function(error) { fail("Verification failed: " + error); });
432 } 443 }
433 444
445 function testInitiallyNoCerts(token) {
446 assertCertsStored(token, []);
447 }
448
449 function testHasSubtleCryptoMethods(token) {
450 assertTrue(!!token.subtleCrypto.generateKey,
451 "token has no generateKey method");
452 assertTrue(!!token.subtleCrypto.sign, "token has no sign method");
453 assertTrue(!!token.subtleCrypto.exportKey,
454 "token has no exportKey method");
455 succeed();
456 }
457
458 // Generates a key and signs some data with it. Verifies the signature using
459 // WebCrypto. Verifies also that a second sign operation fails.
460 function testGenerateKeyAndSign(token) {
461 var algorithm = {
462 name: "RSASSA-PKCS1-v1_5",
463 // RsaHashedKeyGenParams
464 modulusLength: 512,
465 // Equivalent to 65537
466 publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
467 hash: {
468 name: "SHA-1",
469 }
470 };
471
472 // Some random data to sign.
473 var data = new Uint8Array([0, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6]);
474 generateKeyAndVerify(token,
475 algorithm,
476 data,
477 callbackPass(function(keyPair) {
478 // Try to sign data with the same key a second time, which
479 // must fail.
480 var signParams = {name: 'RSASSA-PKCS1-v1_5'};
481 token.subtleCrypto.sign(signParams, keyPair.privateKey, data).then(
482 function(signature) { fail("Second sign call was expected to fail."); },
483 callbackPass(function(error) {
484 assertTrue(error instanceof Error);
485 assertEq('The operation failed for an operation-specific reason',
486 error.message);
487 }));
488 }));
489 }
490
491 // Generates a key and signs some data with other parameters. Verifies the
492 // signature using WebCrypto.
493 function testGenerateKeyAndSignOtherParameters(token) {
494 var algorithm = {
495 name: "RSASSA-PKCS1-v1_5",
496 // RsaHashedKeyGenParams
497 modulusLength: 1024,
498 // Equivalent to 65537
499 publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
500 hash: {
501 name: "SHA-512",
502 }
503 };
504
505 // Some random data to sign.
506 var data = new Uint8Array([5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 0, 0, 254]);
507 generateKeyAndVerify(token, algorithm, data, callbackPass());
508 }
509
510 // Call generate key with invalid algorithm parameter, missing
511 // modulusLength.
512 function testAlgorithmParameterMissingModulusLength(token) {
513 var algorithm = {
514 name: "RSASSA-PKCS1-v1_5",
515 // Equivalent to 65537
516 publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
517 hash: {
518 name: "SHA-1",
519 }
520 };
521 token.subtleCrypto.generateKey(algorithm, false, ['sign'])
522 .then(function(keyPair) { fail('generateKey was expected to fail'); },
523 callbackPass(function(error) {
524 assertTrue(error instanceof Error);
525 assertEq('A required parameter was missing or out-of-range', error.message);
526 }));
527 }
528
529 // Call generate key with invalid algorithm parameter, missing hash.
530 function testAlgorithmParameterMissingHash(token) {
531 var algorithm = {
532 name: 'RSASSA-PKCS1-v1_5',
533 modulusLength: 512,
534 // Equivalent to 65537
535 publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
536 };
537 token.subtleCrypto.generateKey(algorithm, false, ['sign'])
538 .then(function(keyPair) { fail('generateKey was expected to fail'); },
539 callbackPass(function(error) {
540 assertEq(
541 new Error('Error: A required parameter was missing our out-of-range'),
542 error);
543 }));
544 }
545
546 // Call generate key with invalid algorithm parameter, unsupported public
547 // exponent.
548 function testAlgorithmParameterUnsupportedPublicExponent(token) {
549 var algorithm = {
550 name: 'RSASSA-PKCS1-v1_5',
551 modulusLength: 512,
552 // Different from 65537.
553 publicExponent: new Uint8Array([0x01, 0x01]),
554 };
555 token.subtleCrypto.generateKey(algorithm, false, ['sign'])
556 .then(function(keyPair) { fail('generateKey was expected to fail'); },
557 callbackPass(function(error) {
558 assertTrue(error instanceof Error);
559 assertEq('A required parameter was missing or out-of-range', error.message);
560 }));
561 }
562
563 function testImportInvalidCert(token) {
564 var invalidCert = new ArrayBuffer(16);
565 chrome.enterprise.platformKeys.importCertificate(
566 token.id,
567 invalidCert,
568 callbackFail('Certificate is not a valid X.509 certificate.'));
569 }
570
571 function testRemoveUnknownCert(token) {
572 chrome.enterprise.platformKeys.removeCertificate(
573 token.id, cert2.buffer, callbackFail('Certificate could not be found.'));
574 }
575
576 function testRemoveInvalidCert(token) {
577 var invalidCert = new ArrayBuffer(16);
578 chrome.enterprise.platformKeys.removeCertificate(
579 token.id,
580 invalidCert,
581 callbackFail('Certificate is not a valid X.509 certificate.'));
582 }
583
584 function bindTestsToToken(tests, token) {
585 return tests.map(function(test) {
586 var bound = test.bind(undefined, token);
587 bound.generatedName = test.name;
588 return bound;
589 });
590 }
591
434 function runTests(userToken, systemToken) { 592 function runTests(userToken, systemToken) {
435 chrome.test.runTests([ 593 // These tests don't depend on keys being loaded on C++ side (which will be
436 function hasSubtleCryptoMethods() { 594 // removed by tests below) and are run for each available token.
437 assertTrue(!!userToken.subtleCrypto.generateKey, 595 var testsIndependentOfKeysWithTokenParameter = [
438 "user token has no generateKey method"); 596 testInitiallyNoCerts,
439 assertTrue(!!userToken.subtleCrypto.sign, 597 testHasSubtleCryptoMethods,
440 "user token has no sign method"); 598 testRemoveUnknownCert,
441 assertTrue(!!userToken.subtleCrypto.exportKey, 599 testGenerateKeyAndSign,
442 "user token has no exportKey method"); 600 testGenerateKeyAndSignOtherParameters,
443 succeed(); 601 testAlgorithmParameterMissingModulusLength,
444 }, 602 testAlgorithmParameterMissingHash,
445 603 testAlgorithmParameterUnsupportedPublicExponent,
446 function initiallyNoCerts() { 604 testImportInvalidCert,
447 assertCertsStored(userToken, []); 605 testRemoveInvalidCert,
448 assertCertsStored(systemToken, []); 606 ];
449 }, 607 var testsIndependentOfKeys =
450 608 bindTestsToToken(testsIndependentOfKeysWithTokenParameter, userToken);
451 // Generates a key and signs some data with it. Verifies the signature using 609 if (systemToken) {
452 // WebCrypto. Verifies also that a second sign operation fails. 610 testsIndependentOfKeys.concat(bindTestsToToken(
453 function generateKeyAndSign() { 611 testsIndependentOfKeysWithTokenParameter, systemToken));
454 var algorithm = { 612 }
455 name: "RSASSA-PKCS1-v1_5", 613
456 // RsaHashedKeyGenParams 614 // These tests are not parameterized and work with the keys loaded by the C++
457 modulusLength: 512, 615 // side and potentially remove these keys from the tokens.
458 // Equivalent to 65537 616 var testsNotParameterized = [
459 publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
460 hash: {
461 name: "SHA-1",
462 }
463 };
464
465 // Some random data to sign.
466 var data = new Uint8Array([0, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6]);
467 generateKeyAndVerify(userToken,
468 algorithm,
469 data,
470 callbackPass(function(keyPair) {
471 // Try to sign data with the same key a second time, which
472 // must fail.
473 var signParams = {name: 'RSASSA-PKCS1-v1_5'};
474 userToken.subtleCrypto.sign(signParams, keyPair.privateKey, data).then(
475 function(signature) {
476 fail("Second sign call was expected to fail.");
477 },
478 callbackPass(function(error) {
479 assertTrue(error instanceof Error);
480 assertEq('The operation failed for an operation-specific reason',
481 error.message);
482 }));
483 }));
484 },
485
486 // Generates a key and signs some data with other parameters. Verifies the
487 // signature using WebCrypto.
488 function generateKeyAndSignOtherParameters() {
489 var algorithm = {
490 name: "RSASSA-PKCS1-v1_5",
491 // RsaHashedKeyGenParams
492 modulusLength: 1024,
493 // Equivalent to 65537
494 publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
495 hash: {
496 name: "SHA-512",
497 }
498 };
499
500 // Some random data to sign.
501 var data = new Uint8Array([5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 0, 0, 254]);
502 generateKeyAndVerify(userToken, algorithm, data, callbackPass());
503 },
504
505 // Importing a cert should fail, if the private key is stored in another 617 // Importing a cert should fail, if the private key is stored in another
506 // token. 618 // token.
507 // This uses the cert that refers to the privateKeyPkcs8, which was imported 619 // This uses the certs that refers to the privateKeyPkcs8User and
508 // on C++'s side. 620 // privateKeyPkcs8System keys, which were imported on C++'s side.
509 function importCertWithKeyInOtherToken() { 621 function importCertWithKeyInOtherToken() {
510 chrome.enterprise.platformKeys.importCertificate( 622 if (!systemToken) {
511 systemToken.id, cert1a.buffer, callbackFail('Key not found.')); 623 succeed();
624 return;
625 }
626
627 function importToSystemWithKeyInUserToken(callback) {
628 chrome.enterprise.platformKeys.importCertificate(
629 systemToken.id,
630 cert1a.buffer,
631 callbackFail('Key not found.', callback));
632 }
633 function importToUserWithKeyInSystemToken(callback) {
634 chrome.enterprise.platformKeys.importCertificate(
635 userToken.id,
636 certSystem.buffer,
637 callbackFail('Key not found.', callback));
638 }
639
640 importToSystemWithKeyInUserToken(
641 importToUserWithKeyInSystemToken.bind(null, null));
512 }, 642 },
513 643
514 // Imports and removes certificates for privateKeyPkcs8User, which was 644 // Imports and removes certificates for privateKeyPkcs8User and
645 // privateKeyPkcs8System (if the system token is enabled), which were
515 // imported on C++'s side. 646 // imported on C++'s side.
516 // Note: After this test, privateKeyPkcs8User is not stored anymore! 647 // Note: After this test, privateKeyPkcs8User and privateKeyPkcs8System are
517 function importAndRemoveCertsToUserToken() { 648 // not stored anymore!
518 runAsyncSequence([ 649 function importAndRemoveCerts() {
519 chrome.enterprise.platformKeys.importCertificate.bind( 650 if (systemToken) {
520 null, userToken.id, cert1a.buffer), 651 runAsyncSequence([
521 assertCertsStored.bind(null, userToken, [cert1a]), 652 chrome.enterprise.platformKeys.importCertificate.bind(
522 // Importing the same cert again shouldn't change anything. 653 null, userToken.id, cert1a.buffer),
523 chrome.enterprise.platformKeys.importCertificate.bind( 654 assertCertsStored.bind(null, userToken, [cert1a]),
524 null, userToken.id, cert1a.buffer), 655
525 assertCertsStored.bind(null, userToken, [cert1a]), 656 // Importing the same cert again shouldn't change anything.
526 // Importing another certificate should succeed. 657 chrome.enterprise.platformKeys.importCertificate.bind(
527 chrome.enterprise.platformKeys.importCertificate.bind( 658 null, userToken.id, cert1a.buffer),
528 null, userToken.id, cert1b.buffer), 659 assertCertsStored.bind(null, userToken, [cert1a]),
529 assertCertsStored.bind(null, userToken, [cert1a, cert1b]), 660
530 // Shouldn't affect the system token. 661 // The system token should still be empty.
531 assertCertsStored.bind(null, systemToken, []), 662 assertCertsStored.bind(null, systemToken, []),
532 chrome.enterprise.platformKeys.removeCertificate.bind( 663
533 null, userToken.id, cert1a.buffer), 664 // Importing to the system token should not affect the user token.
534 assertCertsStored.bind(null, userToken, [cert1b]), 665 chrome.enterprise.platformKeys.importCertificate.bind(
535 chrome.enterprise.platformKeys.removeCertificate.bind( 666 null, systemToken.id, certSystem.buffer),
536 null, userToken.id, cert1b.buffer), 667 assertCertsStored.bind(null, systemToken, [certSystem]),
537 assertCertsStored.bind(null, userToken, []) 668 assertCertsStored.bind(null, userToken, [cert1a]),
538 ]); 669
670 // Importing the same cert again to the system token shouldn't change
671 // anything.
672 chrome.enterprise.platformKeys.importCertificate.bind(
673 null, systemToken.id, certSystem.buffer),
674 assertCertsStored.bind(null, systemToken, [certSystem]),
675
676 // Importing another certificate should succeed.
677 chrome.enterprise.platformKeys.importCertificate.bind(
678 null, userToken.id, cert1b.buffer),
679 assertCertsStored.bind(null, userToken, [cert1a, cert1b]),
680
681 // Remove cert1a.
682 chrome.enterprise.platformKeys.removeCertificate.bind(
683 null, userToken.id, cert1a.buffer),
684 assertCertsStored.bind(null, userToken, [cert1b]),
685
686 // Remove certSystem.
687 chrome.enterprise.platformKeys.removeCertificate.bind(
688 null, systemToken.id, certSystem.buffer),
689 assertCertsStored.bind(null, systemToken, []),
690 assertCertsStored.bind(null, userToken, [cert1b]),
691
692 // Remove cert1b.
693 chrome.enterprise.platformKeys.removeCertificate.bind(
694 null, userToken.id, cert1b.buffer),
695 assertCertsStored.bind(null, userToken, [])
696 ]);
697 } else {
698 runAsyncSequence([
699 chrome.enterprise.platformKeys.importCertificate.bind(
700 null, userToken.id, cert1a.buffer),
701 assertCertsStored.bind(null, userToken, [cert1a]),
702 // Importing the same cert again shouldn't change anything.
703 chrome.enterprise.platformKeys.importCertificate.bind(
704 null, userToken.id, cert1a.buffer),
705 assertCertsStored.bind(null, userToken, [cert1a]),
706 // Importing another certificate should succeed.
707 chrome.enterprise.platformKeys.importCertificate.bind(
708 null, userToken.id, cert1b.buffer),
709 assertCertsStored.bind(null, userToken, [cert1a, cert1b]),
710 chrome.enterprise.platformKeys.removeCertificate.bind(
711 null, userToken.id, cert1a.buffer),
712 assertCertsStored.bind(null, userToken, [cert1b]),
713 chrome.enterprise.platformKeys.removeCertificate.bind(
714 null, userToken.id, cert1b.buffer),
715 assertCertsStored.bind(null, userToken, [])
716 ]);
717 }
539 }, 718 },
540 719
541 // Imports and removes certificates for privateKeyPkcs8System, which was 720 function getCertsInvalidToken() {
542 // imported on C++'s side. 721 chrome.enterprise.platformKeys.getCertificates(
543 // Note: After this test, privateKeyPkcs8System is not stored anymore! 722 'invalid token id', callbackFail('The token is not valid.'));
544 function importAndRemoveCertsToSystemToken() {
545 runAsyncSequence([
546 chrome.enterprise.platformKeys.importCertificate.bind(
547 null, systemToken.id, certSystem.buffer),
548 assertCertsStored.bind(null, systemToken, [certSystem]),
549 // Importing the same cert again shouldn't change anything.
550 chrome.enterprise.platformKeys.importCertificate.bind(
551 null, systemToken.id, certSystem.buffer),
552 assertCertsStored.bind(null, systemToken, [certSystem]),
553 // Shouldn't affect the user token.
554 assertCertsStored.bind(null, userToken, []),
555 chrome.enterprise.platformKeys.removeCertificate.bind(
556 null, systemToken.id, certSystem.buffer),
557 assertCertsStored.bind(null, systemToken, []),
558 ]);
559 },
560
561 // Call generate key with invalid algorithm parameter, missing
562 // modulusLength.
563 function algorithmParameterMissingModulusLength() {
564 var algorithm = {
565 name: "RSASSA-PKCS1-v1_5",
566 // Equivalent to 65537
567 publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
568 hash: {
569 name: "SHA-1",
570 }
571 };
572 userToken.subtleCrypto.generateKey(algorithm, false, ['sign']).then(
573 function(keyPair) { fail('generateKey was expected to fail'); },
574 callbackPass(function(error) {
575 assertTrue(error instanceof Error);
576 assertEq('A required parameter was missing or out-of-range',
577 error.message);
578 }));
579 },
580
581 // Call generate key with invalid algorithm parameter, missing hash.
582 function algorithmParameterMissingHash() {
583 var algorithm = {
584 name: 'RSASSA-PKCS1-v1_5',
585 modulusLength: 512,
586 // Equivalent to 65537
587 publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
588 };
589 userToken.subtleCrypto.generateKey(algorithm, false, ['sign']).then(
590 function(keyPair) { fail('generateKey was expected to fail'); },
591 callbackPass(function(error) {
592 assertEq(
593 new Error('Error: A required parameter was missing our out-of-range'),
594 error);
595 }));
596 },
597
598 // Call generate key with invalid algorithm parameter, unsupported public
599 // exponent.
600 function algorithmParameterUnsupportedPublicExponent() {
601 var algorithm = {
602 name: 'RSASSA-PKCS1-v1_5',
603 modulusLength: 512,
604 // Different from 65537.
605 publicExponent: new Uint8Array([0x01, 0x01]),
606 };
607 userToken.subtleCrypto.generateKey(algorithm, false, ['sign']).then(
608 function(keyPair) { fail('generateKey was expected to fail'); },
609 callbackPass(function(error) {
610 assertTrue(error instanceof Error);
611 assertEq('A required parameter was missing or out-of-range',
612 error.message);
613 }));
614 }, 723 },
615 724
616 // Imports a certificate for which no private key was imported/generated 725 // Imports a certificate for which no private key was imported/generated
617 // before. 726 // before.
618 function missingPrivateKey() { 727 function missingPrivateKeyUserToken() {
619 chrome.enterprise.platformKeys.importCertificate( 728 chrome.enterprise.platformKeys.importCertificate(
620 userToken.id, cert2.buffer, callbackFail('Key not found.')); 729 userToken.id, cert2.buffer, callbackFail('Key not found.'));
621 }, 730 },
622 731
623 function importInvalidCert() { 732 function missingPrivateKeySystemToken() {
624 var invalidCert = new ArrayBuffer(16); 733 if (!systemToken) {
734 succeed();
735 return;
736 }
625 chrome.enterprise.platformKeys.importCertificate( 737 chrome.enterprise.platformKeys.importCertificate(
626 userToken.id, 738 systemToken.id, certSystem.buffer, callbackFail('Key not found.'));
627 invalidCert,
628 callbackFail('Certificate is not a valid X.509 certificate.'));
629 },
630
631 function removeUnknownCert() {
632 chrome.enterprise.platformKeys.removeCertificate(
633 userToken.id,
634 cert2.buffer,
635 callbackFail('Certificate could not be found.'));
636 },
637
638 function removeInvalidCert() {
639 var invalidCert = new ArrayBuffer(16);
640 chrome.enterprise.platformKeys.removeCertificate(
641 userToken.id,
642 invalidCert,
643 callbackFail('Certificate is not a valid X.509 certificate.'));
644 },
645
646 function getCertsInvalidToken() {
647 chrome.enterprise.platformKeys.getCertificates(
648 'invalid token id', callbackFail('The token is not valid.'));
649 } 739 }
650 ]); 740 ];
741
742 chrome.test.runTests(testsIndependentOfKeys.concat(testsNotParameterized));
651 } 743 }
652 744
653 beforeTests(runTests); 745 beforeTests(runTests);
OLDNEW
« no previous file with comments | « chrome/test/data/extensions/api_test/enterprise_platform_keys.crx ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698