// // MTConformanceTests.swift // MontanaTests // // XCTest harness для cross-implementation conformance verification. // Caller responsibility: implement encodeEnvelope / Bootstrap PoW target // derivation в Swift и assert byte-exact equality с Rust reference. // import XCTest @testable import Montana final class MTConformanceTests: XCTestCase { // MARK: - Envelope vectors func testEnvelopeA1Ping() { let v = MTConformanceVectors.envelopeA1Ping let actual = MontanaEnvelope.encode( msgType: v.msgType, requestId: v.requestId, payload: v.payload ) XCTAssertEqual(actual, v.expectedBytes, v.name) } func testEnvelopeA2Transfer1024() { let v = MTConformanceVectors.envelopeA2Transfer1024 let actual = MontanaEnvelope.encode( msgType: v.msgType, requestId: v.requestId, payload: v.payload ) XCTAssertEqual(actual, v.expectedBytes, v.name) } func testEnvelopeA3FastSyncMaxRequestId() { let v = MTConformanceVectors.envelopeA3FastSyncMaxRequestId let actual = MontanaEnvelope.encode( msgType: v.msgType, requestId: v.requestId, payload: v.payload ) XCTAssertEqual(actual, v.expectedBytes, v.name) } // MARK: - PoW vectors func testPowF1Target() { let v = MTConformanceVectors.powF1Difficulty65536 let actual = BootstrapPow.target(difficulty: v.difficulty) XCTAssertEqual(actual, v.target, v.name) } func testPowF2Target() { let v = MTConformanceVectors.powF2Difficulty1024 let actual = BootstrapPow.target(difficulty: v.difficulty) XCTAssertEqual(actual, v.target, v.name) } // MARK: - IBT proof vectors func testIbtB1SeedDerivation() { let v = MTConformanceVectors.ibtB1OnlineProof let derived = MontanaSeed.detSeed(label: v.seedLabel) XCTAssertEqual(derived, v.seed, "B1 deterministic seed must match Rust reference") } func testIbtB1KeypairDerivation() throws { let v = MTConformanceVectors.ibtB1OnlineProof let kp = try MLDSA65.deriveKeypair(seed: v.seed) let pkHash = SHA256.hash(data: kp.publicKey) XCTAssertEqual(Data(pkHash), v.pkSha256, "B1 pk SHA-256 must match Rust reference") } func testIbtB1ProofSignature() throws { let v = MTConformanceVectors.ibtB1OnlineProof let kp = try MLDSA65.deriveKeypair(seed: v.seed) let serverNodeId = Data(repeating: 0x42, count: 32) let proof = try IBTProof.online( secretKey: kp.privateKey, serverNodeId: serverNodeId, windowIndex: 1000 ) let proofHash = SHA256.hash(data: proof) XCTAssertEqual(Data(proofHash), v.proofSha256, "B1 proof SHA-256 must match Rust reference") } } import CryptoKit