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

91 lines
2.9 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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