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
00320 EXTERNRT OSBOOL rtOIDsEqual (const ASN1OBJID* pOID1, const ASN1OBJID* pOID2);
00321
00326
00327
00328
00329 typedef struct {
00330 OSUINT32 numocts;
00331 OSOCTET data[1];
00332 } ASN1OctStr;
00333
00334 #define ASN1DynOctStr OSDynOctStr
00335
00336
00337
00338
00339 typedef struct {
00340 OSUINT32 numbits;
00341 const OSOCTET* data;
00342 } ASN1DynBitStr;
00343
00344 typedef struct {
00345 OSUINT32 numbits;
00346 OSOCTET data[4];
00347 } ASN1BitStr32;
00348
00349 #include "rtxsrc/rtxBitString.h"
00350
00351 #define OSSETBIT(bitStr,bitIndex) \
00352 rtxSetBit (bitStr.data, bitStr.numbits, bitIndex)
00353
00354 #define OSSETBITP(pBitStr,bitIndex) \
00355 rtxSetBit ((pBitStr)->data, (pBitStr)->numbits, bitIndex)
00356
00357 #define OSCLEARBIT(bitStr,bitIndex) \
00358 rtxClearBit (bitStr.data, bitStr.numbits, bitIndex)
00359
00360 #define OSCLEARBITP(pBitStr,bitIndex) \
00361 rtxClearBit ((pBitStr)->data, (pBitStr)->numbits, bitIndex)
00362
00363 #define OSTESTBIT(bitStr,bitIndex) \
00364 rtxTestBit (bitStr.data, bitStr.numbits, bitIndex)
00365
00366 #define OSTESTBITP(pBitStr,bitIndex) \
00367 rtxTestBit ((pBitStr)->data, (pBitStr)->numbits, bitIndex)
00368
00402 EXTERNRT int rtMakeGeneralizedTime (OSCTXT* pctxt,
00403 const OSNumDateTime* dateTime,
00404 char** outdata,
00405 size_t outdataSize);
00406
00431 EXTERNRT int rtMakeUTCTime (OSCTXT* pctxt,
00432 const OSNumDateTime* dateTime,
00433 char** outdata,
00434 size_t outdataSize);
00450 EXTERNRT int rtParseGeneralizedTime (OSCTXT *pctxt,
00451 const char* value,
00452 OSNumDateTime* dateTime);
00453
00469 EXTERNRT int rtParseUTCTime (OSCTXT *pctxt,
00470 const char* value,
00471 OSNumDateTime* dateTime);
00472
00477
00478
00479
00480 typedef struct {
00481 OSUINT32 n;
00482 void* elem;
00483 } ASN1SeqOf;
00484
00485 typedef struct {
00486 OSUINT32 n;
00487 OSDynOctStr* elem;
00488 } ASN1SeqOfOctStr;
00489
00494 typedef struct {
00495 OSUINT32 numocts;
00496 const OSOCTET* data;
00497 } ASN1OpenType;
00498
00499 typedef struct {
00500 ASN1OpenType encoded;
00501 void* decoded;
00502 OSINT32 index;
00503 } Asn1Object;
00504
00505 typedef Asn1Object ASN1Object;
00506
00507
00508
00509 typedef struct {
00510 OSUINT32 nchars;
00511 OSUNICHAR* data;
00512 } Asn116BitCharString;
00513
00514 typedef OSUNICHAR ASN116BITCHAR;
00515
00516 typedef struct {
00517 OSUINT32 nchars;
00518 OS32BITCHAR* data;
00519 } Asn132BitCharString;
00520
00521 typedef const char* ASN1GeneralizedTime;
00522 typedef const char* ASN1GeneralString;
00523 typedef const char* ASN1GraphicString;
00524 typedef const char* ASN1IA5String;
00525 typedef const char* ASN1ISO646String;
00526 typedef const char* ASN1NumericString;
00527 typedef const char* ASN1ObjectDescriptor;
00528 typedef const char* ASN1PrintableString;
00529 typedef const char* ASN1TeletexString;
00530 typedef const char* ASN1T61String;
00531 typedef const char* ASN1UTCTime;
00532 typedef const char* ASN1VideotexString;
00533 typedef const char* ASN1VisibleString;
00534
00535 typedef const OSUTF8CHAR* ASN1UTF8String;
00536 typedef Asn116BitCharString ASN1BMPString;
00537 typedef Asn132BitCharString ASN1UniversalString;
00538
00539
00540
00541 typedef struct {
00542 int nchars;
00543 char data[255];
00544 } Asn1CharArray;
00545
00546 typedef struct {
00547 Asn1CharArray charSet;
00548 const char* canonicalSet;
00549 int canonicalSetSize;
00550 unsigned canonicalSetBits;
00551 unsigned charSetUnalignedBits;
00552 unsigned charSetAlignedBits;
00553 } Asn1CharSet;
00554
00555 typedef struct {
00556 Asn116BitCharString charSet;
00557 OSUINT16 firstChar, lastChar;
00558 unsigned unalignedBits;
00559 unsigned alignedBits;
00560 } Asn116BitCharSet;
00561
00562 typedef struct {
00563 Asn132BitCharString charSet;
00564 OSUINT32 firstChar, lastChar;
00565 unsigned unalignedBits;
00566 unsigned alignedBits;
00567 } Asn132BitCharSet;
00568
00577
00578
00591 EXTERNRT int rtValidateStr (ASN1TAG tag, const char *pdata);
00592
00606 EXTERNRT int rtValidateChars (ASN1TAG tag, const char* pdata, size_t nchars);
00607
00608
00609
00620 EXTERNRT const char* rtBMPToCString (ASN1BMPString* pBMPString,
00621 char* cstring, OSUINT32 cstrsize);
00622
00633 EXTERNRT const char* rtBMPToNewCString (ASN1BMPString* pBMPString);
00634
00648 EXTERNRT const char* rtBMPToNewCStringEx
00649 (OSCTXT *pctxt, ASN1BMPString* pBMPString);
00650
00666 EXTERNRT ASN1BMPString* rtCToBMPString (OSCTXT* pctxt,
00667 const char* cstring,
00668 ASN1BMPString* pBMPString,
00669 Asn116BitCharSet* pCharSet);
00670
00671 EXTERNRT OSBOOL rtIsIn16BitCharSet (OSUNICHAR ch,
00672 Asn116BitCharSet* pCharSet);
00673
00674
00675
00676
00688 EXTERNRT const char* rtUCSToCString (ASN1UniversalString* pUCSString,
00689 char* cstring, OSUINT32 cstrsize);
00690
00703 EXTERNRT const char* rtUCSToNewCString (ASN1UniversalString* pUCSString);
00704
00719 EXTERNRT const char* rtUCSToNewCStringEx
00720 (OSCTXT* pctxt, ASN1UniversalString* pUCSString);
00721
00737 EXTERNRT ASN1UniversalString* rtCToUCSString
00738 (OSCTXT* pctxt, const char* cstring, ASN1UniversalString* pUCSString,
00739 Asn132BitCharSet* pCharSet);
00740
00741
00742 EXTERNRT OSBOOL rtIsIn32BitCharSet (OS32BITCHAR ch,
00743 Asn132BitCharSet* pCharSet);
00744
00757 EXTERNRT wchar_t* rtUCSToWCSString (ASN1UniversalString* pUCSString,
00758 wchar_t* wcstring, OSUINT32 wcstrsize);
00759
00760
00778 EXTERNRT ASN1UniversalString* rtWCSToUCSString
00779 (OSCTXT* pctxt, wchar_t* wcstring,
00780 ASN1UniversalString* pUCSString, Asn132BitCharSet* pCharSet);
00781
00793 EXTERNRT int rtUnivStrToUTF8
00794 (OSCTXT* pctxt, const ASN1UniversalString* pUnivStr, OSOCTET* outbuf,
00795 size_t outbufsiz);
00796
00811 EXTERNRT int rtUTF8StrToASN1DynBitStr
00812 (OSCTXT* pctxt, const OSUTF8CHAR* utf8str, ASN1DynBitStr* pvalue);
00813
00830 EXTERNRT int rtUTF8StrnToASN1DynBitStr
00831 (OSCTXT* pctxt, const OSUTF8CHAR* utf8str, size_t nbytes,
00832 ASN1DynBitStr* pvalue);
00833
00838
00839
00840 typedef struct ASN1BigInt {
00841 size_t numocts;
00842 OSOCTET* mag;
00843 int sign;
00844 size_t allocated;
00845 OSBOOL dynamic;
00846 } ASN1BigInt;
00847
00848
00849
00850
00851
00852 #define ASN1_K_CCBMaskSize 32
00853 #define ASN1_K_NumBitsPerMask 16
00854 #define ASN1_K_MaxSetElements (ASN1_K_CCBMaskSize*ASN1_K_NumBitsPerMask)
00855
00856 typedef struct {
00857 OSOCTET* ptr;
00858 long len;
00859 int seqx;
00860 OSUINT16 mask[ASN1_K_CCBMaskSize];
00861 size_t bytes;
00862 int stat;
00863 } ASN1CCB;
00864
00865
00866
00867 typedef int (*ASN1DumpCbFunc) (const char* text_p, void* cbArg_p);
00868
00887 #define ALLOC_ASN1ARRAY(pctxt,pseqof,type) do {\
00888 if (sizeof(type)*(pseqof)->n < (pseqof)->n) return RTERR_NOMEM; \
00889 if (((pseqof)->elem = (type*) rtxMemHeapAlloc \
00890 (pctxt, sizeof(type)*(pseqof)->n)) == 0) return RTERR_NOMEM; \
00891 } while (0)
00892
00905 #define ALLOC_ASN1ARRAY1(pctxt,pseqof,type) do {\
00906 if (sizeof(type)*(pseqof)->n < (pseqof)->n) (pseqof)->elem = 0; \
00907 else (pseqof)->elem = (type*) rtxMemHeapAlloc \
00908 (pctxt, sizeof(type)*(pseqof)->n); \
00909 } while (0)
00910
00915 #define ASN1NUMOCTS(nbits) ((nbits>0)?(((nbits-1)/8)+1):0)
00916
00917 #ifdef __cplusplus
00918 }
00919 #endif
00920
00921 #include "rtsrc/rtContext.h"
00922 #include "rtxsrc/rtxCommonDefs.h"
00923 #include "rtxsrc/rtxError.h"
00924 #include "rtxsrc/rtxMemory.h"
00925
00930 #endif