summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoe <joe@blackbird>2014-01-06 19:34:44 -0500
committerjoe <joe@blackbird>2014-01-06 19:34:44 -0500
commit7742f014feea4dbcd8d812821c099b8ee160164f (patch)
tree6b2b8456da7022a01b4c9c5c4f7c410c3327d838
parent9c019c36528d23638deb39d46e93c42cac3cdc68 (diff)
Option --show-ssh (works like --show-pem, but ssh-rsa format).
-rw-r--r--LengthPrefixedBE.hs5
-rw-r--r--kiki.hs22
2 files changed, 24 insertions, 3 deletions
diff --git a/LengthPrefixedBE.hs b/LengthPrefixedBE.hs
index 9d8472d..dd74fe3 100644
--- a/LengthPrefixedBE.hs
+++ b/LengthPrefixedBE.hs
@@ -10,6 +10,7 @@ import Control.Monad (when)
10import Data.Bits 10import Data.Bits
11import Data.Binary 11import Data.Binary
12import Data.Binary.Get 12import Data.Binary.Get
13import Data.Binary.Put (putWord32be, putLazyByteString)
13import Data.Int 14import Data.Int
14 15
15{- 16{-
@@ -41,8 +42,8 @@ newtype LengthPrefixedBE = LengthPrefixedBE Integer
41instance Binary LengthPrefixedBE where 42instance Binary LengthPrefixedBE where
42 43
43 put (LengthPrefixedBE n) = do 44 put (LengthPrefixedBE n) = do
44 put len 45 putWord32be len
45 put bytes 46 putLazyByteString bytes
46 where 47 where
47 bytes = encode_bigendian n 48 bytes = encode_bigendian n
48 len = fromIntegral (L.length bytes) :: Word32 49 len = fromIntegral (L.length bytes) :: Word32
diff --git a/kiki.hs b/kiki.hs
index ef8986d..e6bc6f1 100644
--- a/kiki.hs
+++ b/kiki.hs
@@ -77,7 +77,8 @@ import Text.Printf
77import qualified CryptoCoins as CryptoCoins 77import qualified CryptoCoins as CryptoCoins
78import qualified Hosts 78import qualified Hosts
79import Network.Socket -- (SockAddr) 79import Network.Socket -- (SockAddr)
80 80import LengthPrefixedBE
81import Data.Binary.Put (putWord32be,runPut,putByteString)
81 82
82-- instance Default S.ByteString where def = S.empty 83-- instance Default S.ByteString where def = S.empty
83 84
@@ -218,6 +219,13 @@ instance ASN1Object RSAPrivateKey where
218 fromASN1 _ = 219 fromASN1 _ =
219 Left "fromASN1: RSAPrivateKey: unexpected format" 220 Left "fromASN1: RSAPrivateKey: unexpected format"
220 221
222sshrsa :: Integer -> Integer -> Char8.ByteString
223sshrsa e n = runPut $ do
224 putWord32be 7
225 putByteString "ssh-rsa"
226 put (LengthPrefixedBE e)
227 put (LengthPrefixedBE n)
228
221rsaKeyFromPacket :: Packet -> Maybe RSAPublicKey 229rsaKeyFromPacket :: Packet -> Maybe RSAPublicKey
222rsaKeyFromPacket p@(PublicKeyPacket {}) = do 230rsaKeyFromPacket p@(PublicKeyPacket {}) = do
223 n <- lookup 'n' $ key p 231 n <- lookup 'n' $ key p
@@ -1412,6 +1420,16 @@ show_pem keyspec wkgrip db = do
1412 putStrLn $ 1420 putStrLn $
1413 writePEM "PUBLIC KEY" qq -- ("TODO "++show keyspec) 1421 writePEM "PUBLIC KEY" qq -- ("TODO "++show keyspec)
1414 1422
1423show_ssh keyspec wkgrip db = do
1424 let s = parseSpec wkgrip keyspec
1425 flip (maybe $ warn (keyspec ++ ": not found") >> return ())
1426 (selectPublicKey s db)
1427 $ \k -> do
1428 let Just (RSAKey (MPI n) (MPI e)) = rsaKeyFromPacket k
1429 bs = sshrsa e n
1430 blob = Base64.encode (L.unpack bs)
1431 putStrLn $ "ssh-rsa " ++ blob
1432
1415show_key keyspec wkgrip db = do 1433show_key keyspec wkgrip db = do
1416 let s = parseSpec "" keyspec 1434 let s = parseSpec "" keyspec
1417 let ps = do 1435 let ps = do
@@ -2192,6 +2210,7 @@ main = do
2192 , ("--show-all",0) 2210 , ("--show-all",0)
2193 , ("--show-key",1) 2211 , ("--show-key",1)
2194 , ("--show-pem",1) 2212 , ("--show-pem",1)
2213 , ("--show-ssh",1)
2195 , ("--show-wip",1) 2214 , ("--show-wip",1)
2196 , ("--help",0) 2215 , ("--help",0)
2197 ] 2216 ]
@@ -2440,6 +2459,7 @@ main = do
2440 ,("--show-all",const $ show_all) 2459 ,("--show-all",const $ show_all)
2441 ,("--show-key",\[x] -> show_key x $ maybe "" id grip) 2460 ,("--show-key",\[x] -> show_key x $ maybe "" id grip)
2442 ,("--show-pem",\[x] -> show_pem x $ maybe "" id grip) 2461 ,("--show-pem",\[x] -> show_pem x $ maybe "" id grip)
2462 ,("--show-ssh",\[x] -> show_ssh x $ maybe "" id grip)
2443 ,("--show-wip",\[x] -> show_wip x $ maybe "" id grip) 2463 ,("--show-wip",\[x] -> show_wip x $ maybe "" id grip)
2444 ,("--help", \_ _ ->kiki_usage)] 2464 ,("--help", \_ _ ->kiki_usage)]
2445 shargs = mapMaybe (\(x:xs) -> (,xs) <$> Map.lookup x shspec) sargs 2465 shargs = mapMaybe (\(x:xs) -> (,xs) <$> Map.lookup x shspec) sargs