80 lines
3.2 KiB
PowerShell
80 lines
3.2 KiB
PowerShell
$ErrorActionPreference = 'Stop'
|
|
|
|
function ConvertFrom-Utf8Base64 {
|
|
param([string]$Value)
|
|
return [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($Value))
|
|
}
|
|
|
|
$recordPath = ConvertFrom-Utf8Base64 'ZG9jcy9kZXNpZ24vQTAxX+WQr+WKqOeZu+W9leW8leWvvF/orr7orqHorrDlvZUubWQ='
|
|
$effect = Join-Path (Join-Path (Split-Path -Parent $recordPath) 'screens') (ConvertFrom-Utf8Base64 'QTAxLeWQr+WKqOeZu+W9leW8leWvvC3moIXmoLzpqozmlLYtNDEyeDkxNS5wbmc=')
|
|
$record = Get-Content -LiteralPath $recordPath -Raw -Encoding utf8
|
|
$rules = @(
|
|
(ConvertFrom-Utf8Base64 '55m75b2V'),
|
|
(ConvertFrom-Utf8Base64 '5b6u5L+h55m75b2V'),
|
|
(ConvertFrom-Utf8Base64 '6L+Y5rKh5pyJ6LSm5Y+377yf5rOo5YaM6LSm5Y+3'),
|
|
(ConvertFrom-Utf8Base64 '5Y+M5qCH562+'),
|
|
(ConvertFrom-Utf8Base64 '5Yid5aeL5pyq5Yu+6YCJ')
|
|
)
|
|
|
|
foreach ($rule in $rules) {
|
|
if ($record -notmatch [regex]::Escape($rule)) {
|
|
throw "Missing A01 rule: $rule"
|
|
}
|
|
}
|
|
|
|
$layoutRules = @(
|
|
(ConvertFrom-Utf8Base64 '6aG16Z2i5qC55a655Zmo5a695bqm5b+F6aG75Li6IDEwMCU='),
|
|
(ConvertFrom-Utf8Base64 'NDEyIMOXIDkxNSDov5DooYzml7bmoKHlh4booag='),
|
|
(ConvertFrom-Utf8Base64 '5pyx56CC5a6256Wg5aS05Zu+IHwg6auYIDEzOXB4IHwg6auYIDI1M3JweA=='),
|
|
(ConvertFrom-Utf8Base64 'bWFyZ2luOiA5NXJweCAxMTBycHggMA=='),
|
|
(ConvertFrom-Utf8Base64 '6auYIDExOHJweA=='),
|
|
(ConvertFrom-Utf8Base64 'bWFyZ2luLXRvcDogNTFycHg='),
|
|
(ConvertFrom-Utf8Base64 '5peg5bem5Y+z55+t57q/'),
|
|
(ConvertFrom-Utf8Base64 'bWFyZ2luLXRvcDogOThycHg='),
|
|
(ConvertFrom-Utf8Base64 'bWFyZ2luLXRvcDogMTQxcnB4'),
|
|
(ConvertFrom-Utf8Base64 'ZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20p'),
|
|
(ConvertFrom-Utf8Base64 '5b2T5YmN6L+Q6KGM5pe26KeG6KeJ5Z+65YeG')
|
|
)
|
|
|
|
foreach ($rule in $layoutRules) {
|
|
if ($record -notmatch [regex]::Escape($rule)) {
|
|
throw "Missing A01 layout rule: $rule"
|
|
}
|
|
}
|
|
|
|
$forbiddenLayoutRule = ConvertFrom-Utf8Base64 '6L+Q6KGM5pe26KeG6KeJ5rqQ'
|
|
if ($record -match [regex]::Escape($forbiddenLayoutRule)) {
|
|
throw "Whole-image A01 layout rule remains: $forbiddenLayoutRule"
|
|
}
|
|
|
|
$currentStructure = [regex]::Match($record, '(?s)## 2\..*?(?=## 3\.)').Value
|
|
$currentStructureRule = ConvertFrom-Utf8Base64 '5Lik5Liq5aSn5oyJ6ZKu5ZKM5LiA5Liq5paH5a2X5YWl5Y+j'
|
|
if ($currentStructure -notmatch [regex]::Escape($currentStructureRule)) {
|
|
throw "Missing current A01 structure rule: $currentStructureRule"
|
|
}
|
|
|
|
if (-not (Test-Path -LiteralPath $effect)) {
|
|
throw "Missing archived A01 effect: $effect"
|
|
}
|
|
|
|
$screenDirectory = Split-Path -Parent $effect
|
|
$staticEffects = @(
|
|
(ConvertFrom-Utf8Base64 'QTAxLeWQr+WKqOeZu+W9leW8leWvvC3moIXmoLzpqozmlLYtMzIweDU2OC5wbmc='),
|
|
(ConvertFrom-Utf8Base64 'QTAxLeWQr+WKqOeZu+W9leW8leWvvC3moIXmoLzpqozmlLYtMzYweDY0MC5wbmc='),
|
|
(ConvertFrom-Utf8Base64 'QTAxLeWQr+WKqOeZu+W9leW8leWvvC3moIXmoLzpqozmlLYtMzYweDgwMC5wbmc='),
|
|
(ConvertFrom-Utf8Base64 'QTAxLeWQr+WKqOeZu+W9leW8leWvvC3moIXmoLzpqozmlLYtNDEyeDkxNS5wbmc=')
|
|
)
|
|
|
|
foreach ($staticEffect in $staticEffects) {
|
|
if (-not (Test-Path -LiteralPath (Join-Path $screenDirectory $staticEffect))) {
|
|
throw "Missing static A01 evidence: $staticEffect"
|
|
}
|
|
}
|
|
|
|
$staticEvidenceRule = ConvertFrom-Utf8Base64 '6Z2Z5oCB6K6+6K6h6aqM5pS25bey6KaG55uW'
|
|
if ($record -notmatch [regex]::Escape($staticEvidenceRule)) {
|
|
throw "Missing static A01 evidence rule: $staticEvidenceRule"
|
|
}
|
|
|
|
Write-Output 'A01-DESIGN-RECORD-AUDIT PASS'
|