smime.p7sからメッセージダイジェストを求めたい


S/MIMEで受信したデータを平文化した後、OpenSSLを使って自分で  
メッセージダイジェストを求めて、改ざんがないかチェックをしたいと思います。

ただ、smime.p7sからメッセージダイジェストを求める手順がわかりませんでした。  
OpenSSLでなくても構わないのですが、求め方を教えて頂けますか。

今のところ、以下の手順でメッセージダイジェストの取得を進めていました。  
平文部分をdata.txt、署名部をsmime.p7sとしています。

  1. 平文のメッセージダイジェスト 

> % openssl sha1 data.txt

  2. 署名部のメッセージダイジェスト  
64bitデコード

> % openssl enc -d -base64 -in smime.p7s -out smime64.p7s

ここから、smime64.p7sに含まれる署名の取得、電子証明書の取得、署名の復号（メッセージダイジェストの取得）と進める必要があるかと思いますが、進め方がわかりません。

以下を元に、含まれる証明書の表示までは手順がわかっています。似たような方法で署名も表示できるのではないかと思ったのですが、OpenSSLのコマンド一覧などを読んでもどれが該当するのかよくわかりませんでした。  
<https://stackoverflow.com/questions/5678124/extract-public-certificate-from-
smime-message-pkcs7-signature-with-openssl>

smime.p7sをASN.1形式のファイルをGUIで参照できるaatool2などを元に確認しましたが、  
どの箇所が署名にあたるのかわかりませんでした。ASN.1に関する知識もあまりないため、  
以下などを確認していますが、署名データの箇所となる部分を見つけられませんでした。  
<http://www.geocities.co.jp/SiliconValley-SanJose/3377/>




`openssl`(1) には `smime`(1) サブコマンドがあります。そのオプションの `-sign` で署名、`-verify`
で署名の確認を行なえます。

昔、OpenSSL `smime`(1) をラップする Perl モジュールを作成しました。  
POD に記載したように、`smime`(1) に渡す/返されるデータは RFC 2822 の  
e-mail 形式のテキストです。ご参考まで。

<https://github.com/fumiyas/openssl-hack/blob/master/lib/perl5/smime.pm>




`openssl`(1) には `smime`(1) サブコマンドがあります。そのオプションの `-sign` で署名、`-verify`
で署名の確認を行なえます。

昔、OpenSSL `smime`(1) をラップする Perl モジュールを作成しました。  
POD に記載したように、`smime`(1) に渡す/返されるデータは RFC 2822 の  
e-mail 形式のテキストです。ご参考まで。

<https://github.com/fumiyas/openssl-hack/blob/master/lib/perl5/smime.pm>

