12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- * 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 KeyPair = require('./keypair');
- var Policy = require('scytl-cryptopolicy');
- var forge = require('node-forge');
- module.exports = KeyPairGenerator;
- /**
- * @class KeyPairGenerator
- * @classdesc The key pair generator API. To instantiate this object, use the
- * method {@link AsymmetricCryptographyService.newKeyPairGenerator}.
- * @hideconstructor
- * @param {Policy}
- * policy The cryptographic policy to use.
- * @param {SecureRandomService}
- * secureRandomService The secure random service to use.
- */
- function KeyPairGenerator(policy, secureRandomService) {
- /**
- * Generates a key pair to use for asymmetric cryptography operations.
- *
- * @function next
- * @memberof KeyPairGenerator
- * @returns {KeyPair} The generated key pair.
- */
- this.next = function() {
- if (policy.asymmetric.keyPair.encryption.algorithm ===
- Policy.options.asymmetric.keyPair.encryption.algorithm.RSA) {
- return generateRsaKeyPair(policy, secureRandomService);
- } else {
- throw new Error(
- 'Key pair generation algorithm \'' +
- policy.asymmetric.keyPair.encryption.algorithm +
- '\' is not supported.');
- }
- };
- /**
- * Generates an RSA-based key pair.
- *
- * @function generateRsaKeyPairs
- * @memberof KeyPairGenerator
- * @private
- * @param {Policy}
- * policy The cryptographic policy.
- * @param {SecureRandomService}
- * secureRandomService The secure random service.
- * @returns {KeyPair} The key pair.
- */
- function generateRsaKeyPair(policy, secureRandomService) {
- var forgeKeyPair = forge.pki.rsa.generateKeyPair(
- policy.asymmetric.keyPair.encryption.keyLengthBits,
- policy.asymmetric.keyPair.encryption.publicExponent,
- {prng: secureRandomService.newRandomGenerator()});
- var publicKey = forge.pki.publicKeyToPem(forgeKeyPair.publicKey, 64);
- var privateKey = forge.pki.privateKeyToPem(forgeKeyPair.privateKey, 64);
- return new KeyPair(publicKey, privateKey);
- }
- }
|