Как я могу кодировать данные в дер python? - PullRequest
0 голосов
/ 08 февраля 2020

Я искал по всему inte rnet модули, которые позволили бы мне кодировать / декодировать в формат DER, но все, что я видел, это то, что вам нужны существующие байты в кодировке DER, затем вы загружаете его и работаете с ним и т.д. c. То, что я ищу, - это создание структуры в кодировке DER из python.

Вот классы, которые я использую для сертификата:

import asn1crypto.core as asn

class metadata(asn.Sequence):
    _fields = [
        ("version", asn.UTF8String),
        ("date_created", asn.UTF8String),
        ("signed", asn.Boolean)
        ]

class subjectKey(asn.Sequence):
    _fields = [
        ("key_type", asn.OctetString),
        ("key_data", asn.OctetString),
        ("signiture_alg", asn.OctetString),
        ("signiture", asn.OctetString)
        ]

class public_certificate(asn.Sequence):
    _fields = [
        ("metadata", metadata),
        ("subject_key", subjectKey)
        ]

И пример генерации ключа:

from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization

ecPrv = ec.generate_private_key(ec.SECP521R1, default_backend())
ecPub = ecPrv.public_key()

ecPrvBytes = ecPrv.private_bytes(
    encoding=serialization.Encoding.DER,
    format=serialization.PrivateFormat.PKCS8,
    encryption_algorithm=serialization.NoEncryption()
    )

ecPubBytes = ecPub.public_bytes(
    encoding=serialization.Encoding.DER,
    format=serialization.PublicFormat.SubjectPublicKeyInfo,
    )

Что я хочу сделать, это загрузить ecPubKeyBytes и несколько других значений, таких как версия, в структуру DER. При загрузке public_certificate я должен предоставить данные, закодированные с помощью DER, но это проблема. У меня его нет, я хочу его создать.

...