@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.
- package/README.md +5 -30
- package/dist/cjs/src/{nanotdf-crypto → crypto}/ciphers.js +1 -1
- package/dist/cjs/src/{nanotdf-crypto → crypto}/decrypt.js +1 -1
- package/dist/cjs/src/{nanotdf-crypto → crypto}/digest.js +1 -1
- package/dist/cjs/src/{nanotdf-crypto → crypto}/ecdsaSignature.js +2 -2
- package/dist/cjs/src/{nanotdf-crypto → crypto}/encrypt.js +1 -1
- package/dist/cjs/src/{nanotdf-crypto → crypto}/enums.js +1 -1
- package/dist/cjs/src/crypto/exportCryptoKey.js +20 -0
- package/dist/cjs/src/{nanotdf-crypto → crypto}/generateKeyPair.js +1 -1
- package/dist/cjs/src/{nanotdf-crypto → crypto}/generateRandomNumber.js +1 -1
- package/dist/cjs/src/{nanotdf-crypto → crypto}/index.js +1 -1
- package/dist/cjs/src/{nanotdf-crypto → crypto}/keyAgreement.js +1 -1
- package/dist/cjs/src/{nanotdf-crypto → crypto}/pemPublicToCrypto.js +1 -1
- package/dist/cjs/src/opentdf.js +9 -260
- package/dist/cjs/src/utils.js +2 -2
- package/dist/cjs/tdf3/index.js +7 -8
- package/dist/cjs/tdf3/src/models/key-access.js +4 -4
- package/dist/cjs/tdf3/src/tdf.js +4 -4
- package/dist/types/src/crypto/ciphers.d.ts.map +1 -0
- package/dist/types/src/crypto/decrypt.d.ts.map +1 -0
- package/dist/types/src/crypto/digest.d.ts.map +1 -0
- package/dist/types/src/crypto/ecdsaSignature.d.ts.map +1 -0
- package/dist/types/src/crypto/encrypt.d.ts.map +1 -0
- package/dist/types/src/crypto/enums.d.ts.map +1 -0
- package/dist/types/src/crypto/exportCryptoKey.d.ts.map +1 -0
- package/dist/types/src/crypto/generateKeyPair.d.ts.map +1 -0
- package/dist/types/src/crypto/generateRandomNumber.d.ts.map +1 -0
- package/dist/types/src/crypto/index.d.ts.map +1 -0
- package/dist/types/src/crypto/keyAgreement.d.ts.map +1 -0
- package/dist/types/src/crypto/pemPublicToCrypto.d.ts.map +1 -0
- package/dist/types/src/opentdf.d.ts +1 -65
- package/dist/types/src/opentdf.d.ts.map +1 -1
- package/dist/types/tdf3/index.d.ts +4 -3
- package/dist/types/tdf3/index.d.ts.map +1 -1
- package/dist/web/src/crypto/ciphers.js +14 -0
- package/dist/web/src/{nanotdf-crypto → crypto}/decrypt.js +1 -1
- package/dist/web/src/crypto/digest.js +4 -0
- package/dist/web/src/{nanotdf-crypto → crypto}/ecdsaSignature.js +2 -2
- package/dist/web/src/{nanotdf-crypto → crypto}/encrypt.js +1 -1
- package/dist/web/src/{nanotdf-crypto → crypto}/enums.js +1 -1
- package/dist/web/src/crypto/exportCryptoKey.js +17 -0
- package/dist/web/src/crypto/generateKeyPair.js +10 -0
- package/dist/web/src/crypto/generateRandomNumber.js +9 -0
- package/dist/web/src/crypto/index.js +11 -0
- package/dist/web/src/{nanotdf-crypto → crypto}/keyAgreement.js +1 -1
- package/dist/web/src/{nanotdf-crypto → crypto}/pemPublicToCrypto.js +1 -1
- package/dist/web/src/opentdf.js +8 -255
- package/dist/web/src/utils.js +2 -2
- package/dist/web/tdf3/index.js +4 -3
- package/dist/web/tdf3/src/models/key-access.js +4 -4
- package/dist/web/tdf3/src/tdf.js +4 -4
- package/package.json +1 -6
- package/src/{nanotdf-crypto → crypto}/ecdsaSignature.ts +1 -1
- package/src/opentdf.ts +6 -343
- package/src/utils.ts +1 -1
- package/tdf3/index.ts +2 -12
- package/tdf3/src/models/key-access.ts +3 -3
- package/tdf3/src/tdf.ts +3 -3
- package/dist/cjs/src/nanoclients.js +0 -292
- package/dist/cjs/src/nanoindex.js +0 -47
- package/dist/cjs/src/nanotdf/Client.js +0 -315
- package/dist/cjs/src/nanotdf/NanoTDF.js +0 -94
- package/dist/cjs/src/nanotdf/browser-entry.js +0 -19
- package/dist/cjs/src/nanotdf/constants.js +0 -5
- package/dist/cjs/src/nanotdf/decrypt.js +0 -17
- package/dist/cjs/src/nanotdf/encrypt-dataset.js +0 -38
- package/dist/cjs/src/nanotdf/encrypt.js +0 -132
- package/dist/cjs/src/nanotdf/enum/CipherEnum.js +0 -13
- package/dist/cjs/src/nanotdf/enum/CurveNameEnum.js +0 -15
- package/dist/cjs/src/nanotdf/enum/EncodingEnum.js +0 -8
- package/dist/cjs/src/nanotdf/enum/PolicyTypeEnum.js +0 -11
- package/dist/cjs/src/nanotdf/enum/ProtocolEnum.js +0 -10
- package/dist/cjs/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +0 -11
- package/dist/cjs/src/nanotdf/helpers/calculateByCurve.js +0 -28
- package/dist/cjs/src/nanotdf/helpers/getHkdfSalt.js +0 -11
- package/dist/cjs/src/nanotdf/index.js +0 -25
- package/dist/cjs/src/nanotdf/interfaces/PolicyInterface.js +0 -3
- package/dist/cjs/src/nanotdf/models/Ciphers.js +0 -61
- package/dist/cjs/src/nanotdf/models/DefaultParams.js +0 -27
- package/dist/cjs/src/nanotdf/models/EcCurves.js +0 -39
- package/dist/cjs/src/nanotdf/models/Header.js +0 -255
- package/dist/cjs/src/nanotdf/models/Payload.js +0 -158
- package/dist/cjs/src/nanotdf/models/Policy/AbstractPolicy.js +0 -73
- package/dist/cjs/src/nanotdf/models/Policy/EmbeddedPolicy.js +0 -82
- package/dist/cjs/src/nanotdf/models/Policy/PolicyFactory.js +0 -38
- package/dist/cjs/src/nanotdf/models/Policy/RemotePolicy.js +0 -62
- package/dist/cjs/src/nanotdf/models/ResourceLocator.js +0 -211
- package/dist/cjs/src/nanotdf/models/Signature.js +0 -77
- package/dist/cjs/src/nanotdf-crypto/exportCryptoKey.js +0 -20
- package/dist/cjs/src/tdf/NanoTDF/NanoTDF.js +0 -38
- package/dist/cjs/src/types/index.js +0 -3
- package/dist/types/src/nanoclients.d.ts +0 -106
- package/dist/types/src/nanoclients.d.ts.map +0 -1
- package/dist/types/src/nanoindex.d.ts +0 -5
- package/dist/types/src/nanoindex.d.ts.map +0 -1
- package/dist/types/src/nanotdf/Client.d.ts +0 -91
- package/dist/types/src/nanotdf/Client.d.ts.map +0 -1
- package/dist/types/src/nanotdf/NanoTDF.d.ts +0 -24
- package/dist/types/src/nanotdf/NanoTDF.d.ts.map +0 -1
- package/dist/types/src/nanotdf/browser-entry.d.ts +0 -17
- package/dist/types/src/nanotdf/browser-entry.d.ts.map +0 -1
- package/dist/types/src/nanotdf/constants.d.ts +0 -2
- package/dist/types/src/nanotdf/constants.d.ts.map +0 -1
- package/dist/types/src/nanotdf/decrypt.d.ts +0 -9
- package/dist/types/src/nanotdf/decrypt.d.ts.map +0 -1
- package/dist/types/src/nanotdf/encrypt-dataset.d.ts +0 -11
- package/dist/types/src/nanotdf/encrypt-dataset.d.ts.map +0 -1
- package/dist/types/src/nanotdf/encrypt.d.ts +0 -13
- package/dist/types/src/nanotdf/encrypt.d.ts.map +0 -1
- package/dist/types/src/nanotdf/enum/CipherEnum.d.ts +0 -10
- package/dist/types/src/nanotdf/enum/CipherEnum.d.ts.map +0 -1
- package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts +0 -12
- package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts.map +0 -1
- package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts +0 -5
- package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts.map +0 -1
- package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts +0 -8
- package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts.map +0 -1
- package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts +0 -7
- package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts.map +0 -1
- package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts +0 -8
- package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts.map +0 -1
- package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts +0 -20
- package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts.map +0 -1
- package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts +0 -8
- package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts.map +0 -1
- package/dist/types/src/nanotdf/index.d.ts +0 -9
- package/dist/types/src/nanotdf/index.d.ts.map +0 -1
- package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts +0 -17
- package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts.map +0 -1
- package/dist/types/src/nanotdf/models/Ciphers.d.ts +0 -14
- package/dist/types/src/nanotdf/models/Ciphers.d.ts.map +0 -1
- package/dist/types/src/nanotdf/models/DefaultParams.d.ts +0 -21
- package/dist/types/src/nanotdf/models/DefaultParams.d.ts.map +0 -1
- package/dist/types/src/nanotdf/models/EcCurves.d.ts +0 -15
- package/dist/types/src/nanotdf/models/EcCurves.d.ts.map +0 -1
- package/dist/types/src/nanotdf/models/Header.d.ts +0 -73
- package/dist/types/src/nanotdf/models/Header.d.ts.map +0 -1
- package/dist/types/src/nanotdf/models/Payload.d.ts +0 -47
- package/dist/types/src/nanotdf/models/Payload.d.ts.map +0 -1
- package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts +0 -52
- package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts.map +0 -1
- package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts +0 -35
- package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts.map +0 -1
- package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts +0 -11
- package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts.map +0 -1
- package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts +0 -31
- package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts.map +0 -1
- package/dist/types/src/nanotdf/models/ResourceLocator.d.ts +0 -65
- package/dist/types/src/nanotdf/models/ResourceLocator.d.ts.map +0 -1
- package/dist/types/src/nanotdf/models/Signature.d.ts +0 -33
- package/dist/types/src/nanotdf/models/Signature.d.ts.map +0 -1
- package/dist/types/src/nanotdf-crypto/ciphers.d.ts.map +0 -1
- package/dist/types/src/nanotdf-crypto/decrypt.d.ts.map +0 -1
- package/dist/types/src/nanotdf-crypto/digest.d.ts.map +0 -1
- package/dist/types/src/nanotdf-crypto/ecdsaSignature.d.ts.map +0 -1
- package/dist/types/src/nanotdf-crypto/encrypt.d.ts.map +0 -1
- package/dist/types/src/nanotdf-crypto/enums.d.ts.map +0 -1
- package/dist/types/src/nanotdf-crypto/exportCryptoKey.d.ts.map +0 -1
- package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts.map +0 -1
- package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts.map +0 -1
- package/dist/types/src/nanotdf-crypto/index.d.ts.map +0 -1
- package/dist/types/src/nanotdf-crypto/keyAgreement.d.ts.map +0 -1
- package/dist/types/src/nanotdf-crypto/pemPublicToCrypto.d.ts.map +0 -1
- package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts +0 -99
- package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts.map +0 -1
- package/dist/types/src/types/index.d.ts +0 -45
- package/dist/types/src/types/index.d.ts.map +0 -1
- package/dist/web/src/nanoclients.js +0 -287
- package/dist/web/src/nanoindex.js +0 -5
- package/dist/web/src/nanotdf/Client.js +0 -310
- package/dist/web/src/nanotdf/NanoTDF.js +0 -89
- package/dist/web/src/nanotdf/browser-entry.js +0 -14
- package/dist/web/src/nanotdf/constants.js +0 -2
- package/dist/web/src/nanotdf/decrypt.js +0 -14
- package/dist/web/src/nanotdf/encrypt-dataset.js +0 -32
- package/dist/web/src/nanotdf/encrypt.js +0 -126
- package/dist/web/src/nanotdf/enum/CipherEnum.js +0 -11
- package/dist/web/src/nanotdf/enum/CurveNameEnum.js +0 -13
- package/dist/web/src/nanotdf/enum/EncodingEnum.js +0 -6
- package/dist/web/src/nanotdf/enum/PolicyTypeEnum.js +0 -9
- package/dist/web/src/nanotdf/enum/ProtocolEnum.js +0 -8
- package/dist/web/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +0 -9
- package/dist/web/src/nanotdf/helpers/calculateByCurve.js +0 -24
- package/dist/web/src/nanotdf/helpers/getHkdfSalt.js +0 -8
- package/dist/web/src/nanotdf/index.js +0 -11
- package/dist/web/src/nanotdf/interfaces/PolicyInterface.js +0 -2
- package/dist/web/src/nanotdf/models/Ciphers.js +0 -54
- package/dist/web/src/nanotdf/models/DefaultParams.js +0 -22
- package/dist/web/src/nanotdf/models/EcCurves.js +0 -32
- package/dist/web/src/nanotdf/models/Header.js +0 -250
- package/dist/web/src/nanotdf/models/Payload.js +0 -156
- package/dist/web/src/nanotdf/models/Policy/AbstractPolicy.js +0 -71
- package/dist/web/src/nanotdf/models/Policy/EmbeddedPolicy.js +0 -77
- package/dist/web/src/nanotdf/models/Policy/PolicyFactory.js +0 -33
- package/dist/web/src/nanotdf/models/Policy/RemotePolicy.js +0 -57
- package/dist/web/src/nanotdf/models/ResourceLocator.js +0 -206
- package/dist/web/src/nanotdf/models/Signature.js +0 -74
- package/dist/web/src/nanotdf-crypto/ciphers.js +0 -14
- package/dist/web/src/nanotdf-crypto/digest.js +0 -4
- package/dist/web/src/nanotdf-crypto/exportCryptoKey.js +0 -17
- package/dist/web/src/nanotdf-crypto/generateKeyPair.js +0 -10
- package/dist/web/src/nanotdf-crypto/generateRandomNumber.js +0 -9
- package/dist/web/src/nanotdf-crypto/index.js +0 -11
- package/dist/web/src/tdf/NanoTDF/NanoTDF.js +0 -35
- package/dist/web/src/types/index.js +0 -2
- package/src/nanoclients.ts +0 -406
- package/src/nanoindex.ts +0 -4
- package/src/nanotdf/Client.ts +0 -425
- package/src/nanotdf/NanoTDF.ts +0 -120
- package/src/nanotdf/browser-entry.ts +0 -20
- package/src/nanotdf/constants.ts +0 -1
- package/src/nanotdf/decrypt.ts +0 -19
- package/src/nanotdf/encrypt-dataset.ts +0 -51
- package/src/nanotdf/encrypt.ts +0 -196
- package/src/nanotdf/enum/CipherEnum.ts +0 -10
- package/src/nanotdf/enum/CurveNameEnum.ts +0 -12
- package/src/nanotdf/enum/EncodingEnum.ts +0 -5
- package/src/nanotdf/enum/PolicyTypeEnum.ts +0 -8
- package/src/nanotdf/enum/ProtocolEnum.ts +0 -7
- package/src/nanotdf/enum/ResourceLocatorIdentifierEnum.ts +0 -8
- package/src/nanotdf/helpers/calculateByCurve.ts +0 -26
- package/src/nanotdf/helpers/getHkdfSalt.ts +0 -13
- package/src/nanotdf/index.ts +0 -10
- package/src/nanotdf/interfaces/PolicyInterface.ts +0 -27
- package/src/nanotdf/models/Ciphers.ts +0 -67
- package/src/nanotdf/models/DefaultParams.ts +0 -24
- package/src/nanotdf/models/EcCurves.ts +0 -40
- package/src/nanotdf/models/Header.ts +0 -322
- package/src/nanotdf/models/Payload.ts +0 -196
- package/src/nanotdf/models/Policy/AbstractPolicy.ts +0 -90
- package/src/nanotdf/models/Policy/EmbeddedPolicy.ts +0 -101
- package/src/nanotdf/models/Policy/PolicyFactory.ts +0 -48
- package/src/nanotdf/models/Policy/RemotePolicy.ts +0 -74
- package/src/nanotdf/models/ResourceLocator.ts +0 -212
- package/src/nanotdf/models/Signature.ts +0 -85
- package/src/tdf/NanoTDF/NanoTDF.ts +0 -120
- package/src/types/index.ts +0 -55
- /package/dist/types/src/{nanotdf-crypto → crypto}/ciphers.d.ts +0 -0
- /package/dist/types/src/{nanotdf-crypto → crypto}/decrypt.d.ts +0 -0
- /package/dist/types/src/{nanotdf-crypto → crypto}/digest.d.ts +0 -0
- /package/dist/types/src/{nanotdf-crypto → crypto}/ecdsaSignature.d.ts +0 -0
- /package/dist/types/src/{nanotdf-crypto → crypto}/encrypt.d.ts +0 -0
- /package/dist/types/src/{nanotdf-crypto → crypto}/enums.d.ts +0 -0
- /package/dist/types/src/{nanotdf-crypto → crypto}/exportCryptoKey.d.ts +0 -0
- /package/dist/types/src/{nanotdf-crypto → crypto}/generateKeyPair.d.ts +0 -0
- /package/dist/types/src/{nanotdf-crypto → crypto}/generateRandomNumber.d.ts +0 -0
- /package/dist/types/src/{nanotdf-crypto → crypto}/index.d.ts +0 -0
- /package/dist/types/src/{nanotdf-crypto → crypto}/keyAgreement.d.ts +0 -0
- /package/dist/types/src/{nanotdf-crypto → crypto}/pemPublicToCrypto.d.ts +0 -0
- /package/src/{nanotdf-crypto → crypto}/ciphers.ts +0 -0
- /package/src/{nanotdf-crypto → crypto}/decrypt.ts +0 -0
- /package/src/{nanotdf-crypto → crypto}/digest.ts +0 -0
- /package/src/{nanotdf-crypto → crypto}/encrypt.ts +0 -0
- /package/src/{nanotdf-crypto → crypto}/enums.ts +0 -0
- /package/src/{nanotdf-crypto → crypto}/exportCryptoKey.ts +0 -0
- /package/src/{nanotdf-crypto → crypto}/generateKeyPair.ts +0 -0
- /package/src/{nanotdf-crypto → crypto}/generateRandomNumber.ts +0 -0
- /package/src/{nanotdf-crypto → crypto}/index.ts +0 -0
- /package/src/{nanotdf-crypto → crypto}/keyAgreement.ts +0 -0
- /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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL0hlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLFNBQVM7QUFDVCw2Q0FBNEM7QUFDNUMsOEVBQW1EO0FBQ25ELGlGQUFzRDtBQU10RCxVQUFVO0FBQ1Ysd0VBQW1FO0FBQ25FLDBFQUErQztBQUMvQywrQ0FBdUU7QUFDdkUsNkNBQXdDO0FBRXhDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQXFCLE1BQU07SUE0Q3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBZ0I7UUFDM0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWY7Ozs7V0FJRztRQUNILG1CQUFtQjtRQUNuQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3RDLE1BQU0sQ0FBQyw2QkFBNkIsRUFDcEMsTUFBTSxDQUFDLDZCQUE2QixDQUNyQyxDQUFDO1FBQ0YsTUFBTSxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQztRQUUvQzs7Ozs7OztXQU9HO1FBQ0gsTUFBTSxHQUFHLEdBQUcsNEJBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDO1FBRXJCOzs7Ozs7Ozs7Ozs7Ozs7V0FlRztRQUNILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzFGLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXO1FBQ25FLE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsZUFBZTtRQUNyRSxNQUFNLElBQUksTUFBTSxDQUFDLHlCQUF5QixDQUFDO1FBRTNDOzs7Ozs7Ozs7Ozs7OztXQWNHO1FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDNUYsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVc7UUFDbEUsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQjtRQUMvRSxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxlQUFlO1FBQ3BFLE1BQU0sSUFBSSxNQUFNLENBQUMsaUNBQWlDLENBQUM7UUFFbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBaUJHO1FBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsMEJBQWEsQ0FBQyxLQUFLLENBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQ3JCLGVBQWUsRUFDZixrQkFBa0IsQ0FDbkIsQ0FBQztRQUNGLE1BQU0sSUFBSSxVQUFVLENBQUM7UUFFckI7Ozs7OztXQU1HO1FBQ0gsaURBQWlEO1FBQ2pELE1BQU0sd0JBQXdCLEdBQUcsSUFBQSx1Q0FBaUIsRUFBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sSUFBSSx3QkFBd0IsQ0FBQztRQUVuQyxrRUFBa0U7UUFDbEUsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLEtBQUssd0JBQXdCLEVBQUUsQ0FBQztZQUMvRCxNQUFNLElBQUksNEJBQWdCLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQ3ZCLGtCQUFrQixFQUNsQixHQUFHLEVBQ0gsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixNQUFNLEVBQ04sa0JBQWtCLENBQ25CLENBQUM7UUFFRixPQUFPO1lBQ0wsTUFBTTtZQUNOLE1BQU07U0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVELHNCQUFzQjtJQUN0Qix1REFBdUQ7SUFFdkQsWUFDRSxrQkFBOEIsRUFDOUIsR0FBb0IsRUFDcEIsZUFBd0IsRUFDeEIsa0JBQWlDLEVBQ2pDLFlBQXFCLEVBQ3JCLGtCQUFpQyxFQUNqQyxlQUEyQixFQUMzQixNQUF1QixFQUN2QixrQkFBOEI7UUFuS2hDLHlCQUF5QjtRQUNsQix1QkFBa0IsR0FBZSwwQkFBYSxDQUFDLGtCQUFrQixDQUFDO1FBS3pFLHFCQUFxQjtRQUNkLG9CQUFlLEdBQVksMEJBQWEsQ0FBQyxZQUFZLENBQUM7UUFDdEQsdUJBQWtCLEdBQWtCLDBCQUFhLENBQUMsa0JBQWtCLENBQUM7UUFFNUUsNkJBQTZCO1FBQ3RCLGlCQUFZLEdBQVksMEJBQWEsQ0FBQyxTQUFTLENBQUM7UUFDaEQsdUJBQWtCLEdBQWtCLDBCQUFhLENBQUMsa0JBQWtCLENBQUM7UUFDckUsb0JBQWUsR0FBZSwwQkFBYSxDQUFDLGVBQWUsQ0FBQztRQXdKakUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3QyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFFN0MsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBQSx5QkFBWSxFQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsTUFBa0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksNEJBQWdCLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBRUQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsaUNBQWlDO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDO1FBRXpDLDZCQUE2QjtRQUM3QixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDO1FBRXZDLDJCQUEyQjtRQUMzQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLGNBQWMsR0FBRyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDckUsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUM7UUFDekMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6QyxNQUFNLElBQUksb0JBQW9CLENBQUMsTUFBTSxDQUFDO1FBRXRDLG1DQUFtQztRQUNuQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sc0JBQXNCLEdBQzFCLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDNUUsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxzQkFBc0IsQ0FBQztRQUN6RCxNQUFNLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sSUFBSSw0QkFBNEIsQ0FBQyxNQUFNLENBQUM7UUFFOUMsbUJBQW1CO1FBQ25CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakMsTUFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFFOUIsaUNBQWlDO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsT0FBTztRQUNMLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUM5QixxQ0FBcUM7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNO1lBQ2YsK0JBQStCO1lBQy9CLENBQUM7WUFDRCx1Q0FBdUM7WUFDdkMsQ0FBQztZQUNELHVCQUF1QjtZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUN2QixxQ0FBcUM7WUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVE7UUFDTixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsSUFBSSxDQUFDO1lBQ0gsT0FBTyxHQUFHLElBQUEsaUJBQU0sRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLDhCQUFrQixDQUFDLG9DQUFvQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNoRixDQUFDO0lBQ0gsQ0FBQzs7QUFoU0QseUJBQXlCO0FBQ1Qsb0NBQTZCLEdBQUcsQ0FBQyxBQUFKLENBQUs7QUFDbEMsb0NBQTZCLEdBQUcsQ0FBQyxBQUFKLENBQUs7QUFDbEMsMEJBQW1CLEdBQUcsQ0FBQyxBQUFKLENBQUs7QUFDeEIsMEJBQW1CLEdBQUcsRUFBRSxBQUFMLENBQU07QUFFekMscUJBQXFCO0FBQ0wsZ0NBQXlCLEdBQUcsQ0FBQyxBQUFKLENBQUs7QUFDOUIsZ0NBQXlCLEdBQUcsQ0FBQyxBQUFKLENBQUs7QUFDOUIsdUNBQWdDLEdBQUcsQ0FBQyxDQUFDLEFBQUwsQ0FBTTtBQUV0RCw2QkFBNkI7QUFDYix3Q0FBaUMsR0FBRyxDQUFDLEFBQUosQ0FBSztBQUN0Qyw0QkFBcUIsR0FBRyxDQUFDLEFBQUosQ0FBSztBQUMxQiw0QkFBcUIsR0FBRyxDQUFDLEFBQUosQ0FBSztBQUMxQix1Q0FBZ0MsR0FBRyxDQUFDLEFBQUosQ0FBSztBQUNyQyx1Q0FBZ0MsR0FBRyxDQUFDLEFBQUosQ0FBSztBQUNyQywrQkFBd0IsR0FBRyxDQUFDLEFBQUosQ0FBSztBQUM3QiwrQkFBd0IsR0FBRyxDQUFDLEFBQUosQ0FBSztrQkFuQjFCLE1BQU0ifQ==
|
|
@@ -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=
|