timegraph_identity/
lib.rs

1mod apikey;
2mod identity;
3mod signer;
4
5pub use apikey::*;
6pub use identity::*;
7pub use signer::*;
8
9#[cfg(test)]
10mod tests {
11    use super::*;
12    use std::time::{SystemTime, UNIX_EPOCH};
13
14    #[test]
15    fn test_apikey_1() -> anyhow::Result<()> {
16        let owner = Signer::new()?;
17        let owner_pk = owner.stringify_public_key()?;
18        let apikey = ApiKey::new()?;
19        let cert_s = apikey.certify(Role::System, &owner)?.stringify()?;
20        let cert = Cert::verify_str(&cert_s)?;
21        println!("cert: {cert_s}");
22        println!("cert: {:?}", bytes_decode(&cert_s)?);
23        println!("apikey: {}", apikey.key()?);
24        assert_eq!(
25            &owner_pk,
26            &cert.stringify_owner()?,
27            "owner_pk({owner_pk}) mas be the same as signer_pk"
28        );
29        assert_eq!(
30            cert.role,
31            Role::System,
32            "access({:?}) must be Access::Query",
33            cert.role
34        );
35        assert_eq!(
36            cert.stringify_delegate()?,
37            apikey.key()?,
38            "apikey must be the same"
39        );
40        Ok(())
41    }
42
43    #[test]
44    fn identity_test_1() -> anyhow::Result<()> {
45        let apikey = ApiKey::new()?;
46        let key = apikey.key()?;
47        let secret = apikey.secret()?;
48        let expire = SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs() + 1000;
49        let mut identity = Identity::ApiKey {
50            subgraph_id: 0,
51            key: key.clone(),
52            expiration: expire,
53            origins: "*".to_string(),
54            signature: "".to_string(),
55        };
56        identity.sign(&secret)?;
57        identity.verify()?;
58        println!("{:?}", identity);
59        let ssk = identity.to_ssk()?;
60        println!("{:?}", ssk);
61        let identity2 = Identity::from_ssk(&ssk)?;
62        println!("{:?}", identity2);
63        let ssk3 = "3;".to_string() + &ssk[2..];
64        println!("{:?}", ssk3);
65        match Identity::from_ssk(&ssk3) {
66            Ok(_) => anyhow::bail!("must fail"),
67            Err(e) => assert_eq!(
68                e.to_string(),
69                "Verification equation failed",
70                "unknown error"
71            ),
72        }
73        Ok(())
74    }
75
76    #[test]
77    fn identity_test_2() -> anyhow::Result<()> {
78        let mut identity = Identity::ApiKey {
79            subgraph_id: 0,
80            key: "6hvzRj2aZiZUqSALPc5YgMKKrN17tRe6iGpYvRuSJzvK".to_string(),
81            expiration: 0,
82            origins: "*".to_string(),
83            signature: "".to_string(),
84        };
85        identity.sign("3v83jWVsyHLLkqcZMcZj5bfaG4KeTypurcqpr4Lxn4M6")?;
86        let ssk = identity.to_ssk()?;
87        println!("{:?}", ssk);
88        Ok(())
89    }
90}