@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,65 +0,0 @@
|
|
|
1
|
-
import ProtocolEnum from '../enum/ProtocolEnum.js';
|
|
2
|
-
import ResourceLocatorIdentifierEnum from '../enum/ResourceLocatorIdentifierEnum.js';
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
* The Resource Locator is a way for the nanotdf to represent references to external resources in as succinct a format
|
|
6
|
-
* as possible.
|
|
7
|
-
*
|
|
8
|
-
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
9
|
-
* |---------------|--------------------|--------------------|
|
|
10
|
-
* | Protocol Enum | 1 | 1 |
|
|
11
|
-
* | Body Length | 1 | 1 |
|
|
12
|
-
* | Body | 1 | 255 |
|
|
13
|
-
* | Identifier | 0 | n |
|
|
14
|
-
*
|
|
15
|
-
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3312-kas
|
|
16
|
-
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#341-resource-locator
|
|
17
|
-
*/
|
|
18
|
-
export default class ResourceLocator {
|
|
19
|
-
readonly protocol: ProtocolEnum;
|
|
20
|
-
readonly lengthOfBody: number;
|
|
21
|
-
readonly body: string;
|
|
22
|
-
readonly offset: number;
|
|
23
|
-
readonly id?: string | undefined;
|
|
24
|
-
readonly idType: ResourceLocatorIdentifierEnum;
|
|
25
|
-
static readonly PROTOCOL_OFFSET = 0;
|
|
26
|
-
static readonly PROTOCOL_LENGTH = 1;
|
|
27
|
-
static readonly LENGTH_OFFSET = 1;
|
|
28
|
-
static readonly LENGTH_LENGTH = 1;
|
|
29
|
-
static readonly BODY_OFFSET = 2;
|
|
30
|
-
static readonly IDENTIFIER_0_BYTE: number;
|
|
31
|
-
static readonly IDENTIFIER_2_BYTE: number;
|
|
32
|
-
static readonly IDENTIFIER_8_BYTE: number;
|
|
33
|
-
static readonly IDENTIFIER_32_BYTE: number;
|
|
34
|
-
constructor(protocol: ProtocolEnum, lengthOfBody: number, body: string, offset: number, id?: string | undefined, idType?: ResourceLocatorIdentifierEnum);
|
|
35
|
-
/**
|
|
36
|
-
* Construct a new URL or URL + identifier pair, for use with NanoTDF envelopes.
|
|
37
|
-
* @param url The URL to encrypt; `http` and `https` schemes are supported
|
|
38
|
-
* @param identifier An optional identifier.
|
|
39
|
-
* For KAS URLs, this is usually a public key identifier (kid). Limit 32 characters
|
|
40
|
-
* @returns a value representing the URL and identifier, if present.
|
|
41
|
-
* This method throws an Error if the URL is invalid or of the wrong schema,
|
|
42
|
-
* or if the identifier is an unsupported value.
|
|
43
|
-
*/
|
|
44
|
-
static fromURL(url: string, identifier?: string): ResourceLocator;
|
|
45
|
-
static parse(buff: Uint8Array): ResourceLocator;
|
|
46
|
-
/**
|
|
47
|
-
* Length
|
|
48
|
-
*
|
|
49
|
-
* @returns { number } Length of resource locator
|
|
50
|
-
*/
|
|
51
|
-
get length(): number;
|
|
52
|
-
get url(): string | never;
|
|
53
|
-
/**
|
|
54
|
-
* Return the contents of the Resource Locator in buffer
|
|
55
|
-
*/
|
|
56
|
-
toBuffer(): Uint8Array;
|
|
57
|
-
/**
|
|
58
|
-
* Get Identifier
|
|
59
|
-
*
|
|
60
|
-
* Returns the identifier of the ResourceLocator or an empty string if no identifier is present.
|
|
61
|
-
* @returns { string } Identifier of the resource locator.
|
|
62
|
-
*/
|
|
63
|
-
get identifier(): string;
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=ResourceLocator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ResourceLocator.d.ts","sourceRoot":"","sources":["../../../../../src/nanotdf/models/ResourceLocator.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,yBAAyB,CAAC;AACnD,OAAO,6BAA6B,MAAM,0CAA0C,CAAC;AAErF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,OAAO,eAAe;IAYhC,QAAQ,CAAC,QAAQ,EAAE,YAAY;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM;IACpB,QAAQ,CAAC,MAAM,EAAE,6BAA6B;IAhBhD,MAAM,CAAC,QAAQ,CAAC,eAAe,KAAK;IACpC,MAAM,CAAC,QAAQ,CAAC,eAAe,KAAK;IACpC,MAAM,CAAC,QAAQ,CAAC,aAAa,KAAK;IAClC,MAAM,CAAC,QAAQ,CAAC,aAAa,KAAK;IAClC,MAAM,CAAC,QAAQ,CAAC,WAAW,KAAK;IAChC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAU;IACnD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAU;IACnD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAU;IACnD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAU;gBAGzC,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,EAAE,CAAC,EAAE,MAAM,YAAA,EACX,MAAM,GAAE,6BAAkE;IAGrF;;;;;;;;OAQG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe;IA2CjE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU;IAiE7B;;;;OAIG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,GAAG,IAAI,MAAM,GAAG,KAAK,CASxB;IAED;;OAEG;IACH,QAAQ,IAAI,UAAU;IAuBtB;;;;;OAKG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;CACF"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import Header from './Header.js';
|
|
2
|
-
/**
|
|
3
|
-
* NanoTDF Signature
|
|
4
|
-
*
|
|
5
|
-
* 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:
|
|
6
|
-
*
|
|
7
|
-
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
8
|
-
* |------------|--------------------|--------------------|
|
|
9
|
-
* | Public Key | 33 | 67 |
|
|
10
|
-
* | Signature | 64 | 132 |
|
|
11
|
-
*
|
|
12
|
-
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#333-signature
|
|
13
|
-
*/
|
|
14
|
-
export default class Signature {
|
|
15
|
-
publicKey: Uint8Array;
|
|
16
|
-
signature: Uint8Array;
|
|
17
|
-
static parse(header: Header, buff: Uint8Array): {
|
|
18
|
-
signature: Signature;
|
|
19
|
-
offset: number;
|
|
20
|
-
} | never;
|
|
21
|
-
constructor(publicKey: Uint8Array, signature: Uint8Array);
|
|
22
|
-
/**
|
|
23
|
-
* Length
|
|
24
|
-
*
|
|
25
|
-
* @returns { number } Length of signature
|
|
26
|
-
*/
|
|
27
|
-
get length(): number;
|
|
28
|
-
/**
|
|
29
|
-
* Copy the contents of the signature to buffer
|
|
30
|
-
*/
|
|
31
|
-
copyToBuffer(target: Uint8Array): void;
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=Signature.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Signature.d.ts","sourceRoot":"","sources":["../../../../../src/nanotdf/models/Signature.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAIjC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IACrB,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;IAE7B,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK;gBAuCpF,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU;IAKxD;;;;OAIG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;CAQvC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ciphers.d.ts","sourceRoot":"","sources":["../../../../src/nanotdf-crypto/ciphers.ts"],"names":[],"mappings":"AAAA,oBAAY,OAAO;IACjB,MAAM,YAAY;CACnB;AAED,oBAAY,gBAAgB;IAC1B,MAAM,MAAM;CACb;AAMD,eAAO,MAAM,gBAAgB,UAAa,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../../../../src/nanotdf-crypto/decrypt.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAA8B,OAAO,CACnC,GAAG,EAAE,SAAS,EACd,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,UAAU,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CAUtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../../../../src/nanotdf-crypto/digest.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,QAAQ,EAAE,mBAAmB,EAC7B,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,WAAW,CAAC,CAEtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ecdsaSignature.d.ts","sourceRoot":"","sources":["../../../../src/nanotdf-crypto/ecdsaSignature.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,SAAS,EACrB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,WAAW,CAAC,CAUtB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,OAAO,CAAC,CAWlB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,cAAc,EAAE,UAAU,GAAG;IACxE,CAAC,EAAE,UAAU,CAAC;IACd,CAAC,EAAE,UAAU,CAAC;CACf,CAeA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../../../../src/nanotdf-crypto/encrypt.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAA8B,OAAO,CACnC,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,UAAU,EACrB,EAAE,EAAE,UAAU,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CAUtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../../../src/nanotdf-crypto/enums.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;IACf,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,OAAO,YAAY;CACpB;AAED,oBAAY,UAAU;IACpB,IAAI,UAAU;IACd,IAAI,UAAU;IACd,IAAI,UAAU;CACf;AAED,oBAAY,UAAU;IACpB,MAAM,YAAY;CACnB;AAED,oBAAY,QAAQ;IAClB,IAAI,UAAU;IACd,MAAM,YAAY;IAClB,MAAM,YAAY;IAClB,MAAM,YAAY;CACnB;AAED,oBAAY,SAAS;IACnB,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,oBAAY,OAAO;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,OAAO,YAAY;CACpB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exportCryptoKey.d.ts","sourceRoot":"","sources":["../../../../src/nanotdf-crypto/exportCryptoKey.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAA8B,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAWlF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateKeyPair.d.ts","sourceRoot":"","sources":["../../../../src/nanotdf-crypto/generateKeyPair.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAErE,UAAU,sBAAsB;IAC9B,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC;IAC/C,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,eAAe,CACnC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,GAAE,sBAK5D,GACA,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC,CAEhC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generateRandomNumber.d.ts","sourceRoot":"","sources":["../../../../src/nanotdf-crypto/generateRandomNumber.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAI/D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/nanotdf-crypto/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keyAgreement.d.ts","sourceRoot":"","sources":["../../../../src/nanotdf-crypto/keyAgreement.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA4BH,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,QAAQ,EAAE,UAAU,CAAC;IACrB,QAAQ,EAAE,UAAU,GAAG,WAAW,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,SAAS,EACrB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,OAAO,CAAC,mBAAmB,CAcnC,GACA,OAAO,CAAC,SAAS,CAAC,CA0EpB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pemPublicToCrypto.d.ts","sourceRoot":"","sources":["../../../../src/nanotdf-crypto/pemPublicToCrypto.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgDH,UAAU,wBAAwB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;CACxB;AA6CD;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,wBAER,GACA,OAAO,CAAC,SAAS,CAAC,CAsCpB;AAyBD,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,wBAER,GACA,OAAO,CAAC,SAAS,CAAC,CAapB"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
declare enum CipherType {
|
|
2
|
-
Aes256Gcm64 = 0,// Default cipher
|
|
3
|
-
Aes256Gcm96 = 1,
|
|
4
|
-
Aes256Gcm104 = 2,
|
|
5
|
-
Aes256Gcm112 = 3,
|
|
6
|
-
Aes256Gcm120 = 4,
|
|
7
|
-
Aes256Gcm128 = 5
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* The Signature ECC Mode is used to determine the length of the signature at the end of a nanotdf. This, in
|
|
11
|
-
* combination with the previous HAS_SIGNATURE section, describe the signature of the nanotdf. The following table
|
|
12
|
-
* describes the valid values and the associated ECC Params.
|
|
13
|
-
*/
|
|
14
|
-
declare enum CurveName {
|
|
15
|
-
Secp256R1 = 0,
|
|
16
|
-
Secp384R1 = 1,
|
|
17
|
-
Secp521R1 = 2
|
|
18
|
-
}
|
|
19
|
-
export declare enum ResourceLocatorProtocol {
|
|
20
|
-
Http = 0,
|
|
21
|
-
Https = 1,
|
|
22
|
-
Unreserverd = 2,
|
|
23
|
-
SharedResourceDirectory = 255
|
|
24
|
-
}
|
|
25
|
-
export declare enum PolicyType {
|
|
26
|
-
Remote = 0,
|
|
27
|
-
EmbeddedText = 1,
|
|
28
|
-
EmbeddedEncrypted = 2,// Default policy
|
|
29
|
-
EmbeddedEncryptedPKA = 3
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Resource Locator interface
|
|
33
|
-
*/
|
|
34
|
-
export interface ResourceLocator {
|
|
35
|
-
protocol: ResourceLocatorProtocol;
|
|
36
|
-
length: number;
|
|
37
|
-
body: string;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Policy interface
|
|
41
|
-
*/
|
|
42
|
-
export interface Policy {
|
|
43
|
-
type: PolicyType;
|
|
44
|
-
binding: Uint8Array;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Remote policy interface
|
|
48
|
-
*/
|
|
49
|
-
export interface RemotePolicy extends Policy {
|
|
50
|
-
protocol: ResourceLocatorProtocol;
|
|
51
|
-
urn: string;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Embedded policy interface
|
|
55
|
-
*/
|
|
56
|
-
export interface EmbeddedPolicy extends Policy {
|
|
57
|
-
content: Uint8Array;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Header interface
|
|
61
|
-
*/
|
|
62
|
-
export interface Header {
|
|
63
|
-
magicNumberVersion: Uint8Array;
|
|
64
|
-
kas: ResourceLocator;
|
|
65
|
-
useECDSABinding: boolean;
|
|
66
|
-
ephemeralCurveName: CurveName;
|
|
67
|
-
hasSignature: boolean;
|
|
68
|
-
signatureCurveName: CurveName;
|
|
69
|
-
symmetricCipher: CipherType;
|
|
70
|
-
authTagLength: number;
|
|
71
|
-
policy: RemotePolicy | EmbeddedPolicy;
|
|
72
|
-
ephemeralPublicKey: Uint8Array;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Payload interface
|
|
76
|
-
*/
|
|
77
|
-
export interface Payload {
|
|
78
|
-
iv: Uint8Array;
|
|
79
|
-
ciphertext: Uint8Array;
|
|
80
|
-
authTag: Uint8Array;
|
|
81
|
-
ciphertextAuthTag: Uint8Array;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Signature interface
|
|
85
|
-
*/
|
|
86
|
-
export interface Signature {
|
|
87
|
-
publicKey: Uint8Array;
|
|
88
|
-
signature: Uint8Array;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* NanoTDF interface
|
|
92
|
-
*/
|
|
93
|
-
export interface NanoTDF {
|
|
94
|
-
header: Header;
|
|
95
|
-
payload: Payload;
|
|
96
|
-
signature: Signature;
|
|
97
|
-
}
|
|
98
|
-
export {};
|
|
99
|
-
//# sourceMappingURL=NanoTDF.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NanoTDF.d.ts","sourceRoot":"","sources":["../../../../../src/tdf/NanoTDF/NanoTDF.ts"],"names":[],"mappings":"AAAA,aAAK,UAAU;IACb,WAAW,IAAA,CAAE,iBAAiB;IAC9B,WAAW,IAAA;IACX,YAAY,IAAA;IACZ,YAAY,IAAA;IACZ,YAAY,IAAA;IACZ,YAAY,IAAA;CACb;AAED;;;;GAIG;AACH,aAAK,SAAS;IACZ,SAAS,IAAA;IACT,SAAS,IAAA;IACT,SAAS,IAAA;CACV;AAED,oBAAY,uBAAuB;IACjC,IAAI,IAAA;IACJ,KAAK,IAAA;IACL,WAAW,IAAA;IACX,uBAAuB,MAAO;CAC/B;AAED,oBAAY,UAAU;IACpB,MAAM,IAAA;IACN,YAAY,IAAA;IACZ,iBAAiB,IAAA,CAAE,iBAAiB;IACpC,oBAAoB,IAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,uBAAuB,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,UAAU,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,QAAQ,EAAE,uBAAuB,CAAC;IAClC,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,MAAM;IAC5C,OAAO,EAAE,UAAU,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IAErB,kBAAkB,EAAE,UAAU,CAAC;IAG/B,GAAG,EAAE,eAAe,CAAC;IAGrB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,SAAS,CAAC;IAG9B,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,SAAS,CAAC;IAC9B,eAAe,EAAE,UAAU,CAAC;IAE5B,aAAa,EAAE,MAAM,CAAC;IAGtB,MAAM,EAAE,YAAY,GAAG,cAAc,CAAC;IAGtC,kBAAkB,EAAE,UAAU,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,UAAU,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,UAAU,CAAC;IACpB,iBAAiB,EAAE,UAAU,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;CACtB"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import PolicyTypeEnum from '../nanotdf/enum/PolicyTypeEnum.js';
|
|
2
|
-
export type InputSource = ReadableStream<Uint8Array> | Uint8Array | string | ArrayBuffer | Promise<ReadableStream<Uint8Array>>;
|
|
3
|
-
type Header = {
|
|
4
|
-
magicNumberVersion: string[];
|
|
5
|
-
kas: {
|
|
6
|
-
protocol: number;
|
|
7
|
-
length: number;
|
|
8
|
-
body: string;
|
|
9
|
-
};
|
|
10
|
-
eccBindingMode: {
|
|
11
|
-
useECDSABinding: boolean;
|
|
12
|
-
ephemeralCurveName: number;
|
|
13
|
-
};
|
|
14
|
-
symmetricPayloadConfig: {
|
|
15
|
-
hasSignature: boolean;
|
|
16
|
-
signatureCurveName: number;
|
|
17
|
-
symmetricCipher: number;
|
|
18
|
-
};
|
|
19
|
-
ephemeralPublicKey: string[];
|
|
20
|
-
};
|
|
21
|
-
type HeaderPolicy = {
|
|
22
|
-
type: PolicyTypeEnum;
|
|
23
|
-
content: string[];
|
|
24
|
-
binding: string[];
|
|
25
|
-
};
|
|
26
|
-
type RemotePolicy = {
|
|
27
|
-
protocol: number;
|
|
28
|
-
length: number;
|
|
29
|
-
body: string;
|
|
30
|
-
};
|
|
31
|
-
export type PlainEmbeddedHeader = Header & {
|
|
32
|
-
policy: HeaderPolicy;
|
|
33
|
-
};
|
|
34
|
-
export type EmbeddedHeader = Header & {
|
|
35
|
-
policy: HeaderPolicy;
|
|
36
|
-
};
|
|
37
|
-
export type RemoteHeader = Header & {
|
|
38
|
-
policy: {
|
|
39
|
-
type: PolicyTypeEnum;
|
|
40
|
-
remotePolicy: RemotePolicy;
|
|
41
|
-
binding: string[];
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
export {};
|
|
45
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAE/D,MAAM,MAAM,WAAW,GACnB,cAAc,CAAC,UAAU,CAAC,GAC1B,UAAU,GACV,MAAM,GACN,WAAW,GACX,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;AAExC,KAAK,MAAM,GAAG;IACZ,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,GAAG,EAAE;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,cAAc,EAAE;QACd,eAAe,EAAE,OAAO,CAAC;QACzB,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,sBAAsB,EAAE;QACtB,YAAY,EAAE,OAAO,CAAC;QACtB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG;IACzC,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG;IACpC,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAClC,MAAM,EAAE;QACN,IAAI,EAAE,cAAc,CAAC;QACrB,YAAY,EAAE,YAAY,CAAC;QAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACH,CAAC"}
|
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
import { Client, NanoTDF, encrypt, decrypt, encryptDataset, getHkdfSalt, DefaultParams, } from './nanotdf/index.js';
|
|
2
|
-
import { keyAgreement } from './nanotdf-crypto/index.js';
|
|
3
|
-
import { PolicyBuilder } from './tdf/Policy.js';
|
|
4
|
-
import { fetchECKasPubKey } from './access.js';
|
|
5
|
-
import { ConfigurationError } from './errors.js';
|
|
6
|
-
// Define default options
|
|
7
|
-
const defaultOptions = {
|
|
8
|
-
ecdsaBinding: false,
|
|
9
|
-
};
|
|
10
|
-
/**
|
|
11
|
-
* NanoTDF SDK Client. Deprecated in favor of OpenTDF.
|
|
12
|
-
*
|
|
13
|
-
*/
|
|
14
|
-
export class NanoTDFClient extends Client {
|
|
15
|
-
/**
|
|
16
|
-
* Decrypt ciphertext
|
|
17
|
-
*
|
|
18
|
-
* Pass a base64 string, TypedArray, or ArrayBuffer ciphertext and get a promise which resolves plaintext
|
|
19
|
-
*
|
|
20
|
-
* @param ciphertext Ciphertext to decrypt
|
|
21
|
-
*/
|
|
22
|
-
async decrypt(ciphertext) {
|
|
23
|
-
// Parse ciphertext
|
|
24
|
-
const nanotdf = NanoTDF.from(ciphertext);
|
|
25
|
-
// TODO: The version number should be fetched from the API
|
|
26
|
-
const version = '0.0.1';
|
|
27
|
-
const kasUrl = nanotdf.header.getKasRewrapUrl();
|
|
28
|
-
// Rewrap key on every request
|
|
29
|
-
const { unwrappedKey: ukey } = await this.rewrapKey(nanotdf.header.toBuffer(), kasUrl, nanotdf.header.magicNumberVersion, version);
|
|
30
|
-
if (!ukey) {
|
|
31
|
-
throw new Error('internal: key rewrap failure');
|
|
32
|
-
}
|
|
33
|
-
// Return decrypt promise
|
|
34
|
-
return decrypt(ukey, nanotdf);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Decrypt ciphertext of the legacy TDF, with the older, smaller i.v. calculation.
|
|
38
|
-
*
|
|
39
|
-
* Pass a base64 string, TypedArray, or ArrayBuffer ciphertext and get a promise which resolves plaintext
|
|
40
|
-
*
|
|
41
|
-
* @param ciphertext Ciphertext to decrypt
|
|
42
|
-
*/
|
|
43
|
-
async decryptLegacyTDF(ciphertext) {
|
|
44
|
-
// Parse ciphertext
|
|
45
|
-
const nanotdf = NanoTDF.from(ciphertext, undefined, true);
|
|
46
|
-
const legacyVersion = '0.0.0';
|
|
47
|
-
// Rewrap key on every request
|
|
48
|
-
const { unwrappedKey: key } = await this.rewrapKey(nanotdf.header.toBuffer(), nanotdf.header.getKasRewrapUrl(), nanotdf.header.magicNumberVersion, legacyVersion);
|
|
49
|
-
if (!key) {
|
|
50
|
-
throw new Error('internal: failed unwrap');
|
|
51
|
-
}
|
|
52
|
-
// Return decrypt promise
|
|
53
|
-
return decrypt(key, nanotdf);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Encrypts the given data using the NanoTDF encryption scheme.
|
|
57
|
-
*
|
|
58
|
-
* @param data The data to be encrypted.
|
|
59
|
-
* @param options The encryption options (currently unused).
|
|
60
|
-
* @returns A promise that resolves to the encrypted data as an ArrayBuffer.
|
|
61
|
-
* @throws If the initialization vector is not a number.
|
|
62
|
-
*/
|
|
63
|
-
async encrypt(data, options) {
|
|
64
|
-
// For encrypt always generate the client ephemeralKeyPair
|
|
65
|
-
const ephemeralKeyPair = await this.ephemeralKeyPair;
|
|
66
|
-
const initializationVector = this.iv;
|
|
67
|
-
if (typeof initializationVector !== 'number') {
|
|
68
|
-
throw new ConfigurationError('NanoTDF clients are single use. Please generate a new client and keypair.');
|
|
69
|
-
}
|
|
70
|
-
delete this.iv;
|
|
71
|
-
if (!this.kasPubKey) {
|
|
72
|
-
this.kasPubKey = await fetchECKasPubKey(this.kasUrl);
|
|
73
|
-
}
|
|
74
|
-
// Create a policy for the tdf
|
|
75
|
-
const policy = new PolicyBuilder();
|
|
76
|
-
// Add data attributes.
|
|
77
|
-
for (const dataAttribute of this.dataAttributes) {
|
|
78
|
-
const attribute = {
|
|
79
|
-
attribute: dataAttribute,
|
|
80
|
-
pubKey: this.kasPubKey.publicKey,
|
|
81
|
-
kasUrl: this.kasUrl,
|
|
82
|
-
};
|
|
83
|
-
policy.addAttribute(attribute);
|
|
84
|
-
}
|
|
85
|
-
if (this.dissems.length == 0 && this.dataAttributes.length == 0) {
|
|
86
|
-
console.warn('This policy has an empty attributes list and an empty dissemination list. This will allow any entity with a valid Entity Object to access this TDF.');
|
|
87
|
-
}
|
|
88
|
-
// Encrypt the policy.
|
|
89
|
-
const policyObjectAsStr = policy.toJSON();
|
|
90
|
-
// IV is always '1', since the new keypair is generated on encrypt
|
|
91
|
-
// using the same key is fine.
|
|
92
|
-
const lengthAsUint32 = new Uint32Array(1);
|
|
93
|
-
lengthAsUint32[0] = initializationVector;
|
|
94
|
-
const lengthAsUint24 = new Uint8Array(lengthAsUint32.buffer);
|
|
95
|
-
// NOTE: We are only interested in only first 3 bytes.
|
|
96
|
-
const payloadIV = new Uint8Array(12).fill(0);
|
|
97
|
-
payloadIV[9] = lengthAsUint24[2];
|
|
98
|
-
payloadIV[10] = lengthAsUint24[1];
|
|
99
|
-
payloadIV[11] = lengthAsUint24[0];
|
|
100
|
-
const mergedOptions = { ...defaultOptions, ...options };
|
|
101
|
-
return encrypt(policyObjectAsStr, this.kasPubKey, ephemeralKeyPair, payloadIV, data, mergedOptions.ecdsaBinding);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* NanoTDF Dataset SDK Client
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* @example
|
|
109
|
-
* ```
|
|
110
|
-
* import { clientSecretAuthProvider, NanoTDFDatasetClient } from '@opentdf/sdk';
|
|
111
|
-
*
|
|
112
|
-
* const OIDC_ENDPOINT = 'http://localhost:65432/auth/realms/opentdf';
|
|
113
|
-
* const KAS_URL = 'http://localhost:65432/api/kas/';
|
|
114
|
-
*
|
|
115
|
-
* const ciphertext = '...';
|
|
116
|
-
* const client = new NanoTDFDatasetClient({
|
|
117
|
-
* authProvider: await clientSecretAuthProvider({
|
|
118
|
-
* clientId: 'tdf-client',
|
|
119
|
-
* clientSecret: '123-456',
|
|
120
|
-
* exchange: 'client',
|
|
121
|
-
* oidcOrigin: OIDC_ENDPOINT,
|
|
122
|
-
* }),
|
|
123
|
-
* kasEndpoint: KAS_URL,
|
|
124
|
-
* });
|
|
125
|
-
* const plaintext = client.decrypt(ciphertext);
|
|
126
|
-
* console.log('Plaintext', plaintext);
|
|
127
|
-
* ```
|
|
128
|
-
*/
|
|
129
|
-
export class NanoTDFDatasetClient extends Client {
|
|
130
|
-
/**
|
|
131
|
-
* Create new NanoTDF Dataset Client
|
|
132
|
-
*
|
|
133
|
-
* The Ephemeral Key Pair can either be provided or will be generate when fetching the entity object. Once set it
|
|
134
|
-
* cannot be changed. If a new ephemeral key is desired it a new client should be initialized.
|
|
135
|
-
* There is no performance impact for creating a new client IFF the ephemeral key pair is provided.
|
|
136
|
-
*
|
|
137
|
-
* @param clientConfig OIDC client credentials
|
|
138
|
-
* @param kasUrl Key access service URL
|
|
139
|
-
* @param ephemeralKeyPair (optional) ephemeral key pair to use
|
|
140
|
-
* @param maxKeyIterations Max iteration to performe without a key rotation
|
|
141
|
-
*/
|
|
142
|
-
constructor(opts) {
|
|
143
|
-
if (opts.maxKeyIterations &&
|
|
144
|
-
opts.maxKeyIterations > NanoTDFDatasetClient.NTDF_MAX_KEY_ITERATIONS) {
|
|
145
|
-
throw new ConfigurationError(`key iteration exceeds max iterations(${NanoTDFDatasetClient.NTDF_MAX_KEY_ITERATIONS})`);
|
|
146
|
-
}
|
|
147
|
-
super(opts);
|
|
148
|
-
this.maxKeyIteration = opts.maxKeyIterations || NanoTDFDatasetClient.NTDF_MAX_KEY_ITERATIONS;
|
|
149
|
-
this.keyIterationCount = 0;
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Encrypt data
|
|
153
|
-
*
|
|
154
|
-
* Pass a string, TypedArray, or ArrayBuffer data and get a promise which resolves ciphertext
|
|
155
|
-
*
|
|
156
|
-
* @param data to decrypt
|
|
157
|
-
*/
|
|
158
|
-
async encrypt(data, options) {
|
|
159
|
-
// Intial encrypt
|
|
160
|
-
if (this.keyIterationCount == 0) {
|
|
161
|
-
const mergedOptions = { ...defaultOptions, ...options };
|
|
162
|
-
this.ecdsaBinding = mergedOptions.ecdsaBinding;
|
|
163
|
-
// For encrypt always generate the client ephemeralKeyPair
|
|
164
|
-
const ephemeralKeyPair = await this.ephemeralKeyPair;
|
|
165
|
-
if (!this.kasPubKey) {
|
|
166
|
-
this.kasPubKey = await fetchECKasPubKey(this.kasUrl);
|
|
167
|
-
}
|
|
168
|
-
// Create a policy for the tdf
|
|
169
|
-
const policy = new PolicyBuilder();
|
|
170
|
-
// Add data attributes.
|
|
171
|
-
for (const dataAttribute of this.dataAttributes) {
|
|
172
|
-
const attribute = {
|
|
173
|
-
attribute: dataAttribute,
|
|
174
|
-
kasPubKey: this.kasPubKey.publicKey,
|
|
175
|
-
kasUrl: this.kasUrl,
|
|
176
|
-
};
|
|
177
|
-
policy.addAttribute(attribute);
|
|
178
|
-
}
|
|
179
|
-
if (this.dissems.length == 0 || this.dataAttributes.length == 0) {
|
|
180
|
-
console.warn('This policy has an empty attributes list and an empty dissemination list. This will allow any entity with a valid Entity Object to access this TDF.');
|
|
181
|
-
}
|
|
182
|
-
// Encrypt the policy.
|
|
183
|
-
const policyObjectAsStr = policy.toJSON();
|
|
184
|
-
const ivVector = this.generateIV();
|
|
185
|
-
// Generate a symmetric key.
|
|
186
|
-
this.symmetricKey = await keyAgreement(ephemeralKeyPair.privateKey, await this.kasPubKey.key, await getHkdfSalt(DefaultParams.magicNumberVersion));
|
|
187
|
-
const nanoTDFBuffer = await encrypt(policyObjectAsStr, this.kasPubKey, ephemeralKeyPair, ivVector, data, this.ecdsaBinding);
|
|
188
|
-
// Cache the header and increment the key iteration
|
|
189
|
-
if (!this.cachedHeader) {
|
|
190
|
-
const nanoTDF = NanoTDF.from(nanoTDFBuffer);
|
|
191
|
-
this.cachedHeader = nanoTDF.header;
|
|
192
|
-
}
|
|
193
|
-
this.keyIterationCount += 1;
|
|
194
|
-
return nanoTDFBuffer;
|
|
195
|
-
}
|
|
196
|
-
this.keyIterationCount += 1;
|
|
197
|
-
if (!this.cachedHeader) {
|
|
198
|
-
throw new ConfigurationError('invalid dataset client: empty nanoTDF header');
|
|
199
|
-
}
|
|
200
|
-
if (!this.symmetricKey) {
|
|
201
|
-
throw new ConfigurationError('invalid dataset client: empty dek');
|
|
202
|
-
}
|
|
203
|
-
this.keyIterationCount += 1;
|
|
204
|
-
if (this.keyIterationCount == this.maxKeyIteration) {
|
|
205
|
-
// reset the key iteration
|
|
206
|
-
this.keyIterationCount = 0;
|
|
207
|
-
}
|
|
208
|
-
const ivVector = this.generateIV();
|
|
209
|
-
return encryptDataset(this.symmetricKey, this.cachedHeader, ivVector, data);
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Decrypt ciphertext
|
|
213
|
-
*
|
|
214
|
-
* Pass a base64 string, TypedArray, or ArrayBuffer ciphertext and get a promise which resolves plaintext
|
|
215
|
-
*
|
|
216
|
-
* @param ciphertext Ciphertext to decrypt
|
|
217
|
-
*/
|
|
218
|
-
async decrypt(ciphertext) {
|
|
219
|
-
// Parse ciphertext
|
|
220
|
-
const nanotdf = NanoTDF.from(ciphertext);
|
|
221
|
-
if (!this.cachedEphemeralKey) {
|
|
222
|
-
// First decrypt
|
|
223
|
-
return this.rewrapAndDecrypt(nanotdf);
|
|
224
|
-
}
|
|
225
|
-
// Other encrypts
|
|
226
|
-
if (this.cachedEphemeralKey.toString() == nanotdf.header.ephemeralPublicKey.toString()) {
|
|
227
|
-
const ukey = this.unwrappedKey;
|
|
228
|
-
if (!ukey) {
|
|
229
|
-
// These should have thrown already.
|
|
230
|
-
throw new Error('internal: key rewrap failure');
|
|
231
|
-
}
|
|
232
|
-
// Return decrypt promise
|
|
233
|
-
return decrypt(ukey, nanotdf);
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
return this.rewrapAndDecrypt(nanotdf);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
async rewrapAndDecrypt(nanotdf) {
|
|
240
|
-
// TODO: The version number should be fetched from the API
|
|
241
|
-
const version = '0.0.1';
|
|
242
|
-
// Rewrap key on every request
|
|
243
|
-
const { unwrappedKey: ukey } = await this.rewrapKey(nanotdf.header.toBuffer(), nanotdf.header.getKasRewrapUrl(), nanotdf.header.magicNumberVersion, version);
|
|
244
|
-
if (!ukey) {
|
|
245
|
-
// These should have thrown already.
|
|
246
|
-
throw new Error('internal: key rewrap failure');
|
|
247
|
-
}
|
|
248
|
-
this.cachedEphemeralKey = nanotdf.header.ephemeralPublicKey;
|
|
249
|
-
this.unwrappedKey = ukey;
|
|
250
|
-
// Return decrypt promise
|
|
251
|
-
return decrypt(ukey, nanotdf);
|
|
252
|
-
}
|
|
253
|
-
generateIV() {
|
|
254
|
-
const iv = this.iv;
|
|
255
|
-
if (iv === undefined) {
|
|
256
|
-
// iv has passed the maximum iteration count for this dek
|
|
257
|
-
throw new ConfigurationError('dataset full');
|
|
258
|
-
}
|
|
259
|
-
// assert iv ∈ ℤ ∩ (0, 2^24)
|
|
260
|
-
if (!Number.isInteger(iv) || iv <= 0 || 0xff_ffff < iv) {
|
|
261
|
-
// Something has fiddled with the iv outside of the expected behavior
|
|
262
|
-
// could indicate a race condition, e.g. if two workers or handlers are
|
|
263
|
-
// processing the file at once, for example.
|
|
264
|
-
throw new Error('internal: invalid state');
|
|
265
|
-
}
|
|
266
|
-
const lengthAsUint32 = new Uint32Array(1);
|
|
267
|
-
lengthAsUint32[0] = iv;
|
|
268
|
-
const lengthAsUint24 = new Uint8Array(lengthAsUint32.buffer);
|
|
269
|
-
// NOTE: We are only interested in only first 3 bytes.
|
|
270
|
-
const ivVector = new Uint8Array(Client.IV_SIZE).fill(0);
|
|
271
|
-
ivVector[9] = lengthAsUint24[2];
|
|
272
|
-
ivVector[10] = lengthAsUint24[1];
|
|
273
|
-
ivVector[11] = lengthAsUint24[0];
|
|
274
|
-
// Increment the IV
|
|
275
|
-
if (iv == 0xff_ffff) {
|
|
276
|
-
delete this.iv;
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
this.iv = iv + 1;
|
|
280
|
-
}
|
|
281
|
-
return ivVector;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
// Total unique IVs(2^24 -1) used for encrypting the nano tdf payloads
|
|
285
|
-
// IV starts from 1 since the 0 IV is reserved for policy encryption
|
|
286
|
-
NanoTDFDatasetClient.NTDF_MAX_KEY_ITERATIONS = 8388606;
|
|
287
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFub2NsaWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmFub2NsaWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE1BQU0sRUFDTixPQUFPLEVBRVAsT0FBTyxFQUNQLE9BQU8sRUFDUCxjQUFjLEVBQ2QsV0FBVyxFQUNYLGFBQWEsR0FDZCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVFqRCx5QkFBeUI7QUFDekIsTUFBTSxjQUFjLEdBQW1CO0lBQ3JDLFlBQVksRUFBRSxLQUFLO0NBQ3BCLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLE1BQU07SUFDdkM7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFvQztRQUNoRCxtQkFBbUI7UUFDbkIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV6QywwREFBMEQ7UUFDMUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFaEQsOEJBQThCO1FBQzlCLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUNqRCxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUN6QixNQUFNLEVBQ04sT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFDakMsT0FBTyxDQUNSLENBQUM7UUFFRixJQUFJ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
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export * as AuthProviders from './auth/providers.js';
|
|
2
|
-
export { attributeFQNsAsValues } from './policy/api.js';
|
|
3
|
-
export * from './nanoclients.js';
|
|
4
|
-
export { version, clientType } from './version.js';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFub2luZGV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25hbm9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssYUFBYSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELGNBQWMsa0JBQWtCLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUMifQ==
|