示例#1
0
        private static SignedPreKeyRecord generateSignedPreKey(IdentityKeyPair identityKeyPair, uint signedPreKeyId)
        {
            //return Task.Run(() =>
            //{
            ECKeyPair keyPair = Curve.generateKeyPair();
            byte[] signature = Curve.calculateSignature(identityKeyPair.getPrivateKey(), keyPair.getPublicKey().serialize());
            SignedPreKeyRecord record = new SignedPreKeyRecord(signedPreKeyId, (ulong)TimeUtil.GetUnixTimestampMillis() , keyPair, signature);

            return record;
            // });
        }
 public void StoreSignedPreKey(uint signedPreKeyId, SignedPreKeyRecord record)
 {
     signedPreKeyStore.StoreSignedPreKey(signedPreKeyId, record);
 }
 /**
  * Set the client's signed prekey.
  *
  * @param signedPreKey The client's new signed prekey.
  * @throws IOException
  */
 public async void setSignedPreKey(SignedPreKeyRecord signedPreKey)// throws IOException
 {
     await this.pushServiceSocket.setCurrentSignedPreKey(signedPreKey);
 }
 /**
  * Register an identity key, last resort key, signed prekey, and list of one time prekeys
  * with the server.
  *
  * @param identityKey The client's long-term identity keypair.
  * @param lastResortKey The client's "last resort" prekey.
  * @param signedPreKey The client's signed prekey.
  * @param oneTimePreKeys The client's list of one-time prekeys.
  *
  * @throws IOException
  */
 public async Task<bool> setPreKeys(IdentityKey identityKey, PreKeyRecord lastResortKey,
                            SignedPreKeyRecord signedPreKey, IList<PreKeyRecord> oneTimePreKeys)
 //throws IOException
 {
     await this.pushServiceSocket.registerPreKeys(identityKey, lastResortKey, signedPreKey, oneTimePreKeys);
     return true;
 }
 public void StoreSignedPreKey(uint signedPreKeyId, SignedPreKeyRecord record)
 {
     conn.InsertOrReplace(new SignedPreKeyRecordI() { SignedPreKeyId = signedPreKeyId, Record = record.serialize() });
 }
 public async Task<bool> setCurrentSignedPreKey(SignedPreKeyRecord signedPreKey)// throws IOException
 {
     SignedPreKeyEntity signedPreKeyEntity = new SignedPreKeyEntity(signedPreKey.getId(),
                                                                    signedPreKey.getKeyPair().getPublicKey(),
                                                                    signedPreKey.getSignature());
     await makeRequest(SIGNED_PREKEY_PATH, "PUT", JsonUtil.toJson(signedPreKeyEntity));
     return true;
 }
        public async Task<bool> registerPreKeys(IdentityKey identityKey,
                                    PreKeyRecord lastResortKey,
                                    SignedPreKeyRecord signedPreKey,
                                    IList<PreKeyRecord> records)
        //throws IOException
        {
            List<PreKeyEntity> entities = new List<PreKeyEntity>();

            foreach (PreKeyRecord record in records)
            {
                PreKeyEntity entity = new PreKeyEntity(record.getId(),
                                                       record.getKeyPair().getPublicKey());

                entities.Add(entity);
            }

            PreKeyEntity lastResortEntity = new PreKeyEntity(lastResortKey.getId(),
                                                     lastResortKey.getKeyPair().getPublicKey());

            SignedPreKeyEntity signedPreKeyEntity = new SignedPreKeyEntity(signedPreKey.getId(),
                                                                   signedPreKey.getKeyPair().getPublicKey(),
                                                                   signedPreKey.getSignature());

            await makeRequest(string.Format(PREKEY_PATH, ""), "PUT",
                JsonUtil.toJson(new PreKeyState(entities, lastResortEntity,
                                                signedPreKeyEntity, identityKey)));
            return true;
        }
        public CryptoState()
        {
            identityKeyPair = KeyHelper.generateIdentityKeyPair();
            registrationId = KeyHelper.generateRegistrationId(false);
            lastResortKey = KeyHelper.generateLastResortPreKey();
            signedPreKey = KeyHelper.generateSignedPreKey(identityKeyPair, 5);//normally generate 100, but for a demo, 1 will do

            axolotlStore = new InMemoryAxolotlStore(identityKeyPair, registrationId);
            axolotlStore.StoreSignedPreKey(signedPreKey.getId(), signedPreKey);
        }