Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rust github actions #7

Merged
merged 3 commits into from
Feb 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
name: Rust CI

on:
push:
branches:
- master
pull_request:
branches:
- master

env:
CARGO_TERM_COLOR: always
RUSTFLAGS: "-D warnings"

jobs:
format:
name: Check Format
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt

- name: Cache dependencies
uses: Swatinem/rust-cache@v2

- name: Check formatting
run: cargo fmt --all -- --check

clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: clippy

- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libpq-dev pkg-config libssl-dev

- name: Cache dependencies
uses: Swatinem/rust-cache@v2

- name: Run clippy
run: cargo clippy --all-targets --all-features -- -D warnings

test:
name: Test Suite
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libpq-dev pkg-config libssl-dev

- name: Cache dependencies
uses: Swatinem/rust-cache@v2

- name: Run tests
run: cargo test --all-features

doc:
name: Check Documentation
runs-on: ubuntu-latest
env:
RUSTDOCFLAGS: "-D warnings"
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libpq-dev pkg-config libssl-dev

- name: Cache dependencies
uses: Swatinem/rust-cache@v2

- name: Check documentation
run: cargo doc --no-deps --all-features
4 changes: 2 additions & 2 deletions pcrDev.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"HashAlgorithm": "Sha384 { ... }",
"PCR0": "583ac140e0454dd4766a07c147cb6d90d5430d6bc9c1571da19c781dea4027e1c434273caba584440180ca42c2db84d5",
"PCR0": "acb85ac823541935e89094a83fb8ec555ba3e3a6935849ff2624c0e79d2458524d246d78be5d58a642e24ea9ae5dc948",
"PCR1": "5039fa3d13b95dded883deed58d2a0ac63bee4f05f16e05eda0dd21e54bcd01f5e700505998b5674616ea8346ce94b29",
"PCR2": "9e21041c05247372770686518de99f37923ec6ad8fddecc5fd98e9d7c1c488a0b38d0071546b6164f5049bd2da74ccd0"
"PCR2": "1e12e291b33eb3caaf2e46f2d6a0f12c5926e8add72e4cc6b3723344d0ac008a58dba0d36b30b1cccf1192373fbccceb"
}
4 changes: 2 additions & 2 deletions pcrProd.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"HashAlgorithm": "Sha384 { ... }",
"PCR0": "4e242871fecc14933c889908a6a7593de574c2655a47ffa163c5fd7ba41d063152ef441bd555ac7f8569eac4fd7cbc8b",
"PCR0": "9271a1ce2525461b3bb89a89ca3a9601b28e917ab7624bdf862ed3b35462be336212220d215bcadeca22ffce74ccd2c0",
"PCR1": "5039fa3d13b95dded883deed58d2a0ac63bee4f05f16e05eda0dd21e54bcd01f5e700505998b5674616ea8346ce94b29",
"PCR2": "6fb22e83424524d5e8a0e43b9b314af7e1ed32796b93bb7c1cec99f74800eca209c88185899c294f4f6e4ade5bb87d7e"
"PCR2": "eb5aab3a13607322f409e64608131b2e6c889d889c27ae23bbc68aa7835f2d4f0b1a4adcdd35916c1eef1bc44ede2310"
}
27 changes: 16 additions & 11 deletions src/message_signing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,34 +33,39 @@ impl std::fmt::Display for SignatureType {
}
}

pub fn sign_message(secret_key: &SecretKey, message_bytes: &[u8], algorithm: SigningAlgorithm) -> Result<SignMessageResponse, Error> {
pub fn sign_message(
secret_key: &SecretKey,
message_bytes: &[u8],
algorithm: SigningAlgorithm,
) -> Result<SignMessageResponse, Error> {
let secp = Secp256k1::new();

// Hash the message
let mut hasher = Sha256::new();
hasher.update(message_bytes);
let message_hash = hasher.finalize();
let message_hash_array: [u8; 32] = message_hash.into();

// Create secp256k1 message from hash
let message = Message::from_digest_slice(&message_hash).map_err(|e| {
Error::SigningError(format!("Failed to create message from digest: {}", e))
})?;
let message = Message::from_digest_slice(&message_hash)
.map_err(|e| Error::SigningError(format!("Failed to create message from digest: {}", e)))?;

// Sign with the specified algorithm
let signature = match algorithm {
SigningAlgorithm::Schnorr => {
let keypair = secret_key.keypair(&secp);
let random_bytes = generate_random::<32>();
SignatureType::Schnorr(secp.sign_schnorr_with_aux_rand(&message, &keypair, &random_bytes))
},
SigningAlgorithm::Ecdsa => {
SignatureType::Ecdsa(secp.sign_ecdsa(&message, secret_key))
},
SignatureType::Schnorr(secp.sign_schnorr_with_aux_rand(
&message,
&keypair,
&random_bytes,
))
}
SigningAlgorithm::Ecdsa => SignatureType::Ecdsa(secp.sign_ecdsa(&message, secret_key)),
};

Ok(SignMessageResponse {
signature,
message_hash: message_hash_array,
})
}
}
4 changes: 2 additions & 2 deletions src/web/health_routes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ impl HealthResponse {
}
}

/// IETF draft RFC for HTTP API Health Checks:
/// https://datatracker.ietf.org/doc/html/draft-inadarei-api-health-check
/// Health check endpoint following the IETF draft standard
/// <https://datatracker.ietf.org/doc/html/draft-inadarei-api-health-check>
pub async fn health_check() -> Result<Json<HealthResponse>, (StatusCode, String)> {
Ok(Json(HealthResponse::new_ok()))
}
Loading