@sudoplatform/sudo-common 7.0.1 → 7.1.3

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 (315) hide show
  1. package/lib/configurationManager/defaultConfigurationManager.js +3 -5
  2. package/lib/sudoKeyManager/sudoCryptoProvider.d.ts +0 -16
  3. package/lib/sudoKeyManager/sudoKeyManager.d.ts +0 -18
  4. package/lib/sudoKeyManager/sudoKeyManager.js +2 -10
  5. package/lib/utils/base64.d.ts +35 -0
  6. package/lib/utils/base64.js +65 -0
  7. package/package.json +3 -4
  8. package/.babelrc +0 -10
  9. package/.eslintrc.js +0 -91
  10. package/.gitignore +0 -14
  11. package/.gitlab-ci.yml +0 -101
  12. package/.npmignore +0 -1
  13. package/.prettierignore +0 -3
  14. package/.prettierrc.js +0 -7
  15. package/.publisher.json +0 -7
  16. package/.vscode/settings.json +0 -5
  17. package/.yarn/releases/yarn-1.22.19.cjs +0 -147529
  18. package/.yarnrc +0 -5
  19. package/bin/outdated-with-suppression.sh +0 -203
  20. package/bin/suppress-audit.sh +0 -15
  21. package/bin/suppress-outdated.sh +0 -60
  22. package/bin/yarn-audit-with-suppression.sh +0 -19
  23. package/dependencies-report.json +0 -640
  24. package/docs/.nojekyll +0 -1
  25. package/docs/assets/highlight.css +0 -57
  26. package/docs/assets/main.js +0 -54
  27. package/docs/assets/search.js +0 -1
  28. package/docs/assets/style.css +0 -1224
  29. package/docs/assets/widgets.png +0 -0
  30. package/docs/assets/widgets@2x.png +0 -0
  31. package/docs/classes/AccountLockedError.html +0 -163
  32. package/docs/classes/AuthenticationError.html +0 -169
  33. package/docs/classes/Base64.html +0 -134
  34. package/docs/classes/Buffer.html +0 -158
  35. package/docs/classes/ConfigurationNotSetError.html +0 -164
  36. package/docs/classes/ConfigurationSetNotFoundError.html +0 -168
  37. package/docs/classes/DecodeError.html +0 -168
  38. package/docs/classes/DefaultConfigurationManager.html +0 -213
  39. package/docs/classes/DefaultLogger.html +0 -291
  40. package/docs/classes/DefaultSudoKeyArchive.html +0 -363
  41. package/docs/classes/DefaultSudoKeyManager.html +0 -858
  42. package/docs/classes/FatalError.html +0 -169
  43. package/docs/classes/IllegalArgumentError.html +0 -168
  44. package/docs/classes/IllegalStateError.html +0 -169
  45. package/docs/classes/InsufficientEntitlementsError.html +0 -164
  46. package/docs/classes/InvalidOwnershipProofError.html +0 -163
  47. package/docs/classes/InvalidTokenError.html +0 -163
  48. package/docs/classes/KeyArchiveDecodingError.html +0 -168
  49. package/docs/classes/KeyArchiveIncorrectPasswordError.html +0 -168
  50. package/docs/classes/KeyArchiveMissingError.html +0 -168
  51. package/docs/classes/KeyArchiveNoPasswordRequiredError.html +0 -168
  52. package/docs/classes/KeyArchivePasswordRequiredError.html +0 -168
  53. package/docs/classes/KeyArchiveTypeError.html +0 -168
  54. package/docs/classes/KeyArchiveUnknownKeyTypeError.html +0 -168
  55. package/docs/classes/KeyArchiveVersionError.html +0 -168
  56. package/docs/classes/KeyNotFoundError.html +0 -168
  57. package/docs/classes/KeyStoreNotExportableError.html +0 -168
  58. package/docs/classes/LimitExceededError.html +0 -164
  59. package/docs/classes/NoEntitlementsError.html +0 -163
  60. package/docs/classes/NotAuthorizedError.html +0 -169
  61. package/docs/classes/NotRegisteredError.html +0 -168
  62. package/docs/classes/NotSignedInError.html +0 -164
  63. package/docs/classes/OperationNotImplementedError.html +0 -168
  64. package/docs/classes/RegisterError.html +0 -169
  65. package/docs/classes/RequestFailedError.html +0 -189
  66. package/docs/classes/ServiceError.html +0 -170
  67. package/docs/classes/SignOutError.html +0 -168
  68. package/docs/classes/SudoCryptoProviderDefaults.html +0 -106
  69. package/docs/classes/UnknownGraphQLError.html +0 -169
  70. package/docs/classes/UnrecognizedAlgorithmError.html +0 -168
  71. package/docs/classes/UserNotConfirmedError.html +0 -164
  72. package/docs/classes/VersionMismatchError.html +0 -166
  73. package/docs/enums/CachePolicy.html +0 -72
  74. package/docs/enums/EncryptionAlgorithm.html +0 -80
  75. package/docs/enums/KeyArchiveKeyType.html +0 -86
  76. package/docs/enums/KeyDataKeyFormat.html +0 -92
  77. package/docs/enums/KeyDataKeyType.html +0 -85
  78. package/docs/enums/ListOperationResultStatus.html +0 -85
  79. package/docs/enums/PublicKeyFormat.html +0 -68
  80. package/docs/functions/isAppSyncNetworkError.html +0 -147
  81. package/docs/functions/isInsecureKeyArchive.html +0 -147
  82. package/docs/functions/isSecureKeyArchive.html +0 -147
  83. package/docs/functions/isUnrecognizedKeyArchive.html +0 -147
  84. package/docs/functions/keyArchiveInfoFromKeyData.html +0 -147
  85. package/docs/functions/keyArchiveKeyTypeFromKeyDataKeyType.html +0 -147
  86. package/docs/functions/mapGraphQLToClientError.html +0 -154
  87. package/docs/functions/mapNetworkErrorToClientError.html +0 -154
  88. package/docs/index.html +0 -146
  89. package/docs/interfaces/AsymmetricEncryptionOptions.html +0 -68
  90. package/docs/interfaces/BooleanFilter.html +0 -75
  91. package/docs/interfaces/ConfigurationManager.html +0 -200
  92. package/docs/interfaces/KeyData.html +0 -106
  93. package/docs/interfaces/ListOperationFailureResult.html +0 -76
  94. package/docs/interfaces/ListOperationPartialResult.html +0 -102
  95. package/docs/interfaces/ListOperationSuccessResult.html +0 -90
  96. package/docs/interfaces/ListOutput.html +0 -80
  97. package/docs/interfaces/Logger.html +0 -251
  98. package/docs/interfaces/Owner.html +0 -72
  99. package/docs/interfaces/PublicKey.html +0 -72
  100. package/docs/interfaces/ServiceCompatibilityInfo.html +0 -110
  101. package/docs/interfaces/StringFilter.html +0 -82
  102. package/docs/interfaces/SudoCryptoProvider.html +0 -907
  103. package/docs/interfaces/SudoKeyArchive.html +0 -257
  104. package/docs/interfaces/SudoKeyManager.html +0 -890
  105. package/docs/interfaces/SymmetricEncryptionOptions.html +0 -75
  106. package/docs/interfaces/ValidationResult.html +0 -83
  107. package/docs/modules.html +0 -248
  108. package/docs/types/AppSyncError.html +0 -138
  109. package/docs/types/AppSyncNetworkError.html +0 -138
  110. package/docs/types/InsecureKeyArchive.html +0 -138
  111. package/docs/types/KeyArchive.html +0 -138
  112. package/docs/types/KeyArchiveKeyInfo.html +0 -154
  113. package/docs/types/KeyArchiveKeyInfoDecoded.html +0 -138
  114. package/docs/types/ListOperationResult.html +0 -148
  115. package/docs/types/SecureKeyArchive.html +0 -138
  116. package/docs/types/Subset.html +0 -144
  117. package/docs/types/UnrecognizedKeyArchive.html +0 -138
  118. package/docs/variables/CURRENT_ARCHIVE_VERSION.html +0 -138
  119. package/docs/variables/InsecureKeyArchiveCodec.html +0 -138
  120. package/docs/variables/InsecureKeyArchiveType.html +0 -138
  121. package/docs/variables/KeyArchiveCodec.html +0 -138
  122. package/docs/variables/KeyArchiveKeyInfoArrayCodec.html +0 -138
  123. package/docs/variables/KeyArchiveKeyInfoCodec.html +0 -138
  124. package/docs/variables/KeyArchiveKeyTypeCodec.html +0 -138
  125. package/docs/variables/SecureKeyArchiveCodec.html +0 -138
  126. package/docs/variables/SecureKeyArchiveType.html +0 -138
  127. package/docs/variables/UnrecognizedKeyArchiveCodec.html +0 -138
  128. package/github/.babelrc +0 -10
  129. package/github/.eslintrc.js +0 -91
  130. package/github/.gitignore +0 -14
  131. package/github/.gitlab-ci.yml +0 -101
  132. package/github/.npmignore +0 -1
  133. package/github/.prettierignore +0 -3
  134. package/github/.prettierrc.js +0 -7
  135. package/github/.publisher.json +0 -7
  136. package/github/.vscode/settings.json +0 -5
  137. package/github/.yarn/releases/yarn-1.22.19.cjs +0 -147529
  138. package/github/.yarnrc +0 -5
  139. package/github/CHANGELOG.md +0 -51
  140. package/github/README.md +0 -8
  141. package/github/bin/outdated-with-suppression.sh +0 -203
  142. package/github/bin/suppress-audit.sh +0 -15
  143. package/github/bin/suppress-outdated.sh +0 -60
  144. package/github/bin/yarn-audit-with-suppression.sh +0 -19
  145. package/github/docs/.nojekyll +0 -1
  146. package/github/docs/assets/highlight.css +0 -57
  147. package/github/docs/assets/main.js +0 -54
  148. package/github/docs/assets/search.js +0 -1
  149. package/github/docs/assets/style.css +0 -1224
  150. package/github/docs/assets/widgets.png +0 -0
  151. package/github/docs/assets/widgets@2x.png +0 -0
  152. package/github/docs/classes/AccountLockedError.html +0 -163
  153. package/github/docs/classes/AuthenticationError.html +0 -169
  154. package/github/docs/classes/Base64.html +0 -134
  155. package/github/docs/classes/Buffer.html +0 -158
  156. package/github/docs/classes/ConfigurationNotSetError.html +0 -164
  157. package/github/docs/classes/ConfigurationSetNotFoundError.html +0 -168
  158. package/github/docs/classes/DecodeError.html +0 -168
  159. package/github/docs/classes/DefaultConfigurationManager.html +0 -213
  160. package/github/docs/classes/DefaultLogger.html +0 -291
  161. package/github/docs/classes/DefaultSudoKeyArchive.html +0 -363
  162. package/github/docs/classes/DefaultSudoKeyManager.html +0 -858
  163. package/github/docs/classes/FatalError.html +0 -169
  164. package/github/docs/classes/IllegalArgumentError.html +0 -168
  165. package/github/docs/classes/IllegalStateError.html +0 -169
  166. package/github/docs/classes/InsufficientEntitlementsError.html +0 -164
  167. package/github/docs/classes/InvalidOwnershipProofError.html +0 -163
  168. package/github/docs/classes/InvalidTokenError.html +0 -163
  169. package/github/docs/classes/KeyArchiveDecodingError.html +0 -168
  170. package/github/docs/classes/KeyArchiveIncorrectPasswordError.html +0 -168
  171. package/github/docs/classes/KeyArchiveMissingError.html +0 -168
  172. package/github/docs/classes/KeyArchiveNoPasswordRequiredError.html +0 -168
  173. package/github/docs/classes/KeyArchivePasswordRequiredError.html +0 -168
  174. package/github/docs/classes/KeyArchiveTypeError.html +0 -168
  175. package/github/docs/classes/KeyArchiveUnknownKeyTypeError.html +0 -168
  176. package/github/docs/classes/KeyArchiveVersionError.html +0 -168
  177. package/github/docs/classes/KeyNotFoundError.html +0 -168
  178. package/github/docs/classes/KeyStoreNotExportableError.html +0 -168
  179. package/github/docs/classes/LimitExceededError.html +0 -164
  180. package/github/docs/classes/NoEntitlementsError.html +0 -163
  181. package/github/docs/classes/NotAuthorizedError.html +0 -169
  182. package/github/docs/classes/NotRegisteredError.html +0 -168
  183. package/github/docs/classes/NotSignedInError.html +0 -164
  184. package/github/docs/classes/OperationNotImplementedError.html +0 -168
  185. package/github/docs/classes/RegisterError.html +0 -169
  186. package/github/docs/classes/RequestFailedError.html +0 -189
  187. package/github/docs/classes/ServiceError.html +0 -170
  188. package/github/docs/classes/SignOutError.html +0 -168
  189. package/github/docs/classes/SudoCryptoProviderDefaults.html +0 -106
  190. package/github/docs/classes/UnknownGraphQLError.html +0 -169
  191. package/github/docs/classes/UnrecognizedAlgorithmError.html +0 -168
  192. package/github/docs/classes/UserNotConfirmedError.html +0 -164
  193. package/github/docs/classes/VersionMismatchError.html +0 -166
  194. package/github/docs/enums/CachePolicy.html +0 -72
  195. package/github/docs/enums/EncryptionAlgorithm.html +0 -80
  196. package/github/docs/enums/KeyArchiveKeyType.html +0 -86
  197. package/github/docs/enums/KeyDataKeyFormat.html +0 -92
  198. package/github/docs/enums/KeyDataKeyType.html +0 -85
  199. package/github/docs/enums/ListOperationResultStatus.html +0 -85
  200. package/github/docs/enums/PublicKeyFormat.html +0 -68
  201. package/github/docs/functions/isAppSyncNetworkError.html +0 -147
  202. package/github/docs/functions/isInsecureKeyArchive.html +0 -147
  203. package/github/docs/functions/isSecureKeyArchive.html +0 -147
  204. package/github/docs/functions/isUnrecognizedKeyArchive.html +0 -147
  205. package/github/docs/functions/keyArchiveInfoFromKeyData.html +0 -147
  206. package/github/docs/functions/keyArchiveKeyTypeFromKeyDataKeyType.html +0 -147
  207. package/github/docs/functions/mapGraphQLToClientError.html +0 -154
  208. package/github/docs/functions/mapNetworkErrorToClientError.html +0 -154
  209. package/github/docs/index.html +0 -146
  210. package/github/docs/interfaces/AsymmetricEncryptionOptions.html +0 -68
  211. package/github/docs/interfaces/BooleanFilter.html +0 -75
  212. package/github/docs/interfaces/ConfigurationManager.html +0 -200
  213. package/github/docs/interfaces/KeyData.html +0 -106
  214. package/github/docs/interfaces/ListOperationFailureResult.html +0 -76
  215. package/github/docs/interfaces/ListOperationPartialResult.html +0 -102
  216. package/github/docs/interfaces/ListOperationSuccessResult.html +0 -90
  217. package/github/docs/interfaces/ListOutput.html +0 -80
  218. package/github/docs/interfaces/Logger.html +0 -251
  219. package/github/docs/interfaces/Owner.html +0 -72
  220. package/github/docs/interfaces/PublicKey.html +0 -72
  221. package/github/docs/interfaces/ServiceCompatibilityInfo.html +0 -110
  222. package/github/docs/interfaces/StringFilter.html +0 -82
  223. package/github/docs/interfaces/SudoCryptoProvider.html +0 -907
  224. package/github/docs/interfaces/SudoKeyArchive.html +0 -257
  225. package/github/docs/interfaces/SudoKeyManager.html +0 -890
  226. package/github/docs/interfaces/SymmetricEncryptionOptions.html +0 -75
  227. package/github/docs/interfaces/ValidationResult.html +0 -83
  228. package/github/docs/modules.html +0 -248
  229. package/github/docs/types/AppSyncError.html +0 -138
  230. package/github/docs/types/AppSyncNetworkError.html +0 -138
  231. package/github/docs/types/InsecureKeyArchive.html +0 -138
  232. package/github/docs/types/KeyArchive.html +0 -138
  233. package/github/docs/types/KeyArchiveKeyInfo.html +0 -154
  234. package/github/docs/types/KeyArchiveKeyInfoDecoded.html +0 -138
  235. package/github/docs/types/ListOperationResult.html +0 -148
  236. package/github/docs/types/SecureKeyArchive.html +0 -138
  237. package/github/docs/types/Subset.html +0 -144
  238. package/github/docs/types/UnrecognizedKeyArchive.html +0 -138
  239. package/github/docs/variables/CURRENT_ARCHIVE_VERSION.html +0 -138
  240. package/github/docs/variables/InsecureKeyArchiveCodec.html +0 -138
  241. package/github/docs/variables/InsecureKeyArchiveType.html +0 -138
  242. package/github/docs/variables/KeyArchiveCodec.html +0 -138
  243. package/github/docs/variables/KeyArchiveKeyInfoArrayCodec.html +0 -138
  244. package/github/docs/variables/KeyArchiveKeyInfoCodec.html +0 -138
  245. package/github/docs/variables/KeyArchiveKeyTypeCodec.html +0 -138
  246. package/github/docs/variables/SecureKeyArchiveCodec.html +0 -138
  247. package/github/docs/variables/SecureKeyArchiveType.html +0 -138
  248. package/github/docs/variables/UnrecognizedKeyArchiveCodec.html +0 -138
  249. package/github/jest.config.json +0 -14
  250. package/github/package.json +0 -91
  251. package/github/src/configurationManager/defaultConfigurationManager.ts +0 -281
  252. package/github/src/errors/error.ts +0 -469
  253. package/github/src/index.ts +0 -8
  254. package/github/src/logging/bunyanLogger.ts +0 -47
  255. package/github/src/logging/logger.ts +0 -164
  256. package/github/src/sudoKeyArchive/index.ts +0 -4
  257. package/github/src/sudoKeyArchive/keyArchive.ts +0 -120
  258. package/github/src/sudoKeyArchive/keyInfo.ts +0 -47
  259. package/github/src/sudoKeyArchive/keyType.ts +0 -50
  260. package/github/src/sudoKeyArchive/sudoKeyArchive.ts +0 -591
  261. package/github/src/sudoKeyManager/index.ts +0 -4
  262. package/github/src/sudoKeyManager/keyData.ts +0 -60
  263. package/github/src/sudoKeyManager/publicKey.ts +0 -9
  264. package/github/src/sudoKeyManager/sudoCryptoProvider.ts +0 -434
  265. package/github/src/sudoKeyManager/sudoKeyManager.ts +0 -635
  266. package/github/src/types/types.ts +0 -129
  267. package/github/src/utils/base64.ts +0 -21
  268. package/github/src/utils/buffer.ts +0 -39
  269. package/github/test/integration/defaultConfigurationManager.spec.ts +0 -85
  270. package/github/test/matchers.ts +0 -122
  271. package/github/test/unit/configurationManager/defaultConfigurationManager.spec.ts +0 -506
  272. package/github/test/unit/errors/error.spec.ts +0 -115
  273. package/github/test/unit/keyType.spec.ts +0 -54
  274. package/github/test/unit/logging/logger.spec.ts +0 -182
  275. package/github/test/unit/sudoKeyArchive.spec.ts +0 -1609
  276. package/github/test/unit/sudoKeyManager.spec.ts +0 -1086
  277. package/github/test/unit/utils/base64.spec.ts +0 -30
  278. package/github/test/unit/utils/buffer.spec.ts +0 -45
  279. package/github/test/unit/utils/listOperationResult.spec.ts +0 -84
  280. package/github/tsconfig.json +0 -20
  281. package/github/tsconfig.test.json +0 -7
  282. package/github/yarn.lock +0 -5922
  283. package/jest.config.json +0 -14
  284. package/src/configurationManager/defaultConfigurationManager.ts +0 -281
  285. package/src/errors/error.ts +0 -469
  286. package/src/index.ts +0 -8
  287. package/src/logging/bunyanLogger.ts +0 -47
  288. package/src/logging/logger.ts +0 -164
  289. package/src/sudoKeyArchive/index.ts +0 -4
  290. package/src/sudoKeyArchive/keyArchive.ts +0 -120
  291. package/src/sudoKeyArchive/keyInfo.ts +0 -47
  292. package/src/sudoKeyArchive/keyType.ts +0 -50
  293. package/src/sudoKeyArchive/sudoKeyArchive.ts +0 -591
  294. package/src/sudoKeyManager/index.ts +0 -4
  295. package/src/sudoKeyManager/keyData.ts +0 -60
  296. package/src/sudoKeyManager/publicKey.ts +0 -9
  297. package/src/sudoKeyManager/sudoCryptoProvider.ts +0 -434
  298. package/src/sudoKeyManager/sudoKeyManager.ts +0 -635
  299. package/src/types/types.ts +0 -129
  300. package/src/utils/base64.ts +0 -21
  301. package/src/utils/buffer.ts +0 -39
  302. package/test/integration/defaultConfigurationManager.spec.ts +0 -85
  303. package/test/matchers.ts +0 -122
  304. package/test/unit/configurationManager/defaultConfigurationManager.spec.ts +0 -506
  305. package/test/unit/errors/error.spec.ts +0 -115
  306. package/test/unit/keyType.spec.ts +0 -54
  307. package/test/unit/logging/logger.spec.ts +0 -182
  308. package/test/unit/sudoKeyArchive.spec.ts +0 -1609
  309. package/test/unit/sudoKeyManager.spec.ts +0 -1086
  310. package/test/unit/utils/base64.spec.ts +0 -30
  311. package/test/unit/utils/buffer.spec.ts +0 -45
  312. package/test/unit/utils/listOperationResult.spec.ts +0 -84
  313. package/tsconfig.json +0 -20
  314. package/tsconfig.test.json +0 -7
  315. package/yarn.lock +0 -5922
@@ -1,1086 +0,0 @@
1
- import {
2
- anything,
3
- capture,
4
- instance,
5
- mock,
6
- reset,
7
- verify,
8
- when,
9
- } from 'ts-mockito'
10
- import {
11
- KeyData,
12
- KeyDataKeyFormat,
13
- KeyDataKeyType,
14
- } from '../../src/sudoKeyManager/keyData'
15
- import { PublicKey, PublicKeyFormat } from '../../src/sudoKeyManager/publicKey'
16
- import { SudoCryptoProvider } from '../../src/sudoKeyManager/sudoCryptoProvider'
17
- import { DefaultSudoKeyManager } from '../../src/sudoKeyManager/sudoKeyManager'
18
- import { EncryptionAlgorithm } from '../../src/types/types'
19
- import { Buffer as BufferUtil } from '../../src/utils/buffer'
20
-
21
- const sudoCryptoProviderMock: SudoCryptoProvider = mock()
22
-
23
- const sudoKeyManager = new DefaultSudoKeyManager(
24
- instance(sudoCryptoProviderMock),
25
- )
26
-
27
- afterEach(() => {
28
- reset(sudoCryptoProviderMock)
29
- })
30
-
31
- describe('DefaultSudoKeyManager', () => {
32
- const encrypted = BufferUtil.fromString('encrypted')
33
- const iv = BufferUtil.fromString('iv')
34
- const salt = BufferUtil.fromString('salt')
35
- const decrypted = BufferUtil.fromString('decrypted')
36
- const symmetricKey = BufferUtil.fromString('14A9B3C3540142A11E70ACBB1BD8969F')
37
- const hash = BufferUtil.fromString('hash')
38
- const data = BufferUtil.fromString('data')
39
- const privateKey = BufferUtil.fromString('privateKey')
40
- const publicKey: PublicKey = {
41
- keyData: BufferUtil.fromString('publickey'),
42
- keyFormat: PublicKeyFormat.SPKI,
43
- }
44
- const password = BufferUtil.fromString('password')
45
- const serviceName = 'service-name'
46
- const namespace = 'name-space'
47
-
48
- beforeEach(() => {
49
- when(sudoCryptoProviderMock.getNamespace()).thenReturn(namespace)
50
- })
51
-
52
- describe('namespace', () => {
53
- it('calls provider correctly when accessing namespace', () => {
54
- when(sudoCryptoProviderMock.getNamespace()).thenReturn(namespace)
55
-
56
- expect(sudoKeyManager.namespace).toEqual(namespace)
57
-
58
- verify(sudoCryptoProviderMock.getNamespace()).once()
59
- })
60
- })
61
-
62
- describe('serviceName', () => {
63
- it('calls provider correctly when accessing service name', () => {
64
- when(sudoCryptoProviderMock.getServiceName()).thenReturn(serviceName)
65
-
66
- expect(sudoKeyManager.serviceName).toEqual(serviceName)
67
-
68
- verify(sudoCryptoProviderMock.getServiceName()).once()
69
- })
70
- })
71
-
72
- describe('addPassword', () => {
73
- it('calls provider correctly when adding password', async () => {
74
- when(
75
- sudoCryptoProviderMock.addPassword(anything(), anything()),
76
- ).thenResolve()
77
-
78
- await expect(
79
- sudoKeyManager.addPassword(password, 'VpnPassword'),
80
- ).resolves.toBeUndefined()
81
- const [actualPassword, actualKey] = capture(
82
- sudoCryptoProviderMock.addPassword,
83
- ).first()
84
- expect(actualPassword).toStrictEqual(password)
85
- expect(actualKey).toStrictEqual('VpnPassword')
86
-
87
- verify(sudoCryptoProviderMock.addPassword(anything(), anything())).once()
88
- })
89
- })
90
-
91
- describe('addSymmetricKey', () => {
92
- it('calls provider correctly when adding a symmetric key', async () => {
93
- when(
94
- sudoCryptoProviderMock.addSymmetricKey(anything(), anything()),
95
- ).thenResolve()
96
-
97
- await expect(
98
- sudoKeyManager.addSymmetricKey(symmetricKey, 'VpnSymmetric'),
99
- ).resolves.toBeUndefined()
100
- const [actualKey, actualKeyName] = capture(
101
- sudoCryptoProviderMock.addSymmetricKey,
102
- ).first()
103
- expect(actualKey).toStrictEqual(symmetricKey)
104
- expect(actualKeyName).toStrictEqual('VpnSymmetric')
105
-
106
- verify(
107
- sudoCryptoProviderMock.addSymmetricKey(anything(), anything()),
108
- ).once()
109
- })
110
- })
111
-
112
- describe('getPassword', () => {
113
- it('should call crypto provider getPassword', async () => {
114
- when(sudoCryptoProviderMock.getPassword(anything())).thenResolve(password)
115
-
116
- await expect(sudoKeyManager.getPassword('VpnPassword')).resolves.toEqual(
117
- password,
118
- )
119
-
120
- const [actualKey] = capture(sudoCryptoProviderMock.getPassword).first()
121
- expect(actualKey).toStrictEqual('VpnPassword')
122
-
123
- verify(sudoCryptoProviderMock.getPassword(anything())).once()
124
- })
125
- })
126
-
127
- describe('deletePassword', () => {
128
- it('should call crypto provider deletePassword', async () => {
129
- when(sudoCryptoProviderMock.deletePassword(anything())).thenResolve()
130
-
131
- await expect(
132
- sudoKeyManager.deletePassword('VpnPassword'),
133
- ).resolves.toBeUndefined()
134
- const [actualKey] = capture(sudoCryptoProviderMock.deletePassword).first()
135
- expect(actualKey).toStrictEqual('VpnPassword')
136
-
137
- verify(sudoCryptoProviderMock.deletePassword(anything())).once()
138
- })
139
- })
140
-
141
- describe('updatePassword', () => {
142
- it('should call crypto provider updatePassword', async () => {
143
- when(
144
- sudoCryptoProviderMock.updatePassword(anything(), anything()),
145
- ).thenResolve()
146
-
147
- await expect(
148
- sudoKeyManager.updatePassword(password, 'VpnPassword'),
149
- ).resolves.toBeUndefined()
150
- const [actualKey, actualKeyName] = capture(
151
- sudoCryptoProviderMock.updatePassword,
152
- ).first()
153
- expect(actualKeyName).toStrictEqual('VpnPassword')
154
- expect(actualKey).toStrictEqual(password)
155
-
156
- verify(
157
- sudoCryptoProviderMock.updatePassword(anything(), anything()),
158
- ).once()
159
- })
160
- })
161
-
162
- describe('getSymmetricKey', () => {
163
- it('should call crypto provider getSymmetricKey', async () => {
164
- when(sudoCryptoProviderMock.getSymmetricKey(anything())).thenResolve(
165
- symmetricKey,
166
- )
167
-
168
- await expect(sudoKeyManager.getSymmetricKey('VpnKey')).resolves.toEqual(
169
- symmetricKey,
170
- )
171
- const [actualKey] = capture(
172
- sudoCryptoProviderMock.getSymmetricKey,
173
- ).first()
174
- expect(actualKey).toStrictEqual('VpnKey')
175
-
176
- verify(sudoCryptoProviderMock.getSymmetricKey(anything())).once()
177
- })
178
- })
179
-
180
- describe('doesSymmetricKeyExist', () => {
181
- it('should call crypto provider doesSymmetricKeyExists', async () => {
182
- when(
183
- sudoCryptoProviderMock.doesSymmetricKeyExists(anything()),
184
- ).thenResolve(true)
185
-
186
- await expect(
187
- sudoKeyManager.doesSymmetricKeyExist('VpnKey'),
188
- ).resolves.toEqual(true)
189
- const [actualKey] = capture(
190
- sudoCryptoProviderMock.doesSymmetricKeyExists,
191
- ).first()
192
- expect(actualKey).toStrictEqual('VpnKey')
193
-
194
- verify(sudoCryptoProviderMock.doesSymmetricKeyExists(anything())).once()
195
- verify(sudoCryptoProviderMock.doesSymmetricKeyExist(anything())).never()
196
- })
197
- })
198
-
199
- describe('doesSymmetricKeyExists', () => {
200
- it('should call crypto provider doesSymmetricKeyExists', async () => {
201
- when(
202
- sudoCryptoProviderMock.doesSymmetricKeyExists(anything()),
203
- ).thenResolve(true)
204
-
205
- await expect(
206
- sudoKeyManager.doesSymmetricKeyExists('VpnKey'),
207
- ).resolves.toEqual(true)
208
- const [actualKey] = capture(
209
- sudoCryptoProviderMock.doesSymmetricKeyExists,
210
- ).first()
211
- expect(actualKey).toStrictEqual('VpnKey')
212
-
213
- verify(sudoCryptoProviderMock.doesSymmetricKeyExists(anything())).once()
214
- verify(sudoCryptoProviderMock.doesSymmetricKeyExist(anything())).never()
215
- })
216
- })
217
-
218
- describe('deleteSymmetricKey', () => {
219
- it('should call crypto provider deleteSymmetricKey', async () => {
220
- when(sudoCryptoProviderMock.deleteSymmetricKey(anything())).thenResolve()
221
-
222
- await expect(
223
- sudoKeyManager.deleteSymmetricKey('VpnKey'),
224
- ).resolves.toBeUndefined()
225
- const [actualKey] = capture(
226
- sudoCryptoProviderMock.deleteSymmetricKey,
227
- ).first()
228
- expect(actualKey).toStrictEqual('VpnKey')
229
-
230
- verify(sudoCryptoProviderMock.deleteSymmetricKey(anything())).once()
231
- })
232
- })
233
-
234
- describe('generateKeyPair', () => {
235
- it('should call crypto provider generateKeyPair', async () => {
236
- when(sudoCryptoProviderMock.generateKeyPair(anything())).thenResolve()
237
-
238
- await expect(
239
- sudoKeyManager.generateKeyPair('VpnKeyPair'),
240
- ).resolves.toBeUndefined()
241
- const [actualKey] = capture(
242
- sudoCryptoProviderMock.generateKeyPair,
243
- ).first()
244
- expect(actualKey).toStrictEqual('VpnKeyPair')
245
-
246
- verify(sudoCryptoProviderMock.generateKeyPair(anything())).once()
247
- })
248
- })
249
-
250
- describe('deleteKeyPair', () => {
251
- it('should call crypto provider deleteKeyPair', async () => {
252
- when(sudoCryptoProviderMock.deleteKeyPair(anything())).thenResolve()
253
-
254
- await expect(
255
- sudoKeyManager.deleteKeyPair('KeyPair'),
256
- ).resolves.toBeUndefined()
257
- const [actualKey] = capture(sudoCryptoProviderMock.deleteKeyPair).first()
258
- expect(actualKey).toStrictEqual('KeyPair')
259
-
260
- verify(sudoCryptoProviderMock.deleteKeyPair(anything())).once()
261
- })
262
- })
263
-
264
- describe('addPrivateKey', () => {
265
- it('should call crypto provider addPrivateKey', async () => {
266
- when(
267
- sudoCryptoProviderMock.addPrivateKey(anything(), anything()),
268
- ).thenResolve()
269
-
270
- await expect(
271
- sudoKeyManager.addPrivateKey(privateKey, 'VpnKeyPair'),
272
- ).resolves.toBeUndefined()
273
- const [actualKey, actualKeyName] = capture(
274
- sudoCryptoProviderMock.addPrivateKey,
275
- ).first()
276
- expect(actualKey).toStrictEqual(privateKey)
277
- expect(actualKeyName).toStrictEqual('VpnKeyPair')
278
-
279
- verify(
280
- sudoCryptoProviderMock.addPrivateKey(anything(), anything()),
281
- ).once()
282
- })
283
- })
284
-
285
- describe('getPrivateKey', () => {
286
- it('should call crypto provider getPrivateKey', async () => {
287
- when(sudoCryptoProviderMock.getPrivateKey(anything())).thenResolve(
288
- privateKey,
289
- )
290
-
291
- await expect(sudoKeyManager.getPrivateKey('VpnKeyPair')).resolves.toEqual(
292
- privateKey,
293
- )
294
-
295
- const [actualKeyName] = capture(
296
- sudoCryptoProviderMock.getPrivateKey,
297
- ).first()
298
- expect(actualKeyName).toStrictEqual('VpnKeyPair')
299
-
300
- verify(sudoCryptoProviderMock.getPrivateKey(anything())).once()
301
- })
302
- })
303
-
304
- describe('doesPrivateKeyExist', () => {
305
- it('should call crypto provider doesPrivateKeyExists', async () => {
306
- when(sudoCryptoProviderMock.doesPrivateKeyExists(anything())).thenResolve(
307
- true,
308
- )
309
-
310
- await expect(
311
- sudoKeyManager.doesPrivateKeyExist('VpnKeyPair'),
312
- ).resolves.toBeTruthy()
313
-
314
- const [actualKeyName] = capture(
315
- sudoCryptoProviderMock.doesPrivateKeyExists,
316
- ).first()
317
- expect(actualKeyName).toStrictEqual('VpnKeyPair')
318
-
319
- verify(sudoCryptoProviderMock.doesPrivateKeyExists(anything())).once()
320
- verify(sudoCryptoProviderMock.doesPrivateKeyExist(anything())).never()
321
- })
322
- })
323
-
324
- describe('doesPrivateKeyExists', () => {
325
- it('should call crypto provider doesPrivateKeyExists', async () => {
326
- when(sudoCryptoProviderMock.doesPrivateKeyExists(anything())).thenResolve(
327
- true,
328
- )
329
-
330
- await expect(
331
- sudoKeyManager.doesPrivateKeyExists('VpnKeyPair'),
332
- ).resolves.toBeTruthy()
333
-
334
- const [actualKeyName] = capture(
335
- sudoCryptoProviderMock.doesPrivateKeyExists,
336
- ).first()
337
- expect(actualKeyName).toStrictEqual('VpnKeyPair')
338
-
339
- verify(sudoCryptoProviderMock.doesPrivateKeyExists(anything())).once()
340
- verify(sudoCryptoProviderMock.doesPrivateKeyExist(anything())).never()
341
- })
342
- })
343
-
344
- describe('addPublicKey', () => {
345
- it('should call crypto provider addPublicKey', async () => {
346
- when(
347
- sudoCryptoProviderMock.addPublicKey(anything(), anything()),
348
- ).thenResolve()
349
-
350
- await expect(
351
- sudoKeyManager.addPublicKey(publicKey.keyData, 'VpnKeyPair'),
352
- ).resolves.toBeUndefined()
353
- const [actualKey, actualKeyName] = capture(
354
- sudoCryptoProviderMock.addPublicKey,
355
- ).first()
356
- expect(actualKey).toStrictEqual(publicKey.keyData)
357
- expect(actualKeyName).toStrictEqual('VpnKeyPair')
358
-
359
- verify(sudoCryptoProviderMock.addPublicKey(anything(), anything())).once()
360
- })
361
- })
362
-
363
- describe('getPublicKey', () => {
364
- it('should call crypto provider getPublicKey', async () => {
365
- when(sudoCryptoProviderMock.getPublicKey(anything())).thenResolve(
366
- publicKey,
367
- )
368
-
369
- await expect(sudoKeyManager.getPublicKey('VpnKeyPair')).resolves.toEqual(
370
- publicKey,
371
- )
372
-
373
- const [actualKeyName] = capture(
374
- sudoCryptoProviderMock.getPublicKey,
375
- ).first()
376
- expect(actualKeyName).toStrictEqual('VpnKeyPair')
377
-
378
- verify(sudoCryptoProviderMock.getPublicKey(anything())).once()
379
- })
380
- })
381
-
382
- describe('removeAllKeys', () => {
383
- it('should call crypto provider removeAllKeys', async () => {
384
- when(sudoCryptoProviderMock.removeAllKeys()).thenResolve()
385
- await sudoKeyManager.removeAllKeys()
386
- verify(sudoCryptoProviderMock.removeAllKeys()).once()
387
- })
388
- })
389
-
390
- describe('encryptWithSymmetricKeyName', () => {
391
- it('should call crypto provider encryptWithSymmetricKeyName without iv or algorithm', async () => {
392
- when(
393
- sudoCryptoProviderMock.encryptWithSymmetricKeyName(
394
- anything(),
395
- anything(),
396
- anything(),
397
- ),
398
- ).thenResolve(encrypted)
399
-
400
- await sudoKeyManager.encryptWithSymmetricKeyName('VpnKey', decrypted)
401
-
402
- const [actualKeyName, actualData, actualOptions] = capture(
403
- sudoCryptoProviderMock.encryptWithSymmetricKeyName,
404
- ).first()
405
- expect(actualKeyName).toStrictEqual('VpnKey')
406
- expect(actualData).toStrictEqual(decrypted)
407
- expect(actualOptions).toBeUndefined()
408
-
409
- verify(
410
- sudoCryptoProviderMock.encryptWithSymmetricKeyName(
411
- anything(),
412
- anything(),
413
- anything(),
414
- ),
415
- ).once()
416
- })
417
-
418
- it('should call crypto provider encryptWithSymmetricKeyName with iv and no algorithm', async () => {
419
- when(
420
- sudoCryptoProviderMock.encryptWithSymmetricKeyName(
421
- anything(),
422
- anything(),
423
- anything(),
424
- ),
425
- ).thenResolve(encrypted)
426
-
427
- await sudoKeyManager.encryptWithSymmetricKeyName('VpnKey', decrypted, {
428
- iv,
429
- })
430
-
431
- const [actualKeyName, actualData, actualOptions] = capture(
432
- sudoCryptoProviderMock.encryptWithSymmetricKeyName,
433
- ).first()
434
- expect(actualKeyName).toStrictEqual('VpnKey')
435
- expect(actualData).toStrictEqual(decrypted)
436
- expect(actualOptions).toBeDefined()
437
- expect(actualOptions!.iv).toStrictEqual(iv)
438
- expect(actualOptions!.algorithm).toBeUndefined()
439
-
440
- verify(
441
- sudoCryptoProviderMock.encryptWithSymmetricKeyName(
442
- anything(),
443
- anything(),
444
- anything(),
445
- ),
446
- ).once()
447
- })
448
-
449
- it('should call crypto provider encryptWithSymmetricKeyName with iv and algorithm', async () => {
450
- when(
451
- sudoCryptoProviderMock.encryptWithSymmetricKeyName(
452
- anything(),
453
- anything(),
454
- anything(),
455
- ),
456
- ).thenResolve(encrypted)
457
-
458
- const options = {
459
- iv,
460
- algorithm: EncryptionAlgorithm.AesCbcPkcs7Padding,
461
- }
462
- await sudoKeyManager.encryptWithSymmetricKeyName(
463
- 'VpnKey',
464
- decrypted,
465
- options,
466
- )
467
-
468
- const [actualKeyName, actualData, actualOptions] = capture(
469
- sudoCryptoProviderMock.encryptWithSymmetricKeyName,
470
- ).first()
471
- expect(actualKeyName).toStrictEqual('VpnKey')
472
- expect(actualData).toStrictEqual(decrypted)
473
- expect(actualOptions).toBeDefined()
474
- expect(actualOptions!.iv).toStrictEqual(options.iv)
475
- expect(actualOptions!.algorithm).toStrictEqual(options.algorithm)
476
-
477
- verify(
478
- sudoCryptoProviderMock.encryptWithSymmetricKeyName(
479
- anything(),
480
- anything(),
481
- anything(),
482
- ),
483
- ).once()
484
- })
485
- })
486
-
487
- describe('encryptWithSymmetricKey', () => {
488
- it('should call crypto provider encryptWithSymmetricKey without iv or algorithm', async () => {
489
- when(
490
- sudoCryptoProviderMock.encryptWithSymmetricKey(
491
- anything(),
492
- anything(),
493
- anything(),
494
- ),
495
- ).thenResolve(decrypted)
496
-
497
- await expect(
498
- sudoKeyManager.encryptWithSymmetricKey(symmetricKey, encrypted),
499
- ).resolves.toEqual(decrypted)
500
-
501
- const [actualKey, actualData, actualOptions] = capture(
502
- sudoCryptoProviderMock.encryptWithSymmetricKey,
503
- ).first()
504
- expect(actualKey).toStrictEqual(symmetricKey)
505
- expect(actualData).toStrictEqual(encrypted)
506
- expect(actualOptions).toBeUndefined()
507
-
508
- verify(
509
- sudoCryptoProviderMock.encryptWithSymmetricKey(
510
- anything(),
511
- anything(),
512
- anything(),
513
- ),
514
- ).once()
515
- })
516
-
517
- it('should call crypto provider encryptWithSymmetricKey with iv and no algorithm', async () => {
518
- when(
519
- sudoCryptoProviderMock.encryptWithSymmetricKey(
520
- anything(),
521
- anything(),
522
- anything(),
523
- ),
524
- ).thenResolve(decrypted)
525
-
526
- await expect(
527
- sudoKeyManager.encryptWithSymmetricKey(symmetricKey, encrypted, { iv }),
528
- ).resolves.toEqual(decrypted)
529
-
530
- const [actualKey, actualData, actualOptions] = capture(
531
- sudoCryptoProviderMock.encryptWithSymmetricKey,
532
- ).first()
533
- expect(actualKey).toStrictEqual(symmetricKey)
534
- expect(actualData).toStrictEqual(encrypted)
535
- expect(actualOptions).toBeDefined()
536
- expect(actualOptions!.iv).toStrictEqual(iv)
537
- expect(actualOptions!.algorithm).toBeUndefined()
538
-
539
- verify(
540
- sudoCryptoProviderMock.encryptWithSymmetricKey(
541
- anything(),
542
- anything(),
543
- anything(),
544
- ),
545
- ).once()
546
- })
547
-
548
- it('should call crypto provider encryptWithSymmetricKey with algorithm and no iv', async () => {
549
- when(
550
- sudoCryptoProviderMock.encryptWithSymmetricKey(
551
- anything(),
552
- anything(),
553
- anything(),
554
- ),
555
- ).thenResolve(decrypted)
556
-
557
- const options = {
558
- algorithm: EncryptionAlgorithm.AesCbcPkcs7Padding,
559
- }
560
- await expect(
561
- sudoKeyManager.encryptWithSymmetricKey(
562
- symmetricKey,
563
- encrypted,
564
- options,
565
- ),
566
- ).resolves.toEqual(decrypted)
567
-
568
- const [actualKey, actualData, actualOptions] = capture(
569
- sudoCryptoProviderMock.encryptWithSymmetricKey,
570
- ).first()
571
- expect(actualKey).toStrictEqual(symmetricKey)
572
- expect(actualData).toStrictEqual(encrypted)
573
- expect(actualOptions).toBeDefined()
574
- expect(actualOptions!.iv).toBeUndefined()
575
- expect(actualOptions!.algorithm).toStrictEqual(options.algorithm)
576
-
577
- verify(
578
- sudoCryptoProviderMock.encryptWithSymmetricKey(
579
- anything(),
580
- anything(),
581
- anything(),
582
- ),
583
- ).once()
584
- })
585
- })
586
-
587
- describe('decryptWithSymmetricKeyName', () => {
588
- it('should call crypto provider decryptWithSymmetricKeyName without iv and algorithm', async () => {
589
- when(
590
- sudoCryptoProviderMock.decryptWithSymmetricKeyName(
591
- anything(),
592
- anything(),
593
- anything(),
594
- ),
595
- ).thenResolve(decrypted)
596
-
597
- await expect(
598
- sudoKeyManager.decryptWithSymmetricKeyName('VpnKey', encrypted),
599
- ).resolves.toEqual(decrypted)
600
-
601
- const [actualKeyName, actualData, actualOptions] = capture(
602
- sudoCryptoProviderMock.decryptWithSymmetricKeyName,
603
- ).first()
604
- expect(actualKeyName).toStrictEqual('VpnKey')
605
- expect(actualData).toStrictEqual(encrypted)
606
- expect(actualOptions).toBeUndefined()
607
-
608
- verify(
609
- sudoCryptoProviderMock.decryptWithSymmetricKeyName(
610
- anything(),
611
- anything(),
612
- anything(),
613
- ),
614
- ).once()
615
- })
616
-
617
- it('should call crypto provider decryptWithSymmetricKeyName with iv and no algorithm', async () => {
618
- when(
619
- sudoCryptoProviderMock.decryptWithSymmetricKeyName(
620
- anything(),
621
- anything(),
622
- anything(),
623
- ),
624
- ).thenResolve(decrypted)
625
-
626
- const options = {
627
- iv,
628
- }
629
- await expect(
630
- sudoKeyManager.decryptWithSymmetricKeyName(
631
- 'VpnKey',
632
- encrypted,
633
- options,
634
- ),
635
- ).resolves.toEqual(decrypted)
636
-
637
- const [actualKeyName, actualData, actualOptions] = capture(
638
- sudoCryptoProviderMock.decryptWithSymmetricKeyName,
639
- ).first()
640
- expect(actualKeyName).toStrictEqual('VpnKey')
641
- expect(actualData).toStrictEqual(encrypted)
642
- expect(actualOptions).toBeDefined()
643
- expect(actualOptions!.iv).toStrictEqual(options.iv)
644
- expect(actualOptions!.algorithm).toBeUndefined()
645
-
646
- verify(
647
- sudoCryptoProviderMock.decryptWithSymmetricKeyName(
648
- anything(),
649
- anything(),
650
- anything(),
651
- ),
652
- ).once()
653
- })
654
-
655
- it('should call crypto provider decryptWithSymmetricKeyName with iv and algorithm', async () => {
656
- when(
657
- sudoCryptoProviderMock.decryptWithSymmetricKeyName(
658
- anything(),
659
- anything(),
660
- anything(),
661
- ),
662
- ).thenResolve(decrypted)
663
-
664
- const options = {
665
- iv,
666
- algorithm: EncryptionAlgorithm.AesCbcPkcs7Padding,
667
- }
668
- await expect(
669
- sudoKeyManager.decryptWithSymmetricKeyName(
670
- 'VpnKey',
671
- encrypted,
672
- options,
673
- ),
674
- ).resolves.toEqual(decrypted)
675
-
676
- const [actualKeyName, actualData, actualOptions] = capture(
677
- sudoCryptoProviderMock.decryptWithSymmetricKeyName,
678
- ).first()
679
- expect(actualKeyName).toStrictEqual('VpnKey')
680
- expect(actualData).toStrictEqual(encrypted)
681
- expect(actualOptions).toBeDefined()
682
- expect(actualOptions!.iv).toStrictEqual(options.iv)
683
- expect(actualOptions!.algorithm).toStrictEqual(options.algorithm)
684
-
685
- verify(
686
- sudoCryptoProviderMock.decryptWithSymmetricKeyName(
687
- anything(),
688
- anything(),
689
- anything(),
690
- ),
691
- ).once()
692
- })
693
- })
694
-
695
- describe('decryptWithSymmetricKey', () => {
696
- it('should call crypto provider decryptWithSymmetricKey without iv or algorithm', async () => {
697
- when(
698
- sudoCryptoProviderMock.decryptWithSymmetricKey(
699
- anything(),
700
- anything(),
701
- anything(),
702
- ),
703
- ).thenResolve(decrypted)
704
-
705
- await expect(
706
- sudoKeyManager.decryptWithSymmetricKey(symmetricKey, encrypted),
707
- ).resolves.toEqual(decrypted)
708
-
709
- const [actualKey, actualData, actualOptions] = capture(
710
- sudoCryptoProviderMock.decryptWithSymmetricKey,
711
- ).first()
712
- expect(actualKey).toStrictEqual(symmetricKey)
713
- expect(actualData).toStrictEqual(encrypted)
714
- expect(actualOptions).toBeUndefined()
715
-
716
- verify(
717
- sudoCryptoProviderMock.decryptWithSymmetricKey(
718
- anything(),
719
- anything(),
720
- anything(),
721
- ),
722
- ).once()
723
- })
724
-
725
- it('should call crypto provider decryptWithSymmetricKey with iv and no algorithm', async () => {
726
- when(
727
- sudoCryptoProviderMock.decryptWithSymmetricKey(
728
- anything(),
729
- anything(),
730
- anything(),
731
- ),
732
- ).thenResolve(decrypted)
733
-
734
- const options = {
735
- iv,
736
- }
737
- await expect(
738
- sudoKeyManager.decryptWithSymmetricKey(
739
- symmetricKey,
740
- encrypted,
741
- options,
742
- ),
743
- ).resolves.toEqual(decrypted)
744
-
745
- const [actualKey, actualData, actualOptions] = capture(
746
- sudoCryptoProviderMock.decryptWithSymmetricKey,
747
- ).first()
748
- expect(actualKey).toStrictEqual(symmetricKey)
749
- expect(actualData).toStrictEqual(encrypted)
750
- expect(actualOptions).toBeDefined()
751
- expect(actualOptions!.iv).toStrictEqual(iv)
752
- expect(actualOptions!.algorithm).toBeUndefined()
753
-
754
- verify(
755
- sudoCryptoProviderMock.decryptWithSymmetricKey(
756
- anything(),
757
- anything(),
758
- anything(),
759
- ),
760
- ).once()
761
- })
762
-
763
- it('should call crypto provider decryptWithSymmetricKey with iv and algorithm', async () => {
764
- when(
765
- sudoCryptoProviderMock.decryptWithSymmetricKey(
766
- anything(),
767
- anything(),
768
- anything(),
769
- ),
770
- ).thenResolve(decrypted)
771
-
772
- const options = {
773
- iv,
774
- algorithm: EncryptionAlgorithm.AesCbcPkcs7Padding,
775
- }
776
- await expect(
777
- sudoKeyManager.decryptWithSymmetricKey(
778
- symmetricKey,
779
- encrypted,
780
- options,
781
- ),
782
- ).resolves.toEqual(decrypted)
783
-
784
- const [actualKey, actualData, actualOptions] = capture(
785
- sudoCryptoProviderMock.decryptWithSymmetricKey,
786
- ).first()
787
- expect(actualKey).toStrictEqual(symmetricKey)
788
- expect(actualData).toStrictEqual(encrypted)
789
- expect(actualOptions).toBeDefined()
790
- expect(actualOptions!.iv).toStrictEqual(iv)
791
- expect(actualOptions!.algorithm).toStrictEqual(options.algorithm)
792
-
793
- verify(
794
- sudoCryptoProviderMock.decryptWithSymmetricKey(
795
- anything(),
796
- anything(),
797
- anything(),
798
- ),
799
- ).once()
800
- })
801
- })
802
-
803
- describe('encryptWithPublicKey', () => {
804
- it('should call crypto provider encryptWithPublicKey', async () => {
805
- when(
806
- sudoCryptoProviderMock.encryptWithPublicKey(
807
- anything(),
808
- anything(),
809
- anything(),
810
- ),
811
- ).thenResolve(encrypted)
812
-
813
- await expect(
814
- sudoKeyManager.encryptWithPublicKey('VpnKey', decrypted),
815
- ).resolves.toEqual(encrypted)
816
-
817
- const [actualKeyName, actualData, actualOptions] = capture(
818
- sudoCryptoProviderMock.encryptWithPublicKey,
819
- ).first()
820
- expect(actualKeyName).toStrictEqual('VpnKey')
821
- expect(actualData).toStrictEqual(decrypted)
822
- expect(actualOptions).toBeUndefined()
823
-
824
- verify(
825
- sudoCryptoProviderMock.encryptWithPublicKey(
826
- anything(),
827
- anything(),
828
- anything(),
829
- ),
830
- ).once()
831
- })
832
-
833
- it('should call crypto provider encryptWithPublicKey with algorithm', async () => {
834
- when(
835
- sudoCryptoProviderMock.encryptWithPublicKey(
836
- anything(),
837
- anything(),
838
- anything(),
839
- ),
840
- ).thenResolve(encrypted)
841
-
842
- const options = {
843
- algorithm: EncryptionAlgorithm.RsaOaepSha1,
844
- }
845
- await expect(
846
- sudoKeyManager.encryptWithPublicKey('VpnKey', decrypted, options),
847
- ).resolves.toEqual(encrypted)
848
-
849
- const [actualKeyName, actualData, actualOptions] = capture(
850
- sudoCryptoProviderMock.encryptWithPublicKey,
851
- ).first()
852
- expect(actualKeyName).toStrictEqual('VpnKey')
853
- expect(actualData).toStrictEqual(decrypted)
854
- expect(actualOptions).toBeDefined()
855
- expect(actualOptions!.algorithm).toStrictEqual(options.algorithm)
856
-
857
- verify(
858
- sudoCryptoProviderMock.encryptWithPublicKey(
859
- anything(),
860
- anything(),
861
- anything(),
862
- ),
863
- ).once()
864
- })
865
- })
866
-
867
- describe('decryptWithPrivateKey', () => {
868
- it('should call crypto provider decryptWithPrivateKey', async () => {
869
- when(
870
- sudoCryptoProviderMock.decryptWithPrivateKey(
871
- anything(),
872
- anything(),
873
- anything(),
874
- ),
875
- ).thenResolve(decrypted)
876
-
877
- await expect(
878
- sudoKeyManager.decryptWithPrivateKey('VpnKey', encrypted),
879
- ).resolves.toEqual(decrypted)
880
-
881
- const [actualKeyName, actualData, actualOptions] = capture(
882
- sudoCryptoProviderMock.decryptWithPrivateKey,
883
- ).first()
884
- expect(actualKeyName).toStrictEqual('VpnKey')
885
- expect(actualData).toStrictEqual(encrypted)
886
- expect(actualOptions).toBeUndefined()
887
-
888
- verify(
889
- sudoCryptoProviderMock.decryptWithPrivateKey(
890
- anything(),
891
- anything(),
892
- anything(),
893
- ),
894
- ).once()
895
- })
896
-
897
- it('should call crypto provider decryptWithPrivateKey with algorithm', async () => {
898
- when(
899
- sudoCryptoProviderMock.decryptWithPrivateKey(
900
- anything(),
901
- anything(),
902
- anything(),
903
- ),
904
- ).thenResolve(decrypted)
905
-
906
- const options = {
907
- algorithm: EncryptionAlgorithm.RsaOaepSha1,
908
- }
909
- await expect(
910
- sudoKeyManager.decryptWithPrivateKey('VpnKey', encrypted, options),
911
- ).resolves.toEqual(decrypted)
912
-
913
- const [actualKeyName, actualData, actualOptions] = capture(
914
- sudoCryptoProviderMock.decryptWithPrivateKey,
915
- ).first()
916
- expect(actualKeyName).toStrictEqual('VpnKey')
917
- expect(actualData).toStrictEqual(encrypted)
918
- expect(actualOptions).toBeDefined()
919
- expect(actualOptions!.algorithm).toStrictEqual(options.algorithm)
920
-
921
- verify(
922
- sudoCryptoProviderMock.decryptWithPrivateKey(
923
- anything(),
924
- anything(),
925
- anything(),
926
- ),
927
- ).once()
928
- })
929
- })
930
-
931
- describe('generateSymmetricKey', () => {
932
- it('should call crypto provider generateSymmetricKey', async () => {
933
- when(
934
- sudoCryptoProviderMock.generateSymmetricKey(anything()),
935
- ).thenResolve()
936
-
937
- await expect(
938
- sudoKeyManager.generateSymmetricKey('VpnKey'),
939
- ).resolves.toBeUndefined()
940
-
941
- const [actualKeyName] = capture(
942
- sudoCryptoProviderMock.generateSymmetricKey,
943
- ).first()
944
- expect(actualKeyName).toStrictEqual('VpnKey')
945
-
946
- verify(sudoCryptoProviderMock.generateSymmetricKey(anything())).once()
947
- })
948
- })
949
-
950
- describe('generateSymmetricKeyFromPassword', () => {
951
- it('should call crypto provider generateSymmetricKeyFromPassword without options', async () => {
952
- when(
953
- sudoCryptoProviderMock.generateSymmetricKeyFromPassword(
954
- anything(),
955
- anything(),
956
- anything(),
957
- ),
958
- ).thenResolve(symmetricKey)
959
-
960
- await expect(
961
- sudoKeyManager.generateSymmetricKeyFromPassword(password, salt),
962
- ).resolves.toEqual(symmetricKey)
963
-
964
- const [actualPassword, actualSalt, actualOptions] = capture(
965
- sudoCryptoProviderMock.generateSymmetricKeyFromPassword,
966
- ).first()
967
- expect(actualPassword).toStrictEqual(password)
968
- expect(actualSalt).toStrictEqual(salt)
969
- expect(actualOptions).toBeUndefined()
970
-
971
- verify(
972
- sudoCryptoProviderMock.generateSymmetricKeyFromPassword(
973
- anything(),
974
- anything(),
975
- anything(),
976
- ),
977
- ).once()
978
- })
979
- })
980
-
981
- describe('generateHash', () => {
982
- it('should call crypto provider generateHash', async () => {
983
- when(sudoCryptoProviderMock.generateHash(anything())).thenResolve(hash)
984
-
985
- await expect(sudoKeyManager.generateHash(data)).resolves.toEqual(hash)
986
-
987
- const [actualData] = capture(sudoCryptoProviderMock.generateHash).first()
988
- expect(actualData).toStrictEqual(data)
989
-
990
- verify(sudoCryptoProviderMock.generateHash(anything())).once()
991
- })
992
- })
993
-
994
- describe('generateRandomData', () => {
995
- it('should call crypto provider generateRandomData', async () => {
996
- when(sudoCryptoProviderMock.generateRandomData(anything())).thenResolve(
997
- new Uint8Array(),
998
- )
999
-
1000
- const size = 100
1001
- await sudoKeyManager.generateRandomData(size)
1002
-
1003
- const [actualSize] = capture(
1004
- sudoCryptoProviderMock.generateRandomData,
1005
- ).first()
1006
- expect(actualSize).toStrictEqual(size)
1007
-
1008
- verify(sudoCryptoProviderMock.generateRandomData(anything())).once()
1009
- })
1010
- })
1011
-
1012
- describe('exportKeys', () => {
1013
- const keyData: KeyData[] = [
1014
- {
1015
- name: 'password',
1016
- type: KeyDataKeyType.Password,
1017
- data: password,
1018
- namespace,
1019
- format: KeyDataKeyFormat.Raw,
1020
- },
1021
- {
1022
- name: 'symmetric',
1023
- type: KeyDataKeyType.SymmetricKey,
1024
- data: symmetricKey,
1025
- namespace,
1026
- format: KeyDataKeyFormat.Raw,
1027
- },
1028
- {
1029
- name: 'private',
1030
- type: KeyDataKeyType.RSAPrivateKey,
1031
- data: privateKey,
1032
- namespace,
1033
- format: KeyDataKeyFormat.PKCS8,
1034
- },
1035
- {
1036
- name: 'public',
1037
- type: KeyDataKeyType.RSAPublicKey,
1038
- data: publicKey.keyData,
1039
- namespace,
1040
- format: KeyDataKeyFormat.SPKI,
1041
- },
1042
- ]
1043
-
1044
- const exportedKeyData: KeyData[] = [
1045
- {
1046
- name: 'password',
1047
- type: KeyDataKeyType.Password,
1048
- data: password,
1049
- namespace,
1050
- format: KeyDataKeyFormat.Raw,
1051
- },
1052
- {
1053
- name: 'symmetric',
1054
- type: KeyDataKeyType.SymmetricKey,
1055
- data: symmetricKey,
1056
- namespace,
1057
- format: KeyDataKeyFormat.Raw,
1058
- },
1059
- {
1060
- name: 'private',
1061
- type: KeyDataKeyType.RSAPrivateKey,
1062
- data: privateKey,
1063
- namespace,
1064
- format: KeyDataKeyFormat.PKCS8,
1065
- },
1066
- {
1067
- name: 'public',
1068
- type: KeyDataKeyType.RSAPublicKey,
1069
- data: publicKey.keyData,
1070
- namespace,
1071
- format: KeyDataKeyFormat.SPKI,
1072
- },
1073
- ]
1074
-
1075
- it('should call crypto provider exportKeys', async () => {
1076
- when(sudoCryptoProviderMock.exportKeys()).thenResolve(keyData)
1077
-
1078
- const actualExportedKeyData = await sudoKeyManager.exportKeys()
1079
-
1080
- expect(actualExportedKeyData).toHaveLength(exportedKeyData.length)
1081
- actualExportedKeyData.forEach((k) =>
1082
- expect(exportedKeyData).toContainEqual(k),
1083
- )
1084
- })
1085
- })
1086
- })