-
Notifications
You must be signed in to change notification settings - Fork 4.6k
/
Sha384Tests.cs
138 lines (118 loc) · 5.11 KB
/
Sha384Tests.cs
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Xunit;
namespace System.Security.Cryptography.Tests
{
public class Sha384Tests : HashAlgorithmTestDriver
{
protected override HashAlgorithm Create()
{
return SHA384.Create();
}
protected override bool TryHashData(ReadOnlySpan<byte> source, Span<byte> destination, out int bytesWritten)
{
return SHA384.TryHashData(source, destination, out bytesWritten);
}
protected override byte[] HashData(byte[] source) => SHA384.HashData(source);
protected override byte[] HashData(ReadOnlySpan<byte> source) => SHA384.HashData(source);
protected override int HashData(ReadOnlySpan<byte> source, Span<byte> destination) =>
SHA384.HashData(source, destination);
protected override int HashData(Stream source, Span<byte> destination) =>
SHA384.HashData(source, destination);
protected override byte[] HashData(Stream source) => SHA384.HashData(source);
protected override ValueTask<int> HashDataAsync(Stream source, Memory<byte> destination, CancellationToken cancellationToken) =>
SHA384.HashDataAsync(source, destination, cancellationToken);
protected override ValueTask<byte[]> HashDataAsync(Stream source, CancellationToken cancellationToken) =>
SHA384.HashDataAsync(source, cancellationToken);
[Fact]
public void Sha384_Empty()
{
Verify(
Array.Empty<byte>(),
"38B060A751AC96384CD9327EB1B1E36A21FDB71114BE07434C0CC7BF63F6E1DA274EDEBFE76F65FBD51AD2F14898B95B");
}
[Fact]
public void Sha384_Empty_Stream()
{
VerifyRepeating(
"",
0,
"38B060A751AC96384CD9327EB1B1E36A21FDB71114BE07434C0CC7BF63F6E1DA274EDEBFE76F65FBD51AD2F14898B95B");
}
[Fact]
public async Task Sha384_Empty_Stream_Async()
{
await VerifyRepeatingAsync(
"",
0,
"38B060A751AC96384CD9327EB1B1E36A21FDB71114BE07434C0CC7BF63F6E1DA274EDEBFE76F65FBD51AD2F14898B95B");
}
[Fact]
public void Sha384_VerifyLargeStream_MultipleOf4096()
{
// Verfied with:
// for _ in {1..1024}; do echo -n "0102030405060708"; done | openssl dgst -sha384
VerifyRepeating(
"0102030405060708",
1024,
"d9deec18b8ec0d31270eaeaaf3bcb1de55f1d81482a55d2c023bad873175f1694d8c28e8138d9147dc180e679cd79c58");
}
[Fact]
public void Sha384_VerifyLargeStream_NotMultipleOf4096()
{
// Verfied with:
// for _ in {1..1025}; do echo -n "0102030405060708"; done | openssl dgst -sha384
VerifyRepeating(
"0102030405060708",
1025,
"35cf18493364379093c7def8477330f817f9045d2e311d721730b24d98c9d9e9761c7f27821742e0c236509627aea7fa");
}
[Fact]
public async Task Sha384_VerifyLargeStream_NotMultipleOf4096_Async()
{
// Verfied with:
// for _ in {1..1025}; do echo -n "0102030405060708"; done | openssl dgst -sha384
await VerifyRepeatingAsync(
"0102030405060708",
1025,
"35cf18493364379093c7def8477330f817f9045d2e311d721730b24d98c9d9e9761c7f27821742e0c236509627aea7fa");
}
[Fact]
public async Task Sha384_VerifyLargeStream_MultipleOf4096_Async()
{
// Verfied with:
// for _ in {1..1024}; do echo -n "0102030405060708"; done | openssl dgst -sha384
await VerifyRepeatingAsync(
"0102030405060708",
1024,
"d9deec18b8ec0d31270eaeaaf3bcb1de55f1d81482a55d2c023bad873175f1694d8c28e8138d9147dc180e679cd79c58");
}
// These test cases are from http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA_All.pdf
[Fact]
public void Sha384_NistShaAll_1()
{
Verify(
"abc",
"CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7");
}
[Fact]
public void Sha384_Fips180_MultiBlock()
{
VerifyMultiBlock(
"a",
"bc",
"CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7",
"38B060A751AC96384CD9327EB1B1E36A21FDB71114BE07434C0CC7BF63F6E1DA274EDEBFE76F65FBD51AD2F14898B95B");
}
[Fact]
public void Sha384_NistShaAll_2()
{
Verify(
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
"09330C33F71147E83D192FC782CD1B4753111B173B3B05D22FA08086E3B0F712FCC7C71A557E2DB966C3E9FA91746039");
}
}
}