Example #1
0
def sign(filename):
    """Returns detached signature for file"""

    plaintext = _get_file_data(filename)

    ciphertext = core.Data()

    ctx = core.Context()

    ctx.set_armor(1)
    ctx.set_passphrase_cb(_passphrase_callback)

    ctx.op_keylist_start(str(config["gpg_key_uid"]), 0)
    sigkey = ctx.op_keylist_next()
    ##print sigkey.uids[0].uid

    ctx.signers_clear()
    ctx.signers_add(sigkey)

    passwd_is_incorrect = None

    while passwd_is_incorrect is None or passwd_is_incorrect:
        try:
            ctx.op_sign(plaintext, ciphertext, pygpgme.GPGME_SIG_MODE_DETACH)
            passwd_is_incorrect = False

        except errors.GPGMEError:
            passwd_is_incorrect = True

            uid = config["gpg_key_uid"]
            stored = config["gpg_key_passphrase_isstored"]

            passwd = get_gpg_passwd_from_user(stored, passwd_is_incorrect, uid)

            if passwd is None:
                return

            config["gpg_key_passphrase"] = repr(passwd)
            ctx.set_passphrase_cb(_passphrase_callback)

    ciphertext.seek(0, 0)
    signature = ciphertext.read()

    return signature
Example #2
0
def genkey():
    """Creates a new standard GPG key"""

    # Initialize our context.
    core.check_version(None)

    context = core.Context()
    context.set_armor(1)

    # Check if standard key is already present
    keyname = str(config["gpg_key_uid"])
    context.op_keylist_start(keyname, 0)
    key = context.op_keylist_next()

    # If no key is chosen generate one

    no_key = key is None or not key or not keyname

    if no_key:
        # If no GPG key is set in config, choose one

        uid = choose_uid(context)

    if no_key and uid is not None:
        # A key has been chosen

        config["gpg_key_uid"] = repr(uid)
        stored = config["gpg_key_passphrase_isstored"]
        passwd = get_gpg_passwd_from_user(stored=stored, uid=uid)

        if passwd is None:
            sys.exit()
        else:
            config["gpg_key_passphrase"] = repr(passwd)

    elif no_key and uid is None:
        # No key has been chosen --> Create new one

        # Show progress dialog

        dlg_msg = _("Generating new GPG key {}.\nThis may take some time.\n \n"
                    "Progress bar may stall. Please wait.").format(keyname)
        dlg = wx.ProgressDialog(_("GPG key generation"), dlg_msg,
                               maximum=200,
                               parent=None,
                               style=wx.PD_ELAPSED_TIME)

        class CBFs(object):
            """Callback functions for pyme"""

            progress = 0

            def cbf(self, what=None, type=None, current=None, total=None,
                    hook=None):
                """Callback function that updates progress dialog"""

                dlg.Update(self.progress % 199)
                self.progress += 1

        cbfs = CBFs()

        gpg_key_parameters = get_key_params_from_user()

        config["gpg_key_uid"] = repr(str( \
            [val for key, val in gpg_key_parameters if key == 'Name-Real'][0]))
        config["gpg_key_passphrase"] = repr(str(([val \
            for key, val in gpg_key_parameters if key == 'Passphrase'][0])))

        gpg_key_parameters_string = get_key_params_string(gpg_key_parameters)

        context.set_progress_cb(cbfs.cbf, None)

        context.op_genkey(gpg_key_parameters_string, None, None)

        dlg.Destroy()