问题标签 [polarssl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hash - 为什么 mbedTLS ECDSA 签名依赖于散列算法?
我目前正在使用 mbedTLS(以前称为 polarSSL)库对散列消息进行签名。我目前坚持使用明显的功能:
似乎这可以正常工作,但是给定的参数有问题mbedtls_md_type_t md_alg
。此参数标识用于给定哈希的消息摘要算法。
md_alg
是在 'md.h' 中定义的枚举并描述了以下值:
enum mbedtls_md_type_t {
MBEDTLS_MD_NONE =0, MBEDTLS_MD_MD2, MBEDTLS_MD_MD4, MBEDTLS_MD_MD5,
MBEDTLS_MD_SHA1, MBEDTLS_MD_SHA224, MBEDTLS_MD_SHA256, MBEDTLS_MD_SHA384,
MBEDTLS_MD_SHA512, MBEDTLS_MD_RIPEMD160
}
由于我需要使用 SHA3 (keccak 256) 作为散列算法,mbedTLS 不提供此功能。我现在使用另一种方法进行散列,并将 SHA3 散列放入mbedtls_ecdsa_write_signature()
函数中。
作为md_alg
参数,我尝试了定义消息摘要算法的不同值,并得到以下输出:
(md_alg) + Signature: (len: length)
signature
(3) + Signature: (len: 70) 304402206AD43BB99B8D97A0890ED7295BDDF8E826AF44AA1FAC9B471EBD415078F3194C02204C0DE87286C2C2B6160B7410A7692DE0995FE79347752A1E828E829FFD981257
(4) + Signature: (len: 72) 3046022100D8C89CD146F08ECA0ACCD66AD0FAF07D8ED761602EBB5DAC8E4F2B6E9634EBC4022100897583BAE04B0B46044AD5910CC704039F7B46DDCBA46344E065687798B2E605
(5) + Signature: (len: 71) 3045022100EBDFC64BC39F77753E5255AED340CFB8946584B7D2AAF5F32A611BFF29631CFC02201233084DD8E96598483F2BEAFACD03E5D8449511A3F6BAB85175158950333084
(6) + Signature: (len: 71) 304502200E7220C8697456CA3151C967EEB2DB6AD6F9E6ACB740E7980D41582496635228022100A01FA55C71A30D042C5932498C0F69ADAB81F5026E5CC0204A304217883B814C
(7) + Signature: (len: 71) 3045022100ADBC91C37D20EA747B9854C26CFE067311C86A168FE8B06237C1D0EB2F8E6F04022004B99EE9B920B57BAE1BFFCED6BDD7ED3C48571BC4D7326F67EC90AF045AC193
(8) + Signature: (len: 71) 3045022027CC7F76558EF628370E3554B575A0FD15F55952AB2E1CC30AC51A21DEFAE1AC0221009746FF2012E005057BFF0674E78235BD08B7C54C2547CAC63EDD5B160245A309
(9) + Signature: (len: 70) 3044022059512D16AC85EB8BFDFBD488A497A0CAA28AEA0A53F280FD7FDB4297C4D49DBD02200AAD2F32B63C76B82B75F3C97F555E5D895C3A8717D5E617AAFD7E8788E4311F
如您所见,为 md_alg 选择不同的值会导致不同的签名(给定相同的哈希和 private_key)。
到目前为止,我一直在查看“ecdsa.c”源文件,但找不到为md_alg
不同输出签名选择不同值的原因。
对于使用 SHA3 哈希,我可以做些什么不同的事情,为什么签名彼此不同?
谢谢
c - 如何使用 mbedtls 以 aes 方式加密字符串?
我们都知道mbedtls库是一个非常轻量级的c库。我想使用该库来加密字符串。所以我有这样的功能:
aes_encrypt.h:
和实施:
我像下面这样调用函数:
我得到如下错误消息:
谁能帮助我并解释错误消息的含义是什么?谢谢。
qt - 在 QT 中使用 mbedTLS 作为 SSL 库
默认情况下,QT 在编译期间查找 OpenSSL 标头以启用对代码中加密/SSL 的支持。由于几个原因,我想在我的代码中使用 mbedTLS,并希望 QT 也将其用作加密库。有没有人能够做到这一点?
c - Mbed TLS rsa_context 的大小(以字节为单位)是多少?
我在 STM32F103 设备上使用 MBED-TLS。STM 32F103 器件的 SRAM 内存很小(20 KB)。
我想计算mbedtls_rsa_context使用的 ram
这该怎么做?是吗 :
sizeof(mbedtls_rsa_context) + 13 * sizeof(mbedtls_mpi) + mbedtls_mpi_size (D) + ..... + mbedtls_mpi_size (Vf)
谢谢,
问候。
c - 如何使用 mpi_read_binary() 函数?
我正在尝试使用 Polarssl RSA 库进行 RSA 公钥计算。我从这里得到库的源代码。我在尝试使用此处定义的函数名称 mpi_read_binay() 时遇到问题。我不熟悉mpi结构。我试过这样
输出 :
public_key_computation: key.N contains D25602401B019BE192561B2C8C2A4D7C8B28E0DAA0F71A78E30F598C2A5065C3F8327D71C9B53A9FD778F74F92670F2E15F72F3926511D8B676662E6DE2A793F4AF03A26A1CB3074CDAB8596B4705282C22DDD97BFC3832909B32E215BDA49C116861790FA186B4AA62DD510A298FC31F8C00F23E961E85999C2A96B2F914062EF8FF121BC5C4C8F7B2EEBC3057694D75480646B0CD3F66855E459E44BC9833012FE7F267611E1771C618698C84A3EDB090278AAF81DD3B0D9299D2A0BFBACF4AA74915B37189D5989011C289ABDABE9173401A9C99E01FA2EDEC58FB22EB56531E9AECEF8C1EEDD4771C87C87A680B97D16E224E3F98F6D32D2DD2AEBE4FB91 Segmentation fault (core dumped)
所以,问题是每当我尝试调用 mpi_read_binary() 来设置 rsa.N 值时,它就会崩溃。有什么帮助吗?谢谢
c - AES 解密失败
我正在尝试对 OpenSSL private.pem文件执行 AES 加密/解密操作。我正在从这里使用 polarssl 库进行此操作。
我使用以下代码阅读了private.pem ,
输出:
我正在尝试对buffer执行 AES 加密操作。为此,我做了以下工作,
加密的输出是:
加密的私钥是��xvI���8����˷�%�C�Քb��s��&�y�k;.����f���H֕
我不知道有什么其他方法可以打印它。然后我尝试使用以下内容解密private_encrypt ,
我得到以下输出,
输出缓冲区为��Nx���f
但是输出不应该与原始private.pem匹配吗?我在这里做错了什么?
如果我使用纯文本而不是private.pem进行使用 AES 的加密/解密操作,则相同的代码可以工作。
openssl - 是否可以在同一个项目中包含 PolarSSL 和 OpenSSL?
我有一个软件,其中包括带有 openSSL 的 paho.mqtt.c。
我想在其中包含 libcurl,它是用 polarSSL(新 mbedTLS)构建的。
当我在项目中包含 polarSSL 时,我会遇到很多名称冲突:
是否可以同时包含两个库,如果是,我的错误是什么?
如果不可能,我想我应该尝试使用 polarSSL 构建 cURL 吗?
c - 如何在多线程中使用 memory_buffer_alloc_init()?
我有一个简单的代码用于对加密消息mbedtls
执行操作。RSA decryption
我正在尝试使用多线程同时执行相同的操作。我有兴趣使用stack memory
而不是heap
. mbedtls
为基于堆栈的内存分配器提供memory_buffer_alloc.h。文件memory_buffer_alloc_init()
说,
初始化使用基于堆栈的内存分配器。基于堆栈的分配器在提供的缓冲区内进行内存管理,并且不调用 malloc() 和 free()。它将全局 polarssl_malloc() 和 polarssl_free() 指针设置为它自己的函数。(如果定义了 POLARSSL_THREADING_C,则提供的 polarssl_malloc() 和 polarssl_free() 是线程安全的)
因此,我在我的config.h
文件中添加了以下配置,
我的代码适用于单个线程。但是,当我增加线程数时,我的代码显示错误。以下是我的源代码,
如果我使用mutex
,上面的代码有效。我不想使用锁。花了很长时间。谁能告诉我我做错了什么?我该如何解决?
以前,我使用堆内存,我问为什么多个 pthread_create() 调用同一个函数最终会出现分段错误?. 感谢@Ingo Leonhardt @AlexM 的快速解决方案。我能够使用堆内存使用多线程。
源代码可在此处获得:https ://github.com/AlamShariful/stackMemory_multithread