@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,637 @@
1
+ import { v4 } from 'uuid';
2
+ import axios from 'axios';
3
+ import {
4
+ ZipReader,
5
+ fromBuffer,
6
+ fromDataSource,
7
+ streamToBuffer,
8
+ isAppIdProviderCheck,
9
+ type Chunker,
10
+ keyMiddleware as defaultKeyMiddleware,
11
+ } from '../utils/index.js';
12
+ import { base64 } from '../../../src/encodings/index.js';
13
+ import {
14
+ buildKeyAccess,
15
+ EncryptConfiguration,
16
+ fetchKasPublicKey,
17
+ loadTDFStream,
18
+ unwrapHtml,
19
+ validatePolicyObject,
20
+ readStream,
21
+ wrapHtml,
22
+ writeStream,
23
+ } from '../tdf.js';
24
+ import { OIDCRefreshTokenProvider } from '../../../src/auth/oidc-refreshtoken-provider.js';
25
+ import { OIDCExternalJwtProvider } from '../../../src/auth/oidc-externaljwt-provider.js';
26
+ import { CryptoService } from '../crypto/declarations.js';
27
+ import {
28
+ type AuthProvider,
29
+ AppIdAuthProvider,
30
+ HttpRequest,
31
+ withHeaders,
32
+ } from '../../../src/auth/auth.js';
33
+ import EAS from '../../../src/auth/Eas.js';
34
+ import {
35
+ cryptoPublicToPem,
36
+ pemToCryptoPublicKey,
37
+ rstrip,
38
+ validateSecureUrl,
39
+ } from '../../../src/utils.js';
40
+
41
+ import {
42
+ EncryptParams,
43
+ DecryptParams,
44
+ type Scope,
45
+ DecryptStreamMiddleware,
46
+ EncryptKeyMiddleware,
47
+ EncryptStreamMiddleware,
48
+ SplitStep,
49
+ } from './builders.js';
50
+ import { DecoratedReadableStream } from './DecoratedReadableStream.js';
51
+
52
+ import {
53
+ DEFAULT_SEGMENT_SIZE,
54
+ DecryptParamsBuilder,
55
+ type DecryptSource,
56
+ EncryptParamsBuilder,
57
+ } from './builders.js';
58
+ import { KasPublicKeyInfo, OriginAllowList } from '../../../src/access.js';
59
+ import { ConfigurationError } from '../../../src/errors.js';
60
+ import { EntityObject } from '../../../src/tdf/EntityObject.js';
61
+ import { Binary } from '../binary.js';
62
+ import { AesGcmCipher } from '../ciphers/aes-gcm-cipher.js';
63
+ import { toCryptoKeyPair } from '../crypto/crypto-utils.js';
64
+ import * as defaultCryptoService from '../crypto/index.js';
65
+ import { type AttributeObject, AttributeSet, type Policy, SplitKey } from '../models/index.js';
66
+ import { plan } from '../../../src/policy/granter.js';
67
+ import { attributeFQNsAsValues } from '../../../src/policy/api.js';
68
+ import { type Value } from '../../../src/policy/attributes.js';
69
+
70
+ const GLOBAL_BYTE_LIMIT = 64 * 1000 * 1000 * 1000; // 64 GB, see WS-9363.
71
+ const HTML_BYTE_LIMIT = 100 * 1000 * 1000; // 100 MB, see WS-9476.
72
+
73
+ // No default config for now. Delegate to Virtru wrapper for endpoints.
74
+ const defaultClientConfig = { oidcOrigin: '', cryptoService: defaultCryptoService };
75
+
76
+ export const uploadBinaryToS3 = async function (
77
+ stream: ReadableStream<Uint8Array>,
78
+ uploadUrl: string,
79
+ fileSize: number
80
+ ) {
81
+ try {
82
+ const body: Uint8Array = await streamToBuffer(stream);
83
+
84
+ await axios.put(uploadUrl, body, {
85
+ headers: {
86
+ 'Content-Length': fileSize,
87
+ 'content-type': 'application/zip',
88
+ 'cache-control': 'no-store',
89
+ },
90
+ maxContentLength: Infinity,
91
+ maxBodyLength: Infinity,
92
+ });
93
+ } catch (e) {
94
+ console.error(e);
95
+ throw e;
96
+ }
97
+ };
98
+ const getFirstTwoBytes = async (chunker: Chunker) => new TextDecoder().decode(await chunker(0, 2));
99
+
100
+ const makeChunkable = async (source: DecryptSource) => {
101
+ if (!source) {
102
+ throw new ConfigurationError('invalid source');
103
+ }
104
+ // dump stream to buffer
105
+ // we don't support streams anyways (see zipreader.js)
106
+ let initialChunker: Chunker;
107
+ let buf = null;
108
+ switch (source.type) {
109
+ case 'stream':
110
+ buf = await streamToBuffer(source.location);
111
+ initialChunker = fromBuffer(buf);
112
+ break;
113
+ case 'buffer':
114
+ buf = source.location;
115
+ initialChunker = fromBuffer(buf);
116
+ break;
117
+ case 'chunker':
118
+ initialChunker = source.location;
119
+ break;
120
+ default:
121
+ initialChunker = await fromDataSource(source);
122
+ }
123
+
124
+ const magic: string = await getFirstTwoBytes(initialChunker);
125
+ // Pull first two bytes from source.
126
+ if (magic === 'PK') {
127
+ return initialChunker;
128
+ }
129
+ // Unwrap if it's html.
130
+ // If NOT zip (html), convert/dump to buffer, unwrap, and continue.
131
+ const htmlBuf = buf ?? (await initialChunker());
132
+ const zipBuf = unwrapHtml(htmlBuf);
133
+ return fromBuffer(zipBuf);
134
+ };
135
+
136
+ export interface ClientConfig {
137
+ cryptoService?: CryptoService;
138
+ organizationName?: string;
139
+ clientId?: string;
140
+ dpopEnabled?: boolean;
141
+ dpopKeys?: Promise<CryptoKeyPair>;
142
+ kasEndpoint?: string;
143
+ /**
144
+ * Service to use to look up ABAC. Used during autoconfigure. Defaults to
145
+ * kasEndpoint without the trailing `/kas` path segment, if present.
146
+ */
147
+ policyEndpoint?: string;
148
+ /**
149
+ * List of allowed KASes to connect to for rewrap requests.
150
+ * Defaults to `[kasEndpoint]`.
151
+ */
152
+ allowedKases?: string[];
153
+ ignoreAllowList?: boolean;
154
+ easEndpoint?: string;
155
+ // DEPRECATED Ignored
156
+ keyRewrapEndpoint?: string;
157
+ // DEPRECATED Ignored
158
+ keyUpsertEndpoint?: string;
159
+ refreshToken?: string;
160
+ kasPublicKey?: string;
161
+ oidcOrigin?: string;
162
+ externalJwt?: string;
163
+ authProvider?: AuthProvider | AppIdAuthProvider;
164
+ readerUrl?: string;
165
+ entityObjectEndpoint?: string;
166
+ fileStreamServiceWorker?: string;
167
+ progressHandler?: (bytesProcessed: number) => void;
168
+ }
169
+
170
+ /*
171
+ * Extract a keypair provided as part of the options dict.
172
+ * Default to using the clientwide keypair, generating one if necessary.
173
+ *
174
+ * Additionally, update the auth injector with the (potentially new) pubkey
175
+ */
176
+ export async function createSessionKeys({
177
+ authProvider,
178
+ // FIXME use cryptoservice to generate keys again
179
+ cryptoService,
180
+ dpopKeys,
181
+ }: {
182
+ authProvider?: AuthProvider | AppIdAuthProvider;
183
+ cryptoService: CryptoService;
184
+ dpopKeys?: Promise<CryptoKeyPair>;
185
+ }): Promise<CryptoKeyPair> {
186
+ let signingKeys: CryptoKeyPair;
187
+ if (dpopKeys) {
188
+ signingKeys = await dpopKeys;
189
+ } else {
190
+ const keys = await cryptoService.generateSigningKeyPair();
191
+ // signingKeys = await crypto.subtle.generateKey(rsaPkcs1Sha256(), true, ['sign']);
192
+ signingKeys = await toCryptoKeyPair(keys);
193
+ }
194
+
195
+ // This will contact the auth server and forcibly refresh the auth token claims,
196
+ // binding the token and the (new) pubkey together.
197
+ // Note that we base64 encode the PEM string here as a quick workaround, simply because
198
+ // a formatted raw PEM string isn't a valid header value and sending it raw makes keycloak's
199
+ // header parser barf. There are more subtle ways to solve this, but this works for now.
200
+ if (authProvider && !isAppIdProviderCheck(authProvider)) {
201
+ await authProvider?.updateClientPublicKey(signingKeys);
202
+ }
203
+ return signingKeys;
204
+ }
205
+
206
+ /*
207
+ * Create a policy object for an encrypt operation.
208
+ */
209
+ function asPolicy(scope: Scope): Policy {
210
+ if (scope.policyObject) {
211
+ // use the client override if provided
212
+ return scope.policyObject;
213
+ }
214
+ const policyId = scope.policyId ?? v4();
215
+ let dataAttributes: AttributeObject[];
216
+ if (scope.attributeValues) {
217
+ dataAttributes = scope.attributeValues
218
+ .filter(({ fqn }) => !!fqn)
219
+ .map(({ fqn }): AttributeObject => {
220
+ return { attribute: fqn! };
221
+ });
222
+ } else {
223
+ dataAttributes = (scope.attributes ?? []).map((attribute) =>
224
+ typeof attribute === 'string' ? { attribute } : attribute
225
+ );
226
+ }
227
+ return {
228
+ uuid: policyId,
229
+ body: {
230
+ dataAttributes,
231
+ dissem: scope.dissem ?? [],
232
+ },
233
+ };
234
+ }
235
+
236
+ export class Client {
237
+ readonly cryptoService: CryptoService;
238
+
239
+ /**
240
+ * Default kas endpoint, if present. Required for encrypt.
241
+ */
242
+ readonly kasEndpoint: string;
243
+
244
+ /**
245
+ * Policy service endpoint, if present.
246
+ * Required for autoconfiguration with ABAC.
247
+ */
248
+ readonly policyEndpoint: string;
249
+
250
+ /**
251
+ * List of allowed KASes to connect to for rewrap requests.
252
+ * Defaults to `[this.kasEndpoint]`.
253
+ */
254
+ readonly allowedKases: OriginAllowList;
255
+
256
+ readonly kasKeys: Record<string, Promise<KasPublicKeyInfo>> = {};
257
+
258
+ readonly easEndpoint?: string;
259
+
260
+ readonly clientId?: string;
261
+
262
+ readonly authProvider?: AuthProvider | AppIdAuthProvider;
263
+
264
+ readonly readerUrl?: string;
265
+
266
+ readonly fileStreamServiceWorker?: string;
267
+
268
+ /**
269
+ * Session binding keys. Used for DPoP and signed request bodies.
270
+ */
271
+ readonly dpopKeys: Promise<CryptoKeyPair>;
272
+
273
+ readonly eas?: EAS;
274
+
275
+ readonly dpopEnabled: boolean;
276
+
277
+ readonly clientConfig: ClientConfig;
278
+
279
+ /**
280
+ * An abstraction for protecting and accessing data using TDF3 services.
281
+ * @param {Object} [config.keypair] - keypair generated for signing. Optional, will be generated by sdk if not passed
282
+ * @param {String} [config.clientId]
283
+ * @param {String} [config.kasEndpoint] - Key Access Server url
284
+ * @param {String} [config.refreshToken] - After logging in to browser OIDC interface user
285
+ * receives fresh token that needed by SDK for auth needs
286
+ * @param {String} [config.externalJwt] - JWT from external authority (eg Google)
287
+ * @param {String} [config.oidcOrigin] - Endpoint of authentication service
288
+ */
289
+ constructor(config: ClientConfig) {
290
+ const clientConfig = { ...defaultClientConfig, ...config };
291
+ this.cryptoService = clientConfig.cryptoService;
292
+ this.dpopEnabled = !!(clientConfig.dpopEnabled || clientConfig.dpopKeys);
293
+
294
+ clientConfig.readerUrl && (this.readerUrl = clientConfig.readerUrl);
295
+
296
+ if (clientConfig.kasEndpoint) {
297
+ this.kasEndpoint = clientConfig.kasEndpoint;
298
+ } else {
299
+ // handle Deprecated `kasRewrapEndpoint` parameter
300
+ if (!clientConfig.keyRewrapEndpoint) {
301
+ throw new ConfigurationError('KAS definition not found');
302
+ }
303
+ this.kasEndpoint = clientConfig.keyRewrapEndpoint.replace(/\/rewrap$/, '');
304
+ }
305
+ this.kasEndpoint = rstrip(this.kasEndpoint, '/');
306
+ if (clientConfig.policyEndpoint) {
307
+ this.policyEndpoint = rstrip(clientConfig.policyEndpoint, '/');
308
+ } else if (this.kasEndpoint.endsWith('/kas')) {
309
+ this.policyEndpoint = this.kasEndpoint.slice(0, -4);
310
+ }
311
+
312
+ const kasOrigin = new URL(this.kasEndpoint).origin;
313
+ if (clientConfig.allowedKases) {
314
+ this.allowedKases = new OriginAllowList(
315
+ clientConfig.allowedKases,
316
+ !!clientConfig.ignoreAllowList
317
+ );
318
+ if (!validateSecureUrl(this.kasEndpoint) && !this.allowedKases.allows(kasOrigin)) {
319
+ throw new ConfigurationError(`Invalid KAS endpoint [${this.kasEndpoint}]`);
320
+ }
321
+ } else {
322
+ if (!validateSecureUrl(this.kasEndpoint)) {
323
+ throw new ConfigurationError(
324
+ `Invalid KAS endpoint [${this.kasEndpoint}]; to force, please list it among allowedKases`
325
+ );
326
+ }
327
+ this.allowedKases = new OriginAllowList([kasOrigin], !!clientConfig.ignoreAllowList);
328
+ }
329
+
330
+ this.authProvider = config.authProvider;
331
+ this.clientConfig = clientConfig;
332
+
333
+ if (this.authProvider && isAppIdProviderCheck(this.authProvider)) {
334
+ this.eas = new EAS({
335
+ authProvider: this.authProvider,
336
+ endpoint:
337
+ clientConfig.entityObjectEndpoint ?? `${clientConfig.easEndpoint}/api/entityobject`,
338
+ });
339
+ }
340
+
341
+ this.clientId = clientConfig.clientId;
342
+ if (!this.authProvider) {
343
+ if (!clientConfig.clientId) {
344
+ throw new ConfigurationError('Client ID or custom AuthProvider must be defined');
345
+ }
346
+
347
+ //Are we exchanging a refreshToken for a bearer token (normal AuthCode browser auth flow)?
348
+ //If this is a browser context, we expect the caller to handle the initial
349
+ //browser-based OIDC login and authentication process against the OIDC endpoint using their chosen method,
350
+ //and provide us with a valid refresh token/clientId obtained from that process.
351
+ if (clientConfig.refreshToken) {
352
+ this.authProvider = new OIDCRefreshTokenProvider({
353
+ clientId: clientConfig.clientId,
354
+ refreshToken: clientConfig.refreshToken,
355
+ oidcOrigin: clientConfig.oidcOrigin,
356
+ });
357
+ } else if (clientConfig.externalJwt) {
358
+ //Are we exchanging a JWT previously issued by a trusted external entity (e.g. Google) for a bearer token?
359
+ this.authProvider = new OIDCExternalJwtProvider({
360
+ clientId: clientConfig.clientId,
361
+ externalJwt: clientConfig.externalJwt,
362
+ oidcOrigin: clientConfig.oidcOrigin,
363
+ });
364
+ }
365
+ }
366
+ this.dpopKeys = createSessionKeys({
367
+ authProvider: this.authProvider,
368
+ cryptoService: this.cryptoService,
369
+ dpopKeys: clientConfig.dpopKeys,
370
+ });
371
+ if (clientConfig.kasPublicKey) {
372
+ this.kasKeys[this.kasEndpoint] = Promise.resolve({
373
+ url: this.kasEndpoint,
374
+ algorithm: 'rsa:2048',
375
+ key: pemToCryptoPublicKey(clientConfig.kasPublicKey),
376
+ publicKey: clientConfig.kasPublicKey,
377
+ });
378
+ }
379
+ }
380
+
381
+ /**
382
+ * Encrypt plaintext into TDF ciphertext. One of the core operations of the Virtru SDK.
383
+ *
384
+ * @param scope dissem and attributes for constructing the policy
385
+ * @param source source object of unencrypted data
386
+ * @param [asHtml] If we should wrap the TDF data in a self-opening HTML wrapper. Defaults to false
387
+ * @param [autoconfigure] If we should use scope.attributes to configure KAOs
388
+ * @param [metadata] Additional non-secret data to store with the TDF
389
+ * @param [opts] Test only
390
+ * @param [mimeType] mime type of source. defaults to `unknown`
391
+ * @param [offline] Where to store the policy. Defaults to `false` - which results in `upsert` events to store/update a policy
392
+ * @param [windowSize] - segment size in bytes. Defaults to a a million bytes.
393
+ * @param [keyMiddleware] - function that handle keys
394
+ * @param [streamMiddleware] - function that handle stream
395
+ * @param [eo] - (deprecated) entity object
396
+ * @return a {@link https://nodejs.org/api/stream.html#stream_class_stream_readable|Readable} a new stream containing the TDF ciphertext
397
+ */
398
+ async encrypt({
399
+ scope = { attributes: [], dissem: [] },
400
+ autoconfigure,
401
+ source,
402
+ asHtml = false,
403
+ metadata,
404
+ mimeType,
405
+ offline = false,
406
+ windowSize = DEFAULT_SEGMENT_SIZE,
407
+ eo,
408
+ keyMiddleware = defaultKeyMiddleware,
409
+ streamMiddleware = async (stream: DecoratedReadableStream) => stream,
410
+ splitPlan,
411
+ assertionConfigs = [],
412
+ }: EncryptParams): Promise<DecoratedReadableStream> {
413
+ const dpopKeys = await this.dpopKeys;
414
+
415
+ const policyObject = asPolicy(scope);
416
+ validatePolicyObject(policyObject);
417
+
418
+ if (!splitPlan && autoconfigure) {
419
+ let avs: Value[] = scope.attributeValues ?? [];
420
+ const fqns: string[] = scope.attributes
421
+ ? scope.attributes.map((attribute) =>
422
+ typeof attribute === 'string' ? attribute : attribute.attribute
423
+ )
424
+ : [];
425
+
426
+ if (!avs.length && fqns.length) {
427
+ // Hydrate avs from policy endpoint givnen the fqns
428
+ if (!this.policyEndpoint) {
429
+ throw new ConfigurationError('policyEndpoint not set in TDF3 Client constructor');
430
+ }
431
+ avs = await attributeFQNsAsValues(
432
+ this.policyEndpoint,
433
+ this.authProvider as AuthProvider,
434
+ ...fqns
435
+ );
436
+ } else if (scope.attributeValues) {
437
+ avs = scope.attributeValues;
438
+ if (!scope.attributes) {
439
+ scope.attributes = avs.map(({ fqn }) => fqn);
440
+ }
441
+ }
442
+ if (
443
+ avs.length != scope.attributes?.length ||
444
+ !avs.map(({ fqn }) => fqn).every((a) => fqns.indexOf(a) >= 0)
445
+ ) {
446
+ throw new ConfigurationError(
447
+ `Attribute mismatch between [${fqns}] and explicit values ${JSON.stringify(
448
+ avs.map(({ fqn }) => fqn)
449
+ )}`
450
+ );
451
+ }
452
+ const detailedPlan = plan(avs);
453
+ splitPlan = detailedPlan.map((kat) => {
454
+ const { kas, sid } = kat;
455
+ if (kas?.publicKey?.cached?.keys && !(kas.uri in this.kasKeys)) {
456
+ const keys = kas.publicKey.cached.keys.filter(
457
+ ({ alg }) => alg == 'KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048'
458
+ );
459
+ if (keys?.length) {
460
+ const key = keys[0];
461
+ this.kasKeys[kas.uri] = Promise.resolve({
462
+ key: pemToCryptoPublicKey(key.pem),
463
+ publicKey: key.pem,
464
+ url: kas.uri,
465
+ algorithm: 'rsa:2048',
466
+ kid: key.kid,
467
+ });
468
+ }
469
+ }
470
+ return { kas: kas.uri, sid };
471
+ });
472
+ }
473
+
474
+ // TODO: Refactor underlying builder to remove some of this unnecessary config.
475
+
476
+ const byteLimit = asHtml ? HTML_BYTE_LIMIT : GLOBAL_BYTE_LIMIT;
477
+ const encryptionInformation = new SplitKey(new AesGcmCipher(this.cryptoService));
478
+ let attributeSet: undefined | AttributeSet;
479
+ let entity: undefined | EntityObject;
480
+ if (eo) {
481
+ entity = eo;
482
+ const s = new AttributeSet();
483
+ eo.attributes.forEach((attr) => s.addJwtAttribute(attr));
484
+ attributeSet = s;
485
+ }
486
+
487
+ const splits: SplitStep[] = splitPlan?.length ? splitPlan : [{ kas: this.kasEndpoint }];
488
+ encryptionInformation.keyAccess = await Promise.all(
489
+ splits.map(async ({ kas, sid }) => {
490
+ if (!(kas in this.kasKeys)) {
491
+ this.kasKeys[kas] = fetchKasPublicKey(kas);
492
+ }
493
+ const kasPublicKey = await this.kasKeys[kas];
494
+ return buildKeyAccess({
495
+ attributeSet,
496
+ type: offline ? 'wrapped' : 'remote',
497
+ url: kasPublicKey.url,
498
+ kid: kasPublicKey.kid,
499
+ publicKey: kasPublicKey.publicKey,
500
+ metadata,
501
+ sid,
502
+ });
503
+ })
504
+ );
505
+ const { keyForEncryption, keyForManifest } = await (keyMiddleware as EncryptKeyMiddleware)();
506
+ const ecfg: EncryptConfiguration = {
507
+ allowList: this.allowedKases,
508
+ attributeSet,
509
+ byteLimit,
510
+ cryptoService: this.cryptoService,
511
+ dpopKeys,
512
+ encryptionInformation,
513
+ entity,
514
+ segmentSizeDefault: windowSize,
515
+ integrityAlgorithm: 'HS256',
516
+ segmentIntegrityAlgorithm: 'GMAC',
517
+ contentStream: source,
518
+ mimeType,
519
+ policy: policyObject,
520
+ authProvider: this.authProvider,
521
+ progressHandler: this.clientConfig.progressHandler,
522
+ keyForEncryption,
523
+ keyForManifest,
524
+ assertionConfigs,
525
+ };
526
+
527
+ const stream = await (streamMiddleware as EncryptStreamMiddleware)(await writeStream(ecfg));
528
+
529
+ if (!asHtml) {
530
+ return stream;
531
+ }
532
+
533
+ // Wrap if it's html.
534
+ if (!stream.manifest) {
535
+ throw new Error('internal: missing manifest in encrypt function');
536
+ }
537
+ const htmlBuf = wrapHtml(await stream.toBuffer(), stream.manifest, this.readerUrl ?? '');
538
+
539
+ return new DecoratedReadableStream({
540
+ pull(controller: ReadableStreamDefaultController) {
541
+ controller.enqueue(htmlBuf);
542
+ controller.close();
543
+ },
544
+ });
545
+ }
546
+
547
+ /**
548
+ * Decrypt TDF ciphertext into plaintext. One of the core operations of the Virtru SDK.
549
+ *
550
+ * @param params keyMiddleware fucntion to process key
551
+ * @param params streamMiddleware fucntion to process streamMiddleware
552
+ * @param params.source A data stream object, one of remote, stream, buffer, etc. types.
553
+ * @param params.eo Optional entity object (legacy AuthZ)
554
+ * @param params.assertionVerificationKeys Optional verification keys for assertions.
555
+ * @return a {@link https://nodejs.org/api/stream.html#stream_class_stream_readable|Readable} stream containing the decrypted plaintext.
556
+ * @see DecryptParamsBuilder
557
+ */
558
+ async decrypt({
559
+ eo,
560
+ source,
561
+ keyMiddleware = async (key: Binary) => key,
562
+ streamMiddleware = async (stream: DecoratedReadableStream) => stream,
563
+ assertionVerificationKeys,
564
+ noVerifyAssertions,
565
+ }: DecryptParams): Promise<DecoratedReadableStream> {
566
+ const dpopKeys = await this.dpopKeys;
567
+ let entityObject;
568
+ if (this.eas || eo) {
569
+ const sessionPublicKey = await cryptoPublicToPem(dpopKeys.publicKey);
570
+ if (eo && eo.publicKey == sessionPublicKey) {
571
+ entityObject = eo;
572
+ } else if (this.eas) {
573
+ entityObject = await this.eas.fetchEntityObject({
574
+ publicKey: sessionPublicKey,
575
+ });
576
+ }
577
+ }
578
+ if (!this.authProvider) {
579
+ throw new ConfigurationError('AuthProvider missing');
580
+ }
581
+ const chunker = await makeChunkable(source);
582
+
583
+ // Await in order to catch any errors from this call.
584
+ // TODO: Write error event to stream and don't await.
585
+ return await (streamMiddleware as DecryptStreamMiddleware)(
586
+ await readStream({
587
+ allowList: this.allowedKases,
588
+ authProvider: this.authProvider,
589
+ chunker,
590
+ cryptoService: this.cryptoService,
591
+ dpopKeys,
592
+ entity: entityObject,
593
+ fileStreamServiceWorker: this.clientConfig.fileStreamServiceWorker,
594
+ keyMiddleware,
595
+ progressHandler: this.clientConfig.progressHandler,
596
+ assertionVerificationKeys,
597
+ noVerifyAssertions,
598
+ })
599
+ );
600
+ }
601
+
602
+ /**
603
+ * Get the unique policyId associated with TDF ciphertext. Useful for managing authorization policies of encrypted data.
604
+ * <br/><br/>
605
+ * The policyId is embedded in the ciphertext so this is a local operation.
606
+ *
607
+ * @param {object} source - Required. TDF data stream,
608
+ * generated using {@link DecryptParamsBuilder#build|DecryptParamsBuilder's build()}.
609
+ * @return {string} - the unique policyId, which can be used for tracking purposes or policy management operations.
610
+ * @see DecryptParamsBuilder
611
+ */
612
+ async getPolicyId({ source }: { source: DecryptSource }) {
613
+ const chunker = await makeChunkable(source);
614
+ const zipHelper = new ZipReader(chunker);
615
+ const centralDirectory = await zipHelper.getCentralDirectory();
616
+ const manifest = await zipHelper.getManifest(centralDirectory, '0.manifest.json');
617
+ const policyJson = base64.decode(manifest.encryptionInformation.policy);
618
+ return JSON.parse(policyJson).uuid;
619
+ }
620
+
621
+ async loadTDFStream({ source }: { source: DecryptSource }) {
622
+ const chunker = await makeChunkable(source);
623
+ return loadTDFStream(chunker);
624
+ }
625
+ }
626
+
627
+ export type { AuthProvider };
628
+
629
+ export {
630
+ AppIdAuthProvider,
631
+ DecryptParamsBuilder,
632
+ DecryptSource,
633
+ EncryptParamsBuilder,
634
+ HttpRequest,
635
+ fromDataSource,
636
+ withHeaders,
637
+ };