srctree

Gregory Mullen parent cc008969 1aa348c3
some really wild mess that will likely never work ever :(

src/cipher.zig added: 33, removed: 26, total 7
@@ -190,10 +190,10 @@ pub const EllipticCurve = struct {
Sha256.create(&second, &first, &material.master);
var third: [32]u8 = undefined;
Sha256.create(&third, &second, &material.master);
var forth: [32]u8 = undefined;
Sha256.create(&forth, &third, &material.master);
var fifth: [32]u8 = undefined;
Sha256.create(&fifth, &forth, &material.master);
//var forth: [32]u8 = undefined;
//Sha256.create(&forth, &third, &material.master);
//var fifth: [32]u8 = undefined;
//Sha256.create(&fifth, &forth, &material.master);
 
var p_first: [32]u8 = undefined;
Sha256.create(&p_first, first ++ key_seed, &material.master);
@@ -201,19 +201,21 @@ pub const EllipticCurve = struct {
Sha256.create(&p_second, second ++ key_seed, &material.master);
var p_third: [32]u8 = undefined;
Sha256.create(&p_third, third ++ key_seed, &material.master);
var p_forth: [32]u8 = undefined;
Sha256.create(&p_forth, forth ++ key_seed, &material.master);
var p_fifth: [32]u8 = undefined;
Sha256.create(&p_fifth, fifth ++ key_seed, &material.master);
const final = p_first ++ p_second ++ p_third ++ p_forth ++ p_fifth;
//var p_forth: [32]u8 = undefined;
//Sha256.create(&p_forth, forth ++ key_seed, &material.master);
//var p_fifth: [32]u8 = undefined;
//Sha256.create(&p_fifth, fifth ++ key_seed, &material.master);
//const final = p_first ++ p_second ++ p_third ++ p_forth ++ p_fifth;
const final = p_first ++ p_second ++ p_third;
 
material.cli_mac = final[0..][0..32].*;
material.cli_mac = final[32..][0..32].*;
material.cli_key = final[64..][0..32].*;
material.srv_key = final[96..][0..32].*;
material.srv_iv = final[128..][0..12].*;
material.srv_iv = final[140..][0..12].*;
//material.cli_mac = final[0..][0..32].*;
//material.cli_mac = final[32..][0..32].*;
material.cli_key = final[0..][0..32].*;
material.srv_key = final[32..][0..32].*;
material.cli_iv = final[64..][0..12].*;
material.srv_iv = final[72..][0..12].*;
}
print("material {}\n", .{material});
return material;
}
 
 
src/handshake.zig added: 33, removed: 26, total 7
@@ -148,7 +148,7 @@ pub const Finished = struct {
defer ctx.handshake_record.deinit();
 
try w.writeAll(&verify);
return 0x40;
return 0x20;
}
};
 
 
src/root.zig added: 33, removed: 26, total 7
@@ -68,22 +68,27 @@ const TLSRecord = struct {
 
pub fn encrypt(record: TLSRecord, buffer: []u8, ctx: *ConnCtx) !usize {
var clear_buffer: [0x1000]u8 = undefined;
const empty: [0]u8 = undefined;
var iv: [12]u8 = buffer[5..][0..12].*;
for (&iv, ctx.cipher.suite.ecc.material.cli_iv, asBytes(&ctx.cipher.sequence)[4..]) |*dst, src, seq|
dst.* = src ^ seq;
const encrypted_body = buffer[5 + 12 ..];
const len = try record.packFragment(&clear_buffer, ctx);
 
const empty: [0]u8 = undefined;
print("material iv {any}\n", .{ctx.cipher.suite.ecc.material.cli_iv});
//for (buffer[5..][0..12], ctx.cipher.suite.ecc.material.cli_iv, asBytes(&ctx.cipher.sequence)[4..]) |*dst, iv, seq|
// dst.* = iv ^ seq;
const encrypted_body = buffer[5..];
 
std.crypto.aead.chacha_poly.ChaCha20Poly1305.encrypt(
encrypted_body[0..len],
encrypted_body[len..][0..16],
clear_buffer[0..len],
&empty,
iv,
ctx.cipher.suite.ecc.material.cli_iv,
ctx.cipher.suite.ecc.material.cli_key,
);
return try record.packHeader(buffer, len + 16);
print("biv {any}\n", .{buffer[5..][0..12]});
print("encrypted {any}\n", .{encrypted_body[0..len]});
print("tag {any}\n", .{encrypted_body[len .. len + 16]});
 
return try record.packHeader(buffer, len);
}
 
pub fn unpackFragment(buffer: []const u8, sess: *ConnCtx) !TLSRecord {