changeset ebdd75803280 in /home/hg/repos/gajim
author: Yann Leboulanger asterix@lagaule.org branches: gajim_0.16 details:http://hg.gajim.org/gajim?cmd=changeset;node=ebdd75803280 description: fix some encoding issues
diffstat:
src/common/stanza_session.py | 52 +++++++++++++++++++++++-------------------- 1 files changed, 28 insertions(+), 24 deletions(-)
diffs (177 lines):
diff -r c00f54ba7271 -r ebdd75803280 src/common/stanza_session.py --- a/src/common/stanza_session.py Wed Apr 23 21:53:40 2014 +0200 +++ b/src/common/stanza_session.py Thu Apr 24 22:08:01 2014 +0200 @@ -410,21 +410,21 @@
c = stanza.NT.c c.setNamespace('http://www.xmpp.org/extensions/xep-0200.html#ns') - c.NT.data = base64.b64encode(m_final) + c.NT.data = base64.b64encode(m_final).decode('utf-8')
# FIXME check for rekey request, handle <key/> elements
- m_content = ''.join(map(str, c.getChildren())) + m_content = (''.join(map(str, c.getChildren()))).encode('utf-8') c.NT.mac = base64.b64encode(self.hmac(self.km_s, m_content + \ - crypto.encode_mpi(old_en_counter))) + crypto.encode_mpi(old_en_counter))).decode('utf-8')
msgtxt = '[This is part of an encrypted session. ' \ 'If you see this message, something went wrong.]' lang = os.getenv('LANG') if lang is not None and lang != 'en': # we're not english msgtxt = _('[This is part of an encrypted session. ' - 'If you see this message, something went wrong.]') + ' (' + \ - msgtxt + ')' + 'If you see this message, something went wrong.]') + ' (' + \ + msgtxt + ')' stanza.setBody(msgtxt)
return stanza @@ -473,6 +473,7 @@
# contents of <c>, minus <mac>, minus whitespace macable = ''.join(str(x) for x in c.getChildren() if x.getName() != 'mac') + macable = macable.encode('utf-8')
received_mac = base64.b64decode(c.getTagData('mac')) calculated_mac = self.hmac(self.km_o, macable + \ @@ -483,7 +484,7 @@
m_final = base64.b64decode(c.getTagData('data')) m_compressed = self.decrypt(m_final) - plaintext = self.decompress(m_compressed) + plaintext = self.decompress(m_compressed).decode('utf-8')
try: parsed = nbxmpp.Node(node='<node>' + plaintext + '</node>') @@ -536,7 +537,7 @@ if i_o == 'a' and self.sas_algs == 'sas28x5': # we don't need to calculate this if there's a verified retained secret # (but we do anyways) - self.sas = crypto.sas_28x5(m_o, self.form_s) + self.sas = crypto.sas_28x5(m_o, self.form_s.encode('utf-8'))
if self.negotiated['recv_pubkey']: plaintext = self.decrypt(id_o) @@ -571,11 +572,11 @@ content = self.n_s + self.n_o + crypto.encode_mpi(dh_i) + pubkey_o
if sigmai: - self.form_o = c7l_form + self.form_o = c7l_form.encode('utf-8') content += self.form_o else: - form_o2 = c7l_form - content += self.form_o + form_o2 + form_o2 = c7l_form.encode('utf-8') + content += self.form_o.encode('utf-8') + form_o2
mac_o_calculated = self.hmac(self.ks_o, content)
@@ -609,7 +610,7 @@
old_c_s = self.c_s content = self.n_o + self.n_s + crypto.encode_mpi(dh_i) + pubkey_s + \ - self.form_s + form_s2 + self.form_s.encode('utf-8') + form_s2.encode('utf-8')
mac_s = self.hmac(self.ks_s, content)
@@ -632,14 +633,16 @@ if self.status == 'requested-e2e' and self.sas_algs == 'sas28x5': # we're alice; check for a retained secret # if none exists, prompt the user with the SAS - self.sas = crypto.sas_28x5(m_s, self.form_o) + self.sas = crypto.sas_28x5(m_s, self.form_o.encode('utf-8'))
if self.sigmai: # FIXME save retained secret? self.check_identity(tuple)
- return (nbxmpp.DataField(name='identity', value=base64.b64encode(id_s)), - nbxmpp.DataField(name='mac', value=base64.b64encode(m_s))) + return (nbxmpp.DataField(name='identity', + value=base64.b64encode(id_s).decode('utf-8')), + nbxmpp.DataField(name='mac', + value=base64.b64encode(m_s).decode('utf-8')))
def negotiate_e2e(self, sigmai): self.negotiated = {} @@ -695,7 +698,7 @@ self.n_s = crypto.generate_nonce()
x.addChild(node=nbxmpp.DataField(name='my_nonce', - value=base64.b64encode(self.n_s), typ='hidden')) + value=base64.b64encode(self.n_s).decode('utf-8'), typ='hidden'))
modp_options = [ int(g) for g in gajim.config.get('esession_modp').split( ',') ] @@ -826,7 +829,7 @@ return dhhashes = dhhashes_f.getValues() self.negotiated['He'] = base64.b64decode(dhhashes[group_order].encode( - 'utf8')) + 'utf8'))
bytes = int(self.n / 8)
@@ -845,7 +848,7 @@ 'nonce': self.n_o}
for name in to_add: - b64ed = base64.b64encode(to_add[name]) + b64ed = base64.b64encode(to_add[name]).decode('utf-8') x.addChild(node=nbxmpp.DataField(name=name, value=b64ed))
self.form_o = ''.join(nbxmpp.c14n.c14n(el, self._is_buggy_gajim()) for \ @@ -935,7 +938,7 @@ value='urn:xmpp:ssn')) result.addChild(node=nbxmpp.DataField(name='accept', value='1')) result.addChild(node=nbxmpp.DataField(name='nonce', - value=base64.b64encode(self.n_o))) + value=base64.b64encode(self.n_o).decode('utf-8')))
self.kc_s, self.km_s, self.ks_s = self.generate_initiator_keys(self.k)
@@ -952,11 +955,12 @@ rshash_size = self.hash_alg().digest_size rshashes.append(crypto.random_bytes(rshash_size))
- rshashes = [base64.b64encode(rshash) for rshash in rshashes] + rshashes = [base64.b64encode(rshash).decode('utf-8') for rshash in \ + rshashes] result.addChild(node=nbxmpp.DataField(name='rshashes', value=rshashes)) result.addChild(node=nbxmpp.DataField(name='dhkeys', - value=base64.b64encode(crypto.encode_mpi(e)))) + value=base64.b64encode(crypto.encode_mpi(e)).decode('utf-8')))
self.form_o = ''.join(nbxmpp.c14n.c14n(el, self._is_buggy_gajim()) \ for el in form.getChildren()) @@ -1037,9 +1041,9 @@ x.addChild(node=nbxmpp.DataField(name='FORM_TYPE', value='urn:xmpp:ssn')) x.addChild(node=nbxmpp.DataField(name='nonce', value=base64.b64encode( - self.n_o))) + self.n_o).decode('utf-8'))) x.addChild(node=nbxmpp.DataField(name='srshash', value=base64.b64encode( - srshash))) + srshash).decode('utf-8')))
for datafield in self.make_identity(x, self.d): x.addChild(node=datafield) @@ -1155,11 +1159,11 @@ self.es[modp] = e
if sigmai: - dhs.append(base64.b64encode(crypto.encode_mpi(e))) + dhs.append(base64.b64encode(crypto.encode_mpi(e)).decode('utf-8')) name = 'dhkeys' else: He = crypto.sha256(crypto.encode_mpi(e)) - dhs.append(base64.b64encode(He)) + dhs.append(base64.b64encode(He).decode('utf-8')) name = 'dhhashes'
return nbxmpp.DataField(name=name, typ='hidden', value=dhs)