-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtcp.rkt
37 lines (32 loc) · 1.21 KB
/
tcp.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#lang racket/base
(require racket/set)
(require racket/tcp)
(require "session.rkt")
(require "port.rkt")
(provide encrypted-tcp-accept
encrypted-tcp-connect)
(define ((check-peer trusted-peers) peer-pk peer-root-pks)
(or (eq? trusted-peers #t)
(not (set-empty? (set-intersect trusted-peers peer-root-pks)))))
(define (encrypted-tcp-accept
#:local-identity [local-identity anonymous-identity]
#:local-certificates [local-certificates '()]
#:trusted-peers [trusted-peers #t]
#:validate-peer-identity [validate-peer-identity (check-peer trusted-peers)]
listener)
(define-values (i o) (tcp-accept listener))
(encrypt-ports i o
(lambda ()
(start-encrypted-session local-identity validate-peer-identity
#:certificates local-certificates))))
(define (encrypted-tcp-connect
#:local-identity [local-identity anonymous-identity]
#:local-certificates [local-certificates '()]
#:trusted-peers [trusted-peers #t]
#:validate-peer-identity [validate-peer-identity (check-peer trusted-peers)]
. args)
(define-values (i o) (apply tcp-connect args))
(encrypt-ports i o
(lambda ()
(start-encrypted-session local-identity validate-peer-identity
#:certificates local-certificates))))