NAME

App::GroupSecret::File - Reading and writing groupsecret keyfiles

VERSION

version 0.304

SYNOPSIS

    use App::GroupSecret::File;

    my $file = App::GroupSecret::File->new('path/to/keyfile.yml');
    print "File version: " . $file->version, "\n";

    $file->add_key('path/to/key_rsa.pub');
    $file->save;

DESCRIPTION

This module provides a programmatic way to manage keyfiles.

See groupsecret for the command-line interface.

ATTRIBUTES

filepath

Get the filepath of the keyfile.

METHODS

new

    $file = App::GroupSecret::File->new($filepath);

Construct a new keyfile object.

info

    $info = $file->info;

Get a raw hashref with the contents of the keyfile.

init

    $info = $file->init;

Get a hashref representing an empty keyfile, used for initializing a new keyfile.

load

    $info = $file->load;
    $info = $file->load($filepath);

Load (or reload) the contents of a keyfile.

save

    $file->save;
    $file->save($filepath);

Save the keyfile to disk.

check

    $file->check;
    $file->check($info);

Check the file format of a keyfile to make sure this module can understand it.

keys

    $keys = $file->keys;

Get a hashref of the keys from a keyfile.

secret

    $secret = $file->secret;

Get the secret from a keyfile as an encrypted string.

version

    $version = $file->version

Get the file format version.

add_key

    $file->add_key($filepath);

Add a key to the keyfile.

delete_key

    $file->delete_key($fingerprint);

Delete a key from the keyfile.

decrypt_secret

    $secret = $file->decrypt_secret(passphrase => $passphrase);
    $secret = $file->decrypt_secret(private_key => $private_key);

Get the decrypted secret.

decrypt_secret_passphrase

    $passphrase = $file->decrypt_secret_passphrase($private_key);

Get the decrypted secret passphrase.

encrypt_secret

    $file->encrypt_secret($secret, $passphrase);

Set the secret by encrypting it with a 256-bit passphrase.

Passphrase must be 32 bytes.

encrypt_secret_passphrase

    $file->encrypt_secret_passphrase($passphrase);

Set the passphrase by encrypting it with each key in the keyfile.

find_public_key

    $filepath = $file->find_public_key($key);

Get a path to the public key file for a key.

format_key

    $str = $file->format_key($key);

Get a one-line summary of a key. Format is "<fingerprint> <comment>".

FILE FORMAT

Keyfiles are YAML documents that contains this structure:

    ---
    keys:
      FINGERPRINT:
        comment: COMMENT
        content: ssh-rsa ...
        filename: FILENAME
        secret_passphrase: PASSPHRASE...
        type: rsa
    secret: SECRET...
    version: 1

BUGS

Please report any bugs or feature requests on the bugtracker website https://github.com/chazmcgarvey/groupsecret/issues

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.

AUTHOR

Charles McGarvey <chazmcgarvey@brokenzipper.com>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2017 by Charles McGarvey.

This is free software, licensed under:

  The MIT (X11) License