'Provided this service\'s introduction points. This provides a list of
IntroductionPoint instances, which have the following attributes...
* **identifier** (str): hash of this introduction point\'s identity key
* **address** (str): address of this introduction point
* **port** (int): port where this introduction point is listening
* **onion_key** (str): public key for communicating with this introduction point
* **service_key** (str): public key for communicating with this hidden service
* **intro_authentication** (list): tuples of the form (auth_type, auth_data)
for establishing a connection
:param str authentication_cookie: cookie to decrypt the introduction-points
if it\'s encrypted
:returns: **list** of IntroductionPoints instances
:raises:
* **ValueError** if the our introduction-points is malformed
* **DecryptionFailure** if unable to decrypt this field'

@lru_cache()
def introduction_points(self, authentication_cookie=None):

    content = self.introduction_points_content
    if (not content):
        return []
    elif authentication_cookie:
        if (not stem.prereq.is_crypto_available()):
            raise DecryptionFailure('Decrypting    introduction-points    requires    pycrypto')
        try:
            missing_padding = (len(authentication_cookie) % 4)
            authentication_cookie = base64.b64decode((stem.util.str_tools._to_bytes(authentication_cookie) + ('=' * missing_padding)))
        except TypeError as exc:
            raise DecryptionFailure(('authentication_cookie    must    be    a    base64    encoded    string    (%s)' % exc))
        authentication_type = int(binascii.hexlify(content[0:1]), 16)
        if (authentication_type == BASIC_AUTH):
            content = HiddenServiceDescriptor._decrypt_basic_auth(content, authentication_cookie)
        elif (authentication_type == STEALTH_AUTH):
            content = HiddenServiceDescriptor._decrypt_stealth_auth(content, authentication_cookie)
        else:
            raise DecryptionFailure(("Unrecognized    authentication    type    '%s',    currently    we    only    support    basic    auth    (%s)    and    stealth    auth    (%s)" % (authentication_type, BASIC_AUTH, STEALTH_AUTH)))
        if (not content.startswith('introduction-point    ')):
            raise DecryptionFailure('Unable    to    decrypt    the    introduction-points,    maybe    this    is    the    wrong    key?')
    elif (not content.startswith('introduction-point    ')):
        raise DecryptionFailure('introduction-points    content    is    encrypted,    you    need    to    provide    its    authentication_cookie')
    return HiddenServiceDescriptor._parse_introduction_points(content)
