Skip to content

Conversation

@rusty1968
Copy link
Collaborator

@rusty1968 rusty1968 commented Sep 3, 2025

This PR establishes compliance with:

  • No unwrap/expect/panic - All operations return proper Result types
  • Automatic secret zeroization - Keys cleared from memory when dropped
  • Constant-time operations - Prevents timing-based side-channel attacks
  • Comprehensive error handling - All edge cases properly managed

Copilot Integration

This PR introduces comprehensive GitHub Copilot instructions that automatically guide AI-assisted development toward secure, panic-free Rust code.

Enhanced CI Pipeline

  • Security audit job with general security lints
  • cargo deny integration for dependency policy enforcement
  • Semgrep Rust security pattern scanning
  • Optimized caching strategy

Cryptographic Improvements

SecureKey wrapper implementing Zeroize and ZeroizeOnDrop
Constant-time MAC verification via verify_mac_constant_time()
Enhanced MAC traits with secure key handling
Comprehensive test coverage for security features

…ement

- Add comprehensive security audit workflow to CI pipeline
  * Integrate cargo-audit for vulnerability scanning
  * Add security-focused clippy lints to catch common security issues
  * Include semgrep Rust security pattern detection
  * Add proper caching for improved CI performance

- Implement cargo-deny configuration for dependency governance
  * Configure vulnerability detection with 'deny' level for security issues
  * Define allowlist of approved licenses (MIT, Apache-2.0, BSD variants)
  * Block problematic licenses (GPL, AGPL, SSPL)
  * Add known vulnerable crate versions to deny list
  * Establish registry and source validation rules

- Extend xtask automation with cargo-deny integration
  * Add 'cargo xtask deny' command with automatic installation
  * Support granular subcommands (licenses, advisories, bans, sources)
  * Provide comprehensive help and error handling

This establishes a robust security foundation for the OpenPRoT project
with automated dependency scanning, license compliance, and security
pattern detection integrated into the CI/CD pipeline.
- Define comprehensive pull request review checklist for Rust safety
  * Enforce panic-free code patterns (no unwrap/expect/panic/indexing)
  * Require proper error handling with Result/Option types
  * Mandate safe integer operations and array access patterns
  * Ensure comprehensive test coverage including error paths

- Establish quick reference guide for forbidden patterns
  * Map dangerous patterns to their safe alternatives
  * Provide concrete examples for common security pitfalls
  * Include hardware-specific safety requirements (volatile MMIO)

- Document security-specific coding guidelines
  * Require constant-time cryptographic operations using subtle crate
  * Mandate automatic secret zeroization with zeroize crate
  * Enforce proper hardware abstraction layer usage
  * Prevent information leakage through error messages

These instructions will guide GitHub Copilot to generate secure,
panic-free Rust code that follows OpenPRoT's safety and security
standards for embedded systems development.
- Add SecureKey<N> wrapper with automatic zeroization
  * Implements Zeroize and ZeroizeOnDrop traits for secure key management
  * Automatically clears key material from memory when dropped
  * Provides safe constructors from arrays and slices with validation
  * Includes secure key access methods with proper bounds checking

- Implement constant-time MAC verification functions
  * Add verify_mac_constant_time() to prevent timing side-channel attacks
  * Use subtle crate for constant-time comparisons of MAC values
  * Maintain security even when MAC verification fails

- Enhance MAC trait definitions for security
  * Update MacInit, MacUpdate, and MacFinish traits to work with SecureKey
  * Add comprehensive error handling for key length validation
  * Include detailed security documentation and usage examples

- Add security-focused dependencies
  * zeroize v1.7 with derive features for automatic secret clearing
  * subtle v2.5 for constant-time cryptographic operations
  * Integrate with existing zerocopy patterns for efficient operations

- Update mock implementations for compatibility
  * Adapt test cases to use SecureKey instead of raw byte arrays
  * Maintain backward compatibility while enforcing secure patterns
  * Ensure all MAC operations follow new security guidelines

This addresses critical security findings from the codebase review,
implementing industry-standard practices for cryptographic key handling
and preventing common timing attack vulnerabilities in MAC operations.
- Add cargo install cargo-audit --locked before running cargo audit
- Ensures cargo-audit is available in CI environment
- Prevents build failures due to missing security audit tool
- Pin cargo-deny to version 0.18.3 for compatibility with Rust 1.86.0
- Add cargo-deny installation step directly in CI workflow
- Remove cargo-deny auto-installation logic from xtask to simplify tooling
- Update rust-toolchain.toml for consistent version management

This ensures CI builds succeed by using compatible tool versions and
centralizing CI-specific tool installation in the workflow rather
than build scripts.
- Fix uninlined_format_args in openprot greet function and xtask error messages
- Replace Error::new(ErrorKind::Other, _) with Error::other(_) in header.rs
- Remove unused ErrorKind import after clippy lint fixes
- Ensure compliance with strict clippy security lints in CI pipeline

These fixes address clippy warnings that would cause CI failures with
the enhanced security-focused lint configuration.
- Update deny.toml to use cargo-deny v0.18.3 compatible configuration format
- Add Unicode-3.0 license to allowed list for dependency compatibility
- Configure workspace-level license, repository, and edition inheritance
- Update workspace member Cargo.toml files to inherit from workspace
- Fix unlicensed crate errors for openprot, xtask, and platform-mock

Changes ensure cargo deny check passes completely with:
- advisories ok (no security vulnerabilities)
- bans ok (no banned crates)
- licenses ok (all licenses explicitly allowed)
- sources ok (all sources from approved registries)

Tested locally and passes all cargo deny validation checks.
- Replace clippy::integer_arithmetic with clippy::arithmetic_side_effects
- Resolves CI failure due to renamed clippy lint in newer Rust versions
- Maintains same security-focused arithmetic overflow checking
- Replace unsafe array indexing with safe get() method
- Eliminate unwrap() calls with proper error handling
- Remove expect() usage with fallback patterns
- Update test code to avoid panic!() and unwrap_err()
- Ensure all xtask code passes enhanced security lints
- Format multi-line expressions and function calls consistently
- Fix indentation in match arms and nested blocks
- Ensure all code passes cargo fmt --check validation
- Add clippy allow attributes for mock implementation files
- Allow unwrap_used, expect_used, arithmetic_side_effects for test/mock code
- Mock platform is for testing only and doesn't need strict security compliance
- Resolves CI failures from enhanced security lints in mock implementations
- Add nosemgrep comments to ignore rust.lang.security.args.args rule
- Add clippy allow attributes for disallowed_methods
- xtask is a development tool, not production security-critical code
- CLI argument parsing is appropriate for development tooling context
- Add nosemgrep annotations to suppress rust.lang.security.args.args warnings
- env::args() usage is safe in development tool context for CLI parsing
- Verified locally with semgrep --config=auto showing 0 findings
- Resolves blocking security scan failures in CI
- Add .semgrepignore to exclude xtask/, target/, and external/ directories
- xtask is a development tool, not production code, so security lints are not critical
- Verified locally with semgrep --config=p/rust showing 0 findings
- Resolves all remaining env::args() security warnings in CI
@FerralCoder FerralCoder merged commit b7ef62d into OpenPRoT:main Sep 3, 2025
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants