Exemplo n.º 1
0
 public function decode()
 {
     $core = $this->core;
     list($vMajor, $vMinor) = $core->getVersion();
     // Client
     $connOut = $core->getOutDuplex();
     // Server
     $connIn = $core->getInDuplex();
     // ECDHE
     if ($core->cipherSuite->isECDHEEnabled()) {
         $extensions = $core->extensions;
         $data = $extensions->call('Curve', 'decodeClientKeyExchange', '');
         $preMaster = $extensions->call('Curve', 'getPremaster', null);
     } else {
         $preMaster = Core::_pack('C', $vMajor) . Core::_pack('C', $vMinor) . Core::getRandom(46);
         $crtDers = $core->getCrtDers();
         $publicKey = X509::getPublicKey($crtDers);
         openssl_public_encrypt($preMaster, $encPreMaster, $publicKey);
         $data = Core::_pack('n', strlen($encPreMaster)) . $encPreMaster;
     }
     // Set Master Secret, IV and MAC
     $this->setKeys($preMaster, $connIn, $connOut);
     $this->msgType = HandshakeType::CLIENT_KEY_EXCHANGE;
     $this->length = strlen($data);
     return $this->getBinHeader() . $data;
 }
Exemplo n.º 2
0
 private function encodeServerConfig(array $arrConfig)
 {
     if (!isset($arrConfig['key_pair_files'])) {
         throw new TLSException("No keyPairFiles");
     }
     $keyPairFiles = $arrConfig['key_pair_files'];
     if (!isset($keyPairFiles['cert']) || !isset($keyPairFiles['key'])) {
         throw new TLSException("Invalid keyPair");
     }
     $pemCrtFiles = $keyPairFiles['cert'];
     $pemPriFile = $keyPairFiles['key'][0];
     $pemPriPassCode = $keyPairFiles['key'][1];
     $this->config['crt_ders'] = X509::crtFilePemToDer($pemCrtFiles);
     $this->config['private_key'] = X509::getPrivateKey($pemPriFile, $pemPriPassCode);
 }
Exemplo n.º 3
0
 public static function getPublicKey(array $crtDers)
 {
     $pem = X509::crtDerToPem($crtDers[0]);
     $publicKey = openssl_pkey_get_public($pem);
     return $publicKey;
 }