quicp2p/quicp2p.nim

51 lines
1.8 KiB
Nim
Raw Normal View History

2020-11-02 23:52:26 +01:00
{.passL: "-l crypto -l quicly -l picotls-core -l picotls-openssl".}
2020-11-02 00:52:13 +01:00
import quicly/quicly
2020-11-02 10:00:33 +01:00
import quicly/defaults
2020-11-02 00:52:13 +01:00
import picotls/picotls
2020-11-02 23:52:26 +01:00
import picotls/openssl as ptls_openssl
from openssl import DLLSSLName, EVP_PKEY, EVP_PKEY_free
const certChainPath = "./certs/server-certchain.pem"
const keyPath = "./certs/server-cert.key"
proc PEM_read_PrivateKey(fp: File, x: ptr EVP_PKEY,
cb: proc(buf: cstring, size: cint, rwflag: cint, u: pointer): cint {.cdecl.},
u: pointer): EVP_PKEY
{.cdecl, dynlib: DLLSSLName, importc.}
2020-11-02 00:52:13 +01:00
2020-11-02 10:00:33 +01:00
proc onStreamOpen(self: ptr quicly_stream_open_t, stream: ptr quicly_stream_t):
cint {.cdecl.} =
echo "onStreamOpen!"
2020-11-02 00:52:13 +01:00
proc main() =
2020-11-02 10:00:33 +01:00
# callbacks
var streamOpen = quicly_stream_open_t(cb: onStreamOpen)
var tlsCtx = ptls_context_t(randomBytes: ptlsOpensslRandomBytes,
getTime: addr ptlsGetTime,
keyExchanges: ptlsOpensslKeyExchanges,
cipherSuites: ptlsOpensslCipherSuites)
quiclyAmendPtlsContext(addr tlsCtx)
var ctx = quiclySpecContext
ctx.tls = addr tlsCtx
ctx.stream_open = addr streamOpen
2020-11-02 23:52:26 +01:00
if ptlsLoadCertificates(addr tlsCtx, certChainPath.cstring) != 0:
echo "cannot load certificate chain ", certChainPath
quit(1)
let pKeyFile = open(keyPath)
let privateKey = PEM_read_PrivateKey(pkeyFile, nil, nil, nil)
pkeyFile.close()
if privateKey == nil:
echo "cannot load private key ", keyPath
quit(2)
var signCertificate: ptls_openssl_sign_certificate_t
discard ptls_openssl_init_sign_certificate(addr signCertificate, privateKey)
EVP_PKEY_free(privateKey)
tlsCtx.signCertificate = addr signCertificate.super
2020-11-02 00:52:13 +01:00
echo "hello world"
2020-11-02 10:00:33 +01:00
when isMainModule:
main()