montana/iOS/Apps/Montana/MontanaTests/MTConformanceTests.swift

91 lines
2.9 KiB
Swift
Raw Permalink Normal View History

//
// 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