-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathshadowsocks.zig
More file actions
55 lines (43 loc) · 1.99 KB
/
shadowsocks.zig
File metadata and controls
55 lines (43 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
pub const crypto = @import("shadowsocks/crypto.zig");
pub const headers = @import("shadowsocks/headers.zig");
pub const server = @import("shadowsocks/server.zig");
pub const udp_server = @import("shadowsocks/udp_server.zig");
pub const client = @import("shadowsocks/client.zig");
const std = @import("std");
const network = @import("network");
test {
_ = @import("shadowsocks/tests.zig");
_ = @import("shadowsocks/salts.zig");
_ = @import("shadowsocks/udp_server.zig");
}
test "FixedLengthRequestHeader - derive, encode, encrypt, decrypt, decode" {
inline for (crypto.Methods) |TCrypto| {
var salt: [TCrypto.salt_length]u8 = try TCrypto.generateRandomSalt();
var key: [TCrypto.key_length]u8 = undefined;
try std.os.getrandom(&key);
var session_subkey = TCrypto.deriveSessionSubkeyWithSalt(key, salt);
var encode_encryptor: TCrypto.Encryptor = .{
.key = session_subkey,
};
var decode_encryptor: TCrypto.Encryptor = .{
.key = session_subkey,
};
const header = headers.FixedLengthRequestHeader{
.type = 0,
.timestamp = 123,
.length = 33,
};
var encoded: [headers.FixedLengthRequestHeader.size]u8 = undefined;
_ = try header.encode(&encoded);
var encrypted: [encoded.len]u8 = undefined;
var tag: [TCrypto.tag_length]u8 = undefined;
encode_encryptor.encrypt(&encoded, &encrypted, &tag);
var decrypted: [encrypted.len]u8 = undefined;
try decode_encryptor.decrypt(&decrypted, &encrypted, tag);
const decoded = try headers.FixedLengthRequestHeader.decode(&decrypted);
try std.testing.expectEqual(@as(usize, headers.FixedLengthRequestHeader.size), decoded.bytes_read);
try std.testing.expectEqual(header.length, decoded.result.length);
try std.testing.expectEqual(header.timestamp, decoded.result.timestamp);
try std.testing.expectEqual(header.type, decoded.result.type);
}
}