signer-core 0.1.0

Signer core package.
Documentation
use crate::signer_jwt::{self, SignerJWT};
use crate::signer_message::SignerMessage;
use crate::signer_user::SignerUser;

use super::signer_fs_store;

#[test]
fn test_create_signer_user() -> anyhow::Result<()> {
  let sfs =
    signer_fs_store::SignerFsStore::new(String::from("./test_root/users"));

  let u = SignerUser::generete("test")?;

  sfs.save_signer_user(&u)?;

  let list = sfs.list_signer_user()?;

  assert!(list.len() > 0);

  let u2 = sfs.load_signer_user(&u.public.pub_key)?;

  assert_eq!(u.prv_key, u2.prv_key);

  sfs.drop_signer_user(&u2)?;

  Ok(())
}

#[test]
fn test_create_signature() -> anyhow::Result<()> {
  let u = SignerUser::generete("test")?;

  let ud_sig = u.public.create_signature(&u)?;
  u.public.verify_signature(&ud_sig)?;

  Ok(())
}

#[test]
fn test_signer_jwt() -> anyhow::Result<()> {
  let u = SignerUser::generete("tester")?;

  let jwt = SignerJWT::new(
    signer_jwt::SignerJWTHeader::default(&u),
    signer_jwt::SignerJWTClaims::default(
      format!("http://aud.com"),
      format!("1001"),
    ),
  );

  let jwt_string = jwt.encode(&u)?;
  println!("JWT_STRING :: {}", jwt_string);
  let decode = SignerJWT::decode(&jwt_string)?;

  assert_eq!(jwt.claims.jti, decode.claims.jti);

  let invalid_jwt = jwt_string + "INVALID";
  let invalid = SignerJWT::decode_unverify(&invalid_jwt)?;

  assert_eq!(jwt.claims.jti, invalid.claims.jti);

  matches!(SignerJWT::decode(&invalid_jwt), Err(_));

  Ok(())
}

#[test]
fn test_signer_message() -> anyhow::Result<()> {
  let alice = SignerUser::generete("alice")?;
  let bob = SignerUser::generete("bob")?;

  let wisper = b"i love u";

  let message = SignerMessage::create(&alice, &bob.public.pub_key, wisper)?;
  let decrypt = message.decrypt(&bob)?;

  assert_eq!(wisper.to_vec(), decrypt);

  println!("alice says: {}", std::str::from_utf8(&decrypt)?);

  Ok(())
}