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

Side by Side Diff: chrome/renderer/resources/extensions/enterprise_platform_keys/subtle_crypto.js

Issue 306433003: enterprise.platformKeys: Support the publicExponent parameter. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. Created 6 years, 6 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
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 var utils = require('utils'); 5 var utils = require('utils');
6 var internalAPI = require('enterprise.platformKeys.internalAPI'); 6 var internalAPI = require('enterprise.platformKeys.internalAPI');
7 var intersect = require('enterprise.platformKeys.utils').intersect; 7 var intersect = require('enterprise.platformKeys.utils').intersect;
8 var KeyPair = require('enterprise.platformKeys.KeyPair').KeyPair; 8 var KeyPair = require('enterprise.platformKeys.KeyPair').KeyPair;
9 var keyModule = require('enterprise.platformKeys.Key'); 9 var keyModule = require('enterprise.platformKeys.Key');
10 var getSpki = keyModule.getSpki; 10 var getSpki = keyModule.getSpki;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 // returns true. 44 // returns true.
45 function catchInvalidTokenError(reject) { 45 function catchInvalidTokenError(reject) {
46 if (chrome.runtime.lastError && 46 if (chrome.runtime.lastError &&
47 chrome.runtime.lastError.message == errorInvalidToken) { 47 chrome.runtime.lastError.message == errorInvalidToken) {
48 reject(chrome.runtime.lastError); 48 reject(chrome.runtime.lastError);
49 return true; 49 return true;
50 } 50 }
51 return false; 51 return false;
52 } 52 }
53 53
54 // Returns true if |array| is a BigInteger describing the standard public
55 // exponent 65537. In particular, it ignores leading zeros as required by the
56 // BigInteger definition in WebCrypto.
57 function equalsStandardPublicExponent(array) {
58 var expected = [0x01, 0x00, 0x01];
59 if (array.length < expected.length)
60 return false;
61 for (var i = 0; i < array.length; i++) {
62 var expectedDigit = 0;
63 if (i < expected.length) {
64 // |expected| is symmetric, endianness doesn't matter.
65 expectedDigit = expected[i];
66 }
67 if (array[array.length - 1 - i] !== expectedDigit)
68 return false;
69 }
70 return true;
71 }
72
54 /** 73 /**
55 * Implementation of WebCrypto.SubtleCrypto used in enterprise.platformKeys. 74 * Implementation of WebCrypto.SubtleCrypto used in enterprise.platformKeys.
56 * @param {string} tokenId The id of the backing Token. 75 * @param {string} tokenId The id of the backing Token.
57 * @constructor 76 * @constructor
58 */ 77 */
59 var SubtleCryptoImpl = function(tokenId) { 78 var SubtleCryptoImpl = function(tokenId) {
60 this.tokenId = tokenId; 79 this.tokenId = tokenId;
61 }; 80 };
62 81
63 SubtleCryptoImpl.prototype.generateKey = 82 SubtleCryptoImpl.prototype.generateKey =
(...skipping 12 matching lines...) Expand all
76 throw CreateDataError(); 95 throw CreateDataError();
77 } 96 }
78 var normalizedAlgorithmParameters = 97 var normalizedAlgorithmParameters =
79 normalizeAlgorithm(algorithm, 'GenerateKey'); 98 normalizeAlgorithm(algorithm, 'GenerateKey');
80 if (!normalizedAlgorithmParameters) { 99 if (!normalizedAlgorithmParameters) {
81 // TODO(pneubeck): It's not clear from the WebCrypto spec which error to 100 // TODO(pneubeck): It's not clear from the WebCrypto spec which error to
82 // throw here. 101 // throw here.
83 throw CreateSyntaxError(); 102 throw CreateSyntaxError();
84 } 103 }
85 104
86 if (normalizedAlgorithmParameters.name !== 'RSASSA-PKCS1-v1_5') { 105 if (normalizedAlgorithmParameters.name !== 'RSASSA-PKCS1-v1_5' ||
106 !equalsStandardPublicExponent(
107 normalizedAlgorithmParameters.publicExponent)) {
87 // Note: This deviates from WebCrypto.SubtleCrypto. 108 // Note: This deviates from WebCrypto.SubtleCrypto.
88 throw CreateNotSupportedError(); 109 throw CreateNotSupportedError();
89 } 110 }
90 111
91 internalAPI.generateKey(subtleCrypto.tokenId, 112 internalAPI.generateKey(subtleCrypto.tokenId,
92 normalizedAlgorithmParameters.modulusLength, 113 normalizedAlgorithmParameters.modulusLength,
93 function(spki) { 114 function(spki) {
94 if (catchInvalidTokenError(reject)) 115 if (catchInvalidTokenError(reject))
95 return; 116 return;
96 if (chrome.runtime.lastError) { 117 if (chrome.runtime.lastError) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 // TODO(pneubeck): It should be possible to export to format 'jwk'. 168 // TODO(pneubeck): It should be possible to export to format 'jwk'.
148 throw CreateNotSupportedError(); 169 throw CreateNotSupportedError();
149 } 170 }
150 }); 171 });
151 }; 172 };
152 173
153 exports.SubtleCrypto = 174 exports.SubtleCrypto =
154 utils.expose('SubtleCrypto', 175 utils.expose('SubtleCrypto',
155 SubtleCryptoImpl, 176 SubtleCryptoImpl,
156 {functions:['generateKey', 'sign', 'exportKey']}); 177 {functions:['generateKey', 'sign', 'exportKey']});
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698