[*] -  SecureInfo.eu, /Crypto/encode_upn_to_der.py

Back


import base64
from asn1crypto import core
from binascii import unhexlify

def encode_upn_to_der(upn,tag="A0",enc="0C"):

    """
    tag = A0 -> ASN.1
    tag = 0C -> UTF-8
    ...

    enc = 0C -> UTF-8
    ...
    """

    # Création d'une instance d'ASN.1 pour UTF8String
    utf8_string = core.UTF8String(upn)

    # Encodage de l'UPN en DER
    encoded_der = utf8_string.dump()

    len_upn_hex = hex( len(upn) ).replace('0x','').upper()
    if( len(len_upn_hex) < 2 ): len_upn_hex = "0" + len_upn_hex

    len_upn_hex_2 = hex( len(upn)+len(enc) ).replace('0x','').upper()
    if( len(len_upn_hex) < 2 ): len_upn_hex_2 = "0" + len_upn_hex_2

    # Calcul du préfixe
    prfx = tag + len_upn_hex_2 + enc + len_upn_hex
    prfx = unhexlify(prfx)

    # Encodage du résultat DER en Base64
    base64_der = base64.b64encode(prfx + encoded_der).decode('utf-8')

    return base64_der

# Exemple d'UPN
upn = "abcd$@ABCD.com"

# Générer le Base64 DER
base64_der = encode_upn_to_der(upn)

print("""
UPN        : %s
base64_DER : %s
"""  % (upn,base64_der) 
)
⬆️ Top
admin