Beispiel #1
0
 public function processV3($sessionRecord, $message)
 {
     /*
     :param sessionRecord:
     :param message:
     :type message: PreKeyWhisperMessage
     :return:
     */
     if ($sessionRecord->hasSessionState($message->getMessageVersion(), $message->getBaseKey()->serialize())) {
         Log::warn('v3', "We've already setup a session for this V3 message, letting bundled message fall through...");
         return;
     }
     $ourSignedPreKey = $this->signedPreKeyStore->loadSignedPreKey($message->getSignedPreKeyId())->getKeyPair();
     $parameters = new BobBuilder();
     $parameters->setTheirBaseKey($message->getBaseKey())->setTheirIdentityKey($message->getIdentityKey())->setOurIdentityKey($this->identityKeyStore->getIdentityKeyPair())->setOurSignedPreKey($ourSignedPreKey)->setOurRatchetKey($ourSignedPreKey);
     if ($message->getPreKeyId() != null) {
         $parameters->setOurOneTimePreKey($this->preKeyStore->loadPreKey($message->getPreKeyId())->getKeyPair());
     } else {
         $parameters->setOurOneTimePreKey(null);
     }
     if (!$sessionRecord->isFresh()) {
         $sessionRecord->archiveCurrentState();
     }
     RatchetingSession::initializeSessionAsBob($sessionRecord->getSessionState(), $message->getMessageVersion(), $parameters->create());
     $sessionRecord->getSessionState()->setLocalRegistrationId($this->identityKeyStore->getLocalRegistrationId());
     $sessionRecord->getSessionState()->setRemoteRegistrationId($message->getRegistrationId());
     $sessionRecord->getSessionState()->setAliceBaseKey($message->getBaseKey()->serialize());
     if ($message->getPreKeyId() != null && $message->getPreKeyId() != Medium::MAX_VALUE) {
         return $message->getPreKeyId();
     } else {
         return;
     }
 }
Beispiel #2
0
 protected function initializeSessionsV3($aliceSessionState, $bobSessionState)
 {
     $aliceIdentityKeyPair = Curve::generateKeyPair();
     $aliceIdentityKey = new IdentityKeyPair(new IdentityKey($aliceIdentityKeyPair->getPublicKey()), $aliceIdentityKeyPair->getPrivateKey());
     $aliceBaseKey = Curve::generateKeyPair();
     $aliceEphemeralKey = Curve::generateKeyPair();
     $alicePreKey = $aliceBaseKey;
     $bobIdentityKeyPair = Curve::generateKeyPair();
     $bobIdentityKey = new IdentityKeyPair(new IdentityKey($bobIdentityKeyPair->getPublicKey()), $bobIdentityKeyPair->getPrivateKey());
     $bobBaseKey = Curve::generateKeyPair();
     $bobEphemeralKey = $bobBaseKey;
     $bobPreKey = Curve::generateKeyPair();
     $aliceParameters = AliceAxolotlParameters::newBuilder()->setOurBaseKey($aliceBaseKey)->setOurIdentityKey($aliceIdentityKey)->setTheirOneTimePreKey(null)->setTheirRatchetKey($bobEphemeralKey->getPublicKey())->setTheirSignedPreKey($bobBaseKey->getPublicKey())->setTheirIdentityKey($bobIdentityKey->getPublicKey())->create();
     $bobParameters = BobAxolotlParameters::newBuilder()->setOurRatchetKey($bobEphemeralKey)->setOurSignedPreKey($bobBaseKey)->setOurOneTimePreKey(null)->setOurIdentityKey($bobIdentityKey)->setTheirIdentityKey($aliceIdentityKey->getPublicKey())->setTheirBaseKey($aliceBaseKey->getPublicKey())->create();
     RatchetingSession::initializeSessionAsAlice($aliceSessionState, 3, $aliceParameters);
     RatchetingSession::initializeSessionAsBob($bobSessionState, 3, $bobParameters);
 }