@SuppressWarnings("unchecked")
  @Override
  public JSONObject getCreateBody() throws FxAccountClientException {
    final JSONObject body = new JSONObject();
    try {
      body.put("email", FxAccountUtils.bytes(email));
    } catch (UnsupportedEncodingException e) {
      throw new FxAccountClientException(e);
    }

    final JSONObject stretching = new JSONObject();
    stretching.put("type", "PBKDF2/scrypt/PBKDF2/v1");
    stretching.put("PBKDF2_rounds_1", 20000);
    stretching.put("scrypt_N", 65536);
    stretching.put("scrypt_r", 8);
    stretching.put("scrypt_p", 1);
    stretching.put("PBKDF2_rounds_2", 20000);
    stretching.put("salt", mainSalt);
    body.put("passwordStretching", stretching);

    final JSONObject srp = new JSONObject();
    srp.put("type", "SRP-6a/SHA256/2048/v1");
    srp.put("verifier", FxAccountUtils.hexModN(v, SRPConstants._2048.N));
    srp.put("salt", srpSalt);
    body.put("srp", srp);
    return body;
  }