hs-tls/core/Network/TLS/Handshake/Signature.hs

40 lines
1.4 KiB
Haskell
Raw Normal View History

2012-08-18 22:05:37 +00:00
{-# LANGUAGE OverloadedStrings #-}
2012-08-19 07:48:05 +00:00
-- |
-- Module : Network.TLS.Handshake.Signature
-- License : BSD-style
-- Maintainer : Vincent Hanquez <vincent@snarc.org>
-- Stability : experimental
-- Portability : unknown
--
2012-08-18 22:05:37 +00:00
module Network.TLS.Handshake.Signature
( getHashAndASN1
) where
import qualified Crypto.Hash.SHA224 as SHA224
import qualified Crypto.Hash.SHA256 as SHA256
import qualified Crypto.Hash.SHA384 as SHA384
import qualified Crypto.Hash.SHA512 as SHA512
import Network.TLS.Context
import Network.TLS.Struct
import Control.Monad.State
import qualified Data.ByteString as B
getHashAndASN1 :: MonadIO m => (HashAlgorithm, SignatureAlgorithm) -> m (B.ByteString -> B.ByteString, B.ByteString)
getHashAndASN1 hashSig = do
case hashSig of
(HashSHA224, SignatureRSA) ->
return (SHA224.hash, "\x30\x2d\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x04\x05\x00\x04\x1c")
(HashSHA256, SignatureRSA) ->
return (SHA256.hash, "\x30\x31\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x05\x00\x04\x20")
(HashSHA384, SignatureRSA) ->
return (SHA384.hash, "\x30\x41\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x02\x05\x00\x04\x30")
(HashSHA512, SignatureRSA) ->
return (SHA512.hash, "\x30\x51\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x03\x05\x00\x04\x40")
_ ->
throwCore $ Error_Misc "unsupported hash/sig algorithm"