Skip to content

Commit

Permalink
Python GA attestation (#72)
Browse files Browse the repository at this point in the history
  • Loading branch information
hanneary authored Sep 18, 2023
1 parent 71b3765 commit 6e47738
Show file tree
Hide file tree
Showing 11 changed files with 88 additions and 435 deletions.
13 changes: 12 additions & 1 deletion .github/workflows/lint-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,15 @@ jobs:
args: --release -o dist --find-interpreter
working-directory: python-attestation-bindings
env:
PYO3_CROSS_PYTHON_VERSION: "3.9"
PYO3_CROSS_PYTHON_VERSION: "3.9"
- name: Build and Test
run: |
cd python-attestation-bindings
python -m pip install --upgrade pip
python -m venv ./venv
source ./venv/bin/activate
pip install pytest
maturin develop
sudo apt-get install -y libfaketime
export FAKETIME="2023-09-18 17:18:00"
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1 pytest
2 changes: 1 addition & 1 deletion attestation-doc-validation/Makefile.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ command = "cargo"
args = ["test","time_sensitive_beta"]

[tasks.test_time_sensitive_ga]
env = { "FAKETIME" = "1694105547" }
env = { "FAKETIME" = "1695050165" }
command = "cargo"
args = ["test","time_sensitive_ga"]

Expand Down
2 changes: 1 addition & 1 deletion attestation-doc-validation/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ mod test {
.unwrap();

let input_bytes =
std::fs::read(std::path::Path::new("../test-data/valid-cage-cert")).unwrap();
std::fs::read(std::path::Path::new("../test-data/valid-certificate.der")).unwrap();

let cert = parse_cert(&input_bytes).unwrap();
let maybe_attestation_doc =
Expand Down
2 changes: 1 addition & 1 deletion python-attestation-bindings/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "maturin"

[project]
name = "evervault_attestation_bindings"
version = "0.2.0"
version = "0.3.0"
requires-python = ">=3.6"
classifiers = [
"Programming Language :: Rust",
Expand Down
39 changes: 38 additions & 1 deletion python-attestation-bindings/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use attestation_doc_validation::{
attestation_doc::{validate_expected_pcrs, PCRProvider},
parse_cert, validate_attestation_doc_in_cert,
parse_cert, validate_attestation_doc_against_cert, validate_attestation_doc_in_cert,
};
use pyo3::exceptions::PyValueError;
use pyo3::prelude::*;
Expand Down Expand Up @@ -111,10 +111,47 @@ pub fn attest_connection(cert: &[u8], expected_pcrs_list: Vec<PCRs>) -> PyResult
result
}

/// Top level function to attest the Cage being connected to.
/// * If the cert fails to parse, return an error
/// * If the attestation doc fails to validate, return an error
/// * If the list of PCRs to check is empty, return true
/// * If any of the PCRs in the list match, return true
/// * If they all fail, return the last error
#[pyfunction]
pub fn attest_cage(
cert: &[u8],
expected_pcrs_list: Vec<PCRs>,
attestation_doc: &[u8],
) -> PyResult<bool> {
let parsed_cert = parse_cert(cert.as_ref())
.map_err(|parse_err| PyValueError::new_err(format!("{parse_err}")))?;

let validated_attestation_doc =
validate_attestation_doc_against_cert(&parsed_cert, attestation_doc.as_ref())
.map_err(|parse_err| PyValueError::new_err(format!("{parse_err}")))?;

let mut result = Ok(true);
for expected_pcrs in expected_pcrs_list {
match validate_expected_pcrs(&validated_attestation_doc, &expected_pcrs) {
Ok(_) => return Ok(true),
Err(err) => result = Err(err),
}
}

match result {
Ok(_) => Ok(true),
Err(e) => {
eprintln!("Failed to validate that PCRs are as expected: {e}");
Ok(false)
}
}
}

/// A small python module offering bindings to the rust attestation doc validation project
#[pymodule]
fn evervault_attestation_bindings(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(attest_connection, m)?)?;
m.add_function(wrap_pyfunction!(attest_cage, m)?)?;
m.add_class::<PCRs>()?;
Ok(())
}
34 changes: 34 additions & 0 deletions python-attestation-bindings/tests/test_attestation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import pytest
import evervault_attestation_bindings
import base64


def test_attest_correct_pcrs():
with open('../test-data/valid-certificate.der', 'rb') as f1, open('../test-data/valid-attestation-doc-base64', 'r') as f2:
cert = f1.read()
attestation_doc = base64.b64decode(f2.read().strip())

pcrs = evervault_attestation_bindings.PCRs(
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
)
result = evervault_attestation_bindings.attest_cage(cert, [pcrs], attestation_doc)

assert result == True

def test_attest_incorrect_pcrs():
with open('../test-data/valid-certificate.der', 'rb') as f1, open('../test-data/valid-attestation-doc-base64', 'r') as f2:
cert = f1.read()
attestation_doc = base64.b64decode(f2.read().strip())

pcrs = evervault_attestation_bindings.PCRs(
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050000000",
)
result = evervault_attestation_bindings.attest_cage(cert, [pcrs], attestation_doc)

assert result == False
Binary file added test-data/certificate.der
Binary file not shown.
2 changes: 1 addition & 1 deletion test-data/valid-attestation-doc-base64
Original file line number Diff line number Diff line change
@@ -1 +1 @@
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
Binary file removed test-data/valid-cage-cert
Binary file not shown.
Binary file added test-data/valid-certificate.der
Binary file not shown.
Loading

0 comments on commit 6e47738

Please sign in to comment.