<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[wolfSSL - Embedded SSL Library — my god,who can help me?]]></title>
		<link>https://www.wolfssl.com/forums/topic550-my-godwho-can-help-me.html</link>
		<atom:link href="https://www.wolfssl.com/forums/feed-rss-topic550.xml" rel="self" type="application/rss+xml" />
		<description><![CDATA[The most recent posts in my god,who can help me?.]]></description>
		<lastBuildDate>Fri, 06 Jun 2014 16:55:27 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: my god,who can help me?]]></title>
			<link>https://www.wolfssl.com/forums/post1654.html#p1654</link>
			<description><![CDATA[<p>Hi zhbn,</p><p>Is your goal to build against wolfSSL&#039;s OpenSSL compatibility layer, or to convert your application over to the native wolfSSL API completely?</p><p>In the case of the former, oftentimes a good first approach is to try linking against the wolfSSL library (compiled with the OpenSSL compatibility layer enabled), and then view the feature / function gaps.&nbsp; This usually lets you begin to get a scope for the project.</p><p>Best Regards,<br />Chris</p>]]></description>
			<author><![CDATA[null@example.com (chrisc)]]></author>
			<pubDate>Fri, 06 Jun 2014 16:55:27 +0000</pubDate>
			<guid>https://www.wolfssl.com/forums/post1654.html#p1654</guid>
		</item>
		<item>
			<title><![CDATA[my god,who can help me?]]></title>
			<link>https://www.wolfssl.com/forums/post1642.html#p1642</link>
			<description><![CDATA[<p>i want to change the openssl code&nbsp; to wolfssl embedded ssl,who can help me?</p><br /><p>lockdownd_error_t lockdownd_gen_pair_cert_for_udid(const char *udid, key_data_t public_key, key_data_t *odevice_cert,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; key_data_t * ohost_cert, key_data_t * oroot_cert)<br />{<br />&nbsp; &nbsp; if (!public_key.data || !odevice_cert || !ohost_cert || !oroot_cert)<br />&nbsp; &nbsp; &nbsp; &nbsp; return LOCKDOWN_E_INVALID_ARG;</p><p>&nbsp; &nbsp; lockdownd_error_t ret = LOCKDOWN_E_UNKNOWN_ERROR;<br />&nbsp; &nbsp; userpref_error_t uret = USERPREF_E_UNKNOWN_ERROR;</p><p>&nbsp; &nbsp; ///个人理解 下面这一段代码是将 public 方式 转换成 rsa 方式<br />&nbsp; &nbsp; BIO *membio = BIO_new_mem_buf(public_key.data, public_key.size);<br />&nbsp; &nbsp; RSA *pubkey = NULL;<br />&nbsp; &nbsp; if (!PEM_read_bio_RSAPublicKey(membio, &amp;pubkey, NULL, NULL)) {<br />&nbsp; &nbsp; &nbsp; &nbsp; debug_info(&quot;Could not read public key&quot;);<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; BIO_free(membio);</p><p>&nbsp; &nbsp; /* now generate certificates */<br />&nbsp; &nbsp; key_data_t root_privkey, host_privkey;<br />&nbsp; &nbsp; key_data_t root_cert, host_cert;<br />&nbsp; &nbsp; X509* dev_cert;</p><p>&nbsp; &nbsp; root_cert.data = NULL;<br />&nbsp; &nbsp; root_cert.size = 0;<br />&nbsp; &nbsp; host_cert.data = NULL;<br />&nbsp; &nbsp; host_cert.size = 0;</p><p>&nbsp; &nbsp; dev_cert = X509_new();</p><p>&nbsp; &nbsp; root_privkey.data = NULL;<br />&nbsp; &nbsp; root_privkey.size = 0;<br />&nbsp; &nbsp; host_privkey.data = NULL;<br />&nbsp; &nbsp; host_privkey.size = 0;</p><p>&nbsp; &nbsp;//// 下面这一部分是根据X509的方式添加信息&nbsp; &nbsp;<br />&nbsp; &nbsp; uret = userpref_device_record_get_keys_and_certs(udid, &amp;root_privkey, &amp;root_cert, &amp;host_privkey, &amp;host_cert);<br />&nbsp; &nbsp; if (USERPREF_E_SUCCESS == uret) {<br />&nbsp; &nbsp; &nbsp; &nbsp; /* generate device certificate */<br />&nbsp; &nbsp; &nbsp; &nbsp; //// 串号<br />&nbsp; &nbsp; &nbsp; &nbsp; ASN1_INTEGER* sn = ASN1_INTEGER_new();<br />&nbsp; &nbsp; &nbsp; &nbsp; ASN1_INTEGER_set(sn, 0);<br />&nbsp; &nbsp; &nbsp; &nbsp; X509_set_serialNumber( dev_cert ,&nbsp; sn );<br />&nbsp; &nbsp; &nbsp; &nbsp; ASN1_INTEGER_free(sn);<br />&nbsp; &nbsp; &nbsp; &nbsp; /////版本号<br />&nbsp; &nbsp; &nbsp; &nbsp; X509_set_version(dev_cert, 2);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;////x509V3 扩展信息<br />&nbsp; &nbsp; &nbsp; &nbsp; X509_EXTENSION* ext;<br />&nbsp; &nbsp; &nbsp; &nbsp; if (!(ext = X509V3_EXT_conf_nid(NULL, NULL, NID_basic_constraints, (char*)&quot;critical,CA:FALSE&quot;))) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; debug_info(&quot;ERROR: X509V3_EXT_conf_nid failed??for Basic Constraints&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; X509_add_ext(dev_cert, ext, -1);<br />&nbsp; &nbsp; &nbsp; &nbsp; X509_EXTENSION_free(ext);</p><p>&nbsp; &nbsp; &nbsp; &nbsp; ////当前时间往后10年时间<br />&nbsp; &nbsp; &nbsp; &nbsp; ASN1_TIME* asn1time = ASN1_TIME_new();<br />&nbsp; &nbsp; &nbsp; &nbsp; ASN1_TIME_set(asn1time, time(NULL));<br />&nbsp; &nbsp; &nbsp; &nbsp; X509_set_notBefore(dev_cert, asn1time);<br />&nbsp; &nbsp; &nbsp; &nbsp; ASN1_TIME_set(asn1time, time(NULL) + (60 * 60 * 24 * 365 * 10));<br />&nbsp; &nbsp; &nbsp; &nbsp; X509_set_notAfter(dev_cert, asn1time);<br />&nbsp; &nbsp; &nbsp; &nbsp; ASN1_TIME_free(asn1time);<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; BIO* membp;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; X509* rootCert = NULL;<br />&nbsp; &nbsp; &nbsp; &nbsp; membp = BIO_new_mem_buf(root_cert.data, root_cert.size);<br />&nbsp; &nbsp; &nbsp; &nbsp; PEM_read_bio_X509(membp, &amp;rootCert, NULL, NULL);<br />&nbsp; &nbsp; &nbsp; &nbsp; BIO_free(membp);<br />&nbsp; &nbsp; &nbsp; &nbsp; if (!rootCert) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; debug_info(&quot;Could not read RootCertificate&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; } else {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; debug_info(&quot;RootCertificate loaded&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; EVP_PKEY* pkey = EVP_PKEY_new();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; EVP_PKEY_assign_RSA(pkey, pubkey);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; X509_set_pubkey(dev_cert, pkey);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; EVP_PKEY_free(pkey);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; X509_free(rootCert);<br />&nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; X509V3_CTX ctx;<br />&nbsp; &nbsp; &nbsp; &nbsp; X509V3_set_ctx_nodb(&amp;ctx);<br />&nbsp; &nbsp; &nbsp; &nbsp; X509V3_set_ctx(&amp;ctx, NULL, dev_cert, NULL, NULL, 0);</p><p>&nbsp; &nbsp; &nbsp; &nbsp; if (!(ext = X509V3_EXT_conf_nid(NULL, &amp;ctx, NID_subject_key_identifier, (char*)&quot;hash&quot;))) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; debug_info(&quot;ERROR: X509V3_EXT_conf_nid failed for Subject Key identifier&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; X509_add_ext(dev_cert, ext, -1);<br />&nbsp; &nbsp; &nbsp; &nbsp; X509_EXTENSION_free(ext);<br />&nbsp; &nbsp; &nbsp; &nbsp; if (!(ext = X509V3_EXT_conf_nid(NULL, NULL, NID_key_usage, (char*)&quot;critical,digitalSignature,keyEncipherment&quot;))) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; debug_info(&quot;ERROR: X509V3_EXT_conf_nid failed for Key Usage&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; X509_add_ext(dev_cert, ext, -1);<br />&nbsp; &nbsp; &nbsp; &nbsp; X509_EXTENSION_free(ext);</p><p>&nbsp; &nbsp; &nbsp; &nbsp; EVP_PKEY* rootPriv = NULL;<br />&nbsp; &nbsp; &nbsp; &nbsp; membp = BIO_new_mem_buf(root_privkey.data, root_privkey.size);<br />&nbsp; &nbsp; &nbsp; &nbsp; PEM_read_bio_PrivateKey(membp, &amp;rootPriv, NULL, NULL);<br />&nbsp; &nbsp; &nbsp; &nbsp; BIO_free(membp);<br />&nbsp; &nbsp; &nbsp; &nbsp; if (!rootPriv) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; debug_info(&quot;Could not read RootPrivateKey&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; } else {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; debug_info(&quot;RootPrivateKey loaded&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (X509_sign(dev_cert, rootPriv, EVP_sha1())) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ret = LOCKDOWN_E_SUCCESS;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; debug_info(&quot;signing failed&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; EVP_PKEY_free(rootPriv);<br />&nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; if (LOCKDOWN_E_SUCCESS == ret) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* if everything went well, export in PEM format */<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; key_data_t pem_root_cert = { NULL, 0 };<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; key_data_t pem_host_cert = { NULL, 0 };</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; uret = userpref_device_record_get_certs_as_pem(udid, &amp;pem_root_cert, &amp;pem_host_cert, NULL);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (USERPREF_E_SUCCESS == uret) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* copy buffer for output */<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; membp = BIO_new(BIO_s_mem());<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (membp &amp;&amp; PEM_write_bio_X509(membp, dev_cert) &gt; 0) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void *datap;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; odevice_cert-&gt;size = BIO_get_mem_data(membp, &amp;datap);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; odevice_cert-&gt;data = malloc(odevice_cert-&gt;size);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; memcpy(odevice_cert-&gt;data, datap, odevice_cert-&gt;size);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (membp)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BIO_free(membp);</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ohost_cert-&gt;data = malloc(pem_host_cert.size);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; memcpy(ohost_cert-&gt;data, pem_host_cert.data, pem_host_cert.size);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ohost_cert-&gt;size = pem_host_cert.size;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oroot_cert-&gt;data = malloc(pem_root_cert.size);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; memcpy(oroot_cert-&gt;data, pem_root_cert.data, pem_root_cert.size);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oroot_cert-&gt;size = pem_root_cert.size;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; free(pem_root_cert.data);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; free(pem_host_cert.data);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; X509V3_EXT_cleanup();<br />&nbsp; &nbsp; X509_free(dev_cert);</p><p>&nbsp; &nbsp; switch(uret) {<br />&nbsp; &nbsp; case USERPREF_E_INVALID_ARG:<br />&nbsp; &nbsp; &nbsp; &nbsp; ret = LOCKDOWN_E_INVALID_ARG;<br />&nbsp; &nbsp; &nbsp; &nbsp; break;<br />&nbsp; &nbsp; case USERPREF_E_INVALID_CONF:<br />&nbsp; &nbsp; &nbsp; &nbsp; ret = LOCKDOWN_E_INVALID_CONF;<br />&nbsp; &nbsp; &nbsp; &nbsp; break;<br />&nbsp; &nbsp; case USERPREF_E_SSL_ERROR:<br />&nbsp; &nbsp; &nbsp; &nbsp; ret = LOCKDOWN_E_SSL_ERROR;<br />&nbsp; &nbsp; default:<br />&nbsp; &nbsp; &nbsp; &nbsp; break;<br />&nbsp; &nbsp; }</p><p>&nbsp; &nbsp; if (root_cert.data)<br />&nbsp; &nbsp; &nbsp; &nbsp; free(root_cert.data);<br />&nbsp; &nbsp; if (host_cert.data)<br />&nbsp; &nbsp; &nbsp; &nbsp; free(host_cert.data);<br />&nbsp; &nbsp; if (root_privkey.data)<br />&nbsp; &nbsp; &nbsp; &nbsp; free(root_privkey.data);<br />&nbsp; &nbsp; if (host_privkey.data)<br />&nbsp; &nbsp; &nbsp; &nbsp; free(host_privkey.data);</p><p>&nbsp; &nbsp; return ret;<br />}</p>]]></description>
			<author><![CDATA[null@example.com (zhbn)]]></author>
			<pubDate>Tue, 20 May 2014 07:39:58 +0000</pubDate>
			<guid>https://www.wolfssl.com/forums/post1642.html#p1642</guid>
		</item>
	</channel>
</rss>
