From owner-openssl-cvs@openssl.org Wed Jan 2 10:03:10 2002 Received: by en5.engelschall.com (Sendmail 8.9.2) for openssl-cvs-L id KAA14983; Wed, 2 Jan 2002 10:02:11 +0100 (MET) Received: by en5.engelschall.com (Sendmail 8.9.2) for openssl-cvs@openssl.org id KAA14966; Wed, 2 Jan 2002 10:01:47 +0100 (MET) Date: Wed, 2 Jan 2002 10:01:47 +0100 (MET) Message-Id: <200201020901.KAA14966@opensource.ee.ethz.ch> From: levitte@openssl.org Subject: cvs commit: openssl-play/levitte/patches/openssl-0.9.6x - New directory To: openssl-cvs@openssl.org Sender: owner-openssl-cvs@openssl.org Precedence: bulk Reply-To: openssl-dev@openssl.org X-Sender: levitte@openssl.org X-List-Manager: OpenSSL Majordomo [version 1.94.4] X-List-Name: openssl-cvs levitte 02-Jan-2002 10:01:46 openssl-play/levitte/patches/openssl-0.9.6x - New directory ______________________________________________________________________ OpenSSL Project http://www.openssl.org CVS Repository Commit List openssl-cvs@openssl.org Automated List Manager majordomo@openssl.org From owner-openssl-cvs@openssl.org Wed Jan 2 10:06:07 2002 Received: by en5.engelschall.com (Sendmail 8.9.2) for openssl-cvs-L id KAA15497; Wed, 2 Jan 2002 10:05:12 +0100 (MET) Received: by en5.engelschall.com (Sendmail 8.9.2) for openssl-cvs@openssl.org id KAA15482; Wed, 2 Jan 2002 10:05:03 +0100 (MET) Date: Wed, 2 Jan 2002 10:05:03 +0100 (MET) Message-Id: <200201020905.KAA15482@opensource.ee.ethz.ch> From: levitte@openssl.org Subject: cvs commit: openssl-play/levitte/patches/openssl-0.9.6x 20011223-01.patch 20011225-01.patch 20011227-01.patch 20011228-01.patch 20011228-02.patch 20011229-01.patch To: openssl-cvs@openssl.org Sender: owner-openssl-cvs@openssl.org Precedence: bulk Reply-To: openssl-dev@openssl.org X-Sender: levitte@openssl.org X-List-Manager: OpenSSL Majordomo [version 1.94.4] X-List-Name: openssl-cvs levitte 02-Jan-2002 10:05:01 Added: levitte/patches 20011205-01.patch 20011213-01.patch 20011220-01.patch 20011222-01.patch 20011223-01.patch 20011225-01.patch 20011228-01.patch levitte/patches/openssl-0.9.6x 20011223-01.patch 20011225-01.patch 20011227-01.patch 20011228-01.patch 20011228-02.patch 20011229-01.patch Log: Collected patches Revision Changes Path 1.3 +0 -0 openssl-play/levitte/patches/20011205-01.patch 1.1 openssl-play/levitte/patches/20011213-01.patch 1.1 openssl-play/levitte/patches/20011220-01.patch 1.1 openssl-play/levitte/patches/20011222-01.patch 1.1 openssl-play/levitte/patches/20011223-01.patch 1.1 openssl-play/levitte/patches/20011225-01.patch 1.1 openssl-play/levitte/patches/20011228-01.patch Index: 20011213-01.patch =================================================================== Return-Path: Return-Path: owner-mmx-openssl-dev@mmx.engelschall.com Received: from mmx.engelschall.com ([195.27.130.252]) by brev.stacken.kth.se (8.9.3/8.9.3) with ESMTP id SAA23458 for ; Wed, 12 Dec 2001 18:40:36 +0100 (MET) Received: by mmx.engelschall.com (Postfix/smtpfeed 1.16) id 245EE19493; Wed, 12 Dec 2001 14:24:10 +0100 (CET) Received: from opensource.ee.ethz.ch (opensource-01.ee.ethz.ch [129.132.7.153]) by mmx.engelschall.com (Postfix) with ESMTP id B8D071947D for ; Wed, 12 Dec 2001 14:24:09 +0100 (CET) Received: by en5.engelschall.com (Sendmail 8.9.2) for openssl-dev-L id NAA08962; Wed, 12 Dec 2001 13:19:09 +0100 (MET) Received: by en5.engelschall.com (Sendmail 8.9.2) via ESMTP for from smtp.AdNovum.CH id NAA08929; Wed, 12 Dec 2001 13:18:18 +0100 (MET) Received: from AdNovum.CH (colombo.adnovum.ch [192.168.4.164]) by smtp.AdNovum.CH (Postfix) with ESMTP id 24E813981E; Wed, 12 Dec 2001 13:13:17 +0100 (MET) Message-ID: <3C174B09.28A8EFE1@AdNovum.CH> Date: Wed, 12 Dec 2001 13:18:17 +0100 From: Eric Laroche Organization: AdNovum Informatik AG X-Mailer: Mozilla 4.74 [en] (X11; U; SunOS 5.8 sun4u) MIME-Version: 1.0 To: openssl-dev@openssl.org Subject: [PATCH] PKCS#11 code update Content-Type: multipart/mixed; boundary="------------AC91160DF4ECBBECEDA37ED8" Sender: owner-openssl-dev@openssl.org Precedence: bulk Reply-To: openssl-dev@openssl.org X-Sender: Eric Laroche X-List-Manager: OpenSSL Majordomo [version 1.94.4] X-List-Name: openssl-dev This is a multi-part message in MIME format. --------------AC91160DF4ECBBECEDA37ED8 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hi developers, I reworked some of our (AdNovum's) previously posted OpenSSL PKCS#11 code. Code robustness has been enhanced and the code is (so I hope) clearer, and better layered (into a core PKCS#11 part and a PKCS#11 token object finding (keys, certs) part). The object finding logic has been enhanced to allow 'denormalized(?)' keys and certificates to be found and loaded (e.g. private keys missing modulus attribute, or certificates missing the (rsa) key type...). The token object specification format has been widened. It is now more powerful and more intuitive, using name/value pairs, e.g.: "pkcs11:library=cryptoki&tokenlabel=eric&objectlabel=two&dologin=true" The object specification format is now open to allow the notation of such things as: 'should a sign/verify request be handled by the token or by openssl?' (non-extractable/sensitive keys vs. speed issues...). however, that has not been implemented yet; sensitive operations such as signatures are generally done by the token, verifies are done by OpenSSL (which is faster, in most cases). Some open issues are: - Thread safeness issues are not exhaustively done. - There are still some (minor) TODOs scattered in the code. - It needs, of course, more test cases, with more use patterns. Best regards, Eric -- Eric Laroche , AdNovum Informatik AG --------------AC91160DF4ECBBECEDA37ED8 Content-Type: application/x-gzip; name="pkcs11-adnovum-20011212.tar.gz" Content-Disposition: inline; filename="pkcs11-adnovum-20011212.tar.gz" Content-Transfer-Encoding: base64 H4sICLA4FzwCA3BrY3MxMS1hZG5vdnVtLTIwMDExMjEyLnRhcgDsPGtz2ki2+Wr/ig5bGYML E9t51cab7GCQE60xcAE74/K6WCE1RmOhpiRh4r07//2ec7pbL4SNnWRm9pZduxOQus/71ae7 mV3b4d7ey2c/8m939/Xuuzdv4N/dV+/29/Df3b3Xb+lf9fds993r3TdvX73efwufd/f23719 /ezNs9/hbx5GVgAoeeDad42zHB9GjsermVSM0N/+s/+Sv5nU/2xvb+gENzX7h+h/b3f37evX K/T/am/vzdu8/l+DxTzbfdL/D/97uc1i3bOdHdaZcb/fbzFpF8wWDsfHTuDe8IDNrCCqse2X mzDtS+BGEffZ6JbVnba4mU+Z6Y9FMLUi95rVP1VZm/uWwwZiaoWuzco+fq1F8uvPIE+cU7Mn leom22YnVhRNXCtkLcFnY87KU/Wg5tGD9ARm+Q7OMUBnrGUFwp7ABNRgzZPfMqOBKBbBiJi3 QPzK7Yjtg6HVNhU7g4kbslDMA5uzsetx5k5nHp9yPwpp8mw+8gBbvWuySGTBJaIiThYT154w gOZwG8jhDnN9Nag2ifF9+A5/iK0hZreBezWJWNmuEEvASkJcV/JaY6zueYwGhizgIQ9uuIPE IIwed9wwCtzRPHKFj9Jl85Aj2Uog+GTk+lZwi8KchlW2cKMJA7niv2IeIZSpcNyxa1sIo8qA cTbjwRSNxEGR37gOfIgmVkTSGwvPEwvXvwLB+Y6Lk0KEgvOmPHqvSNur5agLmRhrssg6p+DB wFFkAbkI2BqJG3ylxIJA4M8XkWvzKowAxXgAD8EkmInDLFmAFNTnTnmgxbS/TAvgTMlF0wLc OnOg78eQA0gVFBzhCHuOVmpp1b0ErQh4EzDwIPAJywsT8ZPa4KUCkGZGc/mqRqZiOeDwkRsi 7gQQYoKx+HDMrWgOloRWgNYCDCA3CnIoxtGCdIkiATwzz7rNsWTZ175YeNy5QrDv1cwSeaIU YQS82t7c4WEC0OE33BMzYGZ0m/FDZeoKzFiRpaxCDxoI4V274A/lSRTN3r98uVgsauplTQRX LyslJYfXNXIk35oC9lJufok0VMqhLkluQblsxBE7KFEoerjviADFFCBvUxFxzSMGCgyvDhvD C2kSMbcp/4K/WeCiz6nIS+4Vhqg7dlT4vMoghlkh2h9YSCwbCGTcR83+nOJc6/9NDdm5l7Ap qFMxalseKDGWRim28YBGxc+ZNZtxK1AqcQMlW8ViljnNcMyKtK/lwKaoflsYJyxfOeYCwk4o OOawfLyI7VGh/AOt8n6jHHw2+6zfORp8qfcMBp+7vc6Z2TSa7PAcXhoJ2l7nH0ZjwP71r3of xm1tsXq7Cf8/p7z5S7dn9Pswq9Nj5km3ZcJHgNirtwem0a8ys91onTbNNiTxw9MBa3cGrGWe mAMYNuhUERGCWZ7JOkfsxOg1PsPX+qHZMgfnhPfIHLQBITsCfHXWrfcGZuO0Ve8hlO5pr9vp GwwZapr9RqtunhhNSFhmGxAz48xoD1j/c73VKmSwQ0DMQZ81Ou1BzwR6O70+OzSA4vphy5A4 2+cAuwfjkbfkUwNEB5S2KG/3u0bDhM8gHgM4q/fOqygfANs3/ucUxsFL1qyf1D8Bo+WsiHB+ XkpAYeO0Z5wg/SCX/ulhf2AOTgcG+9TpNPsIu2/0zsyG0T/A+a1OnwR42jeqgGdQJ/QABaTX P8DPh6d9k+RotgdGr3faHZiddgXnfu58AUEBsfVTVCvKvNMmtkFmnd45wkV5kEqq7MtnA573 UMQktTqIg0QAAmwM0iMBK8hzkOKXtY1PLfOT0W4Y+LaDgL6YfYPoqPfMPo4xJfIvdcB8Suyj 7oA2+TFlxFXSMDOPWL15BmCaCEaNB7vom8qMSIKNz0oB6Pbfq4Qivyr0bju4nUXiKrBmUNKl YnJS+VIFei7mMnqUuXX7M03CsTVbTCtgx/dEjhS0gTslZc6dEAJeOfp1kocmyX25uYkl5AXW lbp4v1R15cXEuuEyVo/dAEIdVKtWCPUe4I6wKg25N96hfOD6UALSvL8oslhJ16kliQJK/zak qhATiM0DSvxRYNnw7/vN7W34HzvmfEbBjH+FKsG3PDae+7YMwQsOlQSOh7gIHEE8hUoJMyf/ CjkYZzeFvxXJIZRHQqTX9RUkCKh+GHq6xI4B1xRu079/bFVBh1Jl7kFOEyPJOc6nvCa1fO1W 2UQsMEVUoahCqnxOCVzNj4SAKA9zPSycc6TzrzMI8jA8jObjMRhC7arGGse9YX0gY5IxHJx3 jaHZPqu3zCYseQCAgguim/sxADl1yxcs9EQUblWWcM0E8cyu5lbgyFIxFgLoEViGNMh92+VY n+LsdWQ04ViczHEhASxDVgdkkK4dOZ+BDUSgdC34ND1TPhWgVv51YkFqparjWtuEshW1ZMKZ 3eNG/y+AOwR+cbmAukR7TpkgmDRQTDYYP/2bIv2l1FZt8rHg3dc3u38tfjPjU3yReoOVAvCD D9HQTd+V6xKkD8hzrMgCZQZzWy54QyywbXYjXId8TkoQ6HSjspyyraRa2fzfzY2Xyi/CW9/e StXdEm50O8OKYYyzQV7PyaNxzgXptBxWyCs3XLAkpaoPH1j7tNWqMAC+AdXLPPAPNjd+g2ly wM5Hzx0FuBD5AAvBiRVsV3D8QfIeYgq+a/Y7S6+ueHSkTKGFaxEY1jgeNoafss/z04h8y3P/ zeMZZvwoP3i8jODotN3ADDZsmf3BsDvo5efMXL8BMWEEJRlOAaNg5e2KZK+KVl3FuATw1JPV X1Bv25U74DdRL4BDDsyLTrTEFTiBpKGye7D5m7QaA8xiBMu3CbNiw1atEqz0LG3lYAE6yjCl J3LrHikyJNVigBxDdIE1FStjjQgZfgg1sR8NeRDA2gGXDqE7dT1dQsNK2obiXkYIDNPvMRXB M/RNhEB9C2k/EwgTHgZBRCirVGm2Q58vmDWGAIFQLKT7+iADn90CUJlVBANTgYgj15fC5+S8 2v4TgOWU8DXD5BdZV2HSqA+k8UsO8nKiRQLmLVxsUHCDRQkGWm7PIXPe7oS4lIlA5uSnG12g YNBr7JVLKXIUrA8vwkqpyvRX9lziZ3+Pkb1npb/5c8/7WKpUFFngpxYkjtghYz9Le6RuIIF4 QpQteNnQE5ZD0ZkeQoCHzxBPNza2t1WUL2lmS5BoP7ISgNZPaqEogWJhMKDdSHw7maLcfzlq xKLUXH8gJmFRA6HaAmvbUixtQYlxO3Mx7d6yLO5KTYNaxTIwobQJ1qlC4PBoqD60jS9VbQ+9 IU4adjtUtQ71igXkS0CuBJgVwJBff9vcoGAYG4iOrpVO12hD4T+cArnCLocQY8S4vK2CLkJb FS7XJRMq1WHnaHhinEDFjADTtClZY8yrYnqEUgDXpj6EM8gLKCzIgyGPFAVVtltlyzSmYJBz BpCgYM0Lq2SEkE8sap6a1kJ7wllaHWhbUNUI70a6uuMGUEOALrFwQRe5nY6EF9Zi032OCNAs YyK1b0pBLbMbp0UdtbKw0lQWgki88SIVbgIV9l7MLtEdZbCQkTdmWSU5FSlABACUvd/MaPl5 WsvaPsYB54nk0lTsFlMhHf6ylEIqo5IK8k2+k8p0KHREQVJZClYyzJKUMFspbERSQZWwFKtS tH94MausFI50cvRqK7ii9h9EyCrU+czywJjgo7iu3VlCwPzOsRxSIB5iUMuncyxlo4Wzl5iH Es2yhaDpXPkCe8AiDN0RpB5KYrq0DiMxq8U27/CsucuHbmhDWFPJr6y5PvW9nB88BuPcT7nB PRiJQ+sKFg3f5PjF9rmZ1sSaikj0oCy0l7HQIsPMW2TAV1WuSzYZpJVzj1XGgSEzSYWGZe7k qJg/bKDkjW03MbbVUsrBWSmnPhQvHlVyIw4FjSuCvFxAj01Z7OVkQ+UmmBJNTwtqPxZUam4s rKqe8uGFs0Jw8RBtDWsuAlZntb4xaHZanU9me50cXCDPhJO1dLNcJj9/rni618ALUN2pvq7Z pj4B1uwFyusmFX05X21WQZa0goCyX4OowKgNWabCUxhBQ+AjejB+TReyc+yiwNINK9L8O1ys Fz0HJ+S+fkFqpyVgBb7Kbyli6EXKtF6lTSvNWcq8UtPz3xGc9FdAXWh42YfJzNVviMTvaKeg zka91TqsN44fb6sp0TzIXrPLyxSXdy4Rc9JYx8KLCFxp5c35dAbBRu2k457eCHdH9PJSBfSq bA9VpYGpDUP8yMQI9xvCvHM4ABb355fi2pHZMrYZoCiOavG8lNHB4NWJIPcQASsZ9a/dmexM uriFO6U9Q9mURI2vKljYf/6DGB9Sv2ii761h4oSFM1pStHEiR9JjbBe+YGXLkRu0lldhYuHL CoO2oS/XJuUuy8yQ00cFx8Rk6PlGNHfa60rZLVnqIIDVpGfhTiaEb+0UYbpfRtEUVzWJ0wwj NU0EEHzTsTcbeu+IvCsC76q4mwq7qjd3IRfIJ/2zBm1R2mI683BDUPoaAKLNb/+K1qS6daU7 r9SjpkZe/IAOSGBKuqT1a5JohvZINazYaD6WVQQxSJ+CxdizrlR7irgkKtkHjNhF7S76j2pm lWWzartCcy52Lw80qxoQLp+zg/YudfCe+7g/HUdvGlZJy/lAP9QSjh/EskVYyioSZlGXsRqx GI7Zig3nEzaR4oj2y5vdv7Jev85slDmdIOH6kNGF7j9SG+h9vPsno6PcvMD5cfPpikdDhFPO WYnqNsvDKRDe+XQ4s8JwIaDet0eZNHxnakZjBlo7h7j5SDuGR2ajjl3MbRaI8EBbNNJwIO0A P6Iw4OscpHKF7TdlpFboYySSHGD3OlahPUKUF/uXmebYVoaPLYycd7fEyH7NSBk57fkwzXc6 yciBfcEWXK2XZG8fd2k2UnEiKUliQWdI+vAiXL8mAbays1MNuezzVFuuKgNt6W/hfDYLeAhG /LGgwsmoc+OR5UyWiDWrmk/GYNgweoNH1jNaroXtiWx/gmI5GB0WJSvNkvqfGUZ0q4xmZnj6 ZmIoeSfizTZoHhZ3HxF4Za9Uec7uZdLOz5Z2esTeZXE1d4ePLy8xNlABaGIbq9McvZZIdUdK xwSgAJMyyVhqcez6DiBvJLGwAX6LxxBRYVX2k55ayUQGdaoF6KP1fzni05mg1l6cmJmmCCWK xKQKrlU6W18URBxOlP+tpCxCcvd9LQ0YV9aCNiEDaLK3Ri1kiq5oBNmoW1GhGcMtvHX23SFO L0vaf6JZVZaSMvEgRz86AhzWm/RIis8gpmQyzbSFEOt3igvobQGXp7/kDm060RdhLerWLmEt aNmiaFL1oUxjhZkek/wscG+wZLzmtw9J8sZZF8RrnGcSvYI1BFh/XL5fytcbCa1A2J85f6fl 95TGl5242zPPwFuHoMtvyOYpKf9pkvojaHrK7WvmdpRpJpd3pbCP+a1xM0MN/Xek7uJsUGQ5 BUkBXqdyAsVBgPl0/ufPdv4nff9rPp39kAtgd97/2nu3/+r18v2vN+92n+5//Y73v0j3d1wA 026bbkzjJPSh/58Xwp4uaD1d0Hq6oPV0QevpgtbTBa2nC1pPF7SeLmg9XdB64AUtMDjjPSUp vCYAMLkPpUBgRXQlBh43jmu1mrypYOEPDSw44LviPo6RV29CPnV3rDkWyZE6qQ10/GJMLTvU UZ+nINCqUv7kwIoLN7IOkeU9LLLZxZhzTx1pFcQsnfgP6IDDmC8QhgcwKV53eeBdyvsGmrdb qgg9gVsVhFcTU4Ugbjk7wgeaZQd6zaV+emmOS2XgSS3FZVdl3x9mvx6QtI88iy4aIVYUt7w5 AHKzJ3qVUgwFltR4G6VV/9SXnYpMK/nG8ub8YPM3iUS2bCjTLkRwHeKZW09grRSCNoefvwyP jPoAogrd96ris2PjnL7Q/QooSvCiTLIVQK9IhGXF65YD6xkPFjpS5DBc9nCGEHn7fRK+4clr GVtQB+qbGZaDp8Gdue9YuOmMv0ZB2Yxb9oTqSJBvRK0HUoMWbA48yQZJOiiUfZSVfaRlP8CO xtqyjzKy1xjvlv0dR6N02yZ1PCo+/ZQ/23P36ScQhtk+6mgoiOqAnvbOWHCTPsb0fU8wLZ+s LugEYU+v8DJVjGTFiJ2PdJWLDvWowZsbq/vf8N/mKVYOhz1KscWNb7M9pA/temuIuXDFOSO1 7xG5kce3WHkENdiiwuhaE0SLIV08Gsoyj26raj1iqGPlmG48L4nRkDY4FrTB4QiqHkGuMxCt O5YrVwmFZuNlqrCm7pOoM9o/pTSbPqmdekxXSYIb7JVt3yPNSgZe3IK/wUYsXv7sHGd68Hvl UqKI+CbWi7BUJTOlw2Rt8BuAQETItvM8nAzJAvHxwUN11qi3IVLTboZ6iQa+QlmkJXYxE2E0 E0AbiIdjcpnSDQNaKEtzHJMCx2UQfpWVdnZYI38RYmfnn/4//VJ8iQrbnqSI7NT4nDoU/riI eM9K8Wl88Noz+TQj5pqeo17Kc3EHecgaefbp1PLnY1hnwboYljlODl2fEo+RtoZaeobZLDKY 3JDKgwjC819hjgwVqzCfhRlENPhB4LU6oKCxA3cWLYtY85zcMiNU6nMzmYc7HQXMLw9EX914 BI0PMAH1+TEWkDLKeAuK+jsKfZGVFg5cRWdxzLh5NKkb47EHMaCcOkir88a6Z4ctOiUpb4rj z1nROWHw2sxB+tyJTX0CdWiPlpImhKN+C6KK2QQf0qcX1SaY2v1Qd3HUzVW6BSkY9kGwZFTd iRGXh5jjBoM8y1xlPLJTl4MUIUn+o2P6Dv53Gw9JbicnIRUNF7uX8i1l94L3e5f33Pl5qISJ j6WiQ57gLbxIAm878qB2vgYpPv/3uxQdMlkD6IWYew7qBwswqucAfj6Jj7jO45Sb787l1Th3 A+Sl9E0A7k7hSX4qTEAk6nzWuZhf4XoJLSuAOjLZTqV0NBGew9W107I8NGFbYUT6gVJWbUNX 2a/zUL3RO9M1dXcVG0UBH4M9+zanH7gAN6fFzgjSS1n4yVv0OqhiqCJPfqKB6/PCBRvbP6Vs 5GAzs7GtRwD3itOyGW/HVNShG920RjmquwJujddIPwKXcyRsWj1Y0vNkjaU723w6i26VYasi 6l4TWWC1gM9trPzZ1r95ILYkjBi2XGE6rgURAq/QhcqF8E4s3YrO6ratfghDKxbA6M3Sb44x lzLYU/GlVuY8e+o+FwmrWvTJjv+qIPI7hvLCuFN0/Skbt+Xp5HQk2tzIhqI14863L23WvTek ylxkYq0DOatK3JUhhL3w5jqKgL84Wk0kdNRG9v6zFnbH95JrI5gSs1dHrlxwsvlMewj9PgP+ kAIBFLLTjBguMyJLU00Zuxj/AN+tRwBdOg84dg3AL3yh7wrJ0Itv8GcWJLaVtEw5rM19N5wm 9CRxwY+DPqzfnXiDhG5dQvTV3kfBALmOgYEpc7rCRD89g/LABoLA/QAMYHKePOX2hRgg7eHI qf7ZHpUntFxOYtBLgjlISzWWQVq6Ka+QUsyIXL1ZIfC0zEBo+Rs3D/R0bJ8VOjip/J7KbKm7 ofoYSSTAbgfika2OP7fLd9qt84e7/XfpnaDAH9g/uY/iBzVQylOB9UcgRpBqb9HPsHiiX39J jnzq36sCZ8MtaPIx+YstQ/ChIbNuoJyiVB2Hs9Tx0XSXRFtEukWin63ZH9ESq5TREGOIazdJ Yon/kEZJgXJSnRJ8u6pNkk0bfS3IpO7MDrh/4a0lU8MP6fV2XvD5AZVHdz7uo2RFz2PF+29v eKAUZbcjRvHwVkeccO5Zn8co9ITHdBFgjTJ9EDI94eyP7QOolFeUU5I64huSyqBzbLRlViFU f/a0QvT+gXmFhP7AxHIvzX9kZkkqVWV6+PMWAOjvuQwTW0c6xcQP18wxsfRUkknm6x8jQRgy zUjLxAiPRyuM9mDpeLyufBneR+B+pE7CPzi3FOqnowjQyFdc/r43LSYG80PyYhHtqcRIr9fL jIPYELItmXjPunBf+v0lGVdJ2uaAWkncc0I2906sr31OJ40aYo67y3Mv8112ZHBYb5EfuPxk ICLL69Jv+v8fe//ankaSJAzD89X+FdWadyzwIFlHd7c17lksIZu1BFpAdns9fbElKEk1RsBQ YFk7089vf+OUp6qsAiTZ3Tu3+todi6w8REZGRkZGxuGY3qZV+8NJFDnlujIbvqtSssHk2vYH 6gVuePIsixcZnB9cfegtE3npaaP6rlo/QtsX4pStY7LKr3DiAOqA47RpU0wmSzEdVOpyYJ6z Ie05NFkaXseDAUfapB7EoJD7sCW9AIOmqjgGFdHWIYoN/mxcyTwzWPXOkbrQ86wdHtb2O/V3 taMPOM96o96pySRTE5xIgD+BHCQLuiwO4qt4qu7Hwxkp1dC2lMFIYLdEyXg9aD17r8vQEpg1 TePxQNk6aFDRG8CY4rPuZEUYU+pNIjyLBjlikuYy61Qry724vPwVHqbMEDkiWl6FJYEZ9ReY PdXyjYzlyw2YkPWqrPHcgbl2gyp7xrc/3102JT7GwqkZYnnpVAgU1aPDaXoMhvXUGiDF2/wj Bc+83dSdfjJscwmgJ8+ug6UBT/PaO4G+UGd+4DEmySAaXkwv/VC7Q8XDk3h4FA2XgjcNbWEX OVByWhm2j1oAu9njaRn8Ol1lj8ClABc/3uUgd8/QO4K+QGd3uyqaIb/FXdFiL3e4LM6mvWAa oxv1HC4KFTtQz8NA5Uv5W19SWcwxKuHMFdVS6d7hjnp61Gy8Dob847iGttD19jGZoD21FdIq ODE9k8Tp6nTH1bXFUsy2XZOQOfgDQ/98fL7zy+/5Jqxn1v6NrsJ6cW/XaslL9PzpLnKLHkr8 jvlXVWd2fF2VgBPDhVWiLoa+yv3PixbrAqi/60tgKuAvToR87Dd892uzu/zh2JzdV8puz3QQ 6GHwVMdaNW11MGi7u7tsgzmBoZVSwwxHSo184G5JMHb//2Zkg2YRpZh2UxAHfwHuHMR//jNP R6mMHGZrq42cD4zfZRBsFEgGwR/jXwDHbsd78gyYRXguxhdW1OSg/H5xbiOdsP6IrLQ5VoGe K8L1qpRCBcWuE3TD3wx06tKo34X/hAJ3hQ5AXgytbLyOjKaRDUVU+A80/qYBkmDj2UaFY0QY XQEmRJmqS/3ZIFrVofFdIHQvIv6kBXZnRVnufxvdtClUnQg7OeLo3J7CL6meMl1VpKf8S2f2 8Zpvnu5gzu0z058IYr+mQ05bLGgvxWlVEoZbS3ROcHar6/wA7S40v5pAgpxcY4E3DHqDX8SK kV/r0Y4xxySm1m5jVAzYLQdHNXXh5W/iGiGfeMyKa6OnY0qSo0sYXFPenMn6OpsX6Tj2DjTa dECNpvoO2GbRGBgVv+j4Q76m7RSWFZb9GAmQ6akMRvLt9yzRSuSTWxoKsREd5gmQ6TOkBhdj iu1LvygcjzEGUSezrutB3C2gt3h7o/ZeLVIO+Ef0UlPBRelHSTyJ+jpMfqd50HwBl5So94mj oa9Non/MsEpwzi5Uo7+mcK5je6eMYQZWtHNNy8oM5tnT2vFJ5wOtL8XRZ3O9XjjsReiODEf+ OWXTkpjssTZhDHQbr3Wd+awPNC4yxjY1Zc7H5o7W/jDAa5O/tDmP3pMZDqLt/6xQvMssYa1x elxrcRAeWM792pHQXzbzBh+Y76MAdbjk98dPcfgER/wZzlKyTCXPvVJvMMIXO1LGW/RqTVfR qpV/IL1k+WGCc1i9ovDvcimcw83NHd93Bix8COTwvftj97naBBXNFx3Sh7Z2geO9Ls4b+TDz MYr78R27Fev8jRQBvHptio658H2+GOIFX8RXeOigxGlcysGfZsELer70WIxK3T/+aSbWoibO JCYJ4yV1I31dR6uTiIIyxGQBjqwOaPoimk4lSR4SEm9imL6cOIq+RNdghQ2df8kxuCyXMqLG EzvAZfZWY/Pv1AXHWqIFbje/BhH6q/5THIjUZJhi0+8kUEGEYWIwqj6D5NZFW92zm2mUOMgn b1xcATU7a3i3/V9sxjIbaiOGn0SAXsqfSPGe6pQjXERJvoynZOlcz6RbG/YwTYYKhkXEYw3w vUrI8MVNfWmAqigWisDMkorH5bdiWOvdpG09Odd7yMzgkYb4kQ3gIw3bIwXQI5US5PYSusFB Vla36OYrnVuy9tmVYfQb2D6ijwlul/23VfYKr8gPsv9QPyQ6pvp5VH1VO1I/qicnRxJtUBXB oXaqKwvA9QNVkPaIV+X1dvu01lK/2rVWHVg4SFGvTGF1P1Wr+b5hfYW5Uo96EsofX3d6ymeH GvHAjNZo19GAQRXUGvutDye65kHN+fm+VT1Rf5827F/t+uuG/Xe3VdtvvjMwwp/1ww/ur3Sd Ayg1kLQ71VYHjzILtgPn93Hz4PTotJ362X1V7+iyk9NXsEjd2s8nzUat0Umtq6/8uNbddH9u 6fGltqmgS3Sd/WbtENa4nu7UWgnn96tqu+aQjwM+lxwZgqz9TIFS0LBGE2Vzv6qJsoERWHy1 qkfvqx/a2fUGpAFN2jVr+wdtALraqh63TRnLGYZs9puNg2rrQ7d62nmjx4C/uycgiFCcCVWa jhchxWgk1uk2UWqp637fVNv8oeLo1JhkGgfNFtDIYb1ROwi6aLRD7trdgB8eMbaVig0iyjV0 i0NRZDqJKHIHmuForZp9ARGPLrL6mY056Eh20Ar72V2G09WEB9CaPlLdwV1tBJJRPwqD0jWZ /IC4g0nZ/hqICRDFwLgKhzd/5faDcHIR/bWMfnoRxtlI4LrW1zkxf72d6oHE6Xxp+9uI15r/ 3lY5Ya63qRPFc7t1DpaFz8DEcvc2heXgmX7SsEorlubSFicq6gJIF2b8RSNvlJVAv8iF83aS T/75+vuUcdyjerF3ZH8OF4FcZ2thcH/PijqNxNvsBusJQ2OfnzDMYnifL1zh24jMdI/Rbxd0 CaE1VIbE6nqUeiagq0rAWf70zSMj4/PVpqjbDL2+Q2KxJ8PUI1mE5NFC7jjZbnPyz/tuQ8im k2gqt5/5Herj0tubjmHv9PdP+2zBAeHwQd1W9GUMRIoRR/AUIXdFItHzKOqTxzYcC9fhDUbL 8rz6/OVPyU+ZyyeDXfavwyJ3rY5rjkI0QVXt3Zl5Osu+WpsuaG9bN5S8NzdlG7BRviMwr0oe IxfTS0VlK8L9YdiRfVswYZo8HXHAJl/EJlhvLp3qy8Q/998eY0ByCrBPQvhJtd7qvgb5LVjx lq/8Wkm3s6qmvv74/Y/P5Sv+mfr6c3d340f5TH9b348Ptuz+7Z9OrV231q6vVvtNddOu5vy2 Yaqf1I4PNrd+cGaWKcy2eL7haWEVenDWbVZrJzaO8bdVDyXa1HKki9zaXCHVA85UWuKf9tc3 3iX3FXtayb3H1OcCe577W9SJUJL5lapT238l3+Gv1Lf9V/vyDf5KfTuuqm/wV/YbjlRrYVjK lVRJdgyY6IEZB385dXaceex457HD32xM1dpWO+tXqg7PX/5KfeP5y1+pbzx/+Sv7zZp/qiQ7 hszf+uXW2XInsuWfybZbazuvlp7wdnbG22bK29k5b5tJb2dnvZ2d9nb+vLfdiW97Zr5/cHxo zcn+ma7Fc1J/pr/ynNSf6a88J/Wn56s1p3SRZySZk/3T5arMTFOc9g1Dof70fLWgSBe5/JjZ cIpH6/53s/3vZvvfzesfmFh3kzl4dzNdrkYxP7w1rJGyhb7TwD4EvKeFjOsW5Na0WZP3g+98 sY8V7/njwiAFuTWzMKQ+2JRVbXfsfWD9TNeSfSB/pr/KPpA/019lH8ifnq/2PkgVeUZS+8D6 maq1nZrUds6stq1pbXvmtW1NbNszs21ratueuW17JrddMLvt1PS2c+a3m5rfbs78kPzcmlZJ pk+Di10PLrClqSG/Mn0YfO168IWtTA35lenD4HTXg1NsZWrIL18fKbzvFuBdekm1SJX65mqt 1W7OWsksrZpWiSNp7DrSyK5XGtnVUtVuRqra1VLVbkaq2tVS1W5GqtrNSFW7uVLVriNV+eZc P6hVrYnYP9O1eCrqz/RXnoz6M/2Vp6P+9Hy1JpQu8owkU7J/WrWoXX0fNc2tms0x/R9sCmg2 8Imlgfp91K53q40DTm+2kvdpXmsOhL6S+y2nPX6iOqTkd9s736z2PzdbmXEzZVZ9UfUTHg5b zWOZqa/YPr/bR9vopw1L1Ebtk0Fvzpd0W+urvr34P6Rb4hecBxKH2zT7JTPqgdpU9s90LbqQ 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 CmeYVyEzcrPZPa42PuhA+Z5Sqw0tQO1AznwFr6c0p429Q73l6Xa5dLkYVebT5HyKnEuPC1Mj 9HzQPAb2CLNNM/3cb9n2cDMTjbX926r36vTwUFavfVzFy/dKusjmm1WQ8jGOXcfhtNlSq43l IOTcvrzl9ljU32kDexcRLF1k3xpJW/y27tlReZ98rRXx5/Tg+WxLdXCx+1luzfrvzHfmCSKB pIuykdJb6Sd9Fawi9YifExd9Sq5Nd7XTlFjN00v2gwnP8GH5h50gGk4nMXmskJcqDtGSMOcw dvc8niTTbnBF4bFKowk6s13En6MhBrL2ur6W7ytE1eTzVwm7rimBbtD7zYMF469PPnPg9dZC gddN5xJ43RSQgQVMboGI68fh2KM+m0RhgjE1RkFzHA3b7SOn3AnBTh9aVO7q7+Yoz4ri8v4R cC5WtiWMwIGqI5xcu4y7BF9AYQf8EZ+5bf0aTgMqw0algqyqzanAhTlaN6em9aVAAec0SX3N 1cU5jZxvBWo5p1Hqa66GzmnkfPMp65zaqni+3s5t5q3kVeGlF4bL52jz3Blla8xR7OU01zXm 6/hyerArLaDuy+nFqZWn+XPa2p/ylYDZJvpjnj7QbWJ9ylUN+lqkN1BaS+hrIx/nKwydxv5K i+gOi7rxoMmjRvTvTfV9rkbR39yuM1+5mN+HrlSsZ3Q6yFbIVzlmGpqPc7WPmbaZOvmKyExb 8zFHJ5lpIV/86sls/56+XU1lpon9eTGlZaYLf8VC/aUXM/p7oSoz09T5XqjVdJpmvi+g4Mzp wKk1V9fpigO+OkVqT7d16vNCGtCcHlL1cpWhTnPnW45e1NMgNcuUijTTwMPiHG1ppoF88StO s93Th3wdqitBOR9z1an+NvhtvmbV2zaPQuYpWb2d+SsX6lu9/XhkmrTq1duOPy6ihS0etrij jEI2v7NU1ULdrNtL+vscNW1OYw+FezW2TnNPjbnK2/wOsseZR4/rNk9/n6fSzWltqszV7np6 SNVZWNHrdFVYdyGdb1F3PnFjvvq3qMcCISRPE+x2561UrBTOduBUWEQ/nO3CU61QVZztwX+t mac19mAjr/IcBbIHIqfGHF2y09xTY65aObcDD09ZfEMstB0W2wxzt8JSG2HRbVCggnb6y62X q432NedvRYppp1X68xwdtXtoZGvMVVc7HXjrFGmu3eFTnxdRYrtqlJxqi+qz/Z15qnpV264E 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 Pv/3zdPv6ff0+9/+/ga2/cpGAEgFAA== --------------AC91160DF4ECBBECEDA37ED8-- ______________________________________________________________________ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majordomo@openssl.org Index: 20011220-01.patch =================================================================== Return-Path: Return-Path: owner-mmx-openssl-dev@mmx.engelschall.com Received: from mmx.engelschall.com (mmx.engelschall.com [195.27.130.252]) by brev.stacken.kth.se (8.9.3/8.9.3) with ESMTP id SAA12183 for ; Wed, 19 Dec 2001 18:45:47 +0100 (MET) Received: by mmx.engelschall.com (Postfix/smtpfeed 1.16) id 1386A194A8; Wed, 19 Dec 2001 18:44:16 +0100 (CET) Received: from opensource.ee.ethz.ch (opensource-01.ee.ethz.ch [129.132.7.153]) by mmx.engelschall.com (Postfix) with ESMTP id BD37319354 for ; Wed, 19 Dec 2001 18:44:15 +0100 (CET) Received: by en5.engelschall.com (Sendmail 8.9.2) for openssl-dev-L id SAA14708; Wed, 19 Dec 2001 18:43:40 +0100 (MET) Received: by en5.engelschall.com (Sendmail 8.9.2) via ESMTP for from congress.vhcorp.com id SAA14655; Wed, 19 Dec 2001 18:42:39 +0100 (MET) Received: by congress.vhcorp.com with Internet Mail Service (5.5.2653.19) id ; Wed, 19 Dec 2001 09:42:32 -0800 Message-ID: <0102AE2D3200D4118AE20050DACDB02E7220E0@congress.vhcorp.com> From: Leonard Janke To: "'openssl-dev@openssl.org'" Cc: "'crypt@bxa.doc.gov'" Subject: [PATCH] P7 Verification of Non-Data Types Date: Wed, 19 Dec 2001 09:42:32 -0800 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2653.19) Content-Type: multipart/mixed; boundary="----_=_NextPart_000_01C188B4.89804420" Sender: owner-openssl-dev@openssl.org Precedence: bulk Reply-To: openssl-dev@openssl.org X-Sender: Leonard Janke X-List-Manager: OpenSSL Majordomo [version 1.94.4] X-List-Name: openssl-dev This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_000_01C188B4.89804420 Content-Type: text/plain; charset="iso-8859-1" Right now verification only seem to be supported if the signed data is of type DATA. According to the standard other types can be signed, however. Here is a patch to allow verification of data types which are octet strings but not necessarily of type DATA. Leonard Janke <> ------_=_NextPart_000_01C188B4.89804420 Content-Type: application/octet-stream; name="p7doit.patch" Content-Disposition: attachment; filename="p7doit.patch" --- pk7_doit.c.org Wed Dec 19 09:34:50 2001 +++ pk7_doit.c Tue Dec 18 17:06:28 2001 @@ -67,6 +67,37 @@ void *value); static ASN1_TYPE *get_attribute(STACK_OF(X509_ATTRIBUTE) *sk, int nid); +static int PKCS7_type_is_other(PKCS7* p7) +{ + int isOther=1; + + int nid=OBJ_obj2nid(p7->type); + + switch( nid ){ + case NID_pkcs7_data: + case NID_pkcs7_signed: + case NID_pkcs7_enveloped: + case NID_pkcs7_signedAndEnveloped: + case NID_pkcs7_digest: + case NID_pkcs7_encrypted: + isOther=0; + break; + default: + isOther=1; + } + + return isOther; + +} + +static int PKCS7_type_is_octet_string(PKCS7* p7) +{ + if ( 0==PKCS7_type_is_other(p7) ) + return 0; + + return (V_ASN1_OCTET_STRING==p7->d.other->type) ? 1 : 0; +} + BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio) { int i,j; @@ -222,13 +253,22 @@ if (p7->detached) bio=BIO_new(BIO_s_null()); else { - if (PKCS7_type_is_signed(p7) && - PKCS7_type_is_data(p7->d.sign->contents)) { + if (PKCS7_type_is_signed(p7) ) { + if ( PKCS7_type_is_data(p7->d.sign->contents)) { ASN1_OCTET_STRING *os; os=p7->d.sign->contents->d.data; if (os->length > 0) bio = BIO_new_mem_buf(os->data, os->length); + } + else if ( PKCS7_type_is_octet_string(p7->d.sign->contents) ) { + ASN1_OCTET_STRING *os; + os=p7->d.sign->contents->d.other->value.octet_string; + if (os->length > 0) bio = + BIO_new_mem_buf(os->data, os->length); + } + } + if(bio == NULL) { bio=BIO_new(BIO_s_mem()); BIO_set_mem_eof_return(bio,0); @@ -943,4 +983,5 @@ end: return(1); } + ------_=_NextPart_000_01C188B4.89804420-- ______________________________________________________________________ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majordomo@openssl.org Index: 20011222-01.patch =================================================================== Return-Path: Return-Path: owner-mmx-openssl-users@mmx.engelschall.com Received: from mmx.engelschall.com (mmx.engelschall.com [195.27.130.252]) by brev.stacken.kth.se (8.9.3/8.9.3) with ESMTP id BAA18527 for ; Sat, 22 Dec 2001 01:08:03 +0100 (MET) Received: by mmx.engelschall.com (Postfix/smtpfeed 1.16) id 85C9819388; Sat, 22 Dec 2001 01:06:12 +0100 (CET) Received: from opensource.ee.ethz.ch (opensource-01.ee.ethz.ch [129.132.7.153]) by mmx.engelschall.com (Postfix) with ESMTP id 52ED919387 for ; Sat, 22 Dec 2001 01:06:12 +0100 (CET) Received: by en5.engelschall.com (Sendmail 8.9.2) for openssl-users-L id BAA18030; Sat, 22 Dec 2001 01:05:11 +0100 (MET) Received: by en5.engelschall.com (Sendmail 8.9.2) via ESMTP for from mms-o00.iijmio-mail.jp id BAA17991; Sat, 22 Dec 2001 01:04:06 +0100 (MET) Received: MMS O id fBM042921014; Sat, 22 Dec 2001 09:04:03 +0900 (JST) Received: MMS R00 id fBM041u17594; Sat, 22 Dec 2001 09:04:02 +0900 (JST) from localhost (user1.ttv.ne.jp [210.151.150.2]) for ; (authenticated) Date: Sat, 22 Dec 2001 09:04:01 +0900 (JST) Message-Id: <20011222.090401.123556927.manabu@iij.ad.jp> To: openssl-users@openssl.org Subject: Re: Mac OSX Server 10.1 (Darwin) From: Manabu Kondo In-Reply-To: References: X-Mailer: Mew version 3.0.50 on Emacs 20.7 / Mule 4.0 (HANANOEN) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-openssl-users@openssl.org Precedence: bulk Reply-To: openssl-users@openssl.org X-Sender: Manabu Kondo X-List-Manager: OpenSSL Majordomo [version 1.94.4] X-List-Name: openssl-users Dale, Date: Fri, 2 Nov 2001 09:56:36 -0800 Subject: Mac OSX Server 10.1 (Darwin) From: Dale Schell sez: > Hi all, > I am compiling libcurl for php on Mac OSX Server 10.1. I need > libcurl to support ssl. When I try to ./config for openssl 9.6b I get > this message. > > Operating system: Power Macintosh-whatever-Darwin > This system (Darwin) is not supported. See file INSTALL for details. > > Is there something I can change that will allow it to work with 10.1? How about this patch? http://www.withay.com/macosx/openssl-0.9.6b.patch But I had a 'make test problem' on OS X 10.1.2. The config and make is ok, but at 'make test', all test for RC4 failed. Does anyone have an idea or tips? Thank you --manabu ______________________________________________________________________ OpenSSL Project http://www.openssl.org User Support Mailing List openssl-users@openssl.org Automated List Manager majordomo@openssl.org Index: 20011223-01.patch =================================================================== Return-Path: Return-Path: owner-mmx-openssl-dev@mmx.engelschall.com Received: from mmx.engelschall.com (mmx.engelschall.com [195.27.130.252]) by brev.stacken.kth.se (8.9.3/8.9.3) with ESMTP id WAA02008 for ; Sun, 23 Dec 2001 22:55:42 +0100 (MET) Received: by mmx.engelschall.com (Postfix/smtpfeed 1.16) id A738319386; Sun, 23 Dec 2001 22:54:13 +0100 (CET) Received: from opensource.ee.ethz.ch (opensource-01.ee.ethz.ch [129.132.7.153]) by mmx.engelschall.com (Postfix) with ESMTP id 745D91930B for ; Sun, 23 Dec 2001 22:54:13 +0100 (CET) Received: by en5.engelschall.com (Sendmail 8.9.2) for openssl-dev-L id WAA07341; Sun, 23 Dec 2001 22:53:31 +0100 (MET) Received: by en5.engelschall.com (Sendmail 8.9.2) via ESMTP for from defiant.dfw.nostrum.com id WAA07300; Sun, 23 Dec 2001 22:52:22 +0100 (MET) Received: (from sprunk@localhost) by defiant.dfw.nostrum.com (8.11.3/8.11.3) id fBNLqH010020; Sun, 23 Dec 2001 15:52:17 -0600 Date: Sun, 23 Dec 2001 15:52:17 -0600 From: Stephen Sprunk To: openssl-dev@openssl.org Cc: exports@crypto.com Subject: [PATCH] aes integration (2nd try) Message-ID: <20011223155217.H24331@defiant.dfw.nostrum.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.16i Sender: owner-openssl-dev@openssl.org Precedence: bulk Reply-To: openssl-dev@openssl.org X-Sender: Stephen Sprunk X-List-Manager: OpenSSL Majordomo [version 1.94.4] X-List-Name: openssl-dev Okay, here's my first stab at some improvements to AES integration. . apps/openssl speed now supports aes options, works just like des. . improved efficiency of EVP calling AES . substantial AES API cleanup Coming soon: . 128-bit CFB and OFB modes . Support in more apps/openssl programs . MMX ASM code I'll leave renaming rijndael.h and crypto/rijndael/ to someone with more CVS skill :) cvs diff -Nu is at: http://defiant.dfw.nostrum.com/~sprunk/aes.diff.bz2 S -- Stephen Sprunk "So long as they don't get violent, I want to CCIE #3723 let everyone say what they wish, for I myself have K5SSS always said exactly what pleased me." --Albert Einstein ______________________________________________________________________ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majordomo@openssl.org Index: 20011225-01.patch =================================================================== Return-Path: Return-Path: owner-mmx-openssl-dev@mmx.engelschall.com Received: from mmx.engelschall.com (mmx.engelschall.com [195.27.130.252]) by brev.stacken.kth.se (8.9.3/8.9.3) with ESMTP id CAA27682 for ; Tue, 25 Dec 2001 02:27:41 +0100 (MET) Received: by mmx.engelschall.com (Postfix/smtpfeed 1.16) id 2DF3B19389; Tue, 25 Dec 2001 02:26:11 +0100 (CET) Received: from opensource.ee.ethz.ch (opensource-01.ee.ethz.ch [129.132.7.153]) by mmx.engelschall.com (Postfix) with ESMTP id EB6831930B for ; Tue, 25 Dec 2001 02:26:10 +0100 (CET) Received: by en5.engelschall.com (Sendmail 8.9.2) for openssl-dev-L id CAA07137; Tue, 25 Dec 2001 02:25:19 +0100 (MET) Received: by en5.engelschall.com (Sendmail 8.9.2) via ESMTP for from yellow.rahul.net id CAA07122; Tue, 25 Dec 2001 02:24:59 +0100 (MET) Received: by yellow.rahul.net (Postfix, from userid 2717) id 5835A8088; Mon, 24 Dec 2001 17:24:57 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by yellow.rahul.net (Postfix) with ESMTP id 2883C7F31; Mon, 24 Dec 2001 17:24:57 -0800 (PST) Date: Mon, 24 Dec 2001 17:24:56 -0800 (PST) From: Doug Kaufman To: openssl-dev@openssl.org Cc: Bureau of Export Administration Subject: DOS patch for openssl-0.9.7 Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="0-1440891037-1009243496=:48276" Sender: owner-openssl-dev@openssl.org Precedence: bulk Reply-To: openssl-dev@openssl.org X-Sender: Doug Kaufman X-List-Manager: OpenSSL Majordomo [version 1.94.4] X-List-Name: openssl-dev This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --0-1440891037-1009243496=:48276 Content-Type: TEXT/PLAIN; charset=US-ASCII Attached is a patch to allow openssl-0.9.7 to compile under DOS with DJGPP. This is based on the 20011222 tarball. Here are some comments on the changes: Configure: This allows for the DOS path names, with drive letter and either "/" or "\" path separator. The ".h" and test files are either symbolically linked or copied for algorithms which are not to be compiled in, allowing "make test" to function properly. Makefile.org: "make test" was trying to compile test.c after completing the tests in the test directory. Adding a line with a TAB after the "test:" line fixes that. crypto/bn/bn_mul.c: This is a quick fix for DJGPP and CYGWIN, but doesn't fix the underlying problem. BN_RECURSION appears to be defined for all platforms in bn.h. bn_mul.c uses the function bn_sub_part_words in a section of the code ifdef'd BN_RECURSION, but bn_sub_part_words is compiled only when OPENSSL_NO_ASM is defined or when __i386__ or __i386 are not defined. The function is NOT defined in bn_asm.c. Can we remove the ifdef for all platforms for bn_sub_part_words? crypto/des/Makefile.ssl: This fixes the paths so that both symbolic linking and copying work. crypto/rand/rand_egd.c: This excludes DJGPP from the entropy gathering daemon. Are there any platforms where egd works that are defined OPENSSL_SYS_MSDOS? If not, wouldn't it be better to add OPENSSL_SYS_MSDOS rather than __DJGPP__ to the ifdef list? tools/c_rehash.in: This allows the test for openssl to pass, even when the file is actually named "openssl.exe". util/point.sh: This is specific for DJGPP, but needs to be generalized to copy for any platform that doesn't have symbolic links. If would work for DJGPP if we changed "ln -s" to "ln", since DJGPP's ln will actually copy when hard links are requested. Would changing "ln -s" to "ln" work for other platforms without symbolic links? The other changes should be self-explanatory. Doug __ Doug Kaufman Internet: dkaufman@rahul.net --0-1440891037-1009243496=:48276 Content-Type: APPLICATION/x-gunzip; name="097.pch.gz" Content-ID: Content-Description: Content-Disposition: attachment; filename="097.pch.gz" Content-Transfer-Encoding: BASE64 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 Wvg3U4JTKJwvAAA= --0-1440891037-1009243496=:48276-- ______________________________________________________________________ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majordomo@openssl.org Index: 20011228-01.patch =================================================================== Return-Path: Return-Path: owner-mmx-openssl-users@mmx.engelschall.com Received: from mmx.engelschall.com (mmx.engelschall.com [195.27.130.252]) by brev.stacken.kth.se (8.9.3/8.9.3) with ESMTP id JAA11545 for ; Fri, 28 Dec 2001 09:02:05 +0100 (MET) Received: by mmx.engelschall.com (Postfix/smtpfeed 1.16) id 1FDC61943B; Fri, 28 Dec 2001 09:00:29 +0100 (CET) Received: from opensource.ee.ethz.ch (opensource-01.ee.ethz.ch [129.132.7.153]) by mmx.engelschall.com (Postfix) with ESMTP id CE6DE19345 for ; Fri, 28 Dec 2001 09:00:28 +0100 (CET) Received: by en5.engelschall.com (Sendmail 8.9.2) for openssl-users-L id IAA03686; Fri, 28 Dec 2001 08:59:36 +0100 (MET) Received: by en5.engelschall.com (Sendmail 8.9.2) via ESMTP for from bj.tom.com id IAA03608; Fri, 28 Dec 2001 08:58:15 +0100 (MET) Received: from huangyz ([::ffff:192.168.5.126]) (AUTH: LOGIN huangyuzhen@bj.tom.com) by bj.tom.com with esmtp; Fri, 28 Dec 2001 15:58:36 +0800 Message-ID: <04ac01c18f75$8364ee20$7e05a8c0@huangyz> From: "Huang Yuzhen" To: openssl-users@openssl.org Subject: [PATCH]: CJK character in utf8 format fix Date: Fri, 28 Dec 2001 15:59:01 +0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_04A9_01C18FB8.914076C0" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4522.1200 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200 Sender: owner-openssl-users@openssl.org Precedence: bulk Reply-To: openssl-users@openssl.org X-Sender: "Huang Yuzhen" X-List-Manager: OpenSSL Majordomo [version 1.94.4] X-List-Name: openssl-users This is a multi-part message in MIME format. ------=_NextPart_000_04A9_01C18FB8.914076C0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: 8bit Hi,all i have a patch and some meaning for those who want to create request and certificate in utf8 format use Chinese character. the issue is: i got the openssl-dev from the snapspot1224 and try a new argument "utf8" in the "req" command, it almostly look good and work fine.but when i use some Chinese character in "batch" mode (in this mode 'req' read all argument from config file,and prompt=no),it broke with error like that: :invalid utf8string:a_mbstr.c:131 at this time i change some utf8 char in the config file,it can work.so i test with prompt mode and use the same argument in order to find out which character is bad egg but it work good.it is stranger. so i decide to do some hacking. i find the bad egg character is '<<',the bad char's unicode value(UCS2) is '6280' , the utf8 form is'\xE6\x8A\x80',this value broke the openssl in batch mode.it maybe the 0x80 that the openssl could not handle.i pick up gdb to trace the process.i trace into file_gets(bss_file.c),BIO_gets (bio_lib.c) etc.. final find he def_load_bio (def_conf.c) ,there is some code eat my character from "\xE6\x8A\x80" to" \xE6\x00", i locate the code,the line 366 of def_conf.c,that is : while ((p != start) && (IS_WS(conf,*p))) p--; p++; what is IS_WS,it is macro,and it cognizance the '\x80' as '\x00',this will eat the characters. but the \x80 occour very popular in unicode you can find the unicode charts from: http://www.unicode.org/charts/PDF/U4E00.pdf , the range is from 4E00 to 9FAF.for example: the usc2 char '6280' convert into utf8 is \xE6\x8A\x80, and ucs2 '6000' convert into utf8 is 'e68080'. after bug found,i do the fix.finally i change the 'keytype.pl' to regenerate new 'conf_def.h',the meaning is change the " foreach (0 .. 127) " to "< foreach (0 .. 255)" and "0x7f" to "0xff" and such of that things. i hope the patch would help somebody and someone could add the patch into the openssl-0.9.7dev tree. the attachment is my own keysets.pl and the diff file. ;FSmUf Huang Yuzhen ------=_NextPart_000_04A9_01C18FB8.914076C0 Content-Type: application/octet-stream; name="keysets.diff" Content-Disposition: attachment; filename="keysets.diff" Content-Transfer-Encoding: quoted-printable *** keysets.pl Thu Dec 27 18:17:21 2001=0A= --- openssl-SNAP-20011224/crypto/conf/keysets.pl Sun Apr 9 21:00:17 2000=0A= ***************=0A= *** 12,20 ****=0A= $COMMENT=3D0x80;=0A= $FCOMMENT=3D0x800;=0A= $EOF=3D0x08;=0A= - $HIGHBIT=3D0x1000;=0A= =0A= ! foreach (0 .. 255)=0A= {=0A= $v=3D0;=0A= $c=3Dsprintf("%c",$_);=0A= --- 12,19 ----=0A= $COMMENT=3D0x80;=0A= $FCOMMENT=3D0x800;=0A= $EOF=3D0x08;=0A= =0A= ! foreach (0 .. 127)=0A= {=0A= $v=3D0;=0A= $c=3Dsprintf("%c",$_);=0A= ***************=0A= *** 28,39 ****=0A= $v|=3D$QUOTE if ($c =3D~ /['`"]/); # for emacs: "`'}/)=0A= $v|=3D$COMMENT if ($c =3D~ /\#/);=0A= $v|=3D$EOF if ($c =3D~ /\0/);=0A= - $v|=3D$HIGHBIT if ($c =3D~/[\x80-\xff]/);=0A= =0A= push(@V_def,$v);=0A= }=0A= =0A= ! foreach (0 .. 255)=0A= {=0A= $v=3D0;=0A= $c=3Dsprintf("%c",$_);=0A= --- 27,37 ----=0A= $v|=3D$QUOTE if ($c =3D~ /['`"]/); # for emacs: "`'}/)=0A= $v|=3D$COMMENT if ($c =3D~ /\#/);=0A= $v|=3D$EOF if ($c =3D~ /\0/);=0A= =0A= push(@V_def,$v);=0A= }=0A= =0A= ! foreach (0 .. 127)=0A= {=0A= $v=3D0;=0A= $c=3Dsprintf("%c",$_);=0A= ***************=0A= *** 46,52 ****=0A= $v|=3D$DQUOTE if ($c =3D~ /["]/); # for emacs: "}/)=0A= $v|=3D$FCOMMENT if ($c =3D~ /;/);=0A= $v|=3D$EOF if ($c =3D~ /\0/);=0A= - $v|=3D$HIGHBIT if ($c =3D~/[\x80-\xff]/);=0A= =0A= push(@V_w32,$v);=0A= }=0A= --- 44,49 ----=0A= ***************=0A= *** 125,131 ****=0A= #define CONF_COMMENT $COMMENT=0A= #define CONF_FCOMMENT $FCOMMENT=0A= #define CONF_EOF $EOF=0A= - #define CONF_HIGHBIT $HIGHBIT=0A= #define CONF_ALPHA (CONF_UPPER|CONF_LOWER)=0A= #define CONF_ALPHA_NUMERIC (CONF_ALPHA|CONF_NUMBER|CONF_UNDER)=0A= #define CONF_ALPHA_NUMERIC_PUNCT (CONF_ALPHA|CONF_NUMBER|CONF_UNDER| \\=0A= --- 122,127 ----=0A= ***************=0A= *** 133,172 ****=0A= =0A= #define KEYTYPES(c) ((unsigned short *)((c)->meth_data))=0A= #ifndef CHARSET_EBCDIC=0A= ! #define IS_COMMENT(c,a) (KEYTYPES(c)[(a)&0xff]&CONF_COMMENT)=0A= ! #define IS_FCOMMENT(c,a) (KEYTYPES(c)[(a)&0xff]&CONF_FCOMMENT)=0A= ! #define IS_EOF(c,a) (KEYTYPES(c)[(a)&0xff]&CONF_EOF)=0A= ! #define IS_ESC(c,a) (KEYTYPES(c)[(a)&0xff]&CONF_ESC)=0A= ! #define IS_NUMBER(c,a) (KEYTYPES(c)[(a)&0xff]&CONF_NUMBER)=0A= ! #define IS_WS(c,a) (KEYTYPES(c)[(a)&0xff]&CONF_WS)=0A= ! #define IS_ALPHA_NUMERIC(c,a) = (KEYTYPES(c)[(a)&0xff]&CONF_ALPHA_NUMERIC)=0A= #define IS_ALPHA_NUMERIC_PUNCT(c,a) \\=0A= ! (KEYTYPES(c)[(a)&0xff]&CONF_ALPHA_NUMERIC_PUNCT)=0A= ! #define IS_QUOTE(c,a) (KEYTYPES(c)[(a)&0xff]&CONF_QUOTE)=0A= ! #define IS_DQUOTE(c,a) (KEYTYPES(c)[(a)&0xff]&CONF_DQUOTE)=0A= ! #define IS_HIGHBIT(c,a) (KEYTYPES(c)[(a)&0xff]&CONF_HIGHBIT)=0A= =0A= #else /*CHARSET_EBCDIC*/=0A= =0A= ! #define IS_COMMENT(c,a) (KEYTYPES(c)[os_toascii[a]&0xff]&CONF_COMMENT)=0A= ! #define IS_FCOMMENT(c,a) = (KEYTYPES(c)[os_toascii[a]&0xff]&CONF_FCOMMENT)=0A= ! #define IS_EOF(c,a) (KEYTYPES(c)[os_toascii[a]&0xff]&CONF_EOF)=0A= ! #define IS_ESC(c,a) (KEYTYPES(c)[os_toascii[a]&0xff]&CONF_ESC)=0A= ! #define IS_NUMBER(c,a) (KEYTYPES(c)[os_toascii[a]&0xff]&CONF_NUMBER)=0A= ! #define IS_WS(c,a) (KEYTYPES(c)[os_toascii[a]&0xff]&CONF_WS)=0A= ! #define IS_ALPHA_NUMERIC(c,a) = (KEYTYPES(c)[os_toascii[a]&0xff]&CONF_ALPHA_NUMERIC)=0A= #define IS_ALPHA_NUMERIC_PUNCT(c,a) \\=0A= ! (KEYTYPES(c)[os_toascii[a]&0xff]&CONF_ALPHA_NUMERIC_PUNCT)=0A= ! #define IS_QUOTE(c,a) (KEYTYPES(c)[os_toascii[a]&0xff]&CONF_QUOTE)=0A= ! #define IS_DQUOTE(c,a) (KEYTYPES(c)[os_toascii[a]&0xff]&CONF_DQUOTE)=0A= ! #define IS_HIGHBIT(c,a) (KEYTYPES(c)[os_toascii[a]&0xff]&CONF_HIGHBIT)=0A= #endif /*CHARSET_EBCDIC*/=0A= =0A= EOF=0A= =0A= ! print "static unsigned short CONF_type_default[256]=3D{";=0A= =0A= ! for ($i=3D0; $i<256; $i++)=0A= {=0A= print "\n\t" if ($i % 8) =3D=3D 0;=0A= printf "0x%03X,",$V_def[$i];=0A= --- 129,166 ----=0A= =0A= #define KEYTYPES(c) ((unsigned short *)((c)->meth_data))=0A= #ifndef CHARSET_EBCDIC=0A= ! #define IS_COMMENT(c,a) (KEYTYPES(c)[(a)&0x7f]&CONF_COMMENT)=0A= ! #define IS_FCOMMENT(c,a) (KEYTYPES(c)[(a)&0x7f]&CONF_FCOMMENT)=0A= ! #define IS_EOF(c,a) (KEYTYPES(c)[(a)&0x7f]&CONF_EOF)=0A= ! #define IS_ESC(c,a) (KEYTYPES(c)[(a)&0x7f]&CONF_ESC)=0A= ! #define IS_NUMBER(c,a) (KEYTYPES(c)[(a)&0x7f]&CONF_NUMBER)=0A= ! #define IS_WS(c,a) (KEYTYPES(c)[(a)&0x7f]&CONF_WS)=0A= ! #define IS_ALPHA_NUMERIC(c,a) = (KEYTYPES(c)[(a)&0x7f]&CONF_ALPHA_NUMERIC)=0A= #define IS_ALPHA_NUMERIC_PUNCT(c,a) \\=0A= ! (KEYTYPES(c)[(a)&0x7f]&CONF_ALPHA_NUMERIC_PUNCT)=0A= ! #define IS_QUOTE(c,a) (KEYTYPES(c)[(a)&0x7f]&CONF_QUOTE)=0A= ! #define IS_DQUOTE(c,a) (KEYTYPES(c)[(a)&0x7f]&CONF_DQUOTE)=0A= =0A= #else /*CHARSET_EBCDIC*/=0A= =0A= ! #define IS_COMMENT(c,a) (KEYTYPES(c)[os_toascii[a]&0x7f]&CONF_COMMENT)=0A= ! #define IS_FCOMMENT(c,a) = (KEYTYPES(c)[os_toascii[a]&0x7f]&CONF_FCOMMENT)=0A= ! #define IS_EOF(c,a) (KEYTYPES(c)[os_toascii[a]&0x7f]&CONF_EOF)=0A= ! #define IS_ESC(c,a) (KEYTYPES(c)[os_toascii[a]&0x7f]&CONF_ESC)=0A= ! #define IS_NUMBER(c,a) (KEYTYPES(c)[os_toascii[a]&0x7f]&CONF_NUMBER)=0A= ! #define IS_WS(c,a) (KEYTYPES(c)[os_toascii[a]&0x7f]&CONF_WS)=0A= ! #define IS_ALPHA_NUMERIC(c,a) = (KEYTYPES(c)[os_toascii[a]&0x7f]&CONF_ALPHA_NUMERIC)=0A= #define IS_ALPHA_NUMERIC_PUNCT(c,a) \\=0A= ! (KEYTYPES(c)[os_toascii[a]&0x7f]&CONF_ALPHA_NUMERIC_PUNCT)=0A= ! #define IS_QUOTE(c,a) (KEYTYPES(c)[os_toascii[a]&0x7f]&CONF_QUOTE)=0A= ! #define IS_DQUOTE(c,a) (KEYTYPES(c)[os_toascii[a]&0x7f]&CONF_DQUOTE)=0A= #endif /*CHARSET_EBCDIC*/=0A= =0A= EOF=0A= =0A= ! print "static unsigned short CONF_type_default[128]=3D{";=0A= =0A= ! for ($i=3D0; $i<128; $i++)=0A= {=0A= print "\n\t" if ($i % 8) =3D=3D 0;=0A= printf "0x%03X,",$V_def[$i];=0A= ***************=0A= *** 174,182 ****=0A= =0A= print "\n\t};\n\n";=0A= =0A= ! print "static unsigned short CONF_type_win32[256]=3D{";=0A= =0A= ! for ($i=3D0; $i<256; $i++)=0A= {=0A= print "\n\t" if ($i % 8) =3D=3D 0;=0A= printf "0x%03X,",$V_w32[$i];=0A= --- 168,176 ----=0A= =0A= print "\n\t};\n\n";=0A= =0A= ! print "static unsigned short CONF_type_win32[128]=3D{";=0A= =0A= ! for ($i=3D0; $i<128; $i++)=0A= {=0A= print "\n\t" if ($i % 8) =3D=3D 0;=0A= printf "0x%03X,",$V_w32[$i];=0A= ------=_NextPart_000_04A9_01C18FB8.914076C0 Content-Type: application/octet-stream; name="keysets.pl" Content-Disposition: attachment; filename="keysets.pl" Content-Transfer-Encoding: quoted-printable #!/usr/local/bin/perl=0A= =0A= $NUMBER=3D0x01;=0A= $UPPER=3D0x02;=0A= $LOWER=3D0x04;=0A= $UNDER=3D0x100;=0A= $PUNCTUATION=3D0x200;=0A= $WS=3D0x10;=0A= $ESC=3D0x20;=0A= $QUOTE=3D0x40;=0A= $DQUOTE=3D0x400;=0A= $COMMENT=3D0x80;=0A= $FCOMMENT=3D0x800;=0A= $EOF=3D0x08;=0A= $HIGHBIT=3D0x1000;=0A= =0A= foreach (0 .. 255)=0A= {=0A= $v=3D0;=0A= $c=3Dsprintf("%c",$_);=0A= $v|=3D$NUMBER if ($c =3D~ /[0-9]/);=0A= $v|=3D$UPPER if ($c =3D~ /[A-Z]/);=0A= $v|=3D$LOWER if ($c =3D~ /[a-z]/);=0A= $v|=3D$UNDER if ($c =3D~ /_/);=0A= $v|=3D$PUNCTUATION if ($c =3D~ /[!\.%&\*\+,\/;\?\@\^\~\|-]/);=0A= $v|=3D$WS if ($c =3D~ /[ \t\r\n]/);=0A= $v|=3D$ESC if ($c =3D~ /\\/);=0A= $v|=3D$QUOTE if ($c =3D~ /['`