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; } }
/** * 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; }
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(); }