139 lines
4.3 KiB
Swift
139 lines
4.3 KiB
Swift
//
|
||
// MTConformanceVectors.swift
|
||
// MontanaTests
|
||
//
|
||
// Port of `mt-conformance` crate vectors для cross-implementation
|
||
// byte-exact verification iOS ↔ Rust reference. См. Rust crate
|
||
// `Протокол/Код/crates/mt-conformance/src/vectors.rs` — single source.
|
||
//
|
||
// Любое изменение этих vectors должно sync-нуться с Rust crate.
|
||
//
|
||
|
||
import Foundation
|
||
|
||
public struct MTVectorEnvelope {
|
||
public let name: String
|
||
public let msgType: UInt8
|
||
public let msgVersion: UInt8
|
||
public let requestId: UInt64
|
||
public let payload: Data
|
||
public let expectedBytes: Data
|
||
}
|
||
|
||
public enum MTConformanceVectors {
|
||
|
||
// MARK: - Envelope vectors (group A)
|
||
|
||
public static let envelopeA1Ping = MTVectorEnvelope(
|
||
name: "A1: Ping empty payload",
|
||
msgType: 0xF0,
|
||
msgVersion: 0x01,
|
||
requestId: 0,
|
||
payload: Data(),
|
||
expectedBytes: Data([
|
||
0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||
])
|
||
)
|
||
|
||
public static let envelopeA2Transfer1024: MTVectorEnvelope = {
|
||
var expected = Data([
|
||
0x01, 0x01, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||
0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
|
||
])
|
||
expected.append(Data(repeating: 0xAB, count: 1024))
|
||
return MTVectorEnvelope(
|
||
name: "A2: Transfer 1024B payload, request_id=42",
|
||
msgType: 0x01,
|
||
msgVersion: 0x01,
|
||
requestId: 42,
|
||
payload: Data(repeating: 0xAB, count: 1024),
|
||
expectedBytes: expected
|
||
)
|
||
}()
|
||
|
||
public static let envelopeA3FastSyncMaxRequestId = MTVectorEnvelope(
|
||
name: "A3: FastSyncResponse header-only, request_id=u64::MAX",
|
||
msgType: 0x41,
|
||
msgVersion: 0x01,
|
||
requestId: UInt64.max,
|
||
payload: Data(),
|
||
expectedBytes: Data([
|
||
0x41, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||
])
|
||
)
|
||
|
||
public static let allEnvelopeVectors: [MTVectorEnvelope] = [
|
||
envelopeA1Ping,
|
||
envelopeA2Transfer1024,
|
||
envelopeA3FastSyncMaxRequestId,
|
||
]
|
||
|
||
// MARK: - IBT seed vectors (group B)
|
||
|
||
public struct MTVectorIbtSeed {
|
||
public let name: String
|
||
public let seedLabel: String
|
||
public let seed: Data
|
||
public let pkSha256: Data
|
||
public let proofSha256: Data
|
||
}
|
||
|
||
public static let ibtB1OnlineProof = MTVectorIbtSeed(
|
||
name: "B1: IBT online proof, server [0x42;32], window=1000",
|
||
seedLabel: "vector-B1",
|
||
seed: Data([
|
||
0xf6, 0x40, 0x57, 0x69, 0xec, 0xbf, 0x3d, 0x1f,
|
||
0x5b, 0x65, 0x93, 0xc9, 0x71, 0xf1, 0x41, 0x09,
|
||
0xef, 0x9d, 0x57, 0x62, 0x8b, 0xfc, 0x46, 0xb8,
|
||
0xf4, 0xd5, 0xc0, 0xb6, 0x6d, 0x0f, 0xf1, 0xb9,
|
||
]),
|
||
pkSha256: Data([
|
||
0xee, 0x74, 0x16, 0x1e, 0xee, 0xdc, 0xf4, 0x61,
|
||
0x89, 0x73, 0x96, 0xbb, 0xe6, 0x55, 0xbc, 0x9c,
|
||
0x35, 0x39, 0xf6, 0x15, 0xa3, 0xed, 0xce, 0xf9,
|
||
0xf8, 0x7a, 0x9e, 0x58, 0x82, 0xb3, 0x00, 0xc2,
|
||
]),
|
||
proofSha256: Data([
|
||
0xac, 0x26, 0xa9, 0xca, 0x84, 0xa9, 0xae, 0xba,
|
||
0x3a, 0xaf, 0x2f, 0x3f, 0xc9, 0xba, 0x2f, 0x0b,
|
||
0xe9, 0x0c, 0x6d, 0x98, 0xf6, 0x55, 0xad, 0xdb,
|
||
0x0f, 0x87, 0x5b, 0xca, 0xad, 0xff, 0xef, 0xda,
|
||
])
|
||
)
|
||
|
||
// MARK: - Bootstrap PoW vectors (group F)
|
||
|
||
public struct MTVectorPow {
|
||
public let name: String
|
||
public let difficulty: UInt32
|
||
public let target: Data
|
||
}
|
||
|
||
public static let powF1Difficulty65536: MTVectorPow = {
|
||
var target = Data(repeating: 0, count: 32)
|
||
target[1] = 0x01
|
||
return MTVectorPow(
|
||
name: "F1: Bootstrap PoW target derivation, difficulty = 2^16",
|
||
difficulty: 65_536,
|
||
target: target
|
||
)
|
||
}()
|
||
|
||
public static let powF2Difficulty1024: MTVectorPow = {
|
||
var target = Data(repeating: 0, count: 32)
|
||
target[1] = 0x40
|
||
return MTVectorPow(
|
||
name: "F2: Bootstrap PoW target derivation, difficulty = 2^10",
|
||
difficulty: 1024,
|
||
target: target
|
||
)
|
||
}()
|
||
|
||
public static let allPowVectors: [MTVectorPow] = [
|
||
powF1Difficulty65536,
|
||
powF2Difficulty1024,
|
||
]
|
||
}
|