@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,322 @@
1
+ // Models
2
+ import { getBitLength } from './Ciphers.js';
3
+ import ResourceLocator from './ResourceLocator.js';
4
+ import PolicyFactory from './Policy/PolicyFactory.js';
5
+ // Interfaces
6
+ import PolicyInterface from '../interfaces/PolicyInterface.js';
7
+ // Enum
8
+ import CipherEnum from '../enum/CipherEnum.js';
9
+ import CurveNameEnum from '../enum/CurveNameEnum.js';
10
+ // Helpers
11
+ import { lengthOfPublicKey } from '../helpers/calculateByCurve.js';
12
+ import DefaultParams from './DefaultParams.js';
13
+ import { ConfigurationError, InvalidFileError } from '../../errors.js';
14
+ import { rstrip } from '../../utils.js';
15
+
16
+ /**
17
+ * NanoTDF Header
18
+ *
19
+ * The header section is intended to be sent to a KAS and is used by the KAS to derive the decryption key that can
20
+ * decrypts the nanotdf's payload. The Header is structured as follows:
21
+ *
22
+ * | Section | Minimum Length (B) | Maximum Length (B) |
23
+ * |------------------------|--------------------|--------------------|
24
+ * | Magic Number + Version | 3 | 3 |
25
+ * | KAS (resource locator) | 3 | 257 |
26
+ * | ECC Mode | 1 | 1 |
27
+ * | Payload + Sig Mode | 1 | 1 |
28
+ * | Policy | 3 | 257 |
29
+ * | Ephemeral Key | 33 | 67 |
30
+ *
31
+ */
32
+ export default class Header {
33
+ // Magic Number & Version
34
+ static readonly MAGIC_NUMBER_VERSION_BYTE_OFF = 0;
35
+ static readonly MAGIC_NUMBER_VERSION_BYTE_LEN = 3;
36
+ static readonly MAGIC_NUMBER_OFFSET = 0;
37
+ static readonly MAGIC_NUMBER_LENGTH = 18;
38
+
39
+ // ECC & Binding Mode
40
+ static readonly ECC_BINDING_MODE_BYTE_LEN = 1;
41
+ static readonly USE_ECDSA_BINDING_BIT_OFF = 0;
42
+ static readonly EPHEMERAL_ECC_CURVE_NAME_BIT_OFF = -3;
43
+
44
+ // Symmetric & Payload Config
45
+ static readonly SYMMETRIC_PAYLOAD_CONFIG_BYTE_LEN = 1;
46
+ static readonly HAS_SIGNATURE_BIT_OFF = 1;
47
+ static readonly HAS_SIGNATURE_BIT_LEN = 1;
48
+ static readonly SIGNATURE_ECC_CURVE_NAME_BIT_OFF = 1;
49
+ static readonly SIGNATURE_ECC_CURVE_NAME_BIT_LEN = 3;
50
+ static readonly SYMMETRIC_CIPHER_BIT_OFF = 4;
51
+ static readonly SYMMETRIC_CIPHER_BIT_LEN = 4;
52
+
53
+ // Magic Number & Version
54
+ public magicNumberVersion: Uint8Array = DefaultParams.magicNumberVersion;
55
+
56
+ // KAS Resource Locator
57
+ public kas: ResourceLocator;
58
+
59
+ // ECC & Binding Mode
60
+ public useECDSABinding: boolean = DefaultParams.ecdsaBinding;
61
+ public ephemeralCurveName: CurveNameEnum = DefaultParams.ephemeralCurveName;
62
+
63
+ // Symmetric & Payload Config
64
+ public hasSignature: boolean = DefaultParams.signature;
65
+ public signatureCurveName: CurveNameEnum = DefaultParams.signatureCurveName;
66
+ public symmetricCipher: CipherEnum = DefaultParams.symmetricCipher;
67
+ // Auth tag length (in bits) is not part of the spec, but is needed for decrypt
68
+ public authTagLength: number;
69
+
70
+ // Policy
71
+ public policy: PolicyInterface;
72
+
73
+ // Ephemeral Public Key
74
+ public ephemeralPublicKey: Uint8Array;
75
+
76
+ static parse(buff: Uint8Array) {
77
+ let offset = 0;
78
+
79
+ /**
80
+ * Magic number and version
81
+ *
82
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3311-magic-number--version
83
+ */
84
+ // Convert to ascii
85
+ const magicNumberVersion = buff.subarray(
86
+ Header.MAGIC_NUMBER_VERSION_BYTE_OFF,
87
+ Header.MAGIC_NUMBER_VERSION_BYTE_LEN
88
+ );
89
+ offset += Header.MAGIC_NUMBER_VERSION_BYTE_LEN;
90
+
91
+ /**
92
+ * KAS Resource Locator
93
+ *
94
+ * KAS is a typeof Resource Locator
95
+ *
96
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3312-kas
97
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#341-resource-locator
98
+ */
99
+ const kas = ResourceLocator.parse(buff.subarray(offset));
100
+ offset += kas.length;
101
+
102
+ /**
103
+ * ECC & Binding Mode
104
+ *
105
+ * This section contains a 1-byte bitfield describing the ECC Params and Policy binding strategy to use.
106
+ * The Policy Binding strategy is either using a 64-bit GMAC (using AES-256-GCM) tag or an ECDSA signature.
107
+ * The signature size depends on the size of ECC Params used. The nanotdf at this time only supports methods that
108
+ * involve Elliptic Curve Cryptography. The fields are structured as follows:
109
+ *
110
+ * | Section | Bit Length | Bit start index |
111
+ * |---------------------------|------------|-----------------|
112
+ * | USE_ECDSA_BINDING | 1 | 7 |
113
+ * | UNUSED | 4 | 3 |
114
+ * | Ephemeral ECC Params Enum | 3 | 0 |
115
+ *
116
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3313-ecc-and-binding-mode
117
+ */
118
+ const eccBindingModeDV = buff.subarray(offset, offset + Header.ECC_BINDING_MODE_BYTE_LEN);
119
+ const useECDSABinding = eccBindingModeDV[0] >> 7 === 1; // Last bit
120
+ const ephemeralCurveName = eccBindingModeDV[0] & 0x7; // First 3 bits
121
+ offset += Header.ECC_BINDING_MODE_BYTE_LEN;
122
+
123
+ /**
124
+ * Symmetric & payload config
125
+ *
126
+ * This section contains a 1 byte data structure composed of bitfields that describe the symmetric ciphers for
127
+ * encrypted payloads. This cipher applies to both the Payload and the Policy of the nanotdf. The fields are as
128
+ * follows:
129
+ *
130
+ * | Section | Bit Length | Bit start index |
131
+ * |-----------------------|------------|-----------------|
132
+ * | HAS_SIGNATURE | 1 | 7 |
133
+ * | Signature ECC Mode | 3 | 4 |
134
+ * | Symmetric Cipher Enum | 4 | 0 |
135
+ *
136
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3314-symmetric-and-payload-config
137
+ */
138
+ const symmetricPayloadDV = buff.subarray(offset, offset + Header.ECC_BINDING_MODE_BYTE_LEN);
139
+ const hasSignature = symmetricPayloadDV[0] >> 7 === 1; // Last bit
140
+ const signatureCurveName = (symmetricPayloadDV[0] >> 4) & 0x7; // Middle 3 bits
141
+ const symmetricCipher = symmetricPayloadDV[0] & 0xf; // First 4 bits
142
+ offset += Header.SYMMETRIC_PAYLOAD_CONFIG_BYTE_LEN;
143
+
144
+ /**
145
+ * Policy
146
+ *
147
+ * This section contains a Policy object. The data contained in the Policy allows for definition flexible
148
+ * definitions of a policy including a policy by reference, or an embedded policy. Refer to the Policy object's
149
+ * definition in Section 3.4.2
150
+ *
151
+ * The structure of the Policy is as follows:
152
+ *
153
+ * | Section | Minimum Length (B) | Maximum Length (B) |
154
+ * |-----------|--------------------|--------------------|
155
+ * | Type Enum | 1 | 1 |
156
+ * | Body | 3 | 257 |
157
+ * | Binding | 8 | 132 |
158
+ *
159
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3315-policy
160
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#342-policy
161
+ */
162
+ const { policy, offset: nextOffset } = PolicyFactory.parse(
163
+ buff.subarray(offset),
164
+ useECDSABinding,
165
+ ephemeralCurveName
166
+ );
167
+ offset += nextOffset;
168
+
169
+ /**
170
+ * Ephemeral public key
171
+ *
172
+ * This section contains a Key object. The size of the key is determined by the Encryption Method Section.
173
+ *
174
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3316-key
175
+ */
176
+ // TODO: Resolve where offset isn't adding 1 byte
177
+ const ephemeralPublicKeyLength = lengthOfPublicKey(ephemeralCurveName) + 1;
178
+ const ephemeralPublicKey = buff.subarray(offset, offset + ephemeralPublicKeyLength);
179
+ offset += ephemeralPublicKeyLength;
180
+
181
+ // Check if the ephemeral public key length is not the same length
182
+ if (ephemeralPublicKey.byteLength !== ephemeralPublicKeyLength) {
183
+ throw new InvalidFileError('nanotdf parse failure: public key read failure');
184
+ }
185
+
186
+ const header = new Header(
187
+ magicNumberVersion,
188
+ kas,
189
+ useECDSABinding,
190
+ ephemeralCurveName,
191
+ hasSignature,
192
+ signatureCurveName,
193
+ symmetricCipher,
194
+ policy,
195
+ ephemeralPublicKey
196
+ );
197
+
198
+ return {
199
+ header,
200
+ offset,
201
+ };
202
+ }
203
+
204
+ //Ephemeral Public Key
205
+ // protected _ephemeralPublicKey: string | null = null;
206
+
207
+ constructor(
208
+ magicNumberVersion: Uint8Array,
209
+ kas: ResourceLocator,
210
+ useECDSABinding: boolean,
211
+ ephemeralCurveName: CurveNameEnum,
212
+ hasSignature: boolean,
213
+ signatureCurveName: CurveNameEnum,
214
+ symmetricCipher: CipherEnum,
215
+ policy: PolicyInterface,
216
+ ephemeralPublicKey: Uint8Array
217
+ ) {
218
+ this.magicNumberVersion = magicNumberVersion;
219
+ this.kas = kas;
220
+ this.useECDSABinding = useECDSABinding;
221
+ this.ephemeralCurveName = ephemeralCurveName;
222
+ this.hasSignature = hasSignature;
223
+ this.signatureCurveName = signatureCurveName;
224
+ this.symmetricCipher = symmetricCipher;
225
+ this.policy = policy;
226
+ this.ephemeralPublicKey = ephemeralPublicKey;
227
+
228
+ // Auth tag length in bits (i.e. AES GCM 64 bit)
229
+ this.authTagLength = getBitLength(this.symmetricCipher);
230
+ }
231
+
232
+ /**
233
+ * Copy the contents of the header to buffer
234
+ */
235
+ copyToBuffer(target: Uint8Array): void {
236
+ if (this.length > target.length) {
237
+ throw new InvalidFileError('invalid buffer size to copy tdf header');
238
+ }
239
+
240
+ let offset = 0;
241
+
242
+ // Write Magic number and version
243
+ target.set(this.magicNumberVersion, 0);
244
+ offset += this.magicNumberVersion.length;
245
+
246
+ // Write kas resource locator
247
+ const kasResourceLocatorBuf = this.kas.toBuffer();
248
+ target.set(kasResourceLocatorBuf, offset);
249
+ offset += kasResourceLocatorBuf.length;
250
+
251
+ // Write ECC & Binding Mode
252
+ const ecdsaBinding = this.useECDSABinding ? 1 : 0;
253
+ const eccBingingMode = (ecdsaBinding << 7) | this.ephemeralCurveName;
254
+ const eccBingingModeAsByte = new Uint8Array(1);
255
+ eccBingingModeAsByte[0] = eccBingingMode;
256
+ target.set(eccBingingModeAsByte, offset);
257
+ offset += eccBingingModeAsByte.length;
258
+
259
+ // Write symmetric & payload config
260
+ const isSignatureEnable = this.hasSignature ? 1 : 0;
261
+ const symmetricPayloadConfig =
262
+ (isSignatureEnable << 7) | this.signatureCurveName | this.symmetricCipher;
263
+ const symmetricPayloadConfigAsByte = new Uint8Array(1);
264
+ symmetricPayloadConfigAsByte[0] = symmetricPayloadConfig;
265
+ target.set(symmetricPayloadConfigAsByte, offset);
266
+ offset += symmetricPayloadConfigAsByte.length;
267
+
268
+ // Write the policy
269
+ const policyBuffer = this.policy.toBuffer();
270
+ target.set(policyBuffer, offset);
271
+ offset += policyBuffer.length;
272
+
273
+ // Write the ephemeral public key
274
+ target.set(this.ephemeralPublicKey, offset);
275
+ }
276
+
277
+ /**
278
+ * Length
279
+ *
280
+ * @returns { number } Length of header
281
+ */
282
+ get length(): number {
283
+ return (
284
+ // Length of the magic number and version
285
+ this.magicNumberVersion.length +
286
+ // Length of the KAS resource locator
287
+ this.kas.length +
288
+ // ECC & Binding Mode - 1 Bytes
289
+ 1 +
290
+ // symmetric & payload config - 1 Bytes
291
+ 1 +
292
+ // Length of the policy
293
+ this.policy.getLength() +
294
+ // Length of the ephemeral public key
295
+ this.ephemeralPublicKey.length
296
+ );
297
+ }
298
+
299
+ /**
300
+ * Return nanoTDF header as buffer
301
+ *
302
+ * Warning: This method will allocate memory of length of the header, use
303
+ * copyToBuffer() when copy is not needed.
304
+ */
305
+ toBuffer(): ArrayBuffer {
306
+ const arrayBuffer = new ArrayBuffer(this.length);
307
+ const target = new Uint8Array(arrayBuffer);
308
+ this.copyToBuffer(target);
309
+ return arrayBuffer;
310
+ }
311
+
312
+ /**
313
+ * Get KAS Rewrap URL
314
+ */
315
+ getKasRewrapUrl(): string {
316
+ try {
317
+ return `${rstrip(this.kas.url, '/')}/v2/rewrap`;
318
+ } catch (e) {
319
+ throw new ConfigurationError(`cannot construct KAS Rewrap URL: ${e.message}`);
320
+ }
321
+ }
322
+ }
@@ -0,0 +1,196 @@
1
+ import Header from './Header.js';
2
+ import { getBitLength } from './Ciphers.js';
3
+ import { ConfigurationError, InvalidFileError } from '../../errors.js';
4
+
5
+ /**
6
+ * Payload
7
+ *
8
+ * The payload section of the nanotdf contains the ciphertext that is protected by the policy defined in the Header.
9
+ * The structure of the Payload is as follows:
10
+ *
11
+ * | Section | Minimum Length (B) | Maximum Length (B) |
12
+ * |-----------------------|--------------------|--------------------|
13
+ * | Length | 3 | 3 |
14
+ * | IV | 3 | 3 |
15
+ * | Ciphertext | 0 | 16777204 |
16
+ * | Payload MAC (AuthTag) | 8 | 32 |
17
+ */
18
+ export default class Payload {
19
+ static LENGTH_LEN = 3;
20
+ static IV_LEN = 3;
21
+ static MIN_LENGTH = 11;
22
+ static MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE = 16777216; // 3 bytes unsigned int.
23
+
24
+ public iv: Uint8Array;
25
+ public ciphertext: Uint8Array;
26
+ public authTag: Uint8Array;
27
+ public ciphertextWithAuthTag: Uint8Array;
28
+
29
+ /**
30
+ * Parse the payload
31
+ *
32
+ * Returns a new Payload object and the next offset
33
+ *
34
+ * @param buff Uint8Array
35
+ */
36
+ static parse(
37
+ header: Header,
38
+ buff: Uint8Array,
39
+ legacyTDF = false
40
+ ): { payload: Payload; offset: number } {
41
+ let offset = 0;
42
+ const authTagByteLength = getBitLength(header.symmetricCipher) / 8;
43
+
44
+ /**
45
+ * Length
46
+ *
47
+ * This 3 byte unsigned integer dictates the length of the subsequent ciphertext section.
48
+ *
49
+ * NOTE: it includes the IV + Ciphertext + Auth Tag. To get the Auth Tag length you have to subtract the other
50
+ * lengths
51
+ */
52
+ // TODO: This will not work in Big Endian host environments
53
+ const length = (buff[offset] << 16) + (buff[offset + 1] << 8) + buff[offset + 2];
54
+ const ciphertextLength = length - Payload.IV_LEN - authTagByteLength;
55
+ offset += Payload.LENGTH_LEN;
56
+
57
+ const inRange = length >= this.MIN_LENGTH && length <= this.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE;
58
+
59
+ if (!inRange) {
60
+ throw new InvalidFileError('nanotdf parse failure: Payload Length Out Of Range');
61
+ }
62
+
63
+ /**
64
+ * Parse IV
65
+ *
66
+ * The IV used for encryption. This value is a byte array containing the IV. This IV must never be reused with the
67
+ * same symmetric key. Also, to support an extremely compacted version of the nanotdf the IV value 00 00 00 is
68
+ * reserved for use with an encrypted policy.
69
+ */
70
+ let iv = buff.subarray(offset, offset + Payload.IV_LEN);
71
+ offset += Payload.IV_LEN;
72
+
73
+ if (iv.byteLength != 3) {
74
+ throw new InvalidFileError('nanotdf parse failure: Invalid Payload Length');
75
+ }
76
+
77
+ if (!legacyTDF) {
78
+ const actuallIV = new Uint8Array(12).fill(0);
79
+
80
+ // The the iv from payload to lower-order bits
81
+ actuallIV.set(iv, 9);
82
+
83
+ // update the iv
84
+ iv = actuallIV;
85
+ }
86
+
87
+ /**
88
+ * Parse Ciphertext w/ Auth Tag
89
+ */
90
+ const ciphertextWithAuthTag = buff.subarray(
91
+ offset,
92
+ offset + ciphertextLength + authTagByteLength
93
+ );
94
+
95
+ if (ciphertextWithAuthTag.byteLength + Payload.LENGTH_LEN !== length) {
96
+ throw new InvalidFileError('nanotdf parse failure: Invalid Payload Length');
97
+ }
98
+
99
+ /**
100
+ * Parse Ciphertext
101
+ *
102
+ * The byte array of the ciphertext that is protected in the nanotdf. The encryption method used to create or decrypt
103
+ * the ciphertext is defined in the Key Access object in the header.
104
+ */
105
+ const ciphertext = buff.subarray(offset, offset + ciphertextLength);
106
+ offset += ciphertextLength;
107
+
108
+ /**
109
+ * Auth Tag
110
+ *
111
+ * GMAC = 8 byte
112
+ * ECDSA = size of curve
113
+ *
114
+ * The MAC of the payload. The Size of this MAC is determined by the Encryption Method Enum used in the Symmetric and
115
+ * Payload Config object in the header.
116
+ *
117
+ * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3314-symmetric-and-payload-config
118
+ */
119
+ const authTag = buff.subarray(offset, offset + authTagByteLength);
120
+ offset += authTagByteLength;
121
+
122
+ return {
123
+ payload: new Payload(iv, ciphertext, authTag, ciphertextWithAuthTag),
124
+ offset,
125
+ };
126
+ }
127
+
128
+ constructor(
129
+ iv: Uint8Array,
130
+ ciphertext: Uint8Array,
131
+ authTag: Uint8Array,
132
+ ciphertextWithAuthTag?: Uint8Array
133
+ ) {
134
+ this.iv = iv;
135
+ this.ciphertext = ciphertext;
136
+ this.authTag = authTag;
137
+
138
+ // If ciphertextWithAuthTag is not set then combine it
139
+ // Ideally it is set so an additional buffer is not needed
140
+ if (ciphertextWithAuthTag === undefined) {
141
+ this.ciphertextWithAuthTag = new Uint8Array(ciphertext.length + authTag.length);
142
+ this.ciphertextWithAuthTag.set(ciphertext);
143
+ this.ciphertextWithAuthTag.set(authTag, ciphertext.length);
144
+ } else {
145
+ this.ciphertextWithAuthTag = ciphertextWithAuthTag;
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Length
151
+ *
152
+ * @returns { number } Length of signature
153
+ */
154
+ get length(): number {
155
+ return (
156
+ // Bytes(3) to hold the length of the payload
157
+ 3 +
158
+ // Length of the IV
159
+ this.iv.length +
160
+ // Length of the ciphertext
161
+ this.ciphertext.length +
162
+ // Length of the auth tag
163
+ this.authTag.length
164
+ );
165
+ }
166
+
167
+ /**
168
+ * Copy the contents of the signature to buffer
169
+ */
170
+ copyToBuffer(target: Uint8Array): void {
171
+ if (this.length > target.length) {
172
+ throw new Error('internal: invalid buffer size to copy payload');
173
+ }
174
+
175
+ const lengthOfEncryptedPayload = this.iv.length + this.ciphertext.length + this.authTag.length;
176
+ if (lengthOfEncryptedPayload > Payload.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE) {
177
+ throw new ConfigurationError("TDF encrypted payload can't be more that 2^24");
178
+ }
179
+
180
+ const lengthAsUint32 = new Uint32Array(1);
181
+ lengthAsUint32[0] = lengthOfEncryptedPayload;
182
+
183
+ const lengthAsUint24 = new Uint8Array(lengthAsUint32.buffer);
184
+
185
+ // NOTE: We are only interested in only first 3 bytes.
186
+ const payloadSizeAsBg = new Uint8Array(3);
187
+ payloadSizeAsBg[0] = lengthAsUint24[2];
188
+ payloadSizeAsBg[1] = lengthAsUint24[1];
189
+ payloadSizeAsBg[2] = lengthAsUint24[0];
190
+
191
+ target.set(payloadSizeAsBg, 0);
192
+ target.set(this.iv, payloadSizeAsBg.length);
193
+ target.set(this.ciphertext, payloadSizeAsBg.length + this.iv.length);
194
+ target.set(this.authTag, payloadSizeAsBg.length + this.iv.length + this.ciphertext.length);
195
+ }
196
+ }
@@ -0,0 +1,90 @@
1
+ import PolicyInterface from '../../interfaces/PolicyInterface.js';
2
+ import PolicyType from '../../enum/PolicyTypeEnum.js';
3
+ import { ConfigurationError } from '../../../errors.js';
4
+
5
+ abstract class AbstractPolicy implements PolicyInterface {
6
+ static readonly TYPE_BYTE_OFF = 0;
7
+ static readonly TYPE_BYTE_LEN = 1;
8
+ static readonly BODY_BYTE_OFF = 1;
9
+ static readonly BODY_BYTE_MIN_LEN = 3;
10
+ static readonly BODY_BYTE_MAX_LEN = 257;
11
+ static readonly BINDING_BYTE_MIN_LEN = 8;
12
+ static readonly BINDING_BYTE_MAX_LEN = 132;
13
+ static readonly SIZE_OF_LENGTH_FIELD = 1; // 1 byte for each length field (R and S)
14
+ static readonly GMAC_BINDING_LEN = 8;
15
+
16
+ readonly type: PolicyType;
17
+ readonly binding: Uint8Array;
18
+
19
+ // Static methods can't be defined in an interface
20
+ static parse(
21
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
22
+ buff: Uint8Array,
23
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
24
+ useECDSABinding: boolean,
25
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
26
+ type?: PolicyType
27
+ ): { policy: PolicyInterface; offset: number } {
28
+ throw new ConfigurationError('parsePolicy was not implemented');
29
+ }
30
+
31
+ constructor(type: PolicyType, binding: Uint8Array) {
32
+ this.type = type;
33
+ this.binding = binding;
34
+ }
35
+
36
+ /**
37
+ * Length of policy
38
+ */
39
+ getLength(): number | never {
40
+ throw new ConfigurationError('length was not implemented');
41
+ }
42
+
43
+ /**
44
+ * Return the content of the policy
45
+ */
46
+ toBuffer(): Uint8Array | never {
47
+ throw new ConfigurationError('toBuffer() was not implemented');
48
+ }
49
+
50
+ /**
51
+ * Parses an ECDSA binding from a given buffer.
52
+ *
53
+ * @param {Uint8Array} buff - The buffer containing the ECDSA binding.
54
+ * @returns {{ bindingLength: number; binding: Uint8Array }} - An object containing the binding length and the binding subarray.
55
+ */
56
+ static parseECDSABinding(buff: Uint8Array): { bindingLength: number; binding: Uint8Array } {
57
+ const lengthOfR = buff[0];
58
+ const lengthOfS = buff[this.SIZE_OF_LENGTH_FIELD + lengthOfR];
59
+
60
+ const bindingLength =
61
+ this.SIZE_OF_LENGTH_FIELD + lengthOfR + this.SIZE_OF_LENGTH_FIELD + lengthOfS;
62
+ const binding = buff.subarray(0, bindingLength);
63
+
64
+ return { bindingLength, binding };
65
+ }
66
+
67
+ /**
68
+ * Parses a binding from a given buffer based on the specified binding type.
69
+ *
70
+ * @param {Uint8Array} buff - The buffer containing the binding.
71
+ * @param {boolean} useEcdsaBinding - Flag indicating whether to use ECDSA binding.
72
+ * @param {number} offset - The starting offset in the buffer.
73
+ * @returns {{ binding: Uint8Array; newOffset: number }} - An object containing the binding and the new offset.
74
+ */
75
+ static parseBinding(
76
+ buff: Uint8Array,
77
+ useEcdsaBinding: boolean,
78
+ offset: number
79
+ ): { binding: Uint8Array; newOffset: number } {
80
+ if (useEcdsaBinding) {
81
+ const ecdsaBinding = this.parseECDSABinding(buff.subarray(offset));
82
+ return { binding: ecdsaBinding.binding, newOffset: offset + ecdsaBinding.bindingLength };
83
+ } else {
84
+ const binding = buff.subarray(offset, offset + this.GMAC_BINDING_LEN);
85
+ return { binding, newOffset: offset + this.GMAC_BINDING_LEN };
86
+ }
87
+ }
88
+ }
89
+
90
+ export default AbstractPolicy;