/** * @param \Jose\JWKInterface $receiver_key * @param string $encrypted_cek * @param int $encryption_key_length * @param array $complete_header * * @return string */ public function unwrapAgreementKey(JWKInterface $receiver_key, $encrypted_cek, $encryption_key_length, array $complete_header) { $ecdh_es = new ECDHES(); $agreement_key = $ecdh_es->getAgreementKey($encryption_key_length, $receiver_key, null, $complete_header); $wrapper = $this->getWrapper(); return $wrapper->unwrap($agreement_key, $encrypted_cek); }
/** * @see https://tools.ietf.org/html/rfc7518#appendix-C */ public function testGetAgreementKey() { $receiver = new JWK(['kty' => 'EC', 'crv' => 'P-256', 'x' => 'weNJy2HscCSM6AEDTDg04biOvhFhyyWvOHQfeF_PxMQ', 'y' => 'e8lnCO-AlStT-NJVX-crhB7QRYhiix03illJOVAOyck', 'd' => 'VEmDZpDXXK8p8N0Cndsxs924q6nS1RXFASRl6BfUqdw']); $sender = new JWK(['kty' => 'EC', 'crv' => 'P-256', 'x' => 'gI0GAILBdu7T53akrFmMyGcsF3n5dO7MmwNBHKW5SV0', 'y' => 'SLW_xSffzlPWrHEVI30DHM_4egVwt3NQqeUD7nMFpps', 'd' => '0_NxaRPUMQoAJt50Gz8YiTr8gRTwyEaCumd']); $header = ['enc' => 'A128GCM', 'apu' => 'QWxpY2U', 'apv' => 'Qm9i']; $expected = Base64Url::decode('9FdsD3uzmeK4ImyoWpP5PA'); $ecdh_es = new ECDHES(); $additional_header_values = []; $this->assertEquals($expected, $ecdh_es->getAgreementKey(128, $sender, $receiver, $header, $additional_header_values)); $this->assertTrue(array_key_exists('epk', $additional_header_values)); $this->assertTrue(array_key_exists('kty', $additional_header_values['epk'])); $this->assertTrue(array_key_exists('crv', $additional_header_values['epk'])); $this->assertTrue(array_key_exists('x', $additional_header_values['epk'])); $this->assertTrue(array_key_exists('y', $additional_header_values['epk'])); }