エラーメッセージ「in method 'bio_new_file', argument 1 of type 'char const *'」
pythonでpassbookを作成する処理を書いてたらM2Cryptoの内部でこのようなエラーがでた
in method 'bio_new_file', argument 1 of type 'char const *'
このままググったら検索結果が6件しかなかったので、一応メモしておく
追っかけてみるとエラーになるのはSMIME.load_keyでEVP.load_keyを読んでる箇所でエラーになっている
class SMIME: def load_key(self, keyfile, certfile=None, callback=util.passphrase_callback): if certfile is None: certfile = keyfile self.pkey = EVP.load_key(keyfile, callback) # => ここでエラー self.x509 = X509.load_cert(certfile)
さらに追いかけるとbio = m2.bio_new_file(file, 'r')の部分でエラーになることがわかった
ここでのfileは鍵のファイルパスである
def load_key(file, callback=util.passphrase_callback): """ Load an M2Crypto.EVP.PKey from file. @type file: string @param file: Name of file containing the key in PEM format. @type callback: Python callable @param callback: A Python callable object that is invoked to acquire a passphrase with which to protect the key. @rtype: M2Crypto.EVP.PKey @return: M2Crypto.EVP.PKey object. """ bio = m2.bio_new_file(file, 'r') # ここでerror if bio is None: raise BIO.BIOError(Err.get_error()) cptr = m2.pkey_read_pem(bio, callback) m2.bio_free(bio) if cptr is None: raise EVPError(Err.get_error()) return PKey(cptr, 1)
結論を書いてしまうと、fileがunicord型だと上記のエラーになるのである。
str型で渡せば正常に処理できるようになった。