pwclip
""""""

What is pwclip?
===============

pwclip has two operating modes. One is for operating on yubikeys to generate
uniq responses which might be used as passwords while they can be generated by
that exact yubikey only. The first yubikey found on the system and the first
slot, configured with (HMAC-SHA1) challenge-response, will be used. For that
function Windows is supported (see "Install" section). For now python2.7 is
still also supported but might be discontinued. Therefor it should be
sufficient to just apply the installation for python2 likewise.

To catch user input python's Tk (tkinter) library is used to create a simple
password input window. The appropriate response is saved for only 3 seconds
by default to not have it exposed as soon as it's used. The utility also
supports the input of any integer which is then used as timer. Otherwise the
environment is searched for PWCLIPTIME and uses the value of that environment
variable as timer. The timer is used as time in which the received password
stays in the paste buffer bevore its replaced by the previously copied value.

The second operating mode does currently only work (and so far tested) on
Linux due to gpg4win limitation. It can be used to create a ~/.pwdcrypt file
which is gpg encrypted text using either the value of GPGKEYS as gpg
recipients if found in environment otherwise every key within the users
keyring will be used. For password-list managing there is a simple "import"
function. On startup it lookes for a ~/.pwd.yaml file and if found merged with
the already known passwords from the ~/.passcrypt there is one. All entrys in
~/.passcrypt will be overridden by the entrys from the ~/.pwd.yaml file. As
soon as it has been merged the ~/.pwd.yaml file will be deleted.

The accepted yaml format:
-------------------------

\-\-\-

realsystemuser:
    \- somename:
        \- Som3(rypt!cPass

        \- Some optional info to display as popup notification

    \- othername:
        \- Som3other(rypt!cPass




Installation
============

pwclip requires the "xsel" package on Debian-Like Systems to have access to
copy/paste buffers. On Windows Systems the libusb package must be integrated
to python3 as "USB-Backend".

* https://wiki.ubuntuusers.de/xsel/
* https://sourceforge.net/projects/libusb/
* http://libusb.info/

If you are on a Debian-Like system the installation of the dependencies
should work like the following (on root terminal):

$ apt-get install xsel gnupg2

Installing via pip3
--------------------

You can install this package from the Python Package Index (pyPI) by running:

* ``pip3 install pwclip``

Installing from a source distribution archive
---------------------------------------------
To install this package from a source distribution archive, do the following:

1. Extract all the files in the distribution archive to some directory on your
   system.
2. In that directory, run: ``python setup.py install``




Usage
=====

Although is was planed as GUI-Program it's also possible to be executed from
terminals. For Windows, Linux and OSX there is an appropriate executable
packed which might be executed like the following examples will show:

Yubikey-Mode
------------
``pwclip``

The PWCLIPTIME environment variable is used if found so the following command
does pretty much the same:

``pwclip $PWCLIPTIME``

To have it wait for a specific time like 5 seconds (bevore resetting the paste
buffer to the previously copied value) use the following command:

``pwclip 5``

GPG-Mode
--------
``pwclip -c``

Alike in yubikey-mode the PWCLIPTIME variable is used as timer. If there is an
environment variable called GPGKEYS it will use those keys to encrypt on
changes to the password file



Change log
==========

0.3.2 (current)
---------------

Released:

* final release of pwclip with new function and documentation


0.2.6 - 0.3.1
-------------

Released: 2016-10-22

* minor documentation fixes (playing around with rst formatting)

0.2.5
-----

Released: 2016-10-22

* seperated the code into submodules within lib/ to be more compliant to my
  usual environment

* added complete new encryption mode via python3-gnupg - now it's capable of
  selecting gpg-keys by GPGKEYS environment variable to encrypt ~/.passcrypt

* documentation updated and cleanup on typo/irrelevant text

* FIXED: issue where the gpg-agent isn't able decrypt without passphrase/pin
  and clould not ask for it



Documentation
=============
http://packages.python.org/pwclip/
