[xmlsec] another nss patch

Tejkumar Arora tejbiz@aol.com
Tue, 22 Jul 2003 20:05:33 -0700


This is a multi-part message in MIME format.
--------------000101050006010400010600
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Hi Aleksey,

This patch has the following changes

1. does not need certutil (sample db files are in tests/nssdb directory)
2. pkcs12 init is moved to the appropriate init function
3. add implementation of key wrap transforms (aes, des)

There are some failures in the test harness run. Some are due to lack of
support in NSS yet (ripemd160, rsa-oaep...) or due to NSS bugs
(finding cert by issuer&sn, or by ski...); some are bugs I have to
investigate; some are probably due to incorrect crls or expired certs.

Specifically:
1. --------- Negative Testing: next test MUST FAIL ----------
merlin-xmldsig-twenty-three/signature-x509-crt-crl
    Verify existing signature                               OK

/u/tej/xmlsec.linux/work/xmlsec/./apps/xmlsec1 verify --crypto-config 
./tests --X509-skip-strict-checks --trusted-der 
./tests/merlin-xmldsig-twenty-three/certs/ca.der 
./tests/merlin-xmldsig-twenty-three/signature-x509-crt-crl.xml

This succeeded because the CRL in signature-x509-crt-crl.xml does not
revoke ca.der - it revokes something else (different serial #)

2. merlin-xmlenc-five/encrypt-element-aes128-cbc-rsa-1_5
    Decrypt existing document                             Error

/u/tej/xmlsec.linux/work/xmlsec/apps/xmlsec1 decrypt --crypto-config 
./tests --pkcs12 ./tests/merlin-xmlenc-five/rsapriv.p12 --pwd secret 
./tests/merlin-xmlenc-five/encrypt-element-aes128-cbc-rsa-1_5.xml
func=xmlSecNssX509StoreVerify:file=x509vfy.c:line=228:obj=x509-store:subj=unknown:error=76:certificate 
has expirred:cert with subject name CN=Merlin Hughes, OU=X/Secure, 
O=Baltimore Technologies Ltd., ST=Dublin, C=IE has expired

The cert for Merlin Hughes is in the 
encrypt-element-aes128-cbc-rsa-1_5.xml file.


I'll be walking down the remaining error list to resolve the problems
one by one....

thanks,

-Tej






--------------000101050006010400010600
Content-Type: application/x-gzip;
 name="nsschanges.tar.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="nsschanges.tar.gz"

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
--------------000101050006010400010600--