Skip to content

Commit 415098e

Browse files
committed
Add tests
1 parent 50aa038 commit 415098e

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

Tests/X509Tests/CertificateDERTests.swift

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import FoundationEssentials
1818
import Foundation
1919
#endif
2020
import XCTest
21+
import Testing
2122
import SwiftASN1
2223
@testable import X509
2324
import Crypto
@@ -761,3 +762,59 @@ final class CertificateDERTests: XCTestCase {
761762
XCTAssertNoThrow(try decoded.extensions.nameConstraints)
762763
}
763764
}
765+
766+
@Suite("CertificatePrivateKey DER-encoded tests")
767+
struct CertificatePrivateKeyDEREncodedTests {
768+
@Suite("Using ECDSA")
769+
struct ECDSA {
770+
@Test("P256")
771+
func testP256() throws {
772+
let key = P256.Signing.PrivateKey()
773+
let derBytes = Array(key.derRepresentation)
774+
let parsedKey = try Certificate.PrivateKey(derBytes: derBytes)
775+
try #require(parsedKey != nil)
776+
#expect(parsedKey.backing == .p256(key))
777+
}
778+
779+
@Test("P384")
780+
func testP384() throws {
781+
let key = P384.Signing.PrivateKey()
782+
let derBytes = Array(key.derRepresentation)
783+
let parsedKey = try Certificate.PrivateKey(derBytes: derBytes)
784+
try #require(parsedKey != nil)
785+
#expect(parsedKey.backing == .p384(key))
786+
}
787+
788+
@Test("P521")
789+
func testP521() throws {
790+
let key = P521.Signing.PrivateKey()
791+
let derBytes = Array(key.derRepresentation)
792+
let parsedKey = try Certificate.PrivateKey(derBytes: derBytes)
793+
try #require(parsedKey != nil)
794+
#expect(parsedKey.backing == .p521(key))
795+
}
796+
}
797+
798+
@Test("Using ED25519")
799+
func testED25519() throws {
800+
let key = Curve25519.Signing.PrivateKey()
801+
let derBytes = key.derRepresentation
802+
let parsedKey = try Certificate.PrivateKey(derBytes: derBytes)
803+
try #require(parsedKey != nil)
804+
#expect(parsedKey.backing == .ed25519(key))
805+
}
806+
807+
@Test("Using RSA")
808+
func testRSA() throws {
809+
// Unlike other algorithms, RSA's bytes representation is not in PKCS#8 format, so we have
810+
// to bridge it by first serialising the key as a PKCS#8 PEM document, and then getting
811+
// its DER bytes.
812+
let key = try _CryptoExtras._RSA.Signing.PrivateKey(keySize: .bits2048)
813+
let pkcs8 = key.pkcs8PEMRepresentation
814+
let pemDoc = try PEMDocument(pemString: pkcs8)
815+
let derBytes = pemDoc.derBytes
816+
let parsedKey = try Certificate.PrivateKey(derBytes: derBytes)
817+
try #require(parsedKey != nil)
818+
#expect(parsedKey.backing == .rsa(key))
819+
}
820+
}

0 commit comments

Comments
 (0)