Skip to content

Instantly share code, notes, and snippets.

@shibukawa
Last active August 29, 2015 14:25
Show Gist options
  • Save shibukawa/c7a195349b9f2a31e545 to your computer and use it in GitHub Desktop.
Save shibukawa/c7a195349b9f2a31e545 to your computer and use it in GitHub Desktop.
Goで分からないこと

やりたいこと

ssh-keygenで生成したpublicキーを読み込んで、暗号化したい

そのためには最終的にcrypt/rsaパッケージのrsa.PublicKeyオブジェクトが必要。

ネットで出てくる方法

  • pem形式のprivate keyをパース(crypt.pemとcrypt.x509)して、rsa.PrivateKey.PublicKeyを使う。
    • でもPrivateKeyは配りたくないのでPublicKeyが使いたい
  • pem形式のpublic keyをパースする方法。
    • でもssh-keygenで出てくるpublic keyはpem形式じゃない。
  • golang.org/x/crypt/sshを使う。ssh.ParsePublicKey()でsshkey-gen方式のキーはパースできるが、rsa.PublicKeyではなくて、ssh.PublicKeyという別のオブジェクトが出てきて使えない。
    • ssh.PublicKeyはInterfaceで、ssh.rsaPublicKeyが実体で、type ssh.rsaPublicKey rsa.PublicKey って定義されている
    • ssh.PublicKeyからrsa.PublicKeyへ変換する方法は提供されてない
    • rsa.PublicKeyからssh.PublicKeyは変換できる
    • ssh/keys.goの変換関数の実体や、ssh.rsaPublicKeyはプライベートなので外から使えない。

方法?

  • reflect/unsafeを使って、インタフェースから*rsa.PublicKeyを取り出せないか?
  • ssh/keys.goのコードをコピーして同じように処理する?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment