@@ -4,23 +4,97 @@ import Testing
44@testable import Utils
55
66@Suite struct Ed25519Tests {
7- @Test func testEd25519Signature ( ) throws {
8- let ed25519 = try Ed25519 . SecretKey ( from: Data32 . random ( ) )
9- let publicKey = ed25519 . publicKey
7+ @Test func validateSignature ( ) throws {
8+ let secretKey = try Ed25519 . SecretKey ( from: Data32 . random ( ) )
9+ let publicKey = secretKey . publicKey
1010
1111 let message = Data ( " test " . utf8)
12- let signature = try ed25519. sign ( message: message)
12+ let signature = try secretKey. sign ( message: message)
13+
1314 #expect( publicKey. verify ( signature: signature, message: message) )
15+ }
16+
17+ @Test func rejectInvalidMessage( ) throws {
18+ let secretKey = try Ed25519 . SecretKey ( from: Data32 . random ( ) )
19+ let publicKey = secretKey. publicKey
1420
21+ let message = Data ( " test " . utf8)
22+ let signature = try secretKey. sign ( message: message)
1523 let invalidMessage = Data ( " tests " . utf8)
16- #expect(
17- !publicKey. verify ( signature: signature, message: invalidMessage)
18- )
19-
20- var invalidSignature = signature. data
21- invalidSignature. replaceSubrange ( 0 ... 1 , with: [ 10 , 12 ] )
22- #expect(
23- !publicKey. verify ( signature: Data64 ( invalidSignature) !, message: message)
24- )
24+
25+ #expect( !publicKey. verify ( signature: signature, message: invalidMessage) )
26+ }
27+
28+ @Test func rejectTamperedSignature( ) throws {
29+ let secretKey = try Ed25519 . SecretKey ( from: Data32 . random ( ) )
30+ let publicKey = secretKey. publicKey
31+
32+ let message = Data ( " test " . utf8)
33+ let signature = try secretKey. sign ( message: message)
34+
35+ var tamperedSignature = signature. data
36+ tamperedSignature. replaceSubrange ( 0 ... 1 , with: [ 10 , 12 ] )
37+
38+ #expect( !publicKey. verify ( signature: Data64 ( tamperedSignature) !, message: message) )
39+ }
40+
41+ @Test func initializeFromData( ) throws {
42+ let randomData = Data32 . random ( )
43+ let publicKey = try Ed25519 . PublicKey ( from: randomData)
44+ #expect( publicKey. data == randomData)
45+ }
46+
47+ @Test func encodeAndDecode( ) throws {
48+ let originalData = Data32 . random ( )
49+ let originalKey = try Ed25519 . PublicKey ( from: originalData)
50+
51+ let encoder = JSONEncoder ( )
52+ let encodedData = try encoder. encode ( originalKey)
53+
54+ let decoder = JSONDecoder ( )
55+ let decodedKey = try decoder. decode ( Ed25519 . PublicKey. self, from: encodedData)
56+
57+ #expect( decodedKey == originalKey)
58+ }
59+
60+ @Test func hashAndEquality( ) throws {
61+ let data1 = Data32 . random ( )
62+ let data2 = Data32 . random ( )
63+
64+ let publicKey1 = try Ed25519 . PublicKey ( from: data1)
65+ let publicKey2 = try Ed25519 . PublicKey ( from: data1)
66+ let publicKey3 = try Ed25519 . PublicKey ( from: data2)
67+
68+ var hashSet : Set < Ed25519 . PublicKey > = [ ]
69+ hashSet. insert ( publicKey1)
70+
71+ #expect( publicKey1 == publicKey2)
72+ #expect( publicKey1 != publicKey3)
73+ #expect( hashSet. contains ( publicKey2) )
74+ #expect( !hashSet. contains ( publicKey3) )
75+ }
76+
77+ @Test func descriptionCheck( ) throws {
78+ let randomData = Data32 . random ( )
79+ let publicKey = try Ed25519 . PublicKey ( from: randomData)
80+
81+ #expect( publicKey. description == randomData. description)
82+ }
83+
84+ @Test func signatureVerification( ) throws {
85+ let secretKey = try Ed25519 . SecretKey ( from: Data32 . random ( ) )
86+ let publicKey = secretKey. publicKey
87+
88+ let message = Data ( " test message " . utf8)
89+ let signature = try secretKey. sign ( message: message)
90+
91+ #expect( publicKey. verify ( signature: signature, message: message) )
92+
93+ let invalidMessage = Data ( " tampered message " . utf8)
94+ #expect( !publicKey. verify ( signature: signature, message: invalidMessage) )
95+
96+ var tamperedSignature = signature. data
97+ tamperedSignature [ 0 ] ^= 0xFF
98+ #expect( !publicKey. verify ( signature: Data64 ( tamperedSignature) !, message: message) )
2599 }
26100}
0 commit comments