227 lines
6.7 KiB
C
227 lines
6.7 KiB
C
/********************************************************************
|
|
* Berry module `crypto`
|
|
*
|
|
* To use: `import crypto`
|
|
*
|
|
* Allows to use crypto functions
|
|
*******************************************************************/
|
|
#include "be_constobj.h"
|
|
#include "be_mapping.h"
|
|
|
|
extern int be_class_crypto_member(bvm *vm);
|
|
extern int m_crypto_random(bvm *vm);
|
|
|
|
extern int m_rsa_rsassa_pkcs1_v1_5(bvm *vm);
|
|
|
|
extern int m_aes_ccm_init(bvm *vm);
|
|
extern int m_aes_ccm_encrypt(bvm *vm);
|
|
extern int m_aes_ccm_encrypt1(bvm *vm);
|
|
extern int m_aes_ccm_decrypt(bvm *vm);
|
|
extern int m_aes_ccm_decrypt1(bvm *vm);
|
|
extern int m_aes_ccm_tag(bvm *vm);
|
|
|
|
extern int m_aes_gcm_init(bvm *vm);
|
|
extern int m_aes_gcm_encryt(bvm *vm);
|
|
extern int m_aes_gcm_decryt(bvm *vm);
|
|
extern int m_aes_gcm_tag(bvm *vm);
|
|
|
|
extern int m_aes_ctr_init(bvm *vm);
|
|
extern int m_aes_ctr_run(bvm *vm);
|
|
extern int m_aes_ctr_tag(bvm *vm);
|
|
|
|
extern int m_aes_cbc_encrypt1(bvm *vm);
|
|
extern int m_aes_cbc_decrypt1(bvm *vm);
|
|
|
|
extern int m_ec_p256_pubkey(bvm *vm);
|
|
extern int m_ec_p256_sharedkey(bvm *vm);
|
|
extern int m_ec_p256_ecdsa_sign_sha256(bvm *vm);
|
|
extern int m_ec_p256_ecdsa_verify_sha256(bvm *vm);
|
|
extern int m_ec_p256_ecdsa_sign_sha256_asn1(bvm *vm);
|
|
extern int m_ec_p256_ecdsa_verify_sha256_asn1(bvm *vm);
|
|
extern int m_ec_p256_mod(bvm *vm);
|
|
extern int m_ec_p256_neg(bvm *vm);
|
|
extern int m_ec_p256_muladd(bvm *vm);
|
|
extern int m_ec_p256_mul(bvm *vm);
|
|
|
|
extern int m_ec_c25519_pubkey(bvm *vm);
|
|
extern int m_ec_c25519_sharedkey(bvm *vm);
|
|
|
|
extern int m_hash_sha256_init(bvm *vm);
|
|
extern int m_hash_sha256_update(bvm *vm);
|
|
extern int m_hash_sha256_out(bvm *vm);
|
|
|
|
extern int m_hmac_sha256_init(bvm *vm);
|
|
extern int m_hmac_sha256_update(bvm *vm);
|
|
extern int m_hmac_sha256_out(bvm *vm);
|
|
|
|
extern int m_pbkdf2_hmac_sha256_f(bvm *vm);
|
|
|
|
extern int m_hkdf_sha256_derive(bvm *vm);
|
|
|
|
extern const bclass be_class_md5;
|
|
|
|
#include "solidify/solidified_crypto_pbkdf2_hmac_sha256.h"
|
|
#include "solidify/solidified_crypto_spake2p_matter.h"
|
|
|
|
#include "be_fixed_be_class_rsa.h"
|
|
#include "be_fixed_be_class_aes_ccm.h"
|
|
#include "be_fixed_be_class_aes_gcm.h"
|
|
#include "be_fixed_be_class_aes_ctr.h"
|
|
#include "be_fixed_be_class_aes_cbc.h"
|
|
#include "be_fixed_be_class_ec_p256.h"
|
|
#include "be_fixed_be_class_ec_c25519.h"
|
|
#include "be_fixed_be_class_sha256.h"
|
|
#include "be_fixed_be_class_hmac_sha256.h"
|
|
#include "be_fixed_be_class_pbkdf2_hmac_sha256.h"
|
|
#include "be_fixed_be_class_hkdf_sha256.h"
|
|
#include "be_fixed_crypto.h"
|
|
|
|
const be_const_member_t be_crypto_members[] = {
|
|
// name with prefix '/' indicates a Berry class
|
|
// entries need to be sorted (ignoring the prefix char)
|
|
#ifdef USE_BERRY_CRYPTO_AES_CBC
|
|
{ "/AES_CBC", (intptr_t) &be_class_aes_cbc },
|
|
#endif // USE_BERRY_CRYPTO_AES_CBC
|
|
|
|
#ifdef USE_BERRY_CRYPTO_AES_CCM
|
|
{ "/AES_CCM", (intptr_t) &be_class_aes_ccm },
|
|
#endif // USE_BERRY_CRYPTO_AES_CTR
|
|
|
|
#ifdef USE_BERRY_CRYPTO_AES_CTR
|
|
{ "/AES_CTR", (intptr_t) &be_class_aes_ctr },
|
|
#endif // USE_BERRY_CRYPTO_AES_CTR
|
|
|
|
#ifdef USE_BERRY_CRYPTO_AES_GCM
|
|
{ "/AES_GCM", (intptr_t) &be_class_aes_gcm },
|
|
#endif // USE_BERRY_CRYPTO_AES_GCM
|
|
|
|
#ifdef USE_BERRY_CRYPTO_EC_C25519
|
|
{ "/EC_C25519", (intptr_t) &be_class_ec_c25519 },
|
|
#endif // USE_BERRY_CRYPTO_EC_C25519
|
|
|
|
#ifdef USE_BERRY_CRYPTO_EC_P256
|
|
{ "/EC_P256", (intptr_t) &be_class_ec_p256 },
|
|
#endif // USE_BERRY_CRYPTO_EC_P256
|
|
|
|
#ifdef USE_BERRY_CRYPTO_HKDF_SHA256
|
|
{ "/HKDF_SHA256", (intptr_t) &be_class_hkdf_sha256 },
|
|
#endif // USE_BERRY_CRYPTO_HKDF_SHA256
|
|
|
|
#ifdef USE_BERRY_CRYPTO_HMAC_SHA256
|
|
{ "/HMAC_SHA256", (intptr_t) &be_class_hmac_sha256 },
|
|
#endif // USE_BERRY_CRYPTO_HMAC_SHA256
|
|
|
|
{ "/MD5", (intptr_t) &be_class_md5 },
|
|
|
|
#ifdef USE_BERRY_CRYPTO_PBKDF2_HMAC_SHA256
|
|
{ "/PBKDF2_HMAC_SHA256", (intptr_t) &be_class_pbkdf2_hmac_sha256 },
|
|
#endif // USE_BERRY_CRYPTO_PBKDF2_HMAC_SHA256
|
|
|
|
#ifdef USE_BERRY_CRYPTO_RSA
|
|
{ "/RSA", (intptr_t) &be_class_rsa },
|
|
#endif // USE_BERRY_CRYPTO_PBKDF2_HMAC_SHA256
|
|
|
|
#ifdef USE_BERRY_CRYPTO_SHA256
|
|
{ "/SHA256", (intptr_t) &be_class_sha256 },
|
|
#endif // USE_BERRY_CRYPTO_SHA256
|
|
|
|
#ifdef USE_BERRY_CRYPTO_SPAKE2P_MATTER
|
|
{ "/SPAKE2P_Matter", (intptr_t) &be_class_SPAKE2P_Matter },
|
|
#endif // USE_BERRY_CRYPTO_SPAKE2P_MATTER
|
|
|
|
};
|
|
const size_t be_crypto_members_size = sizeof(be_crypto_members)/sizeof(be_crypto_members[0]);
|
|
|
|
|
|
/* @const_object_info_begin
|
|
|
|
class be_class_rsa (scope: global, name: RSA) {
|
|
rs256, static_func(m_rsa_rsassa_pkcs1_v1_5)
|
|
}
|
|
|
|
class be_class_aes_ccm (scope: global, name: AES_CCM) {
|
|
.p1, var
|
|
.p2, var
|
|
|
|
init, func(m_aes_ccm_init)
|
|
encrypt, func(m_aes_ccm_encrypt)
|
|
decrypt, func(m_aes_ccm_decrypt)
|
|
tag, func(m_aes_ccm_tag)
|
|
|
|
decrypt1, static_func(m_aes_ccm_decrypt1)
|
|
encrypt1, static_func(m_aes_ccm_encrypt1)
|
|
}
|
|
|
|
class be_class_aes_gcm (scope: global, name: AES_GCM) {
|
|
.p1, var
|
|
.p2, var
|
|
|
|
init, func(m_aes_gcm_init)
|
|
encrypt, func(m_aes_gcm_encryt)
|
|
decrypt, func(m_aes_gcm_decryt)
|
|
tag, func(m_aes_gcm_tag)
|
|
}
|
|
|
|
class be_class_aes_ctr (scope: global, name: AES_CTR) {
|
|
.p1, var
|
|
|
|
init, func(m_aes_ctr_init)
|
|
encrypt, func(m_aes_ctr_run)
|
|
decrypt, func(m_aes_ctr_run)
|
|
}
|
|
|
|
class be_class_aes_cbc (scope: global, name: AES_CBC) {
|
|
decrypt1, static_func(m_aes_cbc_decrypt1)
|
|
encrypt1, static_func(m_aes_cbc_encrypt1)
|
|
}
|
|
|
|
class be_class_ec_p256 (scope: global, name: EC_P256) {
|
|
public_key, static_func(m_ec_p256_pubkey)
|
|
shared_key, static_func(m_ec_p256_sharedkey)
|
|
ecdsa_sign_sha256, static_func(m_ec_p256_ecdsa_sign_sha256)
|
|
ecdsa_verify_sha256, static_func(m_ec_p256_ecdsa_verify_sha256)
|
|
ecdsa_sign_sha256_asn1, static_func(m_ec_p256_ecdsa_sign_sha256_asn1)
|
|
ecdsa_verify_sha256_asn1, static_func(m_ec_p256_ecdsa_verify_sha256_asn1)
|
|
mod, static_func(m_ec_p256_mod)
|
|
neg, static_func(m_ec_p256_neg)
|
|
muladd, static_func(m_ec_p256_muladd)
|
|
mul, static_func(m_ec_p256_mul)
|
|
}
|
|
|
|
class be_class_ec_c25519 (scope: global, name: EC_C25519) {
|
|
public_key, func(m_ec_c25519_pubkey)
|
|
shared_key, func(m_ec_c25519_sharedkey)
|
|
}
|
|
|
|
class be_class_sha256 (scope: global, name: SHA256) {
|
|
.p, var
|
|
|
|
init, func(m_hash_sha256_init)
|
|
update, func(m_hash_sha256_update)
|
|
out, func(m_hash_sha256_out)
|
|
}
|
|
|
|
class be_class_hmac_sha256 (scope: global, name: HMAC_SHA256) {
|
|
.p, var
|
|
|
|
init, func(m_hmac_sha256_init)
|
|
update, func(m_hmac_sha256_update)
|
|
out, func(m_hmac_sha256_out)
|
|
}
|
|
|
|
class be_class_pbkdf2_hmac_sha256 (scope: global, name: PBKDF2_HMAC_SHA256) {
|
|
_f, static_func(m_pbkdf2_hmac_sha256_f)
|
|
//_f, static_closure(_f_closure) // this is the slow Berry reference version
|
|
derive, closure(PBKDF2_HMAC_SHA256_closure)
|
|
}
|
|
|
|
class be_class_hkdf_sha256 (scope: global, name: HKDF_SHA256) {
|
|
derive, static_func(m_hkdf_sha256_derive)
|
|
}
|
|
|
|
module crypto (scope: global) {
|
|
member, func(be_class_crypto_member)
|
|
random, func(m_crypto_random)
|
|
}
|
|
|
|
@const_object_info_end */ |