/* * Copyright 2018 Scytl Secure Electronic Voting SA * * All rights reserved * * See our extended copyright notice in *file 'Copyright.txt' which is part of this source code package */ /* jshint node:true */ 'use strict'; var KeyStoreService = require('./service'); var validator = require('./input-validator'); module.exports = { /** * Creates a new KeyStoreService object, which encapsulates a key store * service. * * @function newService * @global * @param {Object} * [options] An object containing optional arguments. * @param {Policy} * [options.policy=Default policy] The cryptographic policy to * use. * @param {PbkdfRandomService} * [options.pbkdfRandomService=Created internally] The PBKDF * service to use. * @param {SymmetricCryptographyService} * [options.symmetricCryptographyService=Created internally] The * symmetric cryptography service to use. * @param {ElGamalCryptographyService} * [options.elGamalCryptographyService=Created internally] The * ElGamal cryptography service to use. * @returns {KeyStoreService} The new KeyStoreService object. * @throws {Error} * If the input data validation fails. * @example How to use a cryptographic policy that sets the PBKDF * derivation key length to 16 bytes * * var cryptoPolicy = require('scytl-cryptopolicy'); * var keyStore = require('scytl-keystore'); * * var myPolicy = cryptoPolicy.newInstance(); * * myPolicy.primitives.keyDerivation.pbkdf.keyLengthBytes = * cryptoPolicy.options.primitives.keyDerivation.pbkdf.keyLengthBytes.KL_16; * * var keyStoreService = keyStore.newService({policy: myPolicy}); */ newService: function(options) { checkData(options); return new KeyStoreService(options); } }; function checkData(options) { options = options || {}; if (typeof options.policy !== 'undefined') { validator.checkIsObjectWithProperties( options.policy, 'Cryptographic policy provided to key store service'); } if (typeof options.pbkdfService !== 'undefined') { validator.checkIsObjectWithProperties( options.pbkdfService, 'PBKDF service object provided to key store service'); } if (typeof options.symmetricCryptographyService !== 'undefined') { validator.checkIsObjectWithProperties( options.symmetricCryptographyService, 'Symmetric cryptography service object provided to key store service'); } if (typeof options.elGamalCryptographyService !== 'undefined') { validator.checkIsObjectWithProperties( options.elGamalCryptographyService, 'ElGamal cryptography service object provided to key store service'); } }