@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,322 @@
|
|
|
1
|
+
// Models
|
|
2
|
+
import { getBitLength } from './Ciphers.js';
|
|
3
|
+
import ResourceLocator from './ResourceLocator.js';
|
|
4
|
+
import PolicyFactory from './Policy/PolicyFactory.js';
|
|
5
|
+
// Interfaces
|
|
6
|
+
import PolicyInterface from '../interfaces/PolicyInterface.js';
|
|
7
|
+
// Enum
|
|
8
|
+
import CipherEnum from '../enum/CipherEnum.js';
|
|
9
|
+
import CurveNameEnum from '../enum/CurveNameEnum.js';
|
|
10
|
+
// Helpers
|
|
11
|
+
import { lengthOfPublicKey } from '../helpers/calculateByCurve.js';
|
|
12
|
+
import DefaultParams from './DefaultParams.js';
|
|
13
|
+
import { ConfigurationError, InvalidFileError } from '../../errors.js';
|
|
14
|
+
import { rstrip } from '../../utils.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* NanoTDF Header
|
|
18
|
+
*
|
|
19
|
+
* The header section is intended to be sent to a KAS and is used by the KAS to derive the decryption key that can
|
|
20
|
+
* decrypts the nanotdf's payload. The Header is structured as follows:
|
|
21
|
+
*
|
|
22
|
+
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
23
|
+
* |------------------------|--------------------|--------------------|
|
|
24
|
+
* | Magic Number + Version | 3 | 3 |
|
|
25
|
+
* | KAS (resource locator) | 3 | 257 |
|
|
26
|
+
* | ECC Mode | 1 | 1 |
|
|
27
|
+
* | Payload + Sig Mode | 1 | 1 |
|
|
28
|
+
* | Policy | 3 | 257 |
|
|
29
|
+
* | Ephemeral Key | 33 | 67 |
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
export default class Header {
|
|
33
|
+
// Magic Number & Version
|
|
34
|
+
static readonly MAGIC_NUMBER_VERSION_BYTE_OFF = 0;
|
|
35
|
+
static readonly MAGIC_NUMBER_VERSION_BYTE_LEN = 3;
|
|
36
|
+
static readonly MAGIC_NUMBER_OFFSET = 0;
|
|
37
|
+
static readonly MAGIC_NUMBER_LENGTH = 18;
|
|
38
|
+
|
|
39
|
+
// ECC & Binding Mode
|
|
40
|
+
static readonly ECC_BINDING_MODE_BYTE_LEN = 1;
|
|
41
|
+
static readonly USE_ECDSA_BINDING_BIT_OFF = 0;
|
|
42
|
+
static readonly EPHEMERAL_ECC_CURVE_NAME_BIT_OFF = -3;
|
|
43
|
+
|
|
44
|
+
// Symmetric & Payload Config
|
|
45
|
+
static readonly SYMMETRIC_PAYLOAD_CONFIG_BYTE_LEN = 1;
|
|
46
|
+
static readonly HAS_SIGNATURE_BIT_OFF = 1;
|
|
47
|
+
static readonly HAS_SIGNATURE_BIT_LEN = 1;
|
|
48
|
+
static readonly SIGNATURE_ECC_CURVE_NAME_BIT_OFF = 1;
|
|
49
|
+
static readonly SIGNATURE_ECC_CURVE_NAME_BIT_LEN = 3;
|
|
50
|
+
static readonly SYMMETRIC_CIPHER_BIT_OFF = 4;
|
|
51
|
+
static readonly SYMMETRIC_CIPHER_BIT_LEN = 4;
|
|
52
|
+
|
|
53
|
+
// Magic Number & Version
|
|
54
|
+
public magicNumberVersion: Uint8Array = DefaultParams.magicNumberVersion;
|
|
55
|
+
|
|
56
|
+
// KAS Resource Locator
|
|
57
|
+
public kas: ResourceLocator;
|
|
58
|
+
|
|
59
|
+
// ECC & Binding Mode
|
|
60
|
+
public useECDSABinding: boolean = DefaultParams.ecdsaBinding;
|
|
61
|
+
public ephemeralCurveName: CurveNameEnum = DefaultParams.ephemeralCurveName;
|
|
62
|
+
|
|
63
|
+
// Symmetric & Payload Config
|
|
64
|
+
public hasSignature: boolean = DefaultParams.signature;
|
|
65
|
+
public signatureCurveName: CurveNameEnum = DefaultParams.signatureCurveName;
|
|
66
|
+
public symmetricCipher: CipherEnum = DefaultParams.symmetricCipher;
|
|
67
|
+
// Auth tag length (in bits) is not part of the spec, but is needed for decrypt
|
|
68
|
+
public authTagLength: number;
|
|
69
|
+
|
|
70
|
+
// Policy
|
|
71
|
+
public policy: PolicyInterface;
|
|
72
|
+
|
|
73
|
+
// Ephemeral Public Key
|
|
74
|
+
public ephemeralPublicKey: Uint8Array;
|
|
75
|
+
|
|
76
|
+
static parse(buff: Uint8Array) {
|
|
77
|
+
let offset = 0;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Magic number and version
|
|
81
|
+
*
|
|
82
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3311-magic-number--version
|
|
83
|
+
*/
|
|
84
|
+
// Convert to ascii
|
|
85
|
+
const magicNumberVersion = buff.subarray(
|
|
86
|
+
Header.MAGIC_NUMBER_VERSION_BYTE_OFF,
|
|
87
|
+
Header.MAGIC_NUMBER_VERSION_BYTE_LEN
|
|
88
|
+
);
|
|
89
|
+
offset += Header.MAGIC_NUMBER_VERSION_BYTE_LEN;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* KAS Resource Locator
|
|
93
|
+
*
|
|
94
|
+
* KAS is a typeof Resource Locator
|
|
95
|
+
*
|
|
96
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3312-kas
|
|
97
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#341-resource-locator
|
|
98
|
+
*/
|
|
99
|
+
const kas = ResourceLocator.parse(buff.subarray(offset));
|
|
100
|
+
offset += kas.length;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* ECC & Binding Mode
|
|
104
|
+
*
|
|
105
|
+
* This section contains a 1-byte bitfield describing the ECC Params and Policy binding strategy to use.
|
|
106
|
+
* The Policy Binding strategy is either using a 64-bit GMAC (using AES-256-GCM) tag or an ECDSA signature.
|
|
107
|
+
* The signature size depends on the size of ECC Params used. The nanotdf at this time only supports methods that
|
|
108
|
+
* involve Elliptic Curve Cryptography. The fields are structured as follows:
|
|
109
|
+
*
|
|
110
|
+
* | Section | Bit Length | Bit start index |
|
|
111
|
+
* |---------------------------|------------|-----------------|
|
|
112
|
+
* | USE_ECDSA_BINDING | 1 | 7 |
|
|
113
|
+
* | UNUSED | 4 | 3 |
|
|
114
|
+
* | Ephemeral ECC Params Enum | 3 | 0 |
|
|
115
|
+
*
|
|
116
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3313-ecc-and-binding-mode
|
|
117
|
+
*/
|
|
118
|
+
const eccBindingModeDV = buff.subarray(offset, offset + Header.ECC_BINDING_MODE_BYTE_LEN);
|
|
119
|
+
const useECDSABinding = eccBindingModeDV[0] >> 7 === 1; // Last bit
|
|
120
|
+
const ephemeralCurveName = eccBindingModeDV[0] & 0x7; // First 3 bits
|
|
121
|
+
offset += Header.ECC_BINDING_MODE_BYTE_LEN;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Symmetric & payload config
|
|
125
|
+
*
|
|
126
|
+
* This section contains a 1 byte data structure composed of bitfields that describe the symmetric ciphers for
|
|
127
|
+
* encrypted payloads. This cipher applies to both the Payload and the Policy of the nanotdf. The fields are as
|
|
128
|
+
* follows:
|
|
129
|
+
*
|
|
130
|
+
* | Section | Bit Length | Bit start index |
|
|
131
|
+
* |-----------------------|------------|-----------------|
|
|
132
|
+
* | HAS_SIGNATURE | 1 | 7 |
|
|
133
|
+
* | Signature ECC Mode | 3 | 4 |
|
|
134
|
+
* | Symmetric Cipher Enum | 4 | 0 |
|
|
135
|
+
*
|
|
136
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3314-symmetric-and-payload-config
|
|
137
|
+
*/
|
|
138
|
+
const symmetricPayloadDV = buff.subarray(offset, offset + Header.ECC_BINDING_MODE_BYTE_LEN);
|
|
139
|
+
const hasSignature = symmetricPayloadDV[0] >> 7 === 1; // Last bit
|
|
140
|
+
const signatureCurveName = (symmetricPayloadDV[0] >> 4) & 0x7; // Middle 3 bits
|
|
141
|
+
const symmetricCipher = symmetricPayloadDV[0] & 0xf; // First 4 bits
|
|
142
|
+
offset += Header.SYMMETRIC_PAYLOAD_CONFIG_BYTE_LEN;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Policy
|
|
146
|
+
*
|
|
147
|
+
* This section contains a Policy object. The data contained in the Policy allows for definition flexible
|
|
148
|
+
* definitions of a policy including a policy by reference, or an embedded policy. Refer to the Policy object's
|
|
149
|
+
* definition in Section 3.4.2
|
|
150
|
+
*
|
|
151
|
+
* The structure of the Policy is as follows:
|
|
152
|
+
*
|
|
153
|
+
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
154
|
+
* |-----------|--------------------|--------------------|
|
|
155
|
+
* | Type Enum | 1 | 1 |
|
|
156
|
+
* | Body | 3 | 257 |
|
|
157
|
+
* | Binding | 8 | 132 |
|
|
158
|
+
*
|
|
159
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3315-policy
|
|
160
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#342-policy
|
|
161
|
+
*/
|
|
162
|
+
const { policy, offset: nextOffset } = PolicyFactory.parse(
|
|
163
|
+
buff.subarray(offset),
|
|
164
|
+
useECDSABinding,
|
|
165
|
+
ephemeralCurveName
|
|
166
|
+
);
|
|
167
|
+
offset += nextOffset;
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Ephemeral public key
|
|
171
|
+
*
|
|
172
|
+
* This section contains a Key object. The size of the key is determined by the Encryption Method Section.
|
|
173
|
+
*
|
|
174
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3316-key
|
|
175
|
+
*/
|
|
176
|
+
// TODO: Resolve where offset isn't adding 1 byte
|
|
177
|
+
const ephemeralPublicKeyLength = lengthOfPublicKey(ephemeralCurveName) + 1;
|
|
178
|
+
const ephemeralPublicKey = buff.subarray(offset, offset + ephemeralPublicKeyLength);
|
|
179
|
+
offset += ephemeralPublicKeyLength;
|
|
180
|
+
|
|
181
|
+
// Check if the ephemeral public key length is not the same length
|
|
182
|
+
if (ephemeralPublicKey.byteLength !== ephemeralPublicKeyLength) {
|
|
183
|
+
throw new InvalidFileError('nanotdf parse failure: public key read failure');
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const header = new Header(
|
|
187
|
+
magicNumberVersion,
|
|
188
|
+
kas,
|
|
189
|
+
useECDSABinding,
|
|
190
|
+
ephemeralCurveName,
|
|
191
|
+
hasSignature,
|
|
192
|
+
signatureCurveName,
|
|
193
|
+
symmetricCipher,
|
|
194
|
+
policy,
|
|
195
|
+
ephemeralPublicKey
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
return {
|
|
199
|
+
header,
|
|
200
|
+
offset,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
//Ephemeral Public Key
|
|
205
|
+
// protected _ephemeralPublicKey: string | null = null;
|
|
206
|
+
|
|
207
|
+
constructor(
|
|
208
|
+
magicNumberVersion: Uint8Array,
|
|
209
|
+
kas: ResourceLocator,
|
|
210
|
+
useECDSABinding: boolean,
|
|
211
|
+
ephemeralCurveName: CurveNameEnum,
|
|
212
|
+
hasSignature: boolean,
|
|
213
|
+
signatureCurveName: CurveNameEnum,
|
|
214
|
+
symmetricCipher: CipherEnum,
|
|
215
|
+
policy: PolicyInterface,
|
|
216
|
+
ephemeralPublicKey: Uint8Array
|
|
217
|
+
) {
|
|
218
|
+
this.magicNumberVersion = magicNumberVersion;
|
|
219
|
+
this.kas = kas;
|
|
220
|
+
this.useECDSABinding = useECDSABinding;
|
|
221
|
+
this.ephemeralCurveName = ephemeralCurveName;
|
|
222
|
+
this.hasSignature = hasSignature;
|
|
223
|
+
this.signatureCurveName = signatureCurveName;
|
|
224
|
+
this.symmetricCipher = symmetricCipher;
|
|
225
|
+
this.policy = policy;
|
|
226
|
+
this.ephemeralPublicKey = ephemeralPublicKey;
|
|
227
|
+
|
|
228
|
+
// Auth tag length in bits (i.e. AES GCM 64 bit)
|
|
229
|
+
this.authTagLength = getBitLength(this.symmetricCipher);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Copy the contents of the header to buffer
|
|
234
|
+
*/
|
|
235
|
+
copyToBuffer(target: Uint8Array): void {
|
|
236
|
+
if (this.length > target.length) {
|
|
237
|
+
throw new InvalidFileError('invalid buffer size to copy tdf header');
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
let offset = 0;
|
|
241
|
+
|
|
242
|
+
// Write Magic number and version
|
|
243
|
+
target.set(this.magicNumberVersion, 0);
|
|
244
|
+
offset += this.magicNumberVersion.length;
|
|
245
|
+
|
|
246
|
+
// Write kas resource locator
|
|
247
|
+
const kasResourceLocatorBuf = this.kas.toBuffer();
|
|
248
|
+
target.set(kasResourceLocatorBuf, offset);
|
|
249
|
+
offset += kasResourceLocatorBuf.length;
|
|
250
|
+
|
|
251
|
+
// Write ECC & Binding Mode
|
|
252
|
+
const ecdsaBinding = this.useECDSABinding ? 1 : 0;
|
|
253
|
+
const eccBingingMode = (ecdsaBinding << 7) | this.ephemeralCurveName;
|
|
254
|
+
const eccBingingModeAsByte = new Uint8Array(1);
|
|
255
|
+
eccBingingModeAsByte[0] = eccBingingMode;
|
|
256
|
+
target.set(eccBingingModeAsByte, offset);
|
|
257
|
+
offset += eccBingingModeAsByte.length;
|
|
258
|
+
|
|
259
|
+
// Write symmetric & payload config
|
|
260
|
+
const isSignatureEnable = this.hasSignature ? 1 : 0;
|
|
261
|
+
const symmetricPayloadConfig =
|
|
262
|
+
(isSignatureEnable << 7) | this.signatureCurveName | this.symmetricCipher;
|
|
263
|
+
const symmetricPayloadConfigAsByte = new Uint8Array(1);
|
|
264
|
+
symmetricPayloadConfigAsByte[0] = symmetricPayloadConfig;
|
|
265
|
+
target.set(symmetricPayloadConfigAsByte, offset);
|
|
266
|
+
offset += symmetricPayloadConfigAsByte.length;
|
|
267
|
+
|
|
268
|
+
// Write the policy
|
|
269
|
+
const policyBuffer = this.policy.toBuffer();
|
|
270
|
+
target.set(policyBuffer, offset);
|
|
271
|
+
offset += policyBuffer.length;
|
|
272
|
+
|
|
273
|
+
// Write the ephemeral public key
|
|
274
|
+
target.set(this.ephemeralPublicKey, offset);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Length
|
|
279
|
+
*
|
|
280
|
+
* @returns { number } Length of header
|
|
281
|
+
*/
|
|
282
|
+
get length(): number {
|
|
283
|
+
return (
|
|
284
|
+
// Length of the magic number and version
|
|
285
|
+
this.magicNumberVersion.length +
|
|
286
|
+
// Length of the KAS resource locator
|
|
287
|
+
this.kas.length +
|
|
288
|
+
// ECC & Binding Mode - 1 Bytes
|
|
289
|
+
1 +
|
|
290
|
+
// symmetric & payload config - 1 Bytes
|
|
291
|
+
1 +
|
|
292
|
+
// Length of the policy
|
|
293
|
+
this.policy.getLength() +
|
|
294
|
+
// Length of the ephemeral public key
|
|
295
|
+
this.ephemeralPublicKey.length
|
|
296
|
+
);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Return nanoTDF header as buffer
|
|
301
|
+
*
|
|
302
|
+
* Warning: This method will allocate memory of length of the header, use
|
|
303
|
+
* copyToBuffer() when copy is not needed.
|
|
304
|
+
*/
|
|
305
|
+
toBuffer(): ArrayBuffer {
|
|
306
|
+
const arrayBuffer = new ArrayBuffer(this.length);
|
|
307
|
+
const target = new Uint8Array(arrayBuffer);
|
|
308
|
+
this.copyToBuffer(target);
|
|
309
|
+
return arrayBuffer;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Get KAS Rewrap URL
|
|
314
|
+
*/
|
|
315
|
+
getKasRewrapUrl(): string {
|
|
316
|
+
try {
|
|
317
|
+
return `${rstrip(this.kas.url, '/')}/v2/rewrap`;
|
|
318
|
+
} catch (e) {
|
|
319
|
+
throw new ConfigurationError(`cannot construct KAS Rewrap URL: ${e.message}`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import Header from './Header.js';
|
|
2
|
+
import { getBitLength } from './Ciphers.js';
|
|
3
|
+
import { ConfigurationError, InvalidFileError } from '../../errors.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Payload
|
|
7
|
+
*
|
|
8
|
+
* The payload section of the nanotdf contains the ciphertext that is protected by the policy defined in the Header.
|
|
9
|
+
* The structure of the Payload is as follows:
|
|
10
|
+
*
|
|
11
|
+
* | Section | Minimum Length (B) | Maximum Length (B) |
|
|
12
|
+
* |-----------------------|--------------------|--------------------|
|
|
13
|
+
* | Length | 3 | 3 |
|
|
14
|
+
* | IV | 3 | 3 |
|
|
15
|
+
* | Ciphertext | 0 | 16777204 |
|
|
16
|
+
* | Payload MAC (AuthTag) | 8 | 32 |
|
|
17
|
+
*/
|
|
18
|
+
export default class Payload {
|
|
19
|
+
static LENGTH_LEN = 3;
|
|
20
|
+
static IV_LEN = 3;
|
|
21
|
+
static MIN_LENGTH = 11;
|
|
22
|
+
static MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE = 16777216; // 3 bytes unsigned int.
|
|
23
|
+
|
|
24
|
+
public iv: Uint8Array;
|
|
25
|
+
public ciphertext: Uint8Array;
|
|
26
|
+
public authTag: Uint8Array;
|
|
27
|
+
public ciphertextWithAuthTag: Uint8Array;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Parse the payload
|
|
31
|
+
*
|
|
32
|
+
* Returns a new Payload object and the next offset
|
|
33
|
+
*
|
|
34
|
+
* @param buff Uint8Array
|
|
35
|
+
*/
|
|
36
|
+
static parse(
|
|
37
|
+
header: Header,
|
|
38
|
+
buff: Uint8Array,
|
|
39
|
+
legacyTDF = false
|
|
40
|
+
): { payload: Payload; offset: number } {
|
|
41
|
+
let offset = 0;
|
|
42
|
+
const authTagByteLength = getBitLength(header.symmetricCipher) / 8;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Length
|
|
46
|
+
*
|
|
47
|
+
* This 3 byte unsigned integer dictates the length of the subsequent ciphertext section.
|
|
48
|
+
*
|
|
49
|
+
* NOTE: it includes the IV + Ciphertext + Auth Tag. To get the Auth Tag length you have to subtract the other
|
|
50
|
+
* lengths
|
|
51
|
+
*/
|
|
52
|
+
// TODO: This will not work in Big Endian host environments
|
|
53
|
+
const length = (buff[offset] << 16) + (buff[offset + 1] << 8) + buff[offset + 2];
|
|
54
|
+
const ciphertextLength = length - Payload.IV_LEN - authTagByteLength;
|
|
55
|
+
offset += Payload.LENGTH_LEN;
|
|
56
|
+
|
|
57
|
+
const inRange = length >= this.MIN_LENGTH && length <= this.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE;
|
|
58
|
+
|
|
59
|
+
if (!inRange) {
|
|
60
|
+
throw new InvalidFileError('nanotdf parse failure: Payload Length Out Of Range');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Parse IV
|
|
65
|
+
*
|
|
66
|
+
* The IV used for encryption. This value is a byte array containing the IV. This IV must never be reused with the
|
|
67
|
+
* same symmetric key. Also, to support an extremely compacted version of the nanotdf the IV value 00 00 00 is
|
|
68
|
+
* reserved for use with an encrypted policy.
|
|
69
|
+
*/
|
|
70
|
+
let iv = buff.subarray(offset, offset + Payload.IV_LEN);
|
|
71
|
+
offset += Payload.IV_LEN;
|
|
72
|
+
|
|
73
|
+
if (iv.byteLength != 3) {
|
|
74
|
+
throw new InvalidFileError('nanotdf parse failure: Invalid Payload Length');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (!legacyTDF) {
|
|
78
|
+
const actuallIV = new Uint8Array(12).fill(0);
|
|
79
|
+
|
|
80
|
+
// The the iv from payload to lower-order bits
|
|
81
|
+
actuallIV.set(iv, 9);
|
|
82
|
+
|
|
83
|
+
// update the iv
|
|
84
|
+
iv = actuallIV;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Parse Ciphertext w/ Auth Tag
|
|
89
|
+
*/
|
|
90
|
+
const ciphertextWithAuthTag = buff.subarray(
|
|
91
|
+
offset,
|
|
92
|
+
offset + ciphertextLength + authTagByteLength
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
if (ciphertextWithAuthTag.byteLength + Payload.LENGTH_LEN !== length) {
|
|
96
|
+
throw new InvalidFileError('nanotdf parse failure: Invalid Payload Length');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Parse Ciphertext
|
|
101
|
+
*
|
|
102
|
+
* The byte array of the ciphertext that is protected in the nanotdf. The encryption method used to create or decrypt
|
|
103
|
+
* the ciphertext is defined in the Key Access object in the header.
|
|
104
|
+
*/
|
|
105
|
+
const ciphertext = buff.subarray(offset, offset + ciphertextLength);
|
|
106
|
+
offset += ciphertextLength;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Auth Tag
|
|
110
|
+
*
|
|
111
|
+
* GMAC = 8 byte
|
|
112
|
+
* ECDSA = size of curve
|
|
113
|
+
*
|
|
114
|
+
* The MAC of the payload. The Size of this MAC is determined by the Encryption Method Enum used in the Symmetric and
|
|
115
|
+
* Payload Config object in the header.
|
|
116
|
+
*
|
|
117
|
+
* @link https://github.com/virtru/nanotdf/blob/master/spec/index.md#3314-symmetric-and-payload-config
|
|
118
|
+
*/
|
|
119
|
+
const authTag = buff.subarray(offset, offset + authTagByteLength);
|
|
120
|
+
offset += authTagByteLength;
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
payload: new Payload(iv, ciphertext, authTag, ciphertextWithAuthTag),
|
|
124
|
+
offset,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
constructor(
|
|
129
|
+
iv: Uint8Array,
|
|
130
|
+
ciphertext: Uint8Array,
|
|
131
|
+
authTag: Uint8Array,
|
|
132
|
+
ciphertextWithAuthTag?: Uint8Array
|
|
133
|
+
) {
|
|
134
|
+
this.iv = iv;
|
|
135
|
+
this.ciphertext = ciphertext;
|
|
136
|
+
this.authTag = authTag;
|
|
137
|
+
|
|
138
|
+
// If ciphertextWithAuthTag is not set then combine it
|
|
139
|
+
// Ideally it is set so an additional buffer is not needed
|
|
140
|
+
if (ciphertextWithAuthTag === undefined) {
|
|
141
|
+
this.ciphertextWithAuthTag = new Uint8Array(ciphertext.length + authTag.length);
|
|
142
|
+
this.ciphertextWithAuthTag.set(ciphertext);
|
|
143
|
+
this.ciphertextWithAuthTag.set(authTag, ciphertext.length);
|
|
144
|
+
} else {
|
|
145
|
+
this.ciphertextWithAuthTag = ciphertextWithAuthTag;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Length
|
|
151
|
+
*
|
|
152
|
+
* @returns { number } Length of signature
|
|
153
|
+
*/
|
|
154
|
+
get length(): number {
|
|
155
|
+
return (
|
|
156
|
+
// Bytes(3) to hold the length of the payload
|
|
157
|
+
3 +
|
|
158
|
+
// Length of the IV
|
|
159
|
+
this.iv.length +
|
|
160
|
+
// Length of the ciphertext
|
|
161
|
+
this.ciphertext.length +
|
|
162
|
+
// Length of the auth tag
|
|
163
|
+
this.authTag.length
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Copy the contents of the signature to buffer
|
|
169
|
+
*/
|
|
170
|
+
copyToBuffer(target: Uint8Array): void {
|
|
171
|
+
if (this.length > target.length) {
|
|
172
|
+
throw new Error('internal: invalid buffer size to copy payload');
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const lengthOfEncryptedPayload = this.iv.length + this.ciphertext.length + this.authTag.length;
|
|
176
|
+
if (lengthOfEncryptedPayload > Payload.MAX_NANO_TDF_ENCRYPT_PAYLOAD_SIZE) {
|
|
177
|
+
throw new ConfigurationError("TDF encrypted payload can't be more that 2^24");
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const lengthAsUint32 = new Uint32Array(1);
|
|
181
|
+
lengthAsUint32[0] = lengthOfEncryptedPayload;
|
|
182
|
+
|
|
183
|
+
const lengthAsUint24 = new Uint8Array(lengthAsUint32.buffer);
|
|
184
|
+
|
|
185
|
+
// NOTE: We are only interested in only first 3 bytes.
|
|
186
|
+
const payloadSizeAsBg = new Uint8Array(3);
|
|
187
|
+
payloadSizeAsBg[0] = lengthAsUint24[2];
|
|
188
|
+
payloadSizeAsBg[1] = lengthAsUint24[1];
|
|
189
|
+
payloadSizeAsBg[2] = lengthAsUint24[0];
|
|
190
|
+
|
|
191
|
+
target.set(payloadSizeAsBg, 0);
|
|
192
|
+
target.set(this.iv, payloadSizeAsBg.length);
|
|
193
|
+
target.set(this.ciphertext, payloadSizeAsBg.length + this.iv.length);
|
|
194
|
+
target.set(this.authTag, payloadSizeAsBg.length + this.iv.length + this.ciphertext.length);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import PolicyInterface from '../../interfaces/PolicyInterface.js';
|
|
2
|
+
import PolicyType from '../../enum/PolicyTypeEnum.js';
|
|
3
|
+
import { ConfigurationError } from '../../../errors.js';
|
|
4
|
+
|
|
5
|
+
abstract class AbstractPolicy implements PolicyInterface {
|
|
6
|
+
static readonly TYPE_BYTE_OFF = 0;
|
|
7
|
+
static readonly TYPE_BYTE_LEN = 1;
|
|
8
|
+
static readonly BODY_BYTE_OFF = 1;
|
|
9
|
+
static readonly BODY_BYTE_MIN_LEN = 3;
|
|
10
|
+
static readonly BODY_BYTE_MAX_LEN = 257;
|
|
11
|
+
static readonly BINDING_BYTE_MIN_LEN = 8;
|
|
12
|
+
static readonly BINDING_BYTE_MAX_LEN = 132;
|
|
13
|
+
static readonly SIZE_OF_LENGTH_FIELD = 1; // 1 byte for each length field (R and S)
|
|
14
|
+
static readonly GMAC_BINDING_LEN = 8;
|
|
15
|
+
|
|
16
|
+
readonly type: PolicyType;
|
|
17
|
+
readonly binding: Uint8Array;
|
|
18
|
+
|
|
19
|
+
// Static methods can't be defined in an interface
|
|
20
|
+
static parse(
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
22
|
+
buff: Uint8Array,
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
24
|
+
useECDSABinding: boolean,
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
26
|
+
type?: PolicyType
|
|
27
|
+
): { policy: PolicyInterface; offset: number } {
|
|
28
|
+
throw new ConfigurationError('parsePolicy was not implemented');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
constructor(type: PolicyType, binding: Uint8Array) {
|
|
32
|
+
this.type = type;
|
|
33
|
+
this.binding = binding;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Length of policy
|
|
38
|
+
*/
|
|
39
|
+
getLength(): number | never {
|
|
40
|
+
throw new ConfigurationError('length was not implemented');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Return the content of the policy
|
|
45
|
+
*/
|
|
46
|
+
toBuffer(): Uint8Array | never {
|
|
47
|
+
throw new ConfigurationError('toBuffer() was not implemented');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Parses an ECDSA binding from a given buffer.
|
|
52
|
+
*
|
|
53
|
+
* @param {Uint8Array} buff - The buffer containing the ECDSA binding.
|
|
54
|
+
* @returns {{ bindingLength: number; binding: Uint8Array }} - An object containing the binding length and the binding subarray.
|
|
55
|
+
*/
|
|
56
|
+
static parseECDSABinding(buff: Uint8Array): { bindingLength: number; binding: Uint8Array } {
|
|
57
|
+
const lengthOfR = buff[0];
|
|
58
|
+
const lengthOfS = buff[this.SIZE_OF_LENGTH_FIELD + lengthOfR];
|
|
59
|
+
|
|
60
|
+
const bindingLength =
|
|
61
|
+
this.SIZE_OF_LENGTH_FIELD + lengthOfR + this.SIZE_OF_LENGTH_FIELD + lengthOfS;
|
|
62
|
+
const binding = buff.subarray(0, bindingLength);
|
|
63
|
+
|
|
64
|
+
return { bindingLength, binding };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Parses a binding from a given buffer based on the specified binding type.
|
|
69
|
+
*
|
|
70
|
+
* @param {Uint8Array} buff - The buffer containing the binding.
|
|
71
|
+
* @param {boolean} useEcdsaBinding - Flag indicating whether to use ECDSA binding.
|
|
72
|
+
* @param {number} offset - The starting offset in the buffer.
|
|
73
|
+
* @returns {{ binding: Uint8Array; newOffset: number }} - An object containing the binding and the new offset.
|
|
74
|
+
*/
|
|
75
|
+
static parseBinding(
|
|
76
|
+
buff: Uint8Array,
|
|
77
|
+
useEcdsaBinding: boolean,
|
|
78
|
+
offset: number
|
|
79
|
+
): { binding: Uint8Array; newOffset: number } {
|
|
80
|
+
if (useEcdsaBinding) {
|
|
81
|
+
const ecdsaBinding = this.parseECDSABinding(buff.subarray(offset));
|
|
82
|
+
return { binding: ecdsaBinding.binding, newOffset: offset + ecdsaBinding.bindingLength };
|
|
83
|
+
} else {
|
|
84
|
+
const binding = buff.subarray(offset, offset + this.GMAC_BINDING_LEN);
|
|
85
|
+
return { binding, newOffset: offset + this.GMAC_BINDING_LEN };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export default AbstractPolicy;
|