ts-mls 1.0.2
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/LICENSE +21 -0
- package/README.md +196 -0
- package/dist/src/IncomingMessageAction.d.ts +10 -0
- package/dist/src/IncomingMessageAction.js +2 -0
- package/dist/src/IncomingMessageAction.js.map +1 -0
- package/dist/src/authenticatedContent.d.ts +32 -0
- package/dist/src/authenticatedContent.js +26 -0
- package/dist/src/authenticatedContent.js.map +1 -0
- package/dist/src/authenticationService.d.ts +7 -0
- package/dist/src/authenticationService.js +6 -0
- package/dist/src/authenticationService.js.map +1 -0
- package/dist/src/capabilities.d.ts +14 -0
- package/dist/src/capabilities.js +28 -0
- package/dist/src/capabilities.js.map +1 -0
- package/dist/src/clientConfig.d.ts +21 -0
- package/dist/src/clientConfig.js +13 -0
- package/dist/src/clientConfig.js.map +1 -0
- package/dist/src/clientState.d.ts +122 -0
- package/dist/src/clientState.js +547 -0
- package/dist/src/clientState.js.map +1 -0
- package/dist/src/codec/number.d.ts +10 -0
- package/dist/src/codec/number.js +56 -0
- package/dist/src/codec/number.js.map +1 -0
- package/dist/src/codec/optional.d.ts +4 -0
- package/dist/src/codec/optional.js +20 -0
- package/dist/src/codec/optional.js.map +1 -0
- package/dist/src/codec/tlsDecoder.d.ts +14 -0
- package/dist/src/codec/tlsDecoder.js +78 -0
- package/dist/src/codec/tlsDecoder.js.map +1 -0
- package/dist/src/codec/tlsEncoder.d.ts +9 -0
- package/dist/src/codec/tlsEncoder.js +23 -0
- package/dist/src/codec/tlsEncoder.js.map +1 -0
- package/dist/src/codec/variableLength.d.ts +11 -0
- package/dist/src/codec/variableLength.js +95 -0
- package/dist/src/codec/variableLength.js.map +1 -0
- package/dist/src/commit.d.ts +10 -0
- package/dist/src/commit.js +9 -0
- package/dist/src/commit.js.map +1 -0
- package/dist/src/contentType.d.ts +12 -0
- package/dist/src/contentType.js +12 -0
- package/dist/src/contentType.js.map +1 -0
- package/dist/src/createCommit.d.ts +32 -0
- package/dist/src/createCommit.js +250 -0
- package/dist/src/createCommit.js.map +1 -0
- package/dist/src/createMessage.d.ts +24 -0
- package/dist/src/createMessage.js +32 -0
- package/dist/src/createMessage.js.map +1 -0
- package/dist/src/credential.d.ts +21 -0
- package/dist/src/credential.js +31 -0
- package/dist/src/credential.js.map +1 -0
- package/dist/src/credentialType.d.ts +11 -0
- package/dist/src/credentialType.js +11 -0
- package/dist/src/credentialType.js.map +1 -0
- package/dist/src/crypto/aead.d.ts +8 -0
- package/dist/src/crypto/aead.js +69 -0
- package/dist/src/crypto/aead.js.map +1 -0
- package/dist/src/crypto/ciphersuite.d.ts +51 -0
- package/dist/src/crypto/ciphersuite.js +245 -0
- package/dist/src/crypto/ciphersuite.js.map +1 -0
- package/dist/src/crypto/hash.d.ts +8 -0
- package/dist/src/crypto/hash.js +32 -0
- package/dist/src/crypto/hash.js.map +1 -0
- package/dist/src/crypto/hpke.d.ts +51 -0
- package/dist/src/crypto/hpke.js +109 -0
- package/dist/src/crypto/hpke.js.map +1 -0
- package/dist/src/crypto/kdf.d.ts +12 -0
- package/dist/src/crypto/kdf.js +42 -0
- package/dist/src/crypto/kdf.js.map +1 -0
- package/dist/src/crypto/kem.d.ts +3 -0
- package/dist/src/crypto/kem.js +49 -0
- package/dist/src/crypto/kem.js.map +1 -0
- package/dist/src/crypto/rng.d.ts +4 -0
- package/dist/src/crypto/rng.js +6 -0
- package/dist/src/crypto/rng.js.map +1 -0
- package/dist/src/crypto/signature.d.ts +12 -0
- package/dist/src/crypto/signature.js +127 -0
- package/dist/src/crypto/signature.js.map +1 -0
- package/dist/src/customCredential.d.ts +2 -0
- package/dist/src/customCredential.js +11 -0
- package/dist/src/customCredential.js.map +1 -0
- package/dist/src/defaultCapabilities.d.ts +2 -0
- package/dist/src/defaultCapabilities.js +12 -0
- package/dist/src/defaultCapabilities.js.map +1 -0
- package/dist/src/defaultExtensionType.d.ts +13 -0
- package/dist/src/defaultExtensionType.js +14 -0
- package/dist/src/defaultExtensionType.js.map +1 -0
- package/dist/src/defaultProposalType.d.ts +15 -0
- package/dist/src/defaultProposalType.js +16 -0
- package/dist/src/defaultProposalType.js.map +1 -0
- package/dist/src/extension.d.ts +18 -0
- package/dist/src/extension.js +30 -0
- package/dist/src/extension.js.map +1 -0
- package/dist/src/externalProposal.d.ts +7 -0
- package/dist/src/externalProposal.js +40 -0
- package/dist/src/externalProposal.js.map +1 -0
- package/dist/src/externalSender.d.ts +9 -0
- package/dist/src/externalSender.js +7 -0
- package/dist/src/externalSender.js.map +1 -0
- package/dist/src/framedContent.d.ts +113 -0
- package/dist/src/framedContent.js +131 -0
- package/dist/src/framedContent.js.map +1 -0
- package/dist/src/grease.d.ts +16 -0
- package/dist/src/grease.js +29 -0
- package/dist/src/grease.js.map +1 -0
- package/dist/src/groupContext.d.ts +19 -0
- package/dist/src/groupContext.js +44 -0
- package/dist/src/groupContext.js.map +1 -0
- package/dist/src/groupInfo.d.ts +26 -0
- package/dist/src/groupInfo.js +47 -0
- package/dist/src/groupInfo.js.map +1 -0
- package/dist/src/groupSecrets.d.ts +10 -0
- package/dist/src/groupSecrets.js +8 -0
- package/dist/src/groupSecrets.js.map +1 -0
- package/dist/src/hpkeCiphertext.d.ts +8 -0
- package/dist/src/hpkeCiphertext.js +6 -0
- package/dist/src/hpkeCiphertext.js.map +1 -0
- package/dist/src/index.d.ts +32 -0
- package/dist/src/index.js +24 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/keyPackage.d.ts +38 -0
- package/dist/src/keyPackage.js +72 -0
- package/dist/src/keyPackage.js.map +1 -0
- package/dist/src/keyPackageEqualityConfig.d.ts +7 -0
- package/dist/src/keyPackageEqualityConfig.js +10 -0
- package/dist/src/keyPackageEqualityConfig.js.map +1 -0
- package/dist/src/keyRetentionConfig.d.ts +6 -0
- package/dist/src/keyRetentionConfig.js +6 -0
- package/dist/src/keyRetentionConfig.js.map +1 -0
- package/dist/src/keySchedule.d.ts +24 -0
- package/dist/src/keySchedule.js +43 -0
- package/dist/src/keySchedule.js.map +1 -0
- package/dist/src/leafNode.d.ts +78 -0
- package/dist/src/leafNode.js +87 -0
- package/dist/src/leafNode.js.map +1 -0
- package/dist/src/leafNodeSource.d.ts +12 -0
- package/dist/src/leafNodeSource.js +12 -0
- package/dist/src/leafNodeSource.js.map +1 -0
- package/dist/src/lifetime.d.ts +9 -0
- package/dist/src/lifetime.js +13 -0
- package/dist/src/lifetime.js.map +1 -0
- package/dist/src/lifetimeConfig.d.ts +5 -0
- package/dist/src/lifetimeConfig.js +5 -0
- package/dist/src/lifetimeConfig.js.map +1 -0
- package/dist/src/message.d.ts +42 -0
- package/dist/src/message.js +45 -0
- package/dist/src/message.js.map +1 -0
- package/dist/src/messageProtection.d.ts +36 -0
- package/dist/src/messageProtection.js +128 -0
- package/dist/src/messageProtection.js.map +1 -0
- package/dist/src/messageProtectionPublic.d.ts +17 -0
- package/dist/src/messageProtectionPublic.js +99 -0
- package/dist/src/messageProtectionPublic.js.map +1 -0
- package/dist/src/mlsError.d.ts +24 -0
- package/dist/src/mlsError.js +49 -0
- package/dist/src/mlsError.js.map +1 -0
- package/dist/src/nodeType.d.ts +11 -0
- package/dist/src/nodeType.js +11 -0
- package/dist/src/nodeType.js.map +1 -0
- package/dist/src/paddingConfig.d.ts +9 -0
- package/dist/src/paddingConfig.js +8 -0
- package/dist/src/paddingConfig.js.map +1 -0
- package/dist/src/parentHash.d.ts +16 -0
- package/dist/src/parentHash.js +103 -0
- package/dist/src/parentHash.js.map +1 -0
- package/dist/src/parentNode.d.ts +9 -0
- package/dist/src/parentNode.js +11 -0
- package/dist/src/parentNode.js.map +1 -0
- package/dist/src/pathSecrets.d.ts +10 -0
- package/dist/src/pathSecrets.js +31 -0
- package/dist/src/pathSecrets.js.map +1 -0
- package/dist/src/presharedkey.d.ts +51 -0
- package/dist/src/presharedkey.js +59 -0
- package/dist/src/presharedkey.js.map +1 -0
- package/dist/src/privateKeyPath.d.ts +12 -0
- package/dist/src/privateKeyPath.js +21 -0
- package/dist/src/privateKeyPath.js.map +1 -0
- package/dist/src/privateMessage.d.ts +41 -0
- package/dist/src/privateMessage.js +114 -0
- package/dist/src/privateMessage.js.map +1 -0
- package/dist/src/processMessages.d.ts +26 -0
- package/dist/src/processMessages.js +196 -0
- package/dist/src/processMessages.js.map +1 -0
- package/dist/src/proposal.d.ts +97 -0
- package/dist/src/proposal.js +91 -0
- package/dist/src/proposal.js.map +1 -0
- package/dist/src/proposalOrRefType.d.ts +25 -0
- package/dist/src/proposalOrRefType.js +31 -0
- package/dist/src/proposalOrRefType.js.map +1 -0
- package/dist/src/protocolVersion.d.ts +9 -0
- package/dist/src/protocolVersion.js +10 -0
- package/dist/src/protocolVersion.js.map +1 -0
- package/dist/src/pskIndex.d.ts +7 -0
- package/dist/src/pskIndex.js +18 -0
- package/dist/src/pskIndex.js.map +1 -0
- package/dist/src/publicMessage.d.ts +29 -0
- package/dist/src/publicMessage.js +71 -0
- package/dist/src/publicMessage.js.map +1 -0
- package/dist/src/ratchetTree.d.ts +46 -0
- package/dist/src/ratchetTree.js +254 -0
- package/dist/src/ratchetTree.js.map +1 -0
- package/dist/src/requiredCapabilities.d.ts +10 -0
- package/dist/src/requiredCapabilities.js +8 -0
- package/dist/src/requiredCapabilities.js.map +1 -0
- package/dist/src/resumption.d.ts +18 -0
- package/dist/src/resumption.js +74 -0
- package/dist/src/resumption.js.map +1 -0
- package/dist/src/secretTree.d.ts +29 -0
- package/dist/src/secretTree.js +137 -0
- package/dist/src/secretTree.js.map +1 -0
- package/dist/src/sender.d.ts +56 -0
- package/dist/src/sender.js +81 -0
- package/dist/src/sender.js.map +1 -0
- package/dist/src/transcriptHash.d.ts +14 -0
- package/dist/src/transcriptHash.js +23 -0
- package/dist/src/transcriptHash.js.map +1 -0
- package/dist/src/treeHash.d.ts +27 -0
- package/dist/src/treeHash.js +70 -0
- package/dist/src/treeHash.js.map +1 -0
- package/dist/src/treemath.d.ts +14 -0
- package/dist/src/treemath.js +87 -0
- package/dist/src/treemath.js.map +1 -0
- package/dist/src/unappliedProposals.d.ts +7 -0
- package/dist/src/unappliedProposals.js +9 -0
- package/dist/src/unappliedProposals.js.map +1 -0
- package/dist/src/updatePath.d.ts +34 -0
- package/dist/src/updatePath.js +163 -0
- package/dist/src/updatePath.js.map +1 -0
- package/dist/src/util/addToMap.d.ts +1 -0
- package/dist/src/util/addToMap.js +6 -0
- package/dist/src/util/addToMap.js.map +1 -0
- package/dist/src/util/array.d.ts +2 -0
- package/dist/src/util/array.js +9 -0
- package/dist/src/util/array.js.map +1 -0
- package/dist/src/util/byteArray.d.ts +3 -0
- package/dist/src/util/byteArray.js +27 -0
- package/dist/src/util/byteArray.js.map +1 -0
- package/dist/src/util/constantTimeCompare.d.ts +1 -0
- package/dist/src/util/constantTimeCompare.js +10 -0
- package/dist/src/util/constantTimeCompare.js.map +1 -0
- package/dist/src/util/enumHelpers.d.ts +4 -0
- package/dist/src/util/enumHelpers.js +28 -0
- package/dist/src/util/enumHelpers.js.map +1 -0
- package/dist/src/util/repeat.d.ts +1 -0
- package/dist/src/util/repeat.js +8 -0
- package/dist/src/util/repeat.js.map +1 -0
- package/dist/src/welcome.d.ts +29 -0
- package/dist/src/welcome.js +46 -0
- package/dist/src/welcome.js.map +1 -0
- package/dist/src/wireformat.d.ts +13 -0
- package/dist/src/wireformat.js +14 -0
- package/dist/src/wireformat.js.map +1 -0
- package/dist/test/base64.test.d.ts +1 -0
- package/dist/test/base64.test.js +87 -0
- package/dist/test/base64.test.js.map +1 -0
- package/dist/test/codec/authenticatedContent.test.d.ts +1 -0
- package/dist/test/codec/authenticatedContent.test.js +38 -0
- package/dist/test/codec/authenticatedContent.test.js.map +1 -0
- package/dist/test/codec/capabilities.test.d.ts +1 -0
- package/dist/test/codec/capabilities.test.js +26 -0
- package/dist/test/codec/capabilities.test.js.map +1 -0
- package/dist/test/codec/commit.test.d.ts +1 -0
- package/dist/test/codec/commit.test.js +15 -0
- package/dist/test/codec/commit.test.js.map +1 -0
- package/dist/test/codec/composite.test.d.ts +1 -0
- package/dist/test/codec/composite.test.js +61 -0
- package/dist/test/codec/composite.test.js.map +1 -0
- package/dist/test/codec/contentType.test.d.ts +1 -0
- package/dist/test/codec/contentType.test.js +12 -0
- package/dist/test/codec/contentType.test.js.map +1 -0
- package/dist/test/codec/credential.test.d.ts +1 -0
- package/dist/test/codec/credential.test.js +17 -0
- package/dist/test/codec/credential.test.js.map +1 -0
- package/dist/test/codec/credentialType.test.d.ts +1 -0
- package/dist/test/codec/credentialType.test.js +12 -0
- package/dist/test/codec/credentialType.test.js.map +1 -0
- package/dist/test/codec/encryptedGroupSecrets.test.d.ts +1 -0
- package/dist/test/codec/encryptedGroupSecrets.test.js +18 -0
- package/dist/test/codec/encryptedGroupSecrets.test.js.map +1 -0
- package/dist/test/codec/extension.test.d.ts +1 -0
- package/dist/test/codec/extension.test.js +20 -0
- package/dist/test/codec/extension.test.js.map +1 -0
- package/dist/test/codec/extensionType.test.d.ts +1 -0
- package/dist/test/codec/extensionType.test.js +12 -0
- package/dist/test/codec/extensionType.test.js.map +1 -0
- package/dist/test/codec/externalSender.test.d.ts +1 -0
- package/dist/test/codec/externalSender.test.js +20 -0
- package/dist/test/codec/externalSender.test.js.map +1 -0
- package/dist/test/codec/framedContent.test.d.ts +1 -0
- package/dist/test/codec/framedContent.test.js +26 -0
- package/dist/test/codec/framedContent.test.js.map +1 -0
- package/dist/test/codec/groupContext.test.d.ts +1 -0
- package/dist/test/codec/groupContext.test.js +30 -0
- package/dist/test/codec/groupContext.test.js.map +1 -0
- package/dist/test/codec/groupInfo.test.d.ts +1 -0
- package/dist/test/codec/groupInfo.test.js +45 -0
- package/dist/test/codec/groupInfo.test.js.map +1 -0
- package/dist/test/codec/groupSecrets.test.d.ts +1 -0
- package/dist/test/codec/groupSecrets.test.js +16 -0
- package/dist/test/codec/groupSecrets.test.js.map +1 -0
- package/dist/test/codec/hpkeCiphertext.test.d.ts +1 -0
- package/dist/test/codec/hpkeCiphertext.test.js +13 -0
- package/dist/test/codec/hpkeCiphertext.test.js.map +1 -0
- package/dist/test/codec/keyPackage.test.d.ts +1 -0
- package/dist/test/codec/keyPackage.test.js +58 -0
- package/dist/test/codec/keyPackage.test.js.map +1 -0
- package/dist/test/codec/keyPackageTBS.test.d.ts +1 -0
- package/dist/test/codec/keyPackageTBS.test.js +59 -0
- package/dist/test/codec/keyPackageTBS.test.js.map +1 -0
- package/dist/test/codec/leafNode.test.d.ts +1 -0
- package/dist/test/codec/leafNode.test.js +43 -0
- package/dist/test/codec/leafNode.test.js.map +1 -0
- package/dist/test/codec/leafNodeData.test.d.ts +1 -0
- package/dist/test/codec/leafNodeData.test.js +36 -0
- package/dist/test/codec/leafNodeData.test.js.map +1 -0
- package/dist/test/codec/leafNodeSource.test.d.ts +1 -0
- package/dist/test/codec/leafNodeSource.test.js +15 -0
- package/dist/test/codec/leafNodeSource.test.js.map +1 -0
- package/dist/test/codec/lifetime.test.d.ts +1 -0
- package/dist/test/codec/lifetime.test.js +12 -0
- package/dist/test/codec/lifetime.test.js.map +1 -0
- package/dist/test/codec/message.test.d.ts +1 -0
- package/dist/test/codec/message.test.js +100 -0
- package/dist/test/codec/message.test.js.map +1 -0
- package/dist/test/codec/nodeType.test.d.ts +1 -0
- package/dist/test/codec/nodeType.test.js +12 -0
- package/dist/test/codec/nodeType.test.js.map +1 -0
- package/dist/test/codec/number.test.d.ts +1 -0
- package/dist/test/codec/number.test.js +74 -0
- package/dist/test/codec/number.test.js.map +1 -0
- package/dist/test/codec/optional.test.d.ts +1 -0
- package/dist/test/codec/optional.test.js +42 -0
- package/dist/test/codec/optional.test.js.map +1 -0
- package/dist/test/codec/padding.test.d.ts +1 -0
- package/dist/test/codec/padding.test.js +40 -0
- package/dist/test/codec/padding.test.js.map +1 -0
- package/dist/test/codec/parentHash.test.d.ts +1 -0
- package/dist/test/codec/parentHash.test.js +13 -0
- package/dist/test/codec/parentHash.test.js.map +1 -0
- package/dist/test/codec/parentNode.test.d.ts +1 -0
- package/dist/test/codec/parentNode.test.js +22 -0
- package/dist/test/codec/parentNode.test.js.map +1 -0
- package/dist/test/codec/presharedkey.test.d.ts +1 -0
- package/dist/test/codec/presharedkey.test.js +35 -0
- package/dist/test/codec/presharedkey.test.js.map +1 -0
- package/dist/test/codec/privateContentAAD.test.d.ts +1 -0
- package/dist/test/codec/privateContentAAD.test.js +30 -0
- package/dist/test/codec/privateContentAAD.test.js.map +1 -0
- package/dist/test/codec/privateMessage.test.d.ts +1 -0
- package/dist/test/codec/privateMessage.test.js +36 -0
- package/dist/test/codec/privateMessage.test.js.map +1 -0
- package/dist/test/codec/proposal.test.d.ts +1 -0
- package/dist/test/codec/proposal.test.js +44 -0
- package/dist/test/codec/proposal.test.js.map +1 -0
- package/dist/test/codec/proposalOrRef.test.d.ts +1 -0
- package/dist/test/codec/proposalOrRef.test.js +12 -0
- package/dist/test/codec/proposalOrRef.test.js.map +1 -0
- package/dist/test/codec/proposalOrRefType.test.d.ts +1 -0
- package/dist/test/codec/proposalOrRefType.test.js +12 -0
- package/dist/test/codec/proposalOrRefType.test.js.map +1 -0
- package/dist/test/codec/proposalType.test.d.ts +1 -0
- package/dist/test/codec/proposalType.test.js +12 -0
- package/dist/test/codec/proposalType.test.js.map +1 -0
- package/dist/test/codec/protocolVersion.test.d.ts +1 -0
- package/dist/test/codec/protocolVersion.test.js +9 -0
- package/dist/test/codec/protocolVersion.test.js.map +1 -0
- package/dist/test/codec/pskId.test.d.ts +1 -0
- package/dist/test/codec/pskId.test.js +18 -0
- package/dist/test/codec/pskId.test.js.map +1 -0
- package/dist/test/codec/pskInfo.test.d.ts +1 -0
- package/dist/test/codec/pskInfo.test.js +12 -0
- package/dist/test/codec/pskInfo.test.js.map +1 -0
- package/dist/test/codec/pskLabel.test.d.ts +1 -0
- package/dist/test/codec/pskLabel.test.js +26 -0
- package/dist/test/codec/pskLabel.test.js.map +1 -0
- package/dist/test/codec/pskType.test.d.ts +1 -0
- package/dist/test/codec/pskType.test.js +12 -0
- package/dist/test/codec/pskType.test.js.map +1 -0
- package/dist/test/codec/publicMessage.test.d.ts +1 -0
- package/dist/test/codec/publicMessage.test.js +39 -0
- package/dist/test/codec/publicMessage.test.js.map +1 -0
- package/dist/test/codec/ratchetTree.test.d.ts +1 -0
- package/dist/test/codec/ratchetTree.test.js +83 -0
- package/dist/test/codec/ratchetTree.test.js.map +1 -0
- package/dist/test/codec/requiredCapabilities.test.d.ts +1 -0
- package/dist/test/codec/requiredCapabilities.test.js +30 -0
- package/dist/test/codec/requiredCapabilities.test.js.map +1 -0
- package/dist/test/codec/resumptionPSKUsage.test.d.ts +1 -0
- package/dist/test/codec/resumptionPSKUsage.test.js +15 -0
- package/dist/test/codec/resumptionPSKUsage.test.js.map +1 -0
- package/dist/test/codec/reuseGuard.test.d.ts +1 -0
- package/dist/test/codec/reuseGuard.test.js +9 -0
- package/dist/test/codec/reuseGuard.test.js.map +1 -0
- package/dist/test/codec/roundtrip.d.ts +3 -0
- package/dist/test/codec/roundtrip.js +8 -0
- package/dist/test/codec/roundtrip.js.map +1 -0
- package/dist/test/codec/sender.test.d.ts +1 -0
- package/dist/test/codec/sender.test.js +18 -0
- package/dist/test/codec/sender.test.js.map +1 -0
- package/dist/test/codec/senderData.test.d.ts +1 -0
- package/dist/test/codec/senderData.test.js +12 -0
- package/dist/test/codec/senderData.test.js.map +1 -0
- package/dist/test/codec/senderDataAAD.test.d.ts +1 -0
- package/dist/test/codec/senderDataAAD.test.js +12 -0
- package/dist/test/codec/senderDataAAD.test.js.map +1 -0
- package/dist/test/codec/senderType.test.d.ts +1 -0
- package/dist/test/codec/senderType.test.js +18 -0
- package/dist/test/codec/senderType.test.js.map +1 -0
- package/dist/test/codec/transcriptHash.test.d.ts +1 -0
- package/dist/test/codec/transcriptHash.test.js +38 -0
- package/dist/test/codec/transcriptHash.test.js.map +1 -0
- package/dist/test/codec/treeHash.test.d.ts +1 -0
- package/dist/test/codec/treeHash.test.js +17 -0
- package/dist/test/codec/treeHash.test.js.map +1 -0
- package/dist/test/codec/updatePath.test.d.ts +1 -0
- package/dist/test/codec/updatePath.test.js +81 -0
- package/dist/test/codec/updatePath.test.js.map +1 -0
- package/dist/test/codec/updatePathNode.test.d.ts +1 -0
- package/dist/test/codec/updatePathNode.test.js +23 -0
- package/dist/test/codec/updatePathNode.test.js.map +1 -0
- package/dist/test/codec/varLengthEncoding.test.d.ts +1 -0
- package/dist/test/codec/varLengthEncoding.test.js +90 -0
- package/dist/test/codec/varLengthEncoding.test.js.map +1 -0
- package/dist/test/codec/welcome.test.d.ts +1 -0
- package/dist/test/codec/welcome.test.js +25 -0
- package/dist/test/codec/welcome.test.js.map +1 -0
- package/dist/test/codec/wireformat.test.d.ts +1 -0
- package/dist/test/codec/wireformat.test.js +21 -0
- package/dist/test/codec/wireformat.test.js.map +1 -0
- package/dist/test/crypto/aead.test.d.ts +1 -0
- package/dist/test/crypto/aead.test.js +44 -0
- package/dist/test/crypto/aead.test.js.map +1 -0
- package/dist/test/crypto/hpke.test.d.ts +1 -0
- package/dist/test/crypto/hpke.test.js +58 -0
- package/dist/test/crypto/hpke.test.js.map +1 -0
- package/dist/test/crypto/keyMatch.d.ts +7 -0
- package/dist/test/crypto/keyMatch.js +22 -0
- package/dist/test/crypto/keyMatch.js.map +1 -0
- package/dist/test/extensionsEqual.test.d.ts +1 -0
- package/dist/test/extensionsEqual.test.js +51 -0
- package/dist/test/extensionsEqual.test.js.map +1 -0
- package/dist/test/groupinfo.test.d.ts +1 -0
- package/dist/test/groupinfo.test.js +40 -0
- package/dist/test/groupinfo.test.js.map +1 -0
- package/dist/test/scenario/common.d.ts +8 -0
- package/dist/test/scenario/common.js +41 -0
- package/dist/test/scenario/common.js.map +1 -0
- package/dist/test/scenario/customExtensions.test.d.ts +1 -0
- package/dist/test/scenario/customExtensions.test.js +56 -0
- package/dist/test/scenario/customExtensions.test.js.map +1 -0
- package/dist/test/scenario/customProposal.test.d.ts +1 -0
- package/dist/test/scenario/customProposal.test.js +71 -0
- package/dist/test/scenario/customProposal.test.js.map +1 -0
- package/dist/test/scenario/epochOutOfOrder.test.d.ts +1 -0
- package/dist/test/scenario/epochOutOfOrder.test.js +162 -0
- package/dist/test/scenario/epochOutOfOrder.test.js.map +1 -0
- package/dist/test/scenario/externalAddProposal.test.d.ts +1 -0
- package/dist/test/scenario/externalAddProposal.test.js +69 -0
- package/dist/test/scenario/externalAddProposal.test.js.map +1 -0
- package/dist/test/scenario/externalJoin.test.d.ts +1 -0
- package/dist/test/scenario/externalJoin.test.js +51 -0
- package/dist/test/scenario/externalJoin.test.js.map +1 -0
- package/dist/test/scenario/externalJoinResync.test.d.ts +1 -0
- package/dist/test/scenario/externalJoinResync.test.js +59 -0
- package/dist/test/scenario/externalJoinResync.test.js.map +1 -0
- package/dist/test/scenario/externalProposal.test.d.ts +1 -0
- package/dist/test/scenario/externalProposal.test.js +69 -0
- package/dist/test/scenario/externalProposal.test.js.map +1 -0
- package/dist/test/scenario/externalPsk.test.d.ts +1 -0
- package/dist/test/scenario/externalPsk.test.js +73 -0
- package/dist/test/scenario/externalPsk.test.js.map +1 -0
- package/dist/test/scenario/externalPskJoin.test.d.ts +1 -0
- package/dist/test/scenario/externalPskJoin.test.js +51 -0
- package/dist/test/scenario/externalPskJoin.test.js.map +1 -0
- package/dist/test/scenario/generationOutOfOrder.test.d.ts +1 -0
- package/dist/test/scenario/generationOutOfOrder.test.js +111 -0
- package/dist/test/scenario/generationOutOfOrder.test.js.map +1 -0
- package/dist/test/scenario/grease.test.d.ts +1 -0
- package/dist/test/scenario/grease.test.js +44 -0
- package/dist/test/scenario/grease.test.js.map +1 -0
- package/dist/test/scenario/largeGroupFullLifecycle.test.d.ts +1 -0
- package/dist/test/scenario/largeGroupFullLifecycle.test.js +127 -0
- package/dist/test/scenario/largeGroupFullLifecycle.test.js.map +1 -0
- package/dist/test/scenario/leaveProposal.test.d.ts +1 -0
- package/dist/test/scenario/leaveProposal.test.js +77 -0
- package/dist/test/scenario/leaveProposal.test.js.map +1 -0
- package/dist/test/scenario/multipleJoinsAtOnce.test.d.ts +1 -0
- package/dist/test/scenario/multipleJoinsAtOnce.test.js +48 -0
- package/dist/test/scenario/multipleJoinsAtOnce.test.js.map +1 -0
- package/dist/test/scenario/oneToOneJoin.test.d.ts +1 -0
- package/dist/test/scenario/oneToOneJoin.test.js +98 -0
- package/dist/test/scenario/oneToOneJoin.test.js.map +1 -0
- package/dist/test/scenario/ratchetTreeExtension.test.d.ts +1 -0
- package/dist/test/scenario/ratchetTreeExtension.test.js +48 -0
- package/dist/test/scenario/ratchetTreeExtension.test.js.map +1 -0
- package/dist/test/scenario/reinit.test.d.ts +1 -0
- package/dist/test/scenario/reinit.test.js +57 -0
- package/dist/test/scenario/reinit.test.js.map +1 -0
- package/dist/test/scenario/rejectIncomingMessage.test.d.ts +1 -0
- package/dist/test/scenario/rejectIncomingMessage.test.js +67 -0
- package/dist/test/scenario/rejectIncomingMessage.test.js.map +1 -0
- package/dist/test/scenario/remove.test.d.ts +1 -0
- package/dist/test/scenario/remove.test.js +68 -0
- package/dist/test/scenario/remove.test.js.map +1 -0
- package/dist/test/scenario/requiredCapabilites.test.d.ts +1 -0
- package/dist/test/scenario/requiredCapabilites.test.js +65 -0
- package/dist/test/scenario/requiredCapabilites.test.js.map +1 -0
- package/dist/test/scenario/resumption.test.d.ts +1 -0
- package/dist/test/scenario/resumption.test.js +43 -0
- package/dist/test/scenario/resumption.test.js.map +1 -0
- package/dist/test/scenario/threePartyJoin.test.d.ts +1 -0
- package/dist/test/scenario/threePartyJoin.test.js +56 -0
- package/dist/test/scenario/threePartyJoin.test.js.map +1 -0
- package/dist/test/scenario/update.test.d.ts +1 -0
- package/dist/test/scenario/update.test.js +50 -0
- package/dist/test/scenario/update.test.js.map +1 -0
- package/dist/test/test-vectors/cryptoBasics.test.d.ts +1 -0
- package/dist/test/test-vectors/cryptoBasics.test.js +60 -0
- package/dist/test/test-vectors/cryptoBasics.test.js.map +1 -0
- package/dist/test/test-vectors/deserialization.test.d.ts +1 -0
- package/dist/test/test-vectors/deserialization.test.js +13 -0
- package/dist/test/test-vectors/deserialization.test.js.map +1 -0
- package/dist/test/test-vectors/keySchedule.test.d.ts +1 -0
- package/dist/test/test-vectors/keySchedule.test.js +48 -0
- package/dist/test/test-vectors/keySchedule.test.js.map +1 -0
- package/dist/test/test-vectors/messageProtection.test.d.ts +1 -0
- package/dist/test/test-vectors/messageProtection.test.js +215 -0
- package/dist/test/test-vectors/messageProtection.test.js.map +1 -0
- package/dist/test/test-vectors/messages.test.d.ts +1 -0
- package/dist/test/test-vectors/messages.test.js +136 -0
- package/dist/test/test-vectors/messages.test.js.map +1 -0
- package/dist/test/test-vectors/passiveClientScenarios.test.d.ts +1 -0
- package/dist/test/test-vectors/passiveClientScenarios.test.js +86 -0
- package/dist/test/test-vectors/passiveClientScenarios.test.js.map +1 -0
- package/dist/test/test-vectors/pskSecret.test.d.ts +1 -0
- package/dist/test/test-vectors/pskSecret.test.js +18 -0
- package/dist/test/test-vectors/pskSecret.test.js.map +1 -0
- package/dist/test/test-vectors/secretTree.test.d.ts +1 -0
- package/dist/test/test-vectors/secretTree.test.js +48 -0
- package/dist/test/test-vectors/secretTree.test.js.map +1 -0
- package/dist/test/test-vectors/transcriptHashes.test.d.ts +1 -0
- package/dist/test/test-vectors/transcriptHashes.test.js +26 -0
- package/dist/test/test-vectors/transcriptHashes.test.js.map +1 -0
- package/dist/test/test-vectors/treeOperations.test.d.ts +1 -0
- package/dist/test/test-vectors/treeOperations.test.js +45 -0
- package/dist/test/test-vectors/treeOperations.test.js.map +1 -0
- package/dist/test/test-vectors/treeValidation.test.d.ts +1 -0
- package/dist/test/test-vectors/treeValidation.test.js +36 -0
- package/dist/test/test-vectors/treeValidation.test.js.map +1 -0
- package/dist/test/test-vectors/treekem.test.d.ts +1 -0
- package/dist/test/test-vectors/treekem.test.js +100 -0
- package/dist/test/test-vectors/treekem.test.js.map +1 -0
- package/dist/test/test-vectors/treemath.test.d.ts +1 -0
- package/dist/test/test-vectors/treemath.test.js +55 -0
- package/dist/test/test-vectors/treemath.test.js.map +1 -0
- package/dist/test/test-vectors/welcome.test.d.ts +1 -0
- package/dist/test/test-vectors/welcome.test.js +40 -0
- package/dist/test/test-vectors/welcome.test.js.map +1 -0
- package/dist/test/validation/proposalValidation.test.d.ts +1 -0
- package/dist/test/validation/proposalValidation.test.js +231 -0
- package/dist/test/validation/proposalValidation.test.js.map +1 -0
- package/dist/test/validation/ratchetTreeValidation.test.d.ts +1 -0
- package/dist/test/validation/ratchetTreeValidation.test.js +51 -0
- package/dist/test/validation/ratchetTreeValidation.test.js.map +1 -0
- package/dist/test/validation/resumptionValidation.test.d.ts +1 -0
- package/dist/test/validation/resumptionValidation.test.js +79 -0
- package/dist/test/validation/resumptionValidation.test.js.map +1 -0
- package/dist/test_vectors/crypto-basics.json +303 -0
- package/dist/test_vectors/deserialization.json +58 -0
- package/dist/test_vectors/key-schedule.json +926 -0
- package/dist/test_vectors/message-protection.json +142 -0
- package/dist/test_vectors/messages.json +5702 -0
- package/dist/test_vectors/passive-client-handling-commit.json +2683 -0
- package/dist/test_vectors/passive-client-random.json +2657 -0
- package/dist/test_vectors/passive-client-welcome.json +814 -0
- package/dist/test_vectors/psk_secret.json +2382 -0
- package/dist/test_vectors/secret-tree.json +4846 -0
- package/dist/test_vectors/transcript-hashes.json +58 -0
- package/dist/test_vectors/tree-math.json +8156 -0
- package/dist/test_vectors/tree-operations.json +47 -0
- package/dist/test_vectors/tree-validation.json +6204 -0
- package/dist/test_vectors/treekem.json +14859 -0
- package/dist/test_vectors/welcome.json +51 -0
- package/package.json +108 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { decodeUint8, encodeUint8 } from "./codec/number";
|
|
2
|
+
import { flatMapDecoder, mapDecoder, mapDecoderOption } from "./codec/tlsDecoder";
|
|
3
|
+
import { contramapEncoder, contramapEncoders } from "./codec/tlsEncoder";
|
|
4
|
+
import { decodeVarLenData, encodeVarLenData } from "./codec/variableLength";
|
|
5
|
+
import { decodeProposal, encodeProposal } from "./proposal";
|
|
6
|
+
import { enumNumberToKey } from "./util/enumHelpers";
|
|
7
|
+
const proposalOrRefTypes = {
|
|
8
|
+
proposal: 1,
|
|
9
|
+
reference: 2,
|
|
10
|
+
};
|
|
11
|
+
export const encodeProposalOrRefType = contramapEncoder(encodeUint8, (t) => proposalOrRefTypes[t]);
|
|
12
|
+
export const decodeProposalOrRefType = mapDecoderOption(decodeUint8, enumNumberToKey(proposalOrRefTypes));
|
|
13
|
+
export const encodeProposalOrRefProposal = contramapEncoders([encodeProposalOrRefType, encodeProposal], (p) => [p.proposalOrRefType, p.proposal]);
|
|
14
|
+
export const encodeProposalOrRefProposalRef = contramapEncoders([encodeProposalOrRefType, encodeVarLenData], (r) => [r.proposalOrRefType, r.reference]);
|
|
15
|
+
export const encodeProposalOrRef = (input) => {
|
|
16
|
+
switch (input.proposalOrRefType) {
|
|
17
|
+
case "proposal":
|
|
18
|
+
return encodeProposalOrRefProposal(input);
|
|
19
|
+
case "reference":
|
|
20
|
+
return encodeProposalOrRefProposalRef(input);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
export const decodeProposalOrRef = flatMapDecoder(decodeProposalOrRefType, (proposalOrRefType) => {
|
|
24
|
+
switch (proposalOrRefType) {
|
|
25
|
+
case "proposal":
|
|
26
|
+
return mapDecoder(decodeProposal, (proposal) => ({ proposalOrRefType, proposal }));
|
|
27
|
+
case "reference":
|
|
28
|
+
return mapDecoder(decodeVarLenData, (reference) => ({ proposalOrRefType, reference }));
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=proposalOrRefType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposalOrRefType.js","sourceRoot":"","sources":["../../src/proposalOrRefType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAW,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1F,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAW,MAAM,oBAAoB,CAAA;AACjF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC3E,OAAO,EAAE,cAAc,EAAE,cAAc,EAAY,MAAM,YAAY,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,kBAAkB,GAAG;IACzB,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,CAAC;CACJ,CAAA;AAKV,MAAM,CAAC,MAAM,uBAAuB,GAAmC,gBAAgB,CACrF,WAAW,EACX,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAC7B,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAmC,gBAAgB,CACrF,WAAW,EACX,eAAe,CAAC,kBAAkB,CAAC,CACpC,CAAA;AAMD,MAAM,CAAC,MAAM,2BAA2B,GAAmC,iBAAiB,CAC1F,CAAC,uBAAuB,EAAE,cAAc,CAAC,EACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,QAAQ,CAAU,CAClD,CAAA;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAsC,iBAAiB,CAChG,CAAC,uBAAuB,EAAE,gBAAgB,CAAC,EAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,SAAS,CAAU,CACnD,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAA2B,CAAC,KAAK,EAAE,EAAE;IACnE,QAAQ,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAChC,KAAK,UAAU;YACb,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAA;QAC3C,KAAK,WAAW;YACd,OAAO,8BAA8B,CAAC,KAAK,CAAC,CAAA;IAChD,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAA2B,cAAc,CACvE,uBAAuB,EACvB,CAAC,iBAAiB,EAA0B,EAAE;IAC5C,QAAQ,iBAAiB,EAAE,CAAC;QAC1B,KAAK,UAAU;YACb,OAAO,UAAU,CAAC,cAAc,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;QACpF,KAAK,WAAW;YACd,OAAO,UAAU,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;IAC1F,CAAC;AACH,CAAC,CACF,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Decoder } from "./codec/tlsDecoder";
|
|
2
|
+
import { Encoder } from "./codec/tlsEncoder";
|
|
3
|
+
export declare const protocolVersions: {
|
|
4
|
+
readonly mls10: 1;
|
|
5
|
+
};
|
|
6
|
+
export type ProtocolVersionName = keyof typeof protocolVersions;
|
|
7
|
+
export type ProtocolVersionValue = (typeof protocolVersions)[ProtocolVersionName];
|
|
8
|
+
export declare const encodeProtocolVersion: Encoder<ProtocolVersionName>;
|
|
9
|
+
export declare const decodeProtocolVersion: Decoder<ProtocolVersionName>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { decodeUint16, encodeUint16 } from "./codec/number";
|
|
2
|
+
import { mapDecoderOption } from "./codec/tlsDecoder";
|
|
3
|
+
import { contramapEncoder } from "./codec/tlsEncoder";
|
|
4
|
+
import { enumNumberToKey } from "./util/enumHelpers";
|
|
5
|
+
export const protocolVersions = {
|
|
6
|
+
mls10: 1,
|
|
7
|
+
};
|
|
8
|
+
export const encodeProtocolVersion = contramapEncoder(encodeUint16, (t) => protocolVersions[t]);
|
|
9
|
+
export const decodeProtocolVersion = mapDecoderOption(decodeUint16, enumNumberToKey(protocolVersions));
|
|
10
|
+
//# sourceMappingURL=protocolVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocolVersion.js","sourceRoot":"","sources":["../../src/protocolVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAW,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAW,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,CAAC;CACA,CAAA;AAKV,MAAM,CAAC,MAAM,qBAAqB,GAAiC,gBAAgB,CACjF,YAAY,EACZ,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAC3B,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAiC,gBAAgB,CACjF,YAAY,EACZ,eAAe,CAAC,gBAAgB,CAAC,CAClC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CiphersuiteImpl } from "./crypto/ciphersuite";
|
|
2
|
+
import { PreSharedKeyID } from "./presharedkey";
|
|
3
|
+
export interface PskIndex {
|
|
4
|
+
findPsk(preSharedKeyId: PreSharedKeyID): Uint8Array | undefined;
|
|
5
|
+
}
|
|
6
|
+
export declare const emptyPskIndex: PskIndex;
|
|
7
|
+
export declare function accumulatePskSecret(groupedPsk: PreSharedKeyID[], pskSearch: PskIndex, cs: CiphersuiteImpl, zeroes: Uint8Array): Promise<[Uint8Array, PreSharedKeyID[]]>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ValidationError } from "./mlsError";
|
|
2
|
+
import { updatePskSecret } from "./presharedkey";
|
|
3
|
+
export const emptyPskIndex = {
|
|
4
|
+
findPsk(_preSharedKeyId) {
|
|
5
|
+
return undefined;
|
|
6
|
+
},
|
|
7
|
+
};
|
|
8
|
+
export async function accumulatePskSecret(groupedPsk, pskSearch, cs, zeroes) {
|
|
9
|
+
return groupedPsk.reduce(async (acc, cur, index) => {
|
|
10
|
+
const [previousSecret, ids] = await acc;
|
|
11
|
+
const psk = pskSearch.findPsk(cur);
|
|
12
|
+
if (psk === undefined)
|
|
13
|
+
throw new ValidationError("Could not find pskId referenced in proposal");
|
|
14
|
+
const pskSecret = await updatePskSecret(previousSecret, cur, psk, index, groupedPsk.length, cs);
|
|
15
|
+
return [pskSecret, [...ids, cur]];
|
|
16
|
+
}, Promise.resolve([zeroes, []]));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=pskIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pskIndex.js","sourceRoot":"","sources":["../../src/pskIndex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAkB,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAKhE,MAAM,CAAC,MAAM,aAAa,GAAa;IACrC,OAAO,CAAC,eAAe;QACrB,OAAO,SAAS,CAAA;IAClB,CAAC;CACF,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAA4B,EAC5B,SAAmB,EACnB,EAAmB,EACnB,MAAkB;IAElB,OAAO,UAAU,CAAC,MAAM,CACtB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACxB,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,CAAA;QACvC,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,eAAe,CAAC,6CAA6C,CAAC,CAAA;QAC/F,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAC/F,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IACnC,CAAC,EACD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAC9B,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Decoder } from "./codec/tlsDecoder";
|
|
2
|
+
import { Encoder } from "./codec/tlsEncoder";
|
|
3
|
+
import { Extension } from "./extension";
|
|
4
|
+
import { ExternalSender } from "./externalSender";
|
|
5
|
+
import { FramedContent, FramedContentAuthData } from "./framedContent";
|
|
6
|
+
import { GroupContext } from "./groupContext";
|
|
7
|
+
import { RatchetTree } from "./ratchetTree";
|
|
8
|
+
import { SenderTypeName } from "./sender";
|
|
9
|
+
type PublicMessageInfo = PublicMessageInfoMember | PublicMessageInfoMemberOther;
|
|
10
|
+
type PublicMessageInfoMember = {
|
|
11
|
+
senderType: "member";
|
|
12
|
+
membershipTag: Uint8Array;
|
|
13
|
+
};
|
|
14
|
+
type PublicMessageInfoMemberOther = {
|
|
15
|
+
senderType: Exclude<SenderTypeName, "member">;
|
|
16
|
+
};
|
|
17
|
+
export declare const encodePublicMessageInfo: Encoder<PublicMessageInfo>;
|
|
18
|
+
export declare function decodePublicMessageInfo(senderType: SenderTypeName): Decoder<PublicMessageInfo>;
|
|
19
|
+
export type PublicMessage = {
|
|
20
|
+
content: FramedContent;
|
|
21
|
+
auth: FramedContentAuthData;
|
|
22
|
+
} & PublicMessageInfo;
|
|
23
|
+
export type MemberPublicMessage = PublicMessage & PublicMessageInfoMember;
|
|
24
|
+
export type ExternalPublicMessage = PublicMessage & PublicMessageInfoMemberOther;
|
|
25
|
+
export declare const encodePublicMessage: Encoder<PublicMessage>;
|
|
26
|
+
export declare const decodePublicMessage: Decoder<PublicMessage>;
|
|
27
|
+
export declare function findSignaturePublicKey(ratchetTree: RatchetTree, groupContext: GroupContext, framedContent: FramedContent): Uint8Array;
|
|
28
|
+
export declare function senderFromExtension(extensions: Extension[], senderIndex: number): ExternalSender | undefined;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { flatMapDecoder, mapDecoder, mapDecoders, succeedDecoder } from "./codec/tlsDecoder";
|
|
2
|
+
import { contramapEncoders } from "./codec/tlsEncoder";
|
|
3
|
+
import { decodeVarLenData, encodeVarLenData } from "./codec/variableLength";
|
|
4
|
+
import { decodeExternalSender } from "./externalSender";
|
|
5
|
+
import { decodeFramedContent, decodeFramedContentAuthData, encodeFramedContent, encodeFramedContentAuthData, } from "./framedContent";
|
|
6
|
+
import { CodecError, ValidationError } from "./mlsError";
|
|
7
|
+
import { getSignaturePublicKeyFromLeafIndex } from "./ratchetTree";
|
|
8
|
+
export const encodePublicMessageInfo = (info) => {
|
|
9
|
+
switch (info.senderType) {
|
|
10
|
+
case "member":
|
|
11
|
+
return encodeVarLenData(info.membershipTag);
|
|
12
|
+
case "external":
|
|
13
|
+
case "new_member_proposal":
|
|
14
|
+
case "new_member_commit":
|
|
15
|
+
return new Uint8Array();
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
export function decodePublicMessageInfo(senderType) {
|
|
19
|
+
switch (senderType) {
|
|
20
|
+
case "member":
|
|
21
|
+
return mapDecoder(decodeVarLenData, (membershipTag) => ({
|
|
22
|
+
senderType,
|
|
23
|
+
membershipTag,
|
|
24
|
+
}));
|
|
25
|
+
case "external":
|
|
26
|
+
case "new_member_proposal":
|
|
27
|
+
case "new_member_commit":
|
|
28
|
+
return succeedDecoder({ senderType });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export const encodePublicMessage = contramapEncoders([encodeFramedContent, encodeFramedContentAuthData, encodePublicMessageInfo], (msg) => [msg.content, msg.auth, msg]);
|
|
32
|
+
export const decodePublicMessage = flatMapDecoder(decodeFramedContent, (content) => mapDecoders([decodeFramedContentAuthData(content.contentType), decodePublicMessageInfo(content.sender.senderType)], (auth, info) => ({
|
|
33
|
+
...info,
|
|
34
|
+
content,
|
|
35
|
+
auth,
|
|
36
|
+
})));
|
|
37
|
+
export function findSignaturePublicKey(ratchetTree, groupContext, framedContent) {
|
|
38
|
+
switch (framedContent.sender.senderType) {
|
|
39
|
+
case "member":
|
|
40
|
+
return getSignaturePublicKeyFromLeafIndex(ratchetTree, framedContent.sender.leafIndex);
|
|
41
|
+
case "external":
|
|
42
|
+
const sender = senderFromExtension(groupContext.extensions, framedContent.sender.senderIndex);
|
|
43
|
+
if (sender === undefined)
|
|
44
|
+
throw new ValidationError("Received external but no external_sender extension");
|
|
45
|
+
return sender.signaturePublicKey;
|
|
46
|
+
case "new_member_proposal":
|
|
47
|
+
if (framedContent.contentType !== "proposal")
|
|
48
|
+
throw new ValidationError("Received new_member_proposal but contentType is not proposal");
|
|
49
|
+
if (framedContent.proposal.proposalType !== "add")
|
|
50
|
+
throw new ValidationError("Received new_member_proposal but proposalType was not add");
|
|
51
|
+
return framedContent.proposal.add.keyPackage.leafNode.signaturePublicKey;
|
|
52
|
+
case "new_member_commit": {
|
|
53
|
+
if (framedContent.contentType !== "commit")
|
|
54
|
+
throw new ValidationError("Received new_member_commit but contentType is not commit");
|
|
55
|
+
if (framedContent.commit.path === undefined)
|
|
56
|
+
throw new ValidationError("Commit contains no update path");
|
|
57
|
+
return framedContent.commit.path.leafNode.signaturePublicKey;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export function senderFromExtension(extensions, senderIndex) {
|
|
62
|
+
const externalSenderExtensions = extensions.filter((ex) => ex.extensionType === "external_senders");
|
|
63
|
+
const externalSenderExtension = externalSenderExtensions[senderIndex];
|
|
64
|
+
if (externalSenderExtension !== undefined) {
|
|
65
|
+
const externalSender = decodeExternalSender(externalSenderExtension.extensionData, 0);
|
|
66
|
+
if (externalSender === undefined)
|
|
67
|
+
throw new CodecError("Could not decode ExternalSender");
|
|
68
|
+
return externalSender[0];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=publicMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publicMessage.js","sourceRoot":"","sources":["../../src/publicMessage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Encoder } from "./codec/tlsEncoder";
|
|
2
|
+
import { Decoder } from "./codec/tlsDecoder";
|
|
3
|
+
import { ParentNode } from "./parentNode";
|
|
4
|
+
import { LeafNode } from "./leafNode";
|
|
5
|
+
export type Node = NodeParent | NodeLeaf;
|
|
6
|
+
type NodeParent = {
|
|
7
|
+
nodeType: "parent";
|
|
8
|
+
parent: ParentNode;
|
|
9
|
+
};
|
|
10
|
+
type NodeLeaf = {
|
|
11
|
+
nodeType: "leaf";
|
|
12
|
+
leaf: LeafNode;
|
|
13
|
+
};
|
|
14
|
+
export declare const encodeNode: Encoder<Node>;
|
|
15
|
+
export declare const decodeNode: Decoder<Node>;
|
|
16
|
+
export declare function getHpkePublicKey(n: Node): Uint8Array;
|
|
17
|
+
export type RatchetTree = (Node | undefined)[];
|
|
18
|
+
export declare function extendRatchetTree(tree: RatchetTree): RatchetTree;
|
|
19
|
+
/**
|
|
20
|
+
* If the tree has 2d leaves, then it has 2d+1 - 1 nodes.
|
|
21
|
+
* The ratchet_tree vector logically has this number of entries, but the sender MUST NOT include blank nodes after the last non-blank node.
|
|
22
|
+
* The receiver MUST check that the last node in ratchet_tree is non-blank, and then extend the tree to the right until it has a length of the form 2d+1 - 1, adding the minimum number of blank values possible.
|
|
23
|
+
* (Obviously, this may be done "virtually", by synthesizing blank nodes when required, as opposed to actually changing the structure in memory.)
|
|
24
|
+
*/
|
|
25
|
+
export declare function stripBlankNodes(tree: RatchetTree): RatchetTree;
|
|
26
|
+
export declare const encodeRatchetTree: Encoder<RatchetTree>;
|
|
27
|
+
export declare const decodeRatchetTree: Decoder<RatchetTree>;
|
|
28
|
+
export declare function findBlankLeafNodeIndex(tree: RatchetTree): number | undefined;
|
|
29
|
+
export declare function findBlankLeafNodeIndexOrExtend(tree: RatchetTree): number;
|
|
30
|
+
export declare function extendTree(tree: RatchetTree, leafNode: LeafNode): [RatchetTree, number];
|
|
31
|
+
export declare function addLeafNode(tree: RatchetTree, leafNode: LeafNode): [RatchetTree, number];
|
|
32
|
+
export declare function updateLeafNode(tree: RatchetTree, leafNode: LeafNode, leafIndex: number): RatchetTree;
|
|
33
|
+
export declare function removeLeafNode(tree: RatchetTree, removedLeafIndex: number): RatchetTree;
|
|
34
|
+
export declare function resolution(tree: (Node | undefined)[], nodeIndex: number): number[];
|
|
35
|
+
export declare function filteredDirectPath(leafIndex: number, tree: RatchetTree): number[];
|
|
36
|
+
export declare function filteredDirectPathAndCopathResolution(leafIndex: number, tree: RatchetTree): {
|
|
37
|
+
resolution: number[];
|
|
38
|
+
nodeIndex: number;
|
|
39
|
+
}[];
|
|
40
|
+
export declare function removeLeaves(tree: RatchetTree, leafIndices: number[]): RatchetTree;
|
|
41
|
+
export declare function traverseToRoot<T>(tree: RatchetTree, leafIndex: number, f: (nodeIndex: number, node: ParentNode) => T | undefined): [T, number] | undefined;
|
|
42
|
+
export declare function findFirstNonBlankAncestor(tree: RatchetTree, nodeIndex: number): number;
|
|
43
|
+
export declare function findLeafIndex(tree: RatchetTree, leaf: LeafNode): number | undefined;
|
|
44
|
+
export declare function getCredentialFromLeafIndex(ratchetTree: RatchetTree, leafIndex: number): import("./credential").Credential;
|
|
45
|
+
export declare function getSignaturePublicKeyFromLeafIndex(ratchetTree: RatchetTree, leafIndex: number): Uint8Array;
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { contramapEncoder, contramapEncoders } from "./codec/tlsEncoder";
|
|
2
|
+
import { flatMapDecoder, mapDecoder } from "./codec/tlsDecoder";
|
|
3
|
+
import { decodeVarLenType, encodeVarLenType } from "./codec/variableLength";
|
|
4
|
+
import { decodeNodeType, encodeNodeType } from "./nodeType";
|
|
5
|
+
import { decodeOptional, encodeOptional } from "./codec/optional";
|
|
6
|
+
import { encodeParentNode, decodeParentNode } from "./parentNode";
|
|
7
|
+
import { copath, directPath, isLeaf, leafToNodeIndex, leafWidth, left, nodeToLeafIndex, parent, right, root, } from "./treemath";
|
|
8
|
+
import { encodeLeafNode, decodeLeafNode } from "./leafNode";
|
|
9
|
+
import { constantTimeEqual } from "./util/constantTimeCompare";
|
|
10
|
+
import { InternalError, ValidationError } from "./mlsError";
|
|
11
|
+
export const encodeNode = (node) => {
|
|
12
|
+
switch (node.nodeType) {
|
|
13
|
+
case "parent":
|
|
14
|
+
return contramapEncoders([encodeNodeType, encodeParentNode], (n) => [n.nodeType, n.parent])(node);
|
|
15
|
+
case "leaf":
|
|
16
|
+
return contramapEncoders([encodeNodeType, encodeLeafNode], (n) => [n.nodeType, n.leaf])(node);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
export const decodeNode = flatMapDecoder(decodeNodeType, (nodeType) => {
|
|
20
|
+
switch (nodeType) {
|
|
21
|
+
case "parent":
|
|
22
|
+
return mapDecoder(decodeParentNode, (parent) => ({
|
|
23
|
+
nodeType,
|
|
24
|
+
parent,
|
|
25
|
+
}));
|
|
26
|
+
case "leaf":
|
|
27
|
+
return mapDecoder(decodeLeafNode, (leaf) => ({
|
|
28
|
+
nodeType,
|
|
29
|
+
leaf,
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
export function getHpkePublicKey(n) {
|
|
34
|
+
switch (n.nodeType) {
|
|
35
|
+
case "parent":
|
|
36
|
+
return n.parent.hpkePublicKey;
|
|
37
|
+
case "leaf":
|
|
38
|
+
return n.leaf.hpkePublicKey;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function extendRatchetTree(tree) {
|
|
42
|
+
const lastIndex = tree.length - 1;
|
|
43
|
+
if (tree[lastIndex] === undefined) {
|
|
44
|
+
throw new InternalError("The last node in the ratchet tree must be non-blank.");
|
|
45
|
+
}
|
|
46
|
+
// Compute the smallest full binary tree size >= current length
|
|
47
|
+
const neededSize = nextFullBinaryTreeSize(tree.length);
|
|
48
|
+
// Fill with `undefined` until tree has the needed size
|
|
49
|
+
const copy = tree.slice();
|
|
50
|
+
while (copy.length < neededSize) {
|
|
51
|
+
copy.push(undefined);
|
|
52
|
+
}
|
|
53
|
+
return copy;
|
|
54
|
+
}
|
|
55
|
+
// Compute the smallest 2^(d + 1) - 1 >= n
|
|
56
|
+
function nextFullBinaryTreeSize(n) {
|
|
57
|
+
let d = 0;
|
|
58
|
+
while ((1 << (d + 1)) - 1 < n) {
|
|
59
|
+
d++;
|
|
60
|
+
}
|
|
61
|
+
return (1 << (d + 1)) - 1;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* If the tree has 2d leaves, then it has 2d+1 - 1 nodes.
|
|
65
|
+
* The ratchet_tree vector logically has this number of entries, but the sender MUST NOT include blank nodes after the last non-blank node.
|
|
66
|
+
* The receiver MUST check that the last node in ratchet_tree is non-blank, and then extend the tree to the right until it has a length of the form 2d+1 - 1, adding the minimum number of blank values possible.
|
|
67
|
+
* (Obviously, this may be done "virtually", by synthesizing blank nodes when required, as opposed to actually changing the structure in memory.)
|
|
68
|
+
*/
|
|
69
|
+
export function stripBlankNodes(tree) {
|
|
70
|
+
let lastNonBlank = tree.length - 1;
|
|
71
|
+
while (lastNonBlank >= 0 && tree[lastNonBlank] === undefined) {
|
|
72
|
+
lastNonBlank--;
|
|
73
|
+
}
|
|
74
|
+
return tree.slice(0, lastNonBlank + 1);
|
|
75
|
+
}
|
|
76
|
+
export const encodeRatchetTree = contramapEncoder(encodeVarLenType(encodeOptional(encodeNode)), stripBlankNodes);
|
|
77
|
+
export const decodeRatchetTree = mapDecoder(decodeVarLenType(decodeOptional(decodeNode)), extendRatchetTree);
|
|
78
|
+
export function findBlankLeafNodeIndex(tree) {
|
|
79
|
+
const nodeIndex = tree.findIndex((node, nodeIndex) => node === undefined && isLeaf(nodeIndex));
|
|
80
|
+
if (nodeIndex < 0)
|
|
81
|
+
return undefined;
|
|
82
|
+
else
|
|
83
|
+
return nodeIndex;
|
|
84
|
+
}
|
|
85
|
+
export function findBlankLeafNodeIndexOrExtend(tree) {
|
|
86
|
+
const blankLeaf = findBlankLeafNodeIndex(tree);
|
|
87
|
+
return blankLeaf === undefined ? tree.length + 1 : blankLeaf;
|
|
88
|
+
}
|
|
89
|
+
export function extendTree(tree, leafNode) {
|
|
90
|
+
const newRoot = undefined;
|
|
91
|
+
const insertedNodeIndex = tree.length + 1;
|
|
92
|
+
const newTree = [...tree, newRoot, { nodeType: "leaf", leaf: leafNode }, ...new Array(tree.length - 1)];
|
|
93
|
+
return [newTree, insertedNodeIndex];
|
|
94
|
+
}
|
|
95
|
+
export function addLeafNode(tree, leafNode) {
|
|
96
|
+
const blankLeaf = findBlankLeafNodeIndex(tree);
|
|
97
|
+
if (blankLeaf === undefined) {
|
|
98
|
+
return extendTree(tree, leafNode);
|
|
99
|
+
}
|
|
100
|
+
const insertedLeafIndex = nodeToLeafIndex(blankLeaf);
|
|
101
|
+
const dp = directPath(blankLeaf, leafWidth(tree.length));
|
|
102
|
+
const copy = tree.slice();
|
|
103
|
+
for (const nodeIndex of dp) {
|
|
104
|
+
const node = tree[nodeIndex];
|
|
105
|
+
if (node !== undefined) {
|
|
106
|
+
const parentNode = node;
|
|
107
|
+
const updated = {
|
|
108
|
+
nodeType: "parent",
|
|
109
|
+
parent: { ...parentNode.parent, unmergedLeaves: [...parentNode.parent.unmergedLeaves, insertedLeafIndex] },
|
|
110
|
+
};
|
|
111
|
+
copy[nodeIndex] = updated;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
copy[blankLeaf] = { nodeType: "leaf", leaf: leafNode };
|
|
115
|
+
return [copy, blankLeaf];
|
|
116
|
+
}
|
|
117
|
+
export function updateLeafNode(tree, leafNode, leafIndex) {
|
|
118
|
+
const leafNodeIndex = leafToNodeIndex(leafIndex);
|
|
119
|
+
const pathToBlank = directPath(leafNodeIndex, leafWidth(tree.length));
|
|
120
|
+
const copy = tree.slice();
|
|
121
|
+
for (const nodeIndex of pathToBlank) {
|
|
122
|
+
const node = tree[nodeIndex];
|
|
123
|
+
if (node !== undefined) {
|
|
124
|
+
copy[nodeIndex] = undefined;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
copy[leafNodeIndex] = { nodeType: "leaf", leaf: leafNode };
|
|
128
|
+
return copy;
|
|
129
|
+
}
|
|
130
|
+
export function removeLeafNode(tree, removedLeafIndex) {
|
|
131
|
+
const leafNodeIndex = leafToNodeIndex(removedLeafIndex);
|
|
132
|
+
const pathToBlank = directPath(leafNodeIndex, leafWidth(tree.length));
|
|
133
|
+
const copy = tree.slice();
|
|
134
|
+
for (const nodeIndex of pathToBlank) {
|
|
135
|
+
const node = tree[nodeIndex];
|
|
136
|
+
if (node !== undefined) {
|
|
137
|
+
copy[nodeIndex] = undefined;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
copy[leafNodeIndex] = undefined;
|
|
141
|
+
return condenseRatchetTreeAfterRemove(copy);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* When the right subtree of the tree no longer has any non-blank nodes, it can be safely removed
|
|
145
|
+
*/
|
|
146
|
+
function condenseRatchetTreeAfterRemove(tree) {
|
|
147
|
+
return extendRatchetTree(stripBlankNodes(tree));
|
|
148
|
+
}
|
|
149
|
+
export function resolution(tree, nodeIndex) {
|
|
150
|
+
const node = tree[nodeIndex];
|
|
151
|
+
if (node === undefined) {
|
|
152
|
+
if (isLeaf(nodeIndex)) {
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
const l = left(nodeIndex);
|
|
156
|
+
const r = right(nodeIndex);
|
|
157
|
+
const leftRes = resolution(tree, l);
|
|
158
|
+
const rightRes = resolution(tree, r);
|
|
159
|
+
return [...leftRes, ...rightRes];
|
|
160
|
+
}
|
|
161
|
+
if (isLeaf(nodeIndex)) {
|
|
162
|
+
return [nodeIndex];
|
|
163
|
+
}
|
|
164
|
+
const unmerged = node.nodeType === "parent" ? node.parent.unmergedLeaves : [];
|
|
165
|
+
return [nodeIndex, ...unmerged.map(leafToNodeIndex)];
|
|
166
|
+
}
|
|
167
|
+
export function filteredDirectPath(leafIndex, tree) {
|
|
168
|
+
const leafNodeIndex = leafToNodeIndex(leafIndex);
|
|
169
|
+
const leafWidth = nodeToLeafIndex(tree.length);
|
|
170
|
+
const cp = copath(leafNodeIndex, leafWidth);
|
|
171
|
+
// the filtered direct path of a leaf node L is the node's direct path,
|
|
172
|
+
// with any node removed whose child on the copath of L has an empty resolution
|
|
173
|
+
return directPath(leafNodeIndex, leafWidth).filter((_nodeIndex, n) => resolution(tree, cp[n]).length !== 0);
|
|
174
|
+
}
|
|
175
|
+
export function filteredDirectPathAndCopathResolution(leafIndex, tree) {
|
|
176
|
+
const leafNodeIndex = leafToNodeIndex(leafIndex);
|
|
177
|
+
const leafWidth = nodeToLeafIndex(tree.length);
|
|
178
|
+
const cp = copath(leafNodeIndex, leafWidth);
|
|
179
|
+
// the filtered direct path of a leaf node L is the node's direct path,
|
|
180
|
+
// with any node removed whose child on the copath of L has an empty resolution
|
|
181
|
+
return directPath(leafNodeIndex, leafWidth).reduce((acc, cur, n) => {
|
|
182
|
+
const r = resolution(tree, cp[n]);
|
|
183
|
+
if (r.length === 0)
|
|
184
|
+
return acc;
|
|
185
|
+
else
|
|
186
|
+
return [...acc, { nodeIndex: cur, resolution: r }];
|
|
187
|
+
}, []);
|
|
188
|
+
}
|
|
189
|
+
export function removeLeaves(tree, leafIndices) {
|
|
190
|
+
const copy = tree.slice();
|
|
191
|
+
function shouldBeRemoved(leafIndex) {
|
|
192
|
+
return leafIndices.find((x) => leafIndex === x) !== undefined;
|
|
193
|
+
}
|
|
194
|
+
for (const [i, n] of tree.entries()) {
|
|
195
|
+
if (n !== undefined) {
|
|
196
|
+
if (isLeaf(i) && shouldBeRemoved(nodeToLeafIndex(i))) {
|
|
197
|
+
copy[i] = undefined;
|
|
198
|
+
}
|
|
199
|
+
else if (n.nodeType === "parent") {
|
|
200
|
+
copy[i] = {
|
|
201
|
+
...n,
|
|
202
|
+
parent: { ...n.parent, unmergedLeaves: n.parent.unmergedLeaves.filter((l) => !shouldBeRemoved(l)) },
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return condenseRatchetTreeAfterRemove(copy);
|
|
208
|
+
}
|
|
209
|
+
export function traverseToRoot(tree, leafIndex, f) {
|
|
210
|
+
const rootIndex = root(leafWidth(tree.length));
|
|
211
|
+
let currentIndex = leafToNodeIndex(leafIndex);
|
|
212
|
+
while (currentIndex != rootIndex) {
|
|
213
|
+
currentIndex = parent(currentIndex, leafWidth(tree.length));
|
|
214
|
+
const currentNode = tree[currentIndex];
|
|
215
|
+
if (currentNode !== undefined) {
|
|
216
|
+
if (currentNode.nodeType === "leaf") {
|
|
217
|
+
throw new InternalError("Expected parent node");
|
|
218
|
+
}
|
|
219
|
+
const result = f(currentIndex, currentNode.parent);
|
|
220
|
+
if (result !== undefined) {
|
|
221
|
+
return [result, currentIndex];
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
export function findFirstNonBlankAncestor(tree, nodeIndex) {
|
|
227
|
+
return (traverseToRoot(tree, nodeToLeafIndex(nodeIndex), (nodeIndex, _node) => nodeIndex)?.[0] ??
|
|
228
|
+
root(leafWidth(tree.length)));
|
|
229
|
+
}
|
|
230
|
+
export function findLeafIndex(tree, leaf) {
|
|
231
|
+
const foundIndex = tree.findIndex((node, nodeIndex) => {
|
|
232
|
+
if (isLeaf(nodeIndex) && node !== undefined) {
|
|
233
|
+
if (node.nodeType === "parent")
|
|
234
|
+
throw new InternalError("Found parent node in leaf node position");
|
|
235
|
+
//todo is there a better (faster) comparison method?
|
|
236
|
+
return constantTimeEqual(encodeLeafNode(node.leaf), encodeLeafNode(leaf));
|
|
237
|
+
}
|
|
238
|
+
return false;
|
|
239
|
+
});
|
|
240
|
+
return foundIndex === -1 ? undefined : nodeToLeafIndex(foundIndex);
|
|
241
|
+
}
|
|
242
|
+
export function getCredentialFromLeafIndex(ratchetTree, leafIndex) {
|
|
243
|
+
const senderLeafNode = ratchetTree[leafToNodeIndex(leafIndex)];
|
|
244
|
+
if (senderLeafNode === undefined || senderLeafNode.nodeType === "parent")
|
|
245
|
+
throw new ValidationError("Unable to find leafnode for leafIndex");
|
|
246
|
+
return senderLeafNode.leaf.credential;
|
|
247
|
+
}
|
|
248
|
+
export function getSignaturePublicKeyFromLeafIndex(ratchetTree, leafIndex) {
|
|
249
|
+
const leafNode = ratchetTree[leafToNodeIndex(leafIndex)];
|
|
250
|
+
if (leafNode === undefined || leafNode.nodeType === "parent")
|
|
251
|
+
throw new ValidationError("Unable to find leafnode for leafIndex");
|
|
252
|
+
return leafNode.leaf.signaturePublicKey;
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=ratchetTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ratchetTree.js","sourceRoot":"","sources":["../../src/ratchetTree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CredentialTypeName } from "./credentialType";
|
|
2
|
+
import { Encoder } from "./codec/tlsEncoder";
|
|
3
|
+
import { Decoder } from "./codec/tlsDecoder";
|
|
4
|
+
export type RequiredCapabilities = {
|
|
5
|
+
extensionTypes: number[];
|
|
6
|
+
proposalTypes: number[];
|
|
7
|
+
credentialTypes: CredentialTypeName[];
|
|
8
|
+
};
|
|
9
|
+
export declare const encodeRequiredCapabilities: Encoder<RequiredCapabilities>;
|
|
10
|
+
export declare const decodeRequiredCapabilities: Decoder<RequiredCapabilities>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { encodeCredentialType, decodeCredentialType } from "./credentialType";
|
|
2
|
+
import { encodeVarLenType, decodeVarLenType } from "./codec/variableLength";
|
|
3
|
+
import { contramapEncoders } from "./codec/tlsEncoder";
|
|
4
|
+
import { mapDecoders } from "./codec/tlsDecoder";
|
|
5
|
+
import { decodeUint16, encodeUint16 } from "./codec/number";
|
|
6
|
+
export const encodeRequiredCapabilities = contramapEncoders([encodeVarLenType(encodeUint16), encodeVarLenType(encodeUint16), encodeVarLenType(encodeCredentialType)], (rc) => [rc.extensionTypes, rc.proposalTypes, rc.credentialTypes]);
|
|
7
|
+
export const decodeRequiredCapabilities = mapDecoders([decodeVarLenType(decodeUint16), decodeVarLenType(decodeUint16), decodeVarLenType(decodeCredentialType)], (extensionTypes, proposalTypes, credentialTypes) => ({ extensionTypes, proposalTypes, credentialTypes }));
|
|
8
|
+
//# sourceMappingURL=requiredCapabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requiredCapabilities.js","sourceRoot":"","sources":["../../src/requiredCapabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACjG,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC3E,OAAO,EAAW,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAW,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAQ3D,MAAM,CAAC,MAAM,0BAA0B,GAAkC,iBAAiB,CACxF,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,EACxG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,eAAe,CAAU,CAC3E,CAAA;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAkC,WAAW,CAClF,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,EACxG,CAAC,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,CACzG,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ClientState } from "./clientState";
|
|
2
|
+
import { CreateCommitResult } from "./createCommit";
|
|
3
|
+
import { CiphersuiteName, CiphersuiteImpl } from "./crypto/ciphersuite";
|
|
4
|
+
import { Extension } from "./extension";
|
|
5
|
+
import { KeyPackage, PrivateKeyPackage } from "./keyPackage";
|
|
6
|
+
import { ResumptionPSKUsageName, PreSharedKeyID } from "./presharedkey";
|
|
7
|
+
import { ProtocolVersionName } from "./protocolVersion";
|
|
8
|
+
import { RatchetTree } from "./ratchetTree";
|
|
9
|
+
import { Welcome } from "./welcome";
|
|
10
|
+
export declare function reinitGroup(state: ClientState, groupId: Uint8Array, version: ProtocolVersionName, cipherSuite: CiphersuiteName, extensions: Extension[], cs: CiphersuiteImpl): Promise<CreateCommitResult>;
|
|
11
|
+
export declare function reinitCreateNewGroup(state: ClientState, keyPackage: KeyPackage, privateKeyPackage: PrivateKeyPackage, memberKeyPackages: KeyPackage[], groupId: Uint8Array, cipherSuite: CiphersuiteName, extensions: Extension[]): Promise<CreateCommitResult>;
|
|
12
|
+
export declare function makeResumptionPsk(state: ClientState, usage: ResumptionPSKUsageName, cs: CiphersuiteImpl): {
|
|
13
|
+
id: PreSharedKeyID;
|
|
14
|
+
secret: Uint8Array;
|
|
15
|
+
};
|
|
16
|
+
export declare function branchGroup(state: ClientState, keyPackage: KeyPackage, privateKeyPackage: PrivateKeyPackage, memberKeyPackages: KeyPackage[], newGroupId: Uint8Array, cs: CiphersuiteImpl): Promise<CreateCommitResult>;
|
|
17
|
+
export declare function joinGroupFromBranch(oldState: ClientState, welcome: Welcome, keyPackage: KeyPackage, privateKeyPackage: PrivateKeyPackage, ratchetTree: RatchetTree | undefined, cs: CiphersuiteImpl): Promise<ClientState>;
|
|
18
|
+
export declare function joinGroupFromReinit(suspendedState: ClientState, welcome: Welcome, keyPackage: KeyPackage, privateKeyPackage: PrivateKeyPackage, ratchetTree: RatchetTree | undefined): Promise<ClientState>;
|