【问题标题】:changing key trust level (validity) with gpgme使用 gpgme 更改密钥信任级别(有效性)
【发布时间】:2022-01-09 21:51:36
【问题描述】:

GPGMEowner_trust field 的形式提供有关密钥信任级别的信息,gpgme_validity_t type。但是,我在文档或 gpgme.h 头文件中找不到允许我更改密钥有效性的函数。

GnuPG 命令行工具确实允许更改密钥的信任级别:

$ gpg --edit-key alice@example.com
> trust

GPGME 库是否甚至支持更改 owner_trust 字段?如果是这样,我该如何使用它?

我正在使用最新版本的 GPGME,即1.16.0(提交哈希1021c8645555502d914afffaa3707609809c9459)。

【问题讨论】:

    标签: gnupg trust gpgme


    【解决方案1】:

    应该可以使用gpgme_op_interact 来完成此操作。

    以下演示了使用 Python 绑定的过程,但应该可以使用 C API 编写类似的代码。

    import gpg
    
    def trust_at(level):
        done = False
        def interact_cb(status, arg):
            nonlocal done
            if status in ('KEY_CONSIDERED', 'GOT_IT', ''):
                return
            if status == 'GET_LINE':
                if arg == 'keyedit.prompt':
                    if done:
                        return 'quit'
                    done = True
                    return 'trust'
                if arg == 'edit_ownertrust.value':
                    return level
            # needed if we set trust level to 5
            if (status, arg) == ('GET_BOOL', 'edit_ownertrust.set_ultimate.okay'):
                return 'y'
            assert False
        return interact_cb
    
    with gpg.Context() as gnupg:
        key = gnupg.get_key(FINGERPRINT)
        gnupg.interact(key, trust_at('4'))
    

    【讨论】:

    • 非常感谢,它lgtm。如果我可以让它在 C++ 中运行,我会接受它作为答案。目前被此阻止:dev.gnupg.org/T5830
    • 它也适用于 C++。此外,Gpgmepp library 有一个用于更改信任的包装器。但是这个库对我的项目来说有点重,而且看起来没有维护。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多