@opentdf/sdk 0.1.0-beta.1701
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 +52 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/src/access.js +155 -0
- package/dist/cjs/src/auth/Eas.js +60 -0
- package/dist/cjs/src/auth/auth.js +79 -0
- package/dist/cjs/src/auth/oidc-clientcredentials-provider.js +26 -0
- package/dist/cjs/src/auth/oidc-externaljwt-provider.js +33 -0
- package/dist/cjs/src/auth/oidc-refreshtoken-provider.js +34 -0
- package/dist/cjs/src/auth/oidc.js +222 -0
- package/dist/cjs/src/auth/providers.js +143 -0
- package/dist/cjs/src/encodings/base64.js +154 -0
- package/dist/cjs/src/encodings/hex.js +70 -0
- package/dist/cjs/src/encodings/index.js +29 -0
- package/dist/cjs/src/errors.js +138 -0
- package/dist/cjs/src/index.js +344 -0
- package/dist/cjs/src/nanotdf/Client.js +296 -0
- package/dist/cjs/src/nanotdf/NanoTDF.js +94 -0
- package/dist/cjs/src/nanotdf/browser-entry.js +19 -0
- package/dist/cjs/src/nanotdf/constants.js +5 -0
- package/dist/cjs/src/nanotdf/decrypt.js +17 -0
- package/dist/cjs/src/nanotdf/encrypt-dataset.js +38 -0
- package/dist/cjs/src/nanotdf/encrypt.js +132 -0
- package/dist/cjs/src/nanotdf/enum/CipherEnum.js +13 -0
- package/dist/cjs/src/nanotdf/enum/CurveNameEnum.js +15 -0
- package/dist/cjs/src/nanotdf/enum/EncodingEnum.js +8 -0
- package/dist/cjs/src/nanotdf/enum/PolicyTypeEnum.js +11 -0
- package/dist/cjs/src/nanotdf/enum/ProtocolEnum.js +10 -0
- package/dist/cjs/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +11 -0
- package/dist/cjs/src/nanotdf/helpers/calculateByCurve.js +29 -0
- package/dist/cjs/src/nanotdf/helpers/getHkdfSalt.js +11 -0
- package/dist/cjs/src/nanotdf/index.js +25 -0
- package/dist/cjs/src/nanotdf/interfaces/PolicyInterface.js +3 -0
- package/dist/cjs/src/nanotdf/models/Ciphers.js +61 -0
- package/dist/cjs/src/nanotdf/models/DefaultParams.js +27 -0
- package/dist/cjs/src/nanotdf/models/EcCurves.js +39 -0
- package/dist/cjs/src/nanotdf/models/Header.js +255 -0
- package/dist/cjs/src/nanotdf/models/Payload.js +158 -0
- package/dist/cjs/src/nanotdf/models/Policy/AbstractPolicy.js +73 -0
- package/dist/cjs/src/nanotdf/models/Policy/EmbeddedPolicy.js +82 -0
- package/dist/cjs/src/nanotdf/models/Policy/PolicyFactory.js +38 -0
- package/dist/cjs/src/nanotdf/models/Policy/RemotePolicy.js +62 -0
- package/dist/cjs/src/nanotdf/models/ResourceLocator.js +211 -0
- package/dist/cjs/src/nanotdf/models/Signature.js +77 -0
- package/dist/cjs/src/nanotdf-crypto/ciphers.js +17 -0
- package/dist/cjs/src/nanotdf-crypto/decrypt.js +24 -0
- package/dist/cjs/src/nanotdf-crypto/digest.js +7 -0
- package/dist/cjs/src/nanotdf-crypto/ecdsaSignature.js +83 -0
- package/dist/cjs/src/nanotdf-crypto/encrypt.js +24 -0
- package/dist/cjs/src/nanotdf-crypto/enums.js +52 -0
- package/dist/cjs/src/nanotdf-crypto/exportCryptoKey.js +20 -0
- package/dist/cjs/src/nanotdf-crypto/generateKeyPair.js +13 -0
- package/dist/cjs/src/nanotdf-crypto/generateRandomNumber.js +12 -0
- package/dist/cjs/src/nanotdf-crypto/importRawKey.js +18 -0
- package/dist/cjs/src/nanotdf-crypto/index.js +52 -0
- package/dist/cjs/src/nanotdf-crypto/keyAgreement.js +91 -0
- package/dist/cjs/src/nanotdf-crypto/pemPublicToCrypto.js +225 -0
- package/dist/cjs/src/policy/api.js +58 -0
- package/dist/cjs/src/policy/attributes.js +3 -0
- package/dist/cjs/src/policy/granter.js +146 -0
- package/dist/cjs/src/tdf/AttributeObject.js +15 -0
- package/dist/cjs/src/tdf/AttributeObjectJwt.js +3 -0
- package/dist/cjs/src/tdf/Crypto.js +47 -0
- package/dist/cjs/src/tdf/EntityObject.js +3 -0
- package/dist/cjs/src/tdf/NanoTDF/NanoTDF.js +38 -0
- package/dist/cjs/src/tdf/Policy.js +50 -0
- package/dist/cjs/src/tdf/PolicyObject.js +3 -0
- package/dist/cjs/src/tdf/TypedArray.js +3 -0
- package/dist/cjs/src/tdf/index.js +35 -0
- package/dist/cjs/src/types/index.js +3 -0
- package/dist/cjs/src/utils.js +147 -0
- package/dist/cjs/src/version.js +12 -0
- package/dist/cjs/tdf3/index.js +57 -0
- package/dist/cjs/tdf3/src/assertions.js +118 -0
- package/dist/cjs/tdf3/src/binary.js +153 -0
- package/dist/cjs/tdf3/src/ciphers/aes-gcm-cipher.js +56 -0
- package/dist/cjs/tdf3/src/ciphers/algorithms.js +8 -0
- package/dist/cjs/tdf3/src/ciphers/index.js +8 -0
- package/dist/cjs/tdf3/src/ciphers/symmetric-cipher-base.js +22 -0
- package/dist/cjs/tdf3/src/client/DecoratedReadableStream.js +116 -0
- package/dist/cjs/tdf3/src/client/builders.js +561 -0
- package/dist/cjs/tdf3/src/client/index.js +460 -0
- package/dist/cjs/tdf3/src/client/validation.js +63 -0
- package/dist/cjs/tdf3/src/crypto/crypto-utils.js +116 -0
- package/dist/cjs/tdf3/src/crypto/declarations.js +8 -0
- package/dist/cjs/tdf3/src/crypto/index.js +315 -0
- package/dist/cjs/tdf3/src/index.js +34 -0
- package/dist/cjs/tdf3/src/models/attribute-set.js +122 -0
- package/dist/cjs/tdf3/src/models/encryption-information.js +90 -0
- package/dist/cjs/tdf3/src/models/index.js +25 -0
- package/dist/cjs/tdf3/src/models/key-access.js +103 -0
- package/dist/cjs/tdf3/src/models/manifest.js +3 -0
- package/dist/cjs/tdf3/src/models/payload.js +3 -0
- package/dist/cjs/tdf3/src/models/policy.js +24 -0
- package/dist/cjs/tdf3/src/models/upsert-response.js +3 -0
- package/dist/cjs/tdf3/src/tdf.js +907 -0
- package/dist/cjs/tdf3/src/templates/default.html.js +98 -0
- package/dist/cjs/tdf3/src/templates/escaper.js +15 -0
- package/dist/cjs/tdf3/src/templates/index.js +12 -0
- package/dist/cjs/tdf3/src/utils/buffer-crc32.js +48 -0
- package/dist/cjs/tdf3/src/utils/chunkers.js +106 -0
- package/dist/cjs/tdf3/src/utils/index.js +296 -0
- package/dist/cjs/tdf3/src/utils/keysplit.js +61 -0
- package/dist/cjs/tdf3/src/utils/zip-reader.js +253 -0
- package/dist/cjs/tdf3/src/utils/zip-writer.js +308 -0
- package/dist/cjs/tdf3/src/version.js +6 -0
- package/dist/types/src/access.d.ts +47 -0
- package/dist/types/src/access.d.ts.map +1 -0
- package/dist/types/src/auth/Eas.d.ts +34 -0
- package/dist/types/src/auth/Eas.d.ts.map +1 -0
- package/dist/types/src/auth/auth.d.ts +86 -0
- package/dist/types/src/auth/auth.d.ts.map +1 -0
- package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts +9 -0
- package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts.map +1 -0
- package/dist/types/src/auth/oidc-externaljwt-provider.d.ts +10 -0
- package/dist/types/src/auth/oidc-externaljwt-provider.d.ts.map +1 -0
- package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts +10 -0
- package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts.map +1 -0
- package/dist/types/src/auth/oidc.d.ts +104 -0
- package/dist/types/src/auth/oidc.d.ts.map +1 -0
- package/dist/types/src/auth/providers.d.ts +67 -0
- package/dist/types/src/auth/providers.d.ts.map +1 -0
- package/dist/types/src/encodings/base64.d.ts +18 -0
- package/dist/types/src/encodings/base64.d.ts.map +1 -0
- package/dist/types/src/encodings/hex.d.ts +5 -0
- package/dist/types/src/encodings/hex.d.ts.map +1 -0
- package/dist/types/src/encodings/index.d.ts +3 -0
- package/dist/types/src/encodings/index.d.ts.map +1 -0
- package/dist/types/src/errors.d.ts +72 -0
- package/dist/types/src/errors.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +138 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/nanotdf/Client.d.ts +95 -0
- package/dist/types/src/nanotdf/Client.d.ts.map +1 -0
- package/dist/types/src/nanotdf/NanoTDF.d.ts +25 -0
- package/dist/types/src/nanotdf/NanoTDF.d.ts.map +1 -0
- package/dist/types/src/nanotdf/browser-entry.d.ts +17 -0
- package/dist/types/src/nanotdf/browser-entry.d.ts.map +1 -0
- package/dist/types/src/nanotdf/constants.d.ts +2 -0
- package/dist/types/src/nanotdf/constants.d.ts.map +1 -0
- package/dist/types/src/nanotdf/decrypt.d.ts +9 -0
- package/dist/types/src/nanotdf/decrypt.d.ts.map +1 -0
- package/dist/types/src/nanotdf/encrypt-dataset.d.ts +12 -0
- package/dist/types/src/nanotdf/encrypt-dataset.d.ts.map +1 -0
- package/dist/types/src/nanotdf/encrypt.d.ts +14 -0
- package/dist/types/src/nanotdf/encrypt.d.ts.map +1 -0
- package/dist/types/src/nanotdf/enum/CipherEnum.d.ts +10 -0
- package/dist/types/src/nanotdf/enum/CipherEnum.d.ts.map +1 -0
- package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts +12 -0
- package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts.map +1 -0
- package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts +5 -0
- package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts.map +1 -0
- package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts +8 -0
- package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts.map +1 -0
- package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts +7 -0
- package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts.map +1 -0
- package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts +8 -0
- package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts.map +1 -0
- package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts +20 -0
- package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts.map +1 -0
- package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts +9 -0
- package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts.map +1 -0
- package/dist/types/src/nanotdf/index.d.ts +9 -0
- package/dist/types/src/nanotdf/index.d.ts.map +1 -0
- package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts +17 -0
- package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Ciphers.d.ts +14 -0
- package/dist/types/src/nanotdf/models/Ciphers.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/DefaultParams.d.ts +21 -0
- package/dist/types/src/nanotdf/models/DefaultParams.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/EcCurves.d.ts +15 -0
- package/dist/types/src/nanotdf/models/EcCurves.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Header.d.ts +73 -0
- package/dist/types/src/nanotdf/models/Header.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Payload.d.ts +47 -0
- package/dist/types/src/nanotdf/models/Payload.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts +52 -0
- package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts +35 -0
- package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts +11 -0
- package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts +31 -0
- package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/ResourceLocator.d.ts +65 -0
- package/dist/types/src/nanotdf/models/ResourceLocator.d.ts.map +1 -0
- package/dist/types/src/nanotdf/models/Signature.d.ts +33 -0
- package/dist/types/src/nanotdf/models/Signature.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/ciphers.d.ts +8 -0
- package/dist/types/src/nanotdf-crypto/ciphers.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/decrypt.d.ts +14 -0
- package/dist/types/src/nanotdf-crypto/decrypt.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/digest.d.ts +3 -0
- package/dist/types/src/nanotdf-crypto/digest.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/ecdsaSignature.d.ts +35 -0
- package/dist/types/src/nanotdf-crypto/ecdsaSignature.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/encrypt.d.ts +14 -0
- package/dist/types/src/nanotdf-crypto/encrypt.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/enums.d.ts +42 -0
- package/dist/types/src/nanotdf-crypto/enums.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/exportCryptoKey.d.ts +7 -0
- package/dist/types/src/nanotdf-crypto/exportCryptoKey.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts +10 -0
- package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts +5 -0
- package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/importRawKey.d.ts +13 -0
- package/dist/types/src/nanotdf-crypto/importRawKey.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/index.d.ts +12 -0
- package/dist/types/src/nanotdf-crypto/index.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/keyAgreement.d.ts +28 -0
- package/dist/types/src/nanotdf-crypto/keyAgreement.d.ts.map +1 -0
- package/dist/types/src/nanotdf-crypto/pemPublicToCrypto.d.ts +28 -0
- package/dist/types/src/nanotdf-crypto/pemPublicToCrypto.d.ts.map +1 -0
- package/dist/types/src/policy/api.d.ts +4 -0
- package/dist/types/src/policy/api.d.ts.map +1 -0
- package/dist/types/src/policy/attributes.d.ts +95 -0
- package/dist/types/src/policy/attributes.d.ts.map +1 -0
- package/dist/types/src/policy/granter.d.ts +23 -0
- package/dist/types/src/policy/granter.d.ts.map +1 -0
- package/dist/types/src/tdf/AttributeObject.d.ts +13 -0
- package/dist/types/src/tdf/AttributeObject.d.ts.map +1 -0
- package/dist/types/src/tdf/AttributeObjectJwt.d.ts +4 -0
- package/dist/types/src/tdf/AttributeObjectJwt.d.ts.map +1 -0
- package/dist/types/src/tdf/Crypto.d.ts +37 -0
- package/dist/types/src/tdf/Crypto.d.ts.map +1 -0
- package/dist/types/src/tdf/EntityObject.d.ts +18 -0
- package/dist/types/src/tdf/EntityObject.d.ts.map +1 -0
- package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts +99 -0
- package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts.map +1 -0
- package/dist/types/src/tdf/Policy.d.ts +28 -0
- package/dist/types/src/tdf/Policy.d.ts.map +1 -0
- package/dist/types/src/tdf/PolicyObject.d.ts +11 -0
- package/dist/types/src/tdf/PolicyObject.d.ts.map +1 -0
- package/dist/types/src/tdf/TypedArray.d.ts +3 -0
- package/dist/types/src/tdf/TypedArray.d.ts.map +1 -0
- package/dist/types/src/tdf/index.d.ts +7 -0
- package/dist/types/src/tdf/index.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +45 -0
- package/dist/types/src/types/index.d.ts.map +1 -0
- package/dist/types/src/utils.d.ts +45 -0
- package/dist/types/src/utils.d.ts.map +1 -0
- package/dist/types/src/version.d.ts +9 -0
- package/dist/types/src/version.d.ts.map +1 -0
- package/dist/types/tdf3/index.d.ts +16 -0
- package/dist/types/tdf3/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/assertions.d.ts +63 -0
- package/dist/types/tdf3/src/assertions.d.ts.map +1 -0
- package/dist/types/tdf3/src/binary.d.ts +38 -0
- package/dist/types/tdf3/src/binary.d.ts.map +1 -0
- package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts +18 -0
- package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts.map +1 -0
- package/dist/types/tdf3/src/ciphers/algorithms.d.ts +4 -0
- package/dist/types/tdf3/src/ciphers/algorithms.d.ts.map +1 -0
- package/dist/types/tdf3/src/ciphers/index.d.ts +3 -0
- package/dist/types/tdf3/src/ciphers/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts +14 -0
- package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts.map +1 -0
- package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts +53 -0
- package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts.map +1 -0
- package/dist/types/tdf3/src/client/builders.d.ts +436 -0
- package/dist/types/tdf3/src/client/builders.d.ts.map +1 -0
- package/dist/types/tdf3/src/client/index.d.ts +139 -0
- package/dist/types/tdf3/src/client/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/client/validation.d.ts +8 -0
- package/dist/types/tdf3/src/client/validation.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/crypto-utils.d.ts +34 -0
- package/dist/types/tdf3/src/crypto/crypto-utils.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/declarations.d.ts +60 -0
- package/dist/types/tdf3/src/crypto/declarations.d.ts.map +1 -0
- package/dist/types/tdf3/src/crypto/index.d.ts +103 -0
- package/dist/types/tdf3/src/crypto/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/index.d.ts +5 -0
- package/dist/types/tdf3/src/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/attribute-set.d.ts +65 -0
- package/dist/types/tdf3/src/models/attribute-set.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/encryption-information.d.ts +49 -0
- package/dist/types/tdf3/src/models/encryption-information.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/index.d.ts +9 -0
- package/dist/types/tdf3/src/models/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/key-access.d.ts +42 -0
- package/dist/types/tdf3/src/models/key-access.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/manifest.d.ts +9 -0
- package/dist/types/tdf3/src/models/manifest.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/payload.d.ts +7 -0
- package/dist/types/tdf3/src/models/payload.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/policy.d.ts +13 -0
- package/dist/types/tdf3/src/models/policy.d.ts.map +1 -0
- package/dist/types/tdf3/src/models/upsert-response.d.ts +16 -0
- package/dist/types/tdf3/src/models/upsert-response.d.ts.map +1 -0
- package/dist/types/tdf3/src/tdf.d.ts +152 -0
- package/dist/types/tdf3/src/tdf.d.ts.map +1 -0
- package/dist/types/tdf3/src/templates/default.html.d.ts +8 -0
- package/dist/types/tdf3/src/templates/default.html.d.ts.map +1 -0
- package/dist/types/tdf3/src/templates/escaper.d.ts +6 -0
- package/dist/types/tdf3/src/templates/escaper.d.ts.map +1 -0
- package/dist/types/tdf3/src/templates/index.d.ts +3 -0
- package/dist/types/tdf3/src/templates/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/utils/buffer-crc32.d.ts +2 -0
- package/dist/types/tdf3/src/utils/buffer-crc32.d.ts.map +1 -0
- package/dist/types/tdf3/src/utils/chunkers.d.ts +29 -0
- package/dist/types/tdf3/src/utils/chunkers.d.ts.map +1 -0
- package/dist/types/tdf3/src/utils/index.d.ts +36 -0
- package/dist/types/tdf3/src/utils/index.d.ts.map +1 -0
- package/dist/types/tdf3/src/utils/keysplit.d.ts +19 -0
- package/dist/types/tdf3/src/utils/keysplit.d.ts.map +1 -0
- package/dist/types/tdf3/src/utils/zip-reader.d.ts +63 -0
- package/dist/types/tdf3/src/utils/zip-reader.d.ts.map +1 -0
- package/dist/types/tdf3/src/utils/zip-writer.d.ts +35 -0
- package/dist/types/tdf3/src/utils/zip-writer.d.ts.map +1 -0
- package/dist/types/tdf3/src/version.d.ts +3 -0
- package/dist/types/tdf3/src/version.d.ts.map +1 -0
- package/dist/web/package.json +3 -0
- package/dist/web/src/access.js +147 -0
- package/dist/web/src/auth/Eas.js +55 -0
- package/dist/web/src/auth/auth.js +71 -0
- package/dist/web/src/auth/oidc-clientcredentials-provider.js +22 -0
- package/dist/web/src/auth/oidc-externaljwt-provider.js +29 -0
- package/dist/web/src/auth/oidc-refreshtoken-provider.js +30 -0
- package/dist/web/src/auth/oidc.js +215 -0
- package/dist/web/src/auth/providers.js +119 -0
- package/dist/web/src/encodings/base64.js +147 -0
- package/dist/web/src/encodings/hex.js +63 -0
- package/dist/web/src/encodings/index.js +3 -0
- package/dist/web/src/errors.js +123 -0
- package/dist/web/src/index.js +313 -0
- package/dist/web/src/nanotdf/Client.js +268 -0
- package/dist/web/src/nanotdf/NanoTDF.js +89 -0
- package/dist/web/src/nanotdf/browser-entry.js +14 -0
- package/dist/web/src/nanotdf/constants.js +2 -0
- package/dist/web/src/nanotdf/decrypt.js +14 -0
- package/dist/web/src/nanotdf/encrypt-dataset.js +32 -0
- package/dist/web/src/nanotdf/encrypt.js +126 -0
- package/dist/web/src/nanotdf/enum/CipherEnum.js +11 -0
- package/dist/web/src/nanotdf/enum/CurveNameEnum.js +13 -0
- package/dist/web/src/nanotdf/enum/EncodingEnum.js +6 -0
- package/dist/web/src/nanotdf/enum/PolicyTypeEnum.js +9 -0
- package/dist/web/src/nanotdf/enum/ProtocolEnum.js +8 -0
- package/dist/web/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +9 -0
- package/dist/web/src/nanotdf/helpers/calculateByCurve.js +24 -0
- package/dist/web/src/nanotdf/helpers/getHkdfSalt.js +8 -0
- package/dist/web/src/nanotdf/index.js +11 -0
- package/dist/web/src/nanotdf/interfaces/PolicyInterface.js +2 -0
- package/dist/web/src/nanotdf/models/Ciphers.js +54 -0
- package/dist/web/src/nanotdf/models/DefaultParams.js +22 -0
- package/dist/web/src/nanotdf/models/EcCurves.js +32 -0
- package/dist/web/src/nanotdf/models/Header.js +250 -0
- package/dist/web/src/nanotdf/models/Payload.js +156 -0
- package/dist/web/src/nanotdf/models/Policy/AbstractPolicy.js +71 -0
- package/dist/web/src/nanotdf/models/Policy/EmbeddedPolicy.js +77 -0
- package/dist/web/src/nanotdf/models/Policy/PolicyFactory.js +33 -0
- package/dist/web/src/nanotdf/models/Policy/RemotePolicy.js +57 -0
- package/dist/web/src/nanotdf/models/ResourceLocator.js +206 -0
- package/dist/web/src/nanotdf/models/Signature.js +74 -0
- package/dist/web/src/nanotdf-crypto/ciphers.js +14 -0
- package/dist/web/src/nanotdf-crypto/decrypt.js +21 -0
- package/dist/web/src/nanotdf-crypto/digest.js +4 -0
- package/dist/web/src/nanotdf-crypto/ecdsaSignature.js +77 -0
- package/dist/web/src/nanotdf-crypto/encrypt.js +21 -0
- package/dist/web/src/nanotdf-crypto/enums.js +49 -0
- package/dist/web/src/nanotdf-crypto/exportCryptoKey.js +17 -0
- package/dist/web/src/nanotdf-crypto/generateKeyPair.js +10 -0
- package/dist/web/src/nanotdf-crypto/generateRandomNumber.js +9 -0
- package/dist/web/src/nanotdf-crypto/importRawKey.js +15 -0
- package/dist/web/src/nanotdf-crypto/index.js +12 -0
- package/dist/web/src/nanotdf-crypto/keyAgreement.js +87 -0
- package/dist/web/src/nanotdf-crypto/pemPublicToCrypto.js +197 -0
- package/dist/web/src/policy/api.js +54 -0
- package/dist/web/src/policy/attributes.js +2 -0
- package/dist/web/src/policy/granter.js +141 -0
- package/dist/web/src/tdf/AttributeObject.js +11 -0
- package/dist/web/src/tdf/AttributeObjectJwt.js +2 -0
- package/dist/web/src/tdf/Crypto.js +44 -0
- package/dist/web/src/tdf/EntityObject.js +2 -0
- package/dist/web/src/tdf/NanoTDF/NanoTDF.js +35 -0
- package/dist/web/src/tdf/Policy.js +48 -0
- package/dist/web/src/tdf/PolicyObject.js +2 -0
- package/dist/web/src/tdf/TypedArray.js +2 -0
- package/dist/web/src/tdf/index.js +4 -0
- package/dist/web/src/types/index.js +2 -0
- package/dist/web/src/utils.js +133 -0
- package/dist/web/src/version.js +9 -0
- package/dist/web/tdf3/index.js +13 -0
- package/dist/web/tdf3/src/assertions.js +111 -0
- package/dist/web/tdf3/src/binary.js +149 -0
- package/dist/web/tdf3/src/ciphers/aes-gcm-cipher.js +52 -0
- package/dist/web/tdf3/src/ciphers/algorithms.js +5 -0
- package/dist/web/tdf3/src/ciphers/index.js +3 -0
- package/dist/web/tdf3/src/ciphers/symmetric-cipher-base.js +18 -0
- package/dist/web/tdf3/src/client/DecoratedReadableStream.js +107 -0
- package/dist/web/tdf3/src/client/builders.js +557 -0
- package/dist/web/tdf3/src/client/index.js +423 -0
- package/dist/web/tdf3/src/client/validation.js +58 -0
- package/dist/web/tdf3/src/crypto/crypto-utils.js +107 -0
- package/dist/web/tdf3/src/crypto/declarations.js +5 -0
- package/dist/web/tdf3/src/crypto/index.js +296 -0
- package/dist/web/tdf3/src/index.js +5 -0
- package/dist/web/tdf3/src/models/attribute-set.js +118 -0
- package/dist/web/tdf3/src/models/encryption-information.js +86 -0
- package/dist/web/tdf3/src/models/index.js +9 -0
- package/dist/web/tdf3/src/models/key-access.js +74 -0
- package/dist/web/tdf3/src/models/manifest.js +2 -0
- package/dist/web/tdf3/src/models/payload.js +2 -0
- package/dist/web/tdf3/src/models/policy.js +20 -0
- package/dist/web/tdf3/src/models/upsert-response.js +2 -0
- package/dist/web/tdf3/src/tdf.js +866 -0
- package/dist/web/tdf3/src/templates/default.html.js +96 -0
- package/dist/web/tdf3/src/templates/escaper.js +10 -0
- package/dist/web/tdf3/src/templates/index.js +3 -0
- package/dist/web/tdf3/src/utils/buffer-crc32.js +44 -0
- package/dist/web/tdf3/src/utils/chunkers.js +96 -0
- package/dist/web/tdf3/src/utils/index.js +248 -0
- package/dist/web/tdf3/src/utils/keysplit.js +55 -0
- package/dist/web/tdf3/src/utils/zip-reader.js +247 -0
- package/dist/web/tdf3/src/utils/zip-writer.js +302 -0
- package/dist/web/tdf3/src/version.js +3 -0
- package/package.json +126 -0
- package/src/access.ts +198 -0
- package/src/auth/Eas.ts +79 -0
- package/src/auth/auth.ts +141 -0
- package/src/auth/oidc-clientcredentials-provider.ts +32 -0
- package/src/auth/oidc-externaljwt-provider.ts +41 -0
- package/src/auth/oidc-refreshtoken-provider.ts +41 -0
- package/src/auth/oidc.ts +307 -0
- package/src/auth/providers.ts +139 -0
- package/src/encodings/base64.ts +160 -0
- package/src/encodings/hex.ts +69 -0
- package/src/encodings/index.ts +2 -0
- package/src/errors.ts +113 -0
- package/src/index.ts +441 -0
- package/src/nanotdf/Client.ts +349 -0
- package/src/nanotdf/NanoTDF.ts +121 -0
- package/src/nanotdf/browser-entry.ts +20 -0
- package/src/nanotdf/constants.ts +1 -0
- package/src/nanotdf/decrypt.ts +19 -0
- package/src/nanotdf/encrypt-dataset.ts +52 -0
- package/src/nanotdf/encrypt.ts +197 -0
- package/src/nanotdf/enum/CipherEnum.ts +10 -0
- package/src/nanotdf/enum/CurveNameEnum.ts +12 -0
- package/src/nanotdf/enum/EncodingEnum.ts +5 -0
- package/src/nanotdf/enum/PolicyTypeEnum.ts +8 -0
- package/src/nanotdf/enum/ProtocolEnum.ts +7 -0
- package/src/nanotdf/enum/ResourceLocatorIdentifierEnum.ts +8 -0
- package/src/nanotdf/helpers/calculateByCurve.ts +26 -0
- package/src/nanotdf/helpers/getHkdfSalt.ts +15 -0
- package/src/nanotdf/index.ts +10 -0
- package/src/nanotdf/interfaces/PolicyInterface.ts +27 -0
- package/src/nanotdf/models/Ciphers.ts +67 -0
- package/src/nanotdf/models/DefaultParams.ts +24 -0
- package/src/nanotdf/models/EcCurves.ts +40 -0
- package/src/nanotdf/models/Header.ts +322 -0
- package/src/nanotdf/models/Payload.ts +196 -0
- package/src/nanotdf/models/Policy/AbstractPolicy.ts +90 -0
- package/src/nanotdf/models/Policy/EmbeddedPolicy.ts +101 -0
- package/src/nanotdf/models/Policy/PolicyFactory.ts +48 -0
- package/src/nanotdf/models/Policy/RemotePolicy.ts +74 -0
- package/src/nanotdf/models/ResourceLocator.ts +212 -0
- package/src/nanotdf/models/Signature.ts +85 -0
- package/src/nanotdf-crypto/ciphers.ts +13 -0
- package/src/nanotdf-crypto/decrypt.ts +30 -0
- package/src/nanotdf-crypto/digest.ts +8 -0
- package/src/nanotdf-crypto/ecdsaSignature.ts +109 -0
- package/src/nanotdf-crypto/encrypt.ts +30 -0
- package/src/nanotdf-crypto/enums.ts +47 -0
- package/src/nanotdf-crypto/exportCryptoKey.ts +17 -0
- package/src/nanotdf-crypto/generateKeyPair.ts +19 -0
- package/src/nanotdf-crypto/generateRandomNumber.ts +8 -0
- package/src/nanotdf-crypto/importRawKey.ts +19 -0
- package/src/nanotdf-crypto/index.ts +11 -0
- package/src/nanotdf-crypto/keyAgreement.ts +139 -0
- package/src/nanotdf-crypto/pemPublicToCrypto.ts +232 -0
- package/src/package-lock.json +6 -0
- package/src/package.json +3 -0
- package/src/platform/authorization/authorization_connect.d.ts +44 -0
- package/src/platform/authorization/authorization_connect.js +44 -0
- package/src/platform/authorization/authorization_pb.d.ts +707 -0
- package/src/platform/authorization/authorization_pb.js +372 -0
- package/src/platform/common/common_pb.d.ts +129 -0
- package/src/platform/common/common_pb.js +58 -0
- package/src/platform/entityresolution/entity_resolution_connect.d.ts +35 -0
- package/src/platform/entityresolution/entity_resolution_connect.js +35 -0
- package/src/platform/entityresolution/entity_resolution_pb.d.ts +242 -0
- package/src/platform/entityresolution/entity_resolution_pb.js +139 -0
- package/src/platform/kas/kas_connect.d.ts +59 -0
- package/src/platform/kas/kas_connect.js +59 -0
- package/src/platform/kas/kas_pb.d.ts +200 -0
- package/src/platform/kas/kas_pb.js +84 -0
- package/src/platform/policy/attributes/attributes_connect.d.ts +168 -0
- package/src/platform/policy/attributes/attributes_connect.js +168 -0
- package/src/platform/policy/attributes/attributes_pb.d.ts +929 -0
- package/src/platform/policy/attributes/attributes_pb.js +363 -0
- package/src/platform/policy/kasregistry/key_access_server_registry_connect.d.ts +62 -0
- package/src/platform/policy/kasregistry/key_access_server_registry_connect.js +62 -0
- package/src/platform/policy/kasregistry/key_access_server_registry_pb.d.ts +283 -0
- package/src/platform/policy/kasregistry/key_access_server_registry_pb.js +113 -0
- package/src/platform/policy/namespaces/namespaces_connect.d.ts +62 -0
- package/src/platform/policy/namespaces/namespaces_connect.js +62 -0
- package/src/platform/policy/namespaces/namespaces_pb.d.ts +270 -0
- package/src/platform/policy/namespaces/namespaces_pb.js +110 -0
- package/src/platform/policy/objects_pb.d.ts +725 -0
- package/src/platform/policy/objects_pb.js +288 -0
- package/src/platform/policy/resourcemapping/resource_mapping_connect.d.ts +259 -0
- package/src/platform/policy/resourcemapping/resource_mapping_connect.js +259 -0
- package/src/platform/policy/resourcemapping/resource_mapping_pb.d.ts +314 -0
- package/src/platform/policy/resourcemapping/resource_mapping_pb.js +142 -0
- package/src/platform/policy/selectors_pb.d.ts +269 -0
- package/src/platform/policy/selectors_pb.js +110 -0
- package/src/platform/policy/subjectmapping/subject_mapping_connect.d.ts +118 -0
- package/src/platform/policy/subjectmapping/subject_mapping_connect.js +118 -0
- package/src/platform/policy/subjectmapping/subject_mapping_pb.d.ts +672 -0
- package/src/platform/policy/subjectmapping/subject_mapping_pb.js +260 -0
- package/src/platform/wellknownconfiguration/wellknown_configuration_connect.d.ts +26 -0
- package/src/platform/wellknownconfiguration/wellknown_configuration_connect.js +26 -0
- package/src/platform/wellknownconfiguration/wellknown_configuration_pb.d.ts +75 -0
- package/src/platform/wellknownconfiguration/wellknown_configuration_pb.js +35 -0
- package/src/policy/api.ts +61 -0
- package/src/policy/attributes.ts +117 -0
- package/src/policy/granter.ts +181 -0
- package/src/tdf/AttributeObject.ts +27 -0
- package/src/tdf/AttributeObjectJwt.ts +3 -0
- package/src/tdf/Crypto.ts +42 -0
- package/src/tdf/EntityObject.ts +18 -0
- package/src/tdf/NanoTDF/NanoTDF.ts +120 -0
- package/src/tdf/Policy.ts +51 -0
- package/src/tdf/PolicyObject.ts +12 -0
- package/src/tdf/TypedArray.ts +12 -0
- package/src/tdf/index.ts +6 -0
- package/src/types/index.ts +55 -0
- package/src/utils.ts +149 -0
- package/src/version.ts +9 -0
- package/tdf3/index.ts +91 -0
- package/tdf3/package-lock.json +6 -0
- package/tdf3/package.json +3 -0
- package/tdf3/src/assertions.ts +191 -0
- package/tdf3/src/binary.ts +195 -0
- package/tdf3/src/ciphers/aes-gcm-cipher.ts +76 -0
- package/tdf3/src/ciphers/algorithms.ts +9 -0
- package/tdf3/src/ciphers/index.ts +2 -0
- package/tdf3/src/ciphers/symmetric-cipher-base.ts +38 -0
- package/tdf3/src/client/DecoratedReadableStream.ts +148 -0
- package/tdf3/src/client/builders.ts +701 -0
- package/tdf3/src/client/index.ts +637 -0
- package/tdf3/src/client/validation.ts +79 -0
- package/tdf3/src/crypto/crypto-utils.ts +119 -0
- package/tdf3/src/crypto/declarations.ts +89 -0
- package/tdf3/src/crypto/index.ts +394 -0
- package/tdf3/src/index.ts +4 -0
- package/tdf3/src/models/attribute-set.ts +142 -0
- package/tdf3/src/models/encryption-information.ts +172 -0
- package/tdf3/src/models/index.ts +8 -0
- package/tdf3/src/models/key-access.ts +128 -0
- package/tdf3/src/models/manifest.ts +9 -0
- package/tdf3/src/models/payload.ts +6 -0
- package/tdf3/src/models/policy.ts +35 -0
- package/tdf3/src/models/upsert-response.ts +17 -0
- package/tdf3/src/tdf.ts +1351 -0
- package/tdf3/src/templates/default.html.ts +105 -0
- package/tdf3/src/templates/escaper.ts +10 -0
- package/tdf3/src/templates/index.ts +2 -0
- package/tdf3/src/utils/buffer-crc32.ts +46 -0
- package/tdf3/src/utils/chunkers.ts +118 -0
- package/tdf3/src/utils/index.ts +309 -0
- package/tdf3/src/utils/keysplit.ts +63 -0
- package/tdf3/src/utils/zip-reader.ts +341 -0
- package/tdf3/src/utils/zip-writer.ts +375 -0
- package/tdf3/src/version.ts +2 -0
- package/tdf3/types.d.ts +14 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
var ResourceLocatorIdentifierEnum;
|
|
2
|
+
(function (ResourceLocatorIdentifierEnum) {
|
|
3
|
+
ResourceLocatorIdentifierEnum[ResourceLocatorIdentifierEnum["None"] = 0] = "None";
|
|
4
|
+
ResourceLocatorIdentifierEnum[ResourceLocatorIdentifierEnum["TwoBytes"] = 2] = "TwoBytes";
|
|
5
|
+
ResourceLocatorIdentifierEnum[ResourceLocatorIdentifierEnum["EightBytes"] = 8] = "EightBytes";
|
|
6
|
+
ResourceLocatorIdentifierEnum[ResourceLocatorIdentifierEnum["ThirtyTwoBytes"] = 32] = "ThirtyTwoBytes";
|
|
7
|
+
})(ResourceLocatorIdentifierEnum || (ResourceLocatorIdentifierEnum = {}));
|
|
8
|
+
export default ResourceLocatorIdentifierEnum;
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzb3VyY2VMb2NhdG9ySWRlbnRpZmllckVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9lbnVtL1Jlc291cmNlTG9jYXRvcklkZW50aWZpZXJFbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUssNkJBS0o7QUFMRCxXQUFLLDZCQUE2QjtJQUNoQyxpRkFBUSxDQUFBO0lBQ1IseUZBQVksQ0FBQTtJQUNaLDZGQUFjLENBQUE7SUFDZCxzR0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTEksNkJBQTZCLEtBQTdCLDZCQUE2QixRQUtqQztBQUVELGVBQWUsNkJBQTZCLENBQUMifQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { getCurveLength } from '../models/EcCurves.js';
|
|
2
|
+
/**
|
|
3
|
+
* Length of public key
|
|
4
|
+
*
|
|
5
|
+
* @param curveName CurveNameEnum
|
|
6
|
+
* @returns number length of the public key
|
|
7
|
+
*/
|
|
8
|
+
export function lengthOfPublicKey(curveName) {
|
|
9
|
+
return Math.ceil(getCurveLength(curveName) / 8);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Length of signature
|
|
13
|
+
*
|
|
14
|
+
* ECDSA signatures are 2 times longer than the signer's private key for the curve used during the signing process.
|
|
15
|
+
* For example, for 256-bit elliptic curves (like secp256k1 ) the ECDSA signature is 512 bits (64 bytes) and for 521-bit
|
|
16
|
+
* curves (like secp521r1 ) the signature is 1042 bits.
|
|
17
|
+
*
|
|
18
|
+
* @param curveName CurveNameEnum
|
|
19
|
+
* @returns number length of the signature
|
|
20
|
+
*/
|
|
21
|
+
export function lengthOfSignature(curveName) {
|
|
22
|
+
return Math.ceil((getCurveLength(curveName) * 2) / 8);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlQnlDdXJ2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL2hlbHBlcnMvY2FsY3VsYXRlQnlDdXJ2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsU0FBd0I7SUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFNBQXdCO0lBQ3hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { digest, enums } from '../../nanotdf-crypto/index.js';
|
|
2
|
+
export default async function getHkdfSalt(buffer) {
|
|
3
|
+
return {
|
|
4
|
+
hkdfSalt: await digest(enums.HashType.Sha256, buffer),
|
|
5
|
+
hkdfHash: enums.HashType.Sha256,
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0SGtkZlNhbHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9oZWxwZXJzL2dldEhrZGZTYWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFPOUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUFDLE1BQWdDO0lBQ3hFLE9BQU87UUFDTCxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO1FBQ3JELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07S0FDaEMsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Don't export named values or the enduser will
|
|
2
|
+
// have to call `const NanoTDF = require('nanotdf').default`
|
|
3
|
+
export { default as Client } from './Client.js';
|
|
4
|
+
export { default as Header } from './models/Header.js';
|
|
5
|
+
export { default as NanoTDF } from './NanoTDF.js';
|
|
6
|
+
export { default as decrypt } from './decrypt.js';
|
|
7
|
+
export { default as encrypt } from './encrypt.js';
|
|
8
|
+
export { default as encryptDataset } from './encrypt-dataset.js';
|
|
9
|
+
export { default as getHkdfSalt } from './helpers/getHkdfSalt.js';
|
|
10
|
+
export { default as DefaultParams } from './models/DefaultParams.js';
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnREFBZ0Q7QUFDaEQsNERBQTREO0FBQzVELE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sSUFBSSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLElBQUksYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUMifQ==
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import CipherEnum from '../enum/CipherEnum.js';
|
|
2
|
+
import { UnsupportedFeatureError } from '../../errors.js';
|
|
3
|
+
export const Aes256Gcm64 = {
|
|
4
|
+
name: CipherEnum.AES_256_GCM_64,
|
|
5
|
+
length: 64,
|
|
6
|
+
};
|
|
7
|
+
export const Aes256Gcm96 = {
|
|
8
|
+
name: CipherEnum.AES_256_GCM_96,
|
|
9
|
+
length: 96,
|
|
10
|
+
};
|
|
11
|
+
export const Aes256Gcm104 = {
|
|
12
|
+
name: CipherEnum.AES_256_GCM_104,
|
|
13
|
+
length: 104,
|
|
14
|
+
};
|
|
15
|
+
export const Aes256Gcm112 = {
|
|
16
|
+
name: CipherEnum.AES_256_GCM_112,
|
|
17
|
+
length: 112,
|
|
18
|
+
};
|
|
19
|
+
export const Aes256Gcm120 = {
|
|
20
|
+
name: CipherEnum.AES_256_GCM_120,
|
|
21
|
+
length: 120,
|
|
22
|
+
};
|
|
23
|
+
export const Aes256Gcm128 = {
|
|
24
|
+
name: CipherEnum.AES_256_GCM_128,
|
|
25
|
+
length: 128,
|
|
26
|
+
};
|
|
27
|
+
export function getBitLength(cipher) {
|
|
28
|
+
switch (cipher) {
|
|
29
|
+
case CipherEnum.AES_256_GCM_64:
|
|
30
|
+
return Aes256Gcm64.length;
|
|
31
|
+
case CipherEnum.AES_256_GCM_96:
|
|
32
|
+
return Aes256Gcm96.length;
|
|
33
|
+
case CipherEnum.AES_256_GCM_104:
|
|
34
|
+
return Aes256Gcm104.length;
|
|
35
|
+
case CipherEnum.AES_256_GCM_112:
|
|
36
|
+
return Aes256Gcm112.length;
|
|
37
|
+
case CipherEnum.AES_256_GCM_120:
|
|
38
|
+
return Aes256Gcm120.length;
|
|
39
|
+
case CipherEnum.AES_256_GCM_128:
|
|
40
|
+
return Aes256Gcm128.length;
|
|
41
|
+
default:
|
|
42
|
+
throw new UnsupportedFeatureError(`unsupported cipher enum value: [${cipher}]`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// export default {
|
|
46
|
+
// Aes256Gcm64,
|
|
47
|
+
// Aes256Gcm96,
|
|
48
|
+
// Aes256Gcm104,
|
|
49
|
+
// Aes256Gcm112,
|
|
50
|
+
// Aes256Gcm120,
|
|
51
|
+
// Aes256Gcm128,
|
|
52
|
+
// getBitLength,
|
|
53
|
+
// };
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2lwaGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL21vZGVscy9DaXBoZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sVUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBTzFELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBb0I7SUFDMUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxjQUFjO0lBQy9CLE1BQU0sRUFBRSxFQUFFO0NBQ1gsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBb0I7SUFDMUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxjQUFjO0lBQy9CLE1BQU0sRUFBRSxFQUFFO0NBQ1gsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBb0I7SUFDM0MsSUFBSSxFQUFFLFVBQVUsQ0FBQyxlQUFlO0lBQ2hDLE1BQU0sRUFBRSxHQUFHO0NBQ1osQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBb0I7SUFDM0MsSUFBSSxFQUFFLFVBQVUsQ0FBQyxlQUFlO0lBQ2hDLE1BQU0sRUFBRSxHQUFHO0NBQ1osQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBb0I7SUFDM0MsSUFBSSxFQUFFLFVBQVUsQ0FBQyxlQUFlO0lBQ2hDLE1BQU0sRUFBRSxHQUFHO0NBQ1osQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBb0I7SUFDM0MsSUFBSSxFQUFFLFVBQVUsQ0FBQyxlQUFlO0lBQ2hDLE1BQU0sRUFBRSxHQUFHO0NBQ1osQ0FBQztBQUVGLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBa0I7SUFDN0MsUUFBUSxNQUFNLEVBQUU7UUFDZCxLQUFLLFVBQVUsQ0FBQyxjQUFjO1lBQzVCLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUM1QixLQUFLLFVBQVUsQ0FBQyxjQUFjO1lBQzVCLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUM1QixLQUFLLFVBQVUsQ0FBQyxlQUFlO1lBQzdCLE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUM3QixLQUFLLFVBQVUsQ0FBQyxlQUFlO1lBQzdCLE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUM3QixLQUFLLFVBQVUsQ0FBQyxlQUFlO1lBQzdCLE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUM3QixLQUFLLFVBQVUsQ0FBQyxlQUFlO1lBQzdCLE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUM3QjtZQUNFLE1BQU0sSUFBSSx1QkFBdUIsQ0FBQyxtQ0FBbUMsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUNuRjtBQUNILENBQUM7QUFFRCxtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCLGlCQUFpQjtBQUNqQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFFbEIsa0JBQWtCO0FBQ2xCLEtBQUsifQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import CipherEnum from '../enum/CipherEnum.js';
|
|
2
|
+
import CurveNameEnum from '../enum/CurveNameEnum.js';
|
|
3
|
+
import PolicyTypeEnum from '../enum/PolicyTypeEnum.js';
|
|
4
|
+
const enc = new TextEncoder();
|
|
5
|
+
/**
|
|
6
|
+
* Default encrypt param builders
|
|
7
|
+
*
|
|
8
|
+
* @link https://github.com/virtru/tdf3-cpp/blob/develop/tdf3-src/lib/src/nanotdf_builder_impl.h
|
|
9
|
+
*/
|
|
10
|
+
const DefaultParams = {
|
|
11
|
+
ecdsaBinding: false,
|
|
12
|
+
ephemeralCurveName: CurveNameEnum.SECP256R1,
|
|
13
|
+
magicNumberVersion: enc.encode('L1L'),
|
|
14
|
+
offlineMode: false,
|
|
15
|
+
policyType: PolicyTypeEnum.EmbeddedEncrypted,
|
|
16
|
+
signature: false,
|
|
17
|
+
signatureCurveName: CurveNameEnum.SECP256R1,
|
|
18
|
+
symmetricCipher: CipherEnum.AES_256_GCM_96,
|
|
19
|
+
defaultECAlgorithm: 'ec:secp256r1',
|
|
20
|
+
};
|
|
21
|
+
export default DefaultParams;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdFBhcmFtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL21vZGVscy9EZWZhdWx0UGFyYW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sVUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sYUFBYSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sY0FBYyxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE1BQU0sR0FBRyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFFOUI7Ozs7R0FJRztBQUNILE1BQU0sYUFBYSxHQUFHO0lBQ3BCLFlBQVksRUFBRSxLQUFLO0lBQ25CLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxTQUFTO0lBQzNDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ3JDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFVBQVUsRUFBRSxjQUFjLENBQUMsaUJBQWlCO0lBQzVDLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxTQUFTO0lBQzNDLGVBQWUsRUFBRSxVQUFVLENBQUMsY0FBYztJQUMxQyxrQkFBa0IsRUFBRSxjQUFjO0NBQ25DLENBQUM7QUFFRixlQUFlLGFBQWEsQ0FBQyJ9
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import CurveNameEnum from '../enum/CurveNameEnum.js';
|
|
2
|
+
import { UnsupportedFeatureError } from '../../errors.js';
|
|
3
|
+
export const Secp256R1 = {
|
|
4
|
+
name: CurveNameEnum.SECP256R1,
|
|
5
|
+
length: 256,
|
|
6
|
+
};
|
|
7
|
+
export const Secp384R1 = {
|
|
8
|
+
name: CurveNameEnum.SECP384R1,
|
|
9
|
+
length: 384,
|
|
10
|
+
};
|
|
11
|
+
export const Secp521R1 = {
|
|
12
|
+
name: CurveNameEnum.SECP521R1,
|
|
13
|
+
length: 521,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Get size from Curve
|
|
17
|
+
*
|
|
18
|
+
* @param curveName CurveNameEnum name of the curve
|
|
19
|
+
*/
|
|
20
|
+
export function getCurveLength(curveName) {
|
|
21
|
+
switch (curveName) {
|
|
22
|
+
case Secp256R1.name:
|
|
23
|
+
return Secp256R1.length;
|
|
24
|
+
case Secp384R1.name:
|
|
25
|
+
return Secp384R1.length;
|
|
26
|
+
case Secp521R1.name:
|
|
27
|
+
return Secp521R1.length;
|
|
28
|
+
default:
|
|
29
|
+
throw new UnsupportedFeatureError(`unsupported curve name: ${curveName}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWNDdXJ2ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbmFub3RkZi9tb2RlbHMvRWNDdXJ2ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxhQUFhLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFPMUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFtQjtJQUN2QyxJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVM7SUFDN0IsTUFBTSxFQUFFLEdBQUc7Q0FDWixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFtQjtJQUN2QyxJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVM7SUFDN0IsTUFBTSxFQUFFLEdBQUc7Q0FDWixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFtQjtJQUN2QyxJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVM7SUFDN0IsTUFBTSxFQUFFLEdBQUc7Q0FDWixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsU0FBd0I7SUFDckQsUUFBUSxTQUFTLEVBQUU7UUFDakIsS0FBSyxTQUFTLENBQUMsSUFBSTtZQUNqQixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDMUIsS0FBSyxTQUFTLENBQUMsSUFBSTtZQUNqQixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDMUIsS0FBSyxTQUFTLENBQUMsSUFBSTtZQUNqQixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDMUI7WUFDRSxNQUFNLElBQUksdUJBQXVCLENBQUMsMkJBQTJCLFNBQVMsRUFBRSxDQUFDLENBQUM7S0FDN0U7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
// Models
|
|
2
|
+
import { getBitLength } from './Ciphers.js';
|
|
3
|
+
import ResourceLocator from './ResourceLocator.js';
|
|
4
|
+
import PolicyFactory from './Policy/PolicyFactory.js';
|
|
5
|
+
// Helpers
|
|
6
|
+
import { lengthOfPublicKey } from '../helpers/calculateByCurve.js';
|
|
7
|
+
import DefaultParams from './DefaultParams.js';
|
|
8
|
+
import { ConfigurationError, InvalidFileError } from '../../errors.js';
|
|
9
|
+
import { rstrip } from '../../utils.js';
|
|
10
|
+
/**
|
|
11
|
+
* NanoTDF Header
|
|
12
|
+
*
|
|
13
|
+
* The header section is intended to be sent to a KAS and is used by the KAS to derive the decryption key that can
|
|
14
|
+
* decrypts the nanotdf's payload. The Header is structured as follows:
|
|
15
|
+
*
|
|
16
|
+
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
17
|
+
* |------------------------|--------------------|--------------------|
|
|
18
|
+
* | Magic Number + Version | 3 | 3 |
|
|
19
|
+
* | KAS (resource locator) | 3 | 257 |
|
|
20
|
+
* | ECC Mode | 1 | 1 |
|
|
21
|
+
* | Payload + Sig Mode | 1 | 1 |
|
|
22
|
+
* | Policy | 3 | 257 |
|
|
23
|
+
* | Ephemeral Key | 33 | 67 |
|
|
24
|
+
*
|
|
25
|
+
*/
|
|
26
|
+
class Header {
|
|
27
|
+
static parse(buff) {
|
|
28
|
+
let offset = 0;
|
|
29
|
+
/**
|
|
30
|
+
* Magic number and version
|
|
31
|
+
*
|
|
32
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3311-magic-number--version
|
|
33
|
+
*/
|
|
34
|
+
// Convert to ascii
|
|
35
|
+
const magicNumberVersion = buff.subarray(Header.MAGIC_NUMBER_VERSION_BYTE_OFF, Header.MAGIC_NUMBER_VERSION_BYTE_LEN);
|
|
36
|
+
offset += Header.MAGIC_NUMBER_VERSION_BYTE_LEN;
|
|
37
|
+
/**
|
|
38
|
+
* KAS Resource Locator
|
|
39
|
+
*
|
|
40
|
+
* KAS is a typeof Resource Locator
|
|
41
|
+
*
|
|
42
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3312-kas
|
|
43
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#341-resource-locator
|
|
44
|
+
*/
|
|
45
|
+
const kas = ResourceLocator.parse(buff.subarray(offset));
|
|
46
|
+
offset += kas.length;
|
|
47
|
+
/**
|
|
48
|
+
* ECC & Binding Mode
|
|
49
|
+
*
|
|
50
|
+
* This section contains a 1-byte bitfield describing the ECC Params and Policy binding strategy to use.
|
|
51
|
+
* The Policy Binding strategy is either using a 64-bit GMAC (using AES-256-GCM) tag or an ECDSA signature.
|
|
52
|
+
* The signature size depends on the size of ECC Params used. The nanotdf at this time only supports methods that
|
|
53
|
+
* involve Elliptic Curve Cryptography. The fields are structured as follows:
|
|
54
|
+
*
|
|
55
|
+
* | Section | Bit Length | Bit start index |
|
|
56
|
+
* |---------------------------|------------|-----------------|
|
|
57
|
+
* | USE_ECDSA_BINDING | 1 | 7 |
|
|
58
|
+
* | UNUSED | 4 | 3 |
|
|
59
|
+
* | Ephemeral ECC Params Enum | 3 | 0 |
|
|
60
|
+
*
|
|
61
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3313-ecc-and-binding-mode
|
|
62
|
+
*/
|
|
63
|
+
const eccBindingModeDV = buff.subarray(offset, offset + Header.ECC_BINDING_MODE_BYTE_LEN);
|
|
64
|
+
const useECDSABinding = eccBindingModeDV[0] >> 7 === 1; // Last bit
|
|
65
|
+
const ephemeralCurveName = eccBindingModeDV[0] & 0x7; // First 3 bits
|
|
66
|
+
offset += Header.ECC_BINDING_MODE_BYTE_LEN;
|
|
67
|
+
/**
|
|
68
|
+
* Symmetric & payload config
|
|
69
|
+
*
|
|
70
|
+
* This section contains a 1 byte data structure composed of bitfields that describe the symmetric ciphers for
|
|
71
|
+
* encrypted payloads. This cipher applies to both the Payload and the Policy of the nanotdf. The fields are as
|
|
72
|
+
* follows:
|
|
73
|
+
*
|
|
74
|
+
* | Section | Bit Length | Bit start index |
|
|
75
|
+
* |-----------------------|------------|-----------------|
|
|
76
|
+
* | HAS_SIGNATURE | 1 | 7 |
|
|
77
|
+
* | Signature ECC Mode | 3 | 4 |
|
|
78
|
+
* | Symmetric Cipher Enum | 4 | 0 |
|
|
79
|
+
*
|
|
80
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3314-symmetric-and-payload-config
|
|
81
|
+
*/
|
|
82
|
+
const symmetricPayloadDV = buff.subarray(offset, offset + Header.ECC_BINDING_MODE_BYTE_LEN);
|
|
83
|
+
const hasSignature = symmetricPayloadDV[0] >> 7 === 1; // Last bit
|
|
84
|
+
const signatureCurveName = (symmetricPayloadDV[0] >> 4) & 0x7; // Middle 3 bits
|
|
85
|
+
const symmetricCipher = symmetricPayloadDV[0] & 0xf; // First 4 bits
|
|
86
|
+
offset += Header.SYMMETRIC_PAYLOAD_CONFIG_BYTE_LEN;
|
|
87
|
+
/**
|
|
88
|
+
* Policy
|
|
89
|
+
*
|
|
90
|
+
* This section contains a Policy object. The data contained in the Policy allows for definition flexible
|
|
91
|
+
* definitions of a policy including a policy by reference, or an embedded policy. Refer to the Policy object's
|
|
92
|
+
* definition in Section 3.4.2
|
|
93
|
+
*
|
|
94
|
+
* The structure of the Policy is as follows:
|
|
95
|
+
*
|
|
96
|
+
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
97
|
+
* |-----------|--------------------|--------------------|
|
|
98
|
+
* | Type Enum | 1 | 1 |
|
|
99
|
+
* | Body | 3 | 257 |
|
|
100
|
+
* | Binding | 8 | 132 |
|
|
101
|
+
*
|
|
102
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3315-policy
|
|
103
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#342-policy
|
|
104
|
+
*/
|
|
105
|
+
const { policy, offset: nextOffset } = PolicyFactory.parse(buff.subarray(offset), useECDSABinding, ephemeralCurveName);
|
|
106
|
+
offset += nextOffset;
|
|
107
|
+
/**
|
|
108
|
+
* Ephemeral public key
|
|
109
|
+
*
|
|
110
|
+
* This section contains a Key object. The size of the key is determined by the Encryption Method Section.
|
|
111
|
+
*
|
|
112
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3316-key
|
|
113
|
+
*/
|
|
114
|
+
// TODO: Resolve where offset isn't adding 1 byte
|
|
115
|
+
const ephemeralPublicKeyLength = lengthOfPublicKey(ephemeralCurveName) + 1;
|
|
116
|
+
const ephemeralPublicKey = buff.subarray(offset, offset + ephemeralPublicKeyLength);
|
|
117
|
+
offset += ephemeralPublicKeyLength;
|
|
118
|
+
// Check if the ephemeral public key length is not the same length
|
|
119
|
+
if (ephemeralPublicKey.byteLength !== ephemeralPublicKeyLength) {
|
|
120
|
+
throw new InvalidFileError('nanotdf parse failure: public key read failure');
|
|
121
|
+
}
|
|
122
|
+
const header = new Header(magicNumberVersion, kas, useECDSABinding, ephemeralCurveName, hasSignature, signatureCurveName, symmetricCipher, policy, ephemeralPublicKey);
|
|
123
|
+
return {
|
|
124
|
+
header,
|
|
125
|
+
offset,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//Ephemeral Public Key
|
|
129
|
+
// protected _ephemeralPublicKey: string | null = null;
|
|
130
|
+
constructor(magicNumberVersion, kas, useECDSABinding, ephemeralCurveName, hasSignature, signatureCurveName, symmetricCipher, policy, ephemeralPublicKey) {
|
|
131
|
+
// Magic Number & Version
|
|
132
|
+
this.magicNumberVersion = DefaultParams.magicNumberVersion;
|
|
133
|
+
// ECC & Binding Mode
|
|
134
|
+
this.useECDSABinding = DefaultParams.ecdsaBinding;
|
|
135
|
+
this.ephemeralCurveName = DefaultParams.ephemeralCurveName;
|
|
136
|
+
// Symmetric & Payload Config
|
|
137
|
+
this.hasSignature = DefaultParams.signature;
|
|
138
|
+
this.signatureCurveName = DefaultParams.signatureCurveName;
|
|
139
|
+
this.symmetricCipher = DefaultParams.symmetricCipher;
|
|
140
|
+
this.magicNumberVersion = magicNumberVersion;
|
|
141
|
+
this.kas = kas;
|
|
142
|
+
this.useECDSABinding = useECDSABinding;
|
|
143
|
+
this.ephemeralCurveName = ephemeralCurveName;
|
|
144
|
+
this.hasSignature = hasSignature;
|
|
145
|
+
this.signatureCurveName = signatureCurveName;
|
|
146
|
+
this.symmetricCipher = symmetricCipher;
|
|
147
|
+
this.policy = policy;
|
|
148
|
+
this.ephemeralPublicKey = ephemeralPublicKey;
|
|
149
|
+
// Auth tag length in bits (i.e. AES GCM 64 bit)
|
|
150
|
+
this.authTagLength = getBitLength(this.symmetricCipher);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Copy the contents of the header to buffer
|
|
154
|
+
*/
|
|
155
|
+
copyToBuffer(target) {
|
|
156
|
+
if (this.length > target.length) {
|
|
157
|
+
throw new InvalidFileError('invalid buffer size to copy tdf header');
|
|
158
|
+
}
|
|
159
|
+
let offset = 0;
|
|
160
|
+
// Write Magic number and version
|
|
161
|
+
target.set(this.magicNumberVersion, 0);
|
|
162
|
+
offset += this.magicNumberVersion.length;
|
|
163
|
+
// Write kas resource locator
|
|
164
|
+
const kasResourceLocatorBuf = this.kas.toBuffer();
|
|
165
|
+
target.set(kasResourceLocatorBuf, offset);
|
|
166
|
+
offset += kasResourceLocatorBuf.length;
|
|
167
|
+
// Write ECC & Binding Mode
|
|
168
|
+
const ecdsaBinding = this.useECDSABinding ? 1 : 0;
|
|
169
|
+
const eccBingingMode = (ecdsaBinding << 7) | this.ephemeralCurveName;
|
|
170
|
+
const eccBingingModeAsByte = new Uint8Array(1);
|
|
171
|
+
eccBingingModeAsByte[0] = eccBingingMode;
|
|
172
|
+
target.set(eccBingingModeAsByte, offset);
|
|
173
|
+
offset += eccBingingModeAsByte.length;
|
|
174
|
+
// Write symmetric & payload config
|
|
175
|
+
const isSignatureEnable = this.hasSignature ? 1 : 0;
|
|
176
|
+
const symmetricPayloadConfig = (isSignatureEnable << 7) | this.signatureCurveName | this.symmetricCipher;
|
|
177
|
+
const symmetricPayloadConfigAsByte = new Uint8Array(1);
|
|
178
|
+
symmetricPayloadConfigAsByte[0] = symmetricPayloadConfig;
|
|
179
|
+
target.set(symmetricPayloadConfigAsByte, offset);
|
|
180
|
+
offset += symmetricPayloadConfigAsByte.length;
|
|
181
|
+
// Write the policy
|
|
182
|
+
const policyBuffer = this.policy.toBuffer();
|
|
183
|
+
target.set(policyBuffer, offset);
|
|
184
|
+
offset += policyBuffer.length;
|
|
185
|
+
// Write the ephemeral public key
|
|
186
|
+
target.set(this.ephemeralPublicKey, offset);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Length
|
|
190
|
+
*
|
|
191
|
+
* @returns { number } Length of header
|
|
192
|
+
*/
|
|
193
|
+
get length() {
|
|
194
|
+
return (
|
|
195
|
+
// Length of the magic number and version
|
|
196
|
+
this.magicNumberVersion.length +
|
|
197
|
+
// Length of the KAS resource locator
|
|
198
|
+
this.kas.length +
|
|
199
|
+
// ECC & Binding Mode - 1 Bytes
|
|
200
|
+
1 +
|
|
201
|
+
// symmetric & payload config - 1 Bytes
|
|
202
|
+
1 +
|
|
203
|
+
// Length of the policy
|
|
204
|
+
this.policy.getLength() +
|
|
205
|
+
// Length of the ephemeral public key
|
|
206
|
+
this.ephemeralPublicKey.length);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Return nanoTDF header as buffer
|
|
210
|
+
*
|
|
211
|
+
* Warning: This method will allocate memory of length of the header, use
|
|
212
|
+
* copyToBuffer() when copy is not needed.
|
|
213
|
+
*/
|
|
214
|
+
toBuffer() {
|
|
215
|
+
const arrayBuffer = new ArrayBuffer(this.length);
|
|
216
|
+
const target = new Uint8Array(arrayBuffer);
|
|
217
|
+
this.copyToBuffer(target);
|
|
218
|
+
return arrayBuffer;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get KAS Rewrap URL
|
|
222
|
+
*/
|
|
223
|
+
getKasRewrapUrl() {
|
|
224
|
+
try {
|
|
225
|
+
return `${rstrip(this.kas.url, '/')}/v2/rewrap`;
|
|
226
|
+
}
|
|
227
|
+
catch (e) {
|
|
228
|
+
throw new ConfigurationError(`cannot construct KAS Rewrap URL: ${e.message}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Magic Number & Version
|
|
233
|
+
Header.MAGIC_NUMBER_VERSION_BYTE_OFF = 0;
|
|
234
|
+
Header.MAGIC_NUMBER_VERSION_BYTE_LEN = 3;
|
|
235
|
+
Header.MAGIC_NUMBER_OFFSET = 0;
|
|
236
|
+
Header.MAGIC_NUMBER_LENGTH = 18;
|
|
237
|
+
// ECC & Binding Mode
|
|
238
|
+
Header.ECC_BINDING_MODE_BYTE_LEN = 1;
|
|
239
|
+
Header.USE_ECDSA_BINDING_BIT_OFF = 0;
|
|
240
|
+
Header.EPHEMERAL_ECC_CURVE_NAME_BIT_OFF = -3;
|
|
241
|
+
// Symmetric & Payload Config
|
|
242
|
+
Header.SYMMETRIC_PAYLOAD_CONFIG_BYTE_LEN = 1;
|
|
243
|
+
Header.HAS_SIGNATURE_BIT_OFF = 1;
|
|
244
|
+
Header.HAS_SIGNATURE_BIT_LEN = 1;
|
|
245
|
+
Header.SIGNATURE_ECC_CURVE_NAME_BIT_OFF = 1;
|
|
246
|
+
Header.SIGNATURE_ECC_CURVE_NAME_BIT_LEN = 3;
|
|
247
|
+
Header.SYMMETRIC_CIPHER_BIT_OFF = 4;
|
|
248
|
+
Header.SYMMETRIC_CIPHER_BIT_LEN = 4;
|
|
249
|
+
export default Header;
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25hbm90ZGYvbW9kZWxzL0hlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTO0FBQ1QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLGVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLGFBQWEsTUFBTSwyQkFBMkIsQ0FBQztBQU10RCxVQUFVO0FBQ1YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxhQUFhLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQXFCLE1BQU07SUE0Q3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBZ0I7UUFDM0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWY7Ozs7V0FJRztRQUNILG1CQUFtQjtRQUNuQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3RDLE1BQU0sQ0FBQyw2QkFBNkIsRUFDcEMsTUFBTSxDQUFDLDZCQUE2QixDQUNyQyxDQUFDO1FBQ0YsTUFBTSxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQztRQUUvQzs7Ozs7OztXQU9HO1FBQ0gsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDekQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFFckI7Ozs7Ozs7Ozs7Ozs7OztXQWVHO1FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDMUYsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVc7UUFDbkUsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxlQUFlO1FBQ3JFLE1BQU0sSUFBSSxNQUFNLENBQUMseUJBQXlCLENBQUM7UUFFM0M7Ozs7Ozs7Ozs7Ozs7O1dBY0c7UUFDSCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM1RixNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVztRQUNsRSxNQUFNLGtCQUFrQixHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsZ0JBQWdCO1FBQy9FLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLGVBQWU7UUFDcEUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQztRQUVuRDs7Ozs7Ozs7Ozs7Ozs7Ozs7V0FpQkc7UUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUNyQixlQUFlLEVBQ2Ysa0JBQWtCLENBQ25CLENBQUM7UUFDRixNQUFNLElBQUksVUFBVSxDQUFDO1FBRXJCOzs7Ozs7V0FNRztRQUNILGlEQUFpRDtRQUNqRCxNQUFNLHdCQUF3QixHQUFHLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLHdCQUF3QixDQUFDLENBQUM7UUFDcEYsTUFBTSxJQUFJLHdCQUF3QixDQUFDO1FBRW5DLGtFQUFrRTtRQUNsRSxJQUFJLGtCQUFrQixDQUFDLFVBQVUsS0FBSyx3QkFBd0IsRUFBRTtZQUM5RCxNQUFNLElBQUksZ0JBQWdCLENBQUMsZ0RBQWdELENBQUMsQ0FBQztTQUM5RTtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUN2QixrQkFBa0IsRUFDbEIsR0FBRyxFQUNILGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsTUFBTSxFQUNOLGtCQUFrQixDQUNuQixDQUFDO1FBRUYsT0FBTztZQUNMLE1BQU07WUFDTixNQUFNO1NBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsdURBQXVEO0lBRXZELFlBQ0Usa0JBQThCLEVBQzlCLEdBQW9CLEVBQ3BCLGVBQXdCLEVBQ3hCLGtCQUFpQyxFQUNqQyxZQUFxQixFQUNyQixrQkFBaUMsRUFDakMsZUFBMkIsRUFDM0IsTUFBdUIsRUFDdkIsa0JBQThCO1FBbktoQyx5QkFBeUI7UUFDbEIsdUJBQWtCLEdBQWUsYUFBYSxDQUFDLGtCQUFrQixDQUFDO1FBS3pFLHFCQUFxQjtRQUNkLG9CQUFlLEdBQVksYUFBYSxDQUFDLFlBQVksQ0FBQztRQUN0RCx1QkFBa0IsR0FBa0IsYUFBYSxDQUFDLGtCQUFrQixDQUFDO1FBRTVFLDZCQUE2QjtRQUN0QixpQkFBWSxHQUFZLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDaEQsdUJBQWtCLEdBQWtCLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztRQUNyRSxvQkFBZSxHQUFlLGFBQWEsQ0FBQyxlQUFlLENBQUM7UUF3SmpFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3QyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBRTdDLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLE1BQWtCO1FBQzdCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQy9CLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1NBQ3RFO1FBRUQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsaUNBQWlDO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDO1FBRXpDLDZCQUE2QjtRQUM3QixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDO1FBRXZDLDJCQUEyQjtRQUMzQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLGNBQWMsR0FBRyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDckUsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUM7UUFDekMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6QyxNQUFNLElBQUksb0JBQW9CLENBQUMsTUFBTSxDQUFDO1FBRXRDLG1DQUFtQztRQUNuQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sc0JBQXNCLEdBQzFCLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDNUUsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxzQkFBc0IsQ0FBQztRQUN6RCxNQUFNLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sSUFBSSw0QkFBNEIsQ0FBQyxNQUFNLENBQUM7UUFFOUMsbUJBQW1CO1FBQ25CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakMsTUFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFFOUIsaUNBQWlDO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsT0FBTztRQUNMLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUM5QixxQ0FBcUM7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNO1lBQ2YsK0JBQStCO1lBQy9CLENBQUM7WUFDRCx1Q0FBdUM7WUFDdkMsQ0FBQztZQUNELHVCQUF1QjtZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUN2QixxQ0FBcUM7WUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVE7UUFDTixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsSUFBSTtZQUNGLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQztTQUNqRDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLGtCQUFrQixDQUFDLG9DQUFvQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUMvRTtJQUNILENBQUM7O0FBaFNELHlCQUF5QjtBQUNULG9DQUE2QixHQUFHLENBQUMsQUFBSixDQUFLO0FBQ2xDLG9DQUE2QixHQUFHLENBQUMsQUFBSixDQUFLO0FBQ2xDLDBCQUFtQixHQUFHLENBQUMsQUFBSixDQUFLO0FBQ3hCLDBCQUFtQixHQUFHLEVBQUUsQUFBTCxDQUFNO0FBRXpDLHFCQUFxQjtBQUNMLGdDQUF5QixHQUFHLENBQUMsQUFBSixDQUFLO0FBQzlCLGdDQUF5QixHQUFHLENBQUMsQUFBSixDQUFLO0FBQzlCLHVDQUFnQyxHQUFHLENBQUMsQ0FBQyxBQUFMLENBQU07QUFFdEQsNkJBQTZCO0FBQ2Isd0NBQWlDLEdBQUcsQ0FBQyxBQUFKLENBQUs7QUFDdEMsNEJBQXFCLEdBQUcsQ0FBQyxBQUFKLENBQUs7QUFDMUIsNEJBQXFCLEdBQUcsQ0FBQyxBQUFKLENBQUs7QUFDMUIsdUNBQWdDLEdBQUcsQ0FBQyxBQUFKLENBQUs7QUFDckMsdUNBQWdDLEdBQUcsQ0FBQyxBQUFKLENBQUs7QUFDckMsK0JBQXdCLEdBQUcsQ0FBQyxBQUFKLENBQUs7QUFDN0IsK0JBQXdCLEdBQUcsQ0FBQyxBQUFKLENBQUs7ZUFuQjFCLE1BQU0ifQ==
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { getBitLength } from './Ciphers.js';
|
|
2
|
+
import { ConfigurationError, InvalidFileError } from '../../errors.js';
|
|
3
|
+
/**
|
|
4
|
+
* Payload
|
|
5
|
+
*
|
|
6
|
+
* The payload section of the nanotdf contains the ciphertext that is protected by the policy defined in the Header.
|
|
7
|
+
* The structure of the Payload is as follows:
|
|
8
|
+
*
|
|
9
|
+
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
10
|
+
* |-----------------------|--------------------|--------------------|
|
|
11
|
+
* | Length | 3 | 3 |
|
|
12
|
+
* | IV | 3 | 3 |
|
|
13
|
+
* | Ciphertext | 0 | 16777204 |
|
|
14
|
+
* | Payload MAC (AuthTag) | 8 | 32 |
|
|
15
|
+
*/
|
|
16
|
+
class Payload {
|
|
17
|
+
/**
|
|
18
|
+
* Parse the payload
|
|
19
|
+
*
|
|
20
|
+
* Returns a new Payload object and the next offset
|
|
21
|
+
*
|
|
22
|
+
* @param buff Uint8Array
|
|
23
|
+
*/
|
|
24
|
+
static parse(header, buff, legacyTDF = false) {
|
|
25
|
+
let offset = 0;
|
|
26
|
+
const authTagByteLength = getBitLength(header.symmetricCipher) / 8;
|
|
27
|
+
/**
|
|
28
|
+
* Length
|
|
29
|
+
*
|
|
30
|
+
* This 3 byte unsigned integer dictates the length of the subsequent ciphertext section.
|
|
31
|
+
*
|
|
32
|
+
* NOTE: it includes the IV + Ciphertext + Auth Tag. To get the Auth Tag length you have to subtract the other
|
|
33
|
+
* lengths
|
|
34
|
+
*/
|
|
35
|
+
// TODO: This will not work in Big Endian host environments
|
|
36
|
+
const length = (buff[offset] << 16) + (buff[offset + 1] << 8) + buff[offset + 2];
|
|
37
|
+
const ciphertextLength = length - Payload.IV_LEN - authTagByteLength;
|
|
38
|
+
offset += Payload.LENGTH_LEN;
|
|
39
|
+
const inRange = length >= this.MIN_LENGTH && length <= this.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE;
|
|
40
|
+
if (!inRange) {
|
|
41
|
+
throw new InvalidFileError('nanotdf parse failure: Payload Length Out Of Range');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parse IV
|
|
45
|
+
*
|
|
46
|
+
* The IV used for encryption. This value is a byte array containing the IV. This IV must never be reused with the
|
|
47
|
+
* same symmetric key. Also, to support an extremely compacted version of the nanotdf the IV value 00 00 00 is
|
|
48
|
+
* reserved for use with an encrypted policy.
|
|
49
|
+
*/
|
|
50
|
+
let iv = buff.subarray(offset, offset + Payload.IV_LEN);
|
|
51
|
+
offset += Payload.IV_LEN;
|
|
52
|
+
if (iv.byteLength != 3) {
|
|
53
|
+
throw new InvalidFileError('nanotdf parse failure: Invalid Payload Length');
|
|
54
|
+
}
|
|
55
|
+
if (!legacyTDF) {
|
|
56
|
+
const actuallIV = new Uint8Array(12).fill(0);
|
|
57
|
+
// The the iv from payload to lower-order bits
|
|
58
|
+
actuallIV.set(iv, 9);
|
|
59
|
+
// update the iv
|
|
60
|
+
iv = actuallIV;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Parse Ciphertext w/ Auth Tag
|
|
64
|
+
*/
|
|
65
|
+
const ciphertextWithAuthTag = buff.subarray(offset, offset + ciphertextLength + authTagByteLength);
|
|
66
|
+
if (ciphertextWithAuthTag.byteLength + Payload.LENGTH_LEN !== length) {
|
|
67
|
+
throw new InvalidFileError('nanotdf parse failure: Invalid Payload Length');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Parse Ciphertext
|
|
71
|
+
*
|
|
72
|
+
* The byte array of the ciphertext that is protected in the nanotdf. The encryption method used to create or decrypt
|
|
73
|
+
* the ciphertext is defined in the Key Access object in the header.
|
|
74
|
+
*/
|
|
75
|
+
const ciphertext = buff.subarray(offset, offset + ciphertextLength);
|
|
76
|
+
offset += ciphertextLength;
|
|
77
|
+
/**
|
|
78
|
+
* Auth Tag
|
|
79
|
+
*
|
|
80
|
+
* GMAC = 8 byte
|
|
81
|
+
* ECDSA = size of curve
|
|
82
|
+
*
|
|
83
|
+
* The MAC of the payload. The Size of this MAC is determined by the Encryption Method Enum used in the Symmetric and
|
|
84
|
+
* Payload Config object in the header.
|
|
85
|
+
*
|
|
86
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3314-symmetric-and-payload-config
|
|
87
|
+
*/
|
|
88
|
+
const authTag = buff.subarray(offset, offset + authTagByteLength);
|
|
89
|
+
offset += authTagByteLength;
|
|
90
|
+
return {
|
|
91
|
+
payload: new Payload(iv, ciphertext, authTag, ciphertextWithAuthTag),
|
|
92
|
+
offset,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
constructor(iv, ciphertext, authTag, ciphertextWithAuthTag) {
|
|
96
|
+
this.iv = iv;
|
|
97
|
+
this.ciphertext = ciphertext;
|
|
98
|
+
this.authTag = authTag;
|
|
99
|
+
// If ciphertextWithAuthTag is not set then combine it
|
|
100
|
+
// Ideally it is set so an additional buffer is not needed
|
|
101
|
+
if (ciphertextWithAuthTag === undefined) {
|
|
102
|
+
this.ciphertextWithAuthTag = new Uint8Array(ciphertext.length + authTag.length);
|
|
103
|
+
this.ciphertextWithAuthTag.set(ciphertext);
|
|
104
|
+
this.ciphertextWithAuthTag.set(authTag, ciphertext.length);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
this.ciphertextWithAuthTag = ciphertextWithAuthTag;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Length
|
|
112
|
+
*
|
|
113
|
+
* @returns { number } Length of signature
|
|
114
|
+
*/
|
|
115
|
+
get length() {
|
|
116
|
+
return (
|
|
117
|
+
// Bytes(3) to hold the length of the payload
|
|
118
|
+
3 +
|
|
119
|
+
// Length of the IV
|
|
120
|
+
this.iv.length +
|
|
121
|
+
// Length of the ciphertext
|
|
122
|
+
this.ciphertext.length +
|
|
123
|
+
// Length of the auth tag
|
|
124
|
+
this.authTag.length);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Copy the contents of the signature to buffer
|
|
128
|
+
*/
|
|
129
|
+
copyToBuffer(target) {
|
|
130
|
+
if (this.length > target.length) {
|
|
131
|
+
throw new Error('internal: invalid buffer size to copy payload');
|
|
132
|
+
}
|
|
133
|
+
const lengthOfEncryptedPayload = this.iv.length + this.ciphertext.length + this.authTag.length;
|
|
134
|
+
if (lengthOfEncryptedPayload > Payload.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE) {
|
|
135
|
+
throw new ConfigurationError("TDF encrypted payload can't be more that 2^24");
|
|
136
|
+
}
|
|
137
|
+
const lengthAsUint32 = new Uint32Array(1);
|
|
138
|
+
lengthAsUint32[0] = lengthOfEncryptedPayload;
|
|
139
|
+
const lengthAsUint24 = new Uint8Array(lengthAsUint32.buffer);
|
|
140
|
+
// NOTE: We are only interested in only first 3 bytes.
|
|
141
|
+
const payloadSizeAsBg = new Uint8Array(3);
|
|
142
|
+
payloadSizeAsBg[0] = lengthAsUint24[2];
|
|
143
|
+
payloadSizeAsBg[1] = lengthAsUint24[1];
|
|
144
|
+
payloadSizeAsBg[2] = lengthAsUint24[0];
|
|
145
|
+
target.set(payloadSizeAsBg, 0);
|
|
146
|
+
target.set(this.iv, payloadSizeAsBg.length);
|
|
147
|
+
target.set(this.ciphertext, payloadSizeAsBg.length + this.iv.length);
|
|
148
|
+
target.set(this.authTag, payloadSizeAsBg.length + this.iv.length + this.ciphertext.length);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
Payload.LENGTH_LEN = 3;
|
|
152
|
+
Payload.IV_LEN = 3;
|
|
153
|
+
Payload.MIN_LENGTH = 11;
|
|
154
|
+
Payload.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE = 16777216; // 3 bytes unsigned int.
|
|
155
|
+
export default Payload;
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW5vdGRmL21vZGVscy9QYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkU7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBcUIsT0FBTztJQVcxQjs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUNWLE1BQWMsRUFDZCxJQUFnQixFQUNoQixTQUFTLEdBQUcsS0FBSztRQUVqQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRW5FOzs7Ozs7O1dBT0c7UUFDSCwyREFBMkQ7UUFDM0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakYsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQztRQUNyRSxNQUFNLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUU3QixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLGlDQUFpQyxDQUFDO1FBRTlGLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixNQUFNLElBQUksZ0JBQWdCLENBQUMsb0RBQW9ELENBQUMsQ0FBQztTQUNsRjtRQUVEOzs7Ozs7V0FN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
|