Skip to documentation
SLOP

tiny.quic.tls.message

Reference tiny.quic tls message

Defined in tls.

API (43)

Actions

Public operations.

Types and contracts

Public types and contracts.

Namespaces

Public namespaces.

Values and defaults

Public values and defaults.

No direct callersNo direct callstlsmessage
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Source: lib/quic/src/tls/message/codec.zig:81

zig
pub const Certificate = struct {    request_context: []const u8,    entries: CertificateEntries,};

Source: lib/quic/src/tls/message/codec.zig:91

zig
pub const CertificateEntries = struct {    bytes: []const u8,    pub fn iterator(self: CertificateEntries) CertificateIterator {        return .{ .input = cursor.Read.init(self.bytes), .count = 0 };    }};

Source: lib/quic/src/tls/message/codec.zig:86

zig
pub const CertificateEntry = struct {    data: []const u8,    extensions: Extensions,};

Source: lib/quic/src/tls/message/codec.zig:99

zig
pub const CertificateIterator = struct {    input: cursor.Read,    count: u8,    pub fn next(self: *CertificateIterator) DecodeError!?CertificateEntry {        if (self.input.remaining() == 0) return null;        if (self.count == certificate_entries_max) {            return error.TooManyCertificateEntries;        }        self.count += 1;        const data = try takeVector24(&self.input);        const extensions = try takeVector16(&self.input);        return .{ .data = data, .extensions = .{ .bytes = extensions } };    }};

Source: lib/quic/src/tls/message/codec.zig:76

zig
pub const CertificateRequest = struct {    context: []const u8,    extensions: Extensions,};

Source: lib/quic/src/tls/message/codec.zig:115

zig
pub const CertificateVerify = struct {    algorithm: std.crypto.tls.SignatureScheme,    signature: []const u8,};

Source: lib/quic/src/tls/message/codec.zig:56

zig
pub const ClientHello = struct {    legacy_version: u16,    random: [32]u8,    legacy_session_id: []const u8,    cipher_suites: []const u8,    compression_methods: []const u8,    extensions: Extensions,};

Source: lib/quic/src/tls/message/codec.zig:74

zig
pub const EncryptedExtensions = struct { extensions: Extensions };

Source: lib/quic/src/tls/message/codec.zig:29

zig
pub const Extension = struct {    kind: ExtensionType,    data: []const u8,};

Source: lib/quic/src/tls/message/codec.zig:42

zig
pub const ExtensionIterator = struct {    input: cursor.Read,    count: u8,    pub fn next(self: *ExtensionIterator) DecodeError!?Extension {        if (self.input.remaining() == 0) return null;        if (self.count == extension_count_max) return error.TooManyExtensions;        self.count += 1;        const kind: ExtensionType = @fromBackingInt(@intCast(try self.input.int(u16)));        const length = try self.input.int(u16);        return .{ .kind = kind, .data = try self.input.take(length) };    }};

Source: lib/quic/src/tls/message/codec.zig:34

zig
pub const Extensions = struct {    bytes: []const u8,    pub fn iterator(self: Extensions) ExtensionIterator {        return .{ .input = cursor.Read.init(self.bytes), .count = 0 };    }};

Source: lib/quic/src/tls/message/codec.zig:120

zig
pub const Finished = struct { verify_data: []const u8 };

Source: lib/quic/src/tls/message/codec.zig:24

zig
pub const Handshake = struct {    kind: HandshakeType,    body: []const u8,};

Source: lib/quic/src/tls/message/codec.zig:122

zig
pub const NewSessionTicket = struct {    lifetime: u32,    age_add: u32,    nonce: []const u8,    ticket: []const u8,    extensions: Extensions,};

Source: lib/quic/src/tls/message/codec.zig:65

zig
pub const ServerHello = struct {    legacy_version: u16,    random: [32]u8,    legacy_session_id_echo: []const u8,    cipher_suite: u16,    compression_method: u8,    extensions: Extensions,};
Called byCallsNo direct callerscursor.Readinittls.message.CertificateEntriesiterator
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callerscursor.Readremainingprivate sourcelib.quic.src.tls.message.codectakeVector16private sourcelib.quic.src.tls.message.codectakeVector24tls.message.CertificateIteratornext
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/quic/src/tls/message/codec.zig:21

zig
pub const DecodeError = cursor.ReadError || DecodeSpecific;
Called byCallsNo direct callerscursor.Readintcursor.Readremainingcursor.Readtaketls.message.ExtensionIteratornext
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callerscursor.Readinittls.message.Extensionsiterator
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/quic/src/tls/message/codec.zig:9

zig
pub const certificate_entries_max: u8 = 8;

Source: lib/quic/src/tls/message/codec.zig:130

zig
pub fn decode(bytes: []const u8) DecodeError!Handshake {    var input = cursor.Read.init(bytes);    const kind: HandshakeType = @fromBackingInt(@intCast(try input.byte()));    const length = try input.int(u24);    const body = try input.take(length);    if (input.remaining() != 0) return error.InvalidLength;    return .{ .kind = kind, .body = body };}
Called byCallstls.messagedecodeFinishedprivate sourcelib.quic.src.tls.message.codecexpectedcursor.Readbytecursor.Readinitcursor.Readintcursor.Readremainingcursor.Readtaketls.messagedecode
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/quic/src/tls/message/codec.zig:298

zig
pub fn decodeCertificate(bytes: []const u8) DecodeError!Certificate {    var input = try expected(bytes, .certificate);    const context = try takeVector8(&input);    const entries = try takeVector24(&input);    try finish(&input);    return .{ .request_context = context, .entries = .{ .bytes = entries } };}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecexpectedprivate sourcelib.quic.src.tls.message.codecfinishprivate sourcelib.quic.src.tls.message.codectakeVector24private sourcelib.quic.src.tls.message.codectakeVector8tls.messagedecodeCertificate
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/quic/src/tls/message/codec.zig:278

zig
pub fn decodeCertificateRequest(bytes: []const u8) DecodeError!CertificateRequest {    var input = try expected(bytes, .certificate_request);    const context = try takeVector8(&input);    const extensions = try takeVector16(&input);    try finish(&input);    return .{ .context = context, .extensions = .{ .bytes = extensions } };}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecexpectedprivate sourcelib.quic.src.tls.message.codecfinishprivate sourcelib.quic.src.tls.message.codectakeVector16private sourcelib.quic.src.tls.message.codectakeVector8tls.messagedecodeCertificateRequest
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/quic/src/tls/message/codec.zig:332

zig
pub fn decodeCertificateVerify(bytes: []const u8) DecodeError!CertificateVerify {    var input = try expected(bytes, .certificate_verify);    const algorithm: std.crypto.tls.SignatureScheme = @fromBackingInt(@intCast(try input.int(u16)));    const signature = try takeVector16(&input);    try finish(&input);    return .{ .algorithm = algorithm, .signature = signature };}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecexpectedprivate sourcelib.quic.src.tls.message.codecfinishprivate sourcelib.quic.src.tls.message.codectakeVector16tls.messagedecodeCertificateVerify
Static calls · unresolved targets: 0 · external targets: 1.

Source: lib/quic/src/tls/message/codec.zig:181

zig
pub fn decodeClientHello(bytes: []const u8) DecodeError!ClientHello {    var input = try expected(bytes, .client_hello);    const legacy_version = try input.int(u16);    var random: [32]u8 = undefined;    @memcpy(&random, try input.take(32));    const session_id = try takeVector8(&input);    const cipher_suites = try takeVector16(&input);    if (cipher_suites.len == 0) return error.InvalidLength;    if (cipher_suites.len % 2 != 0) return error.InvalidLength;    const compression = try takeVector8(&input);    const extensions = try takeVector16(&input);    try finish(&input);    return .{        .legacy_version = legacy_version,        .random = random,        .legacy_session_id = session_id,        .cipher_suites = cipher_suites,        .compression_methods = compression,        .extensions = .{ .bytes = extensions },    };}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecexpectedprivate sourcelib.quic.src.tls.message.codecfinishprivate sourcelib.quic.src.tls.message.codectakeVector16private sourcelib.quic.src.tls.message.codectakeVector8tls.messagedecodeClientHello
Static calls · unresolved targets: 0 · external targets: 2.

Source: lib/quic/src/tls/message/codec.zig:262

zig
pub fn decodeEncryptedExtensions(bytes: []const u8) DecodeError!EncryptedExtensions {    var input = try expected(bytes, .encrypted_extensions);    const extensions = try takeVector16(&input);    try finish(&input);    return .{ .extensions = .{ .bytes = extensions } };}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecexpectedprivate sourcelib.quic.src.tls.message.codecfinishprivate sourcelib.quic.src.tls.message.codectakeVector16tls.messagedecodeEncryptedExtensions
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/quic/src/tls/message/codec.zig:369

zig
pub fn decodeFinished(bytes: []const u8) DecodeError!Finished {    const value = try decode(bytes);    if (value.kind != .finished) return error.WrongMessage;    return .{ .verify_data = value.body };}
Called byCallsNo direct callerstls.messagedecodetls.messagedecodeFinished
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/quic/src/tls/message/codec.zig:350

zig
pub fn decodeNewSessionTicket(bytes: []const u8) DecodeError!NewSessionTicket {    var input = try expected(bytes, .new_session_ticket);    const lifetime = try input.int(u32);    const age_add = try input.int(u32);    const nonce = try takeVector8(&input);    const ticket = try takeVector16(&input);    if (ticket.len == 0) return error.InvalidLength;    const extensions = try takeVector16(&input);    if (extensions.len > std.math.maxInt(u16) - 1) return error.InvalidLength;    try finish(&input);    return .{        .lifetime = lifetime,        .age_add = age_add,        .nonce = nonce,        .ticket = ticket,        .extensions = .{ .bytes = extensions },    };}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecexpectedprivate sourcelib.quic.src.tls.message.codecfinishprivate sourcelib.quic.src.tls.message.codectakeVector16private sourcelib.quic.src.tls.message.codectakeVector8tls.messagedecodeNewSessionTicket
Static calls · unresolved targets: 0 · external targets: 1.

Source: lib/quic/src/tls/message/codec.zig:229

zig
pub fn decodeServerHello(bytes: []const u8) DecodeError!ServerHello {    var input = try expected(bytes, .server_hello);    const legacy_version = try input.int(u16);    var random: [32]u8 = undefined;    @memcpy(&random, try input.take(32));    const session_id = try takeVector8(&input);    const cipher_suite = try input.int(u16);    const compression_method = try input.byte();    const extensions = try takeVector16(&input);    try finish(&input);    return .{        .legacy_version = legacy_version,        .random = random,        .legacy_session_id_echo = session_id,        .cipher_suite = cipher_suite,        .compression_method = compression_method,        .extensions = .{ .bytes = extensions },    };}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecexpectedprivate sourcelib.quic.src.tls.message.codecfinishprivate sourcelib.quic.src.tls.message.codectakeVector16private sourcelib.quic.src.tls.message.codectakeVector8tls.messagedecodeServerHello
Static calls · unresolved targets: 0 · external targets: 3.

Source: lib/quic/src/tls/message/codec.zig:139

zig
pub fn encode(value: Handshake, output: *cursor.Write) EncodeError!void {    try writeHeader(value.kind, value.body.len, output);    try output.put(value.body);}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecwriteHeadertls.messageencode
Static calls · unresolved targets: 1 · external targets: 0.

Source: lib/quic/src/tls/message/codec.zig:306

zig
pub fn encodeCertificate(value: Certificate, output: *cursor.Write) EncodeError!void {    var length = try addLength(1, value.request_context.len);    length = try addLength(length, 3);    length = try addLength(length, value.entries.bytes.len);    try writeHeader(.certificate, length, output);    try writeVector8(value.request_context, output);    try writeVector24(value.entries.bytes, output);}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecaddLengthprivate sourcelib.quic.src.tls.message.codecwriteHeaderprivate sourcelib.quic.src.tls.message.codecwriteVector24private sourcelib.quic.src.tls.message.codecwriteVector8tls.messageencodeCertificate
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/quic/src/tls/message/codec.zig:286

zig
pub fn encodeCertificateRequest(    value: CertificateRequest,    output: *cursor.Write,) EncodeError!void {    var length = try addLength(1, value.context.len);    length = try addLength(length, 2);    length = try addLength(length, value.extensions.bytes.len);    try writeHeader(.certificate_request, length, output);    try writeVector8(value.context, output);    try writeVector16(value.extensions.bytes, output);}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecaddLengthprivate sourcelib.quic.src.tls.message.codecwriteHeaderprivate sourcelib.quic.src.tls.message.codecwriteVector16private sourcelib.quic.src.tls.message.codecwriteVector8tls.messageencodeCertificateRequest
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/quic/src/tls/message/codec.zig:340

zig
pub fn encodeCertificateVerify(    value: CertificateVerify,    output: *cursor.Write,) EncodeError!void {    const length = try addLength(4, value.signature.len);    try writeHeader(.certificate_verify, length, output);    try output.int(u16, @backingInt(value.algorithm));    try writeVector16(value.signature, output);}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecaddLengthprivate sourcelib.quic.src.tls.message.codecwriteHeaderprivate sourcelib.quic.src.tls.message.codecwriteVector16tls.messageencodeCertificateVerify
Static calls · unresolved targets: 0 · external targets: 1.

Source: lib/quic/src/tls/message/codec.zig:203

zig
pub fn encodeClientHello(value: ClientHello, output: *cursor.Write) EncodeError!void {    if (value.cipher_suites.len == 0) return error.InvalidLength;    if (value.cipher_suites.len % 2 != 0) return error.InvalidLength;    const length = try helloLength(        value.legacy_session_id.len,        value.cipher_suites.len,        value.compression_methods.len,        value.extensions.bytes.len,    );    try writeHeader(.client_hello, length, output);    try output.int(u16, value.legacy_version);    try output.put(&value.random);    try writeVector8(value.legacy_session_id, output);    try writeVector16(value.cipher_suites, output);    try writeVector8(value.compression_methods, output);    try writeVector16(value.extensions.bytes, output);}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codechelloLengthprivate sourcelib.quic.src.tls.message.codecwriteHeaderprivate sourcelib.quic.src.tls.message.codecwriteVector16private sourcelib.quic.src.tls.message.codecwriteVector8tls.messageencodeClientHello
Static calls · unresolved targets: 1 · external targets: 1.

Source: lib/quic/src/tls/message/codec.zig:269

zig
pub fn encodeEncryptedExtensions(    value: EncryptedExtensions,    output: *cursor.Write,) EncodeError!void {    const length = try addLength(2, value.extensions.bytes.len);    try writeHeader(.encrypted_extensions, length, output);    try writeVector16(value.extensions.bytes, output);}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecaddLengthprivate sourcelib.quic.src.tls.message.codecwriteHeaderprivate sourcelib.quic.src.tls.message.codecwriteVector16tls.messageencodeEncryptedExtensions
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/quic/src/tls/message/codec.zig:375

zig
pub fn encodeFinished(value: Finished, output: *cursor.Write) EncodeError!void {    try writeHeader(.finished, value.verify_data.len, output);    try output.put(value.verify_data);}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecwriteHeadertls.messageencodeFinished
Static calls · unresolved targets: 1 · external targets: 0.

Source: lib/quic/src/tls/message/codec.zig:249

zig
pub fn encodeServerHello(value: ServerHello, output: *cursor.Write) EncodeError!void {    var length: usize = 2 + 32 + 1 + 2 + 1 + 2;    length = try addLength(length, value.legacy_session_id_echo.len);    length = try addLength(length, value.extensions.bytes.len);    try writeHeader(.server_hello, length, output);    try output.int(u16, value.legacy_version);    try output.put(&value.random);    try writeVector8(value.legacy_session_id_echo, output);    try output.int(u16, value.cipher_suite);    try output.byte(value.compression_method);    try writeVector16(value.extensions.bytes, output);}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecaddLengthprivate sourcelib.quic.src.tls.message.codecwriteHeaderprivate sourcelib.quic.src.tls.message.codecwriteVector16private sourcelib.quic.src.tls.message.codecwriteVector8tls.messageencodeServerHello
Static calls · unresolved targets: 1 · external targets: 2.

Source: lib/quic/src/tls/message/codec.zig:315

zig
pub fn encodeSingleCertificate(    request_context: []const u8,    certificate: []const u8,    output: *cursor.Write,) EncodeError!void {    var entries_length = try addLength(3, certificate.len);    entries_length = try addLength(entries_length, 2);    var length = try addLength(1, request_context.len);    length = try addLength(length, 3);    length = try addLength(length, entries_length);    try writeHeader(.certificate, length, output);    try writeVector8(request_context, output);    try writeLength(u24, entries_length, output);    try writeVector24(certificate, output);    try writeVector16(&.{}, output);}
Called byCallsNo direct callersprivate sourcelib.quic.src.tls.message.codecaddLengthprivate sourcelib.quic.src.tls.message.codecwriteHeaderprivate sourcelib.quic.src.tls.message.codecwriteLengthprivate sourcelib.quic.src.tls.message.codecwriteVector16private sourcelib.quic.src.tls.message.codecwriteVector24private sourcelib.quic.src.tls.message.codecwriteVector8tls.messageencodeSingleCertificate
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/quic/src/tls/message/codec.zig:8

zig
pub const extension_count_max: u8 = 64;

Source: lib/quic/src/tls/message/codec.zig:144

zig
pub fn findExtension(    extensions: Extensions,    kind: ExtensionType,) DecodeError!?[]const u8 {    var iterator = extensions.iterator();    var found: ?[]const u8 = null;    for (0..extension_count_max + 1) |_| {        const extension = try iterator.next() orelse return found;        if (@backingInt(extension.kind) != @backingInt(kind)) continue;        if (found != null) return error.DuplicateExtension;        found = extension.data;    }    unreachable;}

Source: lib/quic/src/tls/message/root.zig

zig
const codec = @import("codec.zig");pub const profile = @import("profile.zig");pub const extension_count_max = codec.extension_count_max;pub const certificate_entries_max = codec.certificate_entries_max;pub const Handshake = codec.Handshake;pub const Extension = codec.Extension;pub const Extensions = codec.Extensions;pub const ExtensionIterator = codec.ExtensionIterator;pub const ClientHello = codec.ClientHello;pub const ServerHello = codec.ServerHello;pub const EncryptedExtensions = codec.EncryptedExtensions;pub const CertificateRequest = codec.CertificateRequest;pub const Certificate = codec.Certificate;pub const CertificateEntry = codec.CertificateEntry;pub const CertificateEntries = codec.CertificateEntries;pub const CertificateIterator = codec.CertificateIterator;pub const CertificateVerify = codec.CertificateVerify;pub const Finished = codec.Finished;pub const NewSessionTicket = codec.NewSessionTicket;pub const DecodeError = codec.DecodeError;pub const EncodeError = codec.EncodeError;pub const decode = codec.decode;pub const encode = codec.encode;pub const findExtension = codec.findExtension;pub const decodeClientHello = codec.decodeClientHello;pub const encodeClientHello = codec.encodeClientHello;pub const decodeServerHello = codec.decodeServerHello;pub const encodeServerHello = codec.encodeServerHello;pub const decodeEncryptedExtensions = codec.decodeEncryptedExtensions;pub const encodeEncryptedExtensions = codec.encodeEncryptedExtensions;pub const decodeCertificateRequest = codec.decodeCertificateRequest;pub const encodeCertificateRequest = codec.encodeCertificateRequest;pub const decodeCertificate = codec.decodeCertificate;pub const encodeCertificate = codec.encodeCertificate;pub const encodeSingleCertificate = codec.encodeSingleCertificate;pub const decodeCertificateVerify = codec.decodeCertificateVerify;pub const encodeCertificateVerify = codec.encodeCertificateVerify;pub const decodeFinished = codec.decodeFinished;pub const encodeFinished = codec.encodeFinished;pub const decodeNewSessionTicket = codec.decodeNewSessionTicket;

Source: lib/quic/src/tls/root.zig:37

zig
pub const message = @import("message/root.zig");

Audit

Definitions42
Public names42
Members37
Version26.7.0
Revisiondaab053ee433