function read() { parent::read(); // All the fields from PublicKey $this->s2k_useage = ord($this->read_byte()); if ($this->s2k_useage == 255 || $this->s2k_useage == 254) { $this->symmetric_algorithm = ord($this->read_byte()); $this->s2k = OpenPGP_S2k::parse($this->input); } else { if ($this->s2k_useage > 0) { $this->symmetric_algorithm = $this->s2k_useage; } } if ($this->s2k_useage > 0) { $this->encrypted_data = $this->input; // Rest of input is MPIs and checksum (encrypted) } else { $this->key_from_input(); $this->private_hash = $this->read_bytes(2); // TODO: Validate checksum? } }
function read() { parent::read(); // All the fields from PublicKey $this->s2k_useage = ord($this->read_byte()); if ($this->s2k_useage == 255 || $this->s2k_useage == 254) { $this->symmetric_type = ord($this->read_byte()); $this->s2k_type = ord($this->read_byte()); $this->s2k_hash_algorithm = ord($this->read_byte()); if ($this->s2k_type == 1 || $this->s2k_type == 3) { $this->s2k_salt = $this->read_bytes(8); } if ($this->s2k_type == 3) { $c = ord($this->read_byte()); $this->s2k_count = (int) 16 + ($c & 15) << ($c >> 4) + 6; } } else { if ($this->s2k_useage > 0) { $this->symmetric_type = $this->s2k_useage; } } if ($this->s2k_useage > 0) { // TODO: IV of the same length as cipher's block size $this->encrypted_data = $this->input; // Rest of input is MPIs and checksum (encrypted) } else { $this->data = $this->input; // Rest of input is MPIs and checksum $this->key_from_data(); } }