@opentdf/sdk 0.1.0-beta.1701

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 (566) hide show
  1. package/README.md +52 -0
  2. package/dist/cjs/package.json +3 -0
  3. package/dist/cjs/src/access.js +155 -0
  4. package/dist/cjs/src/auth/Eas.js +60 -0
  5. package/dist/cjs/src/auth/auth.js +79 -0
  6. package/dist/cjs/src/auth/oidc-clientcredentials-provider.js +26 -0
  7. package/dist/cjs/src/auth/oidc-externaljwt-provider.js +33 -0
  8. package/dist/cjs/src/auth/oidc-refreshtoken-provider.js +34 -0
  9. package/dist/cjs/src/auth/oidc.js +222 -0
  10. package/dist/cjs/src/auth/providers.js +143 -0
  11. package/dist/cjs/src/encodings/base64.js +154 -0
  12. package/dist/cjs/src/encodings/hex.js +70 -0
  13. package/dist/cjs/src/encodings/index.js +29 -0
  14. package/dist/cjs/src/errors.js +138 -0
  15. package/dist/cjs/src/index.js +344 -0
  16. package/dist/cjs/src/nanotdf/Client.js +296 -0
  17. package/dist/cjs/src/nanotdf/NanoTDF.js +94 -0
  18. package/dist/cjs/src/nanotdf/browser-entry.js +19 -0
  19. package/dist/cjs/src/nanotdf/constants.js +5 -0
  20. package/dist/cjs/src/nanotdf/decrypt.js +17 -0
  21. package/dist/cjs/src/nanotdf/encrypt-dataset.js +38 -0
  22. package/dist/cjs/src/nanotdf/encrypt.js +132 -0
  23. package/dist/cjs/src/nanotdf/enum/CipherEnum.js +13 -0
  24. package/dist/cjs/src/nanotdf/enum/CurveNameEnum.js +15 -0
  25. package/dist/cjs/src/nanotdf/enum/EncodingEnum.js +8 -0
  26. package/dist/cjs/src/nanotdf/enum/PolicyTypeEnum.js +11 -0
  27. package/dist/cjs/src/nanotdf/enum/ProtocolEnum.js +10 -0
  28. package/dist/cjs/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +11 -0
  29. package/dist/cjs/src/nanotdf/helpers/calculateByCurve.js +29 -0
  30. package/dist/cjs/src/nanotdf/helpers/getHkdfSalt.js +11 -0
  31. package/dist/cjs/src/nanotdf/index.js +25 -0
  32. package/dist/cjs/src/nanotdf/interfaces/PolicyInterface.js +3 -0
  33. package/dist/cjs/src/nanotdf/models/Ciphers.js +61 -0
  34. package/dist/cjs/src/nanotdf/models/DefaultParams.js +27 -0
  35. package/dist/cjs/src/nanotdf/models/EcCurves.js +39 -0
  36. package/dist/cjs/src/nanotdf/models/Header.js +255 -0
  37. package/dist/cjs/src/nanotdf/models/Payload.js +158 -0
  38. package/dist/cjs/src/nanotdf/models/Policy/AbstractPolicy.js +73 -0
  39. package/dist/cjs/src/nanotdf/models/Policy/EmbeddedPolicy.js +82 -0
  40. package/dist/cjs/src/nanotdf/models/Policy/PolicyFactory.js +38 -0
  41. package/dist/cjs/src/nanotdf/models/Policy/RemotePolicy.js +62 -0
  42. package/dist/cjs/src/nanotdf/models/ResourceLocator.js +211 -0
  43. package/dist/cjs/src/nanotdf/models/Signature.js +77 -0
  44. package/dist/cjs/src/nanotdf-crypto/ciphers.js +17 -0
  45. package/dist/cjs/src/nanotdf-crypto/decrypt.js +24 -0
  46. package/dist/cjs/src/nanotdf-crypto/digest.js +7 -0
  47. package/dist/cjs/src/nanotdf-crypto/ecdsaSignature.js +83 -0
  48. package/dist/cjs/src/nanotdf-crypto/encrypt.js +24 -0
  49. package/dist/cjs/src/nanotdf-crypto/enums.js +52 -0
  50. package/dist/cjs/src/nanotdf-crypto/exportCryptoKey.js +20 -0
  51. package/dist/cjs/src/nanotdf-crypto/generateKeyPair.js +13 -0
  52. package/dist/cjs/src/nanotdf-crypto/generateRandomNumber.js +12 -0
  53. package/dist/cjs/src/nanotdf-crypto/importRawKey.js +18 -0
  54. package/dist/cjs/src/nanotdf-crypto/index.js +52 -0
  55. package/dist/cjs/src/nanotdf-crypto/keyAgreement.js +91 -0
  56. package/dist/cjs/src/nanotdf-crypto/pemPublicToCrypto.js +225 -0
  57. package/dist/cjs/src/policy/api.js +58 -0
  58. package/dist/cjs/src/policy/attributes.js +3 -0
  59. package/dist/cjs/src/policy/granter.js +146 -0
  60. package/dist/cjs/src/tdf/AttributeObject.js +15 -0
  61. package/dist/cjs/src/tdf/AttributeObjectJwt.js +3 -0
  62. package/dist/cjs/src/tdf/Crypto.js +47 -0
  63. package/dist/cjs/src/tdf/EntityObject.js +3 -0
  64. package/dist/cjs/src/tdf/NanoTDF/NanoTDF.js +38 -0
  65. package/dist/cjs/src/tdf/Policy.js +50 -0
  66. package/dist/cjs/src/tdf/PolicyObject.js +3 -0
  67. package/dist/cjs/src/tdf/TypedArray.js +3 -0
  68. package/dist/cjs/src/tdf/index.js +35 -0
  69. package/dist/cjs/src/types/index.js +3 -0
  70. package/dist/cjs/src/utils.js +147 -0
  71. package/dist/cjs/src/version.js +12 -0
  72. package/dist/cjs/tdf3/index.js +57 -0
  73. package/dist/cjs/tdf3/src/assertions.js +118 -0
  74. package/dist/cjs/tdf3/src/binary.js +153 -0
  75. package/dist/cjs/tdf3/src/ciphers/aes-gcm-cipher.js +56 -0
  76. package/dist/cjs/tdf3/src/ciphers/algorithms.js +8 -0
  77. package/dist/cjs/tdf3/src/ciphers/index.js +8 -0
  78. package/dist/cjs/tdf3/src/ciphers/symmetric-cipher-base.js +22 -0
  79. package/dist/cjs/tdf3/src/client/DecoratedReadableStream.js +116 -0
  80. package/dist/cjs/tdf3/src/client/builders.js +561 -0
  81. package/dist/cjs/tdf3/src/client/index.js +460 -0
  82. package/dist/cjs/tdf3/src/client/validation.js +63 -0
  83. package/dist/cjs/tdf3/src/crypto/crypto-utils.js +116 -0
  84. package/dist/cjs/tdf3/src/crypto/declarations.js +8 -0
  85. package/dist/cjs/tdf3/src/crypto/index.js +315 -0
  86. package/dist/cjs/tdf3/src/index.js +34 -0
  87. package/dist/cjs/tdf3/src/models/attribute-set.js +122 -0
  88. package/dist/cjs/tdf3/src/models/encryption-information.js +90 -0
  89. package/dist/cjs/tdf3/src/models/index.js +25 -0
  90. package/dist/cjs/tdf3/src/models/key-access.js +103 -0
  91. package/dist/cjs/tdf3/src/models/manifest.js +3 -0
  92. package/dist/cjs/tdf3/src/models/payload.js +3 -0
  93. package/dist/cjs/tdf3/src/models/policy.js +24 -0
  94. package/dist/cjs/tdf3/src/models/upsert-response.js +3 -0
  95. package/dist/cjs/tdf3/src/tdf.js +907 -0
  96. package/dist/cjs/tdf3/src/templates/default.html.js +98 -0
  97. package/dist/cjs/tdf3/src/templates/escaper.js +15 -0
  98. package/dist/cjs/tdf3/src/templates/index.js +12 -0
  99. package/dist/cjs/tdf3/src/utils/buffer-crc32.js +48 -0
  100. package/dist/cjs/tdf3/src/utils/chunkers.js +106 -0
  101. package/dist/cjs/tdf3/src/utils/index.js +296 -0
  102. package/dist/cjs/tdf3/src/utils/keysplit.js +61 -0
  103. package/dist/cjs/tdf3/src/utils/zip-reader.js +253 -0
  104. package/dist/cjs/tdf3/src/utils/zip-writer.js +308 -0
  105. package/dist/cjs/tdf3/src/version.js +6 -0
  106. package/dist/types/src/access.d.ts +47 -0
  107. package/dist/types/src/access.d.ts.map +1 -0
  108. package/dist/types/src/auth/Eas.d.ts +34 -0
  109. package/dist/types/src/auth/Eas.d.ts.map +1 -0
  110. package/dist/types/src/auth/auth.d.ts +86 -0
  111. package/dist/types/src/auth/auth.d.ts.map +1 -0
  112. package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts +9 -0
  113. package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts.map +1 -0
  114. package/dist/types/src/auth/oidc-externaljwt-provider.d.ts +10 -0
  115. package/dist/types/src/auth/oidc-externaljwt-provider.d.ts.map +1 -0
  116. package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts +10 -0
  117. package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts.map +1 -0
  118. package/dist/types/src/auth/oidc.d.ts +104 -0
  119. package/dist/types/src/auth/oidc.d.ts.map +1 -0
  120. package/dist/types/src/auth/providers.d.ts +67 -0
  121. package/dist/types/src/auth/providers.d.ts.map +1 -0
  122. package/dist/types/src/encodings/base64.d.ts +18 -0
  123. package/dist/types/src/encodings/base64.d.ts.map +1 -0
  124. package/dist/types/src/encodings/hex.d.ts +5 -0
  125. package/dist/types/src/encodings/hex.d.ts.map +1 -0
  126. package/dist/types/src/encodings/index.d.ts +3 -0
  127. package/dist/types/src/encodings/index.d.ts.map +1 -0
  128. package/dist/types/src/errors.d.ts +72 -0
  129. package/dist/types/src/errors.d.ts.map +1 -0
  130. package/dist/types/src/index.d.ts +138 -0
  131. package/dist/types/src/index.d.ts.map +1 -0
  132. package/dist/types/src/nanotdf/Client.d.ts +95 -0
  133. package/dist/types/src/nanotdf/Client.d.ts.map +1 -0
  134. package/dist/types/src/nanotdf/NanoTDF.d.ts +25 -0
  135. package/dist/types/src/nanotdf/NanoTDF.d.ts.map +1 -0
  136. package/dist/types/src/nanotdf/browser-entry.d.ts +17 -0
  137. package/dist/types/src/nanotdf/browser-entry.d.ts.map +1 -0
  138. package/dist/types/src/nanotdf/constants.d.ts +2 -0
  139. package/dist/types/src/nanotdf/constants.d.ts.map +1 -0
  140. package/dist/types/src/nanotdf/decrypt.d.ts +9 -0
  141. package/dist/types/src/nanotdf/decrypt.d.ts.map +1 -0
  142. package/dist/types/src/nanotdf/encrypt-dataset.d.ts +12 -0
  143. package/dist/types/src/nanotdf/encrypt-dataset.d.ts.map +1 -0
  144. package/dist/types/src/nanotdf/encrypt.d.ts +14 -0
  145. package/dist/types/src/nanotdf/encrypt.d.ts.map +1 -0
  146. package/dist/types/src/nanotdf/enum/CipherEnum.d.ts +10 -0
  147. package/dist/types/src/nanotdf/enum/CipherEnum.d.ts.map +1 -0
  148. package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts +12 -0
  149. package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts.map +1 -0
  150. package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts +5 -0
  151. package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts.map +1 -0
  152. package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts +8 -0
  153. package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts.map +1 -0
  154. package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts +7 -0
  155. package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts.map +1 -0
  156. package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts +8 -0
  157. package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts.map +1 -0
  158. package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts +20 -0
  159. package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts.map +1 -0
  160. package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts +9 -0
  161. package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts.map +1 -0
  162. package/dist/types/src/nanotdf/index.d.ts +9 -0
  163. package/dist/types/src/nanotdf/index.d.ts.map +1 -0
  164. package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts +17 -0
  165. package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts.map +1 -0
  166. package/dist/types/src/nanotdf/models/Ciphers.d.ts +14 -0
  167. package/dist/types/src/nanotdf/models/Ciphers.d.ts.map +1 -0
  168. package/dist/types/src/nanotdf/models/DefaultParams.d.ts +21 -0
  169. package/dist/types/src/nanotdf/models/DefaultParams.d.ts.map +1 -0
  170. package/dist/types/src/nanotdf/models/EcCurves.d.ts +15 -0
  171. package/dist/types/src/nanotdf/models/EcCurves.d.ts.map +1 -0
  172. package/dist/types/src/nanotdf/models/Header.d.ts +73 -0
  173. package/dist/types/src/nanotdf/models/Header.d.ts.map +1 -0
  174. package/dist/types/src/nanotdf/models/Payload.d.ts +47 -0
  175. package/dist/types/src/nanotdf/models/Payload.d.ts.map +1 -0
  176. package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts +52 -0
  177. package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts.map +1 -0
  178. package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts +35 -0
  179. package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts.map +1 -0
  180. package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts +11 -0
  181. package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts.map +1 -0
  182. package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts +31 -0
  183. package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts.map +1 -0
  184. package/dist/types/src/nanotdf/models/ResourceLocator.d.ts +65 -0
  185. package/dist/types/src/nanotdf/models/ResourceLocator.d.ts.map +1 -0
  186. package/dist/types/src/nanotdf/models/Signature.d.ts +33 -0
  187. package/dist/types/src/nanotdf/models/Signature.d.ts.map +1 -0
  188. package/dist/types/src/nanotdf-crypto/ciphers.d.ts +8 -0
  189. package/dist/types/src/nanotdf-crypto/ciphers.d.ts.map +1 -0
  190. package/dist/types/src/nanotdf-crypto/decrypt.d.ts +14 -0
  191. package/dist/types/src/nanotdf-crypto/decrypt.d.ts.map +1 -0
  192. package/dist/types/src/nanotdf-crypto/digest.d.ts +3 -0
  193. package/dist/types/src/nanotdf-crypto/digest.d.ts.map +1 -0
  194. package/dist/types/src/nanotdf-crypto/ecdsaSignature.d.ts +35 -0
  195. package/dist/types/src/nanotdf-crypto/ecdsaSignature.d.ts.map +1 -0
  196. package/dist/types/src/nanotdf-crypto/encrypt.d.ts +14 -0
  197. package/dist/types/src/nanotdf-crypto/encrypt.d.ts.map +1 -0
  198. package/dist/types/src/nanotdf-crypto/enums.d.ts +42 -0
  199. package/dist/types/src/nanotdf-crypto/enums.d.ts.map +1 -0
  200. package/dist/types/src/nanotdf-crypto/exportCryptoKey.d.ts +7 -0
  201. package/dist/types/src/nanotdf-crypto/exportCryptoKey.d.ts.map +1 -0
  202. package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts +10 -0
  203. package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts.map +1 -0
  204. package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts +5 -0
  205. package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts.map +1 -0
  206. package/dist/types/src/nanotdf-crypto/importRawKey.d.ts +13 -0
  207. package/dist/types/src/nanotdf-crypto/importRawKey.d.ts.map +1 -0
  208. package/dist/types/src/nanotdf-crypto/index.d.ts +12 -0
  209. package/dist/types/src/nanotdf-crypto/index.d.ts.map +1 -0
  210. package/dist/types/src/nanotdf-crypto/keyAgreement.d.ts +28 -0
  211. package/dist/types/src/nanotdf-crypto/keyAgreement.d.ts.map +1 -0
  212. package/dist/types/src/nanotdf-crypto/pemPublicToCrypto.d.ts +28 -0
  213. package/dist/types/src/nanotdf-crypto/pemPublicToCrypto.d.ts.map +1 -0
  214. package/dist/types/src/policy/api.d.ts +4 -0
  215. package/dist/types/src/policy/api.d.ts.map +1 -0
  216. package/dist/types/src/policy/attributes.d.ts +95 -0
  217. package/dist/types/src/policy/attributes.d.ts.map +1 -0
  218. package/dist/types/src/policy/granter.d.ts +23 -0
  219. package/dist/types/src/policy/granter.d.ts.map +1 -0
  220. package/dist/types/src/tdf/AttributeObject.d.ts +13 -0
  221. package/dist/types/src/tdf/AttributeObject.d.ts.map +1 -0
  222. package/dist/types/src/tdf/AttributeObjectJwt.d.ts +4 -0
  223. package/dist/types/src/tdf/AttributeObjectJwt.d.ts.map +1 -0
  224. package/dist/types/src/tdf/Crypto.d.ts +37 -0
  225. package/dist/types/src/tdf/Crypto.d.ts.map +1 -0
  226. package/dist/types/src/tdf/EntityObject.d.ts +18 -0
  227. package/dist/types/src/tdf/EntityObject.d.ts.map +1 -0
  228. package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts +99 -0
  229. package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts.map +1 -0
  230. package/dist/types/src/tdf/Policy.d.ts +28 -0
  231. package/dist/types/src/tdf/Policy.d.ts.map +1 -0
  232. package/dist/types/src/tdf/PolicyObject.d.ts +11 -0
  233. package/dist/types/src/tdf/PolicyObject.d.ts.map +1 -0
  234. package/dist/types/src/tdf/TypedArray.d.ts +3 -0
  235. package/dist/types/src/tdf/TypedArray.d.ts.map +1 -0
  236. package/dist/types/src/tdf/index.d.ts +7 -0
  237. package/dist/types/src/tdf/index.d.ts.map +1 -0
  238. package/dist/types/src/types/index.d.ts +45 -0
  239. package/dist/types/src/types/index.d.ts.map +1 -0
  240. package/dist/types/src/utils.d.ts +45 -0
  241. package/dist/types/src/utils.d.ts.map +1 -0
  242. package/dist/types/src/version.d.ts +9 -0
  243. package/dist/types/src/version.d.ts.map +1 -0
  244. package/dist/types/tdf3/index.d.ts +16 -0
  245. package/dist/types/tdf3/index.d.ts.map +1 -0
  246. package/dist/types/tdf3/src/assertions.d.ts +63 -0
  247. package/dist/types/tdf3/src/assertions.d.ts.map +1 -0
  248. package/dist/types/tdf3/src/binary.d.ts +38 -0
  249. package/dist/types/tdf3/src/binary.d.ts.map +1 -0
  250. package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts +18 -0
  251. package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts.map +1 -0
  252. package/dist/types/tdf3/src/ciphers/algorithms.d.ts +4 -0
  253. package/dist/types/tdf3/src/ciphers/algorithms.d.ts.map +1 -0
  254. package/dist/types/tdf3/src/ciphers/index.d.ts +3 -0
  255. package/dist/types/tdf3/src/ciphers/index.d.ts.map +1 -0
  256. package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts +14 -0
  257. package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts.map +1 -0
  258. package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts +53 -0
  259. package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts.map +1 -0
  260. package/dist/types/tdf3/src/client/builders.d.ts +436 -0
  261. package/dist/types/tdf3/src/client/builders.d.ts.map +1 -0
  262. package/dist/types/tdf3/src/client/index.d.ts +139 -0
  263. package/dist/types/tdf3/src/client/index.d.ts.map +1 -0
  264. package/dist/types/tdf3/src/client/validation.d.ts +8 -0
  265. package/dist/types/tdf3/src/client/validation.d.ts.map +1 -0
  266. package/dist/types/tdf3/src/crypto/crypto-utils.d.ts +34 -0
  267. package/dist/types/tdf3/src/crypto/crypto-utils.d.ts.map +1 -0
  268. package/dist/types/tdf3/src/crypto/declarations.d.ts +60 -0
  269. package/dist/types/tdf3/src/crypto/declarations.d.ts.map +1 -0
  270. package/dist/types/tdf3/src/crypto/index.d.ts +103 -0
  271. package/dist/types/tdf3/src/crypto/index.d.ts.map +1 -0
  272. package/dist/types/tdf3/src/index.d.ts +5 -0
  273. package/dist/types/tdf3/src/index.d.ts.map +1 -0
  274. package/dist/types/tdf3/src/models/attribute-set.d.ts +65 -0
  275. package/dist/types/tdf3/src/models/attribute-set.d.ts.map +1 -0
  276. package/dist/types/tdf3/src/models/encryption-information.d.ts +49 -0
  277. package/dist/types/tdf3/src/models/encryption-information.d.ts.map +1 -0
  278. package/dist/types/tdf3/src/models/index.d.ts +9 -0
  279. package/dist/types/tdf3/src/models/index.d.ts.map +1 -0
  280. package/dist/types/tdf3/src/models/key-access.d.ts +42 -0
  281. package/dist/types/tdf3/src/models/key-access.d.ts.map +1 -0
  282. package/dist/types/tdf3/src/models/manifest.d.ts +9 -0
  283. package/dist/types/tdf3/src/models/manifest.d.ts.map +1 -0
  284. package/dist/types/tdf3/src/models/payload.d.ts +7 -0
  285. package/dist/types/tdf3/src/models/payload.d.ts.map +1 -0
  286. package/dist/types/tdf3/src/models/policy.d.ts +13 -0
  287. package/dist/types/tdf3/src/models/policy.d.ts.map +1 -0
  288. package/dist/types/tdf3/src/models/upsert-response.d.ts +16 -0
  289. package/dist/types/tdf3/src/models/upsert-response.d.ts.map +1 -0
  290. package/dist/types/tdf3/src/tdf.d.ts +152 -0
  291. package/dist/types/tdf3/src/tdf.d.ts.map +1 -0
  292. package/dist/types/tdf3/src/templates/default.html.d.ts +8 -0
  293. package/dist/types/tdf3/src/templates/default.html.d.ts.map +1 -0
  294. package/dist/types/tdf3/src/templates/escaper.d.ts +6 -0
  295. package/dist/types/tdf3/src/templates/escaper.d.ts.map +1 -0
  296. package/dist/types/tdf3/src/templates/index.d.ts +3 -0
  297. package/dist/types/tdf3/src/templates/index.d.ts.map +1 -0
  298. package/dist/types/tdf3/src/utils/buffer-crc32.d.ts +2 -0
  299. package/dist/types/tdf3/src/utils/buffer-crc32.d.ts.map +1 -0
  300. package/dist/types/tdf3/src/utils/chunkers.d.ts +29 -0
  301. package/dist/types/tdf3/src/utils/chunkers.d.ts.map +1 -0
  302. package/dist/types/tdf3/src/utils/index.d.ts +36 -0
  303. package/dist/types/tdf3/src/utils/index.d.ts.map +1 -0
  304. package/dist/types/tdf3/src/utils/keysplit.d.ts +19 -0
  305. package/dist/types/tdf3/src/utils/keysplit.d.ts.map +1 -0
  306. package/dist/types/tdf3/src/utils/zip-reader.d.ts +63 -0
  307. package/dist/types/tdf3/src/utils/zip-reader.d.ts.map +1 -0
  308. package/dist/types/tdf3/src/utils/zip-writer.d.ts +35 -0
  309. package/dist/types/tdf3/src/utils/zip-writer.d.ts.map +1 -0
  310. package/dist/types/tdf3/src/version.d.ts +3 -0
  311. package/dist/types/tdf3/src/version.d.ts.map +1 -0
  312. package/dist/web/package.json +3 -0
  313. package/dist/web/src/access.js +147 -0
  314. package/dist/web/src/auth/Eas.js +55 -0
  315. package/dist/web/src/auth/auth.js +71 -0
  316. package/dist/web/src/auth/oidc-clientcredentials-provider.js +22 -0
  317. package/dist/web/src/auth/oidc-externaljwt-provider.js +29 -0
  318. package/dist/web/src/auth/oidc-refreshtoken-provider.js +30 -0
  319. package/dist/web/src/auth/oidc.js +215 -0
  320. package/dist/web/src/auth/providers.js +119 -0
  321. package/dist/web/src/encodings/base64.js +147 -0
  322. package/dist/web/src/encodings/hex.js +63 -0
  323. package/dist/web/src/encodings/index.js +3 -0
  324. package/dist/web/src/errors.js +123 -0
  325. package/dist/web/src/index.js +313 -0
  326. package/dist/web/src/nanotdf/Client.js +268 -0
  327. package/dist/web/src/nanotdf/NanoTDF.js +89 -0
  328. package/dist/web/src/nanotdf/browser-entry.js +14 -0
  329. package/dist/web/src/nanotdf/constants.js +2 -0
  330. package/dist/web/src/nanotdf/decrypt.js +14 -0
  331. package/dist/web/src/nanotdf/encrypt-dataset.js +32 -0
  332. package/dist/web/src/nanotdf/encrypt.js +126 -0
  333. package/dist/web/src/nanotdf/enum/CipherEnum.js +11 -0
  334. package/dist/web/src/nanotdf/enum/CurveNameEnum.js +13 -0
  335. package/dist/web/src/nanotdf/enum/EncodingEnum.js +6 -0
  336. package/dist/web/src/nanotdf/enum/PolicyTypeEnum.js +9 -0
  337. package/dist/web/src/nanotdf/enum/ProtocolEnum.js +8 -0
  338. package/dist/web/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +9 -0
  339. package/dist/web/src/nanotdf/helpers/calculateByCurve.js +24 -0
  340. package/dist/web/src/nanotdf/helpers/getHkdfSalt.js +8 -0
  341. package/dist/web/src/nanotdf/index.js +11 -0
  342. package/dist/web/src/nanotdf/interfaces/PolicyInterface.js +2 -0
  343. package/dist/web/src/nanotdf/models/Ciphers.js +54 -0
  344. package/dist/web/src/nanotdf/models/DefaultParams.js +22 -0
  345. package/dist/web/src/nanotdf/models/EcCurves.js +32 -0
  346. package/dist/web/src/nanotdf/models/Header.js +250 -0
  347. package/dist/web/src/nanotdf/models/Payload.js +156 -0
  348. package/dist/web/src/nanotdf/models/Policy/AbstractPolicy.js +71 -0
  349. package/dist/web/src/nanotdf/models/Policy/EmbeddedPolicy.js +77 -0
  350. package/dist/web/src/nanotdf/models/Policy/PolicyFactory.js +33 -0
  351. package/dist/web/src/nanotdf/models/Policy/RemotePolicy.js +57 -0
  352. package/dist/web/src/nanotdf/models/ResourceLocator.js +206 -0
  353. package/dist/web/src/nanotdf/models/Signature.js +74 -0
  354. package/dist/web/src/nanotdf-crypto/ciphers.js +14 -0
  355. package/dist/web/src/nanotdf-crypto/decrypt.js +21 -0
  356. package/dist/web/src/nanotdf-crypto/digest.js +4 -0
  357. package/dist/web/src/nanotdf-crypto/ecdsaSignature.js +77 -0
  358. package/dist/web/src/nanotdf-crypto/encrypt.js +21 -0
  359. package/dist/web/src/nanotdf-crypto/enums.js +49 -0
  360. package/dist/web/src/nanotdf-crypto/exportCryptoKey.js +17 -0
  361. package/dist/web/src/nanotdf-crypto/generateKeyPair.js +10 -0
  362. package/dist/web/src/nanotdf-crypto/generateRandomNumber.js +9 -0
  363. package/dist/web/src/nanotdf-crypto/importRawKey.js +15 -0
  364. package/dist/web/src/nanotdf-crypto/index.js +12 -0
  365. package/dist/web/src/nanotdf-crypto/keyAgreement.js +87 -0
  366. package/dist/web/src/nanotdf-crypto/pemPublicToCrypto.js +197 -0
  367. package/dist/web/src/policy/api.js +54 -0
  368. package/dist/web/src/policy/attributes.js +2 -0
  369. package/dist/web/src/policy/granter.js +141 -0
  370. package/dist/web/src/tdf/AttributeObject.js +11 -0
  371. package/dist/web/src/tdf/AttributeObjectJwt.js +2 -0
  372. package/dist/web/src/tdf/Crypto.js +44 -0
  373. package/dist/web/src/tdf/EntityObject.js +2 -0
  374. package/dist/web/src/tdf/NanoTDF/NanoTDF.js +35 -0
  375. package/dist/web/src/tdf/Policy.js +48 -0
  376. package/dist/web/src/tdf/PolicyObject.js +2 -0
  377. package/dist/web/src/tdf/TypedArray.js +2 -0
  378. package/dist/web/src/tdf/index.js +4 -0
  379. package/dist/web/src/types/index.js +2 -0
  380. package/dist/web/src/utils.js +133 -0
  381. package/dist/web/src/version.js +9 -0
  382. package/dist/web/tdf3/index.js +13 -0
  383. package/dist/web/tdf3/src/assertions.js +111 -0
  384. package/dist/web/tdf3/src/binary.js +149 -0
  385. package/dist/web/tdf3/src/ciphers/aes-gcm-cipher.js +52 -0
  386. package/dist/web/tdf3/src/ciphers/algorithms.js +5 -0
  387. package/dist/web/tdf3/src/ciphers/index.js +3 -0
  388. package/dist/web/tdf3/src/ciphers/symmetric-cipher-base.js +18 -0
  389. package/dist/web/tdf3/src/client/DecoratedReadableStream.js +107 -0
  390. package/dist/web/tdf3/src/client/builders.js +557 -0
  391. package/dist/web/tdf3/src/client/index.js +423 -0
  392. package/dist/web/tdf3/src/client/validation.js +58 -0
  393. package/dist/web/tdf3/src/crypto/crypto-utils.js +107 -0
  394. package/dist/web/tdf3/src/crypto/declarations.js +5 -0
  395. package/dist/web/tdf3/src/crypto/index.js +296 -0
  396. package/dist/web/tdf3/src/index.js +5 -0
  397. package/dist/web/tdf3/src/models/attribute-set.js +118 -0
  398. package/dist/web/tdf3/src/models/encryption-information.js +86 -0
  399. package/dist/web/tdf3/src/models/index.js +9 -0
  400. package/dist/web/tdf3/src/models/key-access.js +74 -0
  401. package/dist/web/tdf3/src/models/manifest.js +2 -0
  402. package/dist/web/tdf3/src/models/payload.js +2 -0
  403. package/dist/web/tdf3/src/models/policy.js +20 -0
  404. package/dist/web/tdf3/src/models/upsert-response.js +2 -0
  405. package/dist/web/tdf3/src/tdf.js +866 -0
  406. package/dist/web/tdf3/src/templates/default.html.js +96 -0
  407. package/dist/web/tdf3/src/templates/escaper.js +10 -0
  408. package/dist/web/tdf3/src/templates/index.js +3 -0
  409. package/dist/web/tdf3/src/utils/buffer-crc32.js +44 -0
  410. package/dist/web/tdf3/src/utils/chunkers.js +96 -0
  411. package/dist/web/tdf3/src/utils/index.js +248 -0
  412. package/dist/web/tdf3/src/utils/keysplit.js +55 -0
  413. package/dist/web/tdf3/src/utils/zip-reader.js +247 -0
  414. package/dist/web/tdf3/src/utils/zip-writer.js +302 -0
  415. package/dist/web/tdf3/src/version.js +3 -0
  416. package/package.json +126 -0
  417. package/src/access.ts +198 -0
  418. package/src/auth/Eas.ts +79 -0
  419. package/src/auth/auth.ts +141 -0
  420. package/src/auth/oidc-clientcredentials-provider.ts +32 -0
  421. package/src/auth/oidc-externaljwt-provider.ts +41 -0
  422. package/src/auth/oidc-refreshtoken-provider.ts +41 -0
  423. package/src/auth/oidc.ts +307 -0
  424. package/src/auth/providers.ts +139 -0
  425. package/src/encodings/base64.ts +160 -0
  426. package/src/encodings/hex.ts +69 -0
  427. package/src/encodings/index.ts +2 -0
  428. package/src/errors.ts +113 -0
  429. package/src/index.ts +441 -0
  430. package/src/nanotdf/Client.ts +349 -0
  431. package/src/nanotdf/NanoTDF.ts +121 -0
  432. package/src/nanotdf/browser-entry.ts +20 -0
  433. package/src/nanotdf/constants.ts +1 -0
  434. package/src/nanotdf/decrypt.ts +19 -0
  435. package/src/nanotdf/encrypt-dataset.ts +52 -0
  436. package/src/nanotdf/encrypt.ts +197 -0
  437. package/src/nanotdf/enum/CipherEnum.ts +10 -0
  438. package/src/nanotdf/enum/CurveNameEnum.ts +12 -0
  439. package/src/nanotdf/enum/EncodingEnum.ts +5 -0
  440. package/src/nanotdf/enum/PolicyTypeEnum.ts +8 -0
  441. package/src/nanotdf/enum/ProtocolEnum.ts +7 -0
  442. package/src/nanotdf/enum/ResourceLocatorIdentifierEnum.ts +8 -0
  443. package/src/nanotdf/helpers/calculateByCurve.ts +26 -0
  444. package/src/nanotdf/helpers/getHkdfSalt.ts +15 -0
  445. package/src/nanotdf/index.ts +10 -0
  446. package/src/nanotdf/interfaces/PolicyInterface.ts +27 -0
  447. package/src/nanotdf/models/Ciphers.ts +67 -0
  448. package/src/nanotdf/models/DefaultParams.ts +24 -0
  449. package/src/nanotdf/models/EcCurves.ts +40 -0
  450. package/src/nanotdf/models/Header.ts +322 -0
  451. package/src/nanotdf/models/Payload.ts +196 -0
  452. package/src/nanotdf/models/Policy/AbstractPolicy.ts +90 -0
  453. package/src/nanotdf/models/Policy/EmbeddedPolicy.ts +101 -0
  454. package/src/nanotdf/models/Policy/PolicyFactory.ts +48 -0
  455. package/src/nanotdf/models/Policy/RemotePolicy.ts +74 -0
  456. package/src/nanotdf/models/ResourceLocator.ts +212 -0
  457. package/src/nanotdf/models/Signature.ts +85 -0
  458. package/src/nanotdf-crypto/ciphers.ts +13 -0
  459. package/src/nanotdf-crypto/decrypt.ts +30 -0
  460. package/src/nanotdf-crypto/digest.ts +8 -0
  461. package/src/nanotdf-crypto/ecdsaSignature.ts +109 -0
  462. package/src/nanotdf-crypto/encrypt.ts +30 -0
  463. package/src/nanotdf-crypto/enums.ts +47 -0
  464. package/src/nanotdf-crypto/exportCryptoKey.ts +17 -0
  465. package/src/nanotdf-crypto/generateKeyPair.ts +19 -0
  466. package/src/nanotdf-crypto/generateRandomNumber.ts +8 -0
  467. package/src/nanotdf-crypto/importRawKey.ts +19 -0
  468. package/src/nanotdf-crypto/index.ts +11 -0
  469. package/src/nanotdf-crypto/keyAgreement.ts +139 -0
  470. package/src/nanotdf-crypto/pemPublicToCrypto.ts +232 -0
  471. package/src/package-lock.json +6 -0
  472. package/src/package.json +3 -0
  473. package/src/platform/authorization/authorization_connect.d.ts +44 -0
  474. package/src/platform/authorization/authorization_connect.js +44 -0
  475. package/src/platform/authorization/authorization_pb.d.ts +707 -0
  476. package/src/platform/authorization/authorization_pb.js +372 -0
  477. package/src/platform/common/common_pb.d.ts +129 -0
  478. package/src/platform/common/common_pb.js +58 -0
  479. package/src/platform/entityresolution/entity_resolution_connect.d.ts +35 -0
  480. package/src/platform/entityresolution/entity_resolution_connect.js +35 -0
  481. package/src/platform/entityresolution/entity_resolution_pb.d.ts +242 -0
  482. package/src/platform/entityresolution/entity_resolution_pb.js +139 -0
  483. package/src/platform/kas/kas_connect.d.ts +59 -0
  484. package/src/platform/kas/kas_connect.js +59 -0
  485. package/src/platform/kas/kas_pb.d.ts +200 -0
  486. package/src/platform/kas/kas_pb.js +84 -0
  487. package/src/platform/policy/attributes/attributes_connect.d.ts +168 -0
  488. package/src/platform/policy/attributes/attributes_connect.js +168 -0
  489. package/src/platform/policy/attributes/attributes_pb.d.ts +929 -0
  490. package/src/platform/policy/attributes/attributes_pb.js +363 -0
  491. package/src/platform/policy/kasregistry/key_access_server_registry_connect.d.ts +62 -0
  492. package/src/platform/policy/kasregistry/key_access_server_registry_connect.js +62 -0
  493. package/src/platform/policy/kasregistry/key_access_server_registry_pb.d.ts +283 -0
  494. package/src/platform/policy/kasregistry/key_access_server_registry_pb.js +113 -0
  495. package/src/platform/policy/namespaces/namespaces_connect.d.ts +62 -0
  496. package/src/platform/policy/namespaces/namespaces_connect.js +62 -0
  497. package/src/platform/policy/namespaces/namespaces_pb.d.ts +270 -0
  498. package/src/platform/policy/namespaces/namespaces_pb.js +110 -0
  499. package/src/platform/policy/objects_pb.d.ts +725 -0
  500. package/src/platform/policy/objects_pb.js +288 -0
  501. package/src/platform/policy/resourcemapping/resource_mapping_connect.d.ts +259 -0
  502. package/src/platform/policy/resourcemapping/resource_mapping_connect.js +259 -0
  503. package/src/platform/policy/resourcemapping/resource_mapping_pb.d.ts +314 -0
  504. package/src/platform/policy/resourcemapping/resource_mapping_pb.js +142 -0
  505. package/src/platform/policy/selectors_pb.d.ts +269 -0
  506. package/src/platform/policy/selectors_pb.js +110 -0
  507. package/src/platform/policy/subjectmapping/subject_mapping_connect.d.ts +118 -0
  508. package/src/platform/policy/subjectmapping/subject_mapping_connect.js +118 -0
  509. package/src/platform/policy/subjectmapping/subject_mapping_pb.d.ts +672 -0
  510. package/src/platform/policy/subjectmapping/subject_mapping_pb.js +260 -0
  511. package/src/platform/wellknownconfiguration/wellknown_configuration_connect.d.ts +26 -0
  512. package/src/platform/wellknownconfiguration/wellknown_configuration_connect.js +26 -0
  513. package/src/platform/wellknownconfiguration/wellknown_configuration_pb.d.ts +75 -0
  514. package/src/platform/wellknownconfiguration/wellknown_configuration_pb.js +35 -0
  515. package/src/policy/api.ts +61 -0
  516. package/src/policy/attributes.ts +117 -0
  517. package/src/policy/granter.ts +181 -0
  518. package/src/tdf/AttributeObject.ts +27 -0
  519. package/src/tdf/AttributeObjectJwt.ts +3 -0
  520. package/src/tdf/Crypto.ts +42 -0
  521. package/src/tdf/EntityObject.ts +18 -0
  522. package/src/tdf/NanoTDF/NanoTDF.ts +120 -0
  523. package/src/tdf/Policy.ts +51 -0
  524. package/src/tdf/PolicyObject.ts +12 -0
  525. package/src/tdf/TypedArray.ts +12 -0
  526. package/src/tdf/index.ts +6 -0
  527. package/src/types/index.ts +55 -0
  528. package/src/utils.ts +149 -0
  529. package/src/version.ts +9 -0
  530. package/tdf3/index.ts +91 -0
  531. package/tdf3/package-lock.json +6 -0
  532. package/tdf3/package.json +3 -0
  533. package/tdf3/src/assertions.ts +191 -0
  534. package/tdf3/src/binary.ts +195 -0
  535. package/tdf3/src/ciphers/aes-gcm-cipher.ts +76 -0
  536. package/tdf3/src/ciphers/algorithms.ts +9 -0
  537. package/tdf3/src/ciphers/index.ts +2 -0
  538. package/tdf3/src/ciphers/symmetric-cipher-base.ts +38 -0
  539. package/tdf3/src/client/DecoratedReadableStream.ts +148 -0
  540. package/tdf3/src/client/builders.ts +701 -0
  541. package/tdf3/src/client/index.ts +637 -0
  542. package/tdf3/src/client/validation.ts +79 -0
  543. package/tdf3/src/crypto/crypto-utils.ts +119 -0
  544. package/tdf3/src/crypto/declarations.ts +89 -0
  545. package/tdf3/src/crypto/index.ts +394 -0
  546. package/tdf3/src/index.ts +4 -0
  547. package/tdf3/src/models/attribute-set.ts +142 -0
  548. package/tdf3/src/models/encryption-information.ts +172 -0
  549. package/tdf3/src/models/index.ts +8 -0
  550. package/tdf3/src/models/key-access.ts +128 -0
  551. package/tdf3/src/models/manifest.ts +9 -0
  552. package/tdf3/src/models/payload.ts +6 -0
  553. package/tdf3/src/models/policy.ts +35 -0
  554. package/tdf3/src/models/upsert-response.ts +17 -0
  555. package/tdf3/src/tdf.ts +1351 -0
  556. package/tdf3/src/templates/default.html.ts +105 -0
  557. package/tdf3/src/templates/escaper.ts +10 -0
  558. package/tdf3/src/templates/index.ts +2 -0
  559. package/tdf3/src/utils/buffer-crc32.ts +46 -0
  560. package/tdf3/src/utils/chunkers.ts +118 -0
  561. package/tdf3/src/utils/index.ts +309 -0
  562. package/tdf3/src/utils/keysplit.ts +63 -0
  563. package/tdf3/src/utils/zip-reader.ts +341 -0
  564. package/tdf3/src/utils/zip-writer.ts +375 -0
  565. package/tdf3/src/version.ts +2 -0
  566. package/tdf3/types.d.ts +14 -0
@@ -0,0 +1,105 @@
1
+ import { escHtml, escJavaScript } from './escaper.js';
2
+ export default ({
3
+ manifest,
4
+ payload,
5
+ transferUrl,
6
+ transferBaseUrl,
7
+ }: {
8
+ manifest: string;
9
+ payload: string;
10
+ transferUrl: string;
11
+ transferBaseUrl: string;
12
+ }) => `<html>
13
+ <head>
14
+ <meta charset="UTF-8">
15
+ </head>
16
+ <body style="font-family: Arial; color: #2D323B; overflow: hidden; margin: 0; height: 100%; background-color: white;">
17
+ <input id="data-input" type="hidden" value="${escHtml(payload)}">
18
+ <input id="data-manifest" type="hidden" value="${escHtml(manifest)}">
19
+ <iframe style="width:0;height:0;border:0; border:none;" src="${escHtml(transferUrl)}"></iframe>
20
+ <div role="banner" style="background-color: #092356; color: white; height: 55px;">
21
+ <img src="https://cdn.virtru.com/assets/virtru-logo-white-rgb.png"
22
+ style="display: inline-block; padding: 18px 0 0 24px;"
23
+ width="62px" height="19px" alt="Virtru logo" title="Virtru"/>
24
+ </div>
25
+ <div role="main" class="wrapper" style="padding-top: 107px; display: flex; flex-direction: row; max-width: 1200px;
26
+ min-width: 800px; margin: 0 auto; min-height: calc(100vh - 230px); border-bottom: 1px solid #F3F5F7;">
27
+ <div role="region">
28
+ <img src="https://cdn.virtru.com/assets/request-access.png" style="display: inline-block;"
29
+ width="387px" height="310px" alt="Request access image" title="Request access"/>
30
+ </div>
31
+ <div role="complementary" style="word-break: break-all; padding-right: 12px;">
32
+ <h1 style="font-size: 1.5em;">Virtru Secure File</h1>
33
+ <noscript style="font-weight: 100;">
34
+ <span>
35
+ To view this file, download and access it from your computer:
36
+ <br />
37
+ <br />
38
+ </span>
39
+ <div>
40
+ 1. <b>Go Back</b> to the file directory and <b>Right-click</b> on the file
41
+ </div>
42
+ <div>
43
+ 2. Select <b>Download</b>
44
+ </div>
45
+ <div>
46
+ 3. Once download is complete, <b>double-click</b> on the local file to open
47
+ </div>
48
+ </noscript>
49
+ <div id="js-enabled-message" style="display: none;">
50
+ <span>We are trying to send you to Secure Reader. If this does not work, please click the button below</span>
51
+ <br />
52
+ <button
53
+ id="viewbutton"
54
+ style="color: #fff!important; background: gray; padding: 10px 40px; border-radius: 25px; display: inline-block; border: none; font-size: 15px; width: 300px; margin-block-start: 1.1em;
55
+ margin-block-end: 1.1em;"
56
+ class="viewbutton"
57
+ type="button"
58
+ >
59
+ View File in Secure Reader
60
+ </button>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ <div role="contentinfo" style="color: grey; text-align: center; padding-top: 25px; font-family: Arial;">
65
+ <span style="padding: 25px; font-size: 13px;">© Copyright 2019 Virtru Corporation</span>
66
+ <span style="padding: 25px; font-size: 13px;">Learn more at www.virtru.com</span>
67
+ </div>
68
+ <script type="text/javascript">
69
+ var transferComplete = false;
70
+ var data = document.getElementById('data-input').value;
71
+ var manifest = JSON.parse(atob(document.getElementById('data-manifest').value));
72
+ var redirectButton = document.getElementById('viewbutton');
73
+ var ifr = document.querySelector('iframe');
74
+ var otherWindow = ifr.contentWindow;
75
+
76
+ document.getElementById('js-enabled-message').style.display = 'block';
77
+ ifr.addEventListener("load", iframeLoaded, false);
78
+
79
+ function iframeLoaded() {
80
+ var channel = new MessageChannel();
81
+ otherWindow.postMessage({
82
+ type: 'tdf.html',
83
+ data: data,
84
+ policy: manifest.encryptionInformation.policy
85
+ }, '${escJavaScript(transferBaseUrl)}', [channel.port2]);
86
+
87
+ channel.port1.onmessage = handleMessage;
88
+
89
+ function handleMessage(e) {
90
+ let msg = e.data;
91
+ if (msg.status === 'success') {
92
+ transferComplete = true;
93
+ redirectButton.style.background = '#4585ff';
94
+ window.location.href = "${escJavaScript(transferUrl)}";
95
+ }
96
+ }
97
+ }
98
+ redirectButton.onclick = function(){
99
+ if (transferComplete) {
100
+ window.location.href = "${escJavaScript(transferUrl)}";
101
+ }
102
+ };
103
+ </script>
104
+ </body>
105
+ </html>`;
@@ -0,0 +1,10 @@
1
+ /** Javascript escape attribute strings. How is this not part of the lib?.
2
+ * https://stackoverflow.com/a/30970751
3
+ */
4
+ export function escHtml(plainString = '') {
5
+ return plainString.replace(/["'&<]/g, (c) => `&#${c.charCodeAt(0)};`);
6
+ }
7
+
8
+ export function escJavaScript(plainString = '') {
9
+ return plainString.replace(/["'\\<]/g, (c) => `\\${c === '<' ? '074' : c}`);
10
+ }
@@ -0,0 +1,2 @@
1
+ export { escHtml, escJavaScript } from './escaper.js';
2
+ export { default as htmlWrapperTemplate } from './default.html.js';
@@ -0,0 +1,46 @@
1
+ // implementation of https://github.com/brianloveswords/buffer-crc32/blob/master/index.js with arrayBuffers and ts
2
+
3
+ const CRC_TABLE = new Int32Array([
4
+ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
5
+ 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
6
+ 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
7
+ 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
8
+ 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
9
+ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
10
+ 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
11
+ 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
12
+ 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
13
+ 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
14
+ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
15
+ 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
16
+ 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
17
+ 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
18
+ 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
19
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
20
+ 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
21
+ 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
22
+ 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
23
+ 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
24
+ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
25
+ 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
26
+ 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
27
+ 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
28
+ 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
29
+ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
30
+ 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
31
+ 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
32
+ 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
33
+ 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
34
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
35
+ 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
36
+ ]);
37
+
38
+ export function unsigned(buf: Uint8Array, previous: number) {
39
+ let crc = ~~previous ^ -1;
40
+ for (let n = 0; n < buf.length; n++) {
41
+ crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8);
42
+ }
43
+ const result = crc ^ -1;
44
+
45
+ return result >>> 0;
46
+ }
@@ -0,0 +1,118 @@
1
+ import axios, { AxiosInstance, AxiosResponse } from 'axios';
2
+ import {
3
+ type DecoratedReadableStream,
4
+ isDecoratedReadableStream,
5
+ } from '../client/DecoratedReadableStream.js';
6
+ import axiosRetry from 'axios-retry';
7
+ import { ConfigurationError, NetworkError } from '../../../src/errors.js';
8
+
9
+ let axiosRemoteChunk: AxiosInstance | null = null;
10
+
11
+ /**
12
+ * Read data from a seekable stream.
13
+ * @param byteStart First byte to read. If negative, reads from the end. If absent, reads everything
14
+ * @param byteEnd Index after last byte to read (exclusive)
15
+ */
16
+ export type Chunker = (byteStart?: number, byteEnd?: number) => Promise<Uint8Array>;
17
+
18
+ export const fromBrowserFile = (fileRef: Blob): Chunker => {
19
+ return async (byteStart?: number, byteEnd?: number): Promise<Uint8Array> => {
20
+ const chunkBlob = fileRef.slice(byteStart, byteEnd);
21
+ const arrayBuffer = await new Response(chunkBlob).arrayBuffer();
22
+ return new Uint8Array(arrayBuffer);
23
+ };
24
+ };
25
+
26
+ export const fromBuffer = (source: Uint8Array | Buffer): Chunker => {
27
+ return (byteStart?: number, byteEnd?: number) => {
28
+ return Promise.resolve(source.slice(byteStart, byteEnd));
29
+ };
30
+ };
31
+
32
+ async function getRemoteChunk(url: string, range?: string): Promise<Uint8Array> {
33
+ if (!axiosRemoteChunk) {
34
+ axiosRemoteChunk = axios.create();
35
+ // @ts-ignore: axiosRetry not typed
36
+ axiosRetry(axiosRemoteChunk, {
37
+ retries: 3,
38
+ retryDelay: axiosRetry.exponentialDelay,
39
+ retryCondition: () => true,
40
+ }); // Retries all idempotent requests (GET, HEAD, OPTIONS, PUT, DELETE)
41
+ }
42
+ try {
43
+ const res: AxiosResponse<ArrayBuffer> = await axiosRemoteChunk.get(url, {
44
+ ...(range && {
45
+ headers: {
46
+ Range: `bytes=${range}`,
47
+ },
48
+ }),
49
+ responseType: 'arraybuffer',
50
+ });
51
+ if (!res.data) {
52
+ throw new NetworkError(
53
+ 'Unexpected response type: Server should have responded with an ArrayBuffer.'
54
+ );
55
+ }
56
+ return new Uint8Array(res.data);
57
+ } catch (e) {
58
+ if (e && e.response && e.response.status === 416) {
59
+ console.log('Warning: Range not satisfiable');
60
+ }
61
+ throw e;
62
+ }
63
+ }
64
+
65
+ export const fromUrl = async (location: string): Promise<Chunker> => {
66
+ return async (byteStart?: number, byteEnd?: number): Promise<Uint8Array> => {
67
+ if (byteStart === undefined) {
68
+ return getRemoteChunk(location);
69
+ }
70
+ let rangeHeader = `${byteStart}`;
71
+ if (byteEnd && byteEnd < 0) {
72
+ // NOTE: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range
73
+ throw Error('negative end unsupported');
74
+ } else if (byteEnd) {
75
+ rangeHeader += `-${byteEnd - 1}`;
76
+ }
77
+ return await getRemoteChunk(location, rangeHeader);
78
+ };
79
+ };
80
+
81
+ export type DataSource =
82
+ | { type: 'buffer'; location: Uint8Array }
83
+ | { type: 'chunker'; location: Chunker }
84
+ | { type: 'file-browser'; location: Blob }
85
+ | { type: 'remote'; location: string }
86
+ | { type: 'stream'; location: DecoratedReadableStream };
87
+
88
+ export const fromDataSource = async ({ type, location }: DataSource) => {
89
+ switch (type) {
90
+ case 'buffer':
91
+ if (!(location instanceof Uint8Array)) {
92
+ throw new ConfigurationError('Invalid data source; must be uint8 array');
93
+ }
94
+ return fromBuffer(location);
95
+ case 'chunker':
96
+ if (!(location instanceof Function)) {
97
+ throw new ConfigurationError('Invalid data source; must be uint8 array');
98
+ }
99
+ return location;
100
+ case 'file-browser':
101
+ if (!(location instanceof Blob)) {
102
+ throw new ConfigurationError('Invalid data source; must be at least a Blob');
103
+ }
104
+ return fromBrowserFile(location);
105
+ case 'remote':
106
+ if (typeof location !== 'string') {
107
+ throw new ConfigurationError('Invalid data source; url not provided');
108
+ }
109
+ return fromUrl(location);
110
+ case 'stream':
111
+ if (!isDecoratedReadableStream(location)) {
112
+ throw new ConfigurationError('Invalid data source; must be DecoratedTdfStream');
113
+ }
114
+ return fromBuffer(await location.toBuffer());
115
+ default:
116
+ throw new ConfigurationError(`Data source type not defined, or not supported: ${type}}`);
117
+ }
118
+ };
@@ -0,0 +1,309 @@
1
+ import { toByteArray, fromByteArray } from 'base64-js';
2
+ import { AppIdAuthProvider, type AuthProvider } from '../../../src/auth/auth.js';
3
+ import * as WebCryptoService from '../crypto/index.js';
4
+ import { KeyInfo, SplitKey } from '../models/index.js';
5
+
6
+ import { AesGcmCipher } from '../ciphers/aes-gcm-cipher.js';
7
+ import { ConfigurationError } from '../../../src/errors.js';
8
+
9
+ export { ZipReader, readUInt64LE } from './zip-reader.js';
10
+ export { ZipWriter } from './zip-writer.js';
11
+ export { keySplit, keyMerge } from './keysplit.js';
12
+ export { streamToBuffer } from '../client/DecoratedReadableStream.js';
13
+ export * from './chunkers.js';
14
+
15
+ export type SupportedEncoding = 'hex' | 'utf8' | 'utf-8' | 'binary' | 'latin1' | 'base64';
16
+
17
+ const hexSliceLookupTable = (() => {
18
+ const alphabet = '0123456789abcdef';
19
+ const table = new Array(256);
20
+ for (let i = 0; i < 16; ++i) {
21
+ const i16 = i * 16;
22
+ for (let j = 0; j < 16; ++j) {
23
+ table[i16 + j] = alphabet[i] + alphabet[j];
24
+ }
25
+ }
26
+ return table;
27
+ })();
28
+
29
+ export function base64ToBuffer(b64: string): Uint8Array {
30
+ return Uint8Array.from(atob(b64).split(''), (c) => c.charCodeAt(0));
31
+ }
32
+
33
+ export function isAppIdProviderCheck(
34
+ provider: AuthProvider | AppIdAuthProvider
35
+ ): provider is AppIdAuthProvider {
36
+ return (provider as AppIdAuthProvider)._getName !== undefined;
37
+ }
38
+ export function concatUint8(uint8Arrays: Uint8Array[]): Uint8Array {
39
+ const newLength = uint8Arrays.reduce(
40
+ (accumulator, currentValue) => accumulator + currentValue.length,
41
+ 0
42
+ );
43
+ const combinedUint8Array = new Uint8Array(newLength);
44
+
45
+ let offset = 0;
46
+ for (const uint8Array of uint8Arrays) {
47
+ combinedUint8Array.set(uint8Array, offset);
48
+ offset += uint8Array.length;
49
+ }
50
+
51
+ return combinedUint8Array;
52
+ }
53
+
54
+ export function readUInt32LE(uint8Array: Uint8Array, offset: number): number {
55
+ return (
56
+ (uint8Array[offset] |
57
+ (uint8Array[offset + 1] << 8) |
58
+ (uint8Array[offset + 2] << 16) |
59
+ (uint8Array[offset + 3] << 24)) >>>
60
+ 0
61
+ );
62
+ }
63
+
64
+ export function readUInt16LE(uint8Array: Uint8Array, offset: number): number {
65
+ return uint8Array[offset] | (uint8Array[offset + 1] << 8);
66
+ }
67
+
68
+ export function readUInt32BE(arrayBuffer: ArrayBuffer, offset: number): number {
69
+ const view = new DataView(arrayBuffer, offset, 4);
70
+ return view.getUint32(0, false);
71
+ }
72
+
73
+ export function writeUInt16LE(uint8Array: Uint8Array, value: number, offset: number): void {
74
+ uint8Array[offset] = value & 0xff;
75
+ uint8Array[offset + 1] = (value >> 8) & 0xff;
76
+ }
77
+
78
+ export function writeUInt32LE(uint8Array: Uint8Array, value: number, offset: number): void {
79
+ uint8Array[offset] = value & 0xff;
80
+ uint8Array[offset + 1] = (value >> 8) & 0xff;
81
+ uint8Array[offset + 2] = (value >> 16) & 0xff;
82
+ uint8Array[offset + 3] = (value >> 24) & 0xff;
83
+ }
84
+
85
+ export function copyUint8Arr(
86
+ source: Uint8Array,
87
+ target: Uint8Array,
88
+ targetStart: number = 0,
89
+ sourceStart: number = 0,
90
+ sourceEnd: number = source.length
91
+ ): number {
92
+ const length = Math.min(sourceEnd - sourceStart, target.length - targetStart);
93
+ target.set(source.subarray(sourceStart, sourceStart + length), targetStart);
94
+ return length;
95
+ }
96
+
97
+ // https://github.com/feross/buffer/blob/master/index.js#L1073
98
+ function hexSlice(buf: Uint8Array, start: number = 0, end: number = buf.length): string {
99
+ const len = buf.length;
100
+
101
+ if (!start || start < 0) start = 0;
102
+ if (!end || end < 0 || end > len) end = len;
103
+
104
+ let out = '';
105
+ for (let i = start; i < end; ++i) {
106
+ out += hexSliceLookupTable[buf[i]];
107
+ }
108
+ return out;
109
+ }
110
+
111
+ // https://github.com/feross/buffer/blob/master/index.js#L1053
112
+ function latin1Slice(buf: Uint8Array, start: number, end: number): string {
113
+ let result = '';
114
+ end = Math.min(buf.length, end);
115
+
116
+ for (let i = start; i < end; ++i) {
117
+ result += String.fromCharCode(buf[i]);
118
+ }
119
+
120
+ return result;
121
+ }
122
+
123
+ function base64Slice(buf: Uint8Array, start: number, end: number): string {
124
+ if (start === 0 && end === buf.length) {
125
+ return fromByteArray(buf);
126
+ } else {
127
+ return fromByteArray(buf.slice(start, end));
128
+ }
129
+ }
130
+
131
+ // https://github.com/feross/buffer/blob/master/index.js#L483
132
+ export function buffToString(
133
+ source: Uint8Array,
134
+ encoding: SupportedEncoding = 'utf8',
135
+ start = 0,
136
+ end = source.length
137
+ ) {
138
+ if (start < 0) {
139
+ start = 0;
140
+ }
141
+
142
+ if (end > source.length) {
143
+ end = source.length;
144
+ }
145
+
146
+ // Return early if start > buffer.length. Done here to prevent potential uint32
147
+ // coercion fail below.
148
+ if (start > source.length || end <= 0 || end <= start) {
149
+ return '';
150
+ }
151
+
152
+ switch (encoding) {
153
+ case 'hex':
154
+ return hexSlice(source, start, end);
155
+
156
+ case 'utf8':
157
+ case 'utf-8':
158
+ return utf8Slice(source, start, end);
159
+
160
+ case 'latin1':
161
+ case 'binary':
162
+ return latin1Slice(source, start, end);
163
+
164
+ case 'base64':
165
+ return base64Slice(source, start, end);
166
+ }
167
+ }
168
+
169
+ // https://github.com/feross/buffer/blob/master/index.js#L954
170
+ export function utf8Slice(buf: Uint8Array, start: number, end: number): string {
171
+ end = Math.min(buf.length, end);
172
+ const res: number[] = [];
173
+
174
+ let i = start;
175
+ while (i < end) {
176
+ const firstByte = buf[i];
177
+ let codePoint: number | null = null;
178
+ let bytesPerSequence = firstByte > 0xef ? 4 : firstByte > 0xdf ? 3 : firstByte > 0xbf ? 2 : 1;
179
+
180
+ if (i + bytesPerSequence <= end) {
181
+ let secondByte, thirdByte, fourthByte, tempCodePoint;
182
+
183
+ switch (bytesPerSequence) {
184
+ case 1:
185
+ if (firstByte < 0x80) {
186
+ codePoint = firstByte;
187
+ }
188
+ break;
189
+ case 2:
190
+ secondByte = buf[i + 1];
191
+ if ((secondByte & 0xc0) === 0x80) {
192
+ tempCodePoint = ((firstByte & 0x1f) << 0x6) | (secondByte & 0x3f);
193
+ if (tempCodePoint > 0x7f) {
194
+ codePoint = tempCodePoint;
195
+ }
196
+ }
197
+ break;
198
+ case 3:
199
+ secondByte = buf[i + 1];
200
+ thirdByte = buf[i + 2];
201
+ if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80) {
202
+ tempCodePoint =
203
+ ((firstByte & 0xf) << 0xc) | ((secondByte & 0x3f) << 0x6) | (thirdByte & 0x3f);
204
+ if (tempCodePoint > 0x7ff && (tempCodePoint < 0xd800 || tempCodePoint > 0xdfff)) {
205
+ codePoint = tempCodePoint;
206
+ }
207
+ }
208
+ break;
209
+ case 4:
210
+ secondByte = buf[i + 1];
211
+ thirdByte = buf[i + 2];
212
+ fourthByte = buf[i + 3];
213
+ if (
214
+ (secondByte & 0xc0) === 0x80 &&
215
+ (thirdByte & 0xc0) === 0x80 &&
216
+ (fourthByte & 0xc0) === 0x80
217
+ ) {
218
+ tempCodePoint =
219
+ ((firstByte & 0xf) << 0x12) |
220
+ ((secondByte & 0x3f) << 0xc) |
221
+ ((thirdByte & 0x3f) << 0x6) |
222
+ (fourthByte & 0x3f);
223
+ if (tempCodePoint > 0xffff && tempCodePoint < 0x110000) {
224
+ codePoint = tempCodePoint;
225
+ }
226
+ }
227
+ }
228
+ }
229
+
230
+ if (codePoint === null) {
231
+ // we did not generate a valid codePoint so insert a
232
+ // replacement char (U+FFFD) and advance only 1 byte
233
+ codePoint = 0xfffd;
234
+ bytesPerSequence = 1;
235
+ } else if (codePoint > 0xffff) {
236
+ // encode to utf16 (surrogate pair dance)
237
+ codePoint -= 0x10000;
238
+ res.push(((codePoint >>> 10) & 0x3ff) | 0xd800);
239
+ codePoint = 0xdc00 | (codePoint & 0x3ff);
240
+ }
241
+
242
+ res.push(codePoint);
243
+ i += bytesPerSequence;
244
+ }
245
+
246
+ return decodeCodePointsArray(res);
247
+ }
248
+
249
+ const MAX_ARGUMENTS_LENGTH = 0x1000;
250
+
251
+ // https://github.com/feross/buffer/blob/master/index.js#L1035
252
+ function decodeCodePointsArray(codePoints: number[]): string {
253
+ const len = codePoints.length;
254
+ if (len <= MAX_ARGUMENTS_LENGTH) {
255
+ return String.fromCharCode.apply(String, codePoints); // avoid extra slice()
256
+ }
257
+
258
+ // Decode in chunks to avoid "call stack size exceeded".
259
+ let res = '';
260
+ let i = 0;
261
+ while (i < len) {
262
+ res += String.fromCharCode.apply(String, codePoints.slice(i, (i += MAX_ARGUMENTS_LENGTH)));
263
+ }
264
+ return res;
265
+ }
266
+
267
+ const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;
268
+
269
+ function base64clean(str: string) {
270
+ // Node takes equal signs as end of the Base64 encoding
271
+ str = str.split('=')[0];
272
+ // Node strips out invalid characters like \n and \t from the string, base64-js does not
273
+ str = str.trim().replace(INVALID_BASE64_RE, '');
274
+ // Node converts strings with length < 2 to ''
275
+ if (str.length < 2) return '';
276
+ // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
277
+ while (str.length % 4 !== 0) {
278
+ str = str + '=';
279
+ }
280
+ return str;
281
+ }
282
+
283
+ export function base64ToBytes(str: string) {
284
+ return toByteArray(base64clean(str));
285
+ }
286
+
287
+ /**
288
+ *
289
+ * Function generates key, it returned both KeyForEncryption and KeyForManifest.
290
+ * `KeyForEncryption === KeyForManifest` produces true;
291
+ *
292
+ * @returns {Object}:
293
+ * {
294
+ * keyForEncryption: Binary;
295
+ * keyForManifest: Binary;
296
+ * }
297
+ */
298
+ export async function keyMiddleware(): Promise<{
299
+ keyForEncryption: KeyInfo;
300
+ keyForManifest: KeyInfo;
301
+ }> {
302
+ const cipher = new AesGcmCipher(WebCryptoService);
303
+ const encryptionInformation = new SplitKey(cipher);
304
+ if (!encryptionInformation?.generateKey) {
305
+ throw new ConfigurationError('Crypto service not initialised');
306
+ }
307
+ const key = await encryptionInformation.generateKey();
308
+ return { keyForEncryption: key, keyForManifest: key };
309
+ }
@@ -0,0 +1,63 @@
1
+ import { type CryptoService } from '../crypto/declarations.js';
2
+
3
+ export function bxor(b1: Uint8Array, b2: Uint8Array): Uint8Array {
4
+ const result = new Uint8Array(b1.length);
5
+ for (let i = 0; i <= b1.length; i++) {
6
+ result[i] = b1[i] ^ b2[i];
7
+ }
8
+ return result;
9
+ }
10
+
11
+ /**
12
+ * Spreads the data in `key` across `n` shares of the same size, using
13
+ * secure random noise so that any n-1 subset of the keys contains no
14
+ * information. This allows a user to store a key across multiple KAS servers.
15
+ * @param key The data to split
16
+ * @param n The number of entries to split across
17
+ * @returns `n` entries of `length(key)` size
18
+ */
19
+ export async function keySplit(
20
+ key: Uint8Array,
21
+ n: number,
22
+ cryptoService: CryptoService
23
+ ): Promise<Uint8Array[]> {
24
+ if (!(key instanceof Uint8Array)) {
25
+ throw Error('ERROR in keySplit - key is not an unsigned byte array');
26
+ }
27
+ if (n <= 0) {
28
+ throw Error('ERROR in keySplit - n is not a positive integer');
29
+ }
30
+ if (n == 1) {
31
+ return [key];
32
+ }
33
+ const keyLength = key.length;
34
+ const splits = [];
35
+ let currKey = key;
36
+ const nonces = await Promise.all(
37
+ Array.from(new Array(n - 1), () => cryptoService.randomBytes(keyLength))
38
+ );
39
+ // https://en.wikipedia.org/wiki/Secret_sharing#t_=_n
40
+ for (const nonce of nonces) {
41
+ currKey = bxor(nonce, currKey);
42
+ splits.push(nonce);
43
+ }
44
+ splits.push(currKey);
45
+ return splits;
46
+ }
47
+
48
+ /**
49
+ * Combines K secret shares, as generated from `keySplit`, into a single value.
50
+ * Note this does no verfication!
51
+ * @param splits the split values, aggregated from KASen
52
+ * @returns the merged value.
53
+ */
54
+ export function keyMerge(splits: Uint8Array[]): Uint8Array {
55
+ if (!Array.isArray(splits)) throw Error('ERROR in keyMerge - splits is not an array');
56
+ if (splits.length < 1) throw Error('ERROR in keyMerge - splits must have at least one element');
57
+
58
+ let currKey = splits[0];
59
+ for (let i = 1; i < splits.length; i++) {
60
+ currKey = bxor(currKey, splits[i]);
61
+ }
62
+ return currKey;
63
+ }