現在、ネイティブ OpenSSL バイナリを使用して SHA256 アルゴリズムでバイト文字列に署名するコードがいくつかあります。コードは外部プロセスを呼び出し、パラメーターを送信し、結果を Python コードに戻します。
現在のコードは次のとおりです。
signed_digest_proc = subprocess.Popen(
['openssl', 'dgst', '-sha256', '-sign', tmp_path],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE
)
signed_digest_proc.stdin.write(original_string)
signed_digest, _ = signed_digest_proc.communicate()
base64.encodestring(signed_digest).decode().replace('\n', '')
がoriginal_string
大きすぎると、結果に問題が発生する可能性があります (外部プロセスとの通信によると思います)。そのため、Python のみのソリューションに変更しようとしています。
import hmac, hashlib
h = hmac.new(bytes(key_pem(), 'ASCII'), original_string, hashlib.sha256)
result = base64.encodestring(h).decode().replace('\n', '')
これにより、最初の文字列とはまったく異なる文字列が生成されます。
外部プロセスを呼び出さずに元のコードを実装するにはどうすればよいでしょうか?