summaryrefslogtreecommitdiff
path: root/xmlsecurity
diff options
context:
space:
mode:
authorMichael Mi <mmi@openoffice.org>2004-07-26 05:15:42 +0000
committerMichael Mi <mmi@openoffice.org>2004-07-26 05:15:42 +0000
commit568e4e8c2e5f4a6b9351a3880f97c23a0c5a0f48 (patch)
treea4e6e455d4af7f986c87994989f84adfd205cbbb /xmlsecurity
parent2c16e861d922a9ab9150083e1e7311727f78dc23 (diff)
Issue number:
Submitted by: Andrew Fan Reviewed by: Provide big integer convertor.
Diffstat (limited to 'xmlsecurity')
-rw-r--r--xmlsecurity/source/xmlsec/biginteger.cxx149
-rw-r--r--xmlsecurity/source/xmlsec/makefile.mk5
-rw-r--r--xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx120
-rw-r--r--xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx82
4 files changed, 156 insertions, 200 deletions
diff --git a/xmlsecurity/source/xmlsec/biginteger.cxx b/xmlsecurity/source/xmlsec/biginteger.cxx
new file mode 100644
index 000000000000..b4c985cd2e0f
--- /dev/null
+++ b/xmlsecurity/source/xmlsec/biginteger.cxx
@@ -0,0 +1,149 @@
+/*************************************************************************
+ *
+ * $RCSfile: biginteger.cxx,v $
+ *
+ * $Revision: 1.1 $
+ *
+ * last change: $Author: mmi $ $Date: 2004-07-26 06:15:41 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#include <xmlsec/xmlsec.h>
+#include <xmlsec/bn.h>
+#include <com/sun/star/uno/Sequence.hxx>
+
+using namespace ::com::sun::star::uno ;
+using ::rtl::OUString ;
+
+Sequence< sal_Int8 > numericStringToBigInteger (
+ OUString numeral
+) {
+ if( numeral.getStr() != NULL ) {
+ xmlChar* chNumeral ;
+ const xmlSecByte* bnInteger ;
+ xmlSecSize length ;
+ xmlSecBn bn ;
+
+ rtl::OString onumeral = rtl::OUStringToOString( numeral , RTL_TEXTENCODING_ASCII_US ) ;
+
+ chNumeral = xmlStrndup( ( const xmlChar* )onumeral.getStr(), ( int )onumeral.getLength() ) ;
+
+ if( xmlSecBnInitialize( &bn, 0 ) < 0 ) {
+ xmlFree( chNumeral ) ;
+ return NULL ;
+ }
+
+ if( xmlSecBnFromDecString( &bn, chNumeral ) < 0 ) {
+ xmlFree( chNumeral ) ;
+ xmlSecBnFinalize( &bn ) ;
+ return NULL ;
+ }
+
+ xmlFree( chNumeral ) ;
+
+ length = xmlSecBnGetSize( &bn ) ;
+ if( length <= 0 ) {
+ xmlSecBnFinalize( &bn ) ;
+ return NULL ;
+ }
+
+ bnInteger = xmlSecBnGetData( &bn ) ;
+ if( bnInteger == NULL ) {
+ xmlSecBnFinalize( &bn ) ;
+ return NULL ;
+ }
+
+ Sequence< sal_Int8 > integer( length ) ;
+ for( unsigned int i = 0 ; i < length ; i ++ )
+ integer[i] = *( bnInteger + i ) ;
+ // integer[i] = *( bb + sizeof( bb ) - len + i ) ;
+
+ xmlSecBnFinalize( &bn ) ;
+ return integer ;
+ }
+
+ return NULL ;
+}
+
+OUString bigIntegerToNumericString (
+ Sequence< sal_Int8 > integer
+) {
+ OUString aRet ;
+
+ if( integer.getLength() ) {
+ xmlSecBn bn ;
+ xmlChar* chNumeral ;
+
+ if( xmlSecBnInitialize( &bn, 0 ) < 0 )
+ return aRet ;
+
+ if( xmlSecBnSetData( &bn, ( const unsigned char* )&integer[0], integer.getLength() ) < 0 ) {
+ xmlSecBnFinalize( &bn ) ;
+ return aRet ;
+ }
+
+ chNumeral = xmlSecBnToDecString( &bn ) ;
+ if( chNumeral == NULL ) {
+ xmlSecBnFinalize( &bn ) ;
+ return aRet ;
+ }
+
+ aRet = OUString::createFromAscii( ( const char* )chNumeral ) ;
+
+ xmlSecBnFinalize( &bn ) ;
+ xmlFree( chNumeral ) ;
+ }
+
+ return aRet ;
+}
+
diff --git a/xmlsecurity/source/xmlsec/makefile.mk b/xmlsecurity/source/xmlsec/makefile.mk
index 30ce4ae84a8a..72a646e0a8a7 100644
--- a/xmlsecurity/source/xmlsec/makefile.mk
+++ b/xmlsecurity/source/xmlsec/makefile.mk
@@ -2,9 +2,9 @@
#
# $RCSfile: makefile.mk,v $
#
-# $Revision: 1.2 $
+# $Revision: 1.3 $
#
-# last change: $Author: mmi $ $Date: 2004-07-23 03:12:26 $
+# last change: $Author: mmi $ $Date: 2004-07-26 06:15:42 $
#
# The Contents of this file are made available subject to the terms of
# either of the following licenses
@@ -83,6 +83,7 @@ CDEFS += -DXMLSEC_CRYPTO_NSS -DXMLSEC_NO_XSLT
# --- Files --------------------------------------------------------
SLOFILES = \
$(SLO)$/baseencoding.obj \
+ $(SLO)$/biginteger.obj \
$(SLO)$/saxhelper.obj \
$(SLO)$/xmldocumentwrapper_xmlsecimpl.obj \
$(SLO)$/xmlelementwrapper_xmlsecimpl.obj \
diff --git a/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx b/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx
index 5053a6a9cd49..633f30fecb6e 100644
--- a/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx
+++ b/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: securityenvironment_mscryptimpl.cxx,v $
*
- * $Revision: 1.2 $
+ * $Revision: 1.3 $
*
- * last change: $Author: mmi $ $Date: 2004-07-19 11:36:23 $
+ * last change: $Author: mmi $ $Date: 2004-07-26 06:15:42 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -1237,119 +1237,3 @@ X509Certificate_MSCryptImpl* MswcryCertContextToXCert( PCCERT_CONTEXT cert )
return xcert ;
}
-/*-
- * This is just one temporary conversion
- */
-Sequence< sal_Int8 > numericStringToBigInteger (
- OUString serialNumber
-) {
- xmlChar* chSerial ;
- unsigned long ui ;
- unsigned char bb[5] ;
- int len ;
-
- rtl::OString oseri = rtl::OUStringToOString( serialNumber , RTL_TEXTENCODING_ASCII_US ) ;
-
- chSerial = xmlStrndup( ( const xmlChar* )oseri.getStr(), ( int )oseri.getLength() ) ;
- ui = atoi( ( const char* )chSerial ) ;
- xmlFree( chSerial ) ;
-
- bb[0] = 0;
- bb[1] = (unsigned char) (ui >> 24);
- bb[2] = (unsigned char) (ui >> 16);
- bb[3] = (unsigned char) (ui >> 8);
- bb[4] = (unsigned char) (ui);
-
- /*
- ** Small integers are encoded in a single byte. Larger integers
- ** require progressively more space.
- */
- if( ui > 0x7f ) {
- if( ui > 0x7fff ) {
- if( ui > 0x7fffffL ) {
- if( ui >= 0x80000000L ) {
- len = 5 ;
- } else {
- len = 4 ;
- }
- } else {
- len = 3 ;
- }
- } else {
- len = 2 ;
- }
- } else {
- len = 1 ;
- }
-
- Sequence< sal_Int8 > serial( len ) ;
- for( int i = 0 ; i < len ; i ++ )
- serial[i] = *( bb + sizeof( bb ) - len + i ) ;
-
- return serial ;
-}
-
-/*-
- * This is just one temporary conversion
- */
-OUString bigIntegerToNumericString( Sequence< sal_Int8 > serial )
-{
- OUString aRet;
-
- if( serial.getLength() )
- {
- long ival = 0;
-
- {
- unsigned len = serial.getLength() ;
- unsigned char *cp = ( unsigned char* )&serial[0] ;
- unsigned long overflow = 0x1ffUL << (((sizeof(ival) - 1) * 8) - 1);
- unsigned long ofloinit;
-
- if (*cp & 0x80)
- ival = -1L;
- ofloinit = ival & overflow;
-
- while (len) {
- if ((ival & overflow) != ofloinit) {
- return aRet;
- }
- ival = ival << 8;
- ival |= *cp++;
- --len;
- }
- }
-
- /*----------------------
- {
- unsigned len = serial.getLength() ;
- unsigned char *cp = ( unsigned char* )&serial[len-1] ;
- unsigned long overflow = 0x1ffUL << (((sizeof(ival) - 1) * 8) - 1);
- unsigned long ofloinit;
-
- if (*cp & 0x80)
- ival = -1L;
- ofloinit = ival & overflow;
-
- while (len) {
- if ((ival & overflow) != ofloinit) {
- return aRet;
- }
- ival = ival << 8;
- ival |= *cp--;
- --len;
- }
- }
- ----------------------*/
-
- {
- char str[10] ;
- int len ;
- len = sprintf( str, "%d", ival ) ;
- aRet = OUString::createFromAscii( str ) ;
- }
- }
-
- return aRet;
-}
-
diff --git a/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx
index 976a69254aae..9f83de2a9342 100644
--- a/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx
+++ b/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: securityenvironment_nssimpl.cxx,v $
*
- * $Revision: 1.3 $
+ * $Revision: 1.4 $
*
- * last change: $Author: mmi $ $Date: 2004-07-25 07:29:01 $
+ * last change: $Author: mmi $ $Date: 2004-07-26 06:15:42 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -919,81 +919,3 @@ X509Certificate_NssImpl* NssPrivKeyToXCert( SECKEYPrivateKey* priKey )
return xcert ;
}
-/*-
- * This is just one temporary conversion
- */
-Sequence< sal_Int8 > numericStringToBigInteger (
- OUString serialNumber
-) {
- char* chSerial ;
- unsigned long ui ;
- unsigned char bb[5] ;
- int len ;
-
- rtl::OString oseri = rtl::OUStringToOString( serialNumber , RTL_TEXTENCODING_ASCII_US ) ;
-
- chSerial = PL_strndup( ( char* )oseri.getStr(), ( int )oseri.getLength() ) ;
- ui = PORT_Atoi( chSerial ) ;
- PL_strfree( chSerial ) ;
-
- bb[0] = 0;
- bb[1] = (unsigned char) (ui >> 24);
- bb[2] = (unsigned char) (ui >> 16);
- bb[3] = (unsigned char) (ui >> 8);
- bb[4] = (unsigned char) (ui);
-
- /*
- ** Small integers are encoded in a single byte. Larger integers
- ** require progressively more space.
- */
- if (ui > 0x7f) {
- if (ui > 0x7fff) {
- if (ui > 0x7fffffL) {
- if (ui >= 0x80000000L) {
- len = 5;
- } else {
- len = 4;
- }
- } else {
- len = 3;
- }
- } else {
- len = 2;
- }
- } else {
- len = 1;
- }
-
- Sequence< sal_Int8 > serial( len ) ;
- for( int i = 0 ; i < len ; i ++ )
- serial[i] = *( bb + sizeof( bb ) - len + i ) ;
-
- return serial ;
-}
-
-/*-
- * This is just one temporary conversion
- */
-OUString bigIntegerToNumericString ( Sequence< sal_Int8 > serial)
-{
- OUString aRet;
-
- if ( serial.getLength() )
- {
- SECItem snItem ;
- long sn ;
-
- snItem.data = ( unsigned char* )&serial[0] ;
- snItem.len = serial.getLength() ;
-
- sn = DER_GetInteger( &snItem ) ;
- if( sn != ULONG_MAX )
- {
- char str[10] ;
- int len ;
- len = sprintf( str, "%d", sn ) ;
- aRet = OUString::createFromAscii( str ) ;
- }
- }
- return aRet;
-}