import base64
import hashlib
import hmac
from typing import Optional


def verify_line_signature(body: bytes, signature_header: Optional[str], channel_secret: str) -> bool:
    if not channel_secret or signature_header is None:
        return False
    digest = hmac.new(
        channel_secret.encode("utf-8"),
        body,
        hashlib.sha256,
    ).digest()
    expected = base64.b64encode(digest).decode("utf-8")
    return hmac.compare_digest(expected, signature_header)
