| 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 |