-
Notifications
You must be signed in to change notification settings - Fork 87
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Lower-level send/receive API for Snockets, bypassing the normal Mux protocol. We need this for KES secure forgetting, as we cannot store secrets in intermediate data structures for serialization purposes; we must copy data directly between secure memory and file descriptors.
- Loading branch information
Showing
7 changed files
with
362 additions
and
13 deletions.
There are no files selected for viewing
6 changes: 6 additions & 0 deletions
6
ouroboros-network-framework/changelog.d/20230224_094922_tdammers_raw_bearer.rst
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
Added | ||
----- | ||
|
||
- RawBearer API | ||
- ToRawBearer typeclass | ||
- ToRawBearer instances for `Socket`, `LocalSocket`, and `Simulation.Network.Snocket.FD` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
50 changes: 50 additions & 0 deletions
50
ouroboros-network-framework/src/Ouroboros/Network/RawBearer.hs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
{-# LANGUAGE CPP #-} | ||
{-# LANGUAGE MultiParamTypeClasses #-} | ||
|
||
module Ouroboros.Network.RawBearer | ||
where | ||
|
||
import Network.Socket (Socket) | ||
import qualified Network.Socket as Socket | ||
import Foreign.Ptr (Ptr) | ||
import Data.Word (Word8) | ||
|
||
#if defined(mingw32_HOST_OS) | ||
import Data.Bits | ||
import Foreign.Ptr (IntPtr (..), ptrToIntPtr) | ||
import qualified System.Win32 as Win32 | ||
import qualified System.Win32.Async as Win32.Async | ||
import qualified System.Win32.NamedPipes as Win32 | ||
#endif | ||
|
||
-- | Generalized API for sending and receiving raw bytes over a file | ||
-- descriptor, socket, or similar object. | ||
data RawBearer m = | ||
RawBearer | ||
{ send :: Ptr Word8 -> Int -> m Int | ||
, recv :: Ptr Word8 -> Int -> m Int | ||
} | ||
|
||
class ToRawBearer m fd where | ||
toRawBearer :: fd -> m (RawBearer m) | ||
|
||
instance ToRawBearer IO Socket where | ||
toRawBearer s = | ||
return RawBearer | ||
{ send = Socket.sendBuf s | ||
, recv = Socket.recvBuf s | ||
} | ||
|
||
#if defined(mingw32_HOST_OS) | ||
|
||
-- | We cannot declare an @instance ToRawBearer Win32.HANDLE@, because | ||
-- 'Win32.Handle' is just a type alias for @Ptr ()@. So instead, we provide | ||
-- this function, which can be used to implement 'ToRawBearer' elsewhere (e.g. | ||
-- over a newtype). | ||
win32HandleToRawBearer :: Win32.HANDLE -> RawBearer IO | ||
win32HandleToRawBearer s = | ||
RawBearer | ||
{ send = \buf size -> fromIntegral <$> Win32.win32_WriteFile s (castPtr buf) (fromIntegral size) | ||
, recv = \buf size -> fromIntegral <$> Win32.win32_ReadFile s (castPtr buf) (fromIntegral size) | ||
} | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.