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

139 lines
4.3 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.

//
// 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,
]
}