Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How can I generate key pair using this? #35

Open
rohitkhatri opened this issue Sep 26, 2018 · 1 comment
Open

How can I generate key pair using this? #35

rohitkhatri opened this issue Sep 26, 2018 · 1 comment

Comments

@rohitkhatri
Copy link

I'm trying to find documentation to create key pair, but there's no information regarding that.

I would like to generate key pair and store that in some database and use them later to encrypt, decrypt files.

Please guide me.

@S0AndS0
Copy link

S0AndS0 commented Jul 18, 2019

Looking at the lib/gpg.js source there are no methods currently dedicated to generating new key pairs, however, the Usage portion of the ReadMe.md file states that the call method may be used for calling the command line utility that this project wraps...

  // ... Other stuff

  /**
   * Raw call to gpg.
   *
   * @param  {String}   stdin  String to send to stdin.
   * @param  {Array}    [args] Array of arguments.
   * @param  {Function} [fn]   Callback.
   * @api public
   */
  call: function(stdin, args, fn) {
    spawnGPG(stdin, args, fn);
  },

... checking with GitHub's GPG docs states that either --full-generate-key or --default-new-key-algo rsa4096 --gen-key, however, this would be ill-advised if you're after non-interactive key pair generation, which if that's your aim then glancing at one of my older projects source files (S0AndS0/Perinoid_Pipes - Script_Helpers/GnuPG_Gen_Key.sh), shows that the following command line options may be of use...

#!/usr/bin/env bash

## ... other stuff

Func_gen_gnupg_keys(){
	_pass_phrase=( "$@" )
	if [ "${#Var_gnupg_comment}" != "0" ]; then
		gpg --batch --gen-key <<EOF
Key-Type: ${Var_gnupg_key_type}
Key-Length: ${Var_gnupg_key_length}
Subkey-Type: ${Var_gnupg_sub_key_type}
Subkey-Length: ${Var_gnupg_sub_key_length}
Name-Real: ${Var_gnupg_name}
Name-Comment: ${Var_gnupg_comment}
name-Email: ${Var_gnupg_email}
Expire-Date: ${Var_gnupg_expire_date}
Passphrase: ${_pass_phrase[*]}
## Uncomment the next line to not generate keys
#%dry-run
%commit
%echo finished
EOF
	else
		gpg --batch --gen-key <<EOF
Key-Type: ${Var_gnupg_key_type}
Key-Length: ${Var_gnupg_key_length}
Subkey-Type: ${Var_gnupg_sub_key_type}
Subkey-Length: ${Var_gnupg_sub_key_length}
Name-Real: ${Var_gnupg_name}
name-Email: ${Var_gnupg_email}
Expire-Date: ${Var_gnupg_expire_date}
Passphrase: ${_pass_phrase[*]}
%commit
%echo finished
EOF
	fi

	unset _pass_phrase
}

## ... more _pruning_ of non-essential code for this answer

Note, I do not know if this project can handle EOF (End Of File) redirection of arguments and it's likely not to work so well on non-Unix inspired OSs, but if memory serves from the last time I did a info --node='Unattended Usage of GPG' gpg, some of the above where required at the time.

Doing a search for call( within this project shows test/index.js demonstrates the use of the call method...

// ... Other tests trimmed

    it('should decrypt files', function(done){
      gpg.call('', [ '--skip-verify', '--passphrase-fd', '0', '--decrypt', './test/hello.gpg' ], function(err, decrypted){
        assert.ifError(err);
        assert.ok(decrypted.length);
        assert.equal(decrypted.toString('utf8'), 'Hello World\n');
        done();
      });
    });

// ... and a bit more pruning to keep things relatively concise

Putting some of this together one might be able to...

function keyGen({key_type, length, sub_type, name, email, pass, expires}) {
  let gpg_configs = '--batch --gen-key';
  // ... Do stuff that checks and defaults things like `type`
  // if (key_type) {
  //   gpg_configs += `\nKey-Type: ${key_type}`
  // } else {
  //   gpg_configs += `\nKey-Type: DSA`
  // }
  // ... Then _feed_ the `call` method
  GPG.call(gpg_configs, [], (err, results) => {
    if (err) throw err;
    // ... do stuff with results?
    console.log(results);
  });
}

... though this last bit is untested an incomplete, hopefully as a whole this has prepared ya to code something better.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants