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

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,196 +0,0 @@
1
- import NanoTDF from './NanoTDF.js';
2
- import Header from './models/Header.js';
3
- import ResourceLocator from './models/ResourceLocator.js';
4
- import DefaultParams from './models/DefaultParams.js';
5
- import EmbeddedPolicy from './models/Policy/EmbeddedPolicy.js';
6
- import Payload from './models/Payload.js';
7
- import getHkdfSalt from './helpers/getHkdfSalt.js';
8
- import { getBitLength as authTagLengthForCipher } from './models/Ciphers.js';
9
- import { GMAC_BINDING_LEN } from './constants.js';
10
- import { AlgorithmName, KeyFormat, KeyUsageType } from './../nanotdf-crypto/enums.js';
11
-
12
- import {
13
- encrypt as cryptoEncrypt,
14
- keyAgreement,
15
- digest,
16
- exportCryptoKey,
17
- } from '../nanotdf-crypto/index.js';
18
- import { KasPublicKeyInfo } from '../access.js';
19
- import { computeECDSASig, extractRSValuesFromSignature } from '../nanotdf-crypto/ecdsaSignature.js';
20
- import { ConfigurationError } from '../errors.js';
21
-
22
- /**
23
- * Encrypt the plain data into nanotdf buffer
24
- *
25
- * @param policy Policy that will added to the nanotdf
26
- * @param kasInfo KAS url and public key data
27
- * @param ephemeralKeyPair SDK ephemeral key pair to generate symmetric key
28
- * @param iv
29
- * @param data The data to be encrypted
30
- * @param ecdsaBinding Flag to enable ECDSA binding
31
- */
32
- export default async function encrypt(
33
- policy: string,
34
- kasInfo: KasPublicKeyInfo,
35
- ephemeralKeyPair: CryptoKeyPair,
36
- iv: Uint8Array,
37
- data: string | ArrayBufferLike,
38
- ecdsaBinding: boolean = DefaultParams.ecdsaBinding
39
- ): Promise<ArrayBuffer> {
40
- // Generate a symmetric key.
41
- if (!ephemeralKeyPair.privateKey) {
42
- throw new ConfigurationError('incomplete ephemeral key');
43
- }
44
- const symmetricKey = await keyAgreement(
45
- ephemeralKeyPair.privateKey,
46
- await kasInfo.key,
47
- // Get the hkdf salt params
48
- await getHkdfSalt(DefaultParams.magicNumberVersion)
49
- );
50
-
51
- // Construct the kas locator
52
- const kasResourceLocator = ResourceLocator.fromURL(kasInfo.url, kasInfo.kid);
53
-
54
- // Auth tag length for policy and payload
55
- const authTagLengthInBytes = authTagLengthForCipher(DefaultParams.symmetricCipher) / 8;
56
-
57
- // Encrypt the policy
58
- const policyIV = new Uint8Array(iv.length).fill(0);
59
- const policyAsBuffer = new TextEncoder().encode(policy);
60
- const encryptedPolicy = await cryptoEncrypt(
61
- symmetricKey,
62
- policyAsBuffer,
63
- policyIV,
64
- authTagLengthInBytes * 8
65
- );
66
-
67
- let policyBinding: Uint8Array;
68
-
69
- // Calculate the policy binding.
70
- if (ecdsaBinding) {
71
- const curveName = await getCurveNameFromPrivateKey(ephemeralKeyPair.privateKey);
72
- const ecdsaPrivateKey = await convertECDHToECDSA(ephemeralKeyPair.privateKey, curveName);
73
- const ecdsaSignature = await computeECDSASig(ecdsaPrivateKey, new Uint8Array(encryptedPolicy));
74
- const { r, s } = extractRSValuesFromSignature(new Uint8Array(ecdsaSignature));
75
-
76
- const rLength = r.length;
77
- const sLength = s.length;
78
-
79
- policyBinding = new Uint8Array(1 + rLength + 1 + sLength);
80
-
81
- // Set the lengths and values of r and s in policyBinding
82
- policyBinding[0] = rLength;
83
- policyBinding.set(r, 1);
84
- policyBinding[1 + rLength] = sLength;
85
- policyBinding.set(s, 1 + rLength + 1);
86
- } else {
87
- const signature = await digest('SHA-256', new Uint8Array(encryptedPolicy));
88
- policyBinding = new Uint8Array(signature.slice(-GMAC_BINDING_LEN));
89
- }
90
-
91
- // Create embedded policy
92
- const embeddedPolicy = new EmbeddedPolicy(
93
- DefaultParams.policyType,
94
- policyBinding,
95
- new Uint8Array(encryptedPolicy)
96
- );
97
-
98
- if (!ephemeralKeyPair.publicKey) {
99
- throw new ConfigurationError('incomplete ephemeral key');
100
- }
101
- // Create a header
102
- const pubKeyAsArrayBuffer = await exportCryptoKey(ephemeralKeyPair.publicKey);
103
-
104
- const header = new Header(
105
- DefaultParams.magicNumberVersion,
106
- kasResourceLocator,
107
- ecdsaBinding,
108
- DefaultParams.signatureCurveName,
109
- DefaultParams.signature,
110
- DefaultParams.signatureCurveName,
111
- DefaultParams.symmetricCipher,
112
- embeddedPolicy,
113
- new Uint8Array(pubKeyAsArrayBuffer)
114
- );
115
-
116
- // Encrypt the payload
117
- let payloadAsBuffer;
118
- if (typeof data === 'string') {
119
- payloadAsBuffer = new TextEncoder().encode(data);
120
- } else {
121
- payloadAsBuffer = data;
122
- }
123
-
124
- const encryptedPayload = await cryptoEncrypt(
125
- symmetricKey,
126
- new Uint8Array(payloadAsBuffer),
127
- iv,
128
- authTagLengthInBytes * 8
129
- );
130
-
131
- // Create payload
132
- const payload = new Payload(
133
- iv.slice(-3),
134
- new Uint8Array(encryptedPayload.slice(0, -authTagLengthInBytes)),
135
- new Uint8Array(encryptedPayload.slice(-authTagLengthInBytes))
136
- );
137
-
138
- // Create a nanotdf.
139
- const nanoTDF = new NanoTDF(header, payload);
140
- return nanoTDF.toBuffer();
141
- }
142
-
143
- /**
144
- * Retrieves the curve name from a given ECDH private key.
145
- *
146
- * This function exports the provided ECDH private key in JWK format and extracts
147
- * the curve name from the 'crv' property of the JWK.
148
- *
149
- * @param {CryptoKey} privateKey - The ECDH private key from which to retrieve the curve name.
150
- * @returns {Promise<string>} - A promise that resolves to the curve name.
151
- *
152
- * @throws {Error} - Throws an error if the curve name is undefined.
153
- *
154
- */
155
- async function getCurveNameFromPrivateKey(privateKey: CryptoKey): Promise<string> {
156
- // Export the private key
157
- const keyData = await crypto.subtle.exportKey('jwk', privateKey);
158
-
159
- // The curve name is stored in the 'crv' property of the JWK
160
- if (!keyData.crv) {
161
- throw new ConfigurationError('curve name is undefined (bad private key)');
162
- }
163
-
164
- return keyData.crv;
165
- }
166
-
167
- /**
168
- * Converts an ECDH private key to an ECDSA private key.
169
- *
170
- * This function exports the given ECDH private key in PKCS#8 format and then
171
- * imports it as an ECDSA private key using the specified curve name.
172
- *
173
- * @param {CryptoKey} key - The ECDH private key to be converted.
174
- * @param {string} curveName - The name of the elliptic curve to be used for the ECDSA key.
175
- * @returns {Promise<CryptoKey>} - A promise that resolves to the converted ECDSA private key.
176
- *
177
- * @throws {Error} - Throws an error if the key export or import fails.
178
- */
179
- async function convertECDHToECDSA(key: CryptoKey, curveName: string): Promise<CryptoKey> {
180
- // Export the ECDH private key
181
- const ecdhPrivateKey = await crypto.subtle.exportKey('pkcs8', key);
182
-
183
- // Import the ECDH private key as an ECDSA private key
184
- const ecdsaPrivateKey = await crypto.subtle.importKey(
185
- KeyFormat.Pkcs8,
186
- ecdhPrivateKey,
187
- {
188
- name: AlgorithmName.ECDSA,
189
- namedCurve: curveName,
190
- },
191
- true,
192
- [KeyUsageType.Sign]
193
- );
194
-
195
- return ecdsaPrivateKey;
196
- }
@@ -1,10 +0,0 @@
1
- enum CipherEnum {
2
- AES_256_GCM_64, // Default cipher
3
- AES_256_GCM_96,
4
- AES_256_GCM_104,
5
- AES_256_GCM_112,
6
- AES_256_GCM_120,
7
- AES_256_GCM_128,
8
- }
9
-
10
- export default CipherEnum;
@@ -1,12 +0,0 @@
1
- /**
2
- * The Signature ECC Mode is used to determine the length of the signature at the end of a nanotdf. This, in
3
- * combination with the previous HAS_SIGNATURE section, describe the signature of the nanotdf. The following table
4
- * describes the valid values and the associated ECC Params.
5
- */
6
- enum CurveNameEnum {
7
- SECP256R1,
8
- SECP384R1,
9
- SECP521R1,
10
- }
11
-
12
- export default CurveNameEnum;
@@ -1,5 +0,0 @@
1
- enum EncodingEnum {
2
- Base64 = 'base64',
3
- }
4
-
5
- export default EncodingEnum;
@@ -1,8 +0,0 @@
1
- enum PolicyType {
2
- Remote,
3
- EmbeddedText,
4
- EmbeddedEncrypted, // Default policy
5
- EmbeddedEncryptedPKA, // Todo: Not implemented
6
- }
7
-
8
- export default PolicyType;
@@ -1,7 +0,0 @@
1
- enum ProtocolEnum {
2
- Http = 0,
3
- Https = 1,
4
- SharedResourceDirectory = 0xf,
5
- }
6
-
7
- export default ProtocolEnum;
@@ -1,8 +0,0 @@
1
- enum ResourceLocatorIdentifierEnum {
2
- None = 0,
3
- TwoBytes = 2,
4
- EightBytes = 8,
5
- ThirtyTwoBytes = 32,
6
- }
7
-
8
- export default ResourceLocatorIdentifierEnum;
@@ -1,26 +0,0 @@
1
- import CurveNameEnum from '../enum/CurveNameEnum.js';
2
- import { getCurveLength } from '../models/EcCurves.js';
3
-
4
- /**
5
- * Length of public key
6
- *
7
- * @param curveName CurveNameEnum
8
- * @returns number length of the public key
9
- */
10
- export function lengthOfPublicKey(curveName: CurveNameEnum): number | never {
11
- return Math.ceil(getCurveLength(curveName) / 8);
12
- }
13
-
14
- /**
15
- * Length of signature
16
- *
17
- * ECDSA signatures are 2 times longer than the signer's private key for the curve used during the signing process.
18
- * For example, for 256-bit elliptic curves (like secp256k1 ) the ECDSA signature is 512 bits (64 bytes) and for 521-bit
19
- * curves (like secp521r1 ) the signature is 1042 bits.
20
- *
21
- * @param curveName CurveNameEnum
22
- * @returns number length of the signature
23
- */
24
- export function lengthOfSignature(curveName: CurveNameEnum): number | never {
25
- return Math.ceil((getCurveLength(curveName) * 2) / 8);
26
- }
@@ -1,13 +0,0 @@
1
- import { digest, enums } from '../../nanotdf-crypto/index.js';
2
-
3
- interface HkdfSalt {
4
- hkdfSalt: ArrayBuffer;
5
- hkdfHash: enums.HashType;
6
- }
7
-
8
- export default async function getHkdfSalt(buffer: ArrayBufferLike): Promise<HkdfSalt> {
9
- return {
10
- hkdfSalt: await digest(enums.HashType.Sha256, buffer),
11
- hkdfHash: enums.HashType.Sha256,
12
- };
13
- }
@@ -1,10 +0,0 @@
1
- // Don't export named values or the enduser will
2
- // have to call `const NanoTDF = require('nanotdf').default`
3
- export { default as Client } from './Client.js';
4
- export { default as Header } from './models/Header.js';
5
- export { default as NanoTDF } from './NanoTDF.js';
6
- export { default as decrypt } from './decrypt.js';
7
- export { default as encrypt } from './encrypt.js';
8
- export { default as encryptDataset } from './encrypt-dataset.js';
9
- export { default as getHkdfSalt } from './helpers/getHkdfSalt.js';
10
- export { default as DefaultParams } from './models/DefaultParams.js';
@@ -1,27 +0,0 @@
1
- import PolicyTypeEnum from '../enum/PolicyTypeEnum.js';
2
- import ResourceLocator from '../models/ResourceLocator.js';
3
-
4
- export default interface PolicyInterface {
5
- type: PolicyTypeEnum;
6
- binding: Uint8Array;
7
-
8
- // Remote policy
9
- remotePolicy?: ResourceLocator;
10
-
11
- // Embedded policy
12
- content?: Uint8Array;
13
-
14
- // Return the content of policy
15
- toBuffer(): Uint8Array | never;
16
-
17
- // Return the length of the policy
18
- getLength(): number;
19
- }
20
-
21
- export interface RemotePolicyInterface extends PolicyInterface {
22
- remotePoilcy?: ResourceLocator;
23
- }
24
-
25
- export interface EmbeddedPolicyInterface extends PolicyInterface {
26
- content: Uint8Array;
27
- }
@@ -1,67 +0,0 @@
1
- import CipherEnum from '../enum/CipherEnum.js';
2
- import { UnsupportedFeatureError } from '../../errors.js';
3
-
4
- interface CipherInterface {
5
- name: CipherEnum;
6
- length: number;
7
- }
8
-
9
- export const Aes256Gcm64: CipherInterface = {
10
- name: CipherEnum.AES_256_GCM_64,
11
- length: 64,
12
- };
13
-
14
- export const Aes256Gcm96: CipherInterface = {
15
- name: CipherEnum.AES_256_GCM_96,
16
- length: 96,
17
- };
18
-
19
- export const Aes256Gcm104: CipherInterface = {
20
- name: CipherEnum.AES_256_GCM_104,
21
- length: 104,
22
- };
23
-
24
- export const Aes256Gcm112: CipherInterface = {
25
- name: CipherEnum.AES_256_GCM_112,
26
- length: 112,
27
- };
28
-
29
- export const Aes256Gcm120: CipherInterface = {
30
- name: CipherEnum.AES_256_GCM_120,
31
- length: 120,
32
- };
33
-
34
- export const Aes256Gcm128: CipherInterface = {
35
- name: CipherEnum.AES_256_GCM_128,
36
- length: 128,
37
- };
38
-
39
- export function getBitLength(cipher: CipherEnum): number {
40
- switch (cipher) {
41
- case CipherEnum.AES_256_GCM_64:
42
- return Aes256Gcm64.length;
43
- case CipherEnum.AES_256_GCM_96:
44
- return Aes256Gcm96.length;
45
- case CipherEnum.AES_256_GCM_104:
46
- return Aes256Gcm104.length;
47
- case CipherEnum.AES_256_GCM_112:
48
- return Aes256Gcm112.length;
49
- case CipherEnum.AES_256_GCM_120:
50
- return Aes256Gcm120.length;
51
- case CipherEnum.AES_256_GCM_128:
52
- return Aes256Gcm128.length;
53
- default:
54
- throw new UnsupportedFeatureError(`unsupported cipher enum value: [${cipher}]`);
55
- }
56
- }
57
-
58
- // export default {
59
- // Aes256Gcm64,
60
- // Aes256Gcm96,
61
- // Aes256Gcm104,
62
- // Aes256Gcm112,
63
- // Aes256Gcm120,
64
- // Aes256Gcm128,
65
-
66
- // getBitLength,
67
- // };
@@ -1,24 +0,0 @@
1
- import CipherEnum from '../enum/CipherEnum.js';
2
- import CurveNameEnum from '../enum/CurveNameEnum.js';
3
- import PolicyTypeEnum from '../enum/PolicyTypeEnum.js';
4
-
5
- const enc = new TextEncoder();
6
-
7
- /**
8
- * Default encrypt param builders
9
- *
10
- * @link https://github.com/virtru/tdf3-cpp/blob/develop/tdf3-src/lib/src/nanotdf_builder_impl.h
11
- */
12
- const DefaultParams = {
13
- ecdsaBinding: false,
14
- ephemeralCurveName: CurveNameEnum.SECP256R1,
15
- magicNumberVersion: enc.encode('L1L'),
16
- offlineMode: false,
17
- policyType: PolicyTypeEnum.EmbeddedEncrypted,
18
- signature: false,
19
- signatureCurveName: CurveNameEnum.SECP256R1,
20
- symmetricCipher: CipherEnum.AES_256_GCM_96,
21
- defaultECAlgorithm: 'ec:secp256r1',
22
- };
23
-
24
- export default DefaultParams;
@@ -1,40 +0,0 @@
1
- import CurveNameEnum from '../enum/CurveNameEnum.js';
2
- import { UnsupportedFeatureError } from '../../errors.js';
3
-
4
- export interface CurveInterface {
5
- name: CurveNameEnum;
6
- length: number;
7
- }
8
-
9
- export const Secp256R1: CurveInterface = {
10
- name: CurveNameEnum.SECP256R1,
11
- length: 256,
12
- };
13
-
14
- export const Secp384R1: CurveInterface = {
15
- name: CurveNameEnum.SECP384R1,
16
- length: 384,
17
- };
18
-
19
- export const Secp521R1: CurveInterface = {
20
- name: CurveNameEnum.SECP521R1,
21
- length: 521,
22
- };
23
-
24
- /**
25
- * Get size from Curve
26
- *
27
- * @param curveName CurveNameEnum name of the curve
28
- */
29
- export function getCurveLength(curveName: CurveNameEnum): number {
30
- switch (curveName) {
31
- case Secp256R1.name:
32
- return Secp256R1.length;
33
- case Secp384R1.name:
34
- return Secp384R1.length;
35
- case Secp521R1.name:
36
- return Secp521R1.length;
37
- default:
38
- throw new UnsupportedFeatureError(`unsupported curve name: ${curveName}`);
39
- }
40
- }