separate code path on server when doing a session resume.
This commit is contained in:
parent
c3da1074dc
commit
ba4a2de730
1 changed files with 30 additions and 18 deletions
|
@ -392,7 +392,11 @@ handshakeServerWith ctx (ClientHello ver _ _ ciphers compressions _) = do
|
|||
, stCompression = usedCompression
|
||||
})
|
||||
|
||||
let useSession = Nothing
|
||||
|
||||
-- send Server Data until ServerHelloDone
|
||||
case useSession of
|
||||
Nothing -> do
|
||||
handshakeSendServerData
|
||||
liftIO $ connectionFlush ctx
|
||||
|
||||
|
@ -400,12 +404,16 @@ handshakeServerWith ctx (ClientHello ver _ _ ciphers compressions _) = do
|
|||
whileStatus ctx (/= (StatusHandshake HsStatusClientFinished)) (recvPacketSuccess ctx)
|
||||
|
||||
sendPacket ctx ChangeCipherSpec
|
||||
|
||||
-- Send Finish
|
||||
cf <- usingState_ ctx $ getHandshakeDigest False
|
||||
sendPacket ctx (Handshake [Finished cf])
|
||||
|
||||
sendFinish
|
||||
liftIO $ connectionFlush ctx
|
||||
Just session -> do
|
||||
serverhello <- makeServerHello session
|
||||
sendPacket ctx $ Handshake [serverhello]
|
||||
sendPacket ctx ChangeCipherSpec
|
||||
sendFinish
|
||||
liftIO $ connectionFlush ctx
|
||||
-- receive changeCipherSpec & Finished
|
||||
recvPacket ctx >> recvPacketSuccess ctx
|
||||
return ()
|
||||
where
|
||||
params = ctxParams ctx
|
||||
|
@ -417,9 +425,12 @@ handshakeServerWith ctx (ClientHello ver _ _ ciphers compressions _) = do
|
|||
privKeys = map snd $ pCertificates params
|
||||
needKeyXchg = cipherExchangeNeedMoreData $ cipherKeyExchange usedCipher
|
||||
|
||||
handshakeSendServerData = do
|
||||
srand <- getStateRNG ctx 32 >>= return . ServerRandom
|
||||
sendFinish = do
|
||||
cf <- usingState_ ctx $ getHandshakeDigest False
|
||||
sendPacket ctx (Handshake [Finished cf])
|
||||
|
||||
makeServerHello session = do
|
||||
srand <- getStateRNG ctx 32 >>= return . ServerRandom
|
||||
case privKeys of
|
||||
(Just privkey : _) -> usingState_ ctx $ setPrivateKey privkey
|
||||
_ -> return () -- return a sensible error
|
||||
|
@ -438,11 +449,12 @@ handshakeServerWith ctx (ClientHello ver _ _ ciphers compressions _) = do
|
|||
return [ (0xff01, vf) ]
|
||||
else return []
|
||||
usingState_ ctx (setVersion ver >> setServerRandom srand)
|
||||
sendPacket ctx $ Handshake
|
||||
[ ServerHello ver srand (Session Nothing) (cipherID usedCipher)
|
||||
return $ ServerHello ver srand (Session session) (cipherID usedCipher)
|
||||
(compressionID usedCompression) extensions
|
||||
, Certificates srvCerts
|
||||
]
|
||||
|
||||
handshakeSendServerData = do
|
||||
serverhello <- makeServerHello Nothing
|
||||
sendPacket ctx $ Handshake [ serverhello, Certificates srvCerts ]
|
||||
when needKeyXchg $ do
|
||||
let skg = SKX_RSA Nothing
|
||||
sendPacket ctx (Handshake [ServerKeyXchg skg])
|
||||
|
|
Loading…
Reference in a new issue