{"size": 2104, "ext": "scrbl", "max_stars_repo_path": "pkgs/net-doc/net/scribblings/win32-ssl.scrbl", "max_stars_repo_name": "lkh01/racket", "max_stars_repo_stars_event_min_datetime": "2018-07-29T04:13:52.000Z", "max_stars_repo_stars_event_max_datetime": "2022-02-14T16:11:17.000Z", "max_issues_repo_path": "pkgs/net-doc/net/scribblings/win32-ssl.scrbl", "max_issues_repo_name": "lkh01/racket", "max_issues_repo_issues_event_min_datetime": "2017-08-25T20:26:37.000Z", "max_issues_repo_issues_event_max_datetime": "2022-02-26T17:48:40.000Z", "max_forks_repo_path": "pkgs/net-doc/net/scribblings/win32-ssl.scrbl", "max_forks_repo_name": "lkh01/racket", "max_forks_repo_forks_event_min_datetime": "2016-04-25T11:47:57.000Z", "max_forks_repo_forks_event_max_datetime": "2017-05-09T14:52:48.000Z"}
{"max_stars_count": 10, "max_issues_count": 15, "max_forks_count": 3, "avg_line_length": 35.6610169492, "max_line_length": 84, "alphanum_fraction": 0.6264258555}
#lang scribble/doc
@(require "common.rkt"
          (for-label net/win32-ssl
                     openssl))

@title[#:tag "win32-ssl"]{Windows Native SSL: Secure Communication}

@defmodule[net/win32-ssl]{The @racketmodname[net/win32-ssl] module
offers a fraction of the functionality of @racketmodname[openssl] and
works only on Windows, but it has the advantage that it works before
OpenSSL libraries are installed.}

@defproc[(win32-ssl-connect [hostname string?]
                            [port-no (integer-in 1 65535)]
                            [client-protocol
                             (or/c 'secure 'auto
                                   'sslv2-or-v3 'sslv2 'sslv3 'tls 'tls11 'tls12)
                             'auto])
         (values (and/c input-port? win32-ssl-port?)
                 (and/c output-port? win32-ssl-port?))]{

Like @racket[ssl-connect], but without support for client contexts.}


@defproc[(win32-ssl-abandon-port [in (and/c win32-ssl-port? output-port?)]) void?]{

Analogous to @racket[ssl-abandon-port].}


@defproc[(ports->win32-ssl-ports
           [input-port input-port?]
	   [output-port output-port?]
	   [#:encrypt protocol (or/c 'secure 'auto
                                     'sslv2-or-v3 'sslv2 'sslv3 'tls 'tls11 'tls12)]
           [#:hostname hostname (or/c #f string?) #f])
         (values (and/c input-port? win32-ssl-port?)
                 (and/c output-port? win32-ssl-port?))]{

Analogous to @racket[ports->ssl-ports].

If hostname verification is enabled via @racket['secure], the peer
server's certificate is checked against @racket[hostname].

@history[#:changed "6.3.0.12" @elem{Added the @racket[#:hostname] argument.}]}


@defproc[(win32-ssl-port? [v any/c]) boolean?]{

Returns @racket[#t] of @racket[v] is an SSL port produced by
@racket[win32-ssl-connect] or
@racket[ports->win32-ssl-ports].}


@defthing[win32-ssl-available? boolean?]{

A boolean value that reports whether the Windows native SSL library was
successfully loaded. Calling @racket[win32-ssl-connect], @|etc| when this
value is @racket[#f] will raise an exception.}
