python gnupg проверить файл - PullRequest
       9

python gnupg проверить файл

0 голосов
/ 23 февраля 2019

Я не уверен, почему это не работает (Python 2.7.5) - файлы, созданные во временном каталоге, который я может проверить, но Python - нет.Помогите?

Я не уверен, неправильно ли я использую функцию gpg.verify_file, или я не понимаю, как правильно сказать python, что я доверяю импортируемому ключу, или как.Когда я открываю свою оболочку и захожу во временный каталог, у меня нет проблем с проверкой файла по sig, поэтому я знаю, что он должен проверяться.

К сожалению, в 99% примеров Python GnuPG есть шифрование, котороенет.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib2
import gnupg
import tempfile
import shutil
from pprint import pprint

def getStartTlsPolicy():
    policyURL = 'https://dl.eff.org/starttls-everywhere/policy.json'
    policyASC = 'https://dl.eff.org/starttls-everywhere/policy.json.asc'
    publicKEY = 'https://dl.eff.org/starttls-everywhere/public-key.txt'
    try:
        response = urllib2.urlopen(policyURL, timeout=5)
    except:
        return '{}'
    try:
        signature = urllib2.urlopen(policyASC, timeout=5)
    except:
        return '{}'
    try:
        keyblock = urllib2.urlopen(publicKEY, timeout=5)
    except:
        return '{}'
    jsondata = response.read()
    sigdata = signature.read()
    keyfile = keyblock.read()
    # GnuPG stuff here
    dirpath = tempfile.mkdtemp()
    gpg = gnupg.GPG(gnupghome=dirpath)
    gpg.encoding = 'utf-8'
    sigfile = open(dirpath + '/policy.json.asc', 'w+')
    sigfile.write(sigdata)
    jsonfile = open(dirpath + '/policy.json', 'w+')
    jsonfile.write(jsondata)
    jsonfile.close()
    fingerlist = []
    fingerlist.append('B693F33372E965D76D55368616EEA65D03326C9D')
    gpg.import_keys(keyfile)
    gpg.trust_keys(fingerlist, 'TRUST_FULLY')
    verified = gpg.verify_file(sigfile, dirpath + '/policy.json', 'key_id=842AEA40C5BCD6E1')
    if not verified:
        print "signature verify failed"
        public_keys = gpg.list_keys()
        pprint(public_keys)
        sigfile.close()
        #shutil.rmtree(dirpath)
        print dirpath
        return '{}'
    sigfile.close()
    shutil.rmtree(dirpath)
    return jsondata

jsondata = getStartTlsPolicy()
print jsondata

1 Ответ

0 голосов
/ 24 февраля 2019

Наконец-то разобрался.Запись подписи в файл не достаточно, вы должны закрыть, а затем снова открыть ее в режиме только для чтения.Почему я не знаю, но это работает.

...