@opentdf/sdk 0.1.0-beta.1718 → 0.2.0-beta.1941
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 +45 -38
- package/dist/cjs/src/access.js +99 -62
- package/dist/cjs/src/auth/auth.js +5 -26
- package/dist/cjs/src/auth/oidc-clientcredentials-provider.js +1 -1
- package/dist/cjs/src/auth/oidc-externaljwt-provider.js +1 -1
- package/dist/cjs/src/auth/oidc-refreshtoken-provider.js +1 -1
- package/dist/cjs/src/auth/oidc.js +1 -1
- package/dist/cjs/src/auth/providers.js +1 -1
- package/dist/cjs/src/concurrency.js +3 -4
- package/dist/cjs/src/encodings/base64.js +4 -4
- package/dist/cjs/src/encodings/hex.js +5 -6
- package/dist/cjs/src/encodings/index.js +18 -8
- package/dist/cjs/src/errors.js +1 -1
- package/dist/cjs/src/index.js +28 -320
- package/dist/cjs/src/nanoclients.js +285 -0
- package/dist/cjs/src/nanoindex.js +47 -0
- package/dist/cjs/src/nanotdf/Client.js +35 -30
- package/dist/cjs/src/nanotdf/NanoTDF.js +1 -1
- package/dist/cjs/src/nanotdf/decrypt.js +2 -2
- package/dist/cjs/src/nanotdf/encrypt-dataset.js +2 -2
- package/dist/cjs/src/nanotdf/encrypt.js +2 -2
- package/dist/cjs/src/nanotdf/helpers/calculateByCurve.js +3 -4
- package/dist/cjs/src/nanotdf/helpers/getHkdfSalt.js +2 -2
- package/dist/cjs/src/nanotdf/models/Ciphers.js +3 -3
- package/dist/cjs/src/nanotdf/models/EcCurves.js +3 -3
- package/dist/cjs/src/nanotdf/models/Header.js +1 -1
- package/dist/cjs/src/nanotdf/models/Payload.js +1 -1
- package/dist/cjs/src/nanotdf/models/Policy/AbstractPolicy.js +1 -1
- package/dist/cjs/src/nanotdf/models/Policy/EmbeddedPolicy.js +1 -1
- package/dist/cjs/src/nanotdf/models/Policy/PolicyFactory.js +1 -1
- package/dist/cjs/src/nanotdf/models/ResourceLocator.js +1 -1
- package/dist/cjs/src/nanotdf/models/Signature.js +1 -1
- package/dist/cjs/src/nanotdf-crypto/ciphers.js +1 -1
- package/dist/cjs/src/nanotdf-crypto/decrypt.js +2 -2
- package/dist/cjs/src/nanotdf-crypto/digest.js +2 -2
- package/dist/cjs/src/nanotdf-crypto/ecdsaSignature.js +4 -5
- package/dist/cjs/src/nanotdf-crypto/encrypt.js +2 -2
- package/dist/cjs/src/nanotdf-crypto/exportCryptoKey.js +2 -2
- package/dist/cjs/src/nanotdf-crypto/generateKeyPair.js +2 -2
- package/dist/cjs/src/nanotdf-crypto/generateRandomNumber.js +2 -2
- package/dist/cjs/src/nanotdf-crypto/index.js +21 -13
- package/dist/cjs/src/nanotdf-crypto/keyAgreement.js +10 -8
- package/dist/cjs/src/nanotdf-crypto/pemPublicToCrypto.js +20 -11
- package/dist/cjs/src/opentdf.js +243 -0
- package/dist/cjs/src/policy/api.js +2 -3
- package/dist/cjs/src/policy/granter.js +3 -4
- package/dist/cjs/src/seekable.js +157 -0
- package/dist/cjs/src/tdf/AttributeObject.js +2 -4
- package/dist/cjs/src/tdf/Policy.js +3 -3
- package/dist/cjs/src/utils.js +13 -21
- package/dist/cjs/src/version.js +7 -3
- package/dist/cjs/tdf3/index.js +27 -16
- package/dist/cjs/tdf3/src/assertions.js +25 -11
- package/dist/cjs/tdf3/src/binary.js +1 -1
- package/dist/cjs/tdf3/src/ciphers/aes-gcm-cipher.js +1 -1
- package/dist/cjs/tdf3/src/ciphers/symmetric-cipher-base.js +1 -1
- package/dist/cjs/tdf3/src/client/DecoratedReadableStream.js +7 -74
- package/dist/cjs/tdf3/src/client/builders.js +26 -22
- package/dist/cjs/tdf3/src/client/index.js +91 -117
- package/dist/cjs/tdf3/src/client/validation.js +3 -3
- package/dist/cjs/tdf3/src/crypto/crypto-utils.js +1 -1
- package/dist/cjs/tdf3/src/crypto/index.js +18 -18
- package/dist/cjs/tdf3/src/index.js +22 -11
- package/dist/cjs/tdf3/src/models/attribute-set.js +1 -1
- package/dist/cjs/tdf3/src/models/encryption-information.js +3 -3
- package/dist/cjs/tdf3/src/models/index.js +1 -2
- package/dist/cjs/tdf3/src/models/key-access.js +67 -35
- package/dist/cjs/tdf3/src/models/policy.js +3 -3
- package/dist/cjs/tdf3/src/tdf.js +180 -395
- package/dist/cjs/tdf3/src/utils/buffer-crc32.js +2 -3
- package/dist/cjs/tdf3/src/utils/index.js +48 -38
- package/dist/cjs/tdf3/src/utils/keysplit.js +4 -5
- package/dist/cjs/tdf3/src/utils/unwrap.js +21 -0
- package/dist/cjs/tdf3/src/utils/zip-reader.js +4 -4
- package/dist/cjs/tdf3/src/utils/zip-writer.js +4 -4
- package/dist/types/src/access.d.ts +10 -4
- package/dist/types/src/access.d.ts.map +1 -1
- package/dist/types/src/auth/auth.d.ts +1 -28
- package/dist/types/src/auth/auth.d.ts.map +1 -1
- package/dist/types/src/auth/providers.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +5 -136
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/nanoclients.d.ts +107 -0
- package/dist/types/src/nanoclients.d.ts.map +1 -0
- package/dist/types/src/nanoindex.d.ts +5 -0
- package/dist/types/src/nanoindex.d.ts.map +1 -0
- package/dist/types/src/nanotdf/Client.d.ts +1 -13
- package/dist/types/src/nanotdf/Client.d.ts.map +1 -1
- package/dist/types/src/nanotdf/NanoTDF.d.ts +1 -1
- package/dist/types/src/nanotdf/NanoTDF.d.ts.map +1 -1
- package/dist/types/src/nanotdf/encrypt-dataset.d.ts +1 -1
- package/dist/types/src/nanotdf/encrypt-dataset.d.ts.map +1 -1
- package/dist/types/src/nanotdf/encrypt.d.ts +1 -1
- package/dist/types/src/nanotdf/encrypt.d.ts.map +1 -1
- package/dist/types/src/nanotdf/enum/CipherEnum.d.ts +1 -1
- package/dist/types/src/nanotdf/enum/CipherEnum.d.ts.map +1 -1
- package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts +1 -1
- package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts.map +1 -1
- package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts +1 -1
- package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts.map +1 -1
- package/dist/types/src/nanotdf/models/DefaultParams.d.ts +1 -1
- package/dist/types/src/nanotdf/models/ResourceLocator.d.ts.map +1 -1
- package/dist/types/src/nanotdf-crypto/digest.d.ts +1 -1
- package/dist/types/src/nanotdf-crypto/digest.d.ts.map +1 -1
- package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts +1 -1
- package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts.map +1 -1
- package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts +1 -1
- package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts.map +1 -1
- package/dist/types/src/nanotdf-crypto/index.d.ts +2 -3
- package/dist/types/src/nanotdf-crypto/index.d.ts.map +1 -1
- package/dist/types/src/nanotdf-crypto/keyAgreement.d.ts.map +1 -1
- package/dist/types/src/opentdf.d.ts +106 -0
- package/dist/types/src/opentdf.d.ts.map +1 -0
- package/dist/types/src/seekable.d.ts +39 -0
- package/dist/types/src/seekable.d.ts.map +1 -0
- package/dist/types/src/tdf/AttributeObject.d.ts +0 -2
- package/dist/types/src/tdf/AttributeObject.d.ts.map +1 -1
- package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts +2 -2
- package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts.map +1 -1
- package/dist/types/src/tdf/Policy.d.ts +1 -1
- package/dist/types/src/tdf/Policy.d.ts.map +1 -1
- package/dist/types/src/tdf/PolicyObject.d.ts +1 -2
- package/dist/types/src/tdf/PolicyObject.d.ts.map +1 -1
- package/dist/types/src/tdf/TypedArray.d.ts +1 -2
- package/dist/types/src/tdf/TypedArray.d.ts.map +1 -1
- package/dist/types/src/utils.d.ts +1 -3
- package/dist/types/src/utils.d.ts.map +1 -1
- package/dist/types/src/version.d.ts +5 -1
- package/dist/types/src/version.d.ts.map +1 -1
- package/dist/types/tdf3/index.d.ts +5 -4
- package/dist/types/tdf3/index.d.ts.map +1 -1
- package/dist/types/tdf3/src/assertions.d.ts +3 -3
- package/dist/types/tdf3/src/assertions.d.ts.map +1 -1
- package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts +2 -15
- package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts.map +1 -1
- package/dist/types/tdf3/src/client/builders.d.ts +43 -42
- package/dist/types/tdf3/src/client/builders.d.ts.map +1 -1
- package/dist/types/tdf3/src/client/index.d.ts +12 -17
- package/dist/types/tdf3/src/client/index.d.ts.map +1 -1
- package/dist/types/tdf3/src/client/validation.d.ts +3 -3
- package/dist/types/tdf3/src/client/validation.d.ts.map +1 -1
- package/dist/types/tdf3/src/crypto/crypto-utils.d.ts.map +1 -1
- package/dist/types/tdf3/src/index.d.ts +1 -1
- package/dist/types/tdf3/src/index.d.ts.map +1 -1
- package/dist/types/tdf3/src/models/index.d.ts +0 -1
- package/dist/types/tdf3/src/models/index.d.ts.map +1 -1
- package/dist/types/tdf3/src/models/key-access.d.ts +63 -15
- package/dist/types/tdf3/src/models/key-access.d.ts.map +1 -1
- package/dist/types/tdf3/src/models/manifest.d.ts +2 -0
- package/dist/types/tdf3/src/models/manifest.d.ts.map +1 -1
- package/dist/types/tdf3/src/models/policy.d.ts +0 -1
- package/dist/types/tdf3/src/models/policy.d.ts.map +1 -1
- package/dist/types/tdf3/src/tdf.d.ts +24 -37
- package/dist/types/tdf3/src/tdf.d.ts.map +1 -1
- package/dist/types/tdf3/src/utils/index.d.ts +0 -4
- package/dist/types/tdf3/src/utils/index.d.ts.map +1 -1
- package/dist/types/tdf3/src/utils/unwrap.d.ts +2 -0
- package/dist/types/tdf3/src/utils/unwrap.d.ts.map +1 -0
- package/dist/types/tdf3/src/utils/zip-reader.d.ts +1 -1
- package/dist/types/tdf3/src/utils/zip-reader.d.ts.map +1 -1
- package/dist/types/tdf3/src/utils/zip-writer.d.ts +2 -2
- package/dist/web/src/access.js +93 -58
- package/dist/web/src/auth/auth.js +1 -21
- package/dist/web/src/auth/oidc-clientcredentials-provider.js +1 -1
- package/dist/web/src/auth/oidc-externaljwt-provider.js +1 -1
- package/dist/web/src/auth/oidc-refreshtoken-provider.js +1 -1
- package/dist/web/src/auth/oidc.js +1 -1
- package/dist/web/src/auth/providers.js +1 -1
- package/dist/web/src/concurrency.js +1 -1
- package/dist/web/src/encodings/base64.js +1 -1
- package/dist/web/src/encodings/hex.js +1 -1
- package/dist/web/src/errors.js +1 -1
- package/dist/web/src/index.js +6 -312
- package/dist/web/src/nanoclients.js +280 -0
- package/dist/web/src/nanoindex.js +5 -0
- package/dist/web/src/nanotdf/Client.js +18 -23
- package/dist/web/src/nanotdf/NanoTDF.js +1 -1
- package/dist/web/src/nanotdf/encrypt-dataset.js +1 -1
- package/dist/web/src/nanotdf/encrypt.js +1 -1
- package/dist/web/src/nanotdf/models/Ciphers.js +1 -1
- package/dist/web/src/nanotdf/models/EcCurves.js +1 -1
- package/dist/web/src/nanotdf/models/Header.js +1 -1
- package/dist/web/src/nanotdf/models/Payload.js +1 -1
- package/dist/web/src/nanotdf/models/Policy/AbstractPolicy.js +1 -1
- package/dist/web/src/nanotdf/models/Policy/EmbeddedPolicy.js +1 -1
- package/dist/web/src/nanotdf/models/Policy/PolicyFactory.js +1 -1
- package/dist/web/src/nanotdf/models/ResourceLocator.js +1 -1
- package/dist/web/src/nanotdf/models/Signature.js +1 -1
- package/dist/web/src/nanotdf-crypto/ciphers.js +1 -1
- package/dist/web/src/nanotdf-crypto/ecdsaSignature.js +1 -1
- package/dist/web/src/nanotdf-crypto/generateKeyPair.js +2 -2
- package/dist/web/src/nanotdf-crypto/generateRandomNumber.js +2 -2
- package/dist/web/src/nanotdf-crypto/index.js +3 -4
- package/dist/web/src/nanotdf-crypto/keyAgreement.js +9 -6
- package/dist/web/src/nanotdf-crypto/pemPublicToCrypto.js +1 -1
- package/dist/web/src/opentdf.js +234 -0
- package/dist/web/src/policy/api.js +1 -1
- package/dist/web/src/policy/granter.js +1 -1
- package/dist/web/src/seekable.js +148 -0
- package/dist/web/src/tdf/AttributeObject.js +1 -2
- package/dist/web/src/tdf/Policy.js +2 -4
- package/dist/web/src/utils.js +3 -10
- package/dist/web/src/version.js +6 -2
- package/dist/web/tdf3/index.js +5 -4
- package/dist/web/tdf3/src/assertions.js +21 -6
- package/dist/web/tdf3/src/binary.js +1 -1
- package/dist/web/tdf3/src/ciphers/aes-gcm-cipher.js +1 -1
- package/dist/web/tdf3/src/ciphers/symmetric-cipher-base.js +1 -1
- package/dist/web/tdf3/src/client/DecoratedReadableStream.js +4 -68
- package/dist/web/tdf3/src/client/builders.js +26 -22
- package/dist/web/tdf3/src/client/index.js +74 -105
- package/dist/web/tdf3/src/client/validation.js +1 -1
- package/dist/web/tdf3/src/crypto/crypto-utils.js +1 -1
- package/dist/web/tdf3/src/crypto/index.js +1 -1
- package/dist/web/tdf3/src/index.js +2 -2
- package/dist/web/tdf3/src/models/attribute-set.js +1 -1
- package/dist/web/tdf3/src/models/encryption-information.js +3 -3
- package/dist/web/tdf3/src/models/index.js +1 -2
- package/dist/web/tdf3/src/models/key-access.js +47 -24
- package/dist/web/tdf3/src/models/policy.js +1 -1
- package/dist/web/tdf3/src/tdf.js +153 -371
- package/dist/web/tdf3/src/utils/buffer-crc32.js +1 -1
- package/dist/web/tdf3/src/utils/index.js +19 -14
- package/dist/web/tdf3/src/utils/keysplit.js +1 -1
- package/dist/web/tdf3/src/utils/unwrap.js +18 -0
- package/dist/web/tdf3/src/utils/zip-reader.js +1 -1
- package/dist/web/tdf3/src/utils/zip-writer.js +1 -1
- package/package.json +45 -45
- package/src/access.ts +111 -54
- package/src/auth/auth.ts +1 -31
- package/src/index.ts +5 -440
- package/src/nanoclients.ts +405 -0
- package/src/nanoindex.ts +4 -0
- package/src/nanotdf/Client.ts +18 -25
- package/src/nanotdf/NanoTDF.ts +1 -1
- package/src/nanotdf/encrypt-dataset.ts +1 -1
- package/src/nanotdf/encrypt.ts +1 -1
- package/src/nanotdf/helpers/getHkdfSalt.ts +1 -1
- package/src/nanotdf-crypto/digest.ts +1 -1
- package/src/nanotdf-crypto/generateKeyPair.ts +1 -1
- package/src/nanotdf-crypto/generateRandomNumber.ts +1 -1
- package/src/nanotdf-crypto/index.ts +2 -3
- package/src/nanotdf-crypto/keyAgreement.ts +14 -7
- package/src/opentdf.ts +441 -0
- package/src/seekable.ts +180 -0
- package/src/tdf/AttributeObject.ts +0 -3
- package/src/tdf/Policy.ts +1 -2
- package/src/tdf/PolicyObject.ts +1 -2
- package/src/tdf/TypedArray.ts +1 -3
- package/src/utils.ts +3 -11
- package/src/version.ts +6 -1
- package/tdf3/index.ts +15 -10
- package/tdf3/src/assertions.ts +33 -8
- package/tdf3/src/client/DecoratedReadableStream.ts +3 -80
- package/tdf3/src/client/builders.ts +44 -28
- package/tdf3/src/client/index.ts +109 -165
- package/tdf3/src/index.ts +1 -1
- package/tdf3/src/models/encryption-information.ts +2 -2
- package/tdf3/src/models/index.ts +0 -1
- package/tdf3/src/models/key-access.ts +120 -38
- package/tdf3/src/models/manifest.ts +3 -0
- package/tdf3/src/models/policy.ts +0 -1
- package/tdf3/src/tdf.ts +266 -522
- package/tdf3/src/utils/index.ts +19 -18
- package/tdf3/src/utils/unwrap.ts +17 -0
- package/tdf3/src/utils/zip-reader.ts +1 -1
- package/dist/cjs/src/auth/Eas.js +0 -60
- package/dist/cjs/src/nanotdf-crypto/importRawKey.js +0 -18
- package/dist/cjs/src/tdf/Crypto.js +0 -47
- package/dist/cjs/src/tdf/EntityObject.js +0 -3
- package/dist/cjs/src/tdf/index.js +0 -35
- package/dist/cjs/tdf3/src/models/upsert-response.js +0 -3
- package/dist/cjs/tdf3/src/templates/default.html.js +0 -98
- package/dist/cjs/tdf3/src/templates/escaper.js +0 -15
- package/dist/cjs/tdf3/src/templates/index.js +0 -12
- package/dist/cjs/tdf3/src/utils/chunkers.js +0 -106
- package/dist/cjs/tdf3/src/version.js +0 -6
- package/dist/types/src/auth/Eas.d.ts +0 -34
- package/dist/types/src/auth/Eas.d.ts.map +0 -1
- package/dist/types/src/nanotdf-crypto/importRawKey.d.ts +0 -13
- package/dist/types/src/nanotdf-crypto/importRawKey.d.ts.map +0 -1
- package/dist/types/src/tdf/Crypto.d.ts +0 -37
- package/dist/types/src/tdf/Crypto.d.ts.map +0 -1
- package/dist/types/src/tdf/EntityObject.d.ts +0 -18
- package/dist/types/src/tdf/EntityObject.d.ts.map +0 -1
- package/dist/types/src/tdf/index.d.ts +0 -7
- package/dist/types/src/tdf/index.d.ts.map +0 -1
- package/dist/types/tdf3/src/models/upsert-response.d.ts +0 -16
- package/dist/types/tdf3/src/models/upsert-response.d.ts.map +0 -1
- package/dist/types/tdf3/src/templates/default.html.d.ts +0 -8
- package/dist/types/tdf3/src/templates/default.html.d.ts.map +0 -1
- package/dist/types/tdf3/src/templates/escaper.d.ts +0 -6
- package/dist/types/tdf3/src/templates/escaper.d.ts.map +0 -1
- package/dist/types/tdf3/src/templates/index.d.ts +0 -3
- package/dist/types/tdf3/src/templates/index.d.ts.map +0 -1
- package/dist/types/tdf3/src/utils/chunkers.d.ts +0 -29
- package/dist/types/tdf3/src/utils/chunkers.d.ts.map +0 -1
- package/dist/types/tdf3/src/version.d.ts +0 -3
- package/dist/types/tdf3/src/version.d.ts.map +0 -1
- package/dist/web/src/auth/Eas.js +0 -55
- package/dist/web/src/nanotdf-crypto/importRawKey.js +0 -15
- package/dist/web/src/tdf/Crypto.js +0 -44
- package/dist/web/src/tdf/EntityObject.js +0 -2
- package/dist/web/src/tdf/index.js +0 -4
- package/dist/web/tdf3/src/models/upsert-response.js +0 -2
- package/dist/web/tdf3/src/templates/default.html.js +0 -96
- package/dist/web/tdf3/src/templates/escaper.js +0 -10
- package/dist/web/tdf3/src/templates/index.js +0 -3
- package/dist/web/tdf3/src/utils/chunkers.js +0 -96
- package/dist/web/tdf3/src/version.js +0 -3
- package/src/auth/Eas.ts +0 -79
- package/src/nanotdf-crypto/importRawKey.ts +0 -19
- package/src/tdf/Crypto.ts +0 -42
- package/src/tdf/EntityObject.ts +0 -18
- package/src/tdf/index.ts +0 -6
- package/tdf3/src/models/upsert-response.ts +0 -17
- package/tdf3/src/templates/default.html.ts +0 -105
- package/tdf3/src/templates/escaper.ts +0 -10
- package/tdf3/src/templates/index.ts +0 -2
- package/tdf3/src/utils/chunkers.ts +0 -118
- package/tdf3/src/version.ts +0 -2
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
import { Binary } from '../binary.js';
|
|
2
1
|
import { base64, hex } from '../../../src/encodings/index.js';
|
|
2
|
+
import { generateRandomNumber } from '../../../src/nanotdf-crypto/generateRandomNumber.js';
|
|
3
|
+
import { keyAgreement } from '../../../src/nanotdf-crypto/keyAgreement.js';
|
|
4
|
+
import { pemPublicToCrypto } from '../../../src/nanotdf-crypto/pemPublicToCrypto.js';
|
|
5
|
+
import { cryptoPublicToPem } from '../../../src/utils.js';
|
|
6
|
+
import { Binary } from '../binary.js';
|
|
3
7
|
import * as cryptoService from '../crypto/index.js';
|
|
4
8
|
import { Policy } from './policy.js';
|
|
5
9
|
|
|
6
|
-
export type KeyAccessType = 'remote' | 'wrapped';
|
|
10
|
+
export type KeyAccessType = 'remote' | 'wrapped' | 'ec-wrapped';
|
|
7
11
|
|
|
8
|
-
export
|
|
9
|
-
return keyAccessJSON.type === 'remote';
|
|
10
|
-
}
|
|
12
|
+
export const schemaVersion = '1.0';
|
|
11
13
|
|
|
12
|
-
export class
|
|
13
|
-
readonly type = 'wrapped';
|
|
14
|
+
export class ECWrapped {
|
|
15
|
+
readonly type = 'ec-wrapped';
|
|
16
|
+
readonly ephemeralKeyPair: Promise<CryptoKeyPair>;
|
|
14
17
|
keyAccessObject?: KeyAccessObject;
|
|
15
18
|
|
|
16
19
|
constructor(
|
|
@@ -18,60 +21,78 @@ export class Wrapped {
|
|
|
18
21
|
public readonly kid: string | undefined,
|
|
19
22
|
public readonly publicKey: string,
|
|
20
23
|
public readonly metadata: unknown,
|
|
21
|
-
public readonly sid
|
|
22
|
-
) {
|
|
24
|
+
public readonly sid?: string
|
|
25
|
+
) {
|
|
26
|
+
this.ephemeralKeyPair = crypto.subtle.generateKey(
|
|
27
|
+
{
|
|
28
|
+
name: 'ECDH',
|
|
29
|
+
namedCurve: 'P-256',
|
|
30
|
+
},
|
|
31
|
+
false,
|
|
32
|
+
['deriveBits', 'deriveKey']
|
|
33
|
+
);
|
|
34
|
+
}
|
|
23
35
|
|
|
24
36
|
async write(
|
|
25
37
|
policy: Policy,
|
|
26
|
-
|
|
38
|
+
dek: Uint8Array,
|
|
27
39
|
encryptedMetadataStr: string
|
|
28
40
|
): Promise<KeyAccessObject> {
|
|
29
41
|
const policyStr = JSON.stringify(policy);
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
42
|
+
const [ek, clientPublicKey] = await Promise.all([
|
|
43
|
+
this.ephemeralKeyPair,
|
|
44
|
+
pemPublicToCrypto(this.publicKey),
|
|
45
|
+
]);
|
|
46
|
+
const kek = await keyAgreement(ek.privateKey, clientPublicKey, {
|
|
47
|
+
hkdfSalt: new TextEncoder().encode('salt'),
|
|
48
|
+
hkdfHash: 'SHA-256',
|
|
49
|
+
});
|
|
50
|
+
const iv = generateRandomNumber(12);
|
|
51
|
+
const cek = await crypto.subtle.encrypt({ name: 'AES-GCM', iv, tagLength: 128 }, kek, dek);
|
|
52
|
+
const entityWrappedKey = new Uint8Array(iv.length + cek.byteLength);
|
|
53
|
+
entityWrappedKey.set(iv);
|
|
54
|
+
entityWrappedKey.set(new Uint8Array(cek), iv.length);
|
|
35
55
|
|
|
36
56
|
const policyBinding = await cryptoService.hmac(
|
|
37
|
-
hex.encodeArrayBuffer(
|
|
57
|
+
hex.encodeArrayBuffer(dek),
|
|
38
58
|
base64.encode(policyStr)
|
|
39
59
|
);
|
|
40
60
|
|
|
41
|
-
|
|
42
|
-
|
|
61
|
+
const ephemeralPublicKeyPEM = await cryptoPublicToPem(ek.publicKey);
|
|
62
|
+
const kao: KeyAccessObject = {
|
|
63
|
+
type: 'ec-wrapped',
|
|
43
64
|
url: this.url,
|
|
44
65
|
protocol: 'kas',
|
|
45
|
-
wrappedKey: base64.
|
|
66
|
+
wrappedKey: base64.encodeArrayBuffer(entityWrappedKey),
|
|
46
67
|
encryptedMetadata: base64.encode(encryptedMetadataStr),
|
|
47
68
|
policyBinding: {
|
|
48
69
|
alg: 'HS256',
|
|
49
70
|
hash: base64.encode(policyBinding),
|
|
50
71
|
},
|
|
72
|
+
schemaVersion,
|
|
73
|
+
ephemeralPublicKey: ephemeralPublicKeyPEM,
|
|
51
74
|
};
|
|
52
75
|
if (this.kid) {
|
|
53
|
-
|
|
76
|
+
kao.kid = this.kid;
|
|
54
77
|
}
|
|
55
78
|
if (this.sid?.length) {
|
|
56
|
-
|
|
79
|
+
kao.sid = this.sid;
|
|
57
80
|
}
|
|
58
|
-
|
|
59
|
-
return
|
|
81
|
+
this.keyAccessObject = kao;
|
|
82
|
+
return kao;
|
|
60
83
|
}
|
|
61
84
|
}
|
|
62
85
|
|
|
63
|
-
export class
|
|
64
|
-
readonly type = '
|
|
86
|
+
export class Wrapped {
|
|
87
|
+
readonly type = 'wrapped';
|
|
65
88
|
keyAccessObject?: KeyAccessObject;
|
|
66
|
-
wrappedKey?: string;
|
|
67
|
-
policyBinding?: string;
|
|
68
89
|
|
|
69
90
|
constructor(
|
|
70
91
|
public readonly url: string,
|
|
71
92
|
public readonly kid: string | undefined,
|
|
72
93
|
public readonly publicKey: string,
|
|
73
94
|
public readonly metadata: unknown,
|
|
74
|
-
public readonly sid
|
|
95
|
+
public readonly sid?: string
|
|
75
96
|
) {}
|
|
76
97
|
|
|
77
98
|
async write(
|
|
@@ -80,49 +101,110 @@ export class Remote {
|
|
|
80
101
|
encryptedMetadataStr: string
|
|
81
102
|
): Promise<KeyAccessObject> {
|
|
82
103
|
const policyStr = JSON.stringify(policy);
|
|
83
|
-
const policyBinding = await cryptoService.hmac(
|
|
84
|
-
hex.encodeArrayBuffer(keyBuffer),
|
|
85
|
-
base64.encode(policyStr)
|
|
86
|
-
);
|
|
87
104
|
const unwrappedKeyBinary = Binary.fromArrayBuffer(keyBuffer.buffer);
|
|
88
105
|
const wrappedKeyBinary = await cryptoService.encryptWithPublicKey(
|
|
89
106
|
unwrappedKeyBinary,
|
|
90
107
|
this.publicKey
|
|
91
108
|
);
|
|
92
109
|
|
|
93
|
-
|
|
94
|
-
|
|
110
|
+
const policyBinding = await cryptoService.hmac(
|
|
111
|
+
hex.encodeArrayBuffer(keyBuffer),
|
|
112
|
+
base64.encode(policyStr)
|
|
113
|
+
);
|
|
95
114
|
|
|
96
115
|
this.keyAccessObject = {
|
|
97
|
-
type: '
|
|
116
|
+
type: 'wrapped',
|
|
98
117
|
url: this.url,
|
|
99
118
|
protocol: 'kas',
|
|
100
|
-
wrappedKey:
|
|
119
|
+
wrappedKey: base64.encode(wrappedKeyBinary.asString()),
|
|
101
120
|
encryptedMetadata: base64.encode(encryptedMetadataStr),
|
|
102
121
|
policyBinding: {
|
|
103
122
|
alg: 'HS256',
|
|
104
123
|
hash: base64.encode(policyBinding),
|
|
105
124
|
},
|
|
125
|
+
schemaVersion,
|
|
106
126
|
};
|
|
107
127
|
if (this.kid) {
|
|
108
128
|
this.keyAccessObject.kid = this.kid;
|
|
109
129
|
}
|
|
130
|
+
if (this.sid?.length) {
|
|
131
|
+
this.keyAccessObject.sid = this.sid;
|
|
132
|
+
}
|
|
133
|
+
|
|
110
134
|
return this.keyAccessObject;
|
|
111
135
|
}
|
|
112
136
|
}
|
|
113
137
|
|
|
114
|
-
export type KeyAccess =
|
|
138
|
+
export type KeyAccess = ECWrapped | Wrapped;
|
|
115
139
|
|
|
140
|
+
/**
|
|
141
|
+
* A KeyAccess object stores all information about how an object key OR one key split is stored.
|
|
142
|
+
*/
|
|
116
143
|
export type KeyAccessObject = {
|
|
117
|
-
|
|
144
|
+
/**
|
|
145
|
+
* Specifies how the key is stored. Possible Values:
|
|
146
|
+
* **wrapped**: The wrapped key is stored as part of the manifest.
|
|
147
|
+
* **remote**: [Unsupported] The wrapped key (see below) is stored remotely and is thus not part of the final TDF manifest.
|
|
148
|
+
*/
|
|
118
149
|
type: KeyAccessType;
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* A key split (or share) identifier.
|
|
153
|
+
* To allow sharing a key across several access domains,
|
|
154
|
+
* the KAO supports a 'Split Identifier'.
|
|
155
|
+
* To reconstruct such a key when encryptionInformation type is 'split',
|
|
156
|
+
* use the xor operation to combine one of each separate sid.
|
|
157
|
+
*/
|
|
158
|
+
sid?: string;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* A locator for a Key Access service capable of granting access to the wrapped key.
|
|
162
|
+
*/
|
|
119
163
|
url: string;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Additional information for the Key Access service to identify how to unwrap the key.
|
|
167
|
+
*/
|
|
120
168
|
kid?: string;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* The protocol used to access the key.
|
|
172
|
+
*/
|
|
121
173
|
protocol: 'kas';
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* The symmetric key used to encrypt the payload.
|
|
177
|
+
* It is encrypted using the public key of the KAS,
|
|
178
|
+
* then base64 encoded.
|
|
179
|
+
*/
|
|
122
180
|
wrappedKey?: string;
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* An object that contains a keyed hash that will provide cryptographic integrity on the policy object,
|
|
184
|
+
* such that it cannot be modified or copied to another TDF
|
|
185
|
+
* without invalidating the binding.
|
|
186
|
+
* Specifically, you would have to have access to the key in order to overwrite the policy.
|
|
187
|
+
*/
|
|
123
188
|
policyBinding?: {
|
|
124
189
|
alg: string;
|
|
125
190
|
hash: string;
|
|
126
191
|
};
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Metadata associated with the TDF and the request.
|
|
195
|
+
* The contents of the metadata are freeform,
|
|
196
|
+
* and are used to pass information from the client to the KAS.
|
|
197
|
+
* The metadata stored here should not be used for primary access decisions.
|
|
198
|
+
*/
|
|
127
199
|
encryptedMetadata?: string;
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Version information for the KAO format.
|
|
203
|
+
*/
|
|
204
|
+
schemaVersion?: string;
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* PEM encoded ephemeral public key, if wrapped with a KAS EC key.
|
|
208
|
+
*/
|
|
209
|
+
ephemeralPublicKey?: string;
|
|
128
210
|
};
|