@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.
- 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,62 +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 ResourceLocator_js_1 = __importDefault(require("../ResourceLocator.js"));
|
|
8
|
-
const PolicyTypeEnum_js_1 = __importDefault(require("../../enum/PolicyTypeEnum.js"));
|
|
9
|
-
/**
|
|
10
|
-
* Set remote policy body
|
|
11
|
-
*
|
|
12
|
-
* If the policy type is set to use a Remote Policy, then the Resource Locator object described in Section 3.4.1 is
|
|
13
|
-
* used to describe the remote policy.
|
|
14
|
-
*/
|
|
15
|
-
class RemotePolicy extends AbstractPolicy_js_1.default {
|
|
16
|
-
static parse(buff, useEcdsaBinding) {
|
|
17
|
-
let offset = 0;
|
|
18
|
-
const resource = ResourceLocator_js_1.default.parse(buff);
|
|
19
|
-
offset += resource.offset;
|
|
20
|
-
const { binding, newOffset: bindingOffset } = this.parseBinding(buff, useEcdsaBinding, offset);
|
|
21
|
-
offset = bindingOffset;
|
|
22
|
-
return {
|
|
23
|
-
policy: new RemotePolicy(PolicyTypeEnum_js_1.default.Remote, binding, resource),
|
|
24
|
-
offset,
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
constructor(type, binding, resource) {
|
|
28
|
-
super(type, binding);
|
|
29
|
-
this.type = PolicyTypeEnum_js_1.default.Remote;
|
|
30
|
-
this.type = PolicyTypeEnum_js_1.default.Remote;
|
|
31
|
-
this.remotePolicy = resource;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Length of policy
|
|
35
|
-
*
|
|
36
|
-
* @returns { number } length
|
|
37
|
-
*/
|
|
38
|
-
getLength() {
|
|
39
|
-
return (
|
|
40
|
-
// Type length
|
|
41
|
-
1 +
|
|
42
|
-
// Resource locator length
|
|
43
|
-
this.remotePolicy.length +
|
|
44
|
-
// Binding length
|
|
45
|
-
this.binding.length);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Return the content of the policy
|
|
49
|
-
*/
|
|
50
|
-
toBuffer() {
|
|
51
|
-
const target = new Uint8Array(this.getLength());
|
|
52
|
-
target.set([PolicyTypeEnum_js_1.default.Remote], 0);
|
|
53
|
-
// Write the remote policy location
|
|
54
|
-
const resourceLocatorAsBuf = this.remotePolicy.toBuffer();
|
|
55
|
-
target.set(resourceLocatorAsBuf, 1);
|
|
56
|
-
// Write the binding.
|
|
57
|
-
target.set(this.binding, resourceLocatorAsBuf.length + 1);
|
|
58
|
-
return target;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
exports.default = RemotePolicy;
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVtb3RlUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL1BvbGljeS9SZW1vdGVQb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0RUFBaUQ7QUFDakQsK0VBQW9EO0FBRXBELHFGQUEwRDtBQUUxRDs7Ozs7R0FLRztBQUNILE1BQU0sWUFBYSxTQUFRLDJCQUFjO0lBSXZDLE1BQU0sQ0FBVSxLQUFLLENBQ25CLElBQWdCLEVBQ2hCLGVBQXdCO1FBRXhCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE1BQU0sUUFBUSxHQUFHLDRCQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBRTFCLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRixNQUFNLEdBQUcsYUFBYSxDQUFDO1FBRXZCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSSxZQUFZLENBQUMsMkJBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQztZQUNsRSxNQUFNO1NBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLElBQW9CLEVBQUUsT0FBbUIsRUFBRSxRQUF5QjtRQUM5RSxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBckJMLFNBQUksR0FBbUIsMkJBQWMsQ0FBQyxNQUFNLENBQUM7UUFzQjdELElBQUksQ0FBQyxJQUFJLEdBQUcsMkJBQWMsQ0FBQyxNQUFNLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDTSxTQUFTO1FBQ2hCLE9BQU87UUFDTCxjQUFjO1FBQ2QsQ0FBQztZQUNELDBCQUEwQjtZQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU07WUFDeEIsaUJBQWlCO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ00sUUFBUTtRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRWhELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQywyQkFBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZDLG1DQUFtQztRQUNuQyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVwQyxxQkFBcUI7UUFDckIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUxRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0Y7QUFFRCxrQkFBZSxZQUFZLENBQUMifQ==
|
|
@@ -1,211 +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 errors_js_1 = require("../../errors.js");
|
|
7
|
-
const ProtocolEnum_js_1 = __importDefault(require("../enum/ProtocolEnum.js"));
|
|
8
|
-
const ResourceLocatorIdentifierEnum_js_1 = __importDefault(require("../enum/ResourceLocatorIdentifierEnum.js"));
|
|
9
|
-
/**
|
|
10
|
-
*
|
|
11
|
-
* The Resource Locator is a way for the nanotdf to represent references to external resources in as succinct a format
|
|
12
|
-
* as possible.
|
|
13
|
-
*
|
|
14
|
-
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
15
|
-
* |---------------|--------------------|--------------------|
|
|
16
|
-
* | Protocol Enum | 1 | 1 |
|
|
17
|
-
* | Body Length | 1 | 1 |
|
|
18
|
-
* | Body | 1 | 255 |
|
|
19
|
-
* | Identifier | 0 | n |
|
|
20
|
-
*
|
|
21
|
-
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3312-kas
|
|
22
|
-
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#341-resource-locator
|
|
23
|
-
*/
|
|
24
|
-
class ResourceLocator {
|
|
25
|
-
constructor(protocol, lengthOfBody, body, offset, id, idType = ResourceLocatorIdentifierEnum_js_1.default.None) {
|
|
26
|
-
this.protocol = protocol;
|
|
27
|
-
this.lengthOfBody = lengthOfBody;
|
|
28
|
-
this.body = body;
|
|
29
|
-
this.offset = offset;
|
|
30
|
-
this.id = id;
|
|
31
|
-
this.idType = idType;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Construct a new URL or URL + identifier pair, for use with NanoTDF envelopes.
|
|
35
|
-
* @param url The URL to encrypt; `http` and `https` schemes are supported
|
|
36
|
-
* @param identifier An optional identifier.
|
|
37
|
-
* For KAS URLs, this is usually a public key identifier (kid). Limit 32 characters
|
|
38
|
-
* @returns a value representing the URL and identifier, if present.
|
|
39
|
-
* This method throws an Error if the URL is invalid or of the wrong schema,
|
|
40
|
-
* or if the identifier is an unsupported value.
|
|
41
|
-
*/
|
|
42
|
-
static fromURL(url, identifier) {
|
|
43
|
-
const [protocolStr, body] = url.split('://');
|
|
44
|
-
let protocol;
|
|
45
|
-
// Validate and set protocol identifier byte
|
|
46
|
-
switch (protocolStr.toLowerCase()) {
|
|
47
|
-
case 'http':
|
|
48
|
-
protocol = ProtocolEnum_js_1.default.Http;
|
|
49
|
-
break;
|
|
50
|
-
case 'https':
|
|
51
|
-
protocol = ProtocolEnum_js_1.default.Https;
|
|
52
|
-
break;
|
|
53
|
-
default:
|
|
54
|
-
throw new errors_js_1.ConfigurationError(`resource locator protocol [${protocolStr}] unsupported`);
|
|
55
|
-
}
|
|
56
|
-
// Set identifier padded length and protocol identifier byte
|
|
57
|
-
const identifierType = (() => {
|
|
58
|
-
if (!identifier) {
|
|
59
|
-
return ResourceLocatorIdentifierEnum_js_1.default.None;
|
|
60
|
-
}
|
|
61
|
-
const identifierLength = new TextEncoder().encode(identifier).length;
|
|
62
|
-
if (identifierLength <= 2) {
|
|
63
|
-
return ResourceLocatorIdentifierEnum_js_1.default.TwoBytes;
|
|
64
|
-
}
|
|
65
|
-
else if (identifierLength <= 8) {
|
|
66
|
-
return ResourceLocatorIdentifierEnum_js_1.default.EightBytes;
|
|
67
|
-
}
|
|
68
|
-
else if (identifierLength <= 32) {
|
|
69
|
-
return ResourceLocatorIdentifierEnum_js_1.default.ThirtyTwoBytes;
|
|
70
|
-
}
|
|
71
|
-
throw new errors_js_1.ConfigurationError(`unsupported identifier length: ${identifier.length}`);
|
|
72
|
-
})();
|
|
73
|
-
// Create buffer to hold protocol, body length, body, and identifier
|
|
74
|
-
const lengthOfBody = new TextEncoder().encode(body).length;
|
|
75
|
-
if (lengthOfBody == 0) {
|
|
76
|
-
throw new errors_js_1.ConfigurationError('url body empty');
|
|
77
|
-
}
|
|
78
|
-
const identifierLength = identifierType.valueOf();
|
|
79
|
-
const offset = ResourceLocator.BODY_OFFSET + lengthOfBody + identifierLength;
|
|
80
|
-
return new ResourceLocator(protocol, lengthOfBody, body, offset, identifier, identifierType);
|
|
81
|
-
}
|
|
82
|
-
static parse(buff) {
|
|
83
|
-
// Protocol
|
|
84
|
-
const protocolAndIdentifierType = buff[ResourceLocator.PROTOCOL_OFFSET];
|
|
85
|
-
// Length of body
|
|
86
|
-
const lengthOfBody = buff[ResourceLocator.LENGTH_OFFSET];
|
|
87
|
-
if (lengthOfBody == 0) {
|
|
88
|
-
throw new errors_js_1.InvalidFileError('url body empty');
|
|
89
|
-
}
|
|
90
|
-
// Body as utf8 string
|
|
91
|
-
const decoder = new TextDecoder();
|
|
92
|
-
let offset = ResourceLocator.BODY_OFFSET + lengthOfBody;
|
|
93
|
-
if (offset > buff.length) {
|
|
94
|
-
throw new errors_js_1.InvalidFileError('url parser: out of bounds error');
|
|
95
|
-
}
|
|
96
|
-
const body = decoder.decode(buff.subarray(ResourceLocator.BODY_OFFSET, offset));
|
|
97
|
-
const protocol = protocolAndIdentifierType & 0xf;
|
|
98
|
-
switch (protocol) {
|
|
99
|
-
case ProtocolEnum_js_1.default.Http:
|
|
100
|
-
case ProtocolEnum_js_1.default.Https:
|
|
101
|
-
break;
|
|
102
|
-
default:
|
|
103
|
-
throw new errors_js_1.InvalidFileError(`url parser: unsupported protocol type [${protocol}]`);
|
|
104
|
-
}
|
|
105
|
-
// identifier
|
|
106
|
-
const identifierTypeNibble = protocolAndIdentifierType & 0xf0;
|
|
107
|
-
let identifierType = ResourceLocatorIdentifierEnum_js_1.default.None;
|
|
108
|
-
if (identifierTypeNibble === ResourceLocator.IDENTIFIER_2_BYTE) {
|
|
109
|
-
identifierType = ResourceLocatorIdentifierEnum_js_1.default.TwoBytes;
|
|
110
|
-
}
|
|
111
|
-
else if (identifierTypeNibble === ResourceLocator.IDENTIFIER_8_BYTE) {
|
|
112
|
-
identifierType = ResourceLocatorIdentifierEnum_js_1.default.EightBytes;
|
|
113
|
-
}
|
|
114
|
-
else if (identifierTypeNibble === ResourceLocator.IDENTIFIER_32_BYTE) {
|
|
115
|
-
identifierType = ResourceLocatorIdentifierEnum_js_1.default.ThirtyTwoBytes;
|
|
116
|
-
}
|
|
117
|
-
else if (identifierTypeNibble !== ResourceLocator.IDENTIFIER_0_BYTE) {
|
|
118
|
-
throw new errors_js_1.InvalidFileError(`url parser: unsupported fragment type [${identifierTypeNibble}]`);
|
|
119
|
-
}
|
|
120
|
-
let identifier = undefined;
|
|
121
|
-
switch (identifierType) {
|
|
122
|
-
case ResourceLocatorIdentifierEnum_js_1.default.None:
|
|
123
|
-
// noop
|
|
124
|
-
break;
|
|
125
|
-
case ResourceLocatorIdentifierEnum_js_1.default.TwoBytes:
|
|
126
|
-
case ResourceLocatorIdentifierEnum_js_1.default.EightBytes:
|
|
127
|
-
case ResourceLocatorIdentifierEnum_js_1.default.ThirtyTwoBytes: {
|
|
128
|
-
const kidStart = offset;
|
|
129
|
-
offset = kidStart + identifierType.valueOf();
|
|
130
|
-
if (offset > buff.length) {
|
|
131
|
-
throw new errors_js_1.InvalidFileError('url parser: out of bounds error');
|
|
132
|
-
}
|
|
133
|
-
const kidSubarray = buff.subarray(kidStart, offset);
|
|
134
|
-
// Remove padding (assuming the padding is null bytes, 0x00)
|
|
135
|
-
const zeroIndex = kidSubarray.indexOf(0);
|
|
136
|
-
if (zeroIndex >= 0) {
|
|
137
|
-
const trimmedSubarray = kidSubarray.subarray(0, zeroIndex);
|
|
138
|
-
identifier = decoder.decode(trimmedSubarray);
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
identifier = decoder.decode(kidSubarray);
|
|
142
|
-
}
|
|
143
|
-
break;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return new ResourceLocator(protocol, lengthOfBody, body, offset, identifier, identifierType);
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Length
|
|
150
|
-
*
|
|
151
|
-
* @returns { number } Length of resource locator
|
|
152
|
-
*/
|
|
153
|
-
get length() {
|
|
154
|
-
return this.offset;
|
|
155
|
-
}
|
|
156
|
-
get url() {
|
|
157
|
-
switch (this.protocol) {
|
|
158
|
-
case ProtocolEnum_js_1.default.Http:
|
|
159
|
-
return 'http://' + this.body;
|
|
160
|
-
case ProtocolEnum_js_1.default.Https:
|
|
161
|
-
return 'https://' + this.body;
|
|
162
|
-
default:
|
|
163
|
-
throw new errors_js_1.ConfigurationError(`resource locator protocol unsupported [${this.protocol}]`);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Return the contents of the Resource Locator in buffer
|
|
168
|
-
*/
|
|
169
|
-
toBuffer() {
|
|
170
|
-
const target = new Uint8Array(ResourceLocator.BODY_OFFSET + this.body.length + this.idType);
|
|
171
|
-
let idTypeNibble = 0;
|
|
172
|
-
switch (this.idType) {
|
|
173
|
-
case ResourceLocatorIdentifierEnum_js_1.default.TwoBytes:
|
|
174
|
-
idTypeNibble = ResourceLocator.IDENTIFIER_2_BYTE;
|
|
175
|
-
break;
|
|
176
|
-
case ResourceLocatorIdentifierEnum_js_1.default.EightBytes:
|
|
177
|
-
idTypeNibble = ResourceLocator.IDENTIFIER_8_BYTE;
|
|
178
|
-
break;
|
|
179
|
-
case ResourceLocatorIdentifierEnum_js_1.default.ThirtyTwoBytes:
|
|
180
|
-
idTypeNibble = ResourceLocator.IDENTIFIER_32_BYTE;
|
|
181
|
-
break;
|
|
182
|
-
}
|
|
183
|
-
target.set([this.protocol | idTypeNibble], ResourceLocator.PROTOCOL_OFFSET);
|
|
184
|
-
target.set([this.lengthOfBody], ResourceLocator.LENGTH_OFFSET);
|
|
185
|
-
target.set(new TextEncoder().encode(this.body), ResourceLocator.BODY_OFFSET);
|
|
186
|
-
if (this.id) {
|
|
187
|
-
target.set(new TextEncoder().encode(this.id), ResourceLocator.BODY_OFFSET + this.body.length);
|
|
188
|
-
}
|
|
189
|
-
return target;
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Get Identifier
|
|
193
|
-
*
|
|
194
|
-
* Returns the identifier of the ResourceLocator or an empty string if no identifier is present.
|
|
195
|
-
* @returns { string } Identifier of the resource locator.
|
|
196
|
-
*/
|
|
197
|
-
get identifier() {
|
|
198
|
-
return this.id ?? '';
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
ResourceLocator.PROTOCOL_OFFSET = 0;
|
|
202
|
-
ResourceLocator.PROTOCOL_LENGTH = 1;
|
|
203
|
-
ResourceLocator.LENGTH_OFFSET = 1;
|
|
204
|
-
ResourceLocator.LENGTH_LENGTH = 1;
|
|
205
|
-
ResourceLocator.BODY_OFFSET = 2;
|
|
206
|
-
ResourceLocator.IDENTIFIER_0_BYTE = 0 << 4; // 0
|
|
207
|
-
ResourceLocator.IDENTIFIER_2_BYTE = 1 << 4; // 16
|
|
208
|
-
ResourceLocator.IDENTIFIER_8_BYTE = 2 << 4; // 32
|
|
209
|
-
ResourceLocator.IDENTIFIER_32_BYTE = 3 << 4; // 48
|
|
210
|
-
exports.default = ResourceLocator;
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzb3VyY2VMb2NhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL1Jlc291cmNlTG9jYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtDQUF1RTtBQUN2RSw4RUFBbUQ7QUFDbkQsZ0hBQXFGO0FBRXJGOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBcUIsZUFBZTtJQVdsQyxZQUNXLFFBQXNCLEVBQ3RCLFlBQW9CLEVBQ3BCLElBQVksRUFDWixNQUFjLEVBQ2QsRUFBVyxFQUNYLFNBQXdDLDBDQUE2QixDQUFDLElBQUk7UUFMMUUsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLE9BQUUsR0FBRixFQUFFLENBQVM7UUFDWCxXQUFNLEdBQU4sTUFBTSxDQUFvRTtJQUNsRixDQUFDO0lBRUo7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQVcsRUFBRSxVQUFtQjtRQUM3QyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsSUFBSSxRQUFzQixDQUFDO1FBRTNCLDRDQUE0QztRQUM1QyxRQUFRLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLEtBQUssTUFBTTtnQkFDVCxRQUFRLEdBQUcseUJBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQzdCLE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsUUFBUSxHQUFHLHlCQUFZLENBQUMsS0FBSyxDQUFDO2dCQUM5QixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLDhCQUFrQixDQUFDLDhCQUE4QixXQUFXLGVBQWUsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFFRCw0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
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const calculateByCurve_js_1 = require("../helpers/calculateByCurve.js");
|
|
4
|
-
const errors_js_1 = require("../../errors.js");
|
|
5
|
-
/**
|
|
6
|
-
* NanoTDF Signature
|
|
7
|
-
*
|
|
8
|
-
* The signature section is an optional section that contains an ECDSA signature used to cryptographically bind the Header and Payload to a creator of the nanotdf. The key used for signing is the private key of the creator of the nanotdf. The ECC Params used for the signature are described in Section 3.3.1.4.2. The private key used for this signature is distinctly different than the ephemeral private key. This is a persistent key belonging to an individual, entity, or device that creates nanotdfs. The signature is used to authenticate the entire nanotdf and contains both the public key related to the creators private key and the resulting signature. The structure of this section:
|
|
9
|
-
*
|
|
10
|
-
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
11
|
-
* |------------|--------------------|--------------------|
|
|
12
|
-
* | Public Key | 33 | 67 |
|
|
13
|
-
* | Signature | 64 | 132 |
|
|
14
|
-
*
|
|
15
|
-
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#333-signature
|
|
16
|
-
*/
|
|
17
|
-
class Signature {
|
|
18
|
-
static parse(header, buff) {
|
|
19
|
-
let offset = 0;
|
|
20
|
-
/**
|
|
21
|
-
* Parse the public key
|
|
22
|
-
*
|
|
23
|
-
* This section contains the compressed public key of the private key used to sign the message.
|
|
24
|
-
*/
|
|
25
|
-
// TODO: Resolve where offset is missing 1 byte
|
|
26
|
-
const publicKeyLength = (0, calculateByCurve_js_1.lengthOfPublicKey)(header.signatureCurveName) + 1;
|
|
27
|
-
const publicKey = buff.subarray(offset, offset + publicKeyLength);
|
|
28
|
-
offset += publicKeyLength;
|
|
29
|
-
/**
|
|
30
|
-
* Parse signature
|
|
31
|
-
*
|
|
32
|
-
* This section contains the encoded `r` and `s` values of the ECDSA signature.
|
|
33
|
-
*
|
|
34
|
-
* ECDSA signatures are big endian encodings of the `r` and `s` values of an ECDSA signature.The length of `r` and `s`
|
|
35
|
-
* values is determined by the ECC Mode used for the signature. The encoding for the signature is the big endian
|
|
36
|
-
* encodings of R and S concatenated to each other. For example, `r = 1` and `s = 2` for an ECDSA signature of a
|
|
37
|
-
* ecp256k1 key would be (line breaks and spaces are added for easier visualization):
|
|
38
|
-
*
|
|
39
|
-
* ```
|
|
40
|
-
* 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
41
|
-
* 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01
|
|
42
|
-
* 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
43
|
-
* 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02
|
|
44
|
-
* ```
|
|
45
|
-
*
|
|
46
|
-
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#52-ecdsa-signature-encoding
|
|
47
|
-
*/
|
|
48
|
-
const signatureLength = (0, calculateByCurve_js_1.lengthOfSignature)(header.signatureCurveName);
|
|
49
|
-
const signature = buff.subarray(offset, offset + signatureLength);
|
|
50
|
-
offset += signatureLength;
|
|
51
|
-
return { signature: new Signature(publicKey, signature), offset };
|
|
52
|
-
}
|
|
53
|
-
constructor(publicKey, signature) {
|
|
54
|
-
this.publicKey = publicKey;
|
|
55
|
-
this.signature = signature;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Length
|
|
59
|
-
*
|
|
60
|
-
* @returns { number } Length of signature
|
|
61
|
-
*/
|
|
62
|
-
get length() {
|
|
63
|
-
return this.publicKey.length + this.signature.length;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Copy the contents of the signature to buffer
|
|
67
|
-
*/
|
|
68
|
-
copyToBuffer(target) {
|
|
69
|
-
if (this.length > target.length) {
|
|
70
|
-
throw new errors_js_1.ConfigurationError('Invalid buffer size to copy signature');
|
|
71
|
-
}
|
|
72
|
-
target.set(this.publicKey, 0);
|
|
73
|
-
target.set(this.signature, this.publicKey.length);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
exports.default = Signature;
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbmF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL1NpZ25hdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHdFQUFzRjtBQUN0RiwrQ0FBcUQ7QUFFckQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFxQixTQUFTO0lBSTVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBYyxFQUFFLElBQWdCO1FBQzNDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVmOzs7O1dBSUc7UUFDSCwrQ0FBK0M7UUFDL0MsTUFBTSxlQUFlLEdBQUcsSUFBQSx1Q0FBaUIsRUFBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGVBQWUsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sSUFBSSxlQUFlLENBQUM7UUFFMUI7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQWtCRztRQUNILE1BQU0sZUFBZSxHQUFHLElBQUEsdUNBQWlCLEVBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDckUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGVBQWUsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sSUFBSSxlQUFlLENBQUM7UUFFMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDcEUsQ0FBQztJQUVELFlBQVksU0FBcUIsRUFBRSxTQUFxQjtRQUN0RCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLE1BQWtCO1FBQzdCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLDhCQUFrQixDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUFwRUQsNEJBb0VDIn0=
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = exportCryptoKey;
|
|
4
|
-
/**
|
|
5
|
-
*
|
|
6
|
-
* Export to PEM format to binary buffer
|
|
7
|
-
* - key {CryptoKey} default: "undefined" CryptoKey generated by WebCrypto API
|
|
8
|
-
*/
|
|
9
|
-
async function exportCryptoKey(key) {
|
|
10
|
-
const exportedKey = await crypto.subtle.exportKey('raw', key);
|
|
11
|
-
const keyBuffer = new Uint8Array(exportedKey);
|
|
12
|
-
const len = keyBuffer.byteLength;
|
|
13
|
-
const xPoint = keyBuffer.slice(0, (1 + len) >>> 1); // drop `y`
|
|
14
|
-
xPoint[0] = 0x2 | (keyBuffer[len - 1] & 0x01); // encode sign of `y` in first bit
|
|
15
|
-
// Copy to Arraybuffer
|
|
16
|
-
const compressedPubKeyBuf = new ArrayBuffer(xPoint.byteLength);
|
|
17
|
-
new Uint8Array(compressedPubKeyBuf).set(new Uint8Array(xPoint));
|
|
18
|
-
return compressedPubKeyBuf;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0Q3J5cHRvS2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYtY3J5cHRvL2V4cG9ydENyeXB0b0tleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtDQVdDO0FBaEJEOzs7O0dBSUc7QUFDWSxLQUFLLFVBQVUsZUFBZSxDQUFDLEdBQWM7SUFDMUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUNqQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVc7SUFDL0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxrQ0FBa0M7SUFFakYsc0JBQXNCO0lBQ3RCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9ELElBQUksVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDaEUsT0FBTyxtQkFBbUIsQ0FBQztBQUM3QixDQUFDIn0=
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PolicyType = exports.ResourceLocatorProtocol = void 0;
|
|
4
|
-
var CipherType;
|
|
5
|
-
(function (CipherType) {
|
|
6
|
-
CipherType[CipherType["Aes256Gcm64"] = 0] = "Aes256Gcm64";
|
|
7
|
-
CipherType[CipherType["Aes256Gcm96"] = 1] = "Aes256Gcm96";
|
|
8
|
-
CipherType[CipherType["Aes256Gcm104"] = 2] = "Aes256Gcm104";
|
|
9
|
-
CipherType[CipherType["Aes256Gcm112"] = 3] = "Aes256Gcm112";
|
|
10
|
-
CipherType[CipherType["Aes256Gcm120"] = 4] = "Aes256Gcm120";
|
|
11
|
-
CipherType[CipherType["Aes256Gcm128"] = 5] = "Aes256Gcm128";
|
|
12
|
-
})(CipherType || (CipherType = {}));
|
|
13
|
-
/**
|
|
14
|
-
* The Signature ECC Mode is used to determine the length of the signature at the end of a nanotdf. This, in
|
|
15
|
-
* combination with the previous HAS_SIGNATURE section, describe the signature of the nanotdf. The following table
|
|
16
|
-
* describes the valid values and the associated ECC Params.
|
|
17
|
-
*/
|
|
18
|
-
var CurveName;
|
|
19
|
-
(function (CurveName) {
|
|
20
|
-
CurveName[CurveName["Secp256R1"] = 0] = "Secp256R1";
|
|
21
|
-
CurveName[CurveName["Secp384R1"] = 1] = "Secp384R1";
|
|
22
|
-
CurveName[CurveName["Secp521R1"] = 2] = "Secp521R1";
|
|
23
|
-
})(CurveName || (CurveName = {}));
|
|
24
|
-
var ResourceLocatorProtocol;
|
|
25
|
-
(function (ResourceLocatorProtocol) {
|
|
26
|
-
ResourceLocatorProtocol[ResourceLocatorProtocol["Http"] = 0] = "Http";
|
|
27
|
-
ResourceLocatorProtocol[ResourceLocatorProtocol["Https"] = 1] = "Https";
|
|
28
|
-
ResourceLocatorProtocol[ResourceLocatorProtocol["Unreserverd"] = 2] = "Unreserverd";
|
|
29
|
-
ResourceLocatorProtocol[ResourceLocatorProtocol["SharedResourceDirectory"] = 255] = "SharedResourceDirectory";
|
|
30
|
-
})(ResourceLocatorProtocol || (exports.ResourceLocatorProtocol = ResourceLocatorProtocol = {}));
|
|
31
|
-
var PolicyType;
|
|
32
|
-
(function (PolicyType) {
|
|
33
|
-
PolicyType[PolicyType["Remote"] = 0] = "Remote";
|
|
34
|
-
PolicyType[PolicyType["EmbeddedText"] = 1] = "EmbeddedText";
|
|
35
|
-
PolicyType[PolicyType["EmbeddedEncrypted"] = 2] = "EmbeddedEncrypted";
|
|
36
|
-
PolicyType[PolicyType["EmbeddedEncryptedPKA"] = 3] = "EmbeddedEncryptedPKA";
|
|
37
|
-
})(PolicyType || (exports.PolicyType = PolicyType = {}));
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFub1RERi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy90ZGYvTmFub1RERi9OYW5vVERGLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUssVUFPSjtBQVBELFdBQUssVUFBVTtJQUNiLHlEQUFXLENBQUE7SUFDWCx5REFBVyxDQUFBO0lBQ1gsMkRBQVksQ0FBQTtJQUNaLDJEQUFZLENBQUE7SUFDWiwyREFBWSxDQUFBO0lBQ1osMkRBQVksQ0FBQTtBQUNkLENBQUMsRUFQSSxVQUFVLEtBQVYsVUFBVSxRQU9kO0FBRUQ7Ozs7R0FJRztBQUNILElBQUssU0FJSjtBQUpELFdBQUssU0FBUztJQUNaLG1EQUFTLENBQUE7SUFDVCxtREFBUyxDQUFBO0lBQ1QsbURBQVMsQ0FBQTtBQUNYLENBQUMsRUFKSSxTQUFTLEtBQVQsU0FBUyxRQUliO0FBRUQsSUFBWSx1QkFLWDtBQUxELFdBQVksdUJBQXVCO0lBQ2pDLHFFQUFJLENBQUE7SUFDSix1RUFBSyxDQUFBO0lBQ0wsbUZBQVcsQ0FBQTtJQUNYLDZHQUE4QixDQUFBO0FBQ2hDLENBQUMsRUFMVyx1QkFBdUIsdUNBQXZCLHVCQUF1QixRQUtsQztBQUVELElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQiwrQ0FBTSxDQUFBO0lBQ04sMkRBQVksQ0FBQTtJQUNaLHFFQUFpQixDQUFBO0lBQ2pCLDJFQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFMVyxVQUFVLDBCQUFWLFVBQVUsUUFLckIifQ==
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { Client, NanoTDF } from './nanotdf/index.js';
|
|
2
|
-
import { type ClientConfig } from './nanotdf/Client.js';
|
|
3
|
-
export type EncryptOptions = {
|
|
4
|
-
ecdsaBinding: boolean;
|
|
5
|
-
};
|
|
6
|
-
/**
|
|
7
|
-
* NanoTDF SDK Client. Deprecated in favor of OpenTDF.
|
|
8
|
-
*
|
|
9
|
-
*/
|
|
10
|
-
export declare class NanoTDFClient extends Client {
|
|
11
|
-
/**
|
|
12
|
-
* Decrypt ciphertext
|
|
13
|
-
*
|
|
14
|
-
* Pass a base64 string, TypedArray, or ArrayBuffer ciphertext and get a promise which resolves plaintext
|
|
15
|
-
*
|
|
16
|
-
* @param ciphertext Ciphertext to decrypt
|
|
17
|
-
*/
|
|
18
|
-
decrypt(ciphertext: string | ArrayBufferLike): Promise<ArrayBuffer>;
|
|
19
|
-
/**
|
|
20
|
-
* Decrypt ciphertext of the legacy TDF, with the older, smaller i.v. calculation.
|
|
21
|
-
*
|
|
22
|
-
* Pass a base64 string, TypedArray, or ArrayBuffer ciphertext and get a promise which resolves plaintext
|
|
23
|
-
*
|
|
24
|
-
* @param ciphertext Ciphertext to decrypt
|
|
25
|
-
*/
|
|
26
|
-
decryptLegacyTDF(ciphertext: string | ArrayBufferLike): Promise<ArrayBuffer>;
|
|
27
|
-
/**
|
|
28
|
-
* Encrypts the given data using the NanoTDF encryption scheme.
|
|
29
|
-
*
|
|
30
|
-
* @param data The data to be encrypted.
|
|
31
|
-
* @param options The encryption options (currently unused).
|
|
32
|
-
* @returns A promise that resolves to the encrypted data as an ArrayBuffer.
|
|
33
|
-
* @throws If the initialization vector is not a number.
|
|
34
|
-
*/
|
|
35
|
-
encrypt(data: string | ArrayBufferLike, options?: EncryptOptions): Promise<ArrayBuffer>;
|
|
36
|
-
}
|
|
37
|
-
export type DatasetConfig = ClientConfig & {
|
|
38
|
-
maxKeyIterations?: number;
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* NanoTDF Dataset SDK Client
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* @example
|
|
45
|
-
* ```
|
|
46
|
-
* import { clientSecretAuthProvider, NanoTDFDatasetClient } from '@opentdf/sdk';
|
|
47
|
-
*
|
|
48
|
-
* const OIDC_ENDPOINT = 'http://localhost:65432/auth/realms/opentdf';
|
|
49
|
-
* const KAS_URL = 'http://localhost:65432/api/kas/';
|
|
50
|
-
*
|
|
51
|
-
* const ciphertext = '...';
|
|
52
|
-
* const client = new NanoTDFDatasetClient({
|
|
53
|
-
* authProvider: await clientSecretAuthProvider({
|
|
54
|
-
* clientId: 'tdf-client',
|
|
55
|
-
* clientSecret: '123-456',
|
|
56
|
-
* exchange: 'client',
|
|
57
|
-
* oidcOrigin: OIDC_ENDPOINT,
|
|
58
|
-
* }),
|
|
59
|
-
* kasEndpoint: KAS_URL,
|
|
60
|
-
* });
|
|
61
|
-
* const plaintext = client.decrypt(ciphertext);
|
|
62
|
-
* console.log('Plaintext', plaintext);
|
|
63
|
-
* ```
|
|
64
|
-
*/
|
|
65
|
-
export declare class NanoTDFDatasetClient extends Client {
|
|
66
|
-
static readonly NTDF_MAX_KEY_ITERATIONS = 8388606;
|
|
67
|
-
private maxKeyIteration;
|
|
68
|
-
private keyIterationCount;
|
|
69
|
-
private cachedEphemeralKey?;
|
|
70
|
-
private unwrappedKey?;
|
|
71
|
-
private symmetricKey?;
|
|
72
|
-
private cachedHeader?;
|
|
73
|
-
private ecdsaBinding;
|
|
74
|
-
/**
|
|
75
|
-
* Create new NanoTDF Dataset Client
|
|
76
|
-
*
|
|
77
|
-
* The Ephemeral Key Pair can either be provided or will be generate when fetching the entity object. Once set it
|
|
78
|
-
* cannot be changed. If a new ephemeral key is desired it a new client should be initialized.
|
|
79
|
-
* There is no performance impact for creating a new client IFF the ephemeral key pair is provided.
|
|
80
|
-
*
|
|
81
|
-
* @param clientConfig OIDC client credentials
|
|
82
|
-
* @param kasUrl Key access service URL
|
|
83
|
-
* @param ephemeralKeyPair (optional) ephemeral key pair to use
|
|
84
|
-
* @param maxKeyIterations Max iteration to performe without a key rotation
|
|
85
|
-
*/
|
|
86
|
-
constructor(opts: DatasetConfig);
|
|
87
|
-
/**
|
|
88
|
-
* Encrypt data
|
|
89
|
-
*
|
|
90
|
-
* Pass a string, TypedArray, or ArrayBuffer data and get a promise which resolves ciphertext
|
|
91
|
-
*
|
|
92
|
-
* @param data to decrypt
|
|
93
|
-
*/
|
|
94
|
-
encrypt(data: string | ArrayBufferLike, options?: EncryptOptions): Promise<ArrayBuffer>;
|
|
95
|
-
/**
|
|
96
|
-
* Decrypt ciphertext
|
|
97
|
-
*
|
|
98
|
-
* Pass a base64 string, TypedArray, or ArrayBuffer ciphertext and get a promise which resolves plaintext
|
|
99
|
-
*
|
|
100
|
-
* @param ciphertext Ciphertext to decrypt
|
|
101
|
-
*/
|
|
102
|
-
decrypt(ciphertext: string | ArrayBufferLike): Promise<ArrayBuffer>;
|
|
103
|
-
rewrapAndDecrypt(nanotdf: NanoTDF): Promise<ArrayBuffer>;
|
|
104
|
-
generateIV(): Uint8Array;
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=nanoclients.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nanoclients.d.ts","sourceRoot":"","sources":["../../../src/nanoclients.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,OAAO,EAOR,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxD,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAOF;;;GAGG;AACH,qBAAa,aAAc,SAAQ,MAAM;IACvC;;;;;;OAMG;IACG,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAuBzE;;;;;;OAMG;IACG,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAoBlF;;;;;;;OAOG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;CA6D9F;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,oBAAqB,SAAQ,MAAM;IAG9C,MAAM,CAAC,QAAQ,CAAC,uBAAuB,WAAW;IAElD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,kBAAkB,CAAC,CAAa;IACxC,OAAO,CAAC,YAAY,CAAC,CAAY;IACjC,OAAO,CAAC,YAAY,CAAC,CAAY;IACjC,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAU;IAE9B;;;;;;;;;;;OAWG;gBACS,IAAI,EAAE,aAAa;IAe/B;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAmF7F;;;;;;OAMG;IACG,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAuBnE,gBAAgB,CAAC,OAAO,EAAE,OAAO;IAsBvC,UAAU,IAAI,UAAU;CAkCzB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nanoindex.d.ts","sourceRoot":"","sources":["../../../src/nanoindex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { KasPublicKeyInfo, OriginAllowList } from '../access.js';
|
|
2
|
-
import { AuthProvider } from '../auth/providers.js';
|
|
3
|
-
export interface ClientConfig {
|
|
4
|
-
allowedKases?: string[];
|
|
5
|
-
fulfillableObligationFQNs?: string[];
|
|
6
|
-
ignoreAllowList?: boolean;
|
|
7
|
-
authProvider: AuthProvider;
|
|
8
|
-
dpopEnabled?: boolean;
|
|
9
|
-
dpopKeys?: Promise<CryptoKeyPair>;
|
|
10
|
-
ephemeralKeyPair?: Promise<CryptoKeyPair>;
|
|
11
|
-
kasEndpoint: string;
|
|
12
|
-
platformUrl: string;
|
|
13
|
-
}
|
|
14
|
-
type RewrapKeyResult = {
|
|
15
|
-
unwrappedKey: CryptoKey;
|
|
16
|
-
requiredObligations: string[];
|
|
17
|
-
};
|
|
18
|
-
/**
|
|
19
|
-
* A Client encapsulates sessions interacting with TDF3 and nanoTDF backends, KAS and any
|
|
20
|
-
* plugin-based sessions like identity and further attribute control. Most importantly, it is responsible
|
|
21
|
-
* for local key and token management, including the ephemeral public/private keypairs
|
|
22
|
-
* used for encrypting and decrypting information.
|
|
23
|
-
*
|
|
24
|
-
* @link https://developer.mozilla.org/en-US/docs/Web/API/CryptoKeyPair
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* import { Client, clientAuthProvider, decrypt, encrypt } from '@opentdf/sdk/nanotdf`
|
|
28
|
-
*
|
|
29
|
-
* const OIDC_ENDPOINT = 'http://localhost:65432/auth/';
|
|
30
|
-
* const KAS_URL = 'http://localhost:65432/kas';
|
|
31
|
-
*
|
|
32
|
-
* let client = new Client(
|
|
33
|
-
* await clientAuthProvider({
|
|
34
|
-
* clientId: 'tdf-client',
|
|
35
|
-
* clientSecret: '123-456',
|
|
36
|
-
* oidcOrigin: OIDC_ENDPOINT,
|
|
37
|
-
* }),
|
|
38
|
-
* KAS_URL
|
|
39
|
-
* );
|
|
40
|
-
*
|
|
41
|
-
* // t=1
|
|
42
|
-
* let nanoTDFEncrypted = await encrypt('some string', client.unwrappedKey);
|
|
43
|
-
* let nanoTDFDecrypted = await decrypt(nanoTDFEncrypted, client.unwrappedKey);
|
|
44
|
-
* nanoTDFDecrypted.toString() // 'some string'
|
|
45
|
-
*
|
|
46
|
-
*/
|
|
47
|
-
export default class Client {
|
|
48
|
-
static readonly KEY_ACCESS_REMOTE = "remote";
|
|
49
|
-
static readonly KAS_PROTOCOL = "kas";
|
|
50
|
-
static readonly SDK_INITIAL_RELEASE = "0.0.0";
|
|
51
|
-
static readonly INITIAL_RELEASE_IV_SIZE = 3;
|
|
52
|
-
static readonly IV_SIZE = 12;
|
|
53
|
-
allowedKases?: OriginAllowList;
|
|
54
|
-
readonly fulfillableObligationFQNs: string[];
|
|
55
|
-
protected kasUrl: string;
|
|
56
|
-
readonly platformUrl: string;
|
|
57
|
-
kasPubKey?: KasPublicKeyInfo;
|
|
58
|
-
readonly authProvider: AuthProvider;
|
|
59
|
-
readonly dpopEnabled: boolean;
|
|
60
|
-
dissems: string[];
|
|
61
|
-
dataAttributes: string[];
|
|
62
|
-
protected ephemeralKeyPair: Promise<CryptoKeyPair>;
|
|
63
|
-
protected requestSignerKeyPair: Promise<CryptoKeyPair>;
|
|
64
|
-
protected iv?: number;
|
|
65
|
-
/**
|
|
66
|
-
* Create new NanoTDF Client
|
|
67
|
-
*
|
|
68
|
-
* The Ephemeral Key Pair can either be provided or will be generate when fetching the entity object. Once set it
|
|
69
|
-
* cannot be changed. If a new ephemeral key is desired it a new client should be initialized.
|
|
70
|
-
* There is no performance impact for creating a new client IFF the ephemeral key pair is provided.
|
|
71
|
-
*/
|
|
72
|
-
constructor(optsOrOldAuthProvider: AuthProvider | ClientConfig, kasUrl?: string, ephemeralKeyPair?: CryptoKeyPair, dpopEnabled?: boolean);
|
|
73
|
-
/**
|
|
74
|
-
* Add attribute to the TDF file/data
|
|
75
|
-
*
|
|
76
|
-
* @param attribute The attribute that decides the access control of the TDF.
|
|
77
|
-
*/
|
|
78
|
-
addAttribute(attribute: string): void;
|
|
79
|
-
/**
|
|
80
|
-
* Rewrap key
|
|
81
|
-
*
|
|
82
|
-
* @important the `fetchEntityObject` method must be called prior to
|
|
83
|
-
* @param nanoTdfHeader the full header for the nanotdf
|
|
84
|
-
* @param kasRewrapUrl key access server's rewrap endpoint
|
|
85
|
-
* @param magicNumberVersion nanotdf container version
|
|
86
|
-
* @param clientVersion version of the client, as SemVer
|
|
87
|
-
*/
|
|
88
|
-
rewrapKey(nanoTdfHeader: ArrayBufferLike, kasRewrapUrl: string, magicNumberVersion: ArrayBufferLike, clientVersion: string): Promise<RewrapKeyResult>;
|
|
89
|
-
}
|
|
90
|
-
export {};
|
|
91
|
-
//# sourceMappingURL=Client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../../../src/nanotdf/Client.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,gBAAgB,EAChB,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,YAAY,EAAgC,MAAM,sBAAsB,CAAC;AAWlF,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,eAAe,GAAG;IACrB,YAAY,EAAE,SAAS,CAAC;IACxB,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B,CAAC;AAgDF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,MAAM,CAAC,QAAQ,CAAC,iBAAiB,YAAY;IAC7C,MAAM,CAAC,QAAQ,CAAC,YAAY,SAAS;IACrC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,WAAW;IAC9C,MAAM,CAAC,QAAQ,CAAC,uBAAuB,KAAK;IAC5C,MAAM,CAAC,QAAQ,CAAC,OAAO,MAAM;IAE7B,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,yBAAyB,EAAE,MAAM,EAAE,CAAC;IAK7C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAM;IACvB,cAAc,EAAE,MAAM,EAAE,CAAM;IAC9B,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACnD,SAAS,CAAC,oBAAoB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACvD,SAAS,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;OAMG;gBAED,qBAAqB,EAAE,YAAY,GAAG,YAAY,EAClD,MAAM,CAAC,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,aAAa,EAChC,WAAW,UAAQ;IAsErB;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIrC;;;;;;;;OAQG;IACG,SAAS,CACb,aAAa,EAAE,eAAe,EAC9B,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,eAAe,EACnC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,CAAC;CAkL5B"}
|