@opentdf/sdk 0.8.0-beta.71 → 0.8.0-beta.74

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 (260) hide show
  1. package/README.md +5 -30
  2. package/dist/cjs/src/{nanotdf-crypto → crypto}/ciphers.js +1 -1
  3. package/dist/cjs/src/{nanotdf-crypto → crypto}/decrypt.js +1 -1
  4. package/dist/cjs/src/{nanotdf-crypto → crypto}/digest.js +1 -1
  5. package/dist/cjs/src/{nanotdf-crypto → crypto}/ecdsaSignature.js +2 -2
  6. package/dist/cjs/src/{nanotdf-crypto → crypto}/encrypt.js +1 -1
  7. package/dist/cjs/src/{nanotdf-crypto → crypto}/enums.js +1 -1
  8. package/dist/cjs/src/crypto/exportCryptoKey.js +20 -0
  9. package/dist/cjs/src/{nanotdf-crypto → crypto}/generateKeyPair.js +1 -1
  10. package/dist/cjs/src/{nanotdf-crypto → crypto}/generateRandomNumber.js +1 -1
  11. package/dist/cjs/src/{nanotdf-crypto → crypto}/index.js +1 -1
  12. package/dist/cjs/src/{nanotdf-crypto → crypto}/keyAgreement.js +1 -1
  13. package/dist/cjs/src/{nanotdf-crypto → crypto}/pemPublicToCrypto.js +1 -1
  14. package/dist/cjs/src/opentdf.js +9 -260
  15. package/dist/cjs/src/utils.js +2 -2
  16. package/dist/cjs/tdf3/index.js +7 -8
  17. package/dist/cjs/tdf3/src/models/key-access.js +4 -4
  18. package/dist/cjs/tdf3/src/tdf.js +4 -4
  19. package/dist/types/src/crypto/ciphers.d.ts.map +1 -0
  20. package/dist/types/src/crypto/decrypt.d.ts.map +1 -0
  21. package/dist/types/src/crypto/digest.d.ts.map +1 -0
  22. package/dist/types/src/crypto/ecdsaSignature.d.ts.map +1 -0
  23. package/dist/types/src/crypto/encrypt.d.ts.map +1 -0
  24. package/dist/types/src/crypto/enums.d.ts.map +1 -0
  25. package/dist/types/src/crypto/exportCryptoKey.d.ts.map +1 -0
  26. package/dist/types/src/crypto/generateKeyPair.d.ts.map +1 -0
  27. package/dist/types/src/crypto/generateRandomNumber.d.ts.map +1 -0
  28. package/dist/types/src/crypto/index.d.ts.map +1 -0
  29. package/dist/types/src/crypto/keyAgreement.d.ts.map +1 -0
  30. package/dist/types/src/crypto/pemPublicToCrypto.d.ts.map +1 -0
  31. package/dist/types/src/opentdf.d.ts +1 -65
  32. package/dist/types/src/opentdf.d.ts.map +1 -1
  33. package/dist/types/tdf3/index.d.ts +4 -3
  34. package/dist/types/tdf3/index.d.ts.map +1 -1
  35. package/dist/web/src/crypto/ciphers.js +14 -0
  36. package/dist/web/src/{nanotdf-crypto → crypto}/decrypt.js +1 -1
  37. package/dist/web/src/crypto/digest.js +4 -0
  38. package/dist/web/src/{nanotdf-crypto → crypto}/ecdsaSignature.js +2 -2
  39. package/dist/web/src/{nanotdf-crypto → crypto}/encrypt.js +1 -1
  40. package/dist/web/src/{nanotdf-crypto → crypto}/enums.js +1 -1
  41. package/dist/web/src/crypto/exportCryptoKey.js +17 -0
  42. package/dist/web/src/crypto/generateKeyPair.js +10 -0
  43. package/dist/web/src/crypto/generateRandomNumber.js +9 -0
  44. package/dist/web/src/crypto/index.js +11 -0
  45. package/dist/web/src/{nanotdf-crypto → crypto}/keyAgreement.js +1 -1
  46. package/dist/web/src/{nanotdf-crypto → crypto}/pemPublicToCrypto.js +1 -1
  47. package/dist/web/src/opentdf.js +8 -255
  48. package/dist/web/src/utils.js +2 -2
  49. package/dist/web/tdf3/index.js +4 -3
  50. package/dist/web/tdf3/src/models/key-access.js +4 -4
  51. package/dist/web/tdf3/src/tdf.js +4 -4
  52. package/package.json +1 -6
  53. package/src/{nanotdf-crypto → crypto}/ecdsaSignature.ts +1 -1
  54. package/src/opentdf.ts +6 -343
  55. package/src/utils.ts +1 -1
  56. package/tdf3/index.ts +2 -12
  57. package/tdf3/src/models/key-access.ts +3 -3
  58. package/tdf3/src/tdf.ts +3 -3
  59. package/dist/cjs/src/nanoclients.js +0 -292
  60. package/dist/cjs/src/nanoindex.js +0 -47
  61. package/dist/cjs/src/nanotdf/Client.js +0 -315
  62. package/dist/cjs/src/nanotdf/NanoTDF.js +0 -94
  63. package/dist/cjs/src/nanotdf/browser-entry.js +0 -19
  64. package/dist/cjs/src/nanotdf/constants.js +0 -5
  65. package/dist/cjs/src/nanotdf/decrypt.js +0 -17
  66. package/dist/cjs/src/nanotdf/encrypt-dataset.js +0 -38
  67. package/dist/cjs/src/nanotdf/encrypt.js +0 -132
  68. package/dist/cjs/src/nanotdf/enum/CipherEnum.js +0 -13
  69. package/dist/cjs/src/nanotdf/enum/CurveNameEnum.js +0 -15
  70. package/dist/cjs/src/nanotdf/enum/EncodingEnum.js +0 -8
  71. package/dist/cjs/src/nanotdf/enum/PolicyTypeEnum.js +0 -11
  72. package/dist/cjs/src/nanotdf/enum/ProtocolEnum.js +0 -10
  73. package/dist/cjs/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +0 -11
  74. package/dist/cjs/src/nanotdf/helpers/calculateByCurve.js +0 -28
  75. package/dist/cjs/src/nanotdf/helpers/getHkdfSalt.js +0 -11
  76. package/dist/cjs/src/nanotdf/index.js +0 -25
  77. package/dist/cjs/src/nanotdf/interfaces/PolicyInterface.js +0 -3
  78. package/dist/cjs/src/nanotdf/models/Ciphers.js +0 -61
  79. package/dist/cjs/src/nanotdf/models/DefaultParams.js +0 -27
  80. package/dist/cjs/src/nanotdf/models/EcCurves.js +0 -39
  81. package/dist/cjs/src/nanotdf/models/Header.js +0 -255
  82. package/dist/cjs/src/nanotdf/models/Payload.js +0 -158
  83. package/dist/cjs/src/nanotdf/models/Policy/AbstractPolicy.js +0 -73
  84. package/dist/cjs/src/nanotdf/models/Policy/EmbeddedPolicy.js +0 -82
  85. package/dist/cjs/src/nanotdf/models/Policy/PolicyFactory.js +0 -38
  86. package/dist/cjs/src/nanotdf/models/Policy/RemotePolicy.js +0 -62
  87. package/dist/cjs/src/nanotdf/models/ResourceLocator.js +0 -211
  88. package/dist/cjs/src/nanotdf/models/Signature.js +0 -77
  89. package/dist/cjs/src/nanotdf-crypto/exportCryptoKey.js +0 -20
  90. package/dist/cjs/src/tdf/NanoTDF/NanoTDF.js +0 -38
  91. package/dist/cjs/src/types/index.js +0 -3
  92. package/dist/types/src/nanoclients.d.ts +0 -106
  93. package/dist/types/src/nanoclients.d.ts.map +0 -1
  94. package/dist/types/src/nanoindex.d.ts +0 -5
  95. package/dist/types/src/nanoindex.d.ts.map +0 -1
  96. package/dist/types/src/nanotdf/Client.d.ts +0 -91
  97. package/dist/types/src/nanotdf/Client.d.ts.map +0 -1
  98. package/dist/types/src/nanotdf/NanoTDF.d.ts +0 -24
  99. package/dist/types/src/nanotdf/NanoTDF.d.ts.map +0 -1
  100. package/dist/types/src/nanotdf/browser-entry.d.ts +0 -17
  101. package/dist/types/src/nanotdf/browser-entry.d.ts.map +0 -1
  102. package/dist/types/src/nanotdf/constants.d.ts +0 -2
  103. package/dist/types/src/nanotdf/constants.d.ts.map +0 -1
  104. package/dist/types/src/nanotdf/decrypt.d.ts +0 -9
  105. package/dist/types/src/nanotdf/decrypt.d.ts.map +0 -1
  106. package/dist/types/src/nanotdf/encrypt-dataset.d.ts +0 -11
  107. package/dist/types/src/nanotdf/encrypt-dataset.d.ts.map +0 -1
  108. package/dist/types/src/nanotdf/encrypt.d.ts +0 -13
  109. package/dist/types/src/nanotdf/encrypt.d.ts.map +0 -1
  110. package/dist/types/src/nanotdf/enum/CipherEnum.d.ts +0 -10
  111. package/dist/types/src/nanotdf/enum/CipherEnum.d.ts.map +0 -1
  112. package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts +0 -12
  113. package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts.map +0 -1
  114. package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts +0 -5
  115. package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts.map +0 -1
  116. package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts +0 -8
  117. package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts.map +0 -1
  118. package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts +0 -7
  119. package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts.map +0 -1
  120. package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts +0 -8
  121. package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts.map +0 -1
  122. package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts +0 -20
  123. package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts.map +0 -1
  124. package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts +0 -8
  125. package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts.map +0 -1
  126. package/dist/types/src/nanotdf/index.d.ts +0 -9
  127. package/dist/types/src/nanotdf/index.d.ts.map +0 -1
  128. package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts +0 -17
  129. package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts.map +0 -1
  130. package/dist/types/src/nanotdf/models/Ciphers.d.ts +0 -14
  131. package/dist/types/src/nanotdf/models/Ciphers.d.ts.map +0 -1
  132. package/dist/types/src/nanotdf/models/DefaultParams.d.ts +0 -21
  133. package/dist/types/src/nanotdf/models/DefaultParams.d.ts.map +0 -1
  134. package/dist/types/src/nanotdf/models/EcCurves.d.ts +0 -15
  135. package/dist/types/src/nanotdf/models/EcCurves.d.ts.map +0 -1
  136. package/dist/types/src/nanotdf/models/Header.d.ts +0 -73
  137. package/dist/types/src/nanotdf/models/Header.d.ts.map +0 -1
  138. package/dist/types/src/nanotdf/models/Payload.d.ts +0 -47
  139. package/dist/types/src/nanotdf/models/Payload.d.ts.map +0 -1
  140. package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts +0 -52
  141. package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts.map +0 -1
  142. package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts +0 -35
  143. package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts.map +0 -1
  144. package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts +0 -11
  145. package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts.map +0 -1
  146. package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts +0 -31
  147. package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts.map +0 -1
  148. package/dist/types/src/nanotdf/models/ResourceLocator.d.ts +0 -65
  149. package/dist/types/src/nanotdf/models/ResourceLocator.d.ts.map +0 -1
  150. package/dist/types/src/nanotdf/models/Signature.d.ts +0 -33
  151. package/dist/types/src/nanotdf/models/Signature.d.ts.map +0 -1
  152. package/dist/types/src/nanotdf-crypto/ciphers.d.ts.map +0 -1
  153. package/dist/types/src/nanotdf-crypto/decrypt.d.ts.map +0 -1
  154. package/dist/types/src/nanotdf-crypto/digest.d.ts.map +0 -1
  155. package/dist/types/src/nanotdf-crypto/ecdsaSignature.d.ts.map +0 -1
  156. package/dist/types/src/nanotdf-crypto/encrypt.d.ts.map +0 -1
  157. package/dist/types/src/nanotdf-crypto/enums.d.ts.map +0 -1
  158. package/dist/types/src/nanotdf-crypto/exportCryptoKey.d.ts.map +0 -1
  159. package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts.map +0 -1
  160. package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts.map +0 -1
  161. package/dist/types/src/nanotdf-crypto/index.d.ts.map +0 -1
  162. package/dist/types/src/nanotdf-crypto/keyAgreement.d.ts.map +0 -1
  163. package/dist/types/src/nanotdf-crypto/pemPublicToCrypto.d.ts.map +0 -1
  164. package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts +0 -99
  165. package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts.map +0 -1
  166. package/dist/types/src/types/index.d.ts +0 -45
  167. package/dist/types/src/types/index.d.ts.map +0 -1
  168. package/dist/web/src/nanoclients.js +0 -287
  169. package/dist/web/src/nanoindex.js +0 -5
  170. package/dist/web/src/nanotdf/Client.js +0 -310
  171. package/dist/web/src/nanotdf/NanoTDF.js +0 -89
  172. package/dist/web/src/nanotdf/browser-entry.js +0 -14
  173. package/dist/web/src/nanotdf/constants.js +0 -2
  174. package/dist/web/src/nanotdf/decrypt.js +0 -14
  175. package/dist/web/src/nanotdf/encrypt-dataset.js +0 -32
  176. package/dist/web/src/nanotdf/encrypt.js +0 -126
  177. package/dist/web/src/nanotdf/enum/CipherEnum.js +0 -11
  178. package/dist/web/src/nanotdf/enum/CurveNameEnum.js +0 -13
  179. package/dist/web/src/nanotdf/enum/EncodingEnum.js +0 -6
  180. package/dist/web/src/nanotdf/enum/PolicyTypeEnum.js +0 -9
  181. package/dist/web/src/nanotdf/enum/ProtocolEnum.js +0 -8
  182. package/dist/web/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +0 -9
  183. package/dist/web/src/nanotdf/helpers/calculateByCurve.js +0 -24
  184. package/dist/web/src/nanotdf/helpers/getHkdfSalt.js +0 -8
  185. package/dist/web/src/nanotdf/index.js +0 -11
  186. package/dist/web/src/nanotdf/interfaces/PolicyInterface.js +0 -2
  187. package/dist/web/src/nanotdf/models/Ciphers.js +0 -54
  188. package/dist/web/src/nanotdf/models/DefaultParams.js +0 -22
  189. package/dist/web/src/nanotdf/models/EcCurves.js +0 -32
  190. package/dist/web/src/nanotdf/models/Header.js +0 -250
  191. package/dist/web/src/nanotdf/models/Payload.js +0 -156
  192. package/dist/web/src/nanotdf/models/Policy/AbstractPolicy.js +0 -71
  193. package/dist/web/src/nanotdf/models/Policy/EmbeddedPolicy.js +0 -77
  194. package/dist/web/src/nanotdf/models/Policy/PolicyFactory.js +0 -33
  195. package/dist/web/src/nanotdf/models/Policy/RemotePolicy.js +0 -57
  196. package/dist/web/src/nanotdf/models/ResourceLocator.js +0 -206
  197. package/dist/web/src/nanotdf/models/Signature.js +0 -74
  198. package/dist/web/src/nanotdf-crypto/ciphers.js +0 -14
  199. package/dist/web/src/nanotdf-crypto/digest.js +0 -4
  200. package/dist/web/src/nanotdf-crypto/exportCryptoKey.js +0 -17
  201. package/dist/web/src/nanotdf-crypto/generateKeyPair.js +0 -10
  202. package/dist/web/src/nanotdf-crypto/generateRandomNumber.js +0 -9
  203. package/dist/web/src/nanotdf-crypto/index.js +0 -11
  204. package/dist/web/src/tdf/NanoTDF/NanoTDF.js +0 -35
  205. package/dist/web/src/types/index.js +0 -2
  206. package/src/nanoclients.ts +0 -406
  207. package/src/nanoindex.ts +0 -4
  208. package/src/nanotdf/Client.ts +0 -425
  209. package/src/nanotdf/NanoTDF.ts +0 -120
  210. package/src/nanotdf/browser-entry.ts +0 -20
  211. package/src/nanotdf/constants.ts +0 -1
  212. package/src/nanotdf/decrypt.ts +0 -19
  213. package/src/nanotdf/encrypt-dataset.ts +0 -51
  214. package/src/nanotdf/encrypt.ts +0 -196
  215. package/src/nanotdf/enum/CipherEnum.ts +0 -10
  216. package/src/nanotdf/enum/CurveNameEnum.ts +0 -12
  217. package/src/nanotdf/enum/EncodingEnum.ts +0 -5
  218. package/src/nanotdf/enum/PolicyTypeEnum.ts +0 -8
  219. package/src/nanotdf/enum/ProtocolEnum.ts +0 -7
  220. package/src/nanotdf/enum/ResourceLocatorIdentifierEnum.ts +0 -8
  221. package/src/nanotdf/helpers/calculateByCurve.ts +0 -26
  222. package/src/nanotdf/helpers/getHkdfSalt.ts +0 -13
  223. package/src/nanotdf/index.ts +0 -10
  224. package/src/nanotdf/interfaces/PolicyInterface.ts +0 -27
  225. package/src/nanotdf/models/Ciphers.ts +0 -67
  226. package/src/nanotdf/models/DefaultParams.ts +0 -24
  227. package/src/nanotdf/models/EcCurves.ts +0 -40
  228. package/src/nanotdf/models/Header.ts +0 -322
  229. package/src/nanotdf/models/Payload.ts +0 -196
  230. package/src/nanotdf/models/Policy/AbstractPolicy.ts +0 -90
  231. package/src/nanotdf/models/Policy/EmbeddedPolicy.ts +0 -101
  232. package/src/nanotdf/models/Policy/PolicyFactory.ts +0 -48
  233. package/src/nanotdf/models/Policy/RemotePolicy.ts +0 -74
  234. package/src/nanotdf/models/ResourceLocator.ts +0 -212
  235. package/src/nanotdf/models/Signature.ts +0 -85
  236. package/src/tdf/NanoTDF/NanoTDF.ts +0 -120
  237. package/src/types/index.ts +0 -55
  238. /package/dist/types/src/{nanotdf-crypto → crypto}/ciphers.d.ts +0 -0
  239. /package/dist/types/src/{nanotdf-crypto → crypto}/decrypt.d.ts +0 -0
  240. /package/dist/types/src/{nanotdf-crypto → crypto}/digest.d.ts +0 -0
  241. /package/dist/types/src/{nanotdf-crypto → crypto}/ecdsaSignature.d.ts +0 -0
  242. /package/dist/types/src/{nanotdf-crypto → crypto}/encrypt.d.ts +0 -0
  243. /package/dist/types/src/{nanotdf-crypto → crypto}/enums.d.ts +0 -0
  244. /package/dist/types/src/{nanotdf-crypto → crypto}/exportCryptoKey.d.ts +0 -0
  245. /package/dist/types/src/{nanotdf-crypto → crypto}/generateKeyPair.d.ts +0 -0
  246. /package/dist/types/src/{nanotdf-crypto → crypto}/generateRandomNumber.d.ts +0 -0
  247. /package/dist/types/src/{nanotdf-crypto → crypto}/index.d.ts +0 -0
  248. /package/dist/types/src/{nanotdf-crypto → crypto}/keyAgreement.d.ts +0 -0
  249. /package/dist/types/src/{nanotdf-crypto → crypto}/pemPublicToCrypto.d.ts +0 -0
  250. /package/src/{nanotdf-crypto → crypto}/ciphers.ts +0 -0
  251. /package/src/{nanotdf-crypto → crypto}/decrypt.ts +0 -0
  252. /package/src/{nanotdf-crypto → crypto}/digest.ts +0 -0
  253. /package/src/{nanotdf-crypto → crypto}/encrypt.ts +0 -0
  254. /package/src/{nanotdf-crypto → crypto}/enums.ts +0 -0
  255. /package/src/{nanotdf-crypto → crypto}/exportCryptoKey.ts +0 -0
  256. /package/src/{nanotdf-crypto → crypto}/generateKeyPair.ts +0 -0
  257. /package/src/{nanotdf-crypto → crypto}/generateRandomNumber.ts +0 -0
  258. /package/src/{nanotdf-crypto → crypto}/index.ts +0 -0
  259. /package/src/{nanotdf-crypto → crypto}/keyAgreement.ts +0 -0
  260. /package/src/{nanotdf-crypto → crypto}/pemPublicToCrypto.ts +0 -0
@@ -1,255 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- // Models
7
- const Ciphers_js_1 = require("./Ciphers.js");
8
- const ResourceLocator_js_1 = __importDefault(require("./ResourceLocator.js"));
9
- const PolicyFactory_js_1 = __importDefault(require("./Policy/PolicyFactory.js"));
10
- // Helpers
11
- const calculateByCurve_js_1 = require("../helpers/calculateByCurve.js");
12
- const DefaultParams_js_1 = __importDefault(require("./DefaultParams.js"));
13
- const errors_js_1 = require("../../errors.js");
14
- const utils_js_1 = require("../../utils.js");
15
- /**
16
- * NanoTDF Header
17
- *
18
- * The header section is intended to be sent to a KAS and is used by the KAS to derive the decryption key that can
19
- * decrypts the nanotdf's payload. The Header is structured as follows:
20
- *
21
- * | Section | Minimum Length (B) | Maximum Length (B) |
22
- * |------------------------|--------------------|--------------------|
23
- * | Magic Number + Version | 3 | 3 |
24
- * | KAS (resource locator) | 3 | 257 |
25
- * | ECC Mode | 1 | 1 |
26
- * | Payload + Sig Mode | 1 | 1 |
27
- * | Policy | 3 | 257 |
28
- * | Ephemeral Key | 33 | 67 |
29
- *
30
- */
31
- class Header {
32
- static parse(buff) {
33
- let offset = 0;
34
- /**
35
- * Magic number and version
36
- *
37
- * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3311-magic-number--version
38
- */
39
- // Convert to ascii
40
- const magicNumberVersion = buff.subarray(Header.MAGIC_NUMBER_VERSION_BYTE_OFF, Header.MAGIC_NUMBER_VERSION_BYTE_LEN);
41
- offset += Header.MAGIC_NUMBER_VERSION_BYTE_LEN;
42
- /**
43
- * KAS Resource Locator
44
- *
45
- * KAS is a typeof Resource Locator
46
- *
47
- * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3312-kas
48
- * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#341-resource-locator
49
- */
50
- const kas = ResourceLocator_js_1.default.parse(buff.subarray(offset));
51
- offset += kas.length;
52
- /**
53
- * ECC & Binding Mode
54
- *
55
- * This section contains a 1-byte bitfield describing the ECC Params and Policy binding strategy to use.
56
- * The Policy Binding strategy is either using a 64-bit GMAC (using AES-256-GCM) tag or an ECDSA signature.
57
- * The signature size depends on the size of ECC Params used. The nanotdf at this time only supports methods that
58
- * involve Elliptic Curve Cryptography. The fields are structured as follows:
59
- *
60
- * | Section | Bit Length | Bit start index |
61
- * |---------------------------|------------|-----------------|
62
- * | USE_ECDSA_BINDING | 1 | 7 |
63
- * | UNUSED | 4 | 3 |
64
- * | Ephemeral ECC Params Enum | 3 | 0 |
65
- *
66
- * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3313-ecc-and-binding-mode
67
- */
68
- const eccBindingModeDV = buff.subarray(offset, offset + Header.ECC_BINDING_MODE_BYTE_LEN);
69
- const useECDSABinding = eccBindingModeDV[0] >> 7 === 1; // Last bit
70
- const ephemeralCurveName = eccBindingModeDV[0] & 0x7; // First 3 bits
71
- offset += Header.ECC_BINDING_MODE_BYTE_LEN;
72
- /**
73
- * Symmetric & payload config
74
- *
75
- * This section contains a 1 byte data structure composed of bitfields that describe the symmetric ciphers for
76
- * encrypted payloads. This cipher applies to both the Payload and the Policy of the nanotdf. The fields are as
77
- * follows:
78
- *
79
- * | Section | Bit Length | Bit start index |
80
- * |-----------------------|------------|-----------------|
81
- * | HAS_SIGNATURE | 1 | 7 |
82
- * | Signature ECC Mode | 3 | 4 |
83
- * | Symmetric Cipher Enum | 4 | 0 |
84
- *
85
- * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3314-symmetric-and-payload-config
86
- */
87
- const symmetricPayloadDV = buff.subarray(offset, offset + Header.ECC_BINDING_MODE_BYTE_LEN);
88
- const hasSignature = symmetricPayloadDV[0] >> 7 === 1; // Last bit
89
- const signatureCurveName = (symmetricPayloadDV[0] >> 4) & 0x7; // Middle 3 bits
90
- const symmetricCipher = symmetricPayloadDV[0] & 0xf; // First 4 bits
91
- offset += Header.SYMMETRIC_PAYLOAD_CONFIG_BYTE_LEN;
92
- /**
93
- * Policy
94
- *
95
- * This section contains a Policy object. The data contained in the Policy allows for definition flexible
96
- * definitions of a policy including a policy by reference, or an embedded policy. Refer to the Policy object's
97
- * definition in Section 3.4.2
98
- *
99
- * The structure of the Policy is as follows:
100
- *
101
- * | Section | Minimum Length (B) | Maximum Length (B) |
102
- * |-----------|--------------------|--------------------|
103
- * | Type Enum | 1 | 1 |
104
- * | Body | 3 | 257 |
105
- * | Binding | 8 | 132 |
106
- *
107
- * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3315-policy
108
- * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#342-policy
109
- */
110
- const { policy, offset: nextOffset } = PolicyFactory_js_1.default.parse(buff.subarray(offset), useECDSABinding, ephemeralCurveName);
111
- offset += nextOffset;
112
- /**
113
- * Ephemeral public key
114
- *
115
- * This section contains a Key object. The size of the key is determined by the Encryption Method Section.
116
- *
117
- * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3316-key
118
- */
119
- // TODO: Resolve where offset isn't adding 1 byte
120
- const ephemeralPublicKeyLength = (0, calculateByCurve_js_1.lengthOfPublicKey)(ephemeralCurveName) + 1;
121
- const ephemeralPublicKey = buff.subarray(offset, offset + ephemeralPublicKeyLength);
122
- offset += ephemeralPublicKeyLength;
123
- // Check if the ephemeral public key length is not the same length
124
- if (ephemeralPublicKey.byteLength !== ephemeralPublicKeyLength) {
125
- throw new errors_js_1.InvalidFileError('nanotdf parse failure: public key read failure');
126
- }
127
- const header = new Header(magicNumberVersion, kas, useECDSABinding, ephemeralCurveName, hasSignature, signatureCurveName, symmetricCipher, policy, ephemeralPublicKey);
128
- return {
129
- header,
130
- offset,
131
- };
132
- }
133
- //Ephemeral Public Key
134
- // protected _ephemeralPublicKey: string | null = null;
135
- constructor(magicNumberVersion, kas, useECDSABinding, ephemeralCurveName, hasSignature, signatureCurveName, symmetricCipher, policy, ephemeralPublicKey) {
136
- // Magic Number & Version
137
- this.magicNumberVersion = DefaultParams_js_1.default.magicNumberVersion;
138
- // ECC & Binding Mode
139
- this.useECDSABinding = DefaultParams_js_1.default.ecdsaBinding;
140
- this.ephemeralCurveName = DefaultParams_js_1.default.ephemeralCurveName;
141
- // Symmetric & Payload Config
142
- this.hasSignature = DefaultParams_js_1.default.signature;
143
- this.signatureCurveName = DefaultParams_js_1.default.signatureCurveName;
144
- this.symmetricCipher = DefaultParams_js_1.default.symmetricCipher;
145
- this.magicNumberVersion = magicNumberVersion;
146
- this.kas = kas;
147
- this.useECDSABinding = useECDSABinding;
148
- this.ephemeralCurveName = ephemeralCurveName;
149
- this.hasSignature = hasSignature;
150
- this.signatureCurveName = signatureCurveName;
151
- this.symmetricCipher = symmetricCipher;
152
- this.policy = policy;
153
- this.ephemeralPublicKey = ephemeralPublicKey;
154
- // Auth tag length in bits (i.e. AES GCM 64 bit)
155
- this.authTagLength = (0, Ciphers_js_1.getBitLength)(this.symmetricCipher);
156
- }
157
- /**
158
- * Copy the contents of the header to buffer
159
- */
160
- copyToBuffer(target) {
161
- if (this.length > target.length) {
162
- throw new errors_js_1.InvalidFileError('invalid buffer size to copy tdf header');
163
- }
164
- let offset = 0;
165
- // Write Magic number and version
166
- target.set(this.magicNumberVersion, 0);
167
- offset += this.magicNumberVersion.length;
168
- // Write kas resource locator
169
- const kasResourceLocatorBuf = this.kas.toBuffer();
170
- target.set(kasResourceLocatorBuf, offset);
171
- offset += kasResourceLocatorBuf.length;
172
- // Write ECC & Binding Mode
173
- const ecdsaBinding = this.useECDSABinding ? 1 : 0;
174
- const eccBingingMode = (ecdsaBinding << 7) | this.ephemeralCurveName;
175
- const eccBingingModeAsByte = new Uint8Array(1);
176
- eccBingingModeAsByte[0] = eccBingingMode;
177
- target.set(eccBingingModeAsByte, offset);
178
- offset += eccBingingModeAsByte.length;
179
- // Write symmetric & payload config
180
- const isSignatureEnable = this.hasSignature ? 1 : 0;
181
- const symmetricPayloadConfig = (isSignatureEnable << 7) | this.signatureCurveName | this.symmetricCipher;
182
- const symmetricPayloadConfigAsByte = new Uint8Array(1);
183
- symmetricPayloadConfigAsByte[0] = symmetricPayloadConfig;
184
- target.set(symmetricPayloadConfigAsByte, offset);
185
- offset += symmetricPayloadConfigAsByte.length;
186
- // Write the policy
187
- const policyBuffer = this.policy.toBuffer();
188
- target.set(policyBuffer, offset);
189
- offset += policyBuffer.length;
190
- // Write the ephemeral public key
191
- target.set(this.ephemeralPublicKey, offset);
192
- }
193
- /**
194
- * Length
195
- *
196
- * @returns { number } Length of header
197
- */
198
- get length() {
199
- return (
200
- // Length of the magic number and version
201
- this.magicNumberVersion.length +
202
- // Length of the KAS resource locator
203
- this.kas.length +
204
- // ECC & Binding Mode - 1 Bytes
205
- 1 +
206
- // symmetric & payload config - 1 Bytes
207
- 1 +
208
- // Length of the policy
209
- this.policy.getLength() +
210
- // Length of the ephemeral public key
211
- this.ephemeralPublicKey.length);
212
- }
213
- /**
214
- * Return nanoTDF header as buffer
215
- *
216
- * Warning: This method will allocate memory of length of the header, use
217
- * copyToBuffer() when copy is not needed.
218
- */
219
- toBuffer() {
220
- const arrayBuffer = new ArrayBuffer(this.length);
221
- const target = new Uint8Array(arrayBuffer);
222
- this.copyToBuffer(target);
223
- return arrayBuffer;
224
- }
225
- /**
226
- * Get KAS Rewrap URL
227
- */
228
- getKasRewrapUrl() {
229
- try {
230
- return `${(0, utils_js_1.rstrip)(this.kas.url, '/')}`;
231
- }
232
- catch (e) {
233
- throw new errors_js_1.ConfigurationError(`cannot construct KAS Rewrap URL: ${e.message}`);
234
- }
235
- }
236
- }
237
- // Magic Number & Version
238
- Header.MAGIC_NUMBER_VERSION_BYTE_OFF = 0;
239
- Header.MAGIC_NUMBER_VERSION_BYTE_LEN = 3;
240
- Header.MAGIC_NUMBER_OFFSET = 0;
241
- Header.MAGIC_NUMBER_LENGTH = 18;
242
- // ECC & Binding Mode
243
- Header.ECC_BINDING_MODE_BYTE_LEN = 1;
244
- Header.USE_ECDSA_BINDING_BIT_OFF = 0;
245
- Header.EPHEMERAL_ECC_CURVE_NAME_BIT_OFF = -3;
246
- // Symmetric & Payload Config
247
- Header.SYMMETRIC_PAYLOAD_CONFIG_BYTE_LEN = 1;
248
- Header.HAS_SIGNATURE_BIT_OFF = 1;
249
- Header.HAS_SIGNATURE_BIT_LEN = 1;
250
- Header.SIGNATURE_ECC_CURVE_NAME_BIT_OFF = 1;
251
- Header.SIGNATURE_ECC_CURVE_NAME_BIT_LEN = 3;
252
- Header.SYMMETRIC_CIPHER_BIT_OFF = 4;
253
- Header.SYMMETRIC_CIPHER_BIT_LEN = 4;
254
- exports.default = Header;
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL0hlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLFNBQVM7QUFDVCw2Q0FBNEM7QUFDNUMsOEVBQW1EO0FBQ25ELGlGQUFzRDtBQU10RCxVQUFVO0FBQ1Ysd0VBQW1FO0FBQ25FLDBFQUErQztBQUMvQywrQ0FBdUU7QUFDdkUsNkNBQXdDO0FBRXhDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQXFCLE1BQU07SUE0Q3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBZ0I7UUFDM0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWY7Ozs7V0FJRztRQUNILG1CQUFtQjtRQUNuQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3RDLE1BQU0sQ0FBQyw2QkFBNkIsRUFDcEMsTUFBTSxDQUFDLDZCQUE2QixDQUNyQyxDQUFDO1FBQ0YsTUFBTSxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQztRQUUvQzs7Ozs7OztXQU9HO1FBQ0gsTUFBTSxHQUFHLEdBQUcsNEJBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDO1FBRXJCOzs7Ozs7Ozs7Ozs7Ozs7V0FlRztRQUNILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzFGLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXO1FBQ25FLE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsZUFB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
@@ -1,158 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const Ciphers_js_1 = require("./Ciphers.js");
4
- const errors_js_1 = require("../../errors.js");
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
- class Payload {
19
- /**
20
- * Parse the payload
21
- *
22
- * Returns a new Payload object and the next offset
23
- *
24
- * @param buff Uint8Array
25
- */
26
- static parse(header, buff, legacyTDF = false) {
27
- let offset = 0;
28
- const authTagByteLength = (0, Ciphers_js_1.getBitLength)(header.symmetricCipher) / 8;
29
- /**
30
- * Length
31
- *
32
- * This 3 byte unsigned integer dictates the length of the subsequent ciphertext section.
33
- *
34
- * NOTE: it includes the IV + Ciphertext + Auth Tag. To get the Auth Tag length you have to subtract the other
35
- * lengths
36
- */
37
- // TODO: This will not work in Big Endian host environments
38
- const length = (buff[offset] << 16) + (buff[offset + 1] << 8) + buff[offset + 2];
39
- const ciphertextLength = length - Payload.IV_LEN - authTagByteLength;
40
- offset += Payload.LENGTH_LEN;
41
- const inRange = length >= this.MIN_LENGTH && length <= this.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE;
42
- if (!inRange) {
43
- throw new errors_js_1.InvalidFileError('nanotdf parse failure: Payload Length Out Of Range');
44
- }
45
- /**
46
- * Parse IV
47
- *
48
- * The IV used for encryption. This value is a byte array containing the IV. This IV must never be reused with the
49
- * same symmetric key. Also, to support an extremely compacted version of the nanotdf the IV value 00 00 00 is
50
- * reserved for use with an encrypted policy.
51
- */
52
- let iv = buff.subarray(offset, offset + Payload.IV_LEN);
53
- offset += Payload.IV_LEN;
54
- if (iv.byteLength != 3) {
55
- throw new errors_js_1.InvalidFileError('nanotdf parse failure: Invalid Payload Length');
56
- }
57
- if (!legacyTDF) {
58
- const actuallIV = new Uint8Array(12).fill(0);
59
- // The the iv from payload to lower-order bits
60
- actuallIV.set(iv, 9);
61
- // update the iv
62
- iv = actuallIV;
63
- }
64
- /**
65
- * Parse Ciphertext w/ Auth Tag
66
- */
67
- const ciphertextWithAuthTag = buff.subarray(offset, offset + ciphertextLength + authTagByteLength);
68
- if (ciphertextWithAuthTag.byteLength + Payload.LENGTH_LEN !== length) {
69
- throw new errors_js_1.InvalidFileError('nanotdf parse failure: Invalid Payload Length');
70
- }
71
- /**
72
- * Parse Ciphertext
73
- *
74
- * The byte array of the ciphertext that is protected in the nanotdf. The encryption method used to create or decrypt
75
- * the ciphertext is defined in the Key Access object in the header.
76
- */
77
- const ciphertext = buff.subarray(offset, offset + ciphertextLength);
78
- offset += ciphertextLength;
79
- /**
80
- * Auth Tag
81
- *
82
- * GMAC = 8 byte
83
- * ECDSA = size of curve
84
- *
85
- * The MAC of the payload. The Size of this MAC is determined by the Encryption Method Enum used in the Symmetric and
86
- * Payload Config object in the header.
87
- *
88
- * @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3314-symmetric-and-payload-config
89
- */
90
- const authTag = buff.subarray(offset, offset + authTagByteLength);
91
- offset += authTagByteLength;
92
- return {
93
- payload: new Payload(iv, ciphertext, authTag, ciphertextWithAuthTag),
94
- offset,
95
- };
96
- }
97
- constructor(iv, ciphertext, authTag, ciphertextWithAuthTag) {
98
- this.iv = iv;
99
- this.ciphertext = ciphertext;
100
- this.authTag = authTag;
101
- // If ciphertextWithAuthTag is not set then combine it
102
- // Ideally it is set so an additional buffer is not needed
103
- if (ciphertextWithAuthTag === undefined) {
104
- this.ciphertextWithAuthTag = new Uint8Array(ciphertext.length + authTag.length);
105
- this.ciphertextWithAuthTag.set(ciphertext);
106
- this.ciphertextWithAuthTag.set(authTag, ciphertext.length);
107
- }
108
- else {
109
- this.ciphertextWithAuthTag = ciphertextWithAuthTag;
110
- }
111
- }
112
- /**
113
- * Length
114
- *
115
- * @returns { number } Length of signature
116
- */
117
- get length() {
118
- return (
119
- // Bytes(3) to hold the length of the payload
120
- 3 +
121
- // Length of the IV
122
- this.iv.length +
123
- // Length of the ciphertext
124
- this.ciphertext.length +
125
- // Length of the auth tag
126
- this.authTag.length);
127
- }
128
- /**
129
- * Copy the contents of the signature to buffer
130
- */
131
- copyToBuffer(target) {
132
- if (this.length > target.length) {
133
- throw new Error('internal: invalid buffer size to copy payload');
134
- }
135
- const lengthOfEncryptedPayload = this.iv.length + this.ciphertext.length + this.authTag.length;
136
- if (lengthOfEncryptedPayload > Payload.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE) {
137
- throw new errors_js_1.ConfigurationError("TDF encrypted payload can't be more that 2^24");
138
- }
139
- const lengthAsUint32 = new Uint32Array(1);
140
- lengthAsUint32[0] = lengthOfEncryptedPayload;
141
- const lengthAsUint24 = new Uint8Array(lengthAsUint32.buffer);
142
- // NOTE: We are only interested in only first 3 bytes.
143
- const payloadSizeAsBg = new Uint8Array(3);
144
- payloadSizeAsBg[0] = lengthAsUint24[2];
145
- payloadSizeAsBg[1] = lengthAsUint24[1];
146
- payloadSizeAsBg[2] = lengthAsUint24[0];
147
- target.set(payloadSizeAsBg, 0);
148
- target.set(this.iv, payloadSizeAsBg.length);
149
- target.set(this.ciphertext, payloadSizeAsBg.length + this.iv.length);
150
- target.set(this.authTag, payloadSizeAsBg.length + this.iv.length + this.ciphertext.length);
151
- }
152
- }
153
- Payload.LENGTH_LEN = 3;
154
- Payload.IV_LEN = 3;
155
- Payload.MIN_LENGTH = 11;
156
- Payload.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE = 16777216; // 3 bytes unsigned int.
157
- exports.default = Payload;
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL21vZGVscy9QYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsNkNBQTRDO0FBQzVDLCtDQUF1RTtBQUV2RTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFxQixPQUFPO0lBVzFCOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQ1YsTUFBYyxFQUNkLElBQWdCLEVBQ2hCLFNBQVMsR0FBRyxLQUFLO1FBRWpCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE1BQU0saUJBQWlCLEdBQUcsSUFBQSx5QkFBWSxFQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkU7Ozs7Ozs7V0FPRztRQUNILDJEQUEyRDtRQUMzRCxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRixNQUFNLGdCQUFnQixHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDO1FBQ3JFLE1BQU0sSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDO1FBRTdCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsaUNBQWlDLENBQUM7UUFFOUYsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLDRCQUFnQixDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUVEOzs7Ozs7V0FNRztRQUNILElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1B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
@@ -1,73 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const errors_js_1 = require("../../../errors.js");
4
- class AbstractPolicy {
5
- // Static methods can't be defined in an interface
6
- static parse(
7
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
8
- buff,
9
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
10
- useECDSABinding,
11
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
- type) {
13
- throw new errors_js_1.ConfigurationError('parsePolicy was not implemented');
14
- }
15
- constructor(type, binding) {
16
- this.type = type;
17
- this.binding = binding;
18
- }
19
- /**
20
- * Length of policy
21
- */
22
- getLength() {
23
- throw new errors_js_1.ConfigurationError('length was not implemented');
24
- }
25
- /**
26
- * Return the content of the policy
27
- */
28
- toBuffer() {
29
- throw new errors_js_1.ConfigurationError('toBuffer() was not implemented');
30
- }
31
- /**
32
- * Parses an ECDSA binding from a given buffer.
33
- *
34
- * @param {Uint8Array} buff - The buffer containing the ECDSA binding.
35
- * @returns {{ bindingLength: number; binding: Uint8Array }} - An object containing the binding length and the binding subarray.
36
- */
37
- static parseECDSABinding(buff) {
38
- const lengthOfR = buff[0];
39
- const lengthOfS = buff[this.SIZE_OF_LENGTH_FIELD + lengthOfR];
40
- const bindingLength = this.SIZE_OF_LENGTH_FIELD + lengthOfR + this.SIZE_OF_LENGTH_FIELD + lengthOfS;
41
- const binding = buff.subarray(0, bindingLength);
42
- return { bindingLength, binding };
43
- }
44
- /**
45
- * Parses a binding from a given buffer based on the specified binding type.
46
- *
47
- * @param {Uint8Array} buff - The buffer containing the binding.
48
- * @param {boolean} useEcdsaBinding - Flag indicating whether to use ECDSA binding.
49
- * @param {number} offset - The starting offset in the buffer.
50
- * @returns {{ binding: Uint8Array; newOffset: number }} - An object containing the binding and the new offset.
51
- */
52
- static parseBinding(buff, useEcdsaBinding, offset) {
53
- if (useEcdsaBinding) {
54
- const ecdsaBinding = this.parseECDSABinding(buff.subarray(offset));
55
- return { binding: ecdsaBinding.binding, newOffset: offset + ecdsaBinding.bindingLength };
56
- }
57
- else {
58
- const binding = buff.subarray(offset, offset + this.GMAC_BINDING_LEN);
59
- return { binding, newOffset: offset + this.GMAC_BINDING_LEN };
60
- }
61
- }
62
- }
63
- AbstractPolicy.TYPE_BYTE_OFF = 0;
64
- AbstractPolicy.TYPE_BYTE_LEN = 1;
65
- AbstractPolicy.BODY_BYTE_OFF = 1;
66
- AbstractPolicy.BODY_BYTE_MIN_LEN = 3;
67
- AbstractPolicy.BODY_BYTE_MAX_LEN = 257;
68
- AbstractPolicy.BINDING_BYTE_MIN_LEN = 8;
69
- AbstractPolicy.BINDING_BYTE_MAX_LEN = 132;
70
- AbstractPolicy.SIZE_OF_LENGTH_FIELD = 1; // 1 byte for each length field (R and S)
71
- AbstractPolicy.GMAC_BINDING_LEN = 8;
72
- exports.default = AbstractPolicy;
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9tb2RlbHMvUG9saWN5L0Fic3RyYWN0UG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0RBQXdEO0FBRXhELE1BQWUsY0FBYztJQWMzQixrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLEtBQUs7SUFDViw2REFBNkQ7SUFDN0QsSUFBZ0I7SUFDaEIsNkRBQTZEO0lBQzdELGVBQXdCO0lBQ3hCLDZEQUE2RDtJQUM3RCxJQUFpQjtRQUVqQixNQUFNLElBQUksOEJBQWtCLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsWUFBWSxJQUFnQixFQUFFLE9BQW1CO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxNQUFNLElBQUksOEJBQWtCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sTUFBTSxJQUFJLDhCQUFrQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQWdCO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBRTlELE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7UUFDaEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQ2pCLElBQWdCLEVBQ2hCLGVBQXdCLEVBQ3hCLE1BQWM7UUFFZCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNGLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQzs7QUFqRmUsNEJBQWEsR0FBRyxDQUFDLENBQUM7QUFDbEIsNEJBQWEsR0FBRyxDQUFDLENBQUM7QUFDbEIsNEJBQWEsR0FBRyxDQUFDLENBQUM7QUFDbEIsZ0NBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLGdDQUFpQixHQUFHLEdBQUcsQ0FBQztBQUN4QixtQ0FBb0IsR0FBRyxDQUFDLENBQUM7QUFDekIsbUNBQW9CLEdBQUcsR0FBRyxDQUFDO0FBQzNCLG1DQUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDLHlDQUF5QztBQUNuRSwrQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUE0RXZDLGtCQUFlLGNBQWMsQ0FBQyJ9
@@ -1,82 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const AbstractPolicy_js_1 = __importDefault(require("./AbstractPolicy.js"));
7
- const errors_js_1 = require("../../../errors.js");
8
- /**
9
- * Embedded Policy
10
- *
11
- * These policy types allow for creation and binding of arbitrary policies.
12
- *
13
- * | Section | Minimum Length (B) | Maximum Length (B) |
14
- * |------------------------------|--------------------|--------------------|
15
- * | Content Length | 2 | 2 |
16
- * | Plaintext/Ciphertext | 1 | 255 |
17
- * | (Optional) Policy Key Access | 36 | 136 |
18
- */
19
- class EmbeddedPolicy extends AbstractPolicy_js_1.default {
20
- static parse(buff, useEcdsaBinding, type) {
21
- let offset = 0;
22
- // TODO: May not work on Big Endian systems. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint16
23
- // Also http://calculist.org/blog/2012/04/24/the-little-endian-web/
24
- const length = new DataView(buff.slice(offset, 2).buffer).getUint16(0);
25
- offset += 2;
26
- const content = buff.subarray(offset, offset + length);
27
- offset += length;
28
- const { binding, newOffset: bindingOffset } = this.parseBinding(buff, useEcdsaBinding, offset);
29
- offset = bindingOffset;
30
- return {
31
- policy: new EmbeddedPolicy(type, binding, content),
32
- offset,
33
- };
34
- }
35
- constructor(type, binding, content) {
36
- super(type, binding);
37
- this.content = content;
38
- }
39
- /**
40
- * Length of policy
41
- *
42
- * @returns { number } length
43
- */
44
- getLength() {
45
- return (
46
- // Type length
47
- 1 +
48
- // Policy length
49
- 2 +
50
- // Content length
51
- this.content.length +
52
- // Binding length
53
- this.binding.length);
54
- }
55
- /**
56
- * Return the content of the policy
57
- */
58
- toBuffer() {
59
- const target = new Uint8Array(this.getLength());
60
- if (this.content.length > EmbeddedPolicy.MAX_POLICY_SIZE) {
61
- throw new errors_js_1.ConfigurationError("TDF Policy can't be more that 2^16");
62
- }
63
- target.set([this.type], 0);
64
- // Write the policy length, assuming the host system is little endian
65
- // TODO: There should be better way to convert to big endian
66
- const lengthAsUint16 = new Uint16Array(1);
67
- lengthAsUint16[0] = this.content.length;
68
- const temp = new Uint8Array(lengthAsUint16.buffer);
69
- const policyContentSizeAsBg = new Uint8Array(2);
70
- policyContentSizeAsBg[0] = temp[1];
71
- policyContentSizeAsBg[1] = temp[0];
72
- target.set(policyContentSizeAsBg, 1);
73
- // Write the policy content
74
- target.set(this.content, policyContentSizeAsBg.length + 1);
75
- // Write the binding.
76
- target.set(this.binding, this.content.length + policyContentSizeAsBg.length + 1);
77
- return target;
78
- }
79
- }
80
- EmbeddedPolicy.MAX_POLICY_SIZE = 65535; // 2 bytes unsigned int.
81
- exports.default = EmbeddedPolicy;
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1iZWRkZWRQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9tb2RlbHMvUG9saWN5L0VtYmVkZGVkUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNEVBQWlEO0FBR2pELGtEQUF3RDtBQUV4RDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxjQUFlLFNBQVEsMkJBQWM7SUFJekMsTUFBTSxDQUFVLEtBQUssQ0FDbkIsSUFBZ0IsRUFDaEIsZUFBd0IsRUFDeEIsSUFBaUI7UUFFakIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsb0pBQW9KO1FBQ3BKLG1FQUFtRTtRQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUVaLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksTUFBTSxDQUFDO1FBRWpCLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRixNQUFNLEdBQUcsYUFBYSxDQUFDO1FBRXZCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7WUFDbEQsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxJQUFpQixFQUFFLE9BQW1CLEVBQUUsT0FBbUI7UUFDckUsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNNLFNBQVM7UUFDaEIsT0FBTztRQUNMLGNBQWM7UUFDZCxDQUFDO1lBQ0QsZ0JBQWdCO1lBQ2hCLENBQUM7WUFDRCxpQkFBaUI7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQ25CLGlCQUFpQjtZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNNLFFBQVE7UUFDZixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUVoRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6RCxNQUFNLElBQUksOEJBQWtCLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUzQixxRUFBcUU7UUFDckUsNERBQTREO1FBQzVELE1BQU0sY0FBYyxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUV4QyxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFckMsMkJBQTJCO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFM0QscUJBQXFCO1FBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFakYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7QUFoRk0sOEJBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQyx3QkFBd0I7QUFtRjFELGtCQUFlLGNBQWMsQ0FBQyJ9
@@ -1,38 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const AbstractPolicy_js_1 = __importDefault(require("./AbstractPolicy.js"));
7
- const EmbeddedPolicy_js_1 = __importDefault(require("./EmbeddedPolicy.js"));
8
- const RemotePolicy_js_1 = __importDefault(require("./RemotePolicy.js"));
9
- const PolicyTypeEnum_js_1 = __importDefault(require("../../enum/PolicyTypeEnum.js"));
10
- const errors_js_1 = require("../../../errors.js");
11
- function parse(buff, useEcdsaBinding, curve) {
12
- const type = buff[AbstractPolicy_js_1.default.TYPE_BYTE_OFF];
13
- let policy;
14
- let offset;
15
- // Check if remote policy
16
- if (type === PolicyTypeEnum_js_1.default.Remote) {
17
- ({ policy, offset } = RemotePolicy_js_1.default.parse(buff.subarray(AbstractPolicy_js_1.default.TYPE_BYTE_LEN), useEcdsaBinding));
18
- }
19
- else if ([
20
- // Check if is an embedded policy
21
- PolicyTypeEnum_js_1.default.EmbeddedEncrypted,
22
- PolicyTypeEnum_js_1.default.EmbeddedEncryptedPKA,
23
- PolicyTypeEnum_js_1.default.EmbeddedText,
24
- ].includes(type)) {
25
- ({ policy, offset } = EmbeddedPolicy_js_1.default.parse(buff.subarray(AbstractPolicy_js_1.default.TYPE_BYTE_LEN), useEcdsaBinding, type));
26
- }
27
- else {
28
- throw new errors_js_1.UnsupportedFeatureError(`unsupported policy type: ${type}`);
29
- }
30
- return {
31
- policy,
32
- offset: offset + AbstractPolicy_js_1.default.TYPE_BYTE_LEN,
33
- };
34
- }
35
- exports.default = {
36
- parse,
37
- };
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5RmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL21vZGVscy9Qb2xpY3kvUG9saWN5RmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRFQUFpRDtBQUNqRCw0RUFBaUQ7QUFDakQsd0VBQTZDO0FBQzdDLHFGQUEwRDtBQUMxRCxrREFBNkQ7QUFHN0QsU0FBUyxLQUFLLENBQ1osSUFBZ0IsRUFDaEIsZUFBd0IsRUFDeEIsS0FBb0I7SUFFcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLDJCQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEQsSUFBSSxNQUFzQixDQUFDO0lBQzNCLElBQUksTUFBYyxDQUFDO0lBRW5CLHlCQUF5QjtJQUN6QixJQUFJLElBQUksS0FBSywyQkFBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcseUJBQVksQ0FBQyxLQUFLLENBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsMkJBQWMsQ0FBQyxhQUFhLENBQUMsRUFDM0MsZUFBZSxDQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDO1NBQU0sSUFDTDtRQUNFLGtDQUFrQztRQUNsQywyQkFBYyxDQUFDLGlCQUFpQjtRQUNoQywyQkFBYyxDQUFDLG9CQUFvQjtRQUNuQywyQkFBYyxDQUFDLFlBQVk7S0FDNUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQ2hCLENBQUM7UUFDRCxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLDJCQUFjLENBQUMsS0FBSyxDQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUFjLENBQUMsYUFBYSxDQUFDLEVBQzNDLGVBQWUsRUFDZixJQUFJLENBQ0wsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksbUNBQXVCLENBQUMsNEJBQTRCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNO1FBQ04sTUFBTSxFQUFFLE1BQU0sR0FBRywyQkFBYyxDQUFDLGFBQWE7S0FDOUMsQ0FBQztBQUNKLENBQUM7QUFFRCxrQkFBZTtJQUNiLEtBQUs7Q0FDTixDQUFDIn0=