mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-04-09 04:01:28 +03:00
100% open source
This commit is contained in:
30
src/license.rs
Normal file
30
src/license.rs
Normal file
@@ -0,0 +1,30 @@
|
||||
use hbb_common::{bail, sodiumoxide::crypto::sign, ResultType};
|
||||
use serde_derive::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, PartialEq, Default, Serialize, Deserialize, Clone)]
|
||||
pub struct License {
|
||||
#[serde(default)]
|
||||
pub key: String,
|
||||
#[serde(default)]
|
||||
pub host: String,
|
||||
#[serde(default)]
|
||||
pub api: String,
|
||||
}
|
||||
|
||||
pub fn get_license_from_string(s: &str) -> ResultType<License> {
|
||||
let tmp: String = s.chars().rev().collect();
|
||||
const PK: &[u8; 32] = &[
|
||||
88, 168, 68, 104, 60, 5, 163, 198, 165, 38, 12, 85, 114, 203, 96, 163, 70, 48, 0, 131, 57,
|
||||
12, 46, 129, 83, 17, 84, 193, 119, 197, 130, 103,
|
||||
];
|
||||
let pk = sign::PublicKey(*PK);
|
||||
let data = base64::decode_config(tmp, base64::URL_SAFE_NO_PAD)?;
|
||||
if let Ok(lic) = serde_json::from_slice::<License>(&data) {
|
||||
return Ok(lic);
|
||||
}
|
||||
if let Ok(data) = sign::verify(&data, &pk) {
|
||||
Ok(serde_json::from_slice::<License>(&data)?)
|
||||
} else {
|
||||
bail!("sign:verify failed");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user