手動で確認するには、PKCS#7 エンベロープのダイジェストを取得する必要があります。
通常、pkcs#7 エンベロープの署名を検証する場合は、次のようにします。
from M2Crypto import SMIME, X509, BIO
sm_obj = SMIME.SMIME()
x509 = X509.load_cert(join(PATH, 'QualifiedChain.crt'))
sk = X509.X509_Stack()
sk.push(x509)
sm_obj.set_x509_stack(sk)
st = X509.X509_Store()
st.load_info(join(PATH, 'QualifiedChain.crt'))
sm_obj.set_x509_store(st)
# re-wrap signature so that it fits base64 standards
cooked_sig = '\n'.join(raw_sig[pos:pos + 76] for pos in
xrange(0, len(raw_sig), 76))
# now, wrap the signature in a PKCS7 block
sig = "-----BEGIN PKCS7-----\n%s\n-----END PKCS7-----\n" % cooked_sig
# and load it into an SMIME p7 object through the BIO I/O buffer:
buf = BIO.MemoryBuffer(sig)
p7 = SMIME.load_pkcs7_bio(buf)
signers = p7.get0_signers(sk)
certificat = signers[0]
data_bio = BIO.MemoryBuffer(MSG)
sm_obj.verify(p7, data_bio) # This is the line that count.
しかし、私の場合、ダイジェスト タイプは openssl によって認識されない md5sha1 です。
$ openssl list-message-digest-commands
md4
md5
rmd160
sha
sha1
pkcs#7 signedContent を取得し、手動で確認する必要があります。
必要なのは、に相当する Python ですorg.bouncycastle.cms.CMSSignedDataParser
。
ダイジェストを使用せずに手動で検証できるようにするにはどうすればよいsm_obj.verify
ですか?