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