mirror of
https://github.com/certbot/certbot.git
synced 2026-07-27 00:00:44 +02:00
Remove jose dependency, convert display code to use dialog from setup
This commit is contained in:
@@ -4,14 +4,7 @@ import M2Crypto
|
||||
import json
|
||||
import os, time, sys, shutil
|
||||
|
||||
# This line suppresses the no logging found for module 'jose' warning
|
||||
# TODO: Check out this module and see if we should be using it for our
|
||||
# logging features
|
||||
import logging
|
||||
logging.basicConfig(filename="/dev/null", level=logging.ERROR)
|
||||
|
||||
|
||||
import jose, csv
|
||||
import csv
|
||||
|
||||
import requests
|
||||
|
||||
@@ -118,7 +111,7 @@ class Client(object):
|
||||
# Perform optimal config changes
|
||||
self.optimize_config(vhost)
|
||||
|
||||
self.config.save("Completed Augeas Authentication")
|
||||
self.config.save("Completed Let's Encrypt Authentication")
|
||||
|
||||
self.store_cert_key(False)
|
||||
|
||||
@@ -250,7 +243,7 @@ class Client(object):
|
||||
|
||||
def revocation_request(self, key_file, cert_der):
|
||||
return {"type":"revocationRequest",
|
||||
"certificate":jose.b64encode_url(cert_der),
|
||||
"certificate":le_util.b64_url_enc(cert_der),
|
||||
"signature":crypto_util.create_sig(cert_der, key_file)}
|
||||
|
||||
|
||||
@@ -313,7 +306,7 @@ class Client(object):
|
||||
def certificate_request(self, csr_der, key):
|
||||
logger.info("Preparing and sending CSR..")
|
||||
return {"type":"certificateRequest",
|
||||
"csr":jose.b64encode_url(csr_der),
|
||||
"csr":le_util.b64_url_enc(csr_der),
|
||||
"signature":crypto_util.create_sig(csr_der, self.key_file)}
|
||||
|
||||
def cleanup_challenges(self, challenge_objs):
|
||||
@@ -354,7 +347,7 @@ class Client(object):
|
||||
"nonce":server_nonce}
|
||||
|
||||
auth_req["signature"] = crypto_util.create_sig(
|
||||
name + jose.b64decode_url(server_nonce), self.key_file)
|
||||
name + le_util.b64_url_dec(server_nonce), self.key_file)
|
||||
|
||||
auth_req["responses"] = responses
|
||||
return auth_req
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import M2Crypto
|
||||
import time, jose, binascii
|
||||
import time, binascii
|
||||
import hashlib
|
||||
from Crypto.Random import get_random_bytes
|
||||
from Crypto.PublicKey import RSA
|
||||
@@ -7,12 +7,11 @@ from Crypto.Signature import PKCS1_v1_5
|
||||
from Crypto.Hash import SHA256
|
||||
from M2Crypto import EVP, X509, ASN1
|
||||
|
||||
|
||||
from letsencrypt.client.CONFIG import NONCE_SIZE, RSA_KEY_SIZE
|
||||
|
||||
from letsencrypt.client import le_util
|
||||
|
||||
def b64_cert_to_pem(b64_der_cert):
|
||||
x = M2Crypto.X509.load_cert_der_string(jose.b64decode_url(b64_der_cert))
|
||||
x = M2Crypto.X509.load_cert_der_string(le_util.b64_url_dec(b64_der_cert))
|
||||
return x.as_pem()
|
||||
|
||||
def create_sig(msg, key_file, signer_nonce = None, signer_nonce_len = NONCE_SIZE):
|
||||
@@ -31,10 +30,10 @@ def create_sig(msg, key_file, signer_nonce = None, signer_nonce_len = NONCE_SIZE
|
||||
n, e = key.n, key.e
|
||||
n_bytes = binascii.unhexlify(leading_zeros(hex(n)[2:].replace("L", "")))
|
||||
e_bytes = binascii.unhexlify(leading_zeros(hex(e)[2:].replace("L", "")))
|
||||
n_encoded = jose.b64encode_url(n_bytes)
|
||||
e_encoded = jose.b64encode_url(e_bytes)
|
||||
signer_nonce_encoded = jose.b64encode_url(signer_nonce)
|
||||
sig_encoded = jose.b64encode_url(signature)
|
||||
n_encoded = le_util.b64_url_enc(n_bytes)
|
||||
e_encoded = le_util.b64_url_enc(e_bytes)
|
||||
signer_nonce_encoded = le_util.b64_url_enc(signer_nonce)
|
||||
sig_encoded = le_util.b64_url_enc(signature)
|
||||
jwk = { "kty": "RSA", "n": n_encoded, "e": e_encoded }
|
||||
signature = { "nonce": signer_nonce_encoded, "alg": "RS256", "jwk": jwk, "sig": sig_encoded }
|
||||
# return json.dumps(signature)
|
||||
|
||||
@@ -80,11 +80,13 @@ class NcursesDisplay(Display):
|
||||
def generic_notification(self, message, w = WIDTH, h = HEIGHT):
|
||||
self.d.msgbox(message, width = w, height = h)
|
||||
|
||||
def generic_menu(self, message, choices, input_text = "", width = WIDTH, height = HEIGHT):
|
||||
def generic_menu(self, message, choices, input_text = "", width = WIDTH,
|
||||
height = HEIGHT):
|
||||
# Can accept either tuples or just the actual choices
|
||||
if choices and isinstance(choices[0], tuple):
|
||||
return self.d.menu(message, choices = choices,
|
||||
c, selection = self.d.menu(message, choices = choices,
|
||||
width = WIDTH, height = HEIGHT)
|
||||
return c, str(selection)
|
||||
else:
|
||||
choices = [((i + 1), c) for c in choices]
|
||||
code, s = self.d.menu(message, choices = choices,
|
||||
@@ -102,10 +104,10 @@ class NcursesDisplay(Display):
|
||||
|
||||
def filter_names(self, names):
|
||||
choices = [(n, "", 0) for n in names]
|
||||
c, s = self.d.checklist("Which names would you like to activate \
|
||||
c, names = self.d.checklist("Which names would you like to activate \
|
||||
HTTPS for?", choices=choices)
|
||||
|
||||
return c, s
|
||||
return c, [str(s) for s in names]
|
||||
|
||||
|
||||
def success_installation(self, domains):
|
||||
@@ -259,8 +261,8 @@ class FileDisplay(Display):
|
||||
self.outfile.write(self.cert_info_frame(cert))
|
||||
|
||||
display = None
|
||||
OK = 0
|
||||
CANCEL = 1
|
||||
OK = "ok"
|
||||
CANCEL = "cancel"
|
||||
HELP = "help"
|
||||
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
import errno
|
||||
import stat
|
||||
import os, pwd, grp
|
||||
import M2Crypto
|
||||
import time
|
||||
import base64
|
||||
from letsencrypt.client import logger
|
||||
#import logger
|
||||
|
||||
@@ -49,3 +49,24 @@ def drop_privs():
|
||||
os.setgid(nogroup)
|
||||
os.setgroups([])
|
||||
os.setuid(nobody)
|
||||
|
||||
# Quick implementations of b64 url safe encode/decode
|
||||
# We will include a proper library in the future if the library
|
||||
# doesn't conflict with our existing dependencies
|
||||
def b64_url_enc(s):
|
||||
try:
|
||||
s = s.encode("utf8")
|
||||
except:
|
||||
pass
|
||||
|
||||
i = base64.urlsafe_b64encode(s)
|
||||
return i.rstrip("=")
|
||||
|
||||
def b64_url_dec(s):
|
||||
try:
|
||||
s = s.encode("utf8")
|
||||
except:
|
||||
pass
|
||||
|
||||
pad = '=' * (4 - (len(s) % 4))
|
||||
return base64.urlsafe_b64decode(s + pad)
|
||||
|
||||
@@ -6,14 +6,13 @@ import hashlib
|
||||
from os import path
|
||||
import sys
|
||||
import binascii
|
||||
import jose
|
||||
|
||||
from letsencrypt.client import configurator
|
||||
|
||||
from letsencrypt.client.CONFIG import CONFIG_DIR, WORK_DIR, SERVER_ROOT
|
||||
from letsencrypt.client.CONFIG import OPTIONS_SSL_CONF, APACHE_CHALLENGE_CONF, INVALID_EXT
|
||||
from letsencrypt.client.CONFIG import S_SIZE
|
||||
from letsencrypt.client import logger, crypto_util
|
||||
from letsencrypt.client import logger, crypto_util, le_util
|
||||
from letsencrypt.client.challenge import Challenge
|
||||
|
||||
# import configurator
|
||||
@@ -251,7 +250,7 @@ DocumentRoot " + CONFIG_DIR + "challenge_page/ \n \
|
||||
# Create all of the challenge certs
|
||||
for tup in self.listSNITuple:
|
||||
# Need to decode from base64
|
||||
r = jose.b64decode_url(tup[1])
|
||||
r = le_util.b64_url_dec(tup[1])
|
||||
ext = self.generateExtension(r, s)
|
||||
self.createChallengeCert(tup[0], ext, tup[2], self.key)
|
||||
|
||||
@@ -260,7 +259,7 @@ DocumentRoot " + CONFIG_DIR + "challenge_page/ \n \
|
||||
self.configurator.save("SNI Challenge", True)
|
||||
self.configurator.restart(quiet)
|
||||
|
||||
self.s = jose.b64encode_url(s)
|
||||
self.s = le_util.b64_url_enc(s)
|
||||
return self.s
|
||||
|
||||
# This main function is just used for testing
|
||||
@@ -279,8 +278,8 @@ def main():
|
||||
r2 = "testValueForR2"
|
||||
nonce2 = "nonce2"
|
||||
|
||||
r = jose.b64encode_url(r)
|
||||
r2 = jose.b64encode_url(r2)
|
||||
r = le_util.b64_url_enc(r)
|
||||
r2 = le_util.b64_url_enc(r2)
|
||||
|
||||
#ans = dns.resolver.query("google.com")
|
||||
#print ans.rrset
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
M2Crypto==0.22.3
|
||||
python2-pythondialog
|
||||
jose==0.1
|
||||
jsonschema==2.4.0
|
||||
#python-augeas==0.5.0
|
||||
requests==2.4.3
|
||||
|
||||
Reference in New Issue
Block a user