Esempio n. 1
0
def show_signature_verbose(signature):
    '''Print out signature as hex string to logger.verbose.

    Args:
        signature(bytes)
    '''
    sig_offset = 0
    while sig_offset < len(signature):
        if len(signature) - sig_offset > 16:
            bytes_to_read = 16
        else:
            bytes_to_read = len(signature) - sig_offset
        sig_bytes = struct.unpack_from(flo('!{bytes_to_read}s'), signature,
                                       sig_offset)[0]
        if sig_offset == 0:
            logger.verbose('Signature : %s' % to_hex(sig_bytes))
        else:
            logger.verbose('            %s' % to_hex(sig_bytes))
        sig_offset = sig_offset + bytes_to_read
Esempio n. 2
0
def show_verification(verification):
    '''
    Args:
        verification(ctutlz.sct.verification.SctVerificationResult)
    '''
    sct = verification.sct

    sct_log_id1, sct_log_id2 = [
        to_hex(val) for val in struct.unpack("!16s16s", sct.log_id.tdf)
    ]
    logger.info('```')
    logger.verbose('=' * 59)
    logger.verbose(flo('Version   : {sct.version_hex}'))
    logger.verbose(flo('LogID     : {sct_log_id1}'))
    logger.verbose(flo('            {sct_log_id2}'))
    logger.info(flo('LogID b64 : {sct.log_id_b64}'))
    logger.verbose(flo('Timestamp : {sct.timestamp} ({sct.timestamp_hex})'))
    logger.verbose(
        flo('Extensions: {sct.extensions_len} ({sct.extensions_len_hex})'))
    logger.verbose(
        flo('Algorithms: {sct.signature_alg_hash_hex}/'
            '{sct.signature_algorithm_signature} (hash/sign)'))

    show_signature_verbose(sct.signature)
    prefix = 'Sign. b64 : '
    logger.info(prefix + text_with_newlines(sct.signature_b64,
                                            line_length=16 * 3,
                                            newline='\n' + ' ' * len(prefix)))

    logger.verbose(
        '--')  # visual gap between sct infos and verification result

    log = verification.log
    if log is None:
        logger.info('Log not found\n')
    else:
        logger.info(flo('Log found : {log.description}'))
        logger.verbose('Operator  : %s' % log.operated_by['name'])
        logger.info('Chrome    : %s' % log.scts_accepted_by_chrome)

    if verification.verified:
        logger.info(flo('Result    : Verified OK'))
    else:
        logger.info(flo('Result    : Verification Failure'))

    logger.info('```\n')
Esempio n. 3
0
     # digitally-signed struct
     # https://tools.ietf.org/html/rfc5246#section-4.7
     'signature_algorithm_hash':
     lambda self: int(self._parse['signature_alg_hash']),
     'signature_algorithm_signature':
     lambda self: int(self._parse['signature_alg_sign']),
     'signature_len':
     lambda self: int(self._parse['signature_len']),
     'signature':
     lambda self: bytes(self._parse['signature']),
     'log_id':
     lambda self: self.id,
     'log_id_b64':
     lambda self: encode_to_b64(self.log_id.tdf),  # type: str
     'version_hex':
     lambda self: to_hex(self.version.tdf),
     'timestamp_hex':
     lambda self: to_hex(self.timestamp),
     'extensions_len':
     lambda self: self.extensions.len,
     'extensions_len_hex':
     lambda self: to_hex(self.extensions_len),
     'signature_alg_hash_hex':
     lambda self: to_hex(self.signature_algorithm_hash),
     'signature_alg_sign_hex':
     lambda self: to_hex(self.signature_algorithm_sign),
     'signature_b64':
     lambda self: encode_to_b64(self.signature),  # str
     'b64':
     lambda self: encode_to_b64(self.tdf)  # str
 })