Skip to content

Commit 64e8616

Browse files
committed
Use ProtocolVersionValue instead of ProtocolVersionName
1 parent 234ae56 commit 64e8616

43 files changed

Lines changed: 152 additions & 89 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ import {
8484
generateKeyPackage,
8585
encodeMlsMessage,
8686
decodeMlsMessage,
87+
protocolVersions,
8788
Proposal,
8889
zeroOutUint8Array,
8990
} from "ts-mls"
@@ -107,7 +108,7 @@ const bob = await generateKeyPackage(bobCredential, defaultCapabilities(), defau
107108
const keyPackageMessage = encodeMlsMessage({
108109
keyPackage: bob.publicPackage,
109110
wireformat: "mls_key_package",
110-
version: "mls10",
111+
version: protocolVersions.mls10,
111112
})
112113

113114
// alice decodes bob's keyPackage
@@ -135,7 +136,7 @@ commitResult.consumed.forEach(zeroOutUint8Array)
135136
const encodedWelcome = encodeMlsMessage({
136137
welcome: commitResult.welcome!,
137138
wireformat: "mls_welcome",
138-
version: "mls10",
139+
version: protocolVersions.mls10,
139140
})
140141

141142
// bob decodes the welcome message
@@ -167,7 +168,7 @@ aliceCreateMessageResult.consumed.forEach(zeroOutUint8Array)
167168
const encodedPrivateMessageAlice = encodeMlsMessage({
168169
privateMessage: aliceCreateMessageResult.privateMessage,
169170
wireformat: "mls_private_message",
170-
version: "mls10",
171+
version: protocolVersions.mls10,
171172
})
172173

173174
// bob decodes the message

src/capabilities.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { CredentialTypeName, decodeCredentialType, credentialTypeEncoder } from "./credentialType.js"
2-
import { CiphersuiteId } from "./crypto/ciphersuite.js"
3-
import { decodeProtocolVersion, protocolVersionEncoder, ProtocolVersionName } from "./protocolVersion.js"
2+
import { ciphersuiteEncoder, CiphersuiteId, decodeCiphersuite } from "./crypto/ciphersuite.js"
3+
import { decodeProtocolVersion, protocolVersionEncoder, ProtocolVersionValue } from "./protocolVersion.js"
44
import { BufferEncoder, contramapBufferEncoders, encode, Encoder } from "./codec/tlsEncoder.js"
55
import { Decoder, mapDecoders } from "./codec/tlsDecoder.js"
66
import { decodeVarLenType, varLenTypeEncoder } from "./codec/variableLength.js"
77
import { decodeUint16, uint16Encoder } from "./codec/number.js"
88

99
/** @public */
1010
export interface Capabilities {
11-
versions: ProtocolVersionName[]
11+
versions: ProtocolVersionValue[]
1212
ciphersuites: CiphersuiteId[]
1313
extensions: number[]
1414
proposals: number[]
@@ -18,7 +18,7 @@ export interface Capabilities {
1818
export const capabilitiesEncoder: BufferEncoder<Capabilities> = contramapBufferEncoders(
1919
[
2020
varLenTypeEncoder(protocolVersionEncoder),
21-
varLenTypeEncoder(uint16Encoder),
21+
varLenTypeEncoder(ciphersuiteEncoder),
2222
varLenTypeEncoder(uint16Encoder),
2323
varLenTypeEncoder(uint16Encoder),
2424
varLenTypeEncoder(credentialTypeEncoder),
@@ -31,14 +31,14 @@ export const encodeCapabilities: Encoder<Capabilities> = encode(capabilitiesEnco
3131
export const decodeCapabilities: Decoder<Capabilities> = mapDecoders(
3232
[
3333
decodeVarLenType(decodeProtocolVersion),
34-
decodeVarLenType(decodeUint16),
34+
decodeVarLenType(decodeCiphersuite),
3535
decodeVarLenType(decodeUint16),
3636
decodeVarLenType(decodeUint16),
3737
decodeVarLenType(decodeCredentialType),
3838
],
3939
(versions, ciphersuites, extensions, proposals, credentials) => ({
4040
versions,
41-
ciphersuites: ciphersuites as CiphersuiteId[],
41+
ciphersuites,
4242
extensions,
4343
proposals,
4444
credentials,

src/clientState.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -689,7 +689,7 @@ function validateReinit(
689689
): ValidationError | undefined {
690690
if (allProposals.length !== 1) return new ValidationError("Reinit proposal needs to be commited by itself")
691691

692-
if (protocolVersions[reinit.version] < protocolVersions[gc.version])
692+
if (reinit.version < gc.version)
693693
return new ValidationError("A ReInit proposal cannot use a version less than the version for the current group")
694694
}
695695

@@ -1102,7 +1102,7 @@ export async function createGroup(
11021102
const confirmedTranscriptHash = new Uint8Array()
11031103

11041104
const groupContext: GroupContext = {
1105-
version: "mls10",
1105+
version: protocolVersions.mls10,
11061106
cipherSuite: cs.name,
11071107
epoch: 0n,
11081108
treeHash: await treeHashRoot(ratchetTree, cs.hash),

src/createCommit.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
} from "./clientState.js"
1111
import { GroupActiveState } from "./groupActiveState.js"
1212
import { CiphersuiteImpl } from "./crypto/ciphersuite.js"
13+
import { protocolVersions } from "./protocolVersion.js"
1314
import { decryptWithLabel } from "./crypto/hpke.js"
1415
import { deriveSecret } from "./crypto/kdf.js"
1516
import {
@@ -427,7 +428,11 @@ async function protectCommit(
427428
cs,
428429
)
429430

430-
return [{ version: "mls10", wireformat: "mls_public_message", publicMessage: msg }, state.secretTree, []]
431+
return [
432+
{ version: protocolVersions.mls10, wireformat: "mls_public_message", publicMessage: msg },
433+
state.secretTree,
434+
[],
435+
]
431436
} else {
432437
const res = await protect(
433438
state.keySchedule.senderDataSecret,
@@ -441,7 +446,7 @@ async function protectCommit(
441446
)
442447

443448
return [
444-
{ version: "mls10", wireformat: "mls_private_message", privateMessage: res.privateMessage },
449+
{ version: protocolVersions.mls10, wireformat: "mls_private_message", privateMessage: res.privateMessage },
445450
res.tree,
446451
res.consumed,
447452
]

src/createMessage.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { protectProposal, protectApplicationData } from "./messageProtection.js"
66
import { protectProposalPublic } from "./messageProtectionPublic.js"
77
import { Proposal } from "./proposal.js"
88
import { addUnappliedProposal } from "./unappliedProposals.js"
9+
import { protocolVersions } from "./protocolVersion.js"
910

1011
/** @public */
1112
export async function createProposal(
@@ -33,7 +34,11 @@ export async function createProposal(
3334
)
3435
return {
3536
newState,
36-
message: { wireformat: "mls_public_message", version: "mls10", publicMessage: result.publicMessage },
37+
message: {
38+
wireformat: "mls_public_message",
39+
version: protocolVersions.mls10,
40+
publicMessage: result.publicMessage,
41+
},
3742
consumed: [],
3843
}
3944
} else {
@@ -62,7 +67,11 @@ export async function createProposal(
6267

6368
return {
6469
newState,
65-
message: { wireformat: "mls_private_message", version: "mls10", privateMessage: result.privateMessage },
70+
message: {
71+
wireformat: "mls_private_message",
72+
version: protocolVersions.mls10,
73+
privateMessage: result.privateMessage,
74+
},
6675
consumed: result.consumed,
6776
}
6877
}

src/defaultCapabilities.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { Capabilities } from "./capabilities.js"
22
import { ciphersuites, CiphersuiteId } from "./crypto/ciphersuite.js"
33
import { greaseCapabilities, defaultGreaseConfig } from "./grease.js"
4+
import { protocolVersions } from "./protocolVersion.js"
45

56
/** @public */
67
export function defaultCapabilities(): Capabilities {
78
return greaseCapabilities(defaultGreaseConfig, {
8-
versions: ["mls10"],
9+
versions: [protocolVersions.mls10],
910
ciphersuites: Object.values(ciphersuites) as CiphersuiteId[],
1011
extensions: [],
1112
proposals: [],

src/framedContent.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { Signature, signWithLabel, verifyWithLabel } from "./crypto/signature.js
1717
import { groupContextEncoder, GroupContext } from "./groupContext.js"
1818
import { wireformatEncoder, WireformatName } from "./wireformat.js"
1919
import { decodeProposal, proposalEncoder, Proposal } from "./proposal.js"
20-
import { protocolVersionEncoder, ProtocolVersionName } from "./protocolVersion.js"
20+
import { protocolVersionEncoder, ProtocolVersionValue } from "./protocolVersion.js"
2121
import {
2222
decodeSender,
2323
senderEncoder,
@@ -176,7 +176,7 @@ export const senderInfoEncoder: BufferEncoder<SenderInfo> = (info) => {
176176
export const encodeSenderInfo: Encoder<SenderInfo> = encode(senderInfoEncoder)
177177

178178
export type FramedContentTBS = {
179-
protocolVersion: ProtocolVersionName
179+
protocolVersion: ProtocolVersionValue
180180
wireformat: WireformatName
181181
content: FramedContent
182182
} & SenderInfo

src/groupContext.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import { CiphersuiteId, ciphersuiteEncoder, decodeCiphersuite } from "./crypto/c
77
import { expandWithLabel, Kdf } from "./crypto/kdf.js"
88
import { decodeExtension, extensionEncoder, Extension } from "./extension.js"
99

10-
import { decodeProtocolVersion, protocolVersionEncoder, ProtocolVersionName } from "./protocolVersion.js"
10+
import { decodeProtocolVersion, protocolVersionEncoder, ProtocolVersionValue } from "./protocolVersion.js"
1111

1212
/** @public */
1313
export interface GroupContext {
14-
version: ProtocolVersionName
14+
version: ProtocolVersionValue
1515
cipherSuite: CiphersuiteId
1616
groupId: Uint8Array
1717
epoch: bigint

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export { type Encoder } from "./codec/tlsEncoder.js"
137137
export { type Brand } from "./util/brand.js"
138138

139139
export { type ContentTypeName } from "./contentType.js"
140-
export { type ProtocolVersionName } from "./protocolVersion.js"
140+
export { type ProtocolVersionName, type ProtocolVersionValue } from "./protocolVersion.js"
141141

142142
export { type CredentialTypeName } from "./credentialType.js"
143143
export { type CredentialBasic, type CredentialX509 } from "./credential.js"

src/keyPackage.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@ import { CiphersuiteId, CiphersuiteImpl, ciphersuiteEncoder, decodeCiphersuite }
55
import { Hash, refhash } from "./crypto/hash.js"
66
import { Signature, signWithLabel, verifyWithLabel } from "./crypto/signature.js"
77
import { decodeExtension, extensionEncoder, Extension } from "./extension.js"
8-
import { decodeProtocolVersion, protocolVersionEncoder, ProtocolVersionName } from "./protocolVersion.js"
8+
import {
9+
decodeProtocolVersion,
10+
protocolVersionEncoder,
11+
protocolVersions,
12+
ProtocolVersionValue,
13+
} from "./protocolVersion.js"
914
import {
1015
decodeLeafNodeKeyPackage,
1116
leafNodeEncoder,
@@ -19,7 +24,7 @@ import { Credential } from "./credential.js"
1924

2025
/** @public */
2126
export type KeyPackageTBS = {
22-
version: ProtocolVersionName
27+
version: ProtocolVersionValue
2328
cipherSuite: CiphersuiteId
2429
initKey: Uint8Array
2530
leafNode: LeafNodeKeyPackage
@@ -130,7 +135,7 @@ export async function generateKeyPackageWithKey(
130135
}
131136

132137
const tbs: KeyPackageTBS = {
133-
version: "mls10",
138+
version: protocolVersions.mls10,
134139
cipherSuite: cs.name,
135140
initKey: await cs.hpke.exportPublicKey(initKeys.publicKey),
136141
leafNode: await signLeafNodeKeyPackage(leafNodeTbs, signatureKeyPair.signKey, cs.signature),

0 commit comments

Comments
 (0)