Skip to content

Commit b13dd71

Browse files
committed
Add test vectors
1 parent e73b2aa commit b13dd71

1 file changed

Lines changed: 97 additions & 0 deletions

File tree

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// This source file is part of the SwiftCrypto open source project
4+
//
5+
// Copyright (c) 2026 Apple Inc. and the SwiftCrypto project authors
6+
// Licensed under Apache License v2.0
7+
//
8+
// See LICENSE.txt for license information
9+
// See CONTRIBUTORS.txt for the list of SwiftCrypto project authors
10+
//
11+
// SPDX-License-Identifier: Apache-2.0
12+
//
13+
//===----------------------------------------------------------------------===//
14+
15+
import Crypto
16+
import CryptoExtras
17+
import XCTest
18+
19+
final class SHA512256DigestTests: XCTestCase {
20+
func testHashFunction() throws {
21+
let data =
22+
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
23+
.data(using: .ascii)!
24+
25+
var hasher = SHA512256()
26+
hasher.update(data: data)
27+
let digest = hasher.finalize()
28+
29+
let expected = try Array(hexString: "3928e184fb8690f840da3988121d31be65cb9d3ef83ee6146feac861e19b563a")
30+
XCTAssertEqual(Array(digest), expected)
31+
XCTAssertEqual(Array(SHA512256.hash(data: data)), expected)
32+
33+
let (contiguousResult, discontiguousResult) = expected.asDataProtocols()
34+
XCTAssert(digest == contiguousResult)
35+
XCTAssert(digest == discontiguousResult)
36+
XCTAssertFalse(digest == DispatchData.empty)
37+
}
38+
39+
func testNullHash() throws {
40+
let digest = SHA512256.hash(data: Data())
41+
42+
let expected = try Array(hexString: "c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a")
43+
XCTAssertEqual(Array(digest), expected)
44+
}
45+
46+
func testABC() throws {
47+
let digest = SHA512256.hash(data: "abc".data(using: .ascii)!)
48+
49+
let expected = try Array(hexString: "53048e2681941ef99b2e29b76b4c7dabe4c2d0c634fc6d46e0e2f13107e7af23")
50+
XCTAssertEqual(Array(digest), expected)
51+
}
52+
53+
func testTwoBlockMessage() throws {
54+
let data = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopmopq".data(using: .ascii)!
55+
let digest = SHA512256.hash(data: data)
56+
57+
let expected = try Array(hexString: "35de8c8794b9ed4b463c257fe50e62b516e07976a2931f4f78f1cd69a456dccd")
58+
XCTAssertEqual(Array(digest), expected)
59+
}
60+
61+
func testSingleByte() throws {
62+
let digest = SHA512256.hash(data: Data([0x61]))
63+
64+
let expected = try Array(hexString: "455e518824bc0601f9fb858ff5c37d417d67c2f8e0df2babe4808858aea830f8")
65+
XCTAssertEqual(Array(digest), expected)
66+
}
67+
68+
func testRepeatedBytes() throws {
69+
let data = Data(repeating: 0x61, count: 1_000_000)
70+
let digest = SHA512256.hash(data: data)
71+
72+
let expected = try Array(hexString: "9a59a052930187a97038cae692f30708aa6491923ef5194394dc68d56c74fb21")
73+
XCTAssertEqual(Array(digest), expected)
74+
}
75+
76+
func testCopyOnWrite() {
77+
var hasher = SHA512256()
78+
hasher.update(data: [1, 2, 3, 4])
79+
80+
var copy = hasher
81+
hasher.update(data: [5, 6, 7, 8])
82+
let digest = hasher.finalize()
83+
84+
copy.update(data: [5, 6, 7, 8])
85+
let copyDigest = copy.finalize()
86+
87+
XCTAssertEqual(digest, copyDigest)
88+
}
89+
90+
func testBlockSize() {
91+
XCTAssertEqual(SHA512256.blockByteCount, 128)
92+
}
93+
94+
func testDigestByteCount() {
95+
XCTAssertEqual(SHA512256Digest.byteCount, 32)
96+
}
97+
}

0 commit comments

Comments
 (0)