diff options
Diffstat (limited to 'kiki.hs')
-rw-r--r-- | kiki.hs | 22 |
1 files changed, 21 insertions, 1 deletions
@@ -77,7 +77,8 @@ import Text.Printf | |||
77 | import qualified CryptoCoins as CryptoCoins | 77 | import qualified CryptoCoins as CryptoCoins |
78 | import qualified Hosts | 78 | import qualified Hosts |
79 | import Network.Socket -- (SockAddr) | 79 | import Network.Socket -- (SockAddr) |
80 | 80 | import LengthPrefixedBE | |
81 | import 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 | ||
222 | sshrsa :: Integer -> Integer -> Char8.ByteString | ||
223 | sshrsa e n = runPut $ do | ||
224 | putWord32be 7 | ||
225 | putByteString "ssh-rsa" | ||
226 | put (LengthPrefixedBE e) | ||
227 | put (LengthPrefixedBE n) | ||
228 | |||
221 | rsaKeyFromPacket :: Packet -> Maybe RSAPublicKey | 229 | rsaKeyFromPacket :: Packet -> Maybe RSAPublicKey |
222 | rsaKeyFromPacket p@(PublicKeyPacket {}) = do | 230 | rsaKeyFromPacket 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 | ||
1423 | show_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 | |||
1415 | show_key keyspec wkgrip db = do | 1433 | show_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 |