问题标签 [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.

0 投票
1 回答
807 浏览

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 哈希,我可以做些什么不同的事情,为什么签名彼此不同?

谢谢

0 投票
3 回答
3033 浏览

c - 如何使用 mbedtls 以 aes 方式加密字符串?

我们都知道mbedtls库是一个非常轻量级的c库。我想使用该库来加密字符串。所以我有这样的功能:

aes_encrypt.h:

和实施:

我像下面这样调用函数:

我得到如下错误消息:

谁能帮助我并解释错误消息的含义是什么?谢谢。

0 投票
0 回答
319 浏览

qt - 在 QT 中使用 mbedTLS 作为 SSL 库

默认情况下,QT 在编译期间查找 OpenSSL 标头以启用对代码中加密/SSL 的支持。由于几个原因,我想在我的代码中使用 mbedTLS,并希望 QT 也将其用作加密库。有没有人能够做到这一点?

0 投票
1 回答
253 浏览

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)

谢谢,

问候。

0 投票
0 回答
84 浏览

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 值时,它就会崩溃。有什么帮助吗?谢谢

0 投票
0 回答
101 浏览

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 的加密/解密操作,则相同的代码可以工作。

0 投票
1 回答
59 浏览

openssl - 是否可以在同一个项目中包含 PolarSSL 和 OpenSSL?

我有一个软件,其中包括带有 openSSL 的 paho.mqtt.c。

我想在其中包含 libcurl,它是用 polarSSL(新 mbedTLS)构建的。

当我在项目中包含 polarSSL 时,我会遇到很多名称冲突:

是否可以同时包含两个库,如果是,我的错误是什么?

如果不可能,我想我应该尝试使用 polarSSL 构建 cURL 吗?

0 投票
0 回答
41 浏览

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