def get_DSA_pub_key_material(subjectPublicKeyAsn1, parametersAsn1): ''' Extracts DSA parameters p, q, g from ASN1 bitstring component subjectPublicKey and parametersAsn1 from 'parameters' field of AlgorithmIdentifier. ''' pubkey = subjectPublicKeyAsn1.toOctets() key = decode(pubkey, asn1Spec=DsaPubKey())[0] parameters = decode(str(parametersAsn1), asn1Spec=DssParams())[0] paramDict = {"pub": int(key)} for param in ['p', 'q', 'g']: paramDict[param] = parameters.getComponentByName(param)._value return paramDict
def get_RSA_pub_key_material(subjectPublicKeyAsn1): ''' Extracts modulus and public exponent from ASN1 bitstring component subjectPublicKey ''' # create template for decoder rsa_key = RsaPubKey() # convert ASN1 subjectPublicKey component from BITSTRING to octets pubkey = subjectPublicKeyAsn1.toOctets() key = decode(pubkey, asn1Spec=rsa_key)[0] mod = key.getComponentByName("modulus")._value exp = key.getComponentByName("exp")._value return {'mod': mod, 'exp': exp}