Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F32561757
D12572.1767324617.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D12572.1767324617.diff
View Options
diff --git a/keyserver/src/push/encrypted-notif-utils-api.js b/keyserver/src/push/encrypted-notif-utils-api.js
--- a/keyserver/src/push/encrypted-notif-utils-api.js
+++ b/keyserver/src/push/encrypted-notif-utils-api.js
@@ -52,7 +52,7 @@
uploadLargeNotifPayload: blobServiceUpload,
getNotifByteSize: (serializedPayload: string) =>
Buffer.byteLength(serializedPayload),
- getEncryptedNotifHash: (serializedNotification: string) =>
+ getEncryptedNotifHash: async (serializedNotification: string) =>
getOlmUtility().sha256(serializedNotification),
};
diff --git a/lib/push/crypto.js b/lib/push/crypto.js
--- a/lib/push/crypto.js
+++ b/lib/push/crypto.js
@@ -171,9 +171,10 @@
dbPersistCondition,
);
- const encryptedPayloadHash = encryptedNotifUtilsAPI.getEncryptedNotifHash(
- serializedPayload.body,
- );
+ const encryptedPayloadHash =
+ await encryptedNotifUtilsAPI.getEncryptedNotifHash(
+ serializedPayload.body,
+ );
return {
notification: {
@@ -242,9 +243,10 @@
unencryptedSerializedPayload,
);
- const encryptedPayloadHash = encryptedNotifUtilsAPI.getEncryptedNotifHash(
- serializedPayload.body,
- );
+ const encryptedPayloadHash =
+ await encryptedNotifUtilsAPI.getEncryptedNotifHash(
+ serializedPayload.body,
+ );
return {
notification: {
diff --git a/lib/types/notif-types.js b/lib/types/notif-types.js
--- a/lib/types/notif-types.js
+++ b/lib/types/notif-types.js
@@ -396,5 +396,5 @@
| { +blobUploadError: string },
>,
+getNotifByteSize: (serializedNotification: string) => number,
- +getEncryptedNotifHash: (serializedNotification: string) => string,
+ +getEncryptedNotifHash: (serializedNotification: string) => Promise<string>,
};
diff --git a/native/push/encrypted-notif-utils-api.js b/native/push/encrypted-notif-utils-api.js
new file mode 100644
--- /dev/null
+++ b/native/push/encrypted-notif-utils-api.js
@@ -0,0 +1,42 @@
+// @flow
+
+import type { EncryptedNotifUtilsAPI } from 'lib/types/notif-types.js';
+
+import { commUtilsModule } from '../native-modules.js';
+
+const encryptedNotifUtilsAPI: EncryptedNotifUtilsAPI = {
+ encryptSerializedNotifPayload: async (
+ cryptoID: string,
+ unencryptedPayload: string,
+ encryptedPayloadSizeValidator?: (
+ encryptedPayload: string,
+ type: '1' | '0',
+ ) => boolean,
+ ) => {
+ // The "mock" implementation below will be replaced with proper
+ // implementation after olm notif sessions initialization is
+ // implemented. for now it is actually beneficial to return
+ // original string as encrypted string since it allows for
+ // better testing as we can verify which data are encrypted
+ // and which aren't.
+ return {
+ encryptedData: { body: unencryptedPayload, type: 1 },
+ sizeLimitViolated: encryptedPayloadSizeValidator
+ ? !encryptedPayloadSizeValidator(unencryptedPayload, '1')
+ : false,
+ };
+ },
+ uploadLargeNotifPayload: async () => ({ blobUploadError: 'not_implemented' }),
+ getNotifByteSize: (serializedNotification: string) => {
+ return commUtilsModule.encodeStringToUTF8ArrayBuffer(serializedNotification)
+ .byteLength;
+ },
+ getEncryptedNotifHash: async (serializedNotification: string) => {
+ const notifAsArrayBuffer = commUtilsModule.encodeStringToUTF8ArrayBuffer(
+ serializedNotification,
+ );
+ return commUtilsModule.sha256(notifAsArrayBuffer);
+ },
+};
+
+export default encryptedNotifUtilsAPI;
diff --git a/web/push-notif/encrypted-notif-utils-api.js b/web/push-notif/encrypted-notif-utils-api.js
new file mode 100644
--- /dev/null
+++ b/web/push-notif/encrypted-notif-utils-api.js
@@ -0,0 +1,38 @@
+// @flow
+
+import type { EncryptedNotifUtilsAPI } from 'lib/types/notif-types.js';
+
+const encryptedNotifUtilsAPI: EncryptedNotifUtilsAPI = {
+ encryptSerializedNotifPayload: async (
+ cryptoID: string,
+ unencryptedPayload: string,
+ encryptedPayloadSizeValidator?: (
+ encryptedPayload: string,
+ type: '1' | '0',
+ ) => boolean,
+ ) => {
+ // The "mock" implementation below will be replaced with proper
+ // implementation after olm notif sessions initialization is
+ // implemented. for now it is actually beneficial to return
+ // original string as encrypted string since it allows for
+ // better testing as we can verify which data are encrypted
+ // and which aren't.
+ return {
+ encryptedData: { body: unencryptedPayload, type: 1 },
+ sizeLimitViolated: encryptedPayloadSizeValidator
+ ? !encryptedPayloadSizeValidator(unencryptedPayload, '1')
+ : false,
+ };
+ },
+ uploadLargeNotifPayload: async () => ({ blobUploadError: 'not_implemented' }),
+ getNotifByteSize: (serializedNotification: string) => {
+ return new Blob([serializedNotification]).size;
+ },
+ getEncryptedNotifHash: async (serializedNotification: string) => {
+ const notificationBytes = new TextEncoder().encode(serializedNotification);
+ const hashBytes = await crypto.subtle.digest('SHA-256', notificationBytes);
+ return btoa(String.fromCharCode(...new Uint8Array(hashBytes)));
+ },
+};
+
+export default encryptedNotifUtilsAPI;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Jan 2, 3:30 AM (6 h, 24 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5878242
Default Alt Text
D12572.1767324617.diff (5 KB)
Attached To
Mode
D12572: Add encryptedNotifUtilsAPI on client platforms with mock encryption.
Attached
Detach File
Event Timeline
Log In to Comment