code: private function readFilepass()
      {
          $length = self::getUInt2d($this->data, $this->pos + 2);
  
          if ($length != 54) {
              throw new Exception('Unexpected file pass record length');
          }
  
          $recordData = $this->readRecordData($this->data, $this->pos + 4, $length);
  
          // move stream pointer to next record
          $this->pos += 4 + $length;
  
          if (!$this->verifyPassword('VelvetSweatshop', substr($recordData, 6, 16), substr($recordData, 22, 16), substr($recordData, 38, 16), $this->md5Ctxt)) {
              throw new Exception('Decryption password incorrect');
          }
  
          $this->encryption = self::MS_BIFF_CRYPTO_RC4;
  
          // Decryption required from the record after next onwards
          $this->encryptionStartPos = $this->pos + self::getUInt2d($this->data, $this->pos + 2);
      }
docs: FILEPASS.
  
  This record is part of the File Protection Block. It
  contains information about the read/write password of the
  file. All record contents following this record will be
  encrypted.
  
  --    "OpenOffice.org's Documentation of the Microsoft
  Excel File Format"
  
  The decryption functions and objects used from here on in
  are based on the source of Spreadsheet-ParseExcel:
  http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel/