public DeviceConsistencyMessage(DeviceConsistencyCommitment commitment, IdentityKeyPair identityKeyPair)
        {
            try
            {
                byte[] signatureBytes = Curve.CalculateVrfSignature(identityKeyPair.GetPrivateKey(), commitment.ToByteArray());
                byte[] vrfOutputBytes = Curve.VerifyVrfSignature(identityKeyPair.GetPublicKey().GetPublicKey(), commitment.ToByteArray(), signatureBytes);

                _generation = commitment.GetGeneration();
                _signature  = new DeviceConsistencySignature(signatureBytes, vrfOutputBytes);
                _serialized = SignalProtos.DeviceConsistencyCodeMessage.CreateBuilder()
                              .SetGeneration((uint)commitment.GetGeneration())
                              .SetSignature(ByteString.CopyFrom(_signature.GetSignature()))
                              .Build()
                              .ToByteArray();
            }
            catch (InvalidKeyException e)
            {
                Debug.Assert(false);
                throw e;
            }
            catch (VrfSignatureVerificationFailedException e)
            {
                Debug.Assert(false);
                throw e;
            }
        }
Esempio n. 2
0
        /**
         * Generate a signed PreKey
         *
         * @param identityKeyPair The local client's identity key pair.
         * @param signedPreKeyId The PreKey id to assign the generated signed PreKey
         *
         * @return the generated signed PreKey
         * @throws InvalidKeyException when the provided identity key is invalid
         */

        public static SignedPreKeyRecord GenerateSignedPreKey(IdentityKeyPair identityKeyPair, uint signedPreKeyId)
        {
            ECKeyPair keyPair = Curve.GenerateKeyPair();

            byte[] signature = Curve.CalculateSignature(identityKeyPair.GetPrivateKey(), keyPair.GetPublicKey().Serialize());

            return(new SignedPreKeyRecord(signedPreKeyId, GetTime(), keyPair, signature));
        }
        public void StoreLocalData(uint registrationId, IdentityKeyPair identityKey)
        {
            IdentityKeysRepository identityKeysRepository = new IdentityKeysRepository();
            IdentityKeys           newKeys = new IdentityKeys()
            {
                RecipientId    = "-1",
                RegistrationId = Convert.ToString(registrationId),
                PublicKey      = identityKey.GetPublicKey().Serialize(),
                PrivateKey     = identityKey.GetPrivateKey().Serialize()
            };

            identityKeysRepository.Save(newKeys);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="registrationId"></param>
        /// <param name="identityKey"></param>
        public void StoreLocalData(uint registrationId, IdentityKeyPair identityKey)
        {
            if (IdentitiesObjectDic.ContainsKey("-1"))
            {
                IdentitiesObjectDic.Remove("-1");
            }

            IdentitiesObjectDic.Add("-1", new IdentitiesObject()
            {
                RecipientId    = "-1",
                RegistrationId = registrationId.ToString(),
                PublicKey      = identityKey.GetPublicKey().Serialize(),
                PrivateKey     = identityKey.GetPrivateKey().Serialize()
            });
        }
        public void SetPendingKeyExchange(uint sequence,
                                          EcKeyPair ourBaseKey,
                                          EcKeyPair ourRatchetKey,
                                          IdentityKeyPair ourIdentityKey)
        {
            SessionStructure.Types.PendingKeyExchange structure = new SessionStructure.Types.PendingKeyExchange
            {
                LocalBaseKey            = ByteString.CopyFrom(ourBaseKey.GetPublicKey().Serialize()),
                LocalBaseKeyPrivate     = ByteString.CopyFrom(ourBaseKey.GetPrivateKey().Serialize()),
                LocalRatchetKey         = ByteString.CopyFrom(ourRatchetKey.GetPublicKey().Serialize()),
                LocalRatchetKeyPrivate  = ByteString.CopyFrom(ourRatchetKey.GetPrivateKey().Serialize()),
                LocalIdentityKey        = ByteString.CopyFrom(ourIdentityKey.GetPublicKey().Serialize()),
                LocalIdentityKeyPrivate = ByteString.CopyFrom(ourIdentityKey.GetPrivateKey().Serialize())
            };

            _sessionStructure.PendingKeyExchange = structure;
        }
Esempio n. 6
0
        public void SetPendingKeyExchange(uint sequence,
                                          ECKeyPair ourBaseKey,
                                          ECKeyPair ourRatchetKey,
                                          IdentityKeyPair ourIdentityKey)
        {
            PendingKeyExchange structure =
                PendingKeyExchange.CreateBuilder()
                .SetSequence(sequence)
                .SetLocalBaseKey(ByteString.CopyFrom(ourBaseKey.GetPublicKey().Serialize()))
                .SetLocalBaseKeyPrivate(ByteString.CopyFrom(ourBaseKey.GetPrivateKey().Serialize()))
                .SetLocalRatchetKey(ByteString.CopyFrom(ourRatchetKey.GetPublicKey().Serialize()))
                .SetLocalRatchetKeyPrivate(ByteString.CopyFrom(ourRatchetKey.GetPrivateKey().Serialize()))
                .SetLocalIdentityKey(ByteString.CopyFrom(ourIdentityKey.GetPublicKey().Serialize()))
                .SetLocalIdentityKeyPrivate(ByteString.CopyFrom(ourIdentityKey.GetPrivateKey().Serialize()))
                .Build();

            this.sessionStructure = this.sessionStructure.ToBuilder()
                                    .SetPendingKeyExchange(structure)
                                    .Build();
        }