Beispiel #1
0
def challb_to_achall(challb, account_key, domain):
    """Converts a ChallengeBody object to an AnnotatedChallenge.

    :param .ChallengeBody challb: ChallengeBody
    :param .JWK account_key: Authorized Account Key
    :param str domain: Domain of the challb

    :returns: Appropriate AnnotatedChallenge
    :rtype: :class:`letsencrypt.achallenges.AnnotatedChallenge`

    """
    chall = challb.chall
    logger.info("%s challenge for %s", chall.typ, domain)

    if isinstance(chall, challenges.KeyAuthorizationChallenge):
        return achallenges.KeyAuthorizationAnnotatedChallenge(
            challb=challb, domain=domain, account_key=account_key)
    elif isinstance(chall, challenges.DNS):
        return achallenges.DNS(challb=challb, domain=domain)
    elif isinstance(chall, challenges.RecoveryContact):
        return achallenges.RecoveryContact(challb=challb, domain=domain)
    elif isinstance(chall, challenges.ProofOfPossession):
        return achallenges.ProofOfPossession(challb=challb, domain=domain)
    else:
        raise errors.Error("Received unsupported challenge of type: %s",
                           chall.typ)
    def setUp(self):
        self.installer = mock.MagicMock()
        certs = [CERT0_PATH, CERT1_PATH, CERT2_PATH, CERT3_PATH]
        keys = [None, None, CERT2_KEY_PATH, CERT3_KEY_PATH]
        self.installer.get_all_certs_keys.return_value = zip(
            certs, keys, 4 * [None])
        self.proof_of_pos = proof_of_possession.ProofOfPossession(
            self.installer)

        hints = challenges.ProofOfPossession.Hints(
            jwk=jose.JWKRSA(key=CERT3_KEY),
            cert_fingerprints=(),
            certs=(),
            serial_numbers=(),
            subject_key_identifiers=(),
            issuers=(),
            authorized_for=())
        chall = challenges.ProofOfPossession(alg=jose.RS256,
                                             nonce='zczv4HMLVe_0kimJ25Juig',
                                             hints=hints)
        challb = messages.ChallengeBody(chall=chall,
                                        uri="http://example",
                                        status=messages.STATUS_PENDING)
        self.achall = achallenges.ProofOfPossession(challb=challb,
                                                    domain="example.com")
def challb_to_achall(challb, key, domain):
    """Converts a ChallengeBody object to an AnnotatedChallenge.

    :param challb: ChallengeBody
    :type challb: :class:`acme.messages.ChallengeBody`

    :param key: Key
    :type key: :class:`letsencrypt.le_util.Key`

    :param str domain: Domain of the challb

    :returns: Appropriate AnnotatedChallenge
    :rtype: :class:`letsencrypt.achallenges.AnnotatedChallenge`

    """
    chall = challb.chall
    logger.info("%s challenge for %s", chall.typ, domain)

    if isinstance(chall, challenges.DVSNI):
        return achallenges.DVSNI(challb=challb, domain=domain, key=key)
    elif isinstance(chall, challenges.SimpleHTTP):
        return achallenges.SimpleHTTP(challb=challb, domain=domain, key=key)
    elif isinstance(chall, challenges.DNS):
        return achallenges.DNS(challb=challb, domain=domain)
    elif isinstance(chall, challenges.RecoveryToken):
        return achallenges.RecoveryToken(challb=challb, domain=domain)
    elif isinstance(chall, challenges.RecoveryContact):
        return achallenges.RecoveryContact(challb=challb, domain=domain)
    elif isinstance(chall, challenges.ProofOfPossession):
        return achallenges.ProofOfPossession(challb=challb, domain=domain)

    else:
        raise errors.Error("Received unsupported challenge of type: %s",
                           chall.typ)
    def test_pop(self):
        achalls = []
        for i in xrange(4):
            achalls.append(
                achallenges.ProofOfPossession(challb=None, domain=str(i)))
        responses = self.auth.perform(achalls)

        self.assertEqual(len(responses), 4)
        for i in xrange(4):
            self.assertEqual(responses[i], "ProofOfPossession%d" % i)
Beispiel #5
0
 def test_perform_bad_challenge(self):
     hints = challenges.ProofOfPossession.Hints(
         jwk=jose.jwk.JWKOct(key=CERT3_KEY), cert_fingerprints=(),
         certs=(), serial_numbers=(), subject_key_identifiers=(),
         issuers=(), authorized_for=())
     chall = challenges.ProofOfPossession(
         alg=jose.HS512, nonce='zczv4HMLVe_0kimJ25Juig', hints=hints)
     challb = messages2.ChallengeBody(
         chall=chall, uri="http://example", status=messages2.STATUS_PENDING)
     self.achall = achallenges.ProofOfPossession(
         challb=challb, domain="example.com")
     self.assertEqual(self.proof_of_pos.perform(self.achall), None)
    def test_pop_and_rec_token(self):
        achalls = []
        for i in xrange(4):
            if i % 2 == 0:
                achalls.append(achallenges.RecoveryToken(challb=None,
                                                         domain=str(i)))
            else:
                achalls.append(achallenges.ProofOfPossession(challb=None,
                                                             domain=str(i)))
        responses = self.auth.perform(achalls)

        self.assertEqual(len(responses), 4)
        for i in xrange(4):
            if i % 2 == 0:
                self.assertEqual(responses[i], "RecoveryToken%d" % i)
            else:
                self.assertEqual(responses[i], "ProofOfPossession%d" % i)