Загрузите закрытый ключ openssl Ed25519 в формате PEM в Python ed25519.SigningKey

У меня есть несколько ключей, сгенерированных с помощью openssl:

openssl genpkey -algorithm Ed25519 -out private_key.pem

и я хотел бы использовать их для создания подписей ed25519 в Python. Я нашел модуль ed25519, но не вижу способа загрузить файл PEM, сгенерированный, как указано выше. в ed25519.SigningKey.

Как мне это сделать?


person piokuc    schedule 14.07.2019    source источник


Ответы (1)


https://pypi.org/project/ed25519/ рекомендует использовать https://github.com/pyca/pynacl.

Ссылка: https://pypi.org/project/ed25519/

Не рекомендуется для новых приложений:

Вместо этого используйте pynacl Для новых приложений я рекомендую использовать [pynacl (https://github.com/pyca/pynacl) вместо этого репозитория. PyNaCl больше и требует больше времени для сборки (он содержит полную библиотеку NaCl/libsodium, а не только часть ed25519), но он хорошо поддерживается добросовестной и добросовестной командой PyCA, в то время как я позволил этому репозиторию чахнуть. PyNaCl также примерно в 10-20 раз быстрее.

Чтобы создать подписи с помощью ed25519, см. https://pynacl.readthedocs.io/en/stable/signing/#example

Точка зрения подписывающей стороны (SigningKey)

import nacl.encoding
import nacl.signing

# Generate a new random signing key
signing_key = nacl.signing.SigningKey.generate()

# Sign a message with the signing key
signed = signing_key.sign(b"Attack at Dawn")

# Obtain the verify key for a given signing key
verify_key = signing_key.verify_key

# Serialize the verify key to send it to a third party
verify_key_hex = verify_key.encode(encoder=nacl.encoding.HexEncoder)

Точка зрения верификатора (VerifyKey)

import nacl.signing

# Create a VerifyKey object from a hex serialized public key
verify_key = nacl.signing.VerifyKey(verify_key_hex,
                                    encoder=nacl.encoding.HexEncoder)

# Check the validity of a message's signature
# The message and the signature can either be passed separately or
# concatenated together.  These are equivalent:
verify_key.verify(signed)
verify_key.verify(signed.message, signed.signature)

# Alter the signed message text
forged = signed[:-1] + bytes([int(signed[-1]) ^ 1])
# Will raise nacl.exceptions.BadSignatureError, since the signature check
# is failing
verify_key.verify(forged)
person Thaddeus Albers    schedule 07.10.2019