OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 // Custom binding for the platformKeys API. | 5 // Custom binding for the platformKeys API. |
6 | 6 |
7 var binding = require('binding').Binding.create('platformKeys'); | 7 var binding = require('binding').Binding.create('platformKeys'); |
8 var SubtleCrypto = require('platformKeys.SubtleCrypto').SubtleCrypto; | 8 var SubtleCrypto = require('platformKeys.SubtleCrypto').SubtleCrypto; |
9 var getPublicKey = require('platformKeys.getPublicKey').getPublicKey; | |
10 var internalAPI = require('platformKeys.internalAPI'); | 9 var internalAPI = require('platformKeys.internalAPI'); |
11 | 10 |
12 var keyModule = require('platformKeys.Key'); | |
13 var Key = keyModule.Key; | |
14 var KeyType = keyModule.KeyType; | |
15 var KeyUsage = keyModule.KeyUsage; | |
16 | |
17 function createPublicKey(publicKeySpki, algorithm) { | |
18 return new Key(KeyType.public, publicKeySpki, algorithm, [KeyUsage.verify], | |
19 true /* extractable */); | |
20 } | |
21 | |
22 function createPrivateKey(publicKeySpki, algorithm) { | |
23 return new Key(KeyType.private, publicKeySpki, algorithm, [KeyUsage.sign], | |
24 false /* not extractable */); | |
25 } | |
26 | |
27 binding.registerCustomHook(function(api) { | 11 binding.registerCustomHook(function(api) { |
28 var apiFunctions = api.apiFunctions; | 12 var apiFunctions = api.apiFunctions; |
29 var subtleCrypto = new SubtleCrypto('' /* tokenId */); | 13 var subtleCrypto = new SubtleCrypto('' /* tokenId */); |
30 | 14 |
31 apiFunctions.setHandleRequest( | 15 apiFunctions.setHandleRequest( |
32 'selectClientCertificates', function(details, callback) { | 16 'selectClientCertificates', function(details, callback) { |
33 internalAPI.selectClientCertificates(details, function(matches) { | 17 internalAPI.selectClientCertificates(details, callback); |
34 callback($Array.map(matches, function(match) { | |
35 // internalAPI.selectClientCertificates returns publicExponent as | |
36 // ArrayBuffer, but it should be a Uint8Array. | |
37 if (match.keyAlgorithm.publicExponent) { | |
38 match.keyAlgorithm.publicExponent = | |
39 new Uint8Array(match.keyAlgorithm.publicExponent); | |
40 } | |
41 return match; | |
42 })); | |
43 }); | |
44 }); | 18 }); |
45 | 19 |
46 apiFunctions.setHandleRequest( | 20 apiFunctions.setHandleRequest( |
47 'subtleCrypto', function() { return subtleCrypto }); | 21 'subtleCrypto', function() { return subtleCrypto }); |
48 | |
49 apiFunctions.setHandleRequest( | |
50 'getKeyPair', function(cert, params, callback) { | |
51 getPublicKey(cert, params, function(publicKey, algorithm) { | |
52 callback(createPublicKey(publicKey, algorithm), | |
53 createPrivateKey(publicKey, algorithm)); | |
54 }); | |
55 }); | |
56 }); | 22 }); |
57 | 23 |
58 exports.binding = binding.generate(); | 24 exports.binding = binding.generate(); |
OLD | NEW |