Added openssl, openssl/sha1, and openssl/md5.

Also, listed new libs in TR scribble docs.
This commit is contained in:
Jordan Johnson 2014-05-19 14:40:59 -07:00 committed by Sam Tobin-Hochstadt
parent 0e9f468d3f
commit a651845605
4 changed files with 139 additions and 0 deletions

View File

@ -67,6 +67,9 @@ The following libraries are included with Typed Racket in the
@defmodule/incl[typed/net/smtp] @defmodule/incl[typed/net/smtp]
@defmodule/incl[typed/net/uri-codec] @defmodule/incl[typed/net/uri-codec]
@defmodule/incl[typed/net/url] @defmodule/incl[typed/net/url]
@defmodule/incl[typed/openssl]
@defmodule/incl[typed/openssl/md5]
@defmodule/incl[typed/openssl/sha1]
@defmodule/incl[typed/pict] @defmodule/incl[typed/pict]
@defmodule/incl[typed/rackunit] @defmodule/incl[typed/rackunit]
@defmodule/incl[typed/srfi/14] @defmodule/incl[typed/srfi/14]

View File

@ -0,0 +1,122 @@
#lang typed/racket/base
(require/opaque-type SSL-Client-Context ssl-client-context? openssl)
(define-type SSL-Protocol
(U 'sslv2-or-v3 'sslv2 'sslv3 'tls))
(provide SSL-Client-Context
ssl-client-context?
SSL-Protocol)
(require/opaque-type SSL-Listener ssl-listener? openssl)
(require/typed/provide openssl
[ssl-available? Boolean]
[ssl-load-fail-reason (Option String)]
;; 1: TCP-like Client Procedures
[ssl-connect
(->* (String Exact-Positive-Integer)
((U SSL-Client-Context SSL-Protocol))
(Values Input-Port Output-Port))]
[ssl-connect/enable-break
(->* (String Exact-Positive-Integer)
((U SSL-Client-Context SSL-Protocol))
(Values Input-Port Output-Port))]
[ssl-secure-client-context (-> SSL-Client-Context)]
[ssl-make-client-context (SSL-Protocol -> SSL-Client-Context)]
)
;;;; Ports ;;;;
(require/typed/provide openssl
;; XXX Would be better if we could make SSL-Port be a subtype
;; of Port, but for now that's impossible so we'll just provide
;; this predicate.
[ssl-port? (-> Any Boolean)]
)
(require/opaque-type SSL-Server-Context ssl-server-context? openssl)
;;;; 2: TCP-like Server Procedures
(require/typed/provide openssl
[ssl-listen (->* (Exact-Positive-Integer) ;; port, <= 65535
(Exact-Nonnegative-Integer Boolean (Option String))
SSL-Listener)]
[ssl-close (-> SSL-Listener Void)]
;; ssl-listener? provided above
[ssl-accept
(-> SSL-Listener (Values Input-Port Output-Port))]
[ssl-accept/enable-break
(-> SSL-Listener (Values Input-Port Output-Port))]
[ssl-abandon-port (-> Port Void)] ;; XXX SSL-Port
[ssl-make-server-context (SSL-Protocol -> SSL-Server-Context)]
)
;;;; 3: SSL Wrapper Interface
(require/typed/provide openssl
[ports->ssl-ports
(-> Input-Port Output-Port
[#:mode (U 'connect 'accept)]
[#:context (U SSL-Client-Context SSL-Server-Context)]
[#:encrypt SSL-Protocol]
[#:close-original? Boolean]
[#:shutdown-on-close? Boolean]
[#:error/ssl (Any -> Void)] ;; FIXME find type for error proc
[#:hostname (Option String)]
; ->
(Values Input-Port Output-Port))]
)
;;;; 4: Context Procedures
(define-type SSL-Context (U SSL-Client-Context SSL-Server-Context))
(define-type SSL-Verify-Source
(U Path-String
(List 'directory Path-String)
(List 'win32-store String)
(List 'macosx-keychain Path-String)))
(require/typed/provide openssl
[ssl-load-verify-source!
(-> SSL-Context SSL-Verify-Source [#:try? Any] Void)]
[ssl-default-verify-sources (Parameterof SSL-Verify-Source)]
[ssl-load-default-verify-sources! (-> SSL-Context Void)]
[ssl-load-verify-root-certificates!
(-> (U SSL-Context SSL-Listener) Path-String Void)]
[ssl-set-ciphers! (-> SSL-Context String Void)]
[ssl-seal-context! (-> SSL-Context Void)]
[ssl-load-certificate-chain!
(-> (U SSL-Context SSL-Listener) Path-String Void)]
[ssl-load-private-key!
(->* ((U SSL-Context SSL-Listener) Path-String)
(Boolean Boolean)
Void)]
[ssl-load-suggested-certificate-authorities!
(-> (U SSL-Context SSL-Listener) Path-String Void)]
)
;;;; 5: Peer Verification
(require/typed/provide openssl
[ssl-set-verify!
(-> (U SSL-Context SSL-Listener Port) Any ;; XXX SSL-Port
Void)]
[ssl-try-verify!
(-> (U SSL-Context SSL-Listener Port) Any ;; XXX SSL-Port
Void)]
[ssl-peer-verified? (-> Port Boolean)] ;; XXX SSL-Port
[ssl-set-verify-hostname! (-> SSL-Context Any Void)]
[ssl-peer-certificate-hostnames
(-> Port (Listof String))] ;; XXX SSL-Port
[ssl-peer-check-hostname
(-> Port String Boolean)] ;; XXX SSL-Port
[ssl-peer-subject-name (-> Port (Option Bytes))] ;; XXX SSL-Port
[ssl-peer-issuer-name (-> Port (Option Bytes))] ;; XXX SSL-Port
)

View File

@ -0,0 +1,6 @@
#lang typed/racket/base
(require/typed/provide openssl/md5
[md5 (-> Input-Port String)]
[md5-bytes (-> Input-Port Bytes)]
)

View File

@ -0,0 +1,8 @@
#lang typed/racket/base
(require/typed/provide openssl/sha1
[sha1 (-> Input-Port String)]
[sha1-bytes (-> Input-Port Bytes)]
[bytes->hex-string (-> Bytes String)]
[hex-string->bytes (-> String Bytes)]
)