docs: public String createChallenge(String request)
        throws IllegalArgumentException, ProtocolVersionException {
  
      String userName;
      userName = CrtAuthCodec.deserializeRequest(request);
  
      Fingerprint fingerprint;
      try {
        fingerprint = new Fingerprint(getKeyForUser(userName));
      } catch (KeyNotFoundException e) {
        log.info("No public key found for user {}, creating fake fingerprint", userName);
        fingerprint = createFakeFingerprint(userName);
      }
  
      byte[] uniqueData = new byte[Challenge.UNIQUE_DATA_LENGTH];
      UnsignedInteger timeNow = timeSupplier.getTime();
      random.nextBytes(uniqueData);
      Challenge challenge = Challenge.newBuilder()
          .setFingerprint(fingerprint)
          .setUniqueData(uniqueData)
          .setValidFromTimestamp(timeNow.minus(CLOCK_FUDGE))
          .setValidToTimestamp(timeNow.plus(RESPONSE_TIMEOUT))
          .setServerName(serverName)
          .setUserName(userName)
          .build();
  
      return encode(CrtAuthCodec.serialize(challenge, secret));
    }