| Index: chrome/renderer/resources/extensions/platform_keys/subtle_crypto.js
|
| diff --git a/chrome/renderer/resources/extensions/enterprise_platform_keys/subtle_crypto.js b/chrome/renderer/resources/extensions/platform_keys/subtle_crypto.js
|
| similarity index 54%
|
| copy from chrome/renderer/resources/extensions/enterprise_platform_keys/subtle_crypto.js
|
| copy to chrome/renderer/resources/extensions/platform_keys/subtle_crypto.js
|
| index 017a3e26d7f06a1fa036fcfaa7b5194f54085c19..14a5388cef3ad8f189b8b05287e0b8da9c79f6c9 100644
|
| --- a/chrome/renderer/resources/extensions/enterprise_platform_keys/subtle_crypto.js
|
| +++ b/chrome/renderer/resources/extensions/platform_keys/subtle_crypto.js
|
| @@ -1,17 +1,15 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| var utils = require('utils');
|
| -var internalAPI = require('enterprise.platformKeys.internalAPI');
|
| -var intersect = require('enterprise.platformKeys.utils').intersect;
|
| -var KeyPair = require('enterprise.platformKeys.KeyPair').KeyPair;
|
| -var keyModule = require('enterprise.platformKeys.Key');
|
| +var internalAPI = require('platformKeys.internalAPI');
|
| +var keyModule = require('platformKeys.Key');
|
| var getSpki = keyModule.getSpki;
|
| var KeyUsage = keyModule.KeyUsage;
|
|
|
| var normalizeAlgorithm =
|
| - requireNative('enterprise_platform_keys_natives').NormalizeAlgorithm;
|
| + requireNative('platform_keys_natives').NormalizeAlgorithm;
|
|
|
| // This error is thrown by the internal and public API's token functions and
|
| // must be rethrown by this custom binding. Keep this in sync with the C++ part
|
| @@ -51,27 +49,9 @@ function catchInvalidTokenError(reject) {
|
| return false;
|
| }
|
|
|
| -// Returns true if |array| is a BigInteger describing the standard public
|
| -// exponent 65537. In particular, it ignores leading zeros as required by the
|
| -// BigInteger definition in WebCrypto.
|
| -function equalsStandardPublicExponent(array) {
|
| - var expected = [0x01, 0x00, 0x01];
|
| - if (array.length < expected.length)
|
| - return false;
|
| - for (var i = 0; i < array.length; i++) {
|
| - var expectedDigit = 0;
|
| - if (i < expected.length) {
|
| - // |expected| is symmetric, endianness doesn't matter.
|
| - expectedDigit = expected[i];
|
| - }
|
| - if (array[array.length - 1 - i] !== expectedDigit)
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| /**
|
| - * Implementation of WebCrypto.SubtleCrypto used in enterprise.platformKeys.
|
| + * Implementation of WebCrypto.SubtleCrypto used in platformKeys and
|
| + * enterprise.platformKeys.
|
| * @param {string} tokenId The id of the backing Token.
|
| * @constructor
|
| */
|
| @@ -79,55 +59,6 @@ var SubtleCryptoImpl = function(tokenId) {
|
| this.tokenId = tokenId;
|
| };
|
|
|
| -SubtleCryptoImpl.prototype.generateKey =
|
| - function(algorithm, extractable, keyUsages) {
|
| - var subtleCrypto = this;
|
| - return new Promise(function(resolve, reject) {
|
| - // TODO(pneubeck): Apply the algorithm normalization of the WebCrypto
|
| - // implementation.
|
| -
|
| - if (extractable) {
|
| - // Note: This deviates from WebCrypto.SubtleCrypto.
|
| - throw CreateNotSupportedError();
|
| - }
|
| - if (intersect(keyUsages, [KeyUsage.sign, KeyUsage.verify]).length !=
|
| - keyUsages.length) {
|
| - throw CreateDataError();
|
| - }
|
| - var normalizedAlgorithmParameters =
|
| - normalizeAlgorithm(algorithm, 'GenerateKey');
|
| - if (!normalizedAlgorithmParameters) {
|
| - // TODO(pneubeck): It's not clear from the WebCrypto spec which error to
|
| - // throw here.
|
| - throw CreateSyntaxError();
|
| - }
|
| -
|
| - // normalizeAlgorithm returns an array, but publicExponent should be a
|
| - // Uint8Array.
|
| - normalizedAlgorithmParameters.publicExponent =
|
| - new Uint8Array(normalizedAlgorithmParameters.publicExponent);
|
| -
|
| - if (normalizedAlgorithmParameters.name !== 'RSASSA-PKCS1-v1_5' ||
|
| - !equalsStandardPublicExponent(
|
| - normalizedAlgorithmParameters.publicExponent)) {
|
| - // Note: This deviates from WebCrypto.SubtleCrypto.
|
| - throw CreateNotSupportedError();
|
| - }
|
| -
|
| - internalAPI.generateKey(subtleCrypto.tokenId,
|
| - normalizedAlgorithmParameters.modulusLength,
|
| - function(spki) {
|
| - if (catchInvalidTokenError(reject))
|
| - return;
|
| - if (chrome.runtime.lastError) {
|
| - reject(CreateOperationError());
|
| - return;
|
| - }
|
| - resolve(new KeyPair(spki, normalizedAlgorithmParameters, keyUsages));
|
| - });
|
| - });
|
| -};
|
| -
|
| SubtleCryptoImpl.prototype.sign = function(algorithm, key, dataView) {
|
| var subtleCrypto = this;
|
| return new Promise(function(resolve, reject) {
|
| @@ -179,7 +110,10 @@ SubtleCryptoImpl.prototype.exportKey = function(format, key) {
|
| });
|
| };
|
|
|
| +// Required for subclassing.
|
| +exports.SubtleCryptoImpl = SubtleCryptoImpl
|
| +
|
| exports.SubtleCrypto =
|
| utils.expose('SubtleCrypto',
|
| SubtleCryptoImpl,
|
| - {functions:['generateKey', 'sign', 'exportKey']});
|
| + {functions:['sign', 'exportKey']});
|
|
|