code: def ascii_unarmor(text):
          
          m = {'magic': None, 'headers': None, 'body': bytearray(), 'crc': None}
          if not Armorable.is_ascii(text):
              m['body'] = bytearray(text)
              return m
  
          if isinstance(text, (bytes, bytearray)):  # pragma: no cover
              text = text.decode('latin-1')
  
          m = Armorable.__armor_regex.search(text)
  
          if m is None:  # pragma: no cover
              raise ValueError("Expected: ASCII-armored PGP data")
  
          m = m.groupdict()
  
          if m['hashes'] is not None:
              m['hashes'] = m['hashes'].split(',')
  
          if m['headers'] is not None:
              m['headers'] = collections.OrderedDict(re.findall('^(?P<key>.+): (?P<value>.+)$\n?', m['headers'], flags=re.MULTILINE))
  
          if m['body'] is not None:
              try:
                  m['body'] = bytearray(base64.b64decode(m['body'].encode()))
  
              except (binascii.Error, TypeError) as ex:
                  six.raise_from(PGPError, ex)
                  six.raise_from(PGPError(str(ex)), ex)
  
          if m['crc'] is not None:
              m['crc'] = Header.bytes_to_int(base64.b64decode(m['crc'].encode()))
              if Armorable.crc24(m['body']) != m['crc']:
                  warnings.warn('Incorrect crc24', stacklevel=3)
  
          return m
docs: Takes an ASCII-armored PGP block and returns the decoded byte value.
  
          :param text: An ASCII-armored PGP block, to un-armor.
          :raises: :py:exc:`ValueError` if ``text`` did not contain an ASCII-armored PGP block.
          :raises: :py:exc:`TypeError` if ``text`` is not a ``str``, ``bytes``, or ``bytearray``
          :returns: A ``dict`` containing information from ``text``, including the de-armored data.
          It can contain the following keys: ``magic``, ``headers``, ``hashes``, ``cleartext``, ``body``, ``crc``.