octohat-0.1: src/Network/Octohat/Keys.hs
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE OverloadedStrings #-}
module Network.Octohat.Keys (fingerprintFor) where
import qualified Data.List as L
import qualified Data.ByteString.Base64 as B64
import qualified Data.ByteString.Base16 as B16
import qualified Data.Text as T
import qualified Data.Text.Encoding as TE
import qualified Crypto.Hash.MD5 as MD5 -- eww
import Network.Octohat.Types
type RSAPublicKey = T.Text
type Fingerprint = T.Text
-- | Computes a fingerprint from its Base 64 encoded representation. Assumes leading @ssh-rsa @ (mind the space)
-- prefix and no user@hostname suffix
fingerprintFor :: PublicKey -> PublicKeyFingerprint
fingerprintFor PublicKey{..} = PublicKeyFingerprint publicKeyId (digestToHex publicKey)
digestToHex :: RSAPublicKey -> Fingerprint
digestToHex = T.concat .
L.intersperse ":" .
T.chunksOf 2 .
T.toLower .
TE.decodeUtf8 .
B16.encode .
MD5.hash .
B64.decodeLenient .
TE.encodeUtf8 .
T.replace "ssh-rsa " ""