@icure/api 8.0.24 → 8.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/icc-x-api/crypto/AES.d.ts +54 -2
  2. package/icc-x-api/crypto/AES.js +5 -5
  3. package/icc-x-api/crypto/AES.js.map +1 -1
  4. package/icc-x-api/crypto/CryptoPrimitives.d.ts +21 -12
  5. package/icc-x-api/crypto/CryptoPrimitives.js +8 -19
  6. package/icc-x-api/crypto/CryptoPrimitives.js.map +1 -1
  7. package/icc-x-api/crypto/DelegationsDeAnonymization.js +1 -1
  8. package/icc-x-api/crypto/DelegationsDeAnonymization.js.map +1 -1
  9. package/icc-x-api/crypto/HMACUtils.d.ts +8 -1
  10. package/icc-x-api/crypto/HMACUtils.js +3 -3
  11. package/icc-x-api/crypto/HMACUtils.js.map +1 -1
  12. package/icc-x-api/crypto/NativeCryptoPrimitivesBridge.d.ts +113 -0
  13. package/icc-x-api/crypto/NativeCryptoPrimitivesBridge.js +477 -0
  14. package/icc-x-api/crypto/NativeCryptoPrimitivesBridge.js.map +1 -0
  15. package/icc-x-api/crypto/RSA.d.ts +107 -4
  16. package/icc-x-api/crypto/RSA.js +4 -4
  17. package/icc-x-api/crypto/RSA.js.map +1 -1
  18. package/icc-x-api/crypto/shamir.d.ts +7 -3
  19. package/icc-x-api/crypto/shamir.js +14 -5
  20. package/icc-x-api/crypto/shamir.js.map +1 -1
  21. package/icc-x-api/index.d.ts +4 -2
  22. package/icc-x-api/index.js +5 -3
  23. package/icc-x-api/index.js.map +1 -1
  24. package/package.json +1 -1
  25. package/test/icc-api/api/IccMedicalLocationApi.js +6 -6
  26. package/test/icc-api/api/IccMedicalLocationApi.js.map +1 -1
  27. package/test/icc-x-api/crud/comprehensive-crud-test.js +1 -1
  28. package/test/icc-x-api/crud/comprehensive-crud-test.js.map +1 -1
  29. package/test/icc-x-api/crud/entities-crud-test-interface.js +1 -0
  30. package/test/icc-x-api/crud/entities-crud-test-interface.js.map +1 -1
  31. package/test/icc-x-api/crypto/anonymous-delegations-test.js +1 -2
  32. package/test/icc-x-api/crypto/anonymous-delegations-test.js.map +1 -1
  33. package/test/icc-x-api/crypto/crypto-utils.js +1 -2
  34. package/test/icc-x-api/crypto/crypto-utils.js.map +1 -1
  35. package/test/icc-x-api/crypto/exchange-data-manager-test.js +1 -1
  36. package/test/icc-x-api/crypto/exchange-data-manager-test.js.map +1 -1
  37. package/test/icc-x-api/crypto/full-crypto-test.js +1 -2
  38. package/test/icc-x-api/crypto/full-crypto-test.js.map +1 -1
  39. package/test/icc-x-api/crypto/secure-delegations-manager-test.js +1 -1
  40. package/test/icc-x-api/crypto/secure-delegations-manager-test.js.map +1 -1
  41. package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.js +2 -2
  42. package/test/icc-x-api/crypto/secure-delegations-metadata-decryptor-test.js.map +1 -1
  43. package/test/icc-x-api/crypto/shamir.js +6 -7
  44. package/test/icc-x-api/crypto/shamir.js.map +1 -1
  45. package/test/icc-x-api/crypto/signature-keys-manager-test.js +1 -1
  46. package/test/icc-x-api/crypto/signature-keys-manager-test.js.map +1 -1
  47. package/test/icc-x-api/icc-maintenance-task-x-api-test.js +3 -2
  48. package/test/icc-x-api/icc-maintenance-task-x-api-test.js.map +1 -1
  49. package/test/icc-x-api/icc-user-x-api-test.js +1 -1
  50. package/test/icc-x-api/icc-user-x-api-test.js.map +1 -1
  51. package/test/icc-x-api/patient-user.js +1 -2
  52. package/test/icc-x-api/patient-user.js.map +1 -1
  53. package/test/icc-x-api/test-legacy-data-support.js +2 -3
  54. package/test/icc-x-api/test-legacy-data-support.js.map +1 -1
  55. package/test/utils/FakeDataOwnerApi.js +1 -1
  56. package/test/utils/FakeDataOwnerApi.js.map +1 -1
  57. package/test/utils/FakeGenericApi.js +1 -1
  58. package/test/utils/FakeGenericApi.js.map +1 -1
  59. package/test/utils/TestApi.js +1 -1
  60. package/test/utils/TestApi.js.map +1 -1
  61. package/test/utils/TestCryptoStrategies.js +1 -1
  62. package/test/utils/TestCryptoStrategies.js.map +1 -1
  63. package/test/utils/test_utils.js +6 -6
  64. package/test/utils/test_utils.js.map +1 -1
  65. package/test/icc-api/api/IccArticleApi.d.ts +0 -1
  66. package/test/icc-api/api/IccArticleApi.js +0 -64
  67. package/test/icc-api/api/IccArticleApi.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"full-crypto-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/full-crypto-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { Apis, IcureApi, ShaVersion, ua2hex } from '../../../icc-x-api'\nimport { v4 as uuid } from 'uuid'\nimport { Patient } from '../../../icc-api/model/Patient'\nimport { Contact } from '../../../icc-api/model/Contact'\nimport { HealthElement } from '../../../icc-api/model/HealthElement'\nimport { CalendarItem } from '../../../icc-api/model/CalendarItem'\nimport { EncryptedEntity, FilterChainMaintenanceTask, HealthcareParty, Service, User } from '../../../icc-api/model/models'\nimport { before, describe, it } from 'mocha'\n\nimport { webcrypto } from 'crypto'\nimport 'isomorphic-fetch'\n\nimport { expect } from 'chai'\nimport { getEnvironmentInitializer, getTempEmail, isLiteTest, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport { TestApi } from '../../utils/TestApi'\nimport { KeyPair } from '../../../icc-x-api/crypto/RSA'\nimport { CryptoPrimitives } from '../../../icc-x-api/crypto/CryptoPrimitives'\nimport { TestKeyStorage, TestStorage, testStorageWithKeys } from '../../utils/TestStorage'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport { MaintenanceTaskAfterDateFilter } from '../../../icc-x-api/filters/MaintenanceTaskAfterDateFilter'\nimport { KeyPairUpdateRequest } from '../../../icc-x-api/maintenance/KeyPairUpdateRequest'\nimport initMasterApi = TestUtils.initMasterApi\nimport { SecureDelegation } from '../../../icc-api/model/SecureDelegation'\nimport AccessLevel = SecureDelegation.AccessLevelEnum\nimport { EntityShareRequest } from '../../../icc-api/model/requests/EntityShareRequest'\nimport RequestedPermissionEnum = EntityShareRequest.RequestedPermissionEnum\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { fingerprintV1 } from '../../../icc-x-api/crypto/utils'\n\nsetLocalStorage(fetch)\n\nconst FULL_WRITE = RequestedPermissionEnum.FULL_WRITE\n\ntype TestedEntity = 'Patient' | 'Contact' | 'HealthElement' | 'CalendarItem'\n\ninterface EntityFacade<T extends EncryptedEntity> {\n create: (api: Apis, record: Omit<T, 'rev'>) => Promise<T>\n get: (api: Apis, id: string) => Promise<T>\n share: (api: Apis, record: T, dataOwnerId: string) => Promise<T>\n isDecrypted: (entityToCheck: T) => Promise<boolean>\n}\n\ntype EntityCreator<T> = (api: Apis, id: string, user: User, patient?: Patient, delegateIds?: string[]) => Promise<T>\n\ninterface EntityFacades {\n Patient: EntityFacade<Patient>\n Contact: EntityFacade<Contact>\n HealthElement: EntityFacade<HealthElement>\n CalendarItem: EntityFacade<CalendarItem>\n}\n\ninterface EntityCreators {\n Patient: EntityCreator<Patient>\n Contact: EntityCreator<Contact>\n HealthElement: EntityCreator<HealthElement>\n CalendarItem: EntityCreator<CalendarItem>\n}\n\nconst facades: EntityFacades = {\n Patient: {\n create: async (api, r) => api.patientApi.createPatientWithUser(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.patientApi.getPatientWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.patientApi.shareWith(doId, r, await api.patientApi.decryptSecretIdsOf(r), { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.note != undefined\n },\n } as EntityFacade<Patient>,\n Contact: {\n create: async (api, r) => api.contactApi.createContactWithUser(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.contactApi.getContactWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.contactApi.shareWith(doId, r, { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.services?.[0].content != undefined && Object.entries(entityToCheck.services?.[0].content).length > 0\n },\n } as EntityFacade<Contact>,\n HealthElement: {\n create: async (api, r) => api.healthcareElementApi.createHealthElementWithUser(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.healthcareElementApi.getHealthElementWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.healthcareElementApi.shareWith(doId, r, { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.descr != undefined\n },\n } as EntityFacade<HealthElement>,\n CalendarItem: {\n create: async (api, r) => api.calendarItemApi.createCalendarItemWithHcParty(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.calendarItemApi.getCalendarItemWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.calendarItemApi.shareWith(doId, r, { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.title != undefined\n },\n } as EntityFacade<CalendarItem>,\n}\n\nconst users: { user: User; password: string }[] = []\nconst primitives = new CryptoPrimitives(webcrypto as any)\nlet delegateUser: User | undefined = undefined\nlet delegateHcp: HealthcareParty | undefined = undefined\nlet delegateHcpPassword: string | undefined = undefined\n\nlet userGivingAccessBack: User | undefined = undefined\nlet userGivingAccessBackPassword: string | undefined = undefined\nlet hcpGivingAccessBack: HealthcareParty | undefined = undefined\n\nconst entities: EntityCreators = {\n Patient: ({ patientApi }, id, user, _, delegateIds) => {\n return patientApi.newInstance(user, new Patient({ id, firstName: 'test', lastName: 'test', note: 'data', dateOfBirth: 20000101 }), {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n })\n },\n Contact: ({ contactApi }, id, user, patient, delegateIds) => {\n return contactApi.newInstance(\n user,\n patient!,\n new Contact({ id, services: [new Service({ label: 'svc', content: { fr: { stringValue: 'data' } } })] }),\n {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n confidential: false,\n }\n )\n },\n HealthElement: ({ healthcareElementApi }, id, user, patient, delegateIds) => {\n return healthcareElementApi.newInstance(user, patient!, new HealthElement({ id, descr: 'HE' }), {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n confidential: false,\n })\n },\n CalendarItem: ({ calendarItemApi }, id, user, patient, delegateIds) => {\n return calendarItemApi.newInstancePatient(user, patient!, new CalendarItem({ id, title: 'CI' }), {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n })\n },\n}\n\nconst userDefinitions: Record<string, (user: User, password: string, pair: KeyPair<CryptoKey>) => Promise<{ user: User; apis: Apis }>> = {\n 'one available key and one lost key recoverable through transfer keys': async (user, password, originalKey) => {\n const newKey = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const apiWithOnlyNewKey = await IcureApi.initialise(\n env!.iCureUrl,\n {\n username: user.login!,\n password,\n },\n new TestCryptoStrategies(newKey, {\n [fingerprintV1(ua2hex(await primitives.RSA.exportKey(originalKey.publicKey, 'spki')))]: true,\n }),\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n const apis = await IcureApi.initialise(\n env!.iCureUrl,\n {\n username: user.login!,\n password,\n },\n new TestCryptoStrategies(originalKey, {\n [fingerprintV1(ua2hex(await primitives.RSA.exportKey(newKey.publicKey, 'spki')))]: true,\n }),\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n expect(Object.keys(apis.cryptoApi.userKeysManager.getDecryptionKeys())).to.have.length(2)\n await apiWithOnlyNewKey.cryptoApi.forceReload()\n expect(Object.keys(apiWithOnlyNewKey.cryptoApi.userKeysManager.getDecryptionKeys())).to.have.length(2)\n return { user, apis: apiWithOnlyNewKey }\n },\n 'two available keys': async (user, password, originalKey) => {\n const newKey = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const apiWithOnlyNewKey = await IcureApi.initialise(\n env!.iCureUrl,\n { username: user.login!, password },\n new TestCryptoStrategies(newKey),\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n ) // Initializes the new key for the data owner\n const keyStrings = await Promise.all(\n [originalKey, newKey].map(async (pair) => ({\n publicKey: ua2hex(await primitives.RSA.exportKey(pair.publicKey, 'spki')),\n privateKey: ua2hex(await primitives.RSA.exportKey(pair.privateKey, 'pkcs8')),\n }))\n )\n const storage = await testStorageWithKeys([\n {\n dataOwnerId: user.healthcarePartyId ?? user.patientId!,\n pairs: keyStrings.map((key) => {\n return { keyPair: key, shaVersion: ShaVersion.Sha256 }\n }),\n },\n ])\n const apis = await IcureApi.initialise(env!.iCureUrl, { username: user.login!, password }, new TestCryptoStrategies(), webcrypto as any, fetch, {\n entryKeysFactory: storage.keyFactory,\n keyStorage: storage.keyStorage,\n storage: storage.storage,\n })\n return { user, apis }\n },\n 'a single available key in old format': async (user, password, originalKey) => ({\n user,\n apis: await TestApi(env.iCureUrl, user.login!, password, webcrypto as any, originalKey),\n }),\n 'one lost key and one available key': async (user, password) => {\n const newKeyPair = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const apis = await TestApi(env.iCureUrl, user.login!, password, webcrypto as any, newKeyPair)\n await apis.icureMaintenanceTaskApi.createMaintenanceTasksForNewKeypair(user, newKeyPair)\n return { user, apis }\n },\n 'one lost key and one upgraded available key thanks to delegate who gave access back to previous data': async (user, password) => {\n const newKeyPair = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const api = await TestApi(env.iCureUrl, user.login!, password, webcrypto as any, newKeyPair)\n await api.icureMaintenanceTaskApi.createMaintenanceTasksForNewKeypair(user, newKeyPair)\n const giveAccessBackApi = apis['givingAccessBack']\n const keyPairUpdateRequests = (\n await giveAccessBackApi.maintenanceTaskApi.filterMaintenanceTasksByWithUser(\n userGivingAccessBack!,\n undefined,\n undefined,\n new FilterChainMaintenanceTask({\n filter: new MaintenanceTaskAfterDateFilter({\n date: new Date().getTime() - 100000,\n }),\n })\n )\n ).rows!.map((x) => KeyPairUpdateRequest.fromMaintenanceTask(x))\n const concernedRequest = keyPairUpdateRequests.find((x) => x.concernedDataOwnerId === (user.healthcarePartyId ?? user.patientId))\n if (!concernedRequest) throw new Error('Could not find maintenance task')\n await giveAccessBackApi.icureMaintenanceTaskApi.applyKeyPairUpdate(concernedRequest)\n\n await api.cryptoApi.forceReload()\n\n return { user, apis: api }\n },\n}\n\nasync function createPartialsForHcp(\n entityFacades: EntityFacades,\n entityCreators: EntityCreators,\n user: User,\n password: string\n): Promise<KeyPair<CryptoKey>> {\n const key = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const api1 = await TestApi(env!.iCureUrl, user.login!, password, webcrypto as any, key)\n await Object.entries(entityFacades).reduce(async (p, f) => {\n await p\n const type = f[0]\n const facade = f[1]\n const parent = type !== 'Patient' ? await api1.patientApi.getPatientWithUser(user, `partial-${user.id}-Patient`) : undefined\n const record = await entityCreators[type as TestedEntity](api1, `partial-${user.id}-${type}`, user, parent, [hcpGivingAccessBack!.id!])\n await facade.create(api1, record)\n }, Promise.resolve())\n return key\n}\n\nasync function createPartialsForPatient(\n entityFacades: EntityFacades,\n entityCreators: EntityCreators,\n user: User,\n password: string,\n patientCreatorUser: User,\n patientCreatorApis: Apis\n): Promise<KeyPair<CryptoKey>> {\n const key = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const api1 = await TestApi(env!.iCureUrl, user.login!, password, webcrypto as any, key)\n const pat = await patientCreatorApis.patientApi.getPatientWithUser(patientCreatorUser, user.patientId!)\n await patientCreatorApis.patientApi.shareWith(user.patientId!, pat, await patientCreatorApis.patientApi.decryptSecretIdsOf(pat), {\n requestedPermissions: FULL_WRITE,\n })\n await Object.entries(entityFacades)\n .filter((it) => it[0] !== 'Patient')\n .reduce(async (p, f) => {\n await p\n const type = f[0]\n const facade = f[1]\n const parent = await api1.patientApi.getPatientWithUser(user, user.patientId!)\n const record = await entityCreators[type as TestedEntity](api1, `partial-${user.id}-${type}`, user, parent, [hcpGivingAccessBack!.id!])\n await facade.create(api1, record)\n }, Promise.resolve())\n return key\n}\n\nlet env: TestVars\nlet apis: { [key: string]: Apis }\n\ndescribe('Full crypto test - Creation scenarios', async function () {\n before(async function () {\n this.timeout(6000000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n\n const api = await initMasterApi(env!)\n const user = await api.userApi.getCurrentUser()\n const dataOwnerId = api.dataOwnerApi.getDataOwnerIdOf(user)\n\n const { userApi, patientApi, healthcarePartyApi, cryptoApi } = api\n\n delegateHcp = await healthcarePartyApi.createHealthcareParty(new HealthcareParty({ id: uuid(), firstName: 'test', lastName: 'test' }))\n delegateUser = await userApi.createUser(\n new User({\n id: `user-${uuid()}-hcp`,\n login: `hcp-delegate-${uuid()}`,\n status: 'ACTIVE',\n healthcarePartyId: delegateHcp.id,\n })\n )\n delegateHcpPassword = await userApi.getToken(delegateUser!.id!, uuid())\n\n hcpGivingAccessBack = await healthcarePartyApi.createHealthcareParty(new HealthcareParty({ id: uuid(), firstName: 'test', lastName: 'test' }))\n userGivingAccessBack = await userApi.createUser(\n new User({\n id: `user-${uuid()}-hcp`,\n login: `hcp-giving-access-back-${uuid()}`,\n status: 'ACTIVE',\n healthcarePartyId: hcpGivingAccessBack.id,\n })\n )\n userGivingAccessBackPassword = await userApi.getToken(userGivingAccessBack!.id!, uuid())\n\n apis = {\n delegate: await TestApi(env.iCureUrl!, delegateUser.login!, delegateHcpPassword, webcrypto as any),\n givingAccessBack: await TestApi(env.iCureUrl!, userGivingAccessBack.login!, userGivingAccessBackPassword, webcrypto as any),\n }\n\n await Object.entries(userDefinitions).reduce(async (p, [login, creationProcess]) => {\n await p\n const newPatientEmail = getTempEmail()\n const patientToCreate = await patientApi.newInstance(user, new Patient({ id: uuid(), firstName: 'test', lastName: 'test' }))\n const patient = await patientApi.createPatientWithUser(user, patientToCreate)\n\n const newHcpEmail = getTempEmail()\n const hcp = await healthcarePartyApi.createHealthcareParty(new HealthcareParty({ id: uuid(), firstName: 'test', lastName: 'test' }))\n\n const newPatientUser = await userApi.createUser(\n new User({\n id: `user-${uuid()}-patient`,\n name: `patient-${login}`,\n login: newPatientEmail,\n email: newPatientEmail,\n status: 'ACTIVE',\n patientId: patient.id,\n })\n )\n const newPatientUserPassword = await userApi.getToken(newPatientUser!.id!, uuid())\n\n const newHcpUser = await userApi.createUser(\n new User({\n id: `user-${uuid()}-hcp`,\n login: newHcpEmail,\n email: newHcpEmail,\n name: `hcp-${login}`,\n status: 'ACTIVE',\n healthcarePartyId: hcp.id,\n })\n )\n const newHcpUserPassword = await userApi.getToken(newHcpUser!.id!, uuid())\n\n const originalKeyPat = await createPartialsForPatient(facades, entities, newPatientUser, newPatientUserPassword, user, api)\n const originalKeyHcp = await createPartialsForHcp(facades, entities, newHcpUser, newHcpUserPassword)\n\n const patDetails = await creationProcess(newPatientUser, newPatientUserPassword, originalKeyPat)\n const hcpDetails = await creationProcess(newHcpUser, newHcpUserPassword, originalKeyHcp)\n\n users.push({ user: patDetails.user, password: newPatientUserPassword })\n apis[patDetails.user.name!] = patDetails.apis\n users.push({ user: hcpDetails.user, password: newHcpUserPassword })\n apis[hcpDetails.user.name!] = hcpDetails.apis\n }, Promise.resolve())\n\n await users\n .filter((it) => it.user.id!.endsWith('patient'))\n .map((it) => it.user)\n .reduce(async (prev, it) => {\n await prev\n const otherUsers = users.filter((u) => u.user.id!.endsWith('patient') && u.user.id !== it.id).map((u) => u.user)\n\n await otherUsers.reduce(async (p, u) => {\n await p\n const patientToShare = await facades.Patient.get(api, it.patientId!)\n const sharedPatient = await facades.Patient.share(api, patientToShare, u.patientId!)\n return Promise.resolve()\n }, Promise.resolve())\n\n return Promise.resolve()\n }, Promise.resolve())\n })\n ;['patient', 'hcp'].forEach((uType) => {\n Object.keys(userDefinitions).forEach((uId) => {\n Object.entries(facades).forEach((f) => {\n it(`Create ${f[0]} as a ${uType} with ${uId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade: EntityFacade<any> = f[1]\n const api = apis[`${uType}-${uId}`]\n\n const parent =\n f[0] !== 'Patient'\n ? uType === 'patient'\n ? await api.patientApi.getPatientWithUser(user, user.patientId!)\n : await api.patientApi.getPatientWithUser(user, `${user.id}-Patient`)\n : undefined\n const record = await entities[f[0] as TestedEntity](api, `${user.id}-${f[0]}`, user, parent)\n const entity = await facade.create(api, record)\n const retrieved = await facade.get(api, entity.id)\n\n expect(entity.id).to.be.not.null\n expect(entity.rev).to.equal(retrieved.rev)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n it(`Create ${f[0]} as delegate with delegation for ${uType} with ${uId}`, async function () {\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade: EntityFacade<any> = f[1]\n\n const api = apis['delegate']\n const patApi = apis[`${uType}-${uId}`]\n const dataOwnerId = api.dataOwnerApi.getDataOwnerIdOf(user)\n const dataOwner = (await patApi.dataOwnerApi.getCryptoActorStub(dataOwnerId))!.stub\n\n const parent = f[0] !== 'Patient' ? await api.patientApi.getPatientWithUser(delegateUser!, `delegate-${user.id}-Patient`) : undefined\n\n const record = await entities[f[0] as TestedEntity](api, `delegate-${user.id}-${f[0]}`, delegateUser!, parent, [\n (user.patientId ?? user.healthcarePartyId ?? user.deviceId)!,\n ])\n const entity = await facade.create(api, record)\n const retrieved = await facade.get(api, entity.id)\n expect(entity.id).to.be.not.null\n expect(entity.rev).to.equal(retrieved.rev)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n })\n })\n })\n})\n\ndescribe('Full crypto test - Read/Share scenarios', async function () {\n ;['patient', 'hcp'].forEach((uType) => {\n Object.keys(userDefinitions).forEach((uId) => {\n Object.entries(facades).forEach((f) => {\n it(`Read ${f[0]} as the initial ${uType} with ${uId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n\n const retrievePromise = facade.get(api, `partial-${user.id}-${f[0]}`)\n const lostInitialKey = uId.includes('one lost key and one available key')\n if (uType === 'patient' && lostInitialKey && !isLiteTest()) {\n // Patient with lost key can't prove he has access to data: he will get an error\n let gaveError = false\n try {\n await retrievePromise\n } catch {\n gaveError = true\n }\n expect(gaveError).to.equal(true, 'Patient with lost key should not be able to retrieve data')\n } else {\n const entity = await retrievePromise\n expect(entity.id).to.equal(`partial-${user.id}-${f[0]}`)\n expect(await facade.isDecrypted(entity)).to.equal(!lostInitialKey) // data is accessible only with initial key for this test.\n }\n })\n it(`Read ${f[0]} as a ${uType} with ${uId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n\n const entity = await facade.get(api, `${user.id}-${f[0]}`)\n expect(entity.id).to.equal(`${user.id}-${f[0]}`)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n it(`Read ${f[0]} shared by delegate as a ${uType} with ${uId}`, async () => {\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n await api.cryptoApi.forceReload()\n const entity = await facade.get(api, `delegate-${user.id}-${f[0]}`)\n expect(entity.id).to.equal(`delegate-${user.id}-${f[0]}`)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n ;['patient', 'hcp'].forEach((duType) => {\n Object.keys(userDefinitions).forEach((duId) => {\n it(`Share ${f[0]} as a ${uType} with ${uId} to a ${duType} with ${duId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const { user: delUser } = users.find((it) => it.user.name === `${duType}-${duId}`)!\n const delegateDoId = delUser.healthcarePartyId ?? delUser.patientId\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n const delApi = apis[`${duType}-${duId}`]\n // Data was created (in a previous test) after lost key -> fully accessible\n const entity = await facade.share(api, await facade.get(api, `${user.id}-${f[0]}`), delegateDoId)\n const retrieved = await facade.get(api, entity.id)\n expect(entity.rev).to.equal(retrieved.rev)\n\n await delApi.cryptoApi.forceReload()\n const obj = await facade.get(delApi, `${user.id}-${f[0]}`)\n expect(await delApi.cryptoApi.xapi.hasWriteAccess({ entity: obj, type: f[0] as any })).to.equal(true)\n expect(await facade.isDecrypted(obj)).to.equal(true)\n })\n })\n })\n })\n })\n })\n})\n"]}
1
+ {"version":3,"file":"full-crypto-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/full-crypto-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { Apis, WebCryptoPrimitives, IcureApi, ShaVersion, ua2hex } from '../../../icc-x-api'\nimport { v4 as uuid } from 'uuid'\nimport { Patient } from '../../../icc-api/model/Patient'\nimport { Contact } from '../../../icc-api/model/Contact'\nimport { HealthElement } from '../../../icc-api/model/HealthElement'\nimport { CalendarItem } from '../../../icc-api/model/CalendarItem'\nimport { EncryptedEntity, FilterChainMaintenanceTask, HealthcareParty, Service, User } from '../../../icc-api/model/models'\nimport { before, describe, it } from 'mocha'\n\nimport { webcrypto } from 'crypto'\nimport 'isomorphic-fetch'\n\nimport { expect } from 'chai'\nimport { getEnvironmentInitializer, getTempEmail, isLiteTest, setLocalStorage, TestUtils } from '../../utils/test_utils'\nimport { TestApi } from '../../utils/TestApi'\nimport { KeyPair } from '../../../icc-x-api/crypto/RSA'\nimport { CryptoPrimitives } from '../../../icc-x-api/crypto/CryptoPrimitives'\nimport { TestKeyStorage, TestStorage, testStorageWithKeys } from '../../utils/TestStorage'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport { MaintenanceTaskAfterDateFilter } from '../../../icc-x-api/filters/MaintenanceTaskAfterDateFilter'\nimport { KeyPairUpdateRequest } from '../../../icc-x-api/maintenance/KeyPairUpdateRequest'\nimport initMasterApi = TestUtils.initMasterApi\nimport { SecureDelegation } from '../../../icc-api/model/SecureDelegation'\nimport AccessLevel = SecureDelegation.AccessLevelEnum\nimport { EntityShareRequest } from '../../../icc-api/model/requests/EntityShareRequest'\nimport RequestedPermissionEnum = EntityShareRequest.RequestedPermissionEnum\nimport { getEnvVariables, TestVars } from '@icure/test-setup/types'\nimport { fingerprintV1 } from '../../../icc-x-api/crypto/utils'\n\nsetLocalStorage(fetch)\n\nconst FULL_WRITE = RequestedPermissionEnum.FULL_WRITE\n\ntype TestedEntity = 'Patient' | 'Contact' | 'HealthElement' | 'CalendarItem'\n\ninterface EntityFacade<T extends EncryptedEntity> {\n create: (api: Apis, record: Omit<T, 'rev'>) => Promise<T>\n get: (api: Apis, id: string) => Promise<T>\n share: (api: Apis, record: T, dataOwnerId: string) => Promise<T>\n isDecrypted: (entityToCheck: T) => Promise<boolean>\n}\n\ntype EntityCreator<T> = (api: Apis, id: string, user: User, patient?: Patient, delegateIds?: string[]) => Promise<T>\n\ninterface EntityFacades {\n Patient: EntityFacade<Patient>\n Contact: EntityFacade<Contact>\n HealthElement: EntityFacade<HealthElement>\n CalendarItem: EntityFacade<CalendarItem>\n}\n\ninterface EntityCreators {\n Patient: EntityCreator<Patient>\n Contact: EntityCreator<Contact>\n HealthElement: EntityCreator<HealthElement>\n CalendarItem: EntityCreator<CalendarItem>\n}\n\nconst facades: EntityFacades = {\n Patient: {\n create: async (api, r) => api.patientApi.createPatientWithUser(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.patientApi.getPatientWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.patientApi.shareWith(doId, r, await api.patientApi.decryptSecretIdsOf(r), { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.note != undefined\n },\n } as EntityFacade<Patient>,\n Contact: {\n create: async (api, r) => api.contactApi.createContactWithUser(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.contactApi.getContactWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.contactApi.shareWith(doId, r, { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.services?.[0].content != undefined && Object.entries(entityToCheck.services?.[0].content).length > 0\n },\n } as EntityFacade<Contact>,\n HealthElement: {\n create: async (api, r) => api.healthcareElementApi.createHealthElementWithUser(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.healthcareElementApi.getHealthElementWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.healthcareElementApi.shareWith(doId, r, { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.descr != undefined\n },\n } as EntityFacade<HealthElement>,\n CalendarItem: {\n create: async (api, r) => api.calendarItemApi.createCalendarItemWithHcParty(await api.userApi.getCurrentUser(), r),\n get: async (api, id) => api.calendarItemApi.getCalendarItemWithUser(await api.userApi.getCurrentUser(), id),\n share: async (api, r, doId) => {\n return await api.calendarItemApi.shareWith(doId, r, { requestedPermissions: FULL_WRITE })\n },\n isDecrypted: async (entityToCheck) => {\n return entityToCheck.title != undefined\n },\n } as EntityFacade<CalendarItem>,\n}\n\nconst users: { user: User; password: string }[] = []\nconst primitives = new WebCryptoPrimitives(webcrypto as any)\nlet delegateUser: User | undefined = undefined\nlet delegateHcp: HealthcareParty | undefined = undefined\nlet delegateHcpPassword: string | undefined = undefined\n\nlet userGivingAccessBack: User | undefined = undefined\nlet userGivingAccessBackPassword: string | undefined = undefined\nlet hcpGivingAccessBack: HealthcareParty | undefined = undefined\n\nconst entities: EntityCreators = {\n Patient: ({ patientApi }, id, user, _, delegateIds) => {\n return patientApi.newInstance(user, new Patient({ id, firstName: 'test', lastName: 'test', note: 'data', dateOfBirth: 20000101 }), {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n })\n },\n Contact: ({ contactApi }, id, user, patient, delegateIds) => {\n return contactApi.newInstance(\n user,\n patient!,\n new Contact({ id, services: [new Service({ label: 'svc', content: { fr: { stringValue: 'data' } } })] }),\n {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n confidential: false,\n }\n )\n },\n HealthElement: ({ healthcareElementApi }, id, user, patient, delegateIds) => {\n return healthcareElementApi.newInstance(user, patient!, new HealthElement({ id, descr: 'HE' }), {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n confidential: false,\n })\n },\n CalendarItem: ({ calendarItemApi }, id, user, patient, delegateIds) => {\n return calendarItemApi.newInstancePatient(user, patient!, new CalendarItem({ id, title: 'CI' }), {\n additionalDelegates: Object.fromEntries(delegateIds?.map((id) => [id, AccessLevel.WRITE]) ?? []),\n })\n },\n}\n\nconst userDefinitions: Record<string, (user: User, password: string, pair: KeyPair<CryptoKey>) => Promise<{ user: User; apis: Apis }>> = {\n 'one available key and one lost key recoverable through transfer keys': async (user, password, originalKey) => {\n const newKey = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const apiWithOnlyNewKey = await IcureApi.initialise(\n env!.iCureUrl,\n {\n username: user.login!,\n password,\n },\n new TestCryptoStrategies(newKey, {\n [fingerprintV1(ua2hex(await primitives.RSA.exportKey(originalKey.publicKey, 'spki')))]: true,\n }),\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n const apis = await IcureApi.initialise(\n env!.iCureUrl,\n {\n username: user.login!,\n password,\n },\n new TestCryptoStrategies(originalKey, {\n [fingerprintV1(ua2hex(await primitives.RSA.exportKey(newKey.publicKey, 'spki')))]: true,\n }),\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n )\n expect(Object.keys(apis.cryptoApi.userKeysManager.getDecryptionKeys())).to.have.length(2)\n await apiWithOnlyNewKey.cryptoApi.forceReload()\n expect(Object.keys(apiWithOnlyNewKey.cryptoApi.userKeysManager.getDecryptionKeys())).to.have.length(2)\n return { user, apis: apiWithOnlyNewKey }\n },\n 'two available keys': async (user, password, originalKey) => {\n const newKey = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const apiWithOnlyNewKey = await IcureApi.initialise(\n env!.iCureUrl,\n { username: user.login!, password },\n new TestCryptoStrategies(newKey),\n webcrypto as any,\n fetch,\n {\n storage: new TestStorage(),\n keyStorage: new TestKeyStorage(),\n }\n ) // Initializes the new key for the data owner\n const keyStrings = await Promise.all(\n [originalKey, newKey].map(async (pair) => ({\n publicKey: ua2hex(await primitives.RSA.exportKey(pair.publicKey, 'spki')),\n privateKey: ua2hex(await primitives.RSA.exportKey(pair.privateKey, 'pkcs8')),\n }))\n )\n const storage = await testStorageWithKeys([\n {\n dataOwnerId: user.healthcarePartyId ?? user.patientId!,\n pairs: keyStrings.map((key) => {\n return { keyPair: key, shaVersion: ShaVersion.Sha256 }\n }),\n },\n ])\n const apis = await IcureApi.initialise(env!.iCureUrl, { username: user.login!, password }, new TestCryptoStrategies(), webcrypto as any, fetch, {\n entryKeysFactory: storage.keyFactory,\n keyStorage: storage.keyStorage,\n storage: storage.storage,\n })\n return { user, apis }\n },\n 'a single available key in old format': async (user, password, originalKey) => ({\n user,\n apis: await TestApi(env.iCureUrl, user.login!, password, webcrypto as any, originalKey),\n }),\n 'one lost key and one available key': async (user, password) => {\n const newKeyPair = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const apis = await TestApi(env.iCureUrl, user.login!, password, webcrypto as any, newKeyPair)\n await apis.icureMaintenanceTaskApi.createMaintenanceTasksForNewKeypair(user, newKeyPair)\n return { user, apis }\n },\n 'one lost key and one upgraded available key thanks to delegate who gave access back to previous data': async (user, password) => {\n const newKeyPair = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const api = await TestApi(env.iCureUrl, user.login!, password, webcrypto as any, newKeyPair)\n await api.icureMaintenanceTaskApi.createMaintenanceTasksForNewKeypair(user, newKeyPair)\n const giveAccessBackApi = apis['givingAccessBack']\n const keyPairUpdateRequests = (\n await giveAccessBackApi.maintenanceTaskApi.filterMaintenanceTasksByWithUser(\n userGivingAccessBack!,\n undefined,\n undefined,\n new FilterChainMaintenanceTask({\n filter: new MaintenanceTaskAfterDateFilter({\n date: new Date().getTime() - 100000,\n }),\n })\n )\n ).rows!.map((x) => KeyPairUpdateRequest.fromMaintenanceTask(x))\n const concernedRequest = keyPairUpdateRequests.find((x) => x.concernedDataOwnerId === (user.healthcarePartyId ?? user.patientId))\n if (!concernedRequest) throw new Error('Could not find maintenance task')\n await giveAccessBackApi.icureMaintenanceTaskApi.applyKeyPairUpdate(concernedRequest)\n\n await api.cryptoApi.forceReload()\n\n return { user, apis: api }\n },\n}\n\nasync function createPartialsForHcp(\n entityFacades: EntityFacades,\n entityCreators: EntityCreators,\n user: User,\n password: string\n): Promise<KeyPair<CryptoKey>> {\n const key = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const api1 = await TestApi(env!.iCureUrl, user.login!, password, webcrypto as any, key)\n await Object.entries(entityFacades).reduce(async (p, f) => {\n await p\n const type = f[0]\n const facade = f[1]\n const parent = type !== 'Patient' ? await api1.patientApi.getPatientWithUser(user, `partial-${user.id}-Patient`) : undefined\n const record = await entityCreators[type as TestedEntity](api1, `partial-${user.id}-${type}`, user, parent, [hcpGivingAccessBack!.id!])\n await facade.create(api1, record)\n }, Promise.resolve())\n return key\n}\n\nasync function createPartialsForPatient(\n entityFacades: EntityFacades,\n entityCreators: EntityCreators,\n user: User,\n password: string,\n patientCreatorUser: User,\n patientCreatorApis: Apis\n): Promise<KeyPair<CryptoKey>> {\n const key = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n const api1 = await TestApi(env!.iCureUrl, user.login!, password, webcrypto as any, key)\n const pat = await patientCreatorApis.patientApi.getPatientWithUser(patientCreatorUser, user.patientId!)\n await patientCreatorApis.patientApi.shareWith(user.patientId!, pat, await patientCreatorApis.patientApi.decryptSecretIdsOf(pat), {\n requestedPermissions: FULL_WRITE,\n })\n await Object.entries(entityFacades)\n .filter((it) => it[0] !== 'Patient')\n .reduce(async (p, f) => {\n await p\n const type = f[0]\n const facade = f[1]\n const parent = await api1.patientApi.getPatientWithUser(user, user.patientId!)\n const record = await entityCreators[type as TestedEntity](api1, `partial-${user.id}-${type}`, user, parent, [hcpGivingAccessBack!.id!])\n await facade.create(api1, record)\n }, Promise.resolve())\n return key\n}\n\nlet env: TestVars\nlet apis: { [key: string]: Apis }\n\ndescribe('Full crypto test - Creation scenarios', async function () {\n before(async function () {\n this.timeout(6000000)\n const initializer = await getEnvironmentInitializer()\n env = await initializer.execute(getEnvVariables())\n\n const api = await initMasterApi(env!)\n const user = await api.userApi.getCurrentUser()\n const dataOwnerId = api.dataOwnerApi.getDataOwnerIdOf(user)\n\n const { userApi, patientApi, healthcarePartyApi, cryptoApi } = api\n\n delegateHcp = await healthcarePartyApi.createHealthcareParty(new HealthcareParty({ id: uuid(), firstName: 'test', lastName: 'test' }))\n delegateUser = await userApi.createUser(\n new User({\n id: `user-${uuid()}-hcp`,\n login: `hcp-delegate-${uuid()}`,\n status: 'ACTIVE',\n healthcarePartyId: delegateHcp.id,\n })\n )\n delegateHcpPassword = await userApi.getToken(delegateUser!.id!, uuid())\n\n hcpGivingAccessBack = await healthcarePartyApi.createHealthcareParty(new HealthcareParty({ id: uuid(), firstName: 'test', lastName: 'test' }))\n userGivingAccessBack = await userApi.createUser(\n new User({\n id: `user-${uuid()}-hcp`,\n login: `hcp-giving-access-back-${uuid()}`,\n status: 'ACTIVE',\n healthcarePartyId: hcpGivingAccessBack.id,\n })\n )\n userGivingAccessBackPassword = await userApi.getToken(userGivingAccessBack!.id!, uuid())\n\n apis = {\n delegate: await TestApi(env.iCureUrl!, delegateUser.login!, delegateHcpPassword, webcrypto as any),\n givingAccessBack: await TestApi(env.iCureUrl!, userGivingAccessBack.login!, userGivingAccessBackPassword, webcrypto as any),\n }\n\n await Object.entries(userDefinitions).reduce(async (p, [login, creationProcess]) => {\n await p\n const newPatientEmail = getTempEmail()\n const patientToCreate = await patientApi.newInstance(user, new Patient({ id: uuid(), firstName: 'test', lastName: 'test' }))\n const patient = await patientApi.createPatientWithUser(user, patientToCreate)\n\n const newHcpEmail = getTempEmail()\n const hcp = await healthcarePartyApi.createHealthcareParty(new HealthcareParty({ id: uuid(), firstName: 'test', lastName: 'test' }))\n\n const newPatientUser = await userApi.createUser(\n new User({\n id: `user-${uuid()}-patient`,\n name: `patient-${login}`,\n login: newPatientEmail,\n email: newPatientEmail,\n status: 'ACTIVE',\n patientId: patient.id,\n })\n )\n const newPatientUserPassword = await userApi.getToken(newPatientUser!.id!, uuid())\n\n const newHcpUser = await userApi.createUser(\n new User({\n id: `user-${uuid()}-hcp`,\n login: newHcpEmail,\n email: newHcpEmail,\n name: `hcp-${login}`,\n status: 'ACTIVE',\n healthcarePartyId: hcp.id,\n })\n )\n const newHcpUserPassword = await userApi.getToken(newHcpUser!.id!, uuid())\n\n const originalKeyPat = await createPartialsForPatient(facades, entities, newPatientUser, newPatientUserPassword, user, api)\n const originalKeyHcp = await createPartialsForHcp(facades, entities, newHcpUser, newHcpUserPassword)\n\n const patDetails = await creationProcess(newPatientUser, newPatientUserPassword, originalKeyPat)\n const hcpDetails = await creationProcess(newHcpUser, newHcpUserPassword, originalKeyHcp)\n\n users.push({ user: patDetails.user, password: newPatientUserPassword })\n apis[patDetails.user.name!] = patDetails.apis\n users.push({ user: hcpDetails.user, password: newHcpUserPassword })\n apis[hcpDetails.user.name!] = hcpDetails.apis\n }, Promise.resolve())\n\n await users\n .filter((it) => it.user.id!.endsWith('patient'))\n .map((it) => it.user)\n .reduce(async (prev, it) => {\n await prev\n const otherUsers = users.filter((u) => u.user.id!.endsWith('patient') && u.user.id !== it.id).map((u) => u.user)\n\n await otherUsers.reduce(async (p, u) => {\n await p\n const patientToShare = await facades.Patient.get(api, it.patientId!)\n const sharedPatient = await facades.Patient.share(api, patientToShare, u.patientId!)\n return Promise.resolve()\n }, Promise.resolve())\n\n return Promise.resolve()\n }, Promise.resolve())\n })\n ;['patient', 'hcp'].forEach((uType) => {\n Object.keys(userDefinitions).forEach((uId) => {\n Object.entries(facades).forEach((f) => {\n it(`Create ${f[0]} as a ${uType} with ${uId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade: EntityFacade<any> = f[1]\n const api = apis[`${uType}-${uId}`]\n\n const parent =\n f[0] !== 'Patient'\n ? uType === 'patient'\n ? await api.patientApi.getPatientWithUser(user, user.patientId!)\n : await api.patientApi.getPatientWithUser(user, `${user.id}-Patient`)\n : undefined\n const record = await entities[f[0] as TestedEntity](api, `${user.id}-${f[0]}`, user, parent)\n const entity = await facade.create(api, record)\n const retrieved = await facade.get(api, entity.id)\n\n expect(entity.id).to.be.not.null\n expect(entity.rev).to.equal(retrieved.rev)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n it(`Create ${f[0]} as delegate with delegation for ${uType} with ${uId}`, async function () {\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade: EntityFacade<any> = f[1]\n\n const api = apis['delegate']\n const patApi = apis[`${uType}-${uId}`]\n const dataOwnerId = api.dataOwnerApi.getDataOwnerIdOf(user)\n const dataOwner = (await patApi.dataOwnerApi.getCryptoActorStub(dataOwnerId))!.stub\n\n const parent = f[0] !== 'Patient' ? await api.patientApi.getPatientWithUser(delegateUser!, `delegate-${user.id}-Patient`) : undefined\n\n const record = await entities[f[0] as TestedEntity](api, `delegate-${user.id}-${f[0]}`, delegateUser!, parent, [\n (user.patientId ?? user.healthcarePartyId ?? user.deviceId)!,\n ])\n const entity = await facade.create(api, record)\n const retrieved = await facade.get(api, entity.id)\n expect(entity.id).to.be.not.null\n expect(entity.rev).to.equal(retrieved.rev)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n })\n })\n })\n})\n\ndescribe('Full crypto test - Read/Share scenarios', async function () {\n ;['patient', 'hcp'].forEach((uType) => {\n Object.keys(userDefinitions).forEach((uId) => {\n Object.entries(facades).forEach((f) => {\n it(`Read ${f[0]} as the initial ${uType} with ${uId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n\n const retrievePromise = facade.get(api, `partial-${user.id}-${f[0]}`)\n const lostInitialKey = uId.includes('one lost key and one available key')\n if (uType === 'patient' && lostInitialKey && !isLiteTest()) {\n // Patient with lost key can't prove he has access to data: he will get an error\n let gaveError = false\n try {\n await retrievePromise\n } catch {\n gaveError = true\n }\n expect(gaveError).to.equal(true, 'Patient with lost key should not be able to retrieve data')\n } else {\n const entity = await retrievePromise\n expect(entity.id).to.equal(`partial-${user.id}-${f[0]}`)\n expect(await facade.isDecrypted(entity)).to.equal(!lostInitialKey) // data is accessible only with initial key for this test.\n }\n })\n it(`Read ${f[0]} as a ${uType} with ${uId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n\n const entity = await facade.get(api, `${user.id}-${f[0]}`)\n expect(entity.id).to.equal(`${user.id}-${f[0]}`)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n it(`Read ${f[0]} shared by delegate as a ${uType} with ${uId}`, async () => {\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n await api.cryptoApi.forceReload()\n const entity = await facade.get(api, `delegate-${user.id}-${f[0]}`)\n expect(entity.id).to.equal(`delegate-${user.id}-${f[0]}`)\n expect(await facade.isDecrypted(entity)).to.equal(true)\n })\n ;['patient', 'hcp'].forEach((duType) => {\n Object.keys(userDefinitions).forEach((duId) => {\n it(`Share ${f[0]} as a ${uType} with ${uId} to a ${duType} with ${duId}`, async function () {\n if (f[0] === 'Patient' && uType === 'patient') {\n this.skip()\n }\n const { user } = users.find((it) => it.user.name === `${uType}-${uId}`)!\n const { user: delUser } = users.find((it) => it.user.name === `${duType}-${duId}`)!\n const delegateDoId = delUser.healthcarePartyId ?? delUser.patientId\n const facade = f[1]\n const api = apis[`${uType}-${uId}`]\n const delApi = apis[`${duType}-${duId}`]\n // Data was created (in a previous test) after lost key -> fully accessible\n const entity = await facade.share(api, await facade.get(api, `${user.id}-${f[0]}`), delegateDoId)\n const retrieved = await facade.get(api, entity.id)\n expect(entity.rev).to.equal(retrieved.rev)\n\n await delApi.cryptoApi.forceReload()\n const obj = await facade.get(delApi, `${user.id}-${f[0]}`)\n expect(await delApi.cryptoApi.xapi.hasWriteAccess({ entity: obj, type: f[0] as any })).to.equal(true)\n expect(await facade.isDecrypted(obj)).to.equal(true)\n })\n })\n })\n })\n })\n })\n})\n"]}
@@ -37,7 +37,7 @@ var RequestedPermissionEnum = EntityShareRequest_1.EntityShareRequest.RequestedP
37
37
  var EntryUpdateTypeEnum = EntitySharedMetadataUpdateRequest_1.EntitySharedMetadataUpdateRequest.EntryUpdateTypeEnum;
38
38
  (0, mocha_1.describe)('Secure delegations manager', function () {
39
39
  return __awaiter(this, void 0, void 0, function* () {
40
- const primitives = new CryptoPrimitives_1.CryptoPrimitives(crypto_1.webcrypto);
40
+ const primitives = new CryptoPrimitives_1.WebCryptoPrimitives(crypto_1.webcrypto);
41
41
  let selfId;
42
42
  let selfKeyFp;
43
43
  let selfKeypair;
@@ -1 +1 @@
1
- {"version":3,"file":"secure-delegations-manager-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/secure-delegations-manager-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe } from 'mocha'\nimport { CryptoPrimitives } from '../../../icc-x-api/crypto/CryptoPrimitives'\nimport { webcrypto } from 'crypto'\nimport { FakeEncryptionKeysManager } from '../../utils/FakeEncryptionKeysManager'\nimport { SecureDelegationsSecurityMetadataDecryptor } from '../../../icc-x-api/crypto/SecureDelegationsSecurityMetadataDecryptor'\nimport { SecureDelegationsEncryption } from '../../../icc-x-api/crypto/SecureDelegationsEncryption'\nimport { EntityWithDelegationTypeName, hex2ua, ShaVersion, ua2hex } from '../../../icc-x-api'\nimport { SecureDelegationsManager } from '../../../icc-x-api/crypto/SecureDelegationsManager'\nimport { AccessControlSecretUtils } from '../../../icc-x-api/crypto/AccessControlSecretUtils'\nimport { ExchangeDataManager, initialiseExchangeDataManagerForCurrentDataOwner } from '../../../icc-x-api/crypto/ExchangeDataManager'\nimport { BaseExchangeDataManager } from '../../../icc-x-api/crypto/BaseExchangeDataManager'\nimport { FakeExchangeDataApi } from '../../utils/FakeExchangeDataApi'\nimport { FakeDataOwnerApi } from '../../utils/FakeDataOwnerApi'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport { FakeSignatureKeysManager } from '../../utils/FakeSignatureKeysManager'\nimport { KeyPair } from '../../../icc-x-api/crypto/RSA'\nimport { EntityShareRequest } from '../../../icc-api/model/requests/EntityShareRequest'\nimport { expect } from 'chai'\nimport { EncryptedEntityStub } from '../../../icc-api/model/models'\nimport { SecurityMetadata } from '../../../icc-api/model/SecurityMetadata'\nimport { SecureDelegation } from '../../../icc-api/model/SecureDelegation'\nimport { asyncGeneratorToArray } from '../../../icc-x-api/utils/collection-utils'\nimport { EntitySharedMetadataUpdateRequest } from '../../../icc-api/model/requests/EntitySharedMetadataUpdateRequest'\nimport { fingerprintV1toV2, fingerprintV2 } from '../../../icc-x-api/crypto/utils'\nimport { DataOwnerTypeEnum } from '../../../icc-api/model/DataOwnerTypeEnum'\nimport { FakeExchangeDataMapManager } from '../../utils/FakeExchangeDataMapManager'\nimport RequestedPermissionEnum = EntityShareRequest.RequestedPermissionInternal\nimport EntryUpdateTypeEnum = EntitySharedMetadataUpdateRequest.EntryUpdateTypeEnum\n\ndescribe('Secure delegations manager', async function () {\n const primitives = new CryptoPrimitives(webcrypto as any)\n let selfId: string\n let selfKeyFp: string\n let selfKeypair: KeyPair<CryptoKey>\n let delegateId: string\n let delegateKeyFp: string\n let delegateKeypair: KeyPair<CryptoKey>\n let dataOwnerApi: FakeDataOwnerApi\n let exchangeDataMapManager: FakeExchangeDataMapManager\n let secureDelegationsEncryption: SecureDelegationsEncryption\n let decryptor: SecureDelegationsSecurityMetadataDecryptor\n let manager: SecureDelegationsManager\n let exchangeData: ExchangeDataManager\n let accessControlSecretUtils: AccessControlSecretUtils\n\n async function initialiseComponents(explicitSelf: boolean, explicitDelegate: boolean) {\n selfId = primitives.randomUuid()\n selfKeypair = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n selfKeyFp = ua2hex(await primitives.RSA.exportKey(selfKeypair.publicKey, 'spki')).slice(-32)\n delegateId = primitives.randomUuid()\n delegateKeypair = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n delegateKeyFp = fingerprintV2(ua2hex(await primitives.RSA.exportKey(delegateKeypair.publicKey, 'spki')))\n dataOwnerApi = new FakeDataOwnerApi(\n {\n id: selfId,\n type: explicitSelf ? DataOwnerTypeEnum.Hcp : DataOwnerTypeEnum.Patient,\n publicKey: ua2hex(await primitives.RSA.exportKey(selfKeypair.publicKey, 'spki')),\n },\n [\n {\n id: delegateId,\n type: explicitDelegate ? DataOwnerTypeEnum.Hcp : DataOwnerTypeEnum.Patient,\n publicKey: ua2hex(await primitives.RSA.exportKey(delegateKeypair.publicKey, 'spki')),\n },\n ]\n )\n const cryptoStrategies = new TestCryptoStrategies()\n const exchangeDataApi = new FakeExchangeDataApi()\n accessControlSecretUtils = new AccessControlSecretUtils(primitives)\n const encryptionKeysManager = await FakeEncryptionKeysManager.create(primitives, [selfKeypair])\n const signatureKeysManager = new FakeSignatureKeysManager(primitives)\n const baseExchangeData = new BaseExchangeDataManager(exchangeDataApi, dataOwnerApi, primitives, !explicitSelf)\n exchangeData = await initialiseExchangeDataManagerForCurrentDataOwner(\n baseExchangeData,\n encryptionKeysManager,\n signatureKeysManager,\n accessControlSecretUtils,\n cryptoStrategies,\n dataOwnerApi,\n primitives,\n true\n )\n exchangeDataMapManager = new FakeExchangeDataMapManager()\n secureDelegationsEncryption = new SecureDelegationsEncryption(encryptionKeysManager, primitives)\n decryptor = new SecureDelegationsSecurityMetadataDecryptor(exchangeData, exchangeDataMapManager, secureDelegationsEncryption, dataOwnerApi)\n manager = new SecureDelegationsManager(\n exchangeData,\n exchangeDataMapManager,\n secureDelegationsEncryption,\n accessControlSecretUtils,\n encryptionKeysManager,\n primitives,\n dataOwnerApi,\n cryptoStrategies,\n !explicitSelf\n )\n }\n\n it('should make a share request which will create a decryptable secure delegation.', async function () {\n async function doTest(explicitSelf: boolean, explicitDelegate: boolean) {\n await initialiseComponents(explicitSelf, explicitDelegate)\n const secretIds = [ua2hex(primitives.randomBytes(16)), ua2hex(primitives.randomBytes(16))]\n const encryptionKeys = [ua2hex(primitives.randomBytes(16))]\n const owningEntityIds = [ua2hex(primitives.randomBytes(16)), ua2hex(primitives.randomBytes(16)), ua2hex(primitives.randomBytes(16))]\n const entityType = EntityWithDelegationTypeName.Patient\n const shareOrUpdateParams = await manager.makeShareOrUpdateRequestParams(\n { entity: { secretForeignKeys: [] }, type: entityType },\n delegateId,\n secretIds,\n encryptionKeys,\n owningEntityIds,\n EntityShareRequest.RequestedPermissionEnum.MAX_WRITE\n )\n expect(shareOrUpdateParams).to.not.be.undefined\n expect(shareOrUpdateParams!.update).to.be.undefined\n expect(shareOrUpdateParams!.share).to.not.be.undefined\n const shareParams = shareOrUpdateParams!.share!\n expect(shareParams.accessControlKeys).to.have.length(1)\n if (explicitSelf && explicitDelegate) {\n expect(shareParams.exchangeDataId).to.not.be.undefined\n expect(Object.entries(shareParams.encryptedExchangeDataId ?? {})).to.have.length(0)\n } else if (explicitSelf && !explicitDelegate) {\n expect(shareParams.exchangeDataId).to.be.undefined\n expect(Object.entries(shareParams.encryptedExchangeDataId ?? {})).to.have.length(1)\n expect(shareParams.encryptedExchangeDataId![fingerprintV1toV2(selfKeyFp)]).to.not.be.undefined\n } else if (!explicitSelf && explicitDelegate) {\n expect(shareParams.exchangeDataId).to.be.undefined\n expect(Object.entries(shareParams.encryptedExchangeDataId ?? {})).to.have.length(1)\n expect(shareParams.encryptedExchangeDataId![delegateKeyFp]).to.not.be.undefined\n } else {\n expect(shareParams.exchangeDataId).to.be.undefined\n expect(Object.entries(shareParams.encryptedExchangeDataId ?? {})).to.have.length(0)\n }\n const secDelKey = ua2hex(await primitives.sha256(hex2ua(shareParams.accessControlKeys[0])))\n const fakeEntity: { entity: EncryptedEntityStub; type: EntityWithDelegationTypeName } = {\n entity: {\n secretForeignKeys: [],\n securityMetadata: new SecurityMetadata({\n secureDelegations: {\n [secDelKey]: new SecureDelegation({\n delegator: shareParams.explicitDelegator,\n delegate: shareParams.explicitDelegate,\n secretIds: shareParams.secretIds,\n encryptionKeys: shareParams.encryptionKeys,\n owningEntityIds: shareParams.owningEntityIds,\n exchangeDataId: shareParams.exchangeDataId,\n encryptedExchangeDataId: shareParams.encryptedExchangeDataId,\n permissions: SecureDelegation.AccessLevelEnum.WRITE,\n }),\n },\n }),\n },\n type: EntityWithDelegationTypeName.Patient,\n }\n await exchangeDataMapManager.createExchangeDataMaps({ [secDelKey]: shareParams.encryptedExchangeDataId! })\n await exchangeData.clearOrRepopulateCache()\n const decryptedSecretIds = (await asyncGeneratorToArray(decryptor.decryptSecretIdsOf(fakeEntity, [selfId]))).map((x) => x.decrypted)\n const decryptedEncryptionKeys = (await asyncGeneratorToArray(decryptor.decryptEncryptionKeysOf(fakeEntity, [selfId]))).map((x) => x.decrypted)\n const decryptedOwningEntityIds = (await asyncGeneratorToArray(decryptor.decryptOwningEntityIdsOf(fakeEntity, [selfId]))).map((x) => x.decrypted)\n expect(decryptedSecretIds).to.have.length(secretIds.length)\n for (const secretId of secretIds) {\n expect(decryptedSecretIds).to.include(secretId)\n }\n expect(decryptedEncryptionKeys).to.have.length(encryptionKeys.length)\n for (const encryptionKey of encryptionKeys) {\n expect(decryptedEncryptionKeys).to.include(encryptionKey)\n }\n expect(decryptedOwningEntityIds).to.have.length(owningEntityIds.length)\n for (const owningEntityId of owningEntityIds) {\n expect(decryptedOwningEntityIds).to.include(owningEntityId)\n }\n }\n console.log('Patient->Patient')\n await doTest(false, false)\n console.log('Hcp->Patient')\n await doTest(true, false)\n console.log('Patient->Hcp')\n await doTest(false, true)\n console.log('Hcp->Hcp')\n await doTest(true, true)\n })\n\n it('should make an update request which the missing entries for existing secure delegations.', async function () {\n async function doTest(makeAccessibleFromAlias: boolean) {\n await initialiseComponents(false, false)\n const canonicalSfk = primitives.randomUuid()\n const aliasSfk = primitives.randomUuid()\n const exchangeDataInfo = await exchangeData.getOrCreateEncryptionDataTo(delegateId, EntityWithDelegationTypeName.Patient, [], false)\n const canonicalKey = await accessControlSecretUtils.secureDelegationKeyFor(\n exchangeDataInfo.accessControlSecret,\n EntityWithDelegationTypeName.Patient,\n canonicalSfk\n )\n const aliasKey = await accessControlSecretUtils.secureDelegationKeyFor(\n exchangeDataInfo.accessControlSecret,\n EntityWithDelegationTypeName.Patient,\n aliasSfk\n )\n const existingSecretIds = [ua2hex(primitives.randomBytes(16))]\n const newSecretIds = [ua2hex(primitives.randomBytes(16))]\n const existingEncryptionKeys: string[] = []\n const newEncryptionKeys = [ua2hex(primitives.randomBytes(16))]\n const existingOwningEntityIds = [ua2hex(primitives.randomBytes(16))]\n const newOwningEntityIds: string[] = []\n const fakeEntity: { entity: EncryptedEntityStub; type: EntityWithDelegationTypeName } = {\n entity: {\n secretForeignKeys: makeAccessibleFromAlias ? [aliasSfk] : [canonicalSfk],\n securityMetadata: new SecurityMetadata({\n secureDelegations: {\n [canonicalKey]: new SecureDelegation({\n delegator: selfId,\n delegate: selfId,\n secretIds: await secureDelegationsEncryption.encryptSecretIds(existingSecretIds, exchangeDataInfo.exchangeKey),\n encryptionKeys: await secureDelegationsEncryption.encryptEncryptionKeys(existingEncryptionKeys, exchangeDataInfo.exchangeKey),\n owningEntityIds: await secureDelegationsEncryption.encryptOwningEntityIds(existingOwningEntityIds, exchangeDataInfo.exchangeKey),\n permissions: SecureDelegation.AccessLevelEnum.WRITE,\n }),\n },\n keysEquivalences: { [aliasKey]: canonicalKey },\n }),\n },\n type: EntityWithDelegationTypeName.Patient,\n }\n const shareOrUpdateParams = await manager.makeShareOrUpdateRequestParams(\n fakeEntity,\n delegateId,\n [...existingSecretIds, ...newSecretIds],\n [...existingEncryptionKeys, ...newEncryptionKeys],\n [...existingOwningEntityIds, ...newOwningEntityIds],\n RequestedPermissionEnum.MAX_WRITE\n )\n expect(shareOrUpdateParams).to.not.be.undefined\n expect(shareOrUpdateParams!.share).to.be.undefined\n expect(shareOrUpdateParams!.update).to.not.be.undefined\n const updateParams = shareOrUpdateParams!.update!\n expect(updateParams.metadataAccessControlHash).to.equal(canonicalKey)\n expect(Object.keys(updateParams.secretIds ?? {})).to.have.length(newSecretIds.length)\n for (const [secretId, updateType] of Object.entries(updateParams.secretIds ?? {})) {\n expect(updateType).to.equal(EntryUpdateTypeEnum.CREATE)\n expect(newSecretIds).to.contain(await secureDelegationsEncryption.decryptSecretId(secretId, exchangeDataInfo.exchangeKey))\n }\n expect(Object.keys(updateParams.encryptionKeys ?? {})).to.have.length(newEncryptionKeys.length)\n for (const [encryptionKey, updateType] of Object.entries(updateParams.encryptionKeys ?? {})) {\n expect(updateType).to.equal(EntryUpdateTypeEnum.CREATE)\n expect(newEncryptionKeys).to.contain(await secureDelegationsEncryption.decryptEncryptionKey(encryptionKey, exchangeDataInfo.exchangeKey))\n }\n expect(Object.keys(updateParams.owningEntityIds ?? {})).to.have.length(newOwningEntityIds.length)\n for (const [owningEntityId, updateType] of Object.entries(updateParams.owningEntityIds ?? {})) {\n expect(updateType).to.equal(EntryUpdateTypeEnum.CREATE)\n expect(newOwningEntityIds).to.contain(await secureDelegationsEncryption.decryptOwningEntityId(owningEntityId, exchangeDataInfo.exchangeKey))\n }\n }\n await doTest(true)\n await doTest(false)\n })\n\n it('should return undefined for existing secure delegations if it contains all entries.', async function () {\n await initialiseComponents(false, false)\n const canonicalSfk = primitives.randomUuid()\n const exchangeDataInfo = await exchangeData.getOrCreateEncryptionDataTo(delegateId, EntityWithDelegationTypeName.Patient, [], false)\n const canonicalKey = await accessControlSecretUtils.secureDelegationKeyFor(\n exchangeDataInfo.accessControlSecret,\n EntityWithDelegationTypeName.Patient,\n canonicalSfk\n )\n const existingSecretIds = [ua2hex(primitives.randomBytes(16))]\n const existingEncryptionKeys: string[] = []\n const existingOwningEntityIds = [ua2hex(primitives.randomBytes(16))]\n const fakeEntity: { entity: EncryptedEntityStub; type: EntityWithDelegationTypeName } = {\n entity: {\n secretForeignKeys: [canonicalSfk],\n securityMetadata: new SecurityMetadata({\n secureDelegations: {\n [canonicalKey]: new SecureDelegation({\n delegator: selfId,\n delegate: selfId,\n secretIds: await secureDelegationsEncryption.encryptSecretIds(existingSecretIds, exchangeDataInfo.exchangeKey),\n encryptionKeys: await secureDelegationsEncryption.encryptEncryptionKeys(existingEncryptionKeys, exchangeDataInfo.exchangeKey),\n owningEntityIds: await secureDelegationsEncryption.encryptOwningEntityIds(existingOwningEntityIds, exchangeDataInfo.exchangeKey),\n permissions: SecureDelegation.AccessLevelEnum.WRITE,\n }),\n },\n }),\n },\n type: EntityWithDelegationTypeName.Patient,\n }\n const shareOrUpdateParams = await manager.makeShareOrUpdateRequestParams(\n fakeEntity,\n delegateId,\n [...existingSecretIds],\n [...existingEncryptionKeys],\n [...existingOwningEntityIds],\n RequestedPermissionEnum.MAX_WRITE\n )\n expect(shareOrUpdateParams).to.be.undefined\n })\n})\n"]}
1
+ {"version":3,"file":"secure-delegations-manager-test.js","sourceRoot":"","sources":["../../../../test/icc-x-api/crypto/secure-delegations-manager-test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe } from 'mocha'\nimport { CryptoPrimitives, WebCryptoPrimitives } from '../../../icc-x-api/crypto/CryptoPrimitives'\nimport { webcrypto } from 'crypto'\nimport { FakeEncryptionKeysManager } from '../../utils/FakeEncryptionKeysManager'\nimport { SecureDelegationsSecurityMetadataDecryptor } from '../../../icc-x-api/crypto/SecureDelegationsSecurityMetadataDecryptor'\nimport { SecureDelegationsEncryption } from '../../../icc-x-api/crypto/SecureDelegationsEncryption'\nimport { EntityWithDelegationTypeName, hex2ua, ShaVersion, ua2hex } from '../../../icc-x-api'\nimport { SecureDelegationsManager } from '../../../icc-x-api/crypto/SecureDelegationsManager'\nimport { AccessControlSecretUtils } from '../../../icc-x-api/crypto/AccessControlSecretUtils'\nimport { ExchangeDataManager, initialiseExchangeDataManagerForCurrentDataOwner } from '../../../icc-x-api/crypto/ExchangeDataManager'\nimport { BaseExchangeDataManager } from '../../../icc-x-api/crypto/BaseExchangeDataManager'\nimport { FakeExchangeDataApi } from '../../utils/FakeExchangeDataApi'\nimport { FakeDataOwnerApi } from '../../utils/FakeDataOwnerApi'\nimport { TestCryptoStrategies } from '../../utils/TestCryptoStrategies'\nimport { FakeSignatureKeysManager } from '../../utils/FakeSignatureKeysManager'\nimport { KeyPair } from '../../../icc-x-api/crypto/RSA'\nimport { EntityShareRequest } from '../../../icc-api/model/requests/EntityShareRequest'\nimport { expect } from 'chai'\nimport { EncryptedEntityStub } from '../../../icc-api/model/models'\nimport { SecurityMetadata } from '../../../icc-api/model/SecurityMetadata'\nimport { SecureDelegation } from '../../../icc-api/model/SecureDelegation'\nimport { asyncGeneratorToArray } from '../../../icc-x-api/utils/collection-utils'\nimport { EntitySharedMetadataUpdateRequest } from '../../../icc-api/model/requests/EntitySharedMetadataUpdateRequest'\nimport { fingerprintV1toV2, fingerprintV2 } from '../../../icc-x-api/crypto/utils'\nimport { DataOwnerTypeEnum } from '../../../icc-api/model/DataOwnerTypeEnum'\nimport { FakeExchangeDataMapManager } from '../../utils/FakeExchangeDataMapManager'\nimport RequestedPermissionEnum = EntityShareRequest.RequestedPermissionInternal\nimport EntryUpdateTypeEnum = EntitySharedMetadataUpdateRequest.EntryUpdateTypeEnum\n\ndescribe('Secure delegations manager', async function () {\n const primitives = new WebCryptoPrimitives(webcrypto as any)\n let selfId: string\n let selfKeyFp: string\n let selfKeypair: KeyPair<CryptoKey>\n let delegateId: string\n let delegateKeyFp: string\n let delegateKeypair: KeyPair<CryptoKey>\n let dataOwnerApi: FakeDataOwnerApi\n let exchangeDataMapManager: FakeExchangeDataMapManager\n let secureDelegationsEncryption: SecureDelegationsEncryption\n let decryptor: SecureDelegationsSecurityMetadataDecryptor\n let manager: SecureDelegationsManager\n let exchangeData: ExchangeDataManager\n let accessControlSecretUtils: AccessControlSecretUtils\n\n async function initialiseComponents(explicitSelf: boolean, explicitDelegate: boolean) {\n selfId = primitives.randomUuid()\n selfKeypair = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n selfKeyFp = ua2hex(await primitives.RSA.exportKey(selfKeypair.publicKey, 'spki')).slice(-32)\n delegateId = primitives.randomUuid()\n delegateKeypair = await primitives.RSA.generateKeyPair(ShaVersion.Sha256)\n delegateKeyFp = fingerprintV2(ua2hex(await primitives.RSA.exportKey(delegateKeypair.publicKey, 'spki')))\n dataOwnerApi = new FakeDataOwnerApi(\n {\n id: selfId,\n type: explicitSelf ? DataOwnerTypeEnum.Hcp : DataOwnerTypeEnum.Patient,\n publicKey: ua2hex(await primitives.RSA.exportKey(selfKeypair.publicKey, 'spki')),\n },\n [\n {\n id: delegateId,\n type: explicitDelegate ? DataOwnerTypeEnum.Hcp : DataOwnerTypeEnum.Patient,\n publicKey: ua2hex(await primitives.RSA.exportKey(delegateKeypair.publicKey, 'spki')),\n },\n ]\n )\n const cryptoStrategies = new TestCryptoStrategies()\n const exchangeDataApi = new FakeExchangeDataApi()\n accessControlSecretUtils = new AccessControlSecretUtils(primitives)\n const encryptionKeysManager = await FakeEncryptionKeysManager.create(primitives, [selfKeypair])\n const signatureKeysManager = new FakeSignatureKeysManager(primitives)\n const baseExchangeData = new BaseExchangeDataManager(exchangeDataApi, dataOwnerApi, primitives, !explicitSelf)\n exchangeData = await initialiseExchangeDataManagerForCurrentDataOwner(\n baseExchangeData,\n encryptionKeysManager,\n signatureKeysManager,\n accessControlSecretUtils,\n cryptoStrategies,\n dataOwnerApi,\n primitives,\n true\n )\n exchangeDataMapManager = new FakeExchangeDataMapManager()\n secureDelegationsEncryption = new SecureDelegationsEncryption(encryptionKeysManager, primitives)\n decryptor = new SecureDelegationsSecurityMetadataDecryptor(exchangeData, exchangeDataMapManager, secureDelegationsEncryption, dataOwnerApi)\n manager = new SecureDelegationsManager(\n exchangeData,\n exchangeDataMapManager,\n secureDelegationsEncryption,\n accessControlSecretUtils,\n encryptionKeysManager,\n primitives,\n dataOwnerApi,\n cryptoStrategies,\n !explicitSelf\n )\n }\n\n it('should make a share request which will create a decryptable secure delegation.', async function () {\n async function doTest(explicitSelf: boolean, explicitDelegate: boolean) {\n await initialiseComponents(explicitSelf, explicitDelegate)\n const secretIds = [ua2hex(primitives.randomBytes(16)), ua2hex(primitives.randomBytes(16))]\n const encryptionKeys = [ua2hex(primitives.randomBytes(16))]\n const owningEntityIds = [ua2hex(primitives.randomBytes(16)), ua2hex(primitives.randomBytes(16)), ua2hex(primitives.randomBytes(16))]\n const entityType = EntityWithDelegationTypeName.Patient\n const shareOrUpdateParams = await manager.makeShareOrUpdateRequestParams(\n { entity: { secretForeignKeys: [] }, type: entityType },\n delegateId,\n secretIds,\n encryptionKeys,\n owningEntityIds,\n EntityShareRequest.RequestedPermissionEnum.MAX_WRITE\n )\n expect(shareOrUpdateParams).to.not.be.undefined\n expect(shareOrUpdateParams!.update).to.be.undefined\n expect(shareOrUpdateParams!.share).to.not.be.undefined\n const shareParams = shareOrUpdateParams!.share!\n expect(shareParams.accessControlKeys).to.have.length(1)\n if (explicitSelf && explicitDelegate) {\n expect(shareParams.exchangeDataId).to.not.be.undefined\n expect(Object.entries(shareParams.encryptedExchangeDataId ?? {})).to.have.length(0)\n } else if (explicitSelf && !explicitDelegate) {\n expect(shareParams.exchangeDataId).to.be.undefined\n expect(Object.entries(shareParams.encryptedExchangeDataId ?? {})).to.have.length(1)\n expect(shareParams.encryptedExchangeDataId![fingerprintV1toV2(selfKeyFp)]).to.not.be.undefined\n } else if (!explicitSelf && explicitDelegate) {\n expect(shareParams.exchangeDataId).to.be.undefined\n expect(Object.entries(shareParams.encryptedExchangeDataId ?? {})).to.have.length(1)\n expect(shareParams.encryptedExchangeDataId![delegateKeyFp]).to.not.be.undefined\n } else {\n expect(shareParams.exchangeDataId).to.be.undefined\n expect(Object.entries(shareParams.encryptedExchangeDataId ?? {})).to.have.length(0)\n }\n const secDelKey = ua2hex(await primitives.sha256(hex2ua(shareParams.accessControlKeys[0])))\n const fakeEntity: { entity: EncryptedEntityStub; type: EntityWithDelegationTypeName } = {\n entity: {\n secretForeignKeys: [],\n securityMetadata: new SecurityMetadata({\n secureDelegations: {\n [secDelKey]: new SecureDelegation({\n delegator: shareParams.explicitDelegator,\n delegate: shareParams.explicitDelegate,\n secretIds: shareParams.secretIds,\n encryptionKeys: shareParams.encryptionKeys,\n owningEntityIds: shareParams.owningEntityIds,\n exchangeDataId: shareParams.exchangeDataId,\n encryptedExchangeDataId: shareParams.encryptedExchangeDataId,\n permissions: SecureDelegation.AccessLevelEnum.WRITE,\n }),\n },\n }),\n },\n type: EntityWithDelegationTypeName.Patient,\n }\n await exchangeDataMapManager.createExchangeDataMaps({ [secDelKey]: shareParams.encryptedExchangeDataId! })\n await exchangeData.clearOrRepopulateCache()\n const decryptedSecretIds = (await asyncGeneratorToArray(decryptor.decryptSecretIdsOf(fakeEntity, [selfId]))).map((x) => x.decrypted)\n const decryptedEncryptionKeys = (await asyncGeneratorToArray(decryptor.decryptEncryptionKeysOf(fakeEntity, [selfId]))).map((x) => x.decrypted)\n const decryptedOwningEntityIds = (await asyncGeneratorToArray(decryptor.decryptOwningEntityIdsOf(fakeEntity, [selfId]))).map((x) => x.decrypted)\n expect(decryptedSecretIds).to.have.length(secretIds.length)\n for (const secretId of secretIds) {\n expect(decryptedSecretIds).to.include(secretId)\n }\n expect(decryptedEncryptionKeys).to.have.length(encryptionKeys.length)\n for (const encryptionKey of encryptionKeys) {\n expect(decryptedEncryptionKeys).to.include(encryptionKey)\n }\n expect(decryptedOwningEntityIds).to.have.length(owningEntityIds.length)\n for (const owningEntityId of owningEntityIds) {\n expect(decryptedOwningEntityIds).to.include(owningEntityId)\n }\n }\n console.log('Patient->Patient')\n await doTest(false, false)\n console.log('Hcp->Patient')\n await doTest(true, false)\n console.log('Patient->Hcp')\n await doTest(false, true)\n console.log('Hcp->Hcp')\n await doTest(true, true)\n })\n\n it('should make an update request which the missing entries for existing secure delegations.', async function () {\n async function doTest(makeAccessibleFromAlias: boolean) {\n await initialiseComponents(false, false)\n const canonicalSfk = primitives.randomUuid()\n const aliasSfk = primitives.randomUuid()\n const exchangeDataInfo = await exchangeData.getOrCreateEncryptionDataTo(delegateId, EntityWithDelegationTypeName.Patient, [], false)\n const canonicalKey = await accessControlSecretUtils.secureDelegationKeyFor(\n exchangeDataInfo.accessControlSecret,\n EntityWithDelegationTypeName.Patient,\n canonicalSfk\n )\n const aliasKey = await accessControlSecretUtils.secureDelegationKeyFor(\n exchangeDataInfo.accessControlSecret,\n EntityWithDelegationTypeName.Patient,\n aliasSfk\n )\n const existingSecretIds = [ua2hex(primitives.randomBytes(16))]\n const newSecretIds = [ua2hex(primitives.randomBytes(16))]\n const existingEncryptionKeys: string[] = []\n const newEncryptionKeys = [ua2hex(primitives.randomBytes(16))]\n const existingOwningEntityIds = [ua2hex(primitives.randomBytes(16))]\n const newOwningEntityIds: string[] = []\n const fakeEntity: { entity: EncryptedEntityStub; type: EntityWithDelegationTypeName } = {\n entity: {\n secretForeignKeys: makeAccessibleFromAlias ? [aliasSfk] : [canonicalSfk],\n securityMetadata: new SecurityMetadata({\n secureDelegations: {\n [canonicalKey]: new SecureDelegation({\n delegator: selfId,\n delegate: selfId,\n secretIds: await secureDelegationsEncryption.encryptSecretIds(existingSecretIds, exchangeDataInfo.exchangeKey),\n encryptionKeys: await secureDelegationsEncryption.encryptEncryptionKeys(existingEncryptionKeys, exchangeDataInfo.exchangeKey),\n owningEntityIds: await secureDelegationsEncryption.encryptOwningEntityIds(existingOwningEntityIds, exchangeDataInfo.exchangeKey),\n permissions: SecureDelegation.AccessLevelEnum.WRITE,\n }),\n },\n keysEquivalences: { [aliasKey]: canonicalKey },\n }),\n },\n type: EntityWithDelegationTypeName.Patient,\n }\n const shareOrUpdateParams = await manager.makeShareOrUpdateRequestParams(\n fakeEntity,\n delegateId,\n [...existingSecretIds, ...newSecretIds],\n [...existingEncryptionKeys, ...newEncryptionKeys],\n [...existingOwningEntityIds, ...newOwningEntityIds],\n RequestedPermissionEnum.MAX_WRITE\n )\n expect(shareOrUpdateParams).to.not.be.undefined\n expect(shareOrUpdateParams!.share).to.be.undefined\n expect(shareOrUpdateParams!.update).to.not.be.undefined\n const updateParams = shareOrUpdateParams!.update!\n expect(updateParams.metadataAccessControlHash).to.equal(canonicalKey)\n expect(Object.keys(updateParams.secretIds ?? {})).to.have.length(newSecretIds.length)\n for (const [secretId, updateType] of Object.entries(updateParams.secretIds ?? {})) {\n expect(updateType).to.equal(EntryUpdateTypeEnum.CREATE)\n expect(newSecretIds).to.contain(await secureDelegationsEncryption.decryptSecretId(secretId, exchangeDataInfo.exchangeKey))\n }\n expect(Object.keys(updateParams.encryptionKeys ?? {})).to.have.length(newEncryptionKeys.length)\n for (const [encryptionKey, updateType] of Object.entries(updateParams.encryptionKeys ?? {})) {\n expect(updateType).to.equal(EntryUpdateTypeEnum.CREATE)\n expect(newEncryptionKeys).to.contain(await secureDelegationsEncryption.decryptEncryptionKey(encryptionKey, exchangeDataInfo.exchangeKey))\n }\n expect(Object.keys(updateParams.owningEntityIds ?? {})).to.have.length(newOwningEntityIds.length)\n for (const [owningEntityId, updateType] of Object.entries(updateParams.owningEntityIds ?? {})) {\n expect(updateType).to.equal(EntryUpdateTypeEnum.CREATE)\n expect(newOwningEntityIds).to.contain(await secureDelegationsEncryption.decryptOwningEntityId(owningEntityId, exchangeDataInfo.exchangeKey))\n }\n }\n await doTest(true)\n await doTest(false)\n })\n\n it('should return undefined for existing secure delegations if it contains all entries.', async function () {\n await initialiseComponents(false, false)\n const canonicalSfk = primitives.randomUuid()\n const exchangeDataInfo = await exchangeData.getOrCreateEncryptionDataTo(delegateId, EntityWithDelegationTypeName.Patient, [], false)\n const canonicalKey = await accessControlSecretUtils.secureDelegationKeyFor(\n exchangeDataInfo.accessControlSecret,\n EntityWithDelegationTypeName.Patient,\n canonicalSfk\n )\n const existingSecretIds = [ua2hex(primitives.randomBytes(16))]\n const existingEncryptionKeys: string[] = []\n const existingOwningEntityIds = [ua2hex(primitives.randomBytes(16))]\n const fakeEntity: { entity: EncryptedEntityStub; type: EntityWithDelegationTypeName } = {\n entity: {\n secretForeignKeys: [canonicalSfk],\n securityMetadata: new SecurityMetadata({\n secureDelegations: {\n [canonicalKey]: new SecureDelegation({\n delegator: selfId,\n delegate: selfId,\n secretIds: await secureDelegationsEncryption.encryptSecretIds(existingSecretIds, exchangeDataInfo.exchangeKey),\n encryptionKeys: await secureDelegationsEncryption.encryptEncryptionKeys(existingEncryptionKeys, exchangeDataInfo.exchangeKey),\n owningEntityIds: await secureDelegationsEncryption.encryptOwningEntityIds(existingOwningEntityIds, exchangeDataInfo.exchangeKey),\n permissions: SecureDelegation.AccessLevelEnum.WRITE,\n }),\n },\n }),\n },\n type: EntityWithDelegationTypeName.Patient,\n }\n const shareOrUpdateParams = await manager.makeShareOrUpdateRequestParams(\n fakeEntity,\n delegateId,\n [...existingSecretIds],\n [...existingEncryptionKeys],\n [...existingOwningEntityIds],\n RequestedPermissionEnum.MAX_WRITE\n )\n expect(shareOrUpdateParams).to.be.undefined\n })\n})\n"]}
@@ -28,7 +28,7 @@ const FakeExchangeDataMapManager_1 = require("../../utils/FakeExchangeDataMapMan
28
28
  var AccessLevel = SecureDelegation_1.SecureDelegation.AccessLevelEnum;
29
29
  (0, mocha_1.describe)('Secure delegations security metadata decryptor', function () {
30
30
  return __awaiter(this, void 0, void 0, function* () {
31
- const primitives = new CryptoPrimitives_1.CryptoPrimitives(crypto_1.webcrypto);
31
+ const primitives = new CryptoPrimitives_1.WebCryptoPrimitives(crypto_1.webcrypto);
32
32
  const expectedType = EntityWithDelegationTypeName_1.EntityWithDelegationTypeName.AccessLog;
33
33
  const expectedSfks = [primitives.randomUuid(), primitives.randomUuid()];
34
34
  let encryptionKeysManager;
@@ -52,7 +52,7 @@ var AccessLevel = SecureDelegation_1.SecureDelegation.AccessLevelEnum;
52
52
  function initialiseComponents() {
53
53
  return __awaiter(this, void 0, void 0, function* () {
54
54
  encryptionKeysManager = yield FakeEncryptionKeysManager_1.FakeEncryptionKeysManager.create(primitives, [], [yield primitives.RSA.generateKeyPair(icc_x_api_1.ShaVersion.Sha256)]);
55
- exchangeData = new FakeExchangeDataManager_1.FakeDecryptionExchangeDataManager(expectedType, expectedSfks, new CryptoPrimitives_1.CryptoPrimitives(crypto_1.webcrypto));
55
+ exchangeData = new FakeExchangeDataManager_1.FakeDecryptionExchangeDataManager(expectedType, expectedSfks, new CryptoPrimitives_1.WebCryptoPrimitives(crypto_1.webcrypto));
56
56
  exchangeDataMap = new FakeExchangeDataMapManager_1.FakeExchangeDataMapManager();
57
57
  secureDelegationsEncryption = new SecureDelegationsEncryption_1.SecureDelegationsEncryption(encryptionKeysManager, primitives);
58
58
  decryptor = new SecureDelegationsSecurityMetadataDecryptor_1.SecureDelegationsSecurityMetadataDecryptor(exchangeData, exchangeDataMap, secureDelegationsEncryption, undefined); // data owner api not used in these tests