1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)var utils = require('utils'); 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)var intersect = require('enterprise.platformKeys.utils').intersect; 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)var keyModule = require('enterprise.platformKeys.Key'); 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)var Key = keyModule.Key; 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)var KeyType = keyModule.KeyType; 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)var KeyUsage = keyModule.KeyUsage; 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/** 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Implementation of WebCrypto.KeyPair used in enterprise.platformKeys. 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {ArrayBuffer} publicKeySpki The Subject Public Key Info in DER 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * encoding. 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {KeyAlgorithm} algorithm The algorithm identifier. 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {KeyUsage[]} usages The allowed key usages. 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @constructor 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)var KeyPairImpl = function(publicKeySpki, algorithm, usages) { 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this.publicKey = new Key(KeyType.public, 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) publicKeySpki, 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) algorithm, 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) intersect([KeyUsage.verify], usages), 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) true /* extractable */); 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this.privateKey = new Key(KeyType.private, 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) publicKeySpki, 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) algorithm, 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) intersect([KeyUsage.sign], usages), 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false /* not extractable */); 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)exports.KeyPair = utils.expose('KeyPair', 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) KeyPairImpl, 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) {readonly:['publicKey', 'privateKey']}); 36