Index: third_party/tlslite/tlslite/messages.py |
diff --git a/third_party/tlslite/tlslite/messages.py b/third_party/tlslite/tlslite/messages.py |
index f2e2cfc2455ec8c3aa2fdb010c397c5748fae0b9..9aeff6d010c69a699c148b34ad580609320ac0f1 100644 |
--- a/third_party/tlslite/tlslite/messages.py |
+++ b/third_party/tlslite/tlslite/messages.py |
@@ -509,10 +509,13 @@ class ServerKeyExchange(HandshakeMsg): |
self.srp_g = 0 |
self.srp_s = bytearray(0) |
self.srp_B = 0 |
- # Anon DH params: |
+ # DH params: |
self.dh_p = 0 |
self.dh_g = 0 |
self.dh_Ys = 0 |
+ # ECDH params: |
+ self.ecdhCurve = 0 |
+ self.ecdhPublic = bytearray(0) |
self.signature = bytearray(0) |
def createSRP(self, srp_N, srp_g, srp_s, srp_B): |
@@ -528,6 +531,11 @@ class ServerKeyExchange(HandshakeMsg): |
self.dh_Ys = dh_Ys |
return self |
+ def createECDH(self, ecdhCurve, ecdhPublic): |
+ self.ecdhCurve = ecdhCurve |
+ self.ecdhPublic = ecdhPublic |
+ return self |
+ |
def parse(self, p): |
p.startLengthCheck(3) |
if self.cipherSuite in CipherSuite.srpAllSuites: |
@@ -555,6 +563,10 @@ class ServerKeyExchange(HandshakeMsg): |
w.addVarSeq(numberToByteArray(self.dh_p), 1, 2) |
w.addVarSeq(numberToByteArray(self.dh_g), 1, 2) |
w.addVarSeq(numberToByteArray(self.dh_Ys), 1, 2) |
+ elif self.cipherSuite in CipherSuite.ecdhAllSuites: |
+ w.add(ECCurveType.named_curve, 1) |
+ w.add(self.ecdhCurve, 2) |
+ w.addVarSeq(self.ecdhPublic, 1, 1) |
else: |
assert(False) |
return w.bytes |
@@ -626,7 +638,9 @@ class ClientKeyExchange(HandshakeMsg): |
else: |
raise AssertionError() |
elif self.cipherSuite in CipherSuite.dhAllSuites: |
- self.dh_Yc = bytesToNumber(p.getVarBytes(2)) |
+ self.dh_Yc = bytesToNumber(p.getVarBytes(2)) |
+ elif self.cipherSuite in CipherSuite.ecdhAllSuites: |
+ self.ecdh_Yc = p.getVarBytes(1) |
else: |
raise AssertionError() |
p.stopLengthCheck() |