signer-core 0.3.2

Signer core package.
Documentation
use crate::signer_crypted::SignerCrypted;
use crate::signer_jwt::{self, SignerJWT};
use crate::signer_remote_resource::SignerRemoteResource;
use crate::signer_user::SignerUser;
use crate::{Result, SignerSigned};

use super::signer_fs_store;

#[test]
fn test_create_signer_user() -> 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() -> Result<()> {
    let u = SignerUser::generete("test")?;

    let up_sig = SignerSigned::from_value(&u, &u.public)?;
    let v = up_sig.verify_to_value()?;

    assert_eq!(u.public, v);

    Ok(())
}

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

    let jwt = SignerJWT::new(
        signer_jwt::SignerJWTHeader::default(&u),
        signer_jwt::SignerJWTClaims::default(&u, 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() -> Result<()> {
    let alice = SignerUser::generete("alice")?;
    let bob = SignerUser::generete("bob")?;

    let wisper = "i love u".to_string();

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

    assert_eq!(wisper, decrypt);

    println!("alice says: {}", decrypt);

    Ok(())
}

#[test]
fn test_signer_remote_resource() {
    let mut resource1 = SignerRemoteResource::new("pubkey1".to_string(), "hash1".to_string());
    resource1.remotes.push("remote1".to_string());

    let mut resource2 = SignerRemoteResource::new("pubkey1".to_string(), "hash1".to_string());
    resource2.remotes.push("remote2".to_string());

    resource1.merge(&resource2);

    assert_eq!(resource1.remotes.len(), 2);
    assert!(resource1.remotes.contains(&"remote1".to_string()));
    assert!(resource1.remotes.contains(&"remote2".to_string()));

    let resource3 = SignerRemoteResource::new("pubkey1".to_string(), "hash2".to_string());

    resource1.merge(&resource3);
    assert_eq!(resource1.remotes.len(), 2);
}