code: def decrypt(self, passphrase, wif=False):
          
          passphrase = normalize('NFC', unicode(passphrase))
          if is_py2:
              passphrase = passphrase.encode('utf8')
  
          if self.ec_multiply:
              raise Exception("Not supported yet")
  
          key = scrypt.hash(passphrase, self.addresshash, 16384, 8, 8)
          derivedhalf1 = key[0:32]
          derivedhalf2 = key[32:64]
  
          aes = AES.new(derivedhalf2)
          decryptedhalf2 = aes.decrypt(self.encryptedhalf2)
          decryptedhalf1 = aes.decrypt(self.encryptedhalf1)
          priv = decryptedhalf1 + decryptedhalf2
          priv = unhexlify('%064x' % (long(hexlify(priv), 16) ^ long(hexlify(derivedhalf1), 16)))
          pub = privtopub(priv)
  
          if self.compressed:
              pub = encode_pubkey(pub, 'hex_compressed')
          addr = pubtoaddr(pub, self.pub_byte)
  
          if is_py2:
              ascii_key = addr
          else:
              ascii_key = bytes(addr,'ascii')
  
          if sha256(sha256(ascii_key).digest()).digest()[0:4] != self.addresshash:
              raise Exception('Bip38 password decrypt failed: Wrong password?')
          else:
              formatt = 'wif' if wif else 'hex'
              if self.compressed:
                  return encode_privkey(priv, formatt + '_compressed', self.priv_byte)
              else:
                  return encode_privkey(priv, formatt, self.priv_byte)
docs: BIP0038 non-ec-multiply decryption. Returns hex privkey.