public static function generateSignedPreKey($identityKeyPair, $signedPreKeyId) { $keyPair = Curve::generateKeyPair(); $signature = Curve::calculateSignature($identityKeyPair->getPrivateKey(), $keyPair->getPublicKey()->serialize()); $spk = new SignedPreKeyRecord($signedPreKeyId, (int) round(time() * 1000), $keyPair, $signature); return $spk; }
public function processInitKeyExchangeMessage() { try { $sequence = KeyHelper::getRandomSequence(65534) + 1; $flags = KeyExchangeMessage::INITIATE_FLAG; $baseKey = Curve::generateKeyPair(); $ratchetKey = Curve::generateKeyPair(); $identityKey = $this->identityKeyStore->getIdentityKeyPair(); $baseKeySignature = Curve::calculateSignature($identityKey->getPrivateKey(), $baseKey->getPublicKey()->serialize()); $sessionRecord = $this->sessionStore->loadSession($this->recipientId, $this->deviceId); $sessionRecord->getSessionState()->setPendingKeyExchange($sequence, $baseKey, $ratchetKey, $identityKey); $this->sessionStore->storeSession($this->recipientId, $this->deviceId, $sessionRecord); return new KeyExchangeMessage(2, $sequence, $flags, $baseKey->getPublicKey(), $baseKeySignature, $ratchetKey->getPublicKey(), $identityKey->getPublicKey()); } catch (InvalidKeyException $ex) { throw new Exception($ex->getMessage()); } }
private function getSignature($signatureKey, $serialized) { try { return Curve::calculateSignature($signatureKey, $serialized); } catch (InvalidKeyException $ex) { throw new Exception($ex->getMessage()); } }