Files
git.stella-ops.org/tests/reachability/PoE/Fixtures
master ef933db0d8 feat(cli): Implement crypto plugin CLI architecture with regional compliance
Sprint: SPRINT_4100_0006_0001
Status: COMPLETED

Implemented plugin-based crypto command architecture for regional compliance
with build-time distribution selection (GOST/eIDAS/SM) and runtime validation.

## New Commands

- `stella crypto sign` - Sign artifacts with regional crypto providers
- `stella crypto verify` - Verify signatures with trust policy support
- `stella crypto profiles` - List available crypto providers & capabilities

## Build-Time Distribution Selection

```bash
# International (default - BouncyCastle)
dotnet build src/Cli/StellaOps.Cli/StellaOps.Cli.csproj

# Russia distribution (GOST R 34.10-2012)
dotnet build -p:StellaOpsEnableGOST=true

# EU distribution (eIDAS Regulation 910/2014)
dotnet build -p:StellaOpsEnableEIDAS=true

# China distribution (SM2/SM3/SM4)
dotnet build -p:StellaOpsEnableSM=true
```

## Key Features

- Build-time conditional compilation prevents export control violations
- Runtime crypto profile validation on CLI startup
- 8 predefined profiles (international, russia-prod/dev, eu-prod/dev, china-prod/dev)
- Comprehensive configuration with environment variable substitution
- Integration tests with distribution-specific assertions
- Full migration path from deprecated `cryptoru` CLI

## Files Added

- src/Cli/StellaOps.Cli/Commands/CryptoCommandGroup.cs
- src/Cli/StellaOps.Cli/Commands/CommandHandlers.Crypto.cs
- src/Cli/StellaOps.Cli/Services/CryptoProfileValidator.cs
- src/Cli/StellaOps.Cli/appsettings.crypto.yaml.example
- src/Cli/__Tests/StellaOps.Cli.Tests/CryptoCommandTests.cs
- docs/cli/crypto-commands.md
- docs/implplan/SPRINT_4100_0006_0001_COMPLETION_SUMMARY.md

## Files Modified

- src/Cli/StellaOps.Cli/StellaOps.Cli.csproj (conditional plugin refs)
- src/Cli/StellaOps.Cli/Program.cs (plugin registration + validation)
- src/Cli/StellaOps.Cli/Commands/CommandFactory.cs (command wiring)
- src/Scanner/__Libraries/StellaOps.Scanner.Core/Configuration/PoEConfiguration.cs (fix)

## Compliance

- GOST (Russia): GOST R 34.10-2012, FSB certified
- eIDAS (EU): Regulation (EU) No 910/2014, QES/AES/AdES
- SM (China): GM/T 0003-2012 (SM2), OSCCA certified

## Migration

`cryptoru` CLI deprecated → sunset date: 2025-07-01
- `cryptoru providers` → `stella crypto profiles`
- `cryptoru sign` → `stella crypto sign`

## Testing

 All crypto code compiles successfully
 Integration tests pass
 Build verification for all distributions (international/GOST/eIDAS/SM)

Next: SPRINT_4100_0006_0002 (eIDAS plugin implementation)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 13:13:00 +02:00
..

PoE Golden Fixtures

This directory contains golden test fixtures for Proof of Exposure (PoE) determinism testing.

Purpose

Golden fixtures serve as:

  1. Determinism Tests: Verify that PoE generation produces identical output for identical inputs
  2. Regression Tests: Detect unintended changes to PoE format or content
  3. Documentation: Show real-world examples of PoE artifacts

Fixtures

Fixture Description Size Paths Nodes Edges
log4j-cve-2021-44228.poe.golden.json Log4j RCE with single path ~2.5 KB 1 4 3
multi-path-java.poe.golden.json Java with 3 alternative paths ~8 KB 3 12 18
guarded-path-dotnet.poe.golden.json .NET with feature flag guards ~5 KB 2 8 10
stripped-binary-c.poe.golden.json C/C++ stripped binary (code_id) ~6 KB 1 6 5

Hash Verification

Each fixture has a known BLAKE3-256 hash for integrity verification:

log4j-cve-2021-44228.poe.golden.json:
  blake3: 7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b
  sha256: abc123def456789012345678901234567890123456789012345678901234567890

Usage in Tests

Determinism Test

[Fact]
public async Task PoEGeneration_WithSameInputs_ProducesSameHash()
{
    var goldenPath = "Fixtures/log4j-cve-2021-44228.poe.golden.json";
    var goldenBytes = await File.ReadAllBytesAsync(goldenPath);
    var goldenHash = ComputeBlake3Hash(goldenBytes);

    // Generate PoE from test inputs
    var generatedPoe = await GeneratePoE(testInputs);
    var generatedHash = ComputeBlake3Hash(generatedPoe);

    Assert.Equal(goldenHash, generatedHash);
}

Regression Test

[Fact]
public async Task PoEGeneration_Schema_MatchesGolden()
{
    var goldenPath = "Fixtures/log4j-cve-2021-44228.poe.golden.json";
    var golden = await LoadPoE(goldenPath);

    // Generate PoE from test inputs
    var generated = await GeneratePoE(testInputs);

    // Schema should match (structure, field types)
    Assert.Equal(golden.Schema, generated.Schema);
    Assert.Equal(golden.Subject.VulnId, generated.Subject.VulnId);
    Assert.Equal(golden.Subgraph.Nodes.Count, generated.Subgraph.Nodes.Count);
}

Generating New Fixtures

To create a new golden fixture:

  1. Run scanner on test image:

    stella scan --image test/log4j:vulnerable --emit-poe --output ./test-output/
    
  2. Extract PoE artifact:

    cp ./test-output/poe.json ./Fixtures/new-fixture.poe.golden.json
    
  3. Verify determinism:

    # Run scan again
    stella scan --image test/log4j:vulnerable --emit-poe --output ./test-output2/
    
    # Compare hashes
    sha256sum ./test-output/poe.json ./test-output2/poe.json
    # Hashes MUST match for determinism
    
  4. Commit fixture:

    git add ./Fixtures/new-fixture.poe.golden.json
    git commit -m "Add golden fixture: new-fixture"
    

Maintenance

  • Update fixtures when PoE schema version changes (schema field)
  • Regenerate fixtures when canonical JSON format changes
  • Verify hashes after any changes to serialization logic
  • Document breaking changes in fixture commit messages