use native_ossl::digest::DigestAlg;
use native_ossl::lib_ctx::LibCtx;
use std::sync::Arc;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let sha256 = DigestAlg::fetch(c"SHA2-256", None)?;
let mut ctx = sha256.new_context()?;
ctx.update(b"hello")?;
let mut out = [0u8; 32];
ctx.finish(&mut out)?;
println!("Global context SHA-256: {}", hex::encode(out));
let lib_ctx = Arc::new(LibCtx::new()?);
let _default_provider = lib_ctx.load_provider(c"default")?;
let sha256_isolated = DigestAlg::fetch_in(&lib_ctx, c"SHA2-256", None)?;
let mut ctx2 = sha256_isolated.new_context()?;
ctx2.update(b"hello")?;
let mut out2 = [0u8; 32];
ctx2.finish(&mut out2)?;
println!("Isolated context SHA-256: {}", hex::encode(out2));
assert_eq!(out, out2, "both contexts must produce the same digest");
println!("Results agree: OK");
println!("(FIPS isolation example is shown as a comment — requires fips provider installed)");
Ok(())
}