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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
using System;
using System.IO;
using System.Linq;
using EduVpnCommon;
using NUnit.Framework;
namespace EduVpnCommonTests
{
[TestFixture(TestOf = typeof(Discovery)), Parallelizable]
public class VerifyTests
{
// Relative to e.g. EduVpnCommonTests/bin/Debug/net5.0
readonly string testDataDir_ = $"{TestContext.CurrentContext.TestDirectory}/../../../../../../test_data";
[OneTimeSetUp]
public void OneTimeSetUp() =>
Discovery.InsecureTestingSetExtraKey(File.ReadLines($"{testDataDir_}/public.key").Last());
[Test]
[TestCase("server_list.json.minisig", "server_list.json", "server_list.json")]
[TestCase("organization_list.json.minisig", "organization_list.json", "organization_list.json")]
public void TestValid(string sigFile, string jsonFile, string expectedFileName) =>
Discovery.Verify(
File.ReadAllBytes($"{testDataDir_}/{sigFile}"),
File.ReadAllBytes($"{testDataDir_}/{jsonFile}"),
expectedFileName,
DateTimeOffset.FromUnixTimeSeconds(10));
[Test]
[TestCase("server_list.json.minisig", "server_list.json", "server_list.json")]
public void TestValidSegment(string sigFile, string jsonFile, string expectedFileName)
{
var bytes = new byte[] { 1, 2, 3 }.Concat(File.ReadAllBytes($"{testDataDir_}/{jsonFile}"))
.Concat(new byte[] { 1, 2, 3 }).ToArray();
Discovery.Verify(
File.ReadAllBytes($"{testDataDir_}/{sigFile}"),
new(bytes, 3, bytes.Length - 3 - 3),
expectedFileName,
DateTimeOffset.UnixEpoch);
}
[Test]
[TestCase("random.txt", "server_list.json", "server_list.json")]
public void TestInvalidSignature(string sigFile, string jsonFile, string expectedFileName) =>
Assert.Throws<InvalidSignatureException>(
() => Discovery.Verify(
File.ReadAllBytes($"{testDataDir_}/{sigFile}"),
File.ReadAllBytes($"{testDataDir_}/{jsonFile}"),
expectedFileName,
DateTimeOffset.UnixEpoch));
[Test]
[TestCase("server_list.json.wrong_key.minisig", "server_list.json", "server_list.json")]
public void TestWrongKey(string sigFile, string jsonFile, string expectedFileName) =>
Assert.Throws<InvalidSignatureUnknownKeyException>(
() => Discovery.Verify(
File.ReadAllBytes($"{testDataDir_}/{sigFile}"),
File.ReadAllBytes($"{testDataDir_}/{jsonFile}"),
expectedFileName,
DateTimeOffset.UnixEpoch));
[Test]
[TestCase("server_list.json.minisig", "server_list.json", "server_list.json")]
public void TestOldSignature(string sigFile, string jsonFile, string expectedFileName) =>
Assert.Throws<SignatureTooOldException>(
() => Discovery.Verify(
File.ReadAllBytes($"{testDataDir_}/{sigFile}"),
File.ReadAllBytes($"{testDataDir_}/{jsonFile}"),
expectedFileName,
DateTimeOffset.FromUnixTimeSeconds(11)));
[Test]
[TestCase("other_list.json.minisig", "other_list.json", "other_list.json")]
public void TestUnknownExpectedFile(string sigFile, string jsonFile, string expectedFileName) =>
Assert.Throws<ArgumentException>(
() => Discovery.Verify(
File.ReadAllBytes($"{testDataDir_}/{sigFile}"),
File.ReadAllBytes($"{testDataDir_}/{jsonFile}"),
expectedFileName,
DateTimeOffset.UnixEpoch));
}
}
|