spockを使ってコマンドラインでFirefox3のaddonに署名する

注意 2008.02.27

この記事では単純にnss_sign_dataupdate.rdfをリダイレクトしていますが、リダイレクトする前にいろいろ整形してから入れる必要があります。整形せずに入れても何らかの結果は出力されるので勘違いしていました。

整形の方法が不明な状態です。

さぁ、McCoyをはじめよう!! で紹介されているMcCoy – MDCを使うとFirefox3の拡張機能に署名することができます。

自分はいままで拡張機能をパッケージ、アップロードするのにMakefileを作ってコマンドラインから行っていたので途中にGUI作業が入るのが煩わしくて何とかなんないかなーと思っていたら、やっぱりおんなじことを思ってるひとがいるわけでFirefox 3, Dr. McCoy and Mr. Spock « Snippets code from my daily experience経由でspock | hyperstructというコマンドラインでの署名ツールを発掘しました。
StarTrekネタらしいけど知らないのでわかんないけどDr.McCoyとMr.Spockでspockっていう名前らしいです。

秘密鍵の生成自体はMcCoyで一度やってあげる必要がありますが、一度生成すればあとはMcCoyなしでspock単体で署名が可能です。

How to build nss_sign_data on OSX10.4

spockはCで書かれたnss_sign_dataという名前の暗号化プログラムと、それをRDFに書き込むrubyのスクリプトでできています。Debian Sidのバイナリがパッケージされていますが他のプラットホームで使うなら自分でビルドする必要があります。

OSXでバイナリを作ったのでバイナリとビルドの方法を書いておきます。

nss_sign_data binary for Firefox3b3/OSX10.4
nss_sign_data
  1. nightlyからMozilla1.9用のxulrunner SDKをゲットしてきて展開します。
  2. OSXのダイナミックリンクのパス解決の方法がよくわからないので、そんなことしなくてよさそうなのは承知の上でFirefox3のdylibをコピーしてきます。
    cp /Applications/Firefox.app/Contents/MacOS/*.dylib .
  3. Makefileを修正します。
    --- Makefile.org        2007-11-02 02:55:02.000000000 +0900
    +++ Makefile    2008-02-22 20:32:23.000000000 +0900
    @@ -1,6 +1,5 @@
    -CFLAGS=-Inss -I/usr/include/nss/ -I/usr/include/nspr
    -#LDLIBS=-lnspr4 -lplds4 -lplc4 -lnss3 -lsoftokn3 -lsmime3 -lssl3
    -LDLIBS=-lsmime3 -lssl3
    +CFLAGS=-Inss -I/usr/include/nss/ -I/usr/include/nspr -I./xulrunner-sdk/sdk/include
    +LDLIBS=-lnspr4 -lnss3 -lsmime3 -lplc4 -lnssutil3 -lplds4 -bind_at_load -L.
     OBJS=nss/secpwd.o nss/secutil.o nss/secerror.o nss/pppolicy.o nss/moreoids.o nss_sign_data.o
    
     all: nss_sign_data
    
  4. makeしてできあがり。
  5. How to use?

    em:updateHashにXPIのハッシュを記入済みのupdate.rdfをパイプでnss_sign_dataに入れます。

    $ cat update.rdf |  ./nss_sign_data ~/Library/Application\ Support/McCoy/Profiles/o0dla9hp.default
    MIGTMA0GCSqGSIb3DQEBDQUAA4GBAFTB1l6Fm1Zg8Tq3cFLihfZ+y7PnSjkAy7w34DA6+uQ6bsw1H9fR+UQnWwdm7UjjhiXUNV2FCGyLTACZRf7xGtNtnmSRKTaZ868EM1JVHyZr15CAzVqO3TPNyjcwppM3e4wb+BsRZiqhc5f/lTGGb9FppFNNEWu+e94iPkUl5tZ2
    

    でてきた文字列をem:signatureに書き込んだら署名完了。

    ほんとうはrubyのスクリプトのspockを実行すればem:signatureの書き込みもやってくれるのですが、rubyを使ったことがないのもあってlibxmllibxsltのruby bindingを入れるところがさっぱりわからなくて(gemでlibxml-ruby, libxsl-rubyを入れたけどsymbol not foundとかが出たりした)そこのところは自分でスクリプトを書いてやることにしました。rubyに詳しい方、ぜひ教えてください…

    というわけで今はMcCoyでem:signatureが入らない問題解決のXSLT+spock+perlでパッケージング、署名をしています。


About this entry