Zig 0.17.0-dev (Split by item) This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig standard library.
std › crypto › tls › hmacExpandLabel Public Function hmacExpandLabel Doc Source Public Function std.crypto.tls.hmacExpandLabel
pub fn hmacExpandLabel (
comptime Hmac : type ,
secret : []const u8 ,
label_then_seed : []const []const u8 ,
comptime len : usize ,
) [len ]u8 Params Hmac : type secret : []const u8 label_then_seed : []const []const u8 len : usize File crypto/tls.zig: 535
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556 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 ].*;
}