configArray = $configArray; $this->cryptoObject = $cryptoObject; } public function handle_ping( $message, $receipt ){ $message->get_signature_status(); $receipt->set( 'Verification-Result', $message->signatureStatusMessage ); foreach ( $message->data as $key => $value ){ if ( substr( $key, -1 ) == '~' ){ $key = substr( $key, 0, -1 ); $receipt->set( "Decrypt-{$key}", $message->get( $key ) ?? 'NOT DECRYPTABLE' ); } elseif ( substr( $key, 0, 8 ) == 'Encrypt-' ){ $receipt->set( substr( $key, 8 ), $value, TRUE ); } } $receipt->set_public_key(); return $receipt->dump_signed(); } public function handle_envelope( $message, $receipt ){ global $Config, $ServerData; if ( ! $content = $message->get('Content') ){ ptcp_error( '400 Bad Request', 'Incomplete message' ); } echo $message->is_encrypted('Content') ? "encyrypted\n" : "not encrypted\n"; foreach ( explode( "\n---\n", $content ) as $part ){ $innerMessage = new ParTCP_Incoming_Message( $part, $this->cryptoObject ); if ( ! $innerMessage->get('Message-Type') ){ $result[] = 'Invalid envelope content'; continue; } $innerReceipt = new ParTCP_Outgoing_Message( $this->cryptoObject, 'ptcp_get_pubkey' ); $innerReceipt->set( 'From', $ServerData['name'] ); $pubKey = NULL; if ( $id = $innerMessage->get('From') ){ $pubKey = ptcp_get_pubkey( $id, $innerMessage, TRUE ); $innerReceipt->set_recipient( $innerMessage->get('From'), $pubKey ); } if ( empty( $pubKey ) && ( $pubKey = $innerMessage->get('Public-Key') ) ){ $innerReceipt->recipientPubKey = base64_decode( $pubKey ); } $innerReceipt->set_date(); $innerReceipt->set( 'Message-Type', 'receipt' ); $innerReceipt->set( 'Original-Message', $part ); $result[] = ptcp_handle_message( $innerMessage, $innerReceipt ); } $receipt->set( 'Message-Type', 'envelope' ); $receipt->set( 'Original-Message', NULL ); $receipt->set( 'Content', implode( "\n---\n", $result ), $message->is_encrypted('Content') ); return $receipt->dump_signed(); } } // end of file core_messages.class.php