Function hmacExpandLabel [src]

Prototype

pub fn hmacExpandLabel( comptime Hmac: type, secret: []const u8, label_then_seed: []const []const u8, comptime len: usize, ) [len]u8

Parameters

Hmac: typesecret: []const u8label_then_seed: []const []const u8len: usize

Source

pub fn hmacExpandLabel( comptime Hmac: type, secret: []const u8, label_then_seed: []const []const u8, comptime len: usize, ) [len]u8 { const initial_hmac: Hmac = .init(secret); var a: [Hmac.mac_length]u8 = undefined; var result: [std.mem.alignForwardAnyAlign(usize, len, Hmac.mac_length)]u8 = undefined; var index: usize = 0; while (index < result.len) : (index += Hmac.mac_length) { var a_hmac = initial_hmac; if (index > 0) a_hmac.update(&a) else for (label_then_seed) |part| a_hmac.update(part); a_hmac.final(&a); var result_hmac = initial_hmac; result_hmac.update(&a); for (label_then_seed) |part| result_hmac.update(part); result_hmac.final(result[index..][0..Hmac.mac_length]); } return result[0..len].*; }