@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,181 @@
1
+ import { ConfigurationError } from '../errors.js';
2
+ import { Attribute, AttributeRuleType, KeyAccessServer, Value } from './attributes.js';
3
+
4
+ export type KeySplitStep = {
5
+ kas: KeyAccessServer;
6
+ sid?: string;
7
+ };
8
+
9
+ type AttributeClause = {
10
+ def: Attribute;
11
+ values: string[];
12
+ };
13
+
14
+ type AndClause = {
15
+ op: 'allOf';
16
+ kases: string[];
17
+ };
18
+
19
+ type HeirarchyClause = {
20
+ op: 'hierarchy';
21
+ kases: string[];
22
+ };
23
+
24
+ type OrClause = {
25
+ op: 'anyOf';
26
+ kases: string[];
27
+ };
28
+
29
+ type BooleanClause = AndClause | OrClause | HeirarchyClause;
30
+
31
+ type BooleanOperator = BooleanClause['op'];
32
+
33
+ type ComplexBooleanClause = {
34
+ op: BooleanOperator;
35
+ children: BooleanClause[];
36
+ };
37
+
38
+ export function booleanOperatorFor(rule?: AttributeRuleType): BooleanOperator {
39
+ if (!rule) {
40
+ return 'allOf';
41
+ }
42
+ switch (rule) {
43
+ case 'ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED':
44
+ case 'ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF':
45
+ return 'allOf';
46
+ case 'ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF':
47
+ return 'anyOf';
48
+ case 'ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY':
49
+ return 'hierarchy';
50
+ }
51
+ }
52
+
53
+ export function plan(dataAttrs: Value[]): KeySplitStep[] {
54
+ // KASes by value
55
+ const grants: Record<string, Set<string>> = {};
56
+ // KAS detail by KAS url
57
+ const kasInfo: Record<string, KeyAccessServer> = {};
58
+ // Attribute definitions in use
59
+ const prefixes: Set<string> = new Set();
60
+ // Values grouped by normalized attribute prefix
61
+ const allClauses: Record<string, AttributeClause> = {};
62
+ // Values by normalized FQN
63
+ const allValues: Record<string, Value> = {};
64
+
65
+ const addGrants = (val: string, gs?: KeyAccessServer[]): boolean => {
66
+ if (!gs?.length) {
67
+ if (!(val in grants)) {
68
+ grants[val] = new Set();
69
+ }
70
+ return false;
71
+ }
72
+ for (const g of gs) {
73
+ if (val in grants) {
74
+ grants[val].add(g.uri);
75
+ } else {
76
+ grants[val] = new Set([g.uri]);
77
+ }
78
+ kasInfo[g.uri] = g;
79
+ }
80
+ return true;
81
+ };
82
+
83
+ for (const v of dataAttrs) {
84
+ const { attribute, fqn } = v;
85
+ if (!attribute) {
86
+ throw new ConfigurationError(`attribute not defined for [${fqn}]`);
87
+ }
88
+ const valFqn = fqn.toLowerCase();
89
+ const attrFqn = attribute.fqn.toLowerCase();
90
+ if (!prefixes.has(attrFqn)) {
91
+ prefixes.add(attrFqn);
92
+ allClauses[attrFqn] = {
93
+ def: attribute,
94
+ values: [],
95
+ };
96
+ }
97
+ allClauses[attrFqn].values.push(valFqn);
98
+ allValues[valFqn] = v;
99
+ if (!addGrants(valFqn, v.grants)) {
100
+ if (!addGrants(valFqn, attribute.grants)) {
101
+ addGrants(valFqn, attribute.namespace?.grants);
102
+ }
103
+ }
104
+ }
105
+ const kcs: ComplexBooleanClause[] = [];
106
+ for (const attrClause of Object.values(allClauses)) {
107
+ const ccv: BooleanClause[] = [];
108
+ for (const term of attrClause.values) {
109
+ const grantsForTerm = Array.from(grants[term] || []);
110
+ if (grantsForTerm?.length) {
111
+ ccv.push({
112
+ op: 'anyOf',
113
+ kases: grantsForTerm,
114
+ });
115
+ }
116
+ }
117
+ const op = booleanOperatorFor(attrClause.def.rule);
118
+ kcs.push({
119
+ op,
120
+ children: ccv,
121
+ });
122
+ }
123
+ return simplify(kcs, kasInfo);
124
+ }
125
+
126
+ function simplify(
127
+ clauses: ComplexBooleanClause[],
128
+ kasInfo: Record<string, KeyAccessServer>
129
+ ): KeySplitStep[] {
130
+ const conjunction: Record<string, string[]> = {};
131
+ function keyFor(kases: string[]): string {
132
+ const k = Array.from(new Set([kases])).sort();
133
+ return k.join('|');
134
+ }
135
+ for (const { op, children } of clauses) {
136
+ if (!children) {
137
+ continue;
138
+ }
139
+ if (op === 'anyOf') {
140
+ const anyKids = [];
141
+ for (const bc of children) {
142
+ if (bc.op != 'anyOf') {
143
+ throw new Error('internal: autoconfigure inversion in disjunction');
144
+ }
145
+ if (!bc.kases?.length) {
146
+ continue;
147
+ }
148
+ anyKids.push(...bc.kases);
149
+ }
150
+ if (!anyKids?.length) {
151
+ continue;
152
+ }
153
+ const k = keyFor(anyKids);
154
+ conjunction[k] = anyKids;
155
+ } else {
156
+ for (const bc of children) {
157
+ if (bc.op != 'anyOf') {
158
+ throw new Error('insternal: autoconfigure inversion in conjunction');
159
+ }
160
+ if (!bc.kases?.length) {
161
+ continue;
162
+ }
163
+ const k = keyFor(bc.kases);
164
+ conjunction[k] = bc.kases;
165
+ }
166
+ }
167
+ }
168
+ const t: KeySplitStep[] = [];
169
+ let i = 0;
170
+ for (const k of Object.keys(conjunction).sort()) {
171
+ if (!conjunction[k]) {
172
+ continue;
173
+ }
174
+ i += 1;
175
+ const sid = '' + i;
176
+ for (const kas of conjunction[k]) {
177
+ t.push({ sid, kas: kasInfo[kas] });
178
+ }
179
+ }
180
+ return t;
181
+ }
@@ -0,0 +1,27 @@
1
+ import { type KasPublicKeyInfo } from '../access.js';
2
+
3
+ export interface AttributeObject {
4
+ readonly attribute: string;
5
+ readonly isDefault?: boolean;
6
+ readonly displayName?: string;
7
+ /** PEM encoded public key */
8
+ readonly pubKey: string;
9
+ readonly kasUrl: string;
10
+ /** The most recent version 1.1.0. */
11
+ readonly schemaVersion?: string;
12
+ }
13
+
14
+ export async function createAttribute(
15
+ attribute: string,
16
+ pubKey: KasPublicKeyInfo,
17
+ kasUrl: string
18
+ ): Promise<AttributeObject> {
19
+ return {
20
+ attribute,
21
+ isDefault: false,
22
+ displayName: '',
23
+ pubKey: pubKey.publicKey,
24
+ kasUrl,
25
+ schemaVersion: '1.1.0',
26
+ };
27
+ }
@@ -0,0 +1,3 @@
1
+ export default interface AttributeObjectJwt {
2
+ readonly jwt: string;
3
+ }
@@ -0,0 +1,42 @@
1
+ export enum AlgorithmName {
2
+ ECDH = 'ECDH',
3
+ ECDSA = 'ECDSA',
4
+ ES256 = 'ES256',
5
+ HKDF = 'HKDF',
6
+ RSA_OAEP = 'RSA-OAEP',
7
+ RSA_PSS = 'RSA-PSS',
8
+ }
9
+
10
+ export enum NamedCurve {
11
+ P256 = 'P-256',
12
+ P384 = 'P-384',
13
+ P512 = 'P-512',
14
+ }
15
+
16
+ export enum CipherType {
17
+ AesGcm = 'AES-GCM',
18
+ }
19
+
20
+ export enum HashType {
21
+ Sha256 = 'SHA-256',
22
+ }
23
+
24
+ export enum KeyFormat {
25
+ Raw = 'raw',
26
+ Pkcs8 = 'pkcs8',
27
+ Spki = 'spki',
28
+ }
29
+
30
+ export enum KeyType {
31
+ Private = 'private',
32
+ Public = 'public',
33
+ }
34
+
35
+ export enum KeyUsageType {
36
+ Encrypt = 'encrypt',
37
+ Decrypt = 'decrypt',
38
+ Verify = 'verify',
39
+ Sign = 'sign',
40
+ UnwrapKey = 'unwrapKey',
41
+ WrapKey = 'wrapKey',
42
+ }
@@ -0,0 +1,18 @@
1
+ import type AttributeObjectJwt from './AttributeObjectJwt.js';
2
+
3
+ /**
4
+ * Defined by the TDF3 spec and generated by an Entity Attribute Service,
5
+ * this object (when accompanied by a valid cert) defines what attributes
6
+ * a client has access to.
7
+ */
8
+ export interface EntityObject {
9
+ readonly aliases: string[];
10
+ readonly attributes: AttributeObjectJwt[];
11
+ /** This should be present on validated EOs only - it is written by an EAS */
12
+ readonly cert?: string;
13
+ readonly exp?: number;
14
+ readonly publicKey: string;
15
+ readonly userId: string;
16
+ /** The most recent version 1.1.0. */
17
+ readonly schemaVersion?: string;
18
+ }
@@ -0,0 +1,120 @@
1
+ enum CipherType {
2
+ Aes256Gcm64, // Default cipher
3
+ Aes256Gcm96,
4
+ Aes256Gcm104,
5
+ Aes256Gcm112,
6
+ Aes256Gcm120,
7
+ Aes256Gcm128,
8
+ }
9
+
10
+ /**
11
+ * The Signature ECC Mode is used to determine the length of the signature at the end of a nanotdf. This, in
12
+ * combination with the previous HAS_SIGNATURE section, describe the signature of the nanotdf. The following table
13
+ * describes the valid values and the associated ECC Params.
14
+ */
15
+ enum CurveName {
16
+ Secp256R1,
17
+ Secp384R1,
18
+ Secp521R1,
19
+ }
20
+
21
+ export enum ResourceLocatorProtocol {
22
+ Http,
23
+ Https,
24
+ Unreserverd,
25
+ SharedResourceDirectory = 0xff,
26
+ }
27
+
28
+ export enum PolicyType {
29
+ Remote,
30
+ EmbeddedText,
31
+ EmbeddedEncrypted, // Default policy
32
+ EmbeddedEncryptedPKA, // Todo: Not implemented
33
+ }
34
+
35
+ /**
36
+ * Resource Locator interface
37
+ */
38
+ export interface ResourceLocator {
39
+ protocol: ResourceLocatorProtocol;
40
+ length: number;
41
+ body: string;
42
+ }
43
+
44
+ /**
45
+ * Policy interface
46
+ */
47
+ export interface Policy {
48
+ type: PolicyType;
49
+ binding: Uint8Array;
50
+ }
51
+
52
+ /**
53
+ * Remote policy interface
54
+ */
55
+ export interface RemotePolicy extends Policy {
56
+ protocol: ResourceLocatorProtocol;
57
+ urn: string;
58
+ }
59
+
60
+ /**
61
+ * Embedded policy interface
62
+ */
63
+ export interface EmbeddedPolicy extends Policy {
64
+ content: Uint8Array;
65
+ }
66
+
67
+ /**
68
+ * Header interface
69
+ */
70
+ export interface Header {
71
+ // Magic Number & Version
72
+ magicNumberVersion: Uint8Array;
73
+
74
+ // KAS Resource Locator
75
+ kas: ResourceLocator;
76
+
77
+ // ECC & Binding Mode
78
+ useECDSABinding: boolean;
79
+ ephemeralCurveName: CurveName;
80
+
81
+ // Symmetric & Payload Config
82
+ hasSignature: boolean;
83
+ signatureCurveName: CurveName;
84
+ symmetricCipher: CipherType;
85
+ // Auth tag length is not part of the spec, but is needed for decrypt
86
+ authTagLength: number;
87
+
88
+ // Policy
89
+ policy: RemotePolicy | EmbeddedPolicy;
90
+
91
+ // Ephemeral Public Key
92
+ ephemeralPublicKey: Uint8Array;
93
+ }
94
+
95
+ /**
96
+ * Payload interface
97
+ */
98
+ export interface Payload {
99
+ iv: Uint8Array;
100
+ ciphertext: Uint8Array;
101
+ authTag: Uint8Array;
102
+ ciphertextAuthTag: Uint8Array;
103
+ }
104
+
105
+ /**
106
+ * Signature interface
107
+ */
108
+ export interface Signature {
109
+ publicKey: Uint8Array;
110
+ signature: Uint8Array;
111
+ }
112
+
113
+ /**
114
+ * NanoTDF interface
115
+ */
116
+ export interface NanoTDF {
117
+ header: Header;
118
+ payload: Payload;
119
+ signature: Signature;
120
+ }
@@ -0,0 +1,51 @@
1
+ import { type AttributeObject } from './AttributeObject.js';
2
+ import { v4 as uuid } from 'uuid';
3
+
4
+ export default class Policy {
5
+ static CURRENT_VERSION = '1.1.0';
6
+
7
+ private uuidStr = uuid();
8
+ private dataAttributesList: AttributeObject[] = [];
9
+ private dissemList: string[] = [];
10
+ // private schemaVersionStr = Policy.CURRENT_VERSION;
11
+
12
+ /**
13
+ * Adds a group of entities, to the Policy's dissem list
14
+ *
15
+ * @param entities The entities will be added to the policy and
16
+ * they will have access to the TDF
17
+ */
18
+ addEntities(entities: string[]): void {
19
+ this.dissemList.push(...entities);
20
+
21
+ // Remove any duplicates
22
+ this.dissemList = this.dissemList.filter((elem, index, self) => {
23
+ return index === self.indexOf(elem);
24
+ });
25
+ }
26
+
27
+ /**
28
+ *
29
+ * Adds an Attribute object to the policy
30
+ *
31
+ * @param attribute will be added to the policy
32
+ */
33
+ addAttribute(attribute: AttributeObject): void {
34
+ this.dataAttributesList.push(attribute);
35
+ }
36
+
37
+ /**
38
+ * Returns the JSON string of Policy object
39
+ *
40
+ * @return {string} [The constructed Policy object as JSON string]
41
+ */
42
+ toJSON(): string {
43
+ return JSON.stringify({
44
+ uuid: this.uuidStr,
45
+ body: {
46
+ dataAttributes: this.dataAttributesList,
47
+ dissem: this.dissemList,
48
+ },
49
+ });
50
+ }
51
+ }
@@ -0,0 +1,12 @@
1
+ import { type AttributeObject } from './AttributeObject.js';
2
+
3
+ export interface PolicyObjectBody {
4
+ readonly dataAttributes: AttributeObject[];
5
+ readonly dissem: string[];
6
+ }
7
+
8
+ export default interface PolicyObject {
9
+ readonly uuid: string;
10
+ readonly body: PolicyObjectBody;
11
+ readonly schemaVersion?: string;
12
+ }
@@ -0,0 +1,12 @@
1
+ type TypedArray =
2
+ | Int8Array
3
+ | Uint8Array
4
+ | Int16Array
5
+ | Uint16Array
6
+ | Int32Array
7
+ | Uint32Array
8
+ | Uint8ClampedArray
9
+ | Float32Array
10
+ | Float64Array;
11
+
12
+ export default TypedArray;
@@ -0,0 +1,6 @@
1
+ export { type AttributeObject, createAttribute } from './AttributeObject.js';
2
+ export { type EntityObject } from './EntityObject.js';
3
+ export { type default as PolicyObject } from './PolicyObject.js';
4
+ export { type default as TypedArray } from './TypedArray.js';
5
+ export { default as Policy } from './Policy.js';
6
+ export * as Crypto from './Crypto.js';
@@ -0,0 +1,55 @@
1
+ import PolicyTypeEnum from '../nanotdf/enum/PolicyTypeEnum.js';
2
+
3
+ export type InputSource =
4
+ | ReadableStream<Uint8Array>
5
+ | Uint8Array
6
+ | string
7
+ | ArrayBuffer
8
+ | Promise<ReadableStream<Uint8Array>>;
9
+
10
+ type Header = {
11
+ magicNumberVersion: string[];
12
+ kas: {
13
+ protocol: number;
14
+ length: number;
15
+ body: string;
16
+ };
17
+ eccBindingMode: {
18
+ useECDSABinding: boolean;
19
+ ephemeralCurveName: number;
20
+ };
21
+ symmetricPayloadConfig: {
22
+ hasSignature: boolean;
23
+ signatureCurveName: number;
24
+ symmetricCipher: number;
25
+ };
26
+ ephemeralPublicKey: string[];
27
+ };
28
+
29
+ type HeaderPolicy = {
30
+ type: PolicyTypeEnum;
31
+ content: string[];
32
+ binding: string[];
33
+ };
34
+
35
+ type RemotePolicy = {
36
+ protocol: number;
37
+ length: number;
38
+ body: string;
39
+ };
40
+
41
+ export type PlainEmbeddedHeader = Header & {
42
+ policy: HeaderPolicy;
43
+ };
44
+
45
+ export type EmbeddedHeader = Header & {
46
+ policy: HeaderPolicy;
47
+ };
48
+
49
+ export type RemoteHeader = Header & {
50
+ policy: {
51
+ type: PolicyTypeEnum;
52
+ remotePolicy: RemotePolicy;
53
+ binding: string[];
54
+ };
55
+ };
package/src/utils.ts ADDED
@@ -0,0 +1,149 @@
1
+ import { type AxiosResponseHeaders, type RawAxiosResponseHeaders } from 'axios';
2
+ import { exportSPKI, importX509 } from 'jose';
3
+
4
+ import { base64 } from './encodings/index.js';
5
+ import { pemCertToCrypto, pemPublicToCrypto } from './nanotdf-crypto/index.js';
6
+ import { ConfigurationError } from './errors.js';
7
+
8
+ /**
9
+ * Check to see if the given URL is 'secure'. This assumes:
10
+ *
11
+ * - `https` URLs are always secure
12
+ * - `http` URLS are allowed for localhost
13
+ * - And also for '`svc.cluster.local` and `.internal` URLs
14
+ *
15
+ * Note that this does not resolve the URL, so it is possible this could
16
+ * resolve to some other internal URL, and may return `false` on non-fully
17
+ * qualified internal URLs.
18
+ *
19
+ * @param url remote service to validate
20
+ * @returns the url is local or `https`
21
+ */
22
+ export function validateSecureUrl(url: string): boolean {
23
+ const httpsRegex = /^https:/;
24
+ if (/^http:\/\/(localhost|127\.0\.0\.1)(:[0-9]{1,5})?($|\/)/.test(url)) {
25
+ console.warn(`Development URL detected: [${url}]`);
26
+ } else if (
27
+ /^http:\/\/([a-zA-Z.-]*[.])?svc\.cluster\.local($|\/)/.test(url) ||
28
+ /^http:\/\/([a-zA-Z.-]*[.])?internal(:[0-9]{1,5})?($|\/)/.test(url)
29
+ ) {
30
+ console.info(`Internal URL detected: [${url}]`);
31
+ } else if (!httpsRegex.test(url)) {
32
+ console.error(`Insecure KAS URL loaded. Are you running in a secure environment? [${url}]`);
33
+ return false;
34
+ }
35
+ return true;
36
+ }
37
+
38
+ export function padSlashToUrl(u: string): string {
39
+ if (u.endsWith('/')) {
40
+ return u;
41
+ }
42
+ return `${u}/`;
43
+ }
44
+
45
+ export function isBrowser() {
46
+ return typeof window !== 'undefined'; // eslint-disable-line
47
+ }
48
+
49
+ export const isFirefox = (): boolean => isBrowser() && 'InstallTrigger' in window;
50
+
51
+ export const rstrip = (str: string, suffix = ' '): string => {
52
+ while (str && suffix && str.endsWith(suffix)) {
53
+ str = str.slice(0, -suffix.length);
54
+ }
55
+ return str;
56
+ };
57
+
58
+ /**
59
+ * Rough estimate of number of seconds to add to the current system clock time
60
+ * to get the clock time on the given server, or origin if not specified
61
+ * @param server a server to compute skew with
62
+ * @returns the number of seconds to add to the current local system clock time
63
+ * to get an rough guess of the time on the given server
64
+ */
65
+ export const estimateSkew = async (serverEndpoint = window.origin): Promise<number> => {
66
+ const localUnixTimeBefore = Date.now();
67
+ const response = await fetch(serverEndpoint);
68
+ return estimateSkewFromHeaders(response.headers, localUnixTimeBefore);
69
+ };
70
+
71
+ export type AnyHeaders = AxiosResponseHeaders | RawAxiosResponseHeaders | Headers;
72
+
73
+ /**
74
+ * Rough estimate of number of seconds to add to the curren time to get
75
+ * the clock time on the server that responded with the headers object.
76
+ * @param headers A set of headers, which must include the `date` header
77
+ * @param dateNowBefore time before initiating the request, usually by calling
78
+ * `Date.now()`. Note this is in milliseconds since the epoch, while the
79
+ * estimate is given in seconds.
80
+ * @returns the number of seconds to add to the current local system clock time
81
+ * to get an rough guess of the time on the server that was used
82
+ */
83
+ export const estimateSkewFromHeaders = (headers: AnyHeaders, dateNowBefore?: number): number => {
84
+ const localUnixTimeBefore = (dateNowBefore || Date.now()) / 1000;
85
+ let serverDateString;
86
+ if (headers.get) {
87
+ serverDateString = (headers as Headers).get('Date');
88
+ } else {
89
+ serverDateString = (headers as AxiosResponseHeaders | RawAxiosResponseHeaders).date;
90
+ }
91
+ if (serverDateString === null) {
92
+ throw Error('Cannot get access to Date header!');
93
+ }
94
+ const serverUnixTime = Date.parse(serverDateString) / 1000;
95
+ const localUnixTimeAfter = Date.now() / 1000;
96
+ const deltaBefore = serverUnixTime - localUnixTimeBefore;
97
+ const deltaAfter = serverUnixTime - localUnixTimeAfter;
98
+
99
+ return Math.round((deltaBefore + deltaAfter) / 2);
100
+ };
101
+
102
+ export function addNewLines(str: string): string {
103
+ if (!str) {
104
+ return str;
105
+ }
106
+ let inputString = str;
107
+ let finalString = '';
108
+ while (inputString.length > 0) {
109
+ finalString += inputString.substring(0, 64) + '\r\n';
110
+ inputString = inputString.substring(64);
111
+ }
112
+ return finalString;
113
+ }
114
+
115
+ export async function cryptoPublicToPem(publicKey: CryptoKey): Promise<string> {
116
+ if (publicKey.type !== 'public') {
117
+ throw new ConfigurationError('incorrect key type');
118
+ }
119
+
120
+ const exportedPublicKey = await crypto.subtle.exportKey('spki', publicKey);
121
+ const b64 = base64.encodeArrayBuffer(exportedPublicKey);
122
+ const pem = addNewLines(b64);
123
+ return `-----BEGIN PUBLIC KEY-----\r\n${pem}-----END PUBLIC KEY-----`;
124
+ }
125
+
126
+ export async function pemToCryptoPublicKey(pem: string): Promise<CryptoKey> {
127
+ if (/-----BEGIN PUBLIC KEY-----/.test(pem)) {
128
+ return pemPublicToCrypto(pem);
129
+ } else if (/-----BEGIN CERTIFICATE-----/.test(pem)) {
130
+ return pemCertToCrypto(pem);
131
+ }
132
+ // This can happen in several circumstances:
133
+ // - When parsing a PEM key from a KAS server
134
+ // - When converting between PEM and CryptoKey formats for user provided session keys (e.g. for DPoP)
135
+ throw new TypeError(`unsupported pem type [${pem}]`);
136
+ }
137
+
138
+ export async function extractPemFromKeyString(keyString: string): Promise<string> {
139
+ let pem: string = keyString;
140
+
141
+ // Skip the public key extraction if we find that the KAS url provides a
142
+ // PEM-encoded key instead of certificate
143
+ if (keyString.includes('CERTIFICATE')) {
144
+ const cert = await importX509(keyString, 'RS256', { extractable: true });
145
+ pem = await exportSPKI(cert);
146
+ }
147
+
148
+ return pem;
149
+ }
package/src/version.ts ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Exposes the released version number of the `@opentdf/sdk` package
3
+ */
4
+ export const version = '0.1.0';
5
+
6
+ /**
7
+ * A string name used to label requests as coming from this library client.
8
+ */
9
+ export const clientType = 'web-sdk';