code: def deserialize(self):
          
  
          if isinstance(self.x, (str, bytes)):
              _x = deser(self.x)
          else:
              raise ValueError('"x" MUST be a string')
  
          if isinstance(self.y, (str, bytes)):
              _y = deser(self.y)
          else:
              raise ValueError('"y" MUST be a string')
  
          if self.d:
              try:
                  if isinstance(self.d, (str, bytes)):
                      _d = deser(self.d)
                      self.priv_key = ec_construct_private(
                          {'x': _x, 'y': _y, 'crv': self.crv, 'd': _d})
                      self.pub_key = self.priv_key.public_key()
              except ValueError as err:
                  raise DeSerializationNotPossible(str(err))
          else:
              self.pub_key = ec_construct_public(
                  {'x': _x, 'y': _y, 'crv': self.crv})
docs: Starting with information gathered from the on-the-wire representation
          of an elliptic curve key (a JWK) initiate an
          cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey
          or EllipticCurvePrivateKey instance. So we have to get from having::
  
              {
                "kty":"EC",
                "crv":"P-256",
                "x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
                "y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
                "d":"870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE"
              }
  
          to having a key that can be used for signing/verifying and/or
          encrypting/decrypting.
          If 'd' has value then we're dealing with a private key otherwise
          a public key. 'x' and 'y' MUST have values.
          If self.pub_key or self.priv_key has a value beforehand this will
          be overwrite.
  
          x, y and d (if present) must be strings or bytes.