Skip to content

Commit 87c38fe

Browse files
added sortable crypto
1 parent 0d79975 commit 87c38fe

File tree

2 files changed

+83
-3
lines changed

2 files changed

+83
-3
lines changed

src/Enities.ts

+6
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@ export interface GroupOutDataHmacKeys {
100100
key_data: string
101101
}
102102

103+
export interface GroupOutDataSortableKeys {
104+
group_key_id: string,
105+
key_data: string
106+
}
107+
103108
export interface GroupData
104109
{
105110
group_id: string,
@@ -116,6 +121,7 @@ export interface GroupData
116121
access_by_group_as_member?: string,
117122
is_connected_group: boolean,
118123
hmac_keys: string[],
124+
sortable_keys: string[],
119125
last_check_time: number,
120126
}
121127

src/Group.ts

+77-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
GroupKeyRotationOut,
1717
GroupList,
1818
GroupOutDataHmacKeys,
19-
GroupOutDataKeys,
19+
GroupOutDataKeys, GroupOutDataSortableKeys,
2020
GroupUserListItem,
2121
HttpMethod,
2222
KeyRotationInput,
@@ -33,7 +33,9 @@ import {
3333
group_create_child_group,
3434
group_create_connected_group,
3535
group_decrypt_hmac_key,
36-
group_decrypt_key, group_extract_group_data,
36+
group_decrypt_key,
37+
group_decrypt_sortable_key,
38+
group_extract_group_data,
3739
group_extract_group_key,
3840
group_extract_group_keys,
3941
group_finish_key_rotation,
@@ -48,7 +50,11 @@ import {
4850
group_prepare_update_rank,
4951
prepare_create_searchable,
5052
prepare_create_searchable_light,
51-
prepare_search
53+
prepare_search,
54+
sortable_encrypt_number,
55+
sortable_encrypt_raw_number,
56+
sortable_encrypt_raw_string,
57+
sortable_encrypt_string
5258
} from "sentc_wasm";
5359
import {Sentc} from "./Sentc";
5460
import {AbstractSymCrypto} from "./crypto/AbstractSymCrypto";
@@ -175,6 +181,7 @@ export async function getGroup(
175181
access_by_parent_group,
176182
is_connected_group: out.get_is_connected_group(),
177183
hmac_keys: [],
184+
sortable_keys: [],
178185
last_check_time: Date.now()
179186
};
180187

@@ -212,6 +219,12 @@ export async function getGroup(
212219
const decrypted_hmac_keys = await group_obj.decryptHmacKeys(hmac_keys);
213220
group_obj.data.hmac_keys = decrypted_hmac_keys;
214221
group_data.hmac_keys = decrypted_hmac_keys;
222+
223+
const sortable_keys = out.get_sortable_keys();
224+
225+
const decrypted_sortable_keys = await group_obj.decryptSortableKeys(sortable_keys);
226+
group_obj.data.sortable_keys = decrypted_sortable_keys;
227+
group_data.sortable_keys = decrypted_sortable_keys;
215228

216229
await Promise.all([
217230
//store the group data
@@ -1127,6 +1140,24 @@ export class Group extends AbstractSymCrypto
11271140
return keys;
11281141
}
11291142

1143+
public async decryptSortableKeys(fetchedKeys: GroupOutDataSortableKeys[])
1144+
{
1145+
const keys = [];
1146+
1147+
for (let i = 0; i < fetchedKeys.length; i++) {
1148+
const fetched_key = fetchedKeys[i];
1149+
1150+
// eslint-disable-next-line no-await-in-loop
1151+
const group_key = await this.getSymKeyById(fetched_key.group_key_id);
1152+
1153+
const decrypted_key = group_decrypt_sortable_key(group_key, fetched_key.key_data);
1154+
1155+
keys.push(decrypted_key);
1156+
}
1157+
1158+
return keys;
1159+
}
1160+
11301161
private prepareKeys(page = 0): [string, boolean]
11311162
{
11321163
return prepareKeys(this.data.keys, page);
@@ -1223,6 +1254,11 @@ export class Group extends AbstractSymCrypto
12231254
return this.data.hmac_keys[0];
12241255
}
12251256

1257+
getNewestSortableKey(): string
1258+
{
1259+
return this.data.sortable_keys[0];
1260+
}
1261+
12261262
//__________________________________________________________________________________________________________________
12271263

12281264
/**
@@ -1559,6 +1595,44 @@ export class Group extends AbstractSymCrypto
15591595
return handle_server_response(res);
15601596
}
15611597

1598+
//__________________________________________________________________________________________________________________
1599+
//sortable
1600+
1601+
public encryptSortableRawNumber(number: number)
1602+
{
1603+
const key = this.getNewestSortableKey();
1604+
1605+
return sortable_encrypt_raw_number(key, BigInt(number));
1606+
}
1607+
1608+
public encryptSortableNumber(number: number)
1609+
{
1610+
const key = this.getNewestSortableKey();
1611+
1612+
const out = sortable_encrypt_number(key, BigInt(number));
1613+
1614+
return [out.get_number(), out.get_alg(), out.get_key_id()];
1615+
}
1616+
1617+
public encryptSortableRawString(data: string)
1618+
{
1619+
const key = this.getNewestSortableKey();
1620+
1621+
return sortable_encrypt_raw_string(key, data);
1622+
}
1623+
1624+
public encryptSortableString(data: string)
1625+
{
1626+
const key = this.getNewestSortableKey();
1627+
1628+
const out = sortable_encrypt_string(key, data);
1629+
1630+
return [out.get_number(), out.get_alg(), out.get_key_id()];
1631+
}
1632+
1633+
//__________________________________________________________________________________________________________________
1634+
//content
1635+
15621636
public async fetchContent(data: {last_fetched_item?: ListContentItem, cat_id?: string, limit?: CONTENT_FETCH_LIMIT}): Promise<ListContentItem[]>
15631637
{
15641638
const {limit, cat_id, last_fetched_item} = data;

0 commit comments

Comments
 (0)