1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *    http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #![allow(dead_code)]
17 
18 use asset_sdk::*;
19 
20 #[macro_export]
21 macro_rules! function {
22     () => {{
23         fn f() {}
24         fn type_name_of<T>(_: T) -> &'static str {
25             std::any::type_name::<T>()
26         }
27         type_name_of(f).rsplit("::").find(|&part| part != "f" && part != "{{closure}}").expect("Short function name")
28     }};
29 }
30 
31 pub(crate) const MIN_NUMBER_VALUE: u32 = 0;
32 pub(crate) const MAX_RETURN_LIMIT: u32 = 0x10000; // 65536
33 pub(crate) const MAX_AUTH_VALID_PERIOD: u32 = 600; // 10min
34 pub(crate) const CRYPTO_CAPACITY: u32 = 16;
35 
36 pub(crate) const MIN_ARRAY_SIZE: usize = 0;
37 pub(crate) const MAX_SECRET_SIZE: usize = 1024;
38 
39 pub(crate) const MAX_ALIAS_SIZE: usize = 256;
40 pub(crate) const MAX_LABEL_SIZE: usize = 2048;
41 
42 pub(crate) const AUTH_TOKEN_SIZE: usize = 280;
43 pub(crate) const CHALLENGE_SIZE: usize = 32;
44 pub(crate) const SYNC_TYPE_MIN_BITS: u32 = 0;
45 pub(crate) const SYNC_TYPE_MAX_BITS: u32 = 3;
46 
47 pub(crate) const CRITICAL_LABEL_ATTRS: [Tag; 4] =
48     [Tag::DataLabelCritical1, Tag::DataLabelCritical2, Tag::DataLabelCritical3, Tag::DataLabelCritical4];
49 
50 pub(crate) const NORMAL_LABEL_ATTRS: [Tag; 4] =
51     [Tag::DataLabelNormal1, Tag::DataLabelNormal2, Tag::DataLabelNormal3, Tag::DataLabelNormal4];
52 
remove_by_alias(alias: &[u8]) -> Result<()>53 pub(crate) fn remove_by_alias(alias: &[u8]) -> Result<()> {
54     asset_sdk::Manager::build()?.remove(&AssetMap::from([(Tag::Alias, Value::Bytes(alias.to_vec()))]))
55 }
56 
57 pub(crate) const SECRET: &[u8] = "all_tags_secret".as_bytes();
58 pub(crate) const NORMAL_LABEL1: &[u8] = "all_tags_normal_label1".as_bytes();
59 pub(crate) const NORMAL_LABEL2: &[u8] = "all_tags_normal_label2".as_bytes();
60 pub(crate) const NORMAL_LABEL3: &[u8] = "all_tags_normal_label3".as_bytes();
61 pub(crate) const NORMAL_LABEL4: &[u8] = "all_tags_normal_label4".as_bytes();
62 pub(crate) const NORMAL_LOCAL_LABEL1: &[u8] = "all_tags_normal_local_label1".as_bytes();
63 pub(crate) const NORMAL_LOCAL_LABEL2: &[u8] = "all_tags_normal_local_label2".as_bytes();
64 pub(crate) const NORMAL_LOCAL_LABEL3: &[u8] = "all_tags_normal_local_label3".as_bytes();
65 pub(crate) const NORMAL_LOCAL_LABEL4: &[u8] = "all_tags_normal_local_label4".as_bytes();
66 pub(crate) const CRITICAL_LABEL1: &[u8] = "all_tags_critical_label1".as_bytes();
67 pub(crate) const CRITICAL_LABEL2: &[u8] = "all_tags_critical_label2".as_bytes();
68 pub(crate) const CRITICAL_LABEL3: &[u8] = "all_tags_critical_label3".as_bytes();
69 pub(crate) const CRITICAL_LABEL4: &[u8] = "all_tags_critical_label4".as_bytes();
70 
remove_all() -> Result<()>71 pub(crate) fn remove_all() -> Result<()> {
72     asset_sdk::Manager::build()?.remove(&AssetMap::new())
73 }
74 
query_all_by_alias(alias: &[u8]) -> Result<Vec<AssetMap>>75 pub(crate) fn query_all_by_alias(alias: &[u8]) -> Result<Vec<AssetMap>> {
76     asset_sdk::Manager::build()?.query(&AssetMap::from([
77         (Tag::Alias, Value::Bytes(alias.to_vec())),
78         (Tag::ReturnType, Value::Number(ReturnType::All as u32)),
79     ]))
80 }
81 
query_attr_by_alias(alias: &[u8]) -> Result<Vec<AssetMap>>82 pub(crate) fn query_attr_by_alias(alias: &[u8]) -> Result<Vec<AssetMap>> {
83     asset_sdk::Manager::build()?.query(&AssetMap::from([
84         (Tag::Alias, Value::Bytes(alias.to_vec())),
85         (Tag::ReturnType, Value::Number(ReturnType::Attributes as u32)),
86     ]))
87 }
88 
add_default_asset(alias: &[u8], secret: &[u8]) -> Result<()>89 pub(crate) fn add_default_asset(alias: &[u8], secret: &[u8]) -> Result<()> {
90     asset_sdk::Manager::build()?.add(&AssetMap::from([
91         (Tag::Alias, Value::Bytes(alias.to_vec())),
92         (Tag::Secret, Value::Bytes(secret.to_vec())),
93         (Tag::Accessibility, Value::Number(Accessibility::DevicePowerOn as u32)),
94     ]))
95 }
96 
add_default_auth_asset(alias: &[u8], secret: &[u8]) -> Result<()>97 pub(crate) fn add_default_auth_asset(alias: &[u8], secret: &[u8]) -> Result<()> {
98     asset_sdk::Manager::build()?.add(&AssetMap::from([
99         (Tag::Alias, Value::Bytes(alias.to_vec())),
100         (Tag::Secret, Value::Bytes(secret.to_vec())),
101         (Tag::Accessibility, Value::Number(Accessibility::DevicePowerOn as u32)),
102         (Tag::AuthType, Value::Number(AuthType::Any as u32)),
103     ]))
104 }
105 
add_all_tags_asset(alias: &[u8]) -> Result<()>106 pub(crate) fn add_all_tags_asset(alias: &[u8]) -> Result<()> {
107     let mut attrs = AssetMap::new();
108     attrs.insert_attr(Tag::Alias, alias.to_vec());
109     attrs.insert_attr(Tag::Secret, SECRET.to_vec());
110     attrs.insert_attr(Tag::DataLabelNormal1, NORMAL_LABEL1.to_owned());
111     attrs.insert_attr(Tag::DataLabelNormal2, NORMAL_LABEL2.to_owned());
112     attrs.insert_attr(Tag::DataLabelNormal3, NORMAL_LABEL3.to_owned());
113     attrs.insert_attr(Tag::DataLabelNormal4, NORMAL_LABEL4.to_owned());
114     attrs.insert_attr(Tag::DataLabelNormalLocal1, NORMAL_LOCAL_LABEL1.to_owned());
115     attrs.insert_attr(Tag::DataLabelNormalLocal2, NORMAL_LOCAL_LABEL2.to_owned());
116     attrs.insert_attr(Tag::DataLabelNormalLocal3, NORMAL_LOCAL_LABEL3.to_owned());
117     attrs.insert_attr(Tag::DataLabelNormalLocal4, NORMAL_LOCAL_LABEL4.to_owned());
118     attrs.insert_attr(Tag::DataLabelCritical1, CRITICAL_LABEL1.to_owned());
119     attrs.insert_attr(Tag::DataLabelCritical2, CRITICAL_LABEL2.to_owned());
120     attrs.insert_attr(Tag::DataLabelCritical3, CRITICAL_LABEL3.to_owned());
121     attrs.insert_attr(Tag::DataLabelCritical4, CRITICAL_LABEL4.to_owned());
122     attrs.insert_attr(Tag::Accessibility, Accessibility::DevicePowerOn);
123     attrs.insert_attr(Tag::AuthType, AuthType::Any);
124     attrs.insert_attr(Tag::SyncType, SyncType::ThisDevice);
125     attrs.insert_attr(Tag::RequirePasswordSet, false);
126     attrs.insert_attr(Tag::ConflictResolution, ConflictResolution::Overwrite);
127     asset_sdk::Manager::build().unwrap().add(&attrs)
128 }
129 
expect_error_eq(expect_err: ErrCode, real_err: AssetError)130 pub(crate) fn expect_error_eq(expect_err: ErrCode, real_err: AssetError) {
131     assert_eq!(expect_err, real_err.code)
132 }
133