public function compareWithSignature($fromSig) {
        $skip = property_exists($this, 'signatureSkipProperties') ? self::$signatureSkipProperties : array();

        foreach (get_object_vars($this) as $property => $value) {
            //
            // skip properties that start with an underscore to allow
            // storing information that isn't included in statement
            // structure etc. (see Attachment.content for example)
            //
            // also allow a class to specify a list of additional
            // properties that should not be included in verification
            //
            if (strpos($property, '_') === 0 || $property === 'objectType' || in_array($property, $skip)) {
                continue;
            }

            $result = self::doMatch($value, $fromSig->$property, $property);
            if (! $result['success']) {
                return $result;
            }
        }

        return array(
            'success' => true,
            'reason' => null
        );
    }