Skip to content

Commit 33666cc

Browse files
authored
Merge pull request #5854 from unisonweb/tls-certs
add some new builtins for TLS
2 parents 414bade + 76dfde6 commit 33666cc

File tree

22 files changed

+848
-528
lines changed

22 files changed

+848
-528
lines changed

parser-typechecker/src/Unison/Builtin.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -936,7 +936,11 @@ ioBuiltins =
936936
("TLS.ClientConfig.ciphers.set", list tlsCipher --> tlsClientConfig --> tlsClientConfig),
937937
("Tls.ServerConfig.ciphers.set", list tlsCipher --> tlsServerConfig --> tlsServerConfig),
938938
("Tls.ClientConfig.certificates.set", list tlsSignedCert --> tlsClientConfig --> tlsClientConfig),
939+
("Tls.ClientConfig.certificates.get", tlsClientConfig --> list tlsSignedCert),
939940
("Tls.ServerConfig.certificates.set", list tlsSignedCert --> tlsServerConfig --> tlsServerConfig),
941+
("Tls.ServerConfig.certificates.get", tlsServerConfig --> list tlsSignedCert),
942+
("Tls.ClientConfig.validation.disableHostNameValidation", tlsClientConfig --> tlsClientConfig),
943+
("Tls.ClientConfig.validation.disableCertificateValidation", tlsClientConfig --> tlsClientConfig),
940944
("Tls.ClientConfig.versions.set", list tlsVersion --> tlsClientConfig --> tlsClientConfig),
941945
("Tls.ServerConfig.versions.set", list tlsVersion --> tlsServerConfig --> tlsServerConfig),
942946
("Clock.internals.monotonic.v1", unit --> iof timeSpec),

unison-runtime/package.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ library:
107107
- crypton-x509
108108
- crypton-x509-store
109109
- crypton-x509-system
110+
- crypton-x509-validation
110111

111112
tests:
112113
runtime-tests:

unison-runtime/src/Unison/Runtime/Builtin.hs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1094,8 +1094,11 @@ declareForeigns = do
10941094
declareForeign Tracked 2 Tls_ClientConfig_default
10951095
declareForeign Tracked 2 Tls_ServerConfig_default
10961096
declareForeign Tracked 2 Tls_ClientConfig_certificates_set
1097-
10981097
declareForeign Tracked 2 Tls_ServerConfig_certificates_set
1098+
declareForeign Tracked 1 Tls_ClientConfig_certificates_get
1099+
declareForeign Tracked 1 Tls_ServerConfig_certificates_get
1100+
declareForeign Tracked 1 Tls_ClientConfig_validation_disableHostNameValidation
1101+
declareForeign Tracked 1 Tls_ClientConfig_validation_disableCertificateValidation
10991102

11001103
declareForeign Tracked 1 TVar_new
11011104

unison-runtime/src/Unison/Runtime/Foreign/Function.hs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ import Data.Vector qualified as Vector
6767
import Data.X509 qualified as X
6868
import Data.X509.CertificateStore qualified as X
6969
import Data.X509.Memory qualified as X
70+
import Data.X509.Validation as X
7071
import GHC.ByteOrder (ByteOrder (..), targetByteOrder)
7172
import GHC.Conc qualified as STM
7273
import GHC.Exts (Int (..), indexWord8ArrayAsWord16#, indexWord8ArrayAsWord32#, indexWord8ArrayAsWord64#, readWord8ArrayAsWord16#, readWord8ArrayAsWord32#, readWord8ArrayAsWord64#, writeWord8ArrayAsWord16#, writeWord8ArrayAsWord32#, writeWord8ArrayAsWord64#)
@@ -479,11 +480,28 @@ foreignCallHelper = \case
479480
updateClient certs client = client {TLS.clientShared = ((clientShared client) {TLS.sharedCAStore = certs})}
480481
in mkForeign $
481482
\(certs :: [X.SignedCertificate], params :: ClientParams) -> pure $ updateClient (X.makeCertificateStore certs) params
483+
Tls_ClientConfig_certificates_get ->
484+
mkForeign $
485+
\(client :: TLS.ClientParams) -> pure $ X.listCertificates $ TLS.sharedCAStore $ TLS.clientShared client
486+
Tls_ClientConfig_validation_disableHostNameValidation ->
487+
let customChecks = X.defaultChecks {checkFQHN = False}
488+
customHooks = def {TLS.onServerCertificate = X.validate X.HashSHA256 defaultHooks customChecks}
489+
in mkForeign $
490+
\(params :: TLS.ClientParams) ->
491+
pure $ params {TLS.clientHooks = customHooks}
492+
Tls_ClientConfig_validation_disableCertificateValidation ->
493+
let customHooks = def {TLS.onServerCertificate = \_ _ _ _ -> pure []}
494+
in mkForeign $
495+
\(params :: TLS.ClientParams) ->
496+
pure $ params {TLS.clientHooks = customHooks}
482497
Tls_ServerConfig_certificates_set ->
483498
let updateServer :: X.CertificateStore -> TLS.ServerParams -> TLS.ServerParams
484499
updateServer certs client = client {TLS.serverShared = ((serverShared client) {TLS.sharedCAStore = certs})}
485500
in mkForeign $
486501
\(certs :: [X.SignedCertificate], params :: ServerParams) -> pure $ updateServer (X.makeCertificateStore certs) params
502+
Tls_ServerConfig_certificates_get ->
503+
mkForeign $
504+
\(params :: ServerParams) -> pure $ X.listCertificates $ TLS.sharedCAStore $ serverShared params
487505
TVar_new -> mkForeign $
488506
\(c :: Val) -> unsafeSTMToIO $ STM.newTVar c
489507
TVar_read -> mkForeign $

unison-runtime/src/Unison/Runtime/Foreign/Function/Type.hs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,11 @@ data ForeignFunc
105105
| Tls_ClientConfig_default
106106
| Tls_ServerConfig_default
107107
| Tls_ClientConfig_certificates_set
108+
| Tls_ClientConfig_certificates_get
109+
| Tls_ClientConfig_validation_disableHostNameValidation
110+
| Tls_ClientConfig_validation_disableCertificateValidation
108111
| Tls_ServerConfig_certificates_set
112+
| Tls_ServerConfig_certificates_get
109113
| TVar_new
110114
| TVar_read
111115
| TVar_write
@@ -407,6 +411,10 @@ foreignFuncBuiltinName = \case
407411
Tls_ServerConfig_default -> "Tls.ServerConfig.default"
408412
Tls_ClientConfig_certificates_set -> "Tls.ClientConfig.certificates.set"
409413
Tls_ServerConfig_certificates_set -> "Tls.ServerConfig.certificates.set"
414+
Tls_ClientConfig_certificates_get -> "Tls.ClientConfig.certificates.get"
415+
Tls_ServerConfig_certificates_get -> "Tls.ServerConfig.certificates.get"
416+
Tls_ClientConfig_validation_disableCertificateValidation -> "Tls.ClientConfig.validation.disableCertificateValidation"
417+
Tls_ClientConfig_validation_disableHostNameValidation -> "Tls.ClientConfig.validation.disableHostNameValidation"
410418
TVar_new -> "TVar.new"
411419
TVar_read -> "TVar.read"
412420
TVar_write -> "TVar.write"

unison-runtime/unison-runtime.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ library
120120
, crypton-x509
121121
, crypton-x509-store
122122
, crypton-x509-system
123+
, crypton-x509-validation
123124
, cryptonite
124125
, data-default
125126
, data-memocombinators

0 commit comments

Comments
 (0)