pysap.SAPPSE module

class pysap.SAPPSE.ASN1F_PSE_v2_ENC_CONT_SEQUENCE(*seq: Any, **kwargs: Any)[source]

Bases: ASN1F_SEQUENCE

ASN1_tag = <ASN1Tag v2_ENC_CONT[160]>
class pysap.SAPPSE.ASN1F_PSE_v4_ENC_CONT_SEQUENCE(*seq: Any, **kwargs: Any)[source]

Bases: ASN1F_SEQUENCE

ASN1_tag = <ASN1Tag v4_ENC_CONT[163]>
class pysap.SAPPSE.ASN1_Class_PSE[source]

Bases: ASN1_Class_UNIVERSAL

ANY = <ASN1Tag ANY[0]>
BIT_STRING = <ASN1Tag BIT_STRING[3]>
BMP_STRING = <ASN1Tag BMP_STRING[30]>
BOOLEAN = <ASN1Tag BOOLEAN[1]>
CHAR_STRING = <ASN1Tag CHAR_STRING[29]>
COUNTER32 = <ASN1Tag COUNTER32[65]>
COUNTER64 = <ASN1Tag COUNTER64[70]>
EMBEDDED_PDF = <ASN1Tag EMBEDDED_PDF[11]>
ENUMERATED = <ASN1Tag ENUMERATED[10]>
ERROR = <ASN1Tag ERROR[-3]>
EXTERNAL = <ASN1Tag EXTERNAL[8]>
GAUGE32 = <ASN1Tag GAUGE32[66]>
GENERALIZED_TIME = <ASN1Tag GENERALIZED_TIME[24]>
GENERAL_STRING = <ASN1Tag GENERAL_STRING[27]>
GRAPHIC_STRING = <ASN1Tag GRAPHIC_STRING[25]>
IA5_STRING = <ASN1Tag IA5_STRING[22]>
INTEGER = <ASN1Tag INTEGER[2]>
IPADDRESS = <ASN1Tag IPADDRESS[64]>
ISO646_STRING = <ASN1Tag ISO646_STRING[26]>
NONE = <ASN1Tag NONE[-1]>
NULL = <ASN1Tag NULL[5]>
NUMERIC_STRING = <ASN1Tag NUMERIC_STRING[18]>
OBJECT_DESCRIPTOR = <ASN1Tag OBJECT_DESCRIPTOR[7]>
OID = <ASN1Tag OID[6]>
PRINTABLE_STRING = <ASN1Tag PRINTABLE_STRING[19]>
RAW = <ASN1Tag RAW[-2]>
REAL = <ASN1Tag REAL[9]>
RELATIVE_OID = <ASN1Tag RELATIVE_OID[13]>
SEQUENCE = <ASN1Tag SEQUENCE[48]>
SET = <ASN1Tag SET[49]>
STRING = <ASN1Tag STRING[4]>
T61_STRING = <ASN1Tag T61_STRING[20]>
TIME_TICKS = <ASN1Tag TIME_TICKS[67]>
UNIVERSAL_STRING = <ASN1Tag UNIVERSAL_STRING[28]>
UTC_TIME = <ASN1Tag UTC_TIME[23]>
UTF8_STRING = <ASN1Tag UTF8_STRING[12]>
VIDEOTEX_STRING = <ASN1Tag VIDEOTEX_STRING[21]>
name = 'PSE'
v2_ENC_CONT = <ASN1Tag v2_ENC_CONT[160]>
v4_ENC_CONT = <ASN1Tag v4_ENC_CONT[163]>
class pysap.SAPPSE.ASN1_PSE_v2_ENC_CONT_SEQUENCE(val: _K)[source]

Bases: ASN1_SEQUENCE

tag = <ASN1Tag v2_ENC_CONT[160]>
class pysap.SAPPSE.ASN1_PSE_v4_ENC_CONT_SEQUENCE(val: _K)[source]

Bases: ASN1_SEQUENCE

tag = <ASN1Tag v4_ENC_CONT[163]>
class pysap.SAPPSE.BERcodec_PSE_v2_ENC_CONT_SEQUENCE[source]

Bases: BERcodec_SEQUENCE

tag = <ASN1Tag v2_ENC_CONT[160]>
class pysap.SAPPSE.BERcodec_PSE_v4_ENC_CONT_SEQUENCE[source]

Bases: BERcodec_SEQUENCE

tag = <ASN1Tag v4_ENC_CONT[163]>
class pysap.SAPPSE.PKCS12_PBE1_Parameters(_pkt, /, *, salt=<ASN1_STRING['']>, iterations=0x800 <ASN1_INTEGER[2048]>)[source]

Bases: ASN1_Packet

PKCS12 PBE1 Parameters

ASN1_codec = <ASN1Codec BER[1]>
ASN1_root = <ASN1F_SEQUENCE(<scapy.asn1fields.ASN1F_STRING object>, <scapy.asn1fields.ASN1F_INTEGER object>)>
aliastypes = [<class 'pysap.SAPPSE.PKCS12_PBE1_Parameters'>, <class 'scapy.asn1packet.ASN1_Packet'>, <class 'scapy.packet.Packet'>]
fields_desc: List[AnyField] = [<scapy.asn1fields.ASN1F_STRING object>, <scapy.asn1fields.ASN1F_INTEGER object>]
class pysap.SAPPSE.PKCS5_Algorithm_Identifier(_pkt, /, *, alg_id=<ASN1_OID['.1.2.840.113549.1.12.1.3']>, parameters=<PKCS12_PBE1_Parameters  |>)[source]

Bases: ASN1_Packet

PKCS5 Algorithm Identifier

ASN1_codec = <ASN1Codec BER[1]>
ASN1_root = <ASN1F_SEQUENCE(<scapy.asn1fields.ASN1F_OID object>, <scapy.asn1fields.ASN1F_optional object>)>
aliastypes = [<class 'pysap.SAPPSE.PKCS5_Algorithm_Identifier'>, <class 'scapy.asn1packet.ASN1_Packet'>, <class 'scapy.packet.Packet'>]
fields_desc: List[AnyField] = [<scapy.asn1fields.ASN1F_OID object>, <scapy.asn1fields.ASN1F_CHOICE object>]
class pysap.SAPPSE.PKCS5_Salt_Parameter(_pkt, /, *, salt=<ASN1_STRING['']>)[source]

Bases: ASN1_Packet

PKCS5 Salt Parameter

ASN1_codec = <ASN1Codec BER[1]>
ASN1_root = <scapy.asn1fields.ASN1F_STRING object>
aliastypes = [<class 'pysap.SAPPSE.PKCS5_Salt_Parameter'>, <class 'scapy.asn1packet.ASN1_Packet'>, <class 'scapy.packet.Packet'>]
fields_desc: List[AnyField] = [<scapy.asn1fields.ASN1F_STRING object>]
class pysap.SAPPSE.SAPPSEFile(_pkt, /, *, version=0x2 <ASN1_INTEGER[2]>, enc_cont=<SAPPSEv2_Enc_Cont  algorithm_identifier=<PKCS5_Algorithm_Identifier  parameters=<PKCS12_PBE1_Parameters  |> |> |>)[source]

Bases: ASN1_Packet

SAP PSE definition

ASN1_codec = <ASN1Codec BER[1]>
ASN1_root = <ASN1F_SEQUENCE(<scapy.asn1fields.ASN1F_INTEGER object>, <scapy.asn1fields.ASN1F_CHOICE object>)>
aliastypes = [<class 'pysap.SAPPSE.SAPPSEFile'>, <class 'scapy.asn1packet.ASN1_Packet'>, <class 'scapy.packet.Packet'>]
decrypt(pin)[source]

Decrypts a PSE file given a provided PIN. Calls the respective decryption function based on the PSE version.

decrypt_lps(pin)[source]

Decrypts an LPS encrypted PSE file given a provided PIN.

Parameters:

pin (string)

Returns:

decrypted object

Return type:

SAPPSE_Cont

Raises:
  • ValueError – if the provided PIN doesn’t match with the one used for encryption

  • NotImplementedError – if the algorithm specified is not supported

  • Exception – if the algorithm specified is not valid

decrypt_non_lps(pin)[source]

Decrypts a non-LPS encrypted PSE file given a provided PIN. Implements PKCS12 PBE1 based encryption for v2 PSE files.

Parameters:

pin (string)

Returns:

decrypted object

Return type:

SAPPSE_Cont

Raises:
  • ValueError – if the provided PIN doesn’t match with the one used for encryption

  • NotImplementedError – if the algorithm specified is not supported

  • Exception – if the algorithm specified is not valid

fields_desc: List[AnyField] = [<scapy.asn1fields.ASN1F_INTEGER object>, <scapy.asn1fields.ASN1F_CHOICE object>]
class pysap.SAPPSE.SAPPSE_Cont(_pkt, /, *, algorithm_identifier=<PKCS5_Algorithm_Identifier  parameters=<PKCS12_PBE1_Parameters  |> |>, timestamp=1970-01-01 00:00:00 UTC <ASN1_GENERALIZED_TIME['19700101000000Z']>, unknown1=0x1 <ASN1_INTEGER[1]>, pse_obj=<SAPPSE_Obj  object_value=<SAPPSE_Obj_PKRoot  ca=<X509_DirectoryName  directoryName=[<X509_RDN  rdn=[<X509_AttributeTypeAndValue  |>] |>, <X509_RDN  rdn=[<X509_AttributeTypeAndValue  type=<ASN1_OID['organizationName']> value=<ASN1_PRINTABLE_STRING['Scapy, Inc.']> |>] |>, <X509_RDN  rdn=[<X509_AttributeTypeAndValue  type=<ASN1_OID['commonName']> value=<ASN1_PRINTABLE_STRING['Scapy Default Name']> |>] |>] |> new_key=<SAPPSE_Root_Key  public_key=<X509_SubjectPublicKeyInfo  |> validity=<X509_Validity  |> sign_alg_id=<X509_AlgorithmIdentifier  |> |> old_key=<SAPPSE_Root_Key  public_key=<X509_SubjectPublicKeyInfo  |> validity=<X509_Validity  |> sign_alg_id=<X509_AlgorithmIdentifier  |> |> |> |>)[source]

Bases: ASN1_Packet

SAP PSEv2 Content definition

ASN1_codec = <ASN1Codec BER[1]>
ASN1_root = <ASN1F_SEQUENCE(<scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_GENERALIZED_TIME object>, <scapy.asn1fields.ASN1F_INTEGER object>, <ASN1F_SET_OF pse_obj>)>
aliastypes = [<class 'pysap.SAPPSE.SAPPSE_Cont'>, <class 'scapy.asn1packet.ASN1_Packet'>, <class 'scapy.packet.Packet'>]
fields_desc: List[AnyField] = [<scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_GENERALIZED_TIME object>, <scapy.asn1fields.ASN1F_INTEGER object>, <ASN1F_SET_OF pse_obj>]
class pysap.SAPPSE.SAPPSE_Obj(_pkt, /, *, object_name=<ASN1_PRINTABLE_STRING['PKRoot']>, created=1970-01-01 00:00:00 UTC <ASN1_GENERALIZED_TIME['19700101000000Z']>, object_type=<ASN1_OID['.1.3.36.2.5.1']>, object_value=<SAPPSE_Obj_PKRoot  ca=<X509_DirectoryName  directoryName=[<X509_RDN  rdn=[<X509_AttributeTypeAndValue  |>] |>, <X509_RDN  rdn=[<X509_AttributeTypeAndValue  type=<ASN1_OID['organizationName']> value=<ASN1_PRINTABLE_STRING['Scapy, Inc.']> |>] |>, <X509_RDN  rdn=[<X509_AttributeTypeAndValue  type=<ASN1_OID['commonName']> value=<ASN1_PRINTABLE_STRING['Scapy Default Name']> |>] |>] |> new_key=<SAPPSE_Root_Key  public_key=<X509_SubjectPublicKeyInfo  |> validity=<X509_Validity  |> sign_alg_id=<X509_AlgorithmIdentifier  |> |> old_key=<SAPPSE_Root_Key  public_key=<X509_SubjectPublicKeyInfo  |> validity=<X509_Validity  |> sign_alg_id=<X509_AlgorithmIdentifier  |> |> |>)[source]

Bases: ASN1_Packet

SAP PSEv2 Object definition

ASN1_codec = <ASN1Codec BER[1]>
ASN1_root = <ASN1F_SEQUENCE(<scapy.asn1fields.ASN1F_PRINTABLE_STRING object>, <scapy.asn1fields.ASN1F_GENERALIZED_TIME object>, <scapy.asn1fields.ASN1F_OID object>, <pysap.utils.fields.ASN1F_CHOICE_SAFE object>)>
aliastypes = [<class 'pysap.SAPPSE.SAPPSE_Obj'>, <class 'scapy.asn1packet.ASN1_Packet'>, <class 'scapy.packet.Packet'>]
fields_desc: List[AnyField] = [<scapy.asn1fields.ASN1F_PRINTABLE_STRING object>, <scapy.asn1fields.ASN1F_GENERALIZED_TIME object>, <scapy.asn1fields.ASN1F_OID object>, <pysap.utils.fields.ASN1F_CHOICE_SAFE object>]
class pysap.SAPPSE.SAPPSE_Obj_CertList(_pkt, /, *, certs=None)[source]

Bases: ASN1_Packet

SAP PSEv2 CertList, CSet, SignCSet, EncCSet Object definition

ASN1_codec = <ASN1Codec BER[1]>
ASN1_root = <ASN1F_SET_OF certs>
aliastypes = [<class 'pysap.SAPPSE.SAPPSE_Obj_CertList'>, <class 'scapy.asn1packet.ASN1_Packet'>, <class 'scapy.packet.Packet'>]
fields_desc: List[AnyField] = [<ASN1F_SET_OF certs>]
class pysap.SAPPSE.SAPPSE_Obj_PKList(_pkt, /, *, version=0x0 <ASN1_INTEGER[0]>, serial_number=0x0 <ASN1_INTEGER[0]>, signature=<X509_AlgorithmIdentifier  |>, issuer=<X509_DirectoryName  directoryName=[<X509_RDN  rdn=[<X509_AttributeTypeAndValue  |>] |>, <X509_RDN  rdn=[<X509_AttributeTypeAndValue  type=<ASN1_OID['organizationName']> value=<ASN1_PRINTABLE_STRING['Scapy, Inc.']> |>] |>, <X509_RDN  rdn=[<X509_AttributeTypeAndValue  type=<ASN1_OID['commonName']> value=<ASN1_PRINTABLE_STRING['Scapy Default Name']> |>] |>] |>, validity=<X509_Validity  |>, partner=<X509_DirectoryName  directoryName=[<X509_RDN  rdn=[<X509_AttributeTypeAndValue  |>] |>, <X509_RDN  rdn=[<X509_AttributeTypeAndValue  type=<ASN1_OID['organizationName']> value=<ASN1_PRINTABLE_STRING['Scapy, Inc.']> |>] |>, <X509_RDN  rdn=[<X509_AttributeTypeAndValue  type=<ASN1_OID['commonName']> value=<ASN1_PRINTABLE_STRING['Scapy Default Name']> |>] |>] |>, verification_key=<X509_SubjectPublicKeyInfo  |>)[source]

Bases: ASN1_Packet

SAP PSEv2 PKList, EKList, PCAList Object definition

ASN1_codec = <ASN1Codec BER[1]>
ASN1_root = <ASN1F_SEQUENCE(<scapy.asn1fields.ASN1F_enum_INTEGER object>, <scapy.asn1fields.ASN1F_INTEGER object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>)>
aliastypes = [<class 'pysap.SAPPSE.SAPPSE_Obj_PKList'>, <class 'scapy.asn1packet.ASN1_Packet'>, <class 'scapy.packet.Packet'>]
fields_desc: List[AnyField] = [<scapy.asn1fields.ASN1F_enum_INTEGER object>, <scapy.asn1fields.ASN1F_INTEGER object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>]
class pysap.SAPPSE.SAPPSE_Obj_PKRoot(_pkt, /, *, ca=<X509_DirectoryName  directoryName=[<X509_RDN  rdn=[<X509_AttributeTypeAndValue  |>] |>, <X509_RDN  rdn=[<X509_AttributeTypeAndValue  type=<ASN1_OID['organizationName']> value=<ASN1_PRINTABLE_STRING['Scapy, Inc.']> |>] |>, <X509_RDN  rdn=[<X509_AttributeTypeAndValue  type=<ASN1_OID['commonName']> value=<ASN1_PRINTABLE_STRING['Scapy Default Name']> |>] |>] |>, new_key=<SAPPSE_Root_Key  public_key=<X509_SubjectPublicKeyInfo  |> validity=<X509_Validity  |> sign_alg_id=<X509_AlgorithmIdentifier  |> |>, old_key=<SAPPSE_Root_Key  public_key=<X509_SubjectPublicKeyInfo  |> validity=<X509_Validity  |> sign_alg_id=<X509_AlgorithmIdentifier  |> |>)[source]

Bases: ASN1_Packet

SAP PSEv2 PKRoot Object definition

ASN1_codec = <ASN1Codec BER[1]>
ASN1_root = <ASN1F_SEQUENCE(<scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>)>
aliastypes = [<class 'pysap.SAPPSE.SAPPSE_Obj_PKRoot'>, <class 'scapy.asn1packet.ASN1_Packet'>, <class 'scapy.packet.Packet'>]
fields_desc: List[AnyField] = [<scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>]
class pysap.SAPPSE.SAPPSE_Root_Key(_pkt, /, *, version=0x0 <ASN1_INTEGER[0]>, serial_number=0x0 <ASN1_INTEGER[0]>, public_key=<X509_SubjectPublicKeyInfo  |>, validity=<X509_Validity  |>, sign_alg_id=<X509_AlgorithmIdentifier  |>, sign_bit_string=<ASN1_BIT_STRING[]=b'' (0 unused bit)>)[source]

Bases: ASN1_Packet

SAP PSEv2 Root Key definition

ASN1_codec = <ASN1Codec BER[1]>
ASN1_root = <ASN1F_SEQUENCE(<scapy.asn1fields.ASN1F_enum_INTEGER object>, <scapy.asn1fields.ASN1F_INTEGER object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_BIT_STRING object>)>
aliastypes = [<class 'pysap.SAPPSE.SAPPSE_Root_Key'>, <class 'scapy.asn1packet.ASN1_Packet'>, <class 'scapy.packet.Packet'>]
fields_desc: List[AnyField] = [<scapy.asn1fields.ASN1F_enum_INTEGER object>, <scapy.asn1fields.ASN1F_INTEGER object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_BIT_STRING object>]
class pysap.SAPPSE.SAPPSEv2_Enc_Cont(_pkt, /, *, encrypted_pin=<ASN1_STRING['']>, algorithm_identifier=<PKCS5_Algorithm_Identifier  parameters=<PKCS12_PBE1_Parameters  |> |>, cipher_text=<ASN1_STRING['']>)[source]

Bases: ASN1_Packet

SAP PSEv2 Encrypted content definition

ASN1_codec = <ASN1Codec BER[1]>
ASN1_root = <ASN1F_PSE_v2_ENC_CONT_SEQUENCE(<scapy.asn1fields.ASN1F_STRING object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_STRING object>)>
aliastypes = [<class 'pysap.SAPPSE.SAPPSEv2_Enc_Cont'>, <class 'scapy.asn1packet.ASN1_Packet'>, <class 'scapy.packet.Packet'>]
fields_desc: List[AnyField] = [<scapy.asn1fields.ASN1F_STRING object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_STRING object>]
class pysap.SAPPSE.SAPPSEv4_Enc_Cont(_pkt, /, *, unknown=0x1 <ASN1_INTEGER[1]>, algorithm_identifier=<PKCS5_Algorithm_Identifier  parameters=<PKCS12_PBE1_Parameters  |> |>, cipher_text=<ASN1_STRING['']>, encrypted_pin=<ASN1_STRING['']>)[source]

Bases: ASN1_Packet

SAP PSEv4 Encrypted content definition

ASN1_codec = <ASN1Codec BER[1]>
ASN1_root = <ASN1F_PSE_v4_ENC_CONT_SEQUENCE(<scapy.asn1fields.ASN1F_INTEGER object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_STRING object>, <scapy.asn1fields.ASN1F_STRING object>)>
aliastypes = [<class 'pysap.SAPPSE.SAPPSEv4_Enc_Cont'>, <class 'scapy.asn1packet.ASN1_Packet'>, <class 'scapy.packet.Packet'>]
fields_desc: List[AnyField] = [<scapy.asn1fields.ASN1F_INTEGER object>, <scapy.asn1fields.ASN1F_PACKET object>, <scapy.asn1fields.ASN1F_STRING object>, <scapy.asn1fields.ASN1F_STRING object>]