Skip to content

Commit

Permalink
hotplace rev.435 COSE Sign, MacCreate
Browse files Browse the repository at this point in the history
  • Loading branch information
princeb612 committed Nov 30, 2023
1 parent c521232 commit 2728346
Show file tree
Hide file tree
Showing 17 changed files with 842 additions and 591 deletions.
30 changes: 17 additions & 13 deletions sdk/base/basic/variant.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -309,9 +309,9 @@ variant& variant::set_binary_new(binary_t const& bin) {
return *this;
}

int variant::to_int() { return t_variant_to_int<int>(_vt); }
int variant::to_int() const { return t_variant_to_int<int>(_vt); }

return_t variant::to_binary(binary_t& target) {
return_t variant::to_binary(binary_t& target) const {
return_t ret = errorcode_t::success;

if (TYPE_BINARY == _vt.type) {
Expand All @@ -322,7 +322,7 @@ return_t variant::to_binary(binary_t& target) {
}
return ret;
}
return_t variant::to_string(std::string& target) {
return_t variant::to_string(std::string& target) const {
return_t ret = errorcode_t::success;

if (_vt.data.str) {
Expand Down Expand Up @@ -350,27 +350,27 @@ return_t variant::to_string(std::string& target) {
return ret;
}

variant& variant::copy(const variant& source) {
variant& variant::copy(variant_t const& value) {
__try2 {
reset();

if (variant_flag_t::flag_free & source._vt.flag) {
switch (source._vt.type) {
if (variant_flag_t::flag_free & value.flag) {
switch (value.type) {
case TYPE_BINARY:
set_bstr_new(source._vt.data.bstr, source._vt.size);
set_bstr_new(value.data.bstr, value.size);
break;
case TYPE_NSTRING:
set_nstr_new(source._vt.data.str, source._vt.size);
set_nstr_new(value.data.str, value.size);
break;
case TYPE_STRING:
set_str_new(source._vt.data.str);
set_str_new(value.data.str);
break;
default:
throw;
break;
}
} else {
memcpy(&_vt, &source._vt, sizeof(variant_t));
memcpy(&_vt, &value, sizeof(variant_t));
}
}
__finally2 {
Expand All @@ -379,15 +379,19 @@ variant& variant::copy(const variant& source) {
return *this;
}

variant& variant::move(variant& source) {
variant& variant::move(variant_t& value) {
reset();

memcpy(&_vt, &source._vt, sizeof(variant_t)); // copy including type and flag
memset(&source._vt, 0, sizeof(variant_t));
memcpy(&_vt, &value, sizeof(variant_t)); // copy including type and flag
memset(&value, 0, sizeof(variant_t));

return *this;
}

variant& variant::copy(const variant& source) { return copy(source._vt); }

variant& variant::move(variant& source) { return move(source._vt); }

variant& variant::operator=(const variant& source) { return copy(source); }

} // namespace hotplace
38 changes: 22 additions & 16 deletions sdk/base/basic/variant.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,38 +36,42 @@ enum vartype_t {
TYPE_BYTE = 4,
TYPE_UINT8 = TYPE_BYTE,

TYPE_SHORT = 5,
TYPE_INT16 = TYPE_SHORT,
TYPE_SINT16 = TYPE_SHORT,
TYPE_INT16 = 5,
TYPE_SHORT = TYPE_INT16,
TYPE_SINT16 = TYPE_INT16,

TYPE_USHORT = 6,
TYPE_WORD = TYPE_USHORT,
TYPE_UINT16 = TYPE_USHORT,
TYPE_UINT16 = 6,
TYPE_USHORT = TYPE_UINT16,
TYPE_WORD = TYPE_UINT16,

TYPE_INT32 = 7,
TYPE_SINT32 = TYPE_INT32,

TYPE_ULONG = 8,
TYPE_UINT = 8,
TYPE_DWORD = TYPE_ULONG,
TYPE_UINT32 = TYPE_ULONG,
TYPE_UINT32 = 8,
TYPE_DWORD = TYPE_UINT32,

TYPE_INT64 = 9,
TYPE_SINT64 = TYPE_INT64,

TYPE_UINT64 = 10,

TYPE_INT = TYPE_INT32,
TYPE_UINT = TYPE_UINT32,
TYPE_LONGLONG = TYPE_INT64,
TYPE_ULONGLONG = TYPE_UINT64,

TYPE_ULONGLONG = 10,
TYPE_UINT64 = TYPE_ULONGLONG,
#if defined __linux__
#if __WORDSIZE == 32
TYPE_LONG = TYPE_INT32,
TYPE_ULONG = TYPE_UINT32,
#elif __WORDSIZE == 64
TYPE_LONG = TYPE_INT64,
TYPE_ULONG = TYPE_UINT64,
#endif
#elif defined _WIN32 || defined _WIN64
TYPE_LONG = TYPE_INT32,
TYPE_ULONG = TYPE_UINT32,
#endif
TYPE_INT = TYPE_INT32,

TYPE_INT128 = 11,
TYPE_UINT128 = 12,
Expand Down Expand Up @@ -279,10 +283,12 @@ class variant {
variant& set_nstr_new(const char* value, size_t n);
variant& set_binary_new(binary_t const& bin);

int to_int();
return_t to_binary(binary_t& target);
return_t to_string(std::string& target);
int to_int() const;
return_t to_binary(binary_t& target) const;
return_t to_string(std::string& target) const;

variant& copy(variant_t const& value);
variant& move(variant_t& value);
variant& copy(const variant& source);
variant& move(variant& source);
variant& operator=(const variant& source);
Expand Down
41 changes: 41 additions & 0 deletions sdk/crypto/basic/crypto_advisor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ return_t crypto_advisor::build_if_necessary() {
for (i = 0; i < sizeof_hint_cose_algorithms; i++) {
const hint_cose_algorithm_t* item = hint_cose_algorithms + i;
_cose_alg_map.insert(std::make_pair(item->alg, item));
_cose_algorithm_byname_map.insert(std::make_pair(item->name, item));
}
for (i = 0; i < sizeof_hint_curves; i++) {
const hint_curve_t* item = hint_curves + i;
Expand Down Expand Up @@ -574,6 +575,17 @@ const hint_signature_t* crypto_advisor::hintof_jose_signature(const char* sig) {
return item;
}

const hint_cose_algorithm_t* crypto_advisor::hintof_cose_algorithm(const char* alg) {
const hint_cose_algorithm_t* item = nullptr;

if (alg) {
maphint<std::string, const hint_cose_algorithm_t*> hint(_cose_algorithm_byname_map);
hint.find(alg, &item);
}

return item;
}

const hint_curve_t* crypto_advisor::hintof_curve(const char* curve) {
const hint_curve_t* item = nullptr;

Expand Down Expand Up @@ -618,6 +630,17 @@ const char* crypto_advisor::nameof_jose_signature(jws_t sig) {
return name;
}

const char* crypto_advisor::nameof_cose_algorithm(cose_alg_t alg) {
const char* name = nullptr;

const hint_cose_algorithm_t* item = hintof_cose_algorithm(alg);

if (item) {
name = item->name;
}
return name;
}

return_t crypto_advisor::typeof_jose_algorithm(const char* alg, jwa_t& type) {
return_t ret = errorcode_t::success;

Expand Down Expand Up @@ -876,6 +899,24 @@ bool crypto_advisor::is_kindof(const EVP_PKEY* pkey, jws_t sig) {
return test;
}

bool crypto_advisor::is_kindof(const EVP_PKEY* pkey, cose_alg_t alg) {
bool test = false;

__try2 {
const hint_cose_algorithm_t* hint = hintof_cose_algorithm(alg);
if (nullptr == hint) {
__leave2;
}
crypto_kty_t kty = typeof_crypto_key(pkey);
bool cmp1 = (hint->kty == kty);
test = (cmp1);
}
__finally2 {
// do nothing
}
return test;
}

cose_kty_t crypto_advisor::ktyof(crypto_kty_t kty) {
cose_kty_t cose_kty = cose_kty_t::cose_kty_unknown;
maphint<crypto_kty_t, cose_kty_t> hint(_kty2cose_map);
Expand Down
20 changes: 19 additions & 1 deletion sdk/crypto/basic/crypto_advisor.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,6 @@ class crypto_advisor {
*/
const hint_curve_t* hintof_curve_nid(uint32 nid);
const hint_curve_t* hintof_curve(cose_ec_curve_t curve);

/**
* @brief hint
* @param const char* alg [in]
Expand All @@ -203,6 +202,12 @@ class crypto_advisor {
* @return const hint_signature_t*
*/
const hint_signature_t* hintof_jose_signature(const char* sig);
/**
* @brief hint
* @param const char* alg [in]
* @return const hint_cose_algorithm_t*
*/
const hint_cose_algorithm_t* hintof_cose_algorithm(const char* alg);
/**
* @brief hint
* @param const char* curve [in]
Expand Down Expand Up @@ -266,6 +271,10 @@ class crypto_advisor {
* EdDSA
*/
const char* nameof_jose_signature(jws_t sig);
/**
* @brief COSE (name decribed in RFC)
*/
const char* nameof_cose_algorithm(cose_alg_t alg);

/**
* @brief type
Expand Down Expand Up @@ -413,6 +422,13 @@ class crypto_advisor {
* @return true if match, false if not
*/
bool is_kindof(const EVP_PKEY* pkey, jws_t sig);
/**
* @brief kind of
* @param const EVP_PKEY* pkey [in]
* @param cose_alg_t alg [in]
* @return true if match, false if not
*/
bool is_kindof(const EVP_PKEY* pkey, cose_alg_t alg);
/**
* @brief kind of
* @param const EVP_PKEY* pkey [in]
Expand Down Expand Up @@ -453,6 +469,7 @@ class crypto_advisor {
typedef std::multimap<uint32, const hint_signature_t*> jose_signature_bynid_map_t;
typedef std::map<std::string, const hint_jose_encryption_t*> jose_encryption_byname_map_t;
typedef std::map<std::string, const hint_signature_t*> signature_byname_map_t;
typedef std::map<std::string, const hint_cose_algorithm_t*> cose_algorithm_byname_map_t;
typedef std::map<std::string, const hint_curve_t*> jose_nid_bycurve_map_t;
typedef std::map<uint32, const hint_curve_t*> jose_curve_bynid_map_t;
typedef std::map<cose_ec_curve_t, const hint_curve_t*> cose_curve_map_t;
Expand Down Expand Up @@ -487,6 +504,7 @@ class crypto_advisor {
jose_encryption_byname_map_t _alg_byname_map;
jose_encryption_byname_map_t _enc_byname_map;
signature_byname_map_t _sig_byname_map;
cose_algorithm_byname_map_t _cose_algorithm_byname_map;

jose_nid_bycurve_map_t _nid_bycurve_map;
jose_curve_bynid_map_t _curve_bynid_map;
Expand Down
Loading

0 comments on commit 2728346

Please sign in to comment.