test_class.declarator: MERCHANT_PUBLIC_KEY_BASE64 =
        "BOdoXP+9Aq473SnGwg3JU1aiNpsd9vH2ognq4PtDtlLGa3Kj8TPf+jaQNPyDSkh3JUhiS0KyrrlWhAgNZKHYF2Y="
test_class.modifier: private static final
test_class.original_string: private static final String MERCHANT_PUBLIC_KEY_BASE64 =
        "BOdoXP+9Aq473SnGwg3JU1aiNpsd9vH2ognq4PtDtlLGa3Kj8TPf+jaQNPyDSkh3JUhiS0KyrrlWhAgNZKHYF2Y=";
test_class.type: String
test_class.var_name: MERCHANT_PUBLIC_KEY_BASE64
test_class.declarator: MERCHANT_PRIVATE_KEY_PKCS8_BASE64 =
        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgCPSuFr4iSIaQprjj"
            + "chHPyDu2NXFe0vDBoTpPkYaK9dehRANCAATnaFz/vQKuO90pxsINyVNWojabHfbx"
            + "9qIJ6uD7Q7ZSxmtyo/Ez3/o2kDT8g0pIdyVIYktCsq65VoQIDWSh2Bdm"
test_class.modifier: private static final
test_class.original_string: private static final String MERCHANT_PRIVATE_KEY_PKCS8_BASE64 =
        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgCPSuFr4iSIaQprjj"
            + "chHPyDu2NXFe0vDBoTpPkYaK9dehRANCAATnaFz/vQKuO90pxsINyVNWojabHfbx"
            + "9qIJ6uD7Q7ZSxmtyo/Ez3/o2kDT8g0pIdyVIYktCsq65VoQIDWSh2Bdm";
test_class.type: String
test_class.var_name: MERCHANT_PRIVATE_KEY_PKCS8_BASE64
test_class.declarator: ALTERNATE_MERCHANT_PRIVATE_KEY_PKCS8_BASE64 =
        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgOUIzccyJ3rTx6SVm"
            + "XrWdtwUP0NU26nvc8KIYw2GmYZKhRANCAAR5AjmTNAE93hQEQE+PryLlgr6Q7FXyN"
            + "XoZRk+1Fikhq61mFhQ9s14MOwGBxd5O6Jwn/sdUrWxkYk3idtNEN1Rz"
test_class.modifier: private static final
test_class.original_string: private static final String ALTERNATE_MERCHANT_PRIVATE_KEY_PKCS8_BASE64 =
        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgOUIzccyJ3rTx6SVm"
            + "XrWdtwUP0NU26nvc8KIYw2GmYZKhRANCAAR5AjmTNAE93hQEQE+PryLlgr6Q7FXyN"
            + "XoZRk+1Fikhq61mFhQ9s14MOwGBxd5O6Jwn/sdUrWxkYk3idtNEN1Rz";
test_class.type: String
test_class.var_name: ALTERNATE_MERCHANT_PRIVATE_KEY_PKCS8_BASE64
test_class.declarator: GOOGLE_VERIFYING_PUBLIC_KEYS_JSON =
        "{\n"
            + "  \"keys\": [\n"
            + "    {\n"
            + "      \"keyValue\": \"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPYnHwS8uegWAewQtlxizmLFynw"
            + "HcxRT1PK07cDA6/C4sXrVI1SzZCUx8U8S0LjMrT6ird/VW7be3Mz6t/srtRQ==\",\n"
            + "      \"protocolVersion\": \"ECv1\"\n"
            + "    },\n"
            + "    {\n"
            + "      \"keyValue\": \"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM"
            + "43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw==\",\n"
            + "      \"keyExpiration\": \""
            + Instant.now().plus(Duration.standardDays(1)).getMillis()
            + "\",\n"
            + "      \"protocolVersion\": \"ECv2\"\n"
            + "    },\n"
            + "    {\n"
            + "      \"keyValue\": \"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENXvYqxD5WayKYhuXQevdGdLA8i"
            + "fV4LsRS2uKvFo8wwyiwgQHB9DiKzG6T/P1Fu9Bl7zWy/se5Dy4wk1mJoPuxg==\",\n"
            + "      \"keyExpiration\": \""
            + Instant.now().plus(Duration.standardDays(1)).getMillis()
            + "\",\n"
            + "      \"protocolVersion\": \"ECv2SigningOnly\"\n"
            + "    },\n"
            + "  ],\n"
            + "}"
test_class.modifier: private static final
test_class.original_string: private static final String GOOGLE_VERIFYING_PUBLIC_KEYS_JSON =
        "{\n"
            + "  \"keys\": [\n"
            + "    {\n"
            + "      \"keyValue\": \"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPYnHwS8uegWAewQtlxizmLFynw"
            + "HcxRT1PK07cDA6/C4sXrVI1SzZCUx8U8S0LjMrT6ird/VW7be3Mz6t/srtRQ==\",\n"
            + "      \"protocolVersion\": \"ECv1\"\n"
            + "    },\n"
            + "    {\n"
            + "      \"keyValue\": \"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM"
            + "43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw==\",\n"
            + "      \"keyExpiration\": \""
            + Instant.now().plus(Duration.standardDays(1)).getMillis()
            + "\",\n"
            + "      \"protocolVersion\": \"ECv2\"\n"
            + "    },\n"
            + "    {\n"
            + "      \"keyValue\": \"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENXvYqxD5WayKYhuXQevdGdLA8i"
            + "fV4LsRS2uKvFo8wwyiwgQHB9DiKzG6T/P1Fu9Bl7zWy/se5Dy4wk1mJoPuxg==\",\n"
            + "      \"keyExpiration\": \""
            + Instant.now().plus(Duration.standardDays(1)).getMillis()
            + "\",\n"
            + "      \"protocolVersion\": \"ECv2SigningOnly\"\n"
            + "    },\n"
            + "  ],\n"
            + "}";
test_class.type: String
test_class.var_name: GOOGLE_VERIFYING_PUBLIC_KEYS_JSON
test_class.declarator: INDEX_OF_GOOGLE_SIGNING_EC_V1 = 0
test_class.modifier: private static final
test_class.original_string: private static final int INDEX_OF_GOOGLE_SIGNING_EC_V1 = 0;
test_class.type: int
test_class.var_name: INDEX_OF_GOOGLE_SIGNING_EC_V1
test_class.declarator: INDEX_OF_GOOGLE_SIGNING_EC_V2 = 1
test_class.modifier: private static final
test_class.original_string: private static final int INDEX_OF_GOOGLE_SIGNING_EC_V2 = 1;
test_class.type: int
test_class.var_name: INDEX_OF_GOOGLE_SIGNING_EC_V2
test_class.declarator: INDEX_OF_GOOGLE_SIGNING_EC_V2_SIGNING_ONLY = 2
test_class.modifier: private static final
test_class.original_string: private static final int INDEX_OF_GOOGLE_SIGNING_EC_V2_SIGNING_ONLY = 2;
test_class.type: int
test_class.var_name: INDEX_OF_GOOGLE_SIGNING_EC_V2_SIGNING_ONLY
test_class.declarator: GOOGLE_SIGNING_EC_V1_PRIVATE_KEY_PKCS8_BASE64 =
        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgZj/Dldxz8fvKVF5O"
            + "TeAtK6tY3G1McmvhMppe6ayW6GahRANCAAQ9icfBLy56BYB7BC2XGLOYsXKfAdzF"
            + "FPU8rTtwMDr8LixetUjVLNkJTHxTxLQuMytPqKt39Vbtt7czPq3+yu1F"
test_class.modifier: private static final
test_class.original_string: private static final String GOOGLE_SIGNING_EC_V1_PRIVATE_KEY_PKCS8_BASE64 =
        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgZj/Dldxz8fvKVF5O"
            + "TeAtK6tY3G1McmvhMppe6ayW6GahRANCAAQ9icfBLy56BYB7BC2XGLOYsXKfAdzF"
            + "FPU8rTtwMDr8LixetUjVLNkJTHxTxLQuMytPqKt39Vbtt7czPq3+yu1F";
test_class.type: String
test_class.var_name: GOOGLE_SIGNING_EC_V1_PRIVATE_KEY_PKCS8_BASE64
test_class.declarator: GOOGLE_SIGNING_EC_V2_PRIVATE_KEY_PKCS8_BASE64 =
        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgKvEdSS8f0mjTCNKev"
            + "aKXIzfNC5b4A104gJWI9TsLIMqhRANCAAT/X7ccFVJt2/6Ps1oCt2AzKhIAz"
            + "jfJHJ3Op2DVPGh1LMD3oOPgxzUSIqujHG6dq9Ui93Eacl4VWJPMW/MVHHIL"
test_class.modifier: private static final
test_class.original_string: private static final String GOOGLE_SIGNING_EC_V2_PRIVATE_KEY_PKCS8_BASE64 =
        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgKvEdSS8f0mjTCNKev"
            + "aKXIzfNC5b4A104gJWI9TsLIMqhRANCAAT/X7ccFVJt2/6Ps1oCt2AzKhIAz"
            + "jfJHJ3Op2DVPGh1LMD3oOPgxzUSIqujHG6dq9Ui93Eacl4VWJPMW/MVHHIL";
test_class.type: String
test_class.var_name: GOOGLE_SIGNING_EC_V2_PRIVATE_KEY_PKCS8_BASE64
test_class.declarator: GOOGLE_SIGNING_EC_V2_INTERMEDIATE_PUBLIC_KEY_X509_BASE64 =
        "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yR"
            + "ydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw=="
test_class.modifier: private static final
test_class.original_string: private static final String GOOGLE_SIGNING_EC_V2_INTERMEDIATE_PUBLIC_KEY_X509_BASE64 =
        "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yR"
            + "ydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw==";
test_class.type: String
test_class.var_name: GOOGLE_SIGNING_EC_V2_INTERMEDIATE_PUBLIC_KEY_X509_BASE64
test_class.declarator: GOOGLE_SIGNING_EC_V2_INTERMEDIATE_PRIVATE_KEY_PKCS8_BASE64 =
        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgKvEdSS8f0mjTCNKev"
            + "aKXIzfNC5b4A104gJWI9TsLIMqhRANCAAT/X7ccFVJt2/6Ps1oCt2AzKhIAz"
            + "jfJHJ3Op2DVPGh1LMD3oOPgxzUSIqujHG6dq9Ui93Eacl4VWJPMW/MVHHIL"
test_class.modifier: private static final
test_class.original_string: private static final String GOOGLE_SIGNING_EC_V2_INTERMEDIATE_PRIVATE_KEY_PKCS8_BASE64 =
        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgKvEdSS8f0mjTCNKev"
            + "aKXIzfNC5b4A104gJWI9TsLIMqhRANCAAT/X7ccFVJt2/6Ps1oCt2AzKhIAz"
            + "jfJHJ3Op2DVPGh1LMD3oOPgxzUSIqujHG6dq9Ui93Eacl4VWJPMW/MVHHIL";
test_class.type: String
test_class.var_name: GOOGLE_SIGNING_EC_V2_INTERMEDIATE_PRIVATE_KEY_PKCS8_BASE64
test_class.declarator: GOOGLE_SIGNING_EC_V2_SIGNING_ONLY_PRIVATE_KEY_PKCS8_BASE64 =
        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgRi9hSdY+knJ08odnY"
            + "tZFMRi7ZYeMoasAijLhD4GiQ1yhRANCAAQ1e9irEPlZrIpiG5dB690Z0sDy"
            + "J9XguxFLa4q8WjzDDKLCBAcH0OIrMbpP8/UW70GXvNbL+x7kPLjCTWYmg+7G"
test_class.modifier: private static final
test_class.original_string: private static final String GOOGLE_SIGNING_EC_V2_SIGNING_ONLY_PRIVATE_KEY_PKCS8_BASE64 =
        "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgRi9hSdY+knJ08odnY"
            + "tZFMRi7ZYeMoasAijLhD4GiQ1yhRANCAAQ1e9irEPlZrIpiG5dB690Z0sDy"
            + "J9XguxFLa4q8WjzDDKLCBAcH0OIrMbpP8/UW70GXvNbL+x7kPLjCTWYmg+7G";
test_class.type: String
test_class.var_name: GOOGLE_SIGNING_EC_V2_SIGNING_ONLY_PRIVATE_KEY_PKCS8_BASE64
test_class.declarator: GOOGLE_SIGNING_EC_V2_SIGNING_ONLY_INTERMEDIATE_PUBLIC_KEY_X509_BASE64 =
            "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8OaurwvbyYm8JWDgFPRTIDg0/"
                + "kcQTFAQ4txi5IP0AyM1QiagwRhDUfjpqZkpw8xt/DXwyWYM0DdHqoeV"
                + "TKqmYQ=="
test_class.modifier: private static final
test_class.original_string: private static final String
        GOOGLE_SIGNING_EC_V2_SIGNING_ONLY_INTERMEDIATE_PUBLIC_KEY_X509_BASE64 =
            "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8OaurwvbyYm8JWDgFPRTIDg0/"
                + "kcQTFAQ4txi5IP0AyM1QiagwRhDUfjpqZkpw8xt/DXwyWYM0DdHqoeV"
                + "TKqmYQ==";
test_class.type: String
test_class.var_name: GOOGLE_SIGNING_EC_V2_SIGNING_ONLY_INTERMEDIATE_PUBLIC_KEY_X509_BASE64
test_class.declarator: GOOGLE_SIGNING_EC_V2_SIGNING_ONLY_INTERMEDIATE_PRIVATE_KEY_PKCS8_BASE64 =
            "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg+Jvpkq26tpZ0s"
                + "TTZVh4teEI41SnJdmkBzM8VZ5ZirE2hRANCAATw5q6vC9vJibwlYOAU"
                + "9FMgODT+RxBMUBDi3GLkg/QDIzVCJqDBGENR+OmpmSnDzG38NfDJZgz"
                + "QN0eqh5VMqqZh"
test_class.modifier: private static final
test_class.original_string: private static final String
        GOOGLE_SIGNING_EC_V2_SIGNING_ONLY_INTERMEDIATE_PRIVATE_KEY_PKCS8_BASE64 =
            "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg+Jvpkq26tpZ0s"
                + "TTZVh4teEI41SnJdmkBzM8VZ5ZirE2hRANCAATw5q6vC9vJibwlYOAU"
                + "9FMgODT+RxBMUBDi3GLkg/QDIzVCJqDBGENR+OmpmSnDzG38NfDJZgz"
                + "QN0eqh5VMqqZh";
test_class.type: String
test_class.var_name: GOOGLE_SIGNING_EC_V2_SIGNING_ONLY_INTERMEDIATE_PRIVATE_KEY_PKCS8_BASE64
test_class.declarator: RECIPIENT_ID = "someRecipient"
test_class.modifier: private static final
test_class.original_string: private static final String RECIPIENT_ID = "someRecipient";
test_class.type: String
test_class.var_name: RECIPIENT_ID
test_class.declarator: PLAINTEXT = "plaintext"
test_class.modifier: private static final
test_class.original_string: private static final String PLAINTEXT = "plaintext";
test_class.type: String
test_class.var_name: PLAINTEXT
test_class.declarator: CIPHERTEXT_EC_V1 =
        "{"
            + "\"protocolVersion\":\"ECv1\","
            + "\"signedMessage\":"
            + ("\"{"
                + "\\\"tag\\\":\\\"ZVwlJt7dU8Plk0+r8rPF8DmPTvDiOA1UAoNjDV+SqDE\\\\u003d\\\","
                + "\\\"ephemeralPublicKey\\\":\\\"BPhVspn70Zj2Kkgu9t8+ApEuUWsI/zos5whGCQBlgOkuYagOis7"
                + "qsrcbQrcprjvTZO3XOU+Qbcc28FSgsRtcgQE\\\\u003d\\\","
                + "\\\"encryptedMessage\\\":\\\"12jUObueVTdy\\\"}\",")
            + "\"signature\":\"MEQCIDxBoUCoFRGReLdZ/cABlSSRIKoOEFoU3e27c14vMZtfAiBtX3pGMEpnw6mSAbnagC"
            + "CgHlCk3NcFwWYEyxIE6KGZVA\\u003d\\u003d\"}"
test_class.modifier: private static final
test_class.original_string: private static final String CIPHERTEXT_EC_V1 =
        "{"
            + "\"protocolVersion\":\"ECv1\","
            + "\"signedMessage\":"
            + ("\"{"
                + "\\\"tag\\\":\\\"ZVwlJt7dU8Plk0+r8rPF8DmPTvDiOA1UAoNjDV+SqDE\\\\u003d\\\","
                + "\\\"ephemeralPublicKey\\\":\\\"BPhVspn70Zj2Kkgu9t8+ApEuUWsI/zos5whGCQBlgOkuYagOis7"
                + "qsrcbQrcprjvTZO3XOU+Qbcc28FSgsRtcgQE\\\\u003d\\\","
                + "\\\"encryptedMessage\\\":\\\"12jUObueVTdy\\\"}\",")
            + "\"signature\":\"MEQCIDxBoUCoFRGReLdZ/cABlSSRIKoOEFoU3e27c14vMZtfAiBtX3pGMEpnw6mSAbnagC"
            + "CgHlCk3NcFwWYEyxIE6KGZVA\\u003d\\u003d\"}";
test_class.type: String
test_class.var_name: CIPHERTEXT_EC_V1
test_class.declarator: ALTERNATE_PUBLIC_SIGNING_KEY =
        "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEU8E6JppGKFG40r5dDU1idHRN52NuwsemFzXZh1oUqh3bGUPgPioH+RoW"
            + "nmVSUQz1WfM2426w9f0GADuXzpUkcw=="
test_class.modifier: private static final
test_class.original_string: private static final String ALTERNATE_PUBLIC_SIGNING_KEY =
        "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEU8E6JppGKFG40r5dDU1idHRN52NuwsemFzXZh1oUqh3bGUPgPioH+RoW"
            + "nmVSUQz1WfM2426w9f0GADuXzpUkcw==";
test_class.type: String
test_class.var_name: ALTERNATE_PUBLIC_SIGNING_KEY
test_class.file: apps/paymentmethodtoken/src/test/java/com/google/crypto/tink/apps/paymentmethodtoken/PaymentMethodTokenRecipientTest.java
test_class.identifier: PaymentMethodTokenRecipientTest
test_case.body: @Test
    public void testShouldTryAllKeysToVerifySignatureECV2() throws Exception {
      JSONObject trustedKeysJson = new JSONObject(GOOGLE_VERIFYING_PUBLIC_KEYS_JSON);
      JSONArray keys = trustedKeysJson.getJSONArray("keys");
      JSONObject correctKey =
          new JSONObject(keys.getJSONObject(INDEX_OF_GOOGLE_SIGNING_EC_V2).toString());
      JSONObject wrongKey =
          new JSONObject(keys.getJSONObject(INDEX_OF_GOOGLE_SIGNING_EC_V2).toString())
              .put("keyValue", ALTERNATE_PUBLIC_SIGNING_KEY);
      trustedKeysJson.put("keys", new JSONArray().put(wrongKey).put(correctKey));
  
      PaymentMethodTokenRecipient recipient =
          new PaymentMethodTokenRecipient.Builder()
              .protocolVersion(PaymentMethodTokenConstants.PROTOCOL_VERSION_EC_V2)
              .senderVerifyingKeys(trustedKeysJson.toString())
              .recipientId(RECIPIENT_ID)
              .addRecipientPrivateKey(MERCHANT_PRIVATE_KEY_PKCS8_BASE64)
              .build();
  
      assertEquals(PLAINTEXT, recipient.unseal(sealECV2(PLAINTEXT)));
    }
test_case.class_method_signature: PaymentMethodTokenRecipientTest.testShouldTryAllKeysToVerifySignatureECV2()
test_case.full_signature: @Test public void testShouldTryAllKeysToVerifySignatureECV2()
test_case.identifier: testShouldTryAllKeysToVerifySignatureECV2
test_case.invocations: getJSONArray toString getJSONObject put toString getJSONObject put put put build addRecipientPrivateKey recipientId senderVerifyingKeys protocolVersion toString assertEquals unseal sealECV2
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testShouldTryAllKeysToVerifySignatureECV2()
focal_class.declarator: protocolVersion
focal_class.modifier: private final
focal_class.original_string: private final String protocolVersion;
focal_class.type: String
focal_class.var_name: protocolVersion
focal_class.declarator: senderVerifyingKeysProviders
focal_class.modifier: private final
focal_class.original_string: private final List<SenderVerifyingKeysProvider> senderVerifyingKeysProviders;
focal_class.type: List<SenderVerifyingKeysProvider>
focal_class.var_name: senderVerifyingKeysProviders
focal_class.declarator: hybridDecrypters = new ArrayList<HybridDecrypt>()
focal_class.modifier: private final
focal_class.original_string: private final List<HybridDecrypt> hybridDecrypters = new ArrayList<HybridDecrypt>();
focal_class.type: List<HybridDecrypt>
focal_class.var_name: hybridDecrypters
focal_class.declarator: senderId
focal_class.modifier: private final
focal_class.original_string: private final String senderId;
focal_class.type: String
focal_class.var_name: senderId
focal_class.declarator: recipientId
focal_class.modifier: private final
focal_class.original_string: private final String recipientId;
focal_class.type: String
focal_class.var_name: recipientId
focal_class.file: apps/paymentmethodtoken/src/main/java/com/google/crypto/tink/apps/paymentmethodtoken/PaymentMethodTokenRecipient.java
focal_class.identifier: PaymentMethodTokenRecipient
focal_class.class_method_signature: PaymentMethodTokenRecipient.PaymentMethodTokenRecipient(
        String protocolVersion,
        List<SenderVerifyingKeysProvider> senderVerifyingKeysProviders,
        String senderId,
        List<ECPrivateKey> recipientPrivateKeys,
        List<PaymentMethodTokenRecipientKem> recipientKems,
        String recipientId)
focal_class.full_signature:   PaymentMethodTokenRecipient(
        String protocolVersion,
        List<SenderVerifyingKeysProvider> senderVerifyingKeysProviders,
        String senderId,
        List<ECPrivateKey> recipientPrivateKeys,
        List<PaymentMethodTokenRecipientKem> recipientKems,
        String recipientId)
focal_class.identifier: PaymentMethodTokenRecipient
focal_class.parameters: (
        String protocolVersion,
        List<SenderVerifyingKeysProvider> senderVerifyingKeysProviders,
        String senderId,
        List<ECPrivateKey> recipientPrivateKeys,
        List<PaymentMethodTokenRecipientKem> recipientKems,
        String recipientId)
focal_class.signature:  PaymentMethodTokenRecipient(
        String protocolVersion,
        List<SenderVerifyingKeysProvider> senderVerifyingKeysProviders,
        String senderId,
        List<ECPrivateKey> recipientPrivateKeys,
        List<PaymentMethodTokenRecipientKem> recipientKems,
        String recipientId)
focal_class.class_method_signature: PaymentMethodTokenRecipient.PaymentMethodTokenRecipient(Builder builder)
focal_class.full_signature: private  PaymentMethodTokenRecipient(Builder builder)
focal_class.identifier: PaymentMethodTokenRecipient
focal_class.modifiers: private
focal_class.parameters: (Builder builder)
focal_class.signature:  PaymentMethodTokenRecipient(Builder builder)
focal_class.class_method_signature: PaymentMethodTokenRecipient.unseal(final String sealedMessage)
focal_class.full_signature: public String unseal(final String sealedMessage)
focal_class.identifier: unseal
focal_class.modifiers: public
focal_class.parameters: (final String sealedMessage)
focal_class.return: String
focal_class.signature: String unseal(final String sealedMessage)
focal_class.class_method_signature: PaymentMethodTokenRecipient.unsealECV1(String sealedMessage)
focal_class.full_signature: private String unsealECV1(String sealedMessage)
focal_class.identifier: unsealECV1
focal_class.modifiers: private
focal_class.parameters: (String sealedMessage)
focal_class.return: String
focal_class.signature: String unsealECV1(String sealedMessage)
focal_class.class_method_signature: PaymentMethodTokenRecipient.unsealECV2(String sealedMessage)
focal_class.full_signature: private String unsealECV2(String sealedMessage)
focal_class.identifier: unsealECV2
focal_class.modifiers: private
focal_class.parameters: (String sealedMessage)
focal_class.return: String
focal_class.signature: String unsealECV2(String sealedMessage)
focal_class.class_method_signature: PaymentMethodTokenRecipient.unsealECV2SigningOnly(String sealedMessage)
focal_class.full_signature: private String unsealECV2SigningOnly(String sealedMessage)
focal_class.identifier: unsealECV2SigningOnly
focal_class.modifiers: private
focal_class.parameters: (String sealedMessage)
focal_class.return: String
focal_class.signature: String unsealECV2SigningOnly(String sealedMessage)
focal_class.class_method_signature: PaymentMethodTokenRecipient.verifyECV1(final JSONObject jsonMsg)
focal_class.full_signature: private String verifyECV1(final JSONObject jsonMsg)
focal_class.identifier: verifyECV1
focal_class.modifiers: private
focal_class.parameters: (final JSONObject jsonMsg)
focal_class.return: String
focal_class.signature: String verifyECV1(final JSONObject jsonMsg)
focal_class.class_method_signature: PaymentMethodTokenRecipient.verifyECV2(final JSONObject jsonMsg)
focal_class.full_signature: private String verifyECV2(final JSONObject jsonMsg)
focal_class.identifier: verifyECV2
focal_class.modifiers: private
focal_class.parameters: (final JSONObject jsonMsg)
focal_class.return: String
focal_class.signature: String verifyECV2(final JSONObject jsonMsg)
focal_class.class_method_signature: PaymentMethodTokenRecipient.getSignedBytes(String protocolVersion, String signedMessage)
focal_class.full_signature: private byte[] getSignedBytes(String protocolVersion, String signedMessage)
focal_class.identifier: getSignedBytes
focal_class.modifiers: private
focal_class.parameters: (String protocolVersion, String signedMessage)
focal_class.return: byte[]
focal_class.signature: byte[] getSignedBytes(String protocolVersion, String signedMessage)
focal_class.class_method_signature: PaymentMethodTokenRecipient.validateMessage(String decryptedMessage)
focal_class.full_signature: private void validateMessage(String decryptedMessage)
focal_class.identifier: validateMessage
focal_class.modifiers: private
focal_class.parameters: (String decryptedMessage)
focal_class.return: void
focal_class.signature: void validateMessage(String decryptedMessage)
focal_class.class_method_signature: PaymentMethodTokenRecipient.verify(
        final String protocolVersion,
        final List<SenderVerifyingKeysProvider> senderVerifyingKeysProviders,
        final List<byte[]> signatures,
        final byte[] signedBytes)
focal_class.full_signature: private static void verify(
        final String protocolVersion,
        final List<SenderVerifyingKeysProvider> senderVerifyingKeysProviders,
        final List<byte[]> signatures,
        final byte[] signedBytes)
focal_class.identifier: verify
focal_class.modifiers: private static
focal_class.parameters: (
        final String protocolVersion,
        final List<SenderVerifyingKeysProvider> senderVerifyingKeysProviders,
        final List<byte[]> signatures,
        final byte[] signedBytes)
focal_class.return: void
focal_class.signature: void verify(
        final String protocolVersion,
        final List<SenderVerifyingKeysProvider> senderVerifyingKeysProviders,
        final List<byte[]> signatures,
        final byte[] signedBytes)
focal_class.class_method_signature: PaymentMethodTokenRecipient.decrypt(String ciphertext)
focal_class.full_signature: private String decrypt(String ciphertext)
focal_class.identifier: decrypt
focal_class.modifiers: private
focal_class.parameters: (String ciphertext)
focal_class.return: String
focal_class.signature: String decrypt(String ciphertext)
focal_class.class_method_signature: PaymentMethodTokenRecipient.validateECV1(final JSONObject jsonMsg)
focal_class.full_signature: private void validateECV1(final JSONObject jsonMsg)
focal_class.identifier: validateECV1
focal_class.modifiers: private
focal_class.parameters: (final JSONObject jsonMsg)
focal_class.return: void
focal_class.signature: void validateECV1(final JSONObject jsonMsg)
focal_class.class_method_signature: PaymentMethodTokenRecipient.validateECV2(final JSONObject jsonMsg)
focal_class.full_signature: private void validateECV2(final JSONObject jsonMsg)
focal_class.identifier: validateECV2
focal_class.modifiers: private
focal_class.parameters: (final JSONObject jsonMsg)
focal_class.return: void
focal_class.signature: void validateECV2(final JSONObject jsonMsg)
focal_class.class_method_signature: PaymentMethodTokenRecipient.verifyIntermediateSigningKey(JSONObject jsonMsg)
focal_class.full_signature: private List<SenderVerifyingKeysProvider> verifyIntermediateSigningKey(JSONObject jsonMsg)
focal_class.identifier: verifyIntermediateSigningKey
focal_class.modifiers: private
focal_class.parameters: (JSONObject jsonMsg)
focal_class.return: List<SenderVerifyingKeysProvider>
focal_class.signature: List<SenderVerifyingKeysProvider> verifyIntermediateSigningKey(JSONObject jsonMsg)
focal_class.class_method_signature: PaymentMethodTokenRecipient.validateIntermediateSigningKey(final JSONObject intermediateSigningKey)
focal_class.full_signature: private JSONObject validateIntermediateSigningKey(final JSONObject intermediateSigningKey)
focal_class.identifier: validateIntermediateSigningKey
focal_class.modifiers: private
focal_class.parameters: (final JSONObject intermediateSigningKey)
focal_class.return: JSONObject
focal_class.signature: JSONObject validateIntermediateSigningKey(final JSONObject intermediateSigningKey)
focal_class.class_method_signature: PaymentMethodTokenRecipient.validateSignedKey(final JSONObject signedKey)
focal_class.full_signature: private void validateSignedKey(final JSONObject signedKey)
focal_class.identifier: validateSignedKey
focal_class.modifiers: private
focal_class.parameters: (final JSONObject signedKey)
focal_class.return: void
focal_class.signature: void validateSignedKey(final JSONObject signedKey)
focal_class.class_method_signature: PaymentMethodTokenRecipient.parseTrustedSigningKeysJson(
        String protocolVersion, String trustedSigningKeysJson)
focal_class.full_signature: private static List<ECPublicKey> parseTrustedSigningKeysJson(
        String protocolVersion, String trustedSigningKeysJson)
focal_class.identifier: parseTrustedSigningKeysJson
focal_class.modifiers: private static
focal_class.parameters: (
        String protocolVersion, String trustedSigningKeysJson)
focal_class.return: List<ECPublicKey>
focal_class.signature: List<ECPublicKey> parseTrustedSigningKeysJson(
        String protocolVersion, String trustedSigningKeysJson)
focal_method.body: public String unseal(final String sealedMessage) throws GeneralSecurityException {
      try {
        if (protocolVersion.equals(PaymentMethodTokenConstants.PROTOCOL_VERSION_EC_V1)) {
          return unsealECV1(sealedMessage);
        } else if (protocolVersion.equals(PaymentMethodTokenConstants.PROTOCOL_VERSION_EC_V2)) {
          return unsealECV2(sealedMessage);
        } else if (protocolVersion.equals(
            PaymentMethodTokenConstants.PROTOCOL_VERSION_EC_V2_SIGNING_ONLY)) {
          return unsealECV2SigningOnly(sealedMessage);
        }
        throw new IllegalArgumentException("unsupported version: " + protocolVersion);
      } catch (JSONException e) {
        throw new GeneralSecurityException("cannot unseal; invalid JSON message");
      }
    }
focal_method.class_method_signature: PaymentMethodTokenRecipient.unseal(final String sealedMessage)
focal_method.full_signature: public String unseal(final String sealedMessage)
focal_method.identifier: unseal
focal_method.invocations: equals unsealECV1 equals unsealECV2 equals unsealECV2SigningOnly
focal_method.modifiers: public
focal_method.parameters: (final String sealedMessage)
focal_method.return: String
focal_method.signature: String unseal(final String sealedMessage)