top page > computer > haskell > coding > pkcs7
更新日:
文責: 重城良国

PKCS#7

(工事中)

動機

Firefoxの拡張機能のパッケージ(.xpi)に署名をつけたい。どうやらMETA-INFディレクトリ以下に、manifest.mf、zigbert.sf、zigbert.rsaを用意して一緒にzip圧縮すれば良いようだ。manifest.mfとzigbert.sfはMD5とSHA1によるハッシュ値を求められれば良い。zigbert.rsaはzigbert.sfに対する署名ファイルのようだが、これがPKCS#7のBER形式のファイルになっている。

PKCS#7形式の署名ファイルの構造

PKCS#7形式の署名ファイルの構造は、どうやら、X.509形式で格納されたcertificate chainの部分と、署名を格納した部分とから成るようだ。

計画

ASN.1のBER形式とASN.1のHaskellデータ構造間の変換にはasn1-parseパッケージが使える。

また、ASN.1とX.509間の変換についてはx509パッケージが使える。SignedExactをASN1Objectのインスタンスにすることで、SignedCertificateとASN.1間でのデータの変換ができるようになる。decodeSignedObject, encodeSignedObject関数が参考になるだろう。

残りは署名部分。ここはそんなに複雑ではないので自分で1から作っても大した手間ではないだろう。

手順

  1. zigbert.rsa内の証明書の確認 (工事中)
  2. Yahoo Toolbarの.xpiから証明書を取り出す (工事中)
  3. 上記証明書をPEMファイルに書き出す
  4. PEMファイルから証明書を読み出してみたりする
  5. Yahoo Toolbarから証明書以外の部分を取り出す
  6. 証明書と合わせたデータ型を作成する
  7. それぞれのデータからファイルを作成できるようにする
  8. ファイルからそれぞれのデータを取得できるようにする
  9. 署名値を計算できるようにする

証明書の型とパース

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics