private static void AdjustUdata(this SyncDownRecord syncDownRecord) { if (syncDownRecord.udata == null) { return; } using (var ms = new MemoryStream()) { UdataSerializer.WriteObject(ms, syncDownRecord.udata); syncDownRecord.Udata = ms.ToArray().Base64UrlEncode(); } }
private Tuple <SyncDownRecord, SyncDownRecordMetaData> GenerateRecord(PasswordRecord record, KeyType keyType, long revision) { var sdr = new SyncDownRecord { RecordUid = record.Uid, Version = 2, Revision = revision, ClientModifiedTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), Shared = keyType == KeyType.DataKey }; var data = record.ExtractRecordData(); using (var ms = new MemoryStream()) { _dataSerializer.WriteObject(ms, data); sdr.Data = CryptoUtils.EncryptAesV1(ms.ToArray(), record.RecordKey).Base64UrlEncode(); } if (record.Attachments.Count > 0) { var extra = record.ExtractRecordExtra(); using (var ms = new MemoryStream()) { _extraSerializer.WriteObject(ms, extra); sdr.Extra = CryptoUtils.EncryptAesV1(ms.ToArray(), record.RecordKey).Base64UrlEncode(); } } SyncDownRecordMetaData sdrmd = null; if (keyType == KeyType.DataKey || keyType == KeyType.PrivateKey) { sdrmd = new SyncDownRecordMetaData { RecordUid = record.Uid, Owner = keyType == KeyType.DataKey, CanShare = keyType == KeyType.DataKey, CanEdit = keyType == KeyType.DataKey, RecordKeyType = (int)keyType }; sdrmd.RecordKey = (keyType == KeyType.DataKey ? CryptoUtils.EncryptAesV1(record.RecordKey, DataKey) : CryptoUtils.EncryptRsa(record.RecordKey, PublicKey)).Base64UrlEncode(); } return(new Tuple <SyncDownRecord, SyncDownRecordMetaData>(sdr, sdrmd)); }