Пример #1
0
 /**
  * @param \Jose\Object\JWKInterface $private_key
  * @param \Jose\Object\JWKInterface $public_key
  *
  * @throws \InvalidArgumentException
  *
  * @return int|string|void
  */
 public function calculateAgreementKey(JWKInterface $private_key, JWKInterface $public_key)
 {
     switch ($public_key->get('crv')) {
         case 'P-256':
         case 'P-384':
         case 'P-521':
             $p = $this->getGenerator($private_key);
             $rec_x = $this->convertBase64ToGmp($public_key->get('x'));
             $rec_y = $this->convertBase64ToGmp($public_key->get('y'));
             $sen_d = $this->convertBase64ToGmp($private_key->get('d'));
             $priv_key = $p->getPrivateKeyFrom($sen_d);
             $pub_key = $p->getPublicKeyFrom($rec_x, $rec_y);
             $ecdh = new EcDH(EccFactory::getAdapter());
             $ecdh->setSenderKey($priv_key);
             $ecdh->setRecipientKey($pub_key);
             return $this->convertDecToBin($ecdh->calculateSharedKey());
         case 'X25519':
             return curve25519_shared(Base64Url::decode($private_key->get('d')), Base64Url::decode($public_key->get('x')));
         default:
             throw new \InvalidArgumentException(sprintf('The curve "%s" is not supported', $public_key->get('crv')));
     }
 }
Пример #2
0
 /**
  * {@inheritDoc}
  * @see \Mdanter\Ecc\Crypto\Key\PrivateKeyInterface::createExchange()
  */
 public function createExchange(MessageFactory $messageFactory, PublicKeyInterface $recipient = null)
 {
     $exchange = new EcDH($this->adapter, $messageFactory);
     $exchange->setSenderKey($this);
     $exchange->setRecipientKey($recipient);
     return $exchange;
 }