DTLS patch

Haiyang Yin <[email protected]> Sat, 30 May 2015 13:19:53 -0400
Newsgroups gmane.comp.lang.erlang.patches
Message-ID <CAEVsv9Wy3V8AokejZ6VhigMWxXjTKjNCzL4wkSMjNQjq7vm+3Q@mail.gmail.com>
--f46d043c070014fff505174fcd49
Content-Type: multipart/alternative; boundary=f46d043c070014ffef05174fcd47

--f46d043c070014ffef05174fcd47
Content-Type: text/plain; charset=UTF-8

Hello,

We have a server application needs DTLS protocol support. But the current
OTP release still has an incomplete DTLS implementation. So we create this
patch to include DTLS implementation based on current well-designed ssl
architecture (which we don't consider this as a new feature, just a patch).
What we have added are:

1. DTLS transport layer on top of gen_udp
2. DTLS flight retransmission and timeout mechanism
3. DTLS record fragmentation/defragmentation handling

It looks good that the patch can work with OpenSSL 1.0.2a release. If no
one is working on dtls now, we would like to have this patch to be reviewed.

Following is the repository contains the patch:

https://github.com/haiyang-yin/otp

To fetch the patch, refer to following git commands:

git clone https://github.com/haiyang-yin/otp.git
git checkout dtls_patch

Here is code review location:

https://github.com/haiyang-yin/otp/compare/maint...haiyang-yin:dtls_patch

There are two demo programs to show how dtls client/server works in the
attachments.

Feel free to let me know if further information is needed.

Thank you,

/Haiyang

--f46d043c070014ffef05174fcd47
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hello,<div><br></div><div>We have a server application nee=
ds DTLS protocol support. But the current OTP release still has an incomple=
te DTLS implementation. So we create this patch to include DTLS implementat=
ion based on current well-designed ssl architecture (which we don&#39;t con=
sider this as a new feature, just a patch). What we have added are:</div><d=
iv><br></div><div>1. DTLS transport layer on top of gen_udp</div><div>2. DT=
LS flight retransmission and timeout mechanism</div><div>3. DTLS record fra=
gmentation/defragmentation handling</div><div><br></div><div>It looks good =
that the patch can work with OpenSSL 1.0.2a release. If no one is working o=
n dtls now, we would like to have this patch to be reviewed.</div><div><br>=
</div><div>Following is the repository contains the patch:</div><div><br></=
div><div><a href=3D"https://github.com/haiyang-yin/otp">https://github.com/=
haiyang-yin/otp</a><br></div><div><br></div><div>To fetch the patch, refer =
to following git commands:</div><div><br></div><div>git clone <a href=3D"ht=
tps://github.com/haiyang-yin/otp.git">https://github.com/haiyang-yin/otp.gi=
t</a></div><div>git checkout dtls_patch</div><div><br></div><div>Here is co=
de review location:</div><div><br></div><div><a href=3D"https://github.com/=
haiyang-yin/otp/compare/maint...haiyang-yin:dtls_patch">https://github.com/=
haiyang-yin/otp/compare/maint...haiyang-yin:dtls_patch</a><br></div><div><b=
r></div><div>There are two demo programs to show how dtls client/server wor=
ks in the attachments.</div><div><br></div><div>Feel free to let me know if=
 further information is needed.</div><div><br></div><div>Thank you,</div><d=
iv><br></div><div>/Haiyang</div><div><br></div></div>

--f46d043c070014ffef05174fcd47--
--f46d043c070014fff505174fcd49
Content-Type: application/octet-stream; name="dumpd_dtls_c.erl"
Content-Disposition: attachment; filename="dumpd_dtls_c.erl"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_iabaq0xy0

LW1vZHVsZShkdW1wZF9kdGxzX2MpLgotdmVyc2lvbigiMC4xIikuCi1hdXRob3IoImhhaXlhbmcu
eWluQHB1cnBsZWh5YWNpbnRoLmNvbSIpLgoKLWV4cG9ydChbc3RhcnQvMSxsaXN0ZW4vM10pLgoK
LWRlZmluZShERUZBVUxUX1NTTE9QVFMsIFsKICAgIHt2ZXJpZnksIDF9LAogICAgJXt2ZXJpZnks
IDB9LAogICAge2FjdGl2ZSwgZmFsc2V9LAogICAge2NlcnRmaWxlLCAiLi9jbGllbnQucGVtIn0s
CiAgICB7a2V5ZmlsZSwgIi4vY2xpZW50X2tleS5wZW0ifSwKICAgIHtjYWNlcnRmaWxlLCAiLi9j
YWNlcnQucGVtIn0sCiAgICB7Y2lwaGVycywgW3tlY2RoZV9lY2RzYSxhZXNfMjU2X2NiYyxzaGEz
ODR9LAogICAgICAgICAgICAgICB7ZWNkaGVfcnNhLGFlc18yNTZfY2JjLHNoYTM4NH0sCiAgICAg
ICAgICAgICAgIHtlY2RoX2VjZHNhLGFlc18yNTZfY2JjLHNoYTM4NH0sCiAgICAgICAgICAgICAg
IHtlY2RoX3JzYSxhZXNfMjU2X2NiYyxzaGEzODR9LAogICAgICAgICAgICAgICB7ZGhlX3JzYSxh
ZXNfMjU2X2NiYyxzaGEyNTZ9LAogICAgICAgICAgICAgICB7ZGhlX2RzcyxhZXNfMjU2X2NiYyxz
aGEyNTZ9LAogICAgICAgICAgICAgICB7cnNhLGFlc18yNTZfY2JjLHNoYTI1Nn0sCiAgICAgICAg
ICAgICAgIHtlY2RoZV9lY2RzYSxhZXNfMTI4X2NiYyxzaGEyNTZ9LAogICAgICAgICAgICAgICB7
ZWNkaGVfcnNhLGFlc18xMjhfY2JjLHNoYTI1Nn0sCiAgICAgICAgICAgICAgIHtlY2RoX2VjZHNh
LGFlc18xMjhfY2JjLHNoYTI1Nn0sCiAgICAgICAgICAgICAgIHtlY2RoX3JzYSxhZXNfMTI4X2Ni
YyxzaGEyNTZ9LAogICAgICAgICAgICAgICB7ZGhlX3JzYSxhZXNfMTI4X2NiYyxzaGEyNTZ9LAog
ICAgICAgICAgICAgICB7ZGhlX2RzcyxhZXNfMTI4X2NiYyxzaGEyNTZ9LAogICAgICAgICAgICAg
ICB7cnNhLGFlc18xMjhfY2JjLHNoYTI1Nn0sCiAgICAgICAgICAgICAgIHtlY2RoZV9lY2RzYSxh
ZXNfMjU2X2NiYyxzaGF9LAogICAgICAgICAgICAgICB7ZWNkaGVfcnNhLGFlc18yNTZfY2JjLHNo
YX0sCiAgICAgICAgICAgICAgIHtkaGVfcnNhLGFlc18yNTZfY2JjLHNoYX0sCiAgICAgICAgICAg
ICAgIHtkaGVfZHNzLGFlc18yNTZfY2JjLHNoYX0sCiAgICAgICAgICAgICAgIHtlY2RoX2VjZHNh
LGFlc18yNTZfY2JjLHNoYX0sCiAgICAgICAgICAgICAgIHtlY2RoX3JzYSxhZXNfMjU2X2NiYyxz
aGF9LAogICAgICAgICAgICAgICB7cnNhLGFlc18yNTZfY2JjLHNoYX0sCiAgICAgICAgICAgICAg
IHtlY2RoZV9lY2RzYSwnM2Rlc19lZGVfY2JjJyxzaGF9LAogICAgICAgICAgICAgICB7ZWNkaGVf
cnNhLCczZGVzX2VkZV9jYmMnLHNoYX0sCiAgICAgICAgICAgICAgIHtkaGVfcnNhLCczZGVzX2Vk
ZV9jYmMnLHNoYX0sCiAgICAgICAgICAgICAgIHtkaGVfZHNzLCczZGVzX2VkZV9jYmMnLHNoYX0s
CiAgICAgICAgICAgICAgIHtlY2RoX2VjZHNhLCczZGVzX2VkZV9jYmMnLHNoYX1dfSwKICAgIHtz
ZWN1cmVfcmVuZWdvdGlhdGUsIHRydWV9LAogICAge2ZhaWxfaWZfbm9fcGVlcl9jZXJ0LCB0cnVl
fSwKICAgIHtkZXB0aCwgMn0sCiAgICB7cmV1c2VhZGRyLCB0cnVlfQogICAgXSkuCgolLWRlZmlu
ZShURVNUX0FERFIsIHsxMjcsMCwwLDF9KS4KJS1kZWZpbmUoVEVTVF9BRERSLCB7MTkyLDE2OCwx
LDExfSkuCi1kZWZpbmUoVEVTVF9QT1JULCA0MDAwKS4KLWRlZmluZShTTkRfVElNRVIsIDIwMDAp
LgotZGVmaW5lKFRFU1RfTElORV9EQVQsICJUaGlzIGlzIGEgbG9uZyB0ZXN0IGxvZyBsaW5lIGlu
Zm8gdG8gZGVtb25zdHJhdGUgZHRscyB0cmFuc3BvcnQgdHJhZmZpYy4uLi4uLi4uIikuCgpzdGFy
dChBZGRyKS0+CiAgICBzc2w6c3RhcnQoKSwKICAgIGxpc3RlbihBZGRyLCA/VEVTVF9QT1JULCA/
REVGQVVMVF9TU0xPUFRTKS4KCmxpc3RlbihDbGllbnRBZGRyLCBDbGllbnRQb3J0LCBPcHRzKSAt
PgogICAgY2FzZSBkdGxzOmNvbm5lY3QoQ2xpZW50QWRkciwgQ2xpZW50UG9ydCwgT3B0cykgb2YK
ICAgIHtvaywgU29ja2V0fSAtPgogICAgICAgICAgICBpbzpmb3JtYXQoIk5vdyBjb25uZWN0ZWQg
dG8gfnA6fnAufm4iLAogICAgICAgICAgICAgICAgICBbQ2xpZW50QWRkciwgQ2xpZW50UG9ydF0p
LAogICAgICAgICAgICBwcm9jZXNzX2ZsYWcodHJhcF9leGl0LCB0cnVlKSwKICAgICAgICAgICAg
JSUgd2Ugd2lsbCB1c2UgYWN0aXZlIHBvbGwgbWV0aG9kLCBzbyBzZXQgYWN0aXZlIG9wdGlvbiB0
byBmYWxzZQogICAgICAgICAgICBzc2w6c2V0b3B0cyhTb2NrZXQsIFsge2FjdGl2ZSwgZmFsc2V9
IF0pLAogICAgICAgICAgICBzcGF3bl9saW5rKGZ1bigpIC0+IHJlYWRfbG9vcChTb2NrZXQpIGVu
ZCksIAogICAgICAgICAgICBUMSA9IGVybGFuZzpzdGFydF90aW1lcig/U05EX1RJTUVSLCBzZWxm
KCksIHRpbWVvdXRfZm9yX3NlbmQpLAogICAgICAgICAgICBsb29wKFNvY2tldCwgVDEpOwogICAg
e2Vycm9yLCBSZWFzb259IC0+CiAgICAgICAgaW86Zm9ybWF0KCJkdGxzOmxpc3RlbiByZXR1cm5l
ZCBlcnJvciBjb2RlIG9mIH5wIiwgW1JlYXNvbl0pCiAgIGVuZC4KCmxvb3AoU29ja2V0LCBTbmRU
bXJSZWYpIC0+CiAgICByZWNlaXZlCiAgICAgICAge2Vycm9yLCBSZWFzb259IC0+CiAgICAgICAg
ICAgIE1zZyA9IGlvX2xpYjpmb3JtYXQoIkVycm9yLCBzc2w6dHJhbnNwb3J0X2FjY2VwdCByZXR1
cm5lZCB+cCIsIFtSZWFzb25dKSwKICAgICAgICAgICAgZXJyb3JfbG9nZ2VyOmVycm9yX21zZyhN
c2cpLAogICAgICAgICAgICBleGl0KE1zZyk7CiAgICAgICAgJXtzc2wsIF8sIERhdGF9IC0+CiAg
ICAgICAgJSAgICBpbzpmb3JtYXQoImRhdGEgcmVjZWl2ZWQgfnAufm4iLCBbRGF0YV0pLAogICAg
ICAgICUgICAgZHRsc19yZWFkKFNvY2tldCwgU25kVG1yUmVmKTsKICAgICAgICB7dGltZW91dCwg
U25kVG1yUmVmLCB0aW1lb3V0X2Zvcl9zZW5kfSAtPgogICAgICAgICAgICBzc2w6c2VuZChTb2Nr
ZXQsID9URVNUX0xJTkVfREFUKSwKICAgICAgICAgICAgTmV3VDEgPSBlcmxhbmc6c3RhcnRfdGlt
ZXIoP1NORF9USU1FUiwgc2VsZigpLCB0aW1lb3V0X2Zvcl9zZW5kKSwKICAgICAgICAgICAgbG9v
cChTb2NrZXQsIE5ld1QxKQogICAgZW5kLgoKcmVhZF9sb29wKFNvY2tldCkgLT4KICAgIGNhc2Ug
c3NsOnJlY3YoU29ja2V0LCAwKSBvZgogICAgICAgIHtvaywgRGF0YX0gLT4KICAgICAgICAgICAg
aW86Zm9ybWF0KCJTb2NrZXQgcmVjZWl2ZWQgZGF0YS4uLn5ufnB+biIsIFtEYXRhXSksCiAgICAg
ICAgICAgIHJlYWRfbG9vcChTb2NrZXQpOwogICAgICAgIHtlcnJvciwgY2xvc2VkfSAtPgogICAg
ICAgICAgICBvawogICAgZW5kLgoK
--f46d043c070014fff505174fcd49
Content-Type: application/octet-stream; name="dumpd_dtls.erl"
Content-Disposition: attachment; filename="dumpd_dtls.erl"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_iabaqsm21

LW1vZHVsZShkdW1wZF9kdGxzKS4KLXZlcnNpb24oIjAuMSIpLgotYXV0aG9yKCJoYWl5YW5nLnlp
bkBwdXJwbGVoeWFjaW50aC5jb20iKS4KLWV4cG9ydChbc3RhcnQvMCxsaXN0ZW4vMl0pLgoKLWRl
ZmluZShERUZBVUxUX1NTTE9QVFMsIFsKICAgICUge3ZlcmlmeSwgMX0sCiAgICB7dmVyaWZ5LCAw
fSwKICAgICV7YWN0aXZlLCBvbmNlfSwKICAgIHtjZXJ0ZmlsZSwgIi4vc2VydmVyLnBlbSJ9LAog
ICAge2tleWZpbGUsICIuL3NlcnZlcl9rZXkucGVtIn0sCiAgICB7Y2FjZXJ0ZmlsZSwgIi4vY2Fj
ZXJ0LnBlbSJ9LAogICAge2NpcGhlcnMsIFt7ZWNkaGVfZWNkc2EsYWVzXzI1Nl9jYmMsc2hhMzg0
fSwKICAgICAgICAgICAgICAge2VjZGhlX3JzYSxhZXNfMjU2X2NiYyxzaGEzODR9LAogICAgICAg
ICAgICAgICB7ZWNkaF9lY2RzYSxhZXNfMjU2X2NiYyxzaGEzODR9LAogICAgICAgICAgICAgICB7
ZWNkaF9yc2EsYWVzXzI1Nl9jYmMsc2hhMzg0fSwKICAgICAgICAgICAgICAge2RoZV9yc2EsYWVz
XzI1Nl9jYmMsc2hhMjU2fSwKICAgICAgICAgICAgICAge2RoZV9kc3MsYWVzXzI1Nl9jYmMsc2hh
MjU2fSwKICAgICAgICAgICAgICAge3JzYSxhZXNfMjU2X2NiYyxzaGEyNTZ9LAogICAgICAgICAg
ICAgICB7ZWNkaGVfZWNkc2EsYWVzXzEyOF9jYmMsc2hhMjU2fSwKICAgICAgICAgICAgICAge2Vj
ZGhlX3JzYSxhZXNfMTI4X2NiYyxzaGEyNTZ9LAogICAgICAgICAgICAgICB7ZWNkaF9lY2RzYSxh
ZXNfMTI4X2NiYyxzaGEyNTZ9LAogICAgICAgICAgICAgICB7ZWNkaF9yc2EsYWVzXzEyOF9jYmMs
c2hhMjU2fSwKICAgICAgICAgICAgICAge2RoZV9yc2EsYWVzXzEyOF9jYmMsc2hhMjU2fSwKICAg
ICAgICAgICAgICAge2RoZV9kc3MsYWVzXzEyOF9jYmMsc2hhMjU2fSwKICAgICAgICAgICAgICAg
e3JzYSxhZXNfMTI4X2NiYyxzaGEyNTZ9LAogICAgICAgICAgICAgICB7ZWNkaGVfZWNkc2EsYWVz
XzI1Nl9jYmMsc2hhfSwKICAgICAgICAgICAgICAge2VjZGhlX3JzYSxhZXNfMjU2X2NiYyxzaGF9
LAogICAgICAgICAgICAgICB7ZGhlX3JzYSxhZXNfMjU2X2NiYyxzaGF9LAogICAgICAgICAgICAg
ICB7ZGhlX2RzcyxhZXNfMjU2X2NiYyxzaGF9LAogICAgICAgICAgICAgICB7ZWNkaF9lY2RzYSxh
ZXNfMjU2X2NiYyxzaGF9LAogICAgICAgICAgICAgICB7ZWNkaF9yc2EsYWVzXzI1Nl9jYmMsc2hh
fSwKICAgICAgICAgICAgICAge3JzYSxhZXNfMjU2X2NiYyxzaGF9LAogICAgICAgICAgICAgICB7
ZWNkaGVfZWNkc2EsJzNkZXNfZWRlX2NiYycsc2hhfSwKICAgICAgICAgICAgICAge2VjZGhlX3Jz
YSwnM2Rlc19lZGVfY2JjJyxzaGF9LAogICAgICAgICAgICAgICB7ZGhlX3JzYSwnM2Rlc19lZGVf
Y2JjJyxzaGF9LAogICAgICAgICAgICAgICB7ZGhlX2RzcywnM2Rlc19lZGVfY2JjJyxzaGF9LAog
ICAgICAgICAgICAgICB7ZWNkaF9lY2RzYSwnM2Rlc19lZGVfY2JjJyxzaGF9XX0sCiAgICB7c2Vj
dXJlX3JlbmVnb3RpYXRlLCB0cnVlfSwKICAgIHtmYWlsX2lmX25vX3BlZXJfY2VydCwgdHJ1ZX0s
CiAgICB7ZGVwdGgsIDJ9LAogICAge3JldXNlYWRkciwgdHJ1ZX0KICAgIF0pLgoKLWRlZmluZShE
RUZBVUxUX1BPUlQsIDQwMDApLgoKc3RhcnQoKS0+CiAgICBzc2w6c3RhcnQoKSwKICAgIGxpc3Rl
big/REVGQVVMVF9QT1JULCA/REVGQVVMVF9TU0xPUFRTKS4KCmxpc3RlbihQb3J0LCBPcHRzKSAt
PgogICAgY2FzZSBkdGxzOmxpc3RlbihQb3J0LCBPcHRzKSBvZgogICAge29rLCBMU29ja2V0fSAt
PgogICAgICAgIGR0bHNfYWNjZXB0KExTb2NrZXQpOwogICAge2Vycm9yLCBSZWFzb259IC0+CiAg
ICAgICAgaW86Zm9ybWF0KCJkdGxzOmxpc3RlbiByZXR1cm5lZCBlcnJvciBjb2RlIG9mIH5wIiwg
W1JlYXNvbl0pCiAgIGVuZC4KCmR0bHNfYWNjZXB0KExTb2NrZXQpIC0+CiAgICBjYXNlIGR0bHM6
YWNjZXB0KExTb2NrZXQpIG9mCiAgICAgICAge29rLCBUU29ja2V0fSAtPgogICAgICAgICAgICAg
cHJvY2Vzc19mbGFnKHRyYXBfZXhpdCwgdHJ1ZSksCiAgICAgICAgICAgICBzcGF3bl9saW5rKGZ1
bigpIC0+IGRvX3Rsc19oYW5kc2hha2UoVFNvY2tldCkgZW5kKSwKICAgICAgICAgICAgIGR0bHNf
YWNjZXB0KExTb2NrZXQpOwogICAgVHJhbnNwb3J0RXJyIC0+IAogICAgICAgIE1zZyA9IGlvX2xp
Yjpmb3JtYXQoIkVycm9yLCBzc2w6dHJhbnNwb3J0X2FjY2VwdCByZXR1cm5lZCB+cCIsIFtUcmFu
c3BvcnRFcnJdKSwKICAgICAgICBlcnJvcl9sb2dnZXI6ZXJyb3JfbXNnKE1zZyksCiAgICAgICAg
ZXhpdChNc2cpCiAgICBlbmQuCgpkb190bHNfaGFuZHNoYWtlKFNvY2tldCkgLT4KICAgIHtvaywg
e0FkZHIsIFBvcnR9fSA9IHNzbDpwZWVybmFtZShTb2NrZXQpLAogICAgY2FzZSBkdGxzOmhhbmRz
aGFrZShTb2NrZXQpIG9mCiAgICBvayAtPgogICAgICAgIGlvOmZvcm1hdCgiWyB+cCBdIGRvX3Rs
c19oYW5kc2hha2U6IEFkZHIgfnAgUG9ydCB+cCwgc2VsZiB+cC5+biIsIFs/TU9EVUxFLCBBZGRy
LCBQb3J0LCBzZWxmKCldKSwKICAgICAgICBwcm9jZXNzX2ZsYWcodHJhcF9leGl0LCB0cnVlKSwK
ICAgICAgICBzc2w6Y29udHJvbGxpbmdfcHJvY2VzcyhTb2NrZXQsIHNlbGYoKSksCiAgICAgICAg
bG9vcChTb2NrZXQpOwogICAgU3NsRXJyIC0+IAogICAgICAgIE1zZyA9IGlvX2xpYjpmb3JtYXQo
IkVycm9yLCBkdGxzOmhhbmRzaGFrZSByZXR1cm5lZCB+cCIsIFtTc2xFcnJdKSwKICAgICAgICBl
cnJvcl9sb2dnZXI6ZXJyb3JfbXNnKE1zZyksCiAgICAgICAgZXhpdChNc2cpCiAgICBlbmQuCgol
IEVjaG8gYmFjayB3aGF0ZXZlciBkYXRhIHdlIHJlY2VpdmUgb24gU29ja2V0Lgpsb29wKFNvY2tl
dCkgLT4KICAgIHJlY2VpdmUKICAgICAgICB7ZXJyb3IsIFJlYXNvbn0gLT4KICAgICAgICAgICAg
TXNnID0gaW9fbGliOmZvcm1hdCgiRXJyb3IsIHNzbDp0cmFuc3BvcnRfYWNjZXB0IHJldHVybmVk
IH5wIiwgW1JlYXNvbl0pLAogICAgICAgICAgICBlcnJvcl9sb2dnZXI6ZXJyb3JfbXNnKE1zZyks
CiAgICAgICAgICAgIGV4aXQoTXNnKTsKICAgICAgICB7c3NsLCBfLCBEYXRhfSAtPgogICAgICAg
ICAgICBpbzpmb3JtYXQoIlsgfnAgXWRhdGEgcmVjZWl2ZWQgfnAufm4iLCBbP01PRFVMRSwgRGF0
YV0pLAogICAgICAgICAgICBsb29wKFNvY2tldCk7CiAgICAgICAgICAgICVsb29wKFNvY2tldCwg
U25kVG1yUmVmKTsKICAgICAgICBPdGhlciAtPgogICAgICAgICAgICBpbzpmb3JtYXQoIlsgfnAg
XSBvdGhlciB+cC5+biIsIFs/TU9EVUxFLCBPdGhlcl0pCiAgICBlbmQuCg==
--f46d043c070014fff505174fcd49
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
erlang-patches mailing list
[email protected]
http://erlang.org/mailman/listinfo/erlang-patches

--f46d043c070014fff505174fcd49--