123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /*
- * 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 forge = require('node-forge');
- module.exports = PrivateKeyCollector;
- var collectEntropy_, privateKey_, pinEntropy_;
- /**
- * Add an entropy collector based on a private key. The amount of randomness
- * (entropy) depends on the pin that is used for Private Key generating.
- *
- * @function
- * @param pem
- * {string} private key, as string in PEM format.
- * @param entropy
- * the amount of randomness that can be extracted from the
- * Private Key.
- */
- function PrivateKeyCollector(
- collectEntropyCallback, privateKeyPem, pinEntropy) {
- if (!privateKeyPem) {
- throw new Error('A private key is required');
- }
- if (isNaN(pinEntropy) || (pinEntropy < 1)) {
- throw new Error('A positive PIN entropy is required');
- }
- collectEntropy_ = collectEntropyCallback;
- privateKey_ = forge.pki.privateKeyFromPem(privateKeyPem);
- pinEntropy_ = pinEntropy;
- }
- PrivateKeyCollector.prototype = {
- pkCollector: true,
- startCollector: function() {
- collectEntropy_(privateKey_.d, pinEntropy_);
- },
- stopCollector: function() {
- // just executed once, so no need to execute anything else
- return true;
- },
- getPrivateKey: function() {
- return privateKey_;
- }
- };
|