timegraph_identity/
lib.rs1mod 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}