# certbot.achallenges module

Client annotated ACME challenges.

Please use names such as `achall` to distinguish from variables “of type” `acme.challenges.Challenge` (denoted by `chall`) and `ChallengeBody` (denoted by `challb`):

    from acme import challenges
    from acme import messages
    from certbot import achallenges

    chall = challenges.DNS(token='foo')
    challb = messages.ChallengeBody(chall=chall)
    achall = achallenges.DNS(chall=challb, domain='example.com')

Note, that all annotated challenges act as a proxy objects:

    achall.token == challb.token

class certbot.achallenges.AnnotatedChallenge(**kwargs: Any)

  Bases: `ImmutableMap`

  Client annotated challenge.

  Wraps around server provided challenge and annotates with data useful for the client.

  Variables:

    ~.challb – Wrapped `ChallengeBody`.

  challb

class certbot.achallenges.KeyAuthorizationAnnotatedChallenge(**kwargs: Any)

  Bases: `AnnotatedChallenge`

  Client annotated `KeyAuthorizationChallenge` challenge.

  response_and_validation(*args: Any, **kwargs: Any) → tuple[KeyAuthorizationChallengeResponse, Any]

    Generate response and validation.

  challb
  domain
  account_key
  identifier

class certbot.achallenges.DNS(**kwargs: Any)

  Bases: `AnnotatedChallenge`

  Client annotated “dns” ACME challenge.

  acme_type

    alias of `DNS`

  challb
  domain
  identifier

class certbot.achallenges.Other(**kwargs: Any)

  Bases: `AnnotatedChallenge`

  Client annotated ACME challenge of an unknown type.

  acme_type

    alias of `Challenge`

  challb
  domain
  identifier