Author: bct Date: 2007-08-17 11:02:53 +0200 (Fri, 17 Aug 2007) New Revision: 8501
Modified: branches/e2e_encryption/src/common/stanza_session.py Log: refactored make_identity
Modified: branches/e2e_encryption/src/common/stanza_session.py =================================================================== --- branches/e2e_encryption/src/common/stanza_session.py 2007-08-17 08:39:47 UTC (rev 8500) +++ branches/e2e_encryption/src/common/stanza_session.py 2007-08-17 09:02:53 UTC (rev 8501) @@ -387,7 +387,7 @@ elif mac_o_calculated != mac_o: raise exceptions.NegotiationError, 'calculated mac_%s differs from received mac_%s' % (i_o, i_o)
- def make_alices_identity(self, form, e): + def make_identity(self, form, dh_i): if self.negotiated['send_pubkey']: if self.negotiated['sign_algs'] == (XmlDsig + 'rsa-sha256'): fields = (gajim.interface.pubkey.n, gajim.interface.pubkey.e) @@ -401,12 +401,12 @@ form_s2 = ''.join(map(lambda el: xmpp.c14n.c14n(el), form.getChildren()))
old_c_s = self.c_s - content = self.n_o + self.n_s + self.encode_mpi(e) + pubkey_s + self.form_s + form_s2 + content = self.n_o + self.n_s + self.encode_mpi(dh_i) + pubkey_s + self.form_s + form_s2
- mac_a = self.hmac(self.ks_s, content) + mac_s = self.hmac(self.ks_s, content)
if self.negotiated['send_pubkey']: - signature = self.sign(mac_a) + signature = self.sign(mac_s)
sign_s = '<SignatureValue xmlns="http://www.w3.org/2000/09/xmldsig#">%s</SignatureValue>' % base64.b64encode(signature)
@@ -414,38 +414,23 @@ b64ed = base64.b64encode(self.hash(pubkey_s)) pubkey_s = '<fingerprint>%s</fingerprint>' % b64ed - id_a = self.encrypt(pubkey_s + sign_s) + id_s = self.encrypt(pubkey_s + sign_s) else: - id_a = self.encrypt(mac_a) + id_s = self.encrypt(mac_s)
- m_a = self.hmac(self.km_s, self.encode_mpi(old_c_s) + id_a) + m_s = self.hmac(self.km_s, self.encode_mpi(old_c_s) + id_s)
- # check for a retained secret - # if none exists, prompt the user with the SAS - if self.sas_algs == 'sas28x5': - self.sas = self.sas_28x5(m_a, self.form_o) + 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 = self.sas_28x5(m_s, self.form_o)
if self.sigmai: self.check_identity() - return (xmpp.DataField(name='identity', value=base64.b64encode(id_a)), \ - xmpp.DataField(name='mac', value=base64.b64encode(m_a))) + return (xmpp.DataField(name='identity', value=base64.b64encode(id_s)), \ + xmpp.DataField(name='mac', value=base64.b64encode(m_s)))
- def make_bobs_identity(self, form, d): - pubkey_b = '' - - form_s2 = ''.join(map(lambda el: xmpp.c14n.c14n(el), form.getChildren())) - content = self.n_o + self.n_s + self.encode_mpi(d) + pubkey_b + self.form_s + form_s2 - - old_c_s = self.c_s - mac_b = self.hmac(self.ks_s, content) - id_b = self.encrypt(mac_b) - - m_b = self.hmac(self.km_s, self.encode_mpi(old_c_s) + id_b) - - return (xmpp.DataField(name='identity', value=base64.b64encode(id_b)), \ - xmpp.DataField(name='mac', value=base64.b64encode(m_b))) - def negotiate_e2e(self, sigmai): self.negotiated = {}
@@ -724,7 +709,7 @@
# MUST securely destroy K unless it will be used later to generate the final shared secret
- for datafield in self.make_alices_identity(result, e): + for datafield in self.make_identity(result, e): result.addChild(node=datafield)
feature.addChild(node=result) @@ -793,7 +778,7 @@ x.addChild(node=xmpp.DataField(name='nonce', value=base64.b64encode(self.n_o))) x.addChild(node=xmpp.DataField(name='srshash', value=base64.b64encode(srshash)))
- for datafield in self.make_bobs_identity(x, self.d): + for datafield in self.make_identity(x, self.d): x.addChild(node=datafield)
init.addChild(node=x)