use dat::dat_bank::DatBank;
use dat::dat_key::DatKey;
use dat::error::DatError;
use dat::util::now_unix_timestamp;
use rand::RngExt;
use dat::crypto_algorithm::CryptoAlgorithm::{AES128GCMN, AES256GCMN};
use dat::signature_algorithm::SignatureAlgorithm::{P256, P384, P521};
use dat::signature_key::SignatureKeyOutOption;
fn rand_string() -> String {
let mut rng = rand::rng();
(0..100).map(|_| { rng.sample(rand::distr::Alphanumeric) as char }).collect()
}
fn gen_keys(store: &DatBank<i64>) -> Result<(), DatError> {
let sign_alg_arr = [P256, P384, P521];
let crypto_alg_arr = [AES128GCMN, AES256GCMN];
let mut keys: Vec<DatKey<i64>> = vec![];
let now = now_unix_timestamp();
let mut i = 0;
sign_alg_arr.iter().for_each(|sign_alg| {
crypto_alg_arr.iter().for_each(|crypto_alg| {
(1..5).for_each(|_| {
let kid = i;
i += 1;
keys.push(DatKey::generate(kid, *sign_alg, *crypto_alg, now - 10, now + 600, 60).unwrap());
});
});
});
store.import_keys(keys, false)?;
Ok(())
}
#[test]
fn test() {
let bank = DatBank::<i64>::new();
gen_keys(&bank).unwrap();
assert!(gen_keys(&bank).is_ok());
let dat_list = bank.export_keys().iter().map(|key| {
let act = key.clone();
act.to_dat(&rand_string(), &rand_string()).unwrap()
}).collect::<Vec<String>>();
let keys = bank.export_keys_format(SignatureKeyOutOption::FULL);
let bank2: DatBank<i64> = DatBank::new();
bank2.import_keys_format(&keys, true).unwrap();
for dat in dat_list.iter() {
let (plain, secure) = bank2.to_payload_verify(&dat).unwrap();
println!("bank plain:{}.secure:{}", plain, secure);
}
}
#[allow(dead_code)]
fn temp() {
let bank = DatBank::<i64>::new();
let keys = "2.208.P256.0l0Zg3M6awe-EazlOPu2toOeCNLG0fJSg0jyFMxS0GA.AES128GCMN.80vsGYE1I0FuIg6IsGTcmg.1777223714.1777227314.1800
2.209.P256.0pPQ_IDM6cE_cnKoJCOpAvfwwPzdJCJkwFG2Kf43Oyg.AES128GCMN.leyMYpNByPzFRbNJ2-ThLw.1777224000.1777227600.1800
2.210.P256.WtoJ0Iewmaj8TciUUXNN1FQZ-w81LWw4LviMm13XWoQ.AES128GCMN.njKFMdgqgeaXxk7VOHyCBA.1777224600.1777228200.1800
2.211.P256.wIFMUNe2aeft8PZLbNGaY-tVDnjyQpcwc5c_P-t0ToQ.AES128GCMN.3x5V2iHBdRfcxFt2tkPL9w.1777225200.1777228800.1800
2.212.P256.GN_JVc6H1Br7JxGZdPeiFLOwZXv9aMNL1my83VOsMt8.AES128GCMN.U0-HEiRp_P7Pb0w1jCmtpw.1777225800.1777229400.1800
2.213.P256.neVA44aC5tondxG_kpRbqGPQfBvVvQbwDoe4H0mSGmQ.AES128GCMN.pXJsuId09_3MqtVZyr57NA.1777226400.1777230000.1800
2.214.P256.24ckfCvPnmjwEPIGWnYcfBeIm3smsD9ZOh4_hc7HjME.AES128GCMN.Qh5mEtpSN_3SQdQuC_Lz4Q.1777227000.1777230600.1800
2.215.P256.q4sNyIpb1HYguLwPFppKeIasODrYWpd8civBZYXATqo.AES128GCMN.IfUaX9a-WRR9Ex7IWWCFPQ.1777227600.1777231200.1800
2.216.P256.gr0o_sVihBuuB8H1XelCYlOl6rQ2tEXcb_2Ry13FSiY.AES128GCMN.5YmLe8ciqWdWaHE9DNqEgg.1777228200.1777231800.1800
2.217.P256.yLBPmlbBkAAz95vU8LRImpfDW4NiJUpTWH7iYkH6UmY.AES128GCMN.fLmUj4J3TA86ltBGKBPNAA.1777228800.1777232400.1800
2.218.P256.wJa-a4lD4g7d-GxqGtf4vnSeRRiIKDm80vph99Sv1w8.AES128GCMN.fSQWo5PMDBrWis8mM2xrNg.1777229400.1777233000.1800
2.219.P256.dSvJRLdmeRVHuzF5CkcoJ8gKZbZZLvk-okMrPUWnODw.AES128GCMN.0hvJxx8FKNr_OVEMt5PzRA.1777229615.1777233215.1800
2.220.P256.YvrE6Sn-1_tNQxVwT1qr2a9MfKLD_02X8TKD5xvfgf8.AES128GCMN.7imRXI1R-Jf730TqkgOm5Q.1777229631.1777233231.180";
bank.import_keys_format(keys, false).unwrap();
let dat = bank.to_dat("hello", "world").unwrap();
let (plain, secure) = bank.to_payload_verify(&dat).unwrap();
println!("plain:{}.secure:{}", plain, secure);
assert_eq!("hello", plain);
assert_eq!("world", secure);
}