00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00100 #ifndef _ASN1TYPE_H_
00101 #define _ASN1TYPE_H_
00102
00103 #include <limits.h>
00104 #include <stdio.h>
00105 #include <string.h>
00106 #include <stddef.h>
00107 #include <setjmp.h>
00108 #include <stdlib.h>
00109 #ifndef _WIN32_WCE
00110 #include <time.h>
00111 #endif
00112
00113 #ifdef _NUCLEUS
00114 #ifndef NUCLEUS
00115 #include <nucleus.h>
00116 #endif
00117 #else
00118
00119 #if !defined(_MSC_VER) && !defined(__GNUC__) && !defined(_16BIT) && !defined(__SYMBIAN32__)
00120 #include <wchar.h>
00121 #endif
00122
00123 #endif
00124
00125 #include "rtxsrc/rtxExternDefs.h"
00126 #include "rtxsrc/rtxSList.h"
00127 #include "rtxsrc/rtxStack.h"
00128 #include "rtxsrc/rtxUTF8.h"
00129
00130
00169 #include "rtsrc/asn1tag.h"
00170 #include "rtsrc/asn1ErrCodes.h"
00171 #include "rtsrc/asn1version.h"
00172 #include "rtsrc/rtExternDefs.h"
00173
00174
00175
00176
00177
00178 #define XM_SEEK 0x01
00179 #define XM_ADVANCE 0x02
00180 #define XM_DYNAMIC 0x04
00181 #define XM_SKIP 0x08
00182 #define XM_OPTIONAL 0x10
00183
00184
00185
00186 #define ASN_K_MAXDEPTH 32
00187 #define ASN_K_MAXENUM 100
00188 #define ASN_K_MAXERRP 5
00189 #define ASN_K_MAXERRSTK 8
00190
00191 #ifndef ASN_K_ENCBUFSIZ
00192 #define ASN_K_ENCBUFSIZ 16*1024
00193 #endif
00194
00195 #ifndef ASN_K_MEMBUFSEG
00196 #define ASN_K_MEMBUFSEG 1024
00197 #endif
00198
00199 #define OSRTINDENTSPACES 3
00200
00201
00202
00203 #define ASN1_K_PLUS_INFINITY 0x40
00204 #define ASN1_K_MINUS_INFINITY 0x41
00205
00206 #define REAL_BINARY 0x80
00207 #define REAL_SIGN 0x40
00208 #define REAL_EXPLEN_MASK 0x03
00209 #define REAL_EXPLEN_1 0x00
00210 #define REAL_EXPLEN_2 0x01
00211 #define REAL_EXPLEN_3 0x02
00212 #define REAL_EXPLEN_LONG 0x03
00213 #define REAL_FACTOR_MASK 0x0c
00214 #define REAL_BASE_MASK 0x30
00215 #define REAL_BASE_2 0x00
00216 #define REAL_BASE_8 0x10
00217 #define REAL_BASE_16 0x20
00218 #define REAL_ISO6093_MASK 0x3F
00219
00220 #ifndef __SYMBIAN32__
00221 #include <float.h>
00222 #define ASN1REALMAX (OSREAL)DBL_MAX
00223 #define ASN1REALMIN (OSREAL)-DBL_MAX
00224 #endif
00225
00226 typedef void* ASN1ANY;
00227
00232 typedef enum { ASN1HEX, ASN1BIN, ASN1CHR } ASN1StrType;
00233
00237 typedef enum { ASN1ENCODE, ASN1DECODE } ASN1ActionType;
00238
00239
00240
00241
00250 #define ASN_K_MAXSUBIDS 128
00251
00255 typedef struct {
00257 OSUINT32 numids;
00259 OSUINT32 subid[ASN_K_MAXSUBIDS];
00260 } ASN1OBJID;
00261
00265 typedef struct {
00267 OSUINT32 numids;
00269 OSUINT64 subid[ASN_K_MAXSUBIDS];
00270 } ASN1OID64;
00271
00273 #ifdef __cplusplus
00274 #define EXTERN_C extern "C"
00275 extern "C" {
00276 #else
00277 #define EXTERN_C extern
00278 #endif
00279
00295 EXTERNRT void rtSetOID (ASN1OBJID* ptarget, ASN1OBJID* psource);
00296
00312 EXTERNRT void rtAddOID (ASN1OBJID* ptarget, ASN1OBJID* psource);
00313
00318
00319
00320
00321 typedef struct {
00322 OSUINT32 numocts;
00323 OSOCTET data[1];
00324 } ASN1OctStr;
00325
00326 #define ASN1DynOctStr OSDynOctStr
00327
00328
00329
00330
00331 typedef struct {
00332 OSUINT32 numbits;
00333 const OSOCTET* data;
00334 } ASN1DynBitStr;
00335
00336 typedef struct {
00337 OSUINT32 numbits;
00338 OSOCTET data[4];
00339 } ASN1BitStr32;
00340
00341 #include "rtxsrc/rtxBitString.h"
00342
00343 #define OSSETBIT(bitStr,bitIndex) \
00344 rtxSetBit (bitStr.data, bitStr.numbits, bitIndex)
00345
00346 #define OSSETBITP(pBitStr,bitIndex) \
00347 rtxSetBit ((pBitStr)->data, (pBitStr)->numbits, bitIndex)
00348
00349 #define OSCLEARBIT(bitStr,bitIndex) \
00350 rtxClearBit (bitStr.data, bitStr.numbits, bitIndex)
00351
00352 #define OSCLEARBITP(pBitStr,bitIndex) \
00353 rtxClearBit ((pBitStr)->data, (pBitStr)->numbits, bitIndex)
00354
00355 #define OSTESTBIT(bitStr,bitIndex) \
00356 rtxTestBit (bitStr.data, bitStr.numbits, bitIndex)
00357
00358 #define OSTESTBITP(pBitStr,bitIndex) \
00359 rtxTestBit ((pBitStr)->data, (pBitStr)->numbits, bitIndex)
00360
00394 EXTERNRT int rtMakeGeneralizedTime (OSCTXT* pctxt,
00395 const OSNumDateTime* dateTime,
00396 char** outdata,
00397 size_t outdataSize);
00398
00423 EXTERNRT int rtMakeUTCTime (OSCTXT* pctxt,
00424 const OSNumDateTime* dateTime,
00425 char** outdata,
00426 size_t outdataSize);
00442 EXTERNRT int rtParseGeneralizedTime (OSCTXT *pctxt,
00443 const char* value,
00444 OSNumDateTime* dateTime);
00445
00461 EXTERNRT int rtParseUTCTime (OSCTXT *pctxt,
00462 const char* value,
00463 OSNumDateTime* dateTime);
00464
00469
00470
00471
00472 typedef struct {
00473 OSUINT32 n;
00474 void* elem;
00475 } ASN1SeqOf;
00476
00477 typedef struct {
00478 OSUINT32 n;
00479 OSDynOctStr* elem;
00480 } ASN1SeqOfOctStr;
00481
00486 typedef struct {
00487 OSUINT32 numocts;
00488 const OSOCTET* data;
00489 } ASN1OpenType;
00490
00491 typedef struct {
00492 ASN1OpenType encoded;
00493 void* decoded;
00494 OSINT32 index;
00495 } Asn1Object;
00496
00497 typedef Asn1Object ASN1Object;
00498
00499
00500
00501 typedef struct {
00502 OSUINT32 nchars;
00503 OSUNICHAR* data;
00504 } Asn116BitCharString;
00505
00506 typedef OSUNICHAR ASN116BITCHAR;
00507
00508 typedef struct {
00509 OSUINT32 nchars;
00510 OS32BITCHAR* data;
00511 } Asn132BitCharString;
00512
00513 typedef const char* ASN1GeneralizedTime;
00514 typedef const char* ASN1GeneralString;
00515 typedef const char* ASN1GraphicString;
00516 typedef const char* ASN1IA5String;
00517 typedef const char* ASN1ISO646String;
00518 typedef const char* ASN1NumericString;
00519 typedef const char* ASN1ObjectDescriptor;
00520 typedef const char* ASN1PrintableString;
00521 typedef const char* ASN1TeletexString;
00522 typedef const char* ASN1T61String;
00523 typedef const char* ASN1UTCTime;
00524 typedef const char* ASN1VideotexString;
00525 typedef const char* ASN1VisibleString;
00526
00527 typedef const OSUTF8CHAR* ASN1UTF8String;
00528 typedef Asn116BitCharString ASN1BMPString;
00529 typedef Asn132BitCharString ASN1UniversalString;
00530
00531
00532
00533 typedef struct {
00534 int nchars;
00535 char data[255];
00536 } Asn1CharArray;
00537
00538 typedef struct {
00539 Asn1CharArray charSet;
00540 const char* canonicalSet;
00541 int canonicalSetSize;
00542 unsigned canonicalSetBits;
00543 unsigned charSetUnalignedBits;
00544 unsigned charSetAlignedBits;
00545 } Asn1CharSet;
00546
00547 typedef struct {
00548 Asn116BitCharString charSet;
00549 OSUINT16 firstChar, lastChar;
00550 unsigned unalignedBits;
00551 unsigned alignedBits;
00552 } Asn116BitCharSet;
00553
00554 typedef struct {
00555 Asn132BitCharString charSet;
00556 OSUINT32 firstChar, lastChar;
00557 unsigned unalignedBits;
00558 unsigned alignedBits;
00559 } Asn132BitCharSet;
00560
00569
00570
00583 EXTERNRT int rtValidateStr (ASN1TAG tag, const char *object_p);
00584
00585
00586
00587
00598 EXTERNRT const char* rtBMPToCString (ASN1BMPString* pBMPString,
00599 char* cstring, OSUINT32 cstrsize);
00600
00611 EXTERNRT const char* rtBMPToNewCString (ASN1BMPString* pBMPString);
00612
00626 EXTERNRT const char* rtBMPToNewCStringEx
00627 (OSCTXT *pctxt, ASN1BMPString* pBMPString);
00628
00644 EXTERNRT ASN1BMPString* rtCToBMPString (OSCTXT* pctxt,
00645 const char* cstring,
00646 ASN1BMPString* pBMPString,
00647 Asn116BitCharSet* pCharSet);
00648
00649 EXTERNRT OSBOOL rtIsIn16BitCharSet (OSUNICHAR ch,
00650 Asn116BitCharSet* pCharSet);
00651
00652
00653
00654
00666 EXTERNRT const char* rtUCSToCString (ASN1UniversalString* pUCSString,
00667 char* cstring, OSUINT32 cstrsize);
00668
00681 EXTERNRT const char* rtUCSToNewCString (ASN1UniversalString* pUCSString);
00682
00697 EXTERNRT const char* rtUCSToNewCStringEx
00698 (OSCTXT* pctxt, ASN1UniversalString* pUCSString);
00699
00715 EXTERNRT ASN1UniversalString* rtCToUCSString
00716 (OSCTXT* pctxt, const char* cstring, ASN1UniversalString* pUCSString,
00717 Asn132BitCharSet* pCharSet);
00718
00719
00720 EXTERNRT OSBOOL rtIsIn32BitCharSet (OS32BITCHAR ch,
00721 Asn132BitCharSet* pCharSet);
00722
00735 EXTERNRT wchar_t* rtUCSToWCSString (ASN1UniversalString* pUCSString,
00736 wchar_t* wcstring, OSUINT32 wcstrsize);
00737
00738
00756 EXTERNRT ASN1UniversalString* rtWCSToUCSString
00757 (OSCTXT* pctxt, wchar_t* wcstring,
00758 ASN1UniversalString* pUCSString, Asn132BitCharSet* pCharSet);
00759
00771 EXTERNRT int rtUnivStrToUTF8
00772 (OSCTXT* pctxt, const ASN1UniversalString* pUnivStr, OSOCTET* outbuf,
00773 size_t outbufsiz);
00774
00789 EXTERNRT int rtUTF8StrToASN1DynBitStr
00790 (OSCTXT* pctxt, const OSUTF8CHAR* utf8str, ASN1DynBitStr* pvalue);
00791
00808 EXTERNRT int rtUTF8StrnToASN1DynBitStr
00809 (OSCTXT* pctxt, const OSUTF8CHAR* utf8str, size_t nbytes,
00810 ASN1DynBitStr* pvalue);
00811
00816
00817
00818 typedef struct ASN1BigInt {
00819 size_t numocts;
00820 OSOCTET* mag;
00821 int sign;
00822 size_t allocated;
00823 OSBOOL dynamic;
00824 } ASN1BigInt;
00825
00826
00827
00828
00829
00830 #define ASN1_K_CCBMaskSize 32
00831 #define ASN1_K_NumBitsPerMask 16
00832 #define ASN1_K_MaxSetElements (ASN1_K_CCBMaskSize*ASN1_K_NumBitsPerMask)
00833
00834 typedef struct {
00835 OSOCTET* ptr;
00836 long len;
00837 int seqx;
00838 OSUINT16 mask[ASN1_K_CCBMaskSize];
00839 size_t bytes;
00840 int stat;
00841 } ASN1CCB;
00842
00843
00844
00845 typedef int (*ASN1DumpCbFunc) (const char* text_p, void* cbArg_p);
00846
00865 #define ALLOC_ASN1ARRAY(pctxt,pseqof,type) do {\
00866 if (sizeof(type)*(pseqof)->n < (pseqof)->n) return RTERR_NOMEM; \
00867 if (((pseqof)->elem = (type*) rtxMemHeapAlloc \
00868 (&(pctxt)->pMemHeap, sizeof(type)*(pseqof)->n)) == 0) return RTERR_NOMEM; \
00869 } while (0)
00870
00883 #define ALLOC_ASN1ARRAY1(pctxt,pseqof,type) do {\
00884 if (sizeof(type)*(pseqof)->n < (pseqof)->n) (pseqof)->elem = 0; \
00885 else (pseqof)->elem = (type*) rtxMemHeapAlloc \
00886 (&(pctxt)->pMemHeap, sizeof(type)*(pseqof)->n); \
00887 } while (0)
00888
00893 #define ASN1NUMOCTS(nbits) ((nbits>0)?(((nbits-1)/8)+1):0)
00894
00895 #ifdef __cplusplus
00896 }
00897 #endif
00898
00899 #include "rtsrc/rtContext.h"
00900 #include "rtxsrc/rtxCommonDefs.h"
00901 #include "rtxsrc/rtxError.h"
00902 #include "rtxsrc/rtxMemory.h"
00903
00908 #endif