libwinpr-asn1: declare new stubs
This commit is contained in:
parent
f3d480bba2
commit
8e224d2f94
@ -253,7 +253,7 @@ struct tagASN1module_t
|
|||||||
const ASN1FreeFun_t* apfnFreeMemory;
|
const ASN1FreeFun_t* apfnFreeMemory;
|
||||||
const ASN1uint32_t* acbStructSize;
|
const ASN1uint32_t* acbStructSize;
|
||||||
ASN1BerFunArr_t BER;
|
ASN1BerFunArr_t BER;
|
||||||
}
|
};
|
||||||
typedef struct tagASN1module_t* ASN1module_t;
|
typedef struct tagASN1module_t* ASN1module_t;
|
||||||
|
|
||||||
struct ASN1encoding_s
|
struct ASN1encoding_s
|
||||||
@ -350,7 +350,7 @@ enum tagASN1option_e
|
|||||||
ASN1OPT_DEL_DECODED_BUFFER = 0x502,
|
ASN1OPT_DEL_DECODED_BUFFER = 0x502,
|
||||||
ASN1OPT_GET_DECODED_BUFFER_SIZE = 0x601,
|
ASN1OPT_GET_DECODED_BUFFER_SIZE = 0x601,
|
||||||
};
|
};
|
||||||
typedef enum ASN1option_e;
|
typedef enum tagASN1option_e ASN1option_e;
|
||||||
|
|
||||||
struct tagASN1optionparam_t
|
struct tagASN1optionparam_t
|
||||||
{
|
{
|
||||||
@ -377,6 +377,137 @@ WINPR_API ASN1error_e ASN1_GetEncoderOption(ASN1encoding_t pEncoderInfo, ASN1opt
|
|||||||
WINPR_API ASN1error_e ASN1_SetDecoderOption(ASN1decoding_t pDecoderInfo, ASN1optionparam_t* pOptParam);
|
WINPR_API ASN1error_e ASN1_SetDecoderOption(ASN1decoding_t pDecoderInfo, ASN1optionparam_t* pOptParam);
|
||||||
WINPR_API ASN1error_e ASN1_GetDecoderOption(ASN1decoding_t pDecoderInfo, ASN1optionparam_t* pOptParam);
|
WINPR_API ASN1error_e ASN1_GetDecoderOption(ASN1decoding_t pDecoderInfo, ASN1optionparam_t* pOptParam);
|
||||||
|
|
||||||
|
WINPR_API void ASN1bitstring_free(ASN1bitstring_t* bitstring);
|
||||||
|
WINPR_API void ASN1octetstring_free(ASN1octetstring_t* octetstring);
|
||||||
|
WINPR_API void ASN1objectidentifier_free(ASN1objectidentifier_t* objectidentifier);
|
||||||
|
WINPR_API void ASN1charstring_free(ASN1charstring_t* charstring);
|
||||||
|
WINPR_API void ASN1char16string_free(ASN1char16string_t* char16string);
|
||||||
|
WINPR_API void ASN1char32string_free(ASN1char32string_t* char32string);
|
||||||
|
WINPR_API void ASN1ztcharstring_free(ASN1ztcharstring_t ztcharstring);
|
||||||
|
WINPR_API void ASN1ztchar16string_free(ASN1ztchar16string_t ztchar16string);
|
||||||
|
WINPR_API void ASN1ztchar32string_free(ASN1ztchar32string_t ztchar32string);
|
||||||
|
WINPR_API void ASN1open_free(ASN1open_t* open);
|
||||||
|
WINPR_API void ASN1utf8string_free(ASN1wstring_t* utf8string);
|
||||||
|
|
||||||
|
WINPR_API LPVOID ASN1DecAlloc(ASN1decoding_t dec, ASN1uint32_t size);
|
||||||
|
WINPR_API LPVOID ASN1DecRealloc(ASN1decoding_t dec, LPVOID ptr, ASN1uint32_t size);
|
||||||
|
|
||||||
|
WINPR_API void ASN1Free(LPVOID ptr);
|
||||||
|
|
||||||
|
WINPR_API ASN1error_e ASN1EncSetError(ASN1encoding_t enc, ASN1error_e err);
|
||||||
|
WINPR_API ASN1error_e ASN1DecSetError(ASN1decoding_t dec, ASN1error_e err);
|
||||||
|
|
||||||
|
WINPR_API ASN1uint32_t ASN1intx_uoctets(ASN1intx_t* intx);
|
||||||
|
WINPR_API void ASN1intx_free(ASN1intx_t* intx);
|
||||||
|
WINPR_API ASN1int32_t ASN1intx2int32(ASN1intx_t* intx);
|
||||||
|
WINPR_API ASN1uint32_t ASN1intx2uint32(ASN1intx_t* intx);
|
||||||
|
WINPR_API int ASN1intxisuint32(ASN1intx_t* intx);
|
||||||
|
WINPR_API void ASN1intx_setuint32(ASN1intx_t* dst, ASN1uint32_t val);
|
||||||
|
|
||||||
|
WINPR_API ASN1uint32_t ASN1uint32_uoctets(ASN1uint32_t val);
|
||||||
|
|
||||||
|
WINPR_API int ASN1intx_cmp(ASN1intx_t* intx1, ASN1intx_t* intx2);
|
||||||
|
WINPR_API int ASN1objectidentifier_cmp(ASN1objectidentifier_t* oid1, ASN1objectidentifier_t* oid2);
|
||||||
|
WINPR_API int ASN1objectidentifier2_cmp(ASN1objectidentifier2_t* oid1, ASN1objectidentifier2_t* oid2);
|
||||||
|
WINPR_API int ASN1bitstring_cmp(ASN1bitstring_t* str1, ASN1bitstring_t* str2, int length);
|
||||||
|
WINPR_API int ASN1octetstring_cmp(ASN1octetstring_t* str1, ASN1octetstring_t* str2);
|
||||||
|
WINPR_API int ASN1charstring_cmp(ASN1charstring_t* str1, ASN1charstring_t* str2);
|
||||||
|
WINPR_API int ASN1char16string_cmp(ASN1char16string_t* str1, ASN1char16string_t* str2);
|
||||||
|
WINPR_API int ASN1char32string_cmp(ASN1char32string_t* str1, ASN1char32string_t* str2);
|
||||||
|
WINPR_API int ASN1ztcharstring_cmp(ASN1ztcharstring_t str1, ASN1ztcharstring_t str2);
|
||||||
|
WINPR_API int ASN1ztchar16string_cmp(ASN1ztchar16string_t str1, ASN1ztchar16string_t str2);
|
||||||
|
WINPR_API int ASN1ztchar32string_cmp(ASN1ztchar32string_t str1, ASN1ztchar32string_t str2);
|
||||||
|
WINPR_API int ASN1open_cmp(ASN1open_t* open1, ASN1open_t* open2);
|
||||||
|
WINPR_API int ASN1generalizedtime_cmp(ASN1generalizedtime_t* t1, ASN1generalizedtime_t* t2);
|
||||||
|
WINPR_API int ASN1utctime_cmp(ASN1utctime_t* t1, ASN1utctime_t* t2);
|
||||||
|
|
||||||
|
WINPR_API int ASN1BEREncCharString(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t len, ASN1char_t* val);
|
||||||
|
WINPR_API int ASN1DEREncCharString(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t len, ASN1char_t* val);
|
||||||
|
WINPR_API int ASN1BEREncChar16String(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t len, ASN1char16_t* val);
|
||||||
|
WINPR_API int ASN1DEREncChar16String(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t len, ASN1char16_t* val);
|
||||||
|
WINPR_API int ASN1BEREncChar32String(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t len, ASN1char32_t* val);
|
||||||
|
WINPR_API int ASN1DEREncChar32String(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t len, ASN1char32_t* val);
|
||||||
|
WINPR_API int ASN1BEREncOctetString(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t len, ASN1octet_t* val);
|
||||||
|
WINPR_API int ASN1DEREncOctetString(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t len, ASN1octet_t* val);
|
||||||
|
WINPR_API int ASN1BEREncBitString(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t bitlen, ASN1octet_t* val);
|
||||||
|
WINPR_API int ASN1DEREncBitString(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t bitlen, ASN1octet_t* val);
|
||||||
|
WINPR_API int ASN1BEREncGeneralizedTime(ASN1encoding_t enc, ASN1uint32_t tag, ASN1generalizedtime_t* val);
|
||||||
|
WINPR_API int ASN1DEREncGeneralizedTime(ASN1encoding_t enc, ASN1uint32_t tag, ASN1generalizedtime_t* val);
|
||||||
|
WINPR_API int ASN1BEREncS32(ASN1encoding_t enc, ASN1uint32_t tag, ASN1int32_t val);
|
||||||
|
WINPR_API int ASN1BEREncSX(ASN1encoding_t enc, ASN1uint32_t tag, ASN1intx_t* val);
|
||||||
|
WINPR_API int ASN1BEREncZeroMultibyteString(ASN1encoding_t enc, ASN1uint32_t tag, ASN1ztcharstring_t val);
|
||||||
|
WINPR_API int ASN1DEREncZeroMultibyteString(ASN1encoding_t enc, ASN1uint32_t tag, ASN1ztcharstring_t val);
|
||||||
|
WINPR_API int ASN1BEREncMultibyteString(ASN1encoding_t enc, ASN1uint32_t tag, ASN1charstring_t* val);
|
||||||
|
WINPR_API int ASN1DEREncMultibyteString(ASN1encoding_t enc, ASN1uint32_t tag, ASN1charstring_t* val);
|
||||||
|
WINPR_API int ASN1BEREncNull(ASN1encoding_t enc, ASN1uint32_t tag);
|
||||||
|
WINPR_API int ASN1BEREncObjectIdentifier(ASN1encoding_t enc, ASN1uint32_t tag, ASN1objectidentifier_t* val);
|
||||||
|
WINPR_API int ASN1BEREncObjectIdentifier2(ASN1encoding_t enc, ASN1uint32_t tag, ASN1objectidentifier2_t* val);
|
||||||
|
WINPR_API int ASN1BEREncRemoveZeroBits(ASN1uint32_t* nbits,ASN1octet_t* val);
|
||||||
|
WINPR_API int ASN1BEREncRemoveZeroBits2(ASN1uint32_t* nbits,ASN1octet_t* val,ASN1uint32_t minlen);
|
||||||
|
WINPR_API int ASN1BEREncUTCTime(ASN1encoding_t enc, ASN1uint32_t tag, ASN1utctime_t* val);
|
||||||
|
WINPR_API int ASN1DEREncUTCTime(ASN1encoding_t enc, ASN1uint32_t tag, ASN1utctime_t* val);
|
||||||
|
WINPR_API int ASN1BEREncFlush(ASN1encoding_t enc);
|
||||||
|
WINPR_API int ASN1BEREncOpenType(ASN1encoding_t enc, ASN1open_t* val);
|
||||||
|
WINPR_API int ASN1BERDecExplicitTag(ASN1decoding_t dec, ASN1uint32_t tag, ASN1decoding_t* dd, ASN1octet_t* *ppBufEnd);
|
||||||
|
|
||||||
|
WINPR_API int ASN1BERDecEndOfContents(ASN1decoding_t dec, ASN1decoding_t dd, ASN1octet_t* pBufEnd);
|
||||||
|
WINPR_API int ASN1BERDecOctetString(ASN1decoding_t dec, ASN1uint32_t tag, ASN1octetstring_t* val);
|
||||||
|
WINPR_API int ASN1BERDecOctetString2(ASN1decoding_t dec, ASN1uint32_t tag, ASN1octetstring_t* val);
|
||||||
|
WINPR_API int ASN1BERDecBitString(ASN1decoding_t dec, ASN1uint32_t tag, ASN1bitstring_t* val);
|
||||||
|
WINPR_API int ASN1BERDecBitString2(ASN1decoding_t dec, ASN1uint32_t tag, ASN1bitstring_t* val);
|
||||||
|
WINPR_API int ASN1BERDecChar16String(ASN1decoding_t dec, ASN1uint32_t tag, ASN1char16string_t* val);
|
||||||
|
WINPR_API int ASN1BERDecChar32String(ASN1decoding_t dec, ASN1uint32_t tag, ASN1char32string_t* val);
|
||||||
|
WINPR_API int ASN1BERDecCharString(ASN1decoding_t dec, ASN1uint32_t tag, ASN1charstring_t* val);
|
||||||
|
WINPR_API int ASN1BERDecGeneralizedTime(ASN1decoding_t dec, ASN1uint32_t tag, ASN1generalizedtime_t* val);
|
||||||
|
WINPR_API int ASN1BERDecZeroMultibyteString(ASN1decoding_t dec, ASN1uint32_t tag, ASN1ztcharstring_t* val);
|
||||||
|
WINPR_API int ASN1BERDecMultibyteString(ASN1decoding_t dec, ASN1uint32_t tag, ASN1charstring_t* val);
|
||||||
|
WINPR_API int ASN1BERDecNull(ASN1decoding_t dec, ASN1uint32_t tag);
|
||||||
|
WINPR_API int ASN1BERDecObjectIdentifier(ASN1decoding_t dec, ASN1uint32_t tag, ASN1objectidentifier_t* val);
|
||||||
|
WINPR_API int ASN1BERDecObjectIdentifier2(ASN1decoding_t dec, ASN1uint32_t tag, ASN1objectidentifier2_t* val);
|
||||||
|
WINPR_API int ASN1BERDecS8Val(ASN1decoding_t dec, ASN1uint32_t tag, ASN1int8_t* val);
|
||||||
|
WINPR_API int ASN1BERDecS16Val(ASN1decoding_t dec, ASN1uint32_t tag, ASN1int16_t* val);
|
||||||
|
WINPR_API int ASN1BERDecS32Val(ASN1decoding_t dec, ASN1uint32_t tag, ASN1int32_t* val);
|
||||||
|
WINPR_API int ASN1BERDecSXVal(ASN1decoding_t dec, ASN1uint32_t tag, ASN1intx_t* val);
|
||||||
|
WINPR_API int ASN1BERDecU8Val(ASN1decoding_t dec, ASN1uint32_t tag, ASN1uint8_t* val);
|
||||||
|
WINPR_API int ASN1BERDecU16Val(ASN1decoding_t dec, ASN1uint32_t tag, ASN1uint16_t* val);
|
||||||
|
WINPR_API int ASN1BERDecU32Val(ASN1decoding_t dec, ASN1uint32_t tag, ASN1uint32_t* val);
|
||||||
|
WINPR_API int ASN1BERDecUTCTime(ASN1decoding_t dec, ASN1uint32_t tag, ASN1utctime_t* val);
|
||||||
|
WINPR_API int ASN1BERDecZeroCharString(ASN1decoding_t dec, ASN1uint32_t tag, ASN1ztcharstring_t* val);
|
||||||
|
WINPR_API int ASN1BERDecZeroChar16String(ASN1decoding_t dec, ASN1uint32_t tag, ASN1ztchar16string_t* val);
|
||||||
|
WINPR_API int ASN1BERDecZeroChar32String(ASN1decoding_t dec, ASN1uint32_t tag, ASN1ztchar32string_t* val);
|
||||||
|
WINPR_API int ASN1BERDecSkip(ASN1decoding_t dec);
|
||||||
|
WINPR_API int ASN1BERDecFlush(ASN1decoding_t dec);
|
||||||
|
WINPR_API int ASN1BERDecOpenType(ASN1decoding_t dec, ASN1open_t* val);
|
||||||
|
WINPR_API int ASN1BERDecOpenType2(ASN1decoding_t dec, ASN1open_t* val);
|
||||||
|
|
||||||
|
WINPR_API int ASN1BEREncCheck(ASN1encoding_t enc, ASN1uint32_t noctets);
|
||||||
|
WINPR_API int ASN1BEREncTag(ASN1encoding_t enc, ASN1uint32_t tag);
|
||||||
|
WINPR_API int ASN1BEREncExplicitTag(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t* pnLenOff);
|
||||||
|
WINPR_API int ASN1BEREncEndOfContents(ASN1encoding_t enc, ASN1uint32_t nLenOff);
|
||||||
|
WINPR_API int ASN1BEREncLength(ASN1encoding_t enc, ASN1uint32_t len);
|
||||||
|
|
||||||
|
WINPR_API int ASN1BERDecCheck(ASN1decoding_t dec, ASN1uint32_t len);
|
||||||
|
WINPR_API int ASN1BERDecTag(ASN1decoding_t dec, ASN1uint32_t tag, ASN1uint32_t* constructed);
|
||||||
|
WINPR_API int ASN1BERDecLength(ASN1decoding_t dec, ASN1uint32_t* len, ASN1uint32_t* infinite);
|
||||||
|
WINPR_API int ASN1BERDecNotEndOfContents(ASN1decoding_t dec, ASN1octet_t* pBufEnd);
|
||||||
|
WINPR_API int ASN1BERDecPeekTag(ASN1decoding_t dec, ASN1uint32_t* tag);
|
||||||
|
|
||||||
|
WINPR_API int ASN1BEREncU32(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t val);
|
||||||
|
WINPR_API int ASN1BEREncBool(ASN1encoding_t enc, ASN1uint32_t tag, ASN1bool_t val);
|
||||||
|
WINPR_API int ASN1BERDecBool(ASN1decoding_t dec, ASN1uint32_t tag, ASN1bool_t* val);
|
||||||
|
WINPR_API int ASN1BEREncEoid(ASN1encoding_t enc, ASN1uint32_t tag, ASN1encodedOID_t* val);
|
||||||
|
WINPR_API int ASN1BERDecEoid(ASN1decoding_t dec, ASN1uint32_t tag, ASN1encodedOID_t* val);
|
||||||
|
WINPR_API int ASN1BERDotVal2Eoid(ASN1encoding_t enc, char* pszDotVal, ASN1encodedOID_t* pOut);
|
||||||
|
WINPR_API int ASN1BEREoid2DotVal(ASN1decoding_t dec, ASN1encodedOID_t* pIn, char** ppszDotVal);
|
||||||
|
WINPR_API void ASN1BEREoid_free(ASN1encodedOID_t* val);
|
||||||
|
WINPR_API int ASN1BEREncUTF8String(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t length, WCHAR* value);
|
||||||
|
WINPR_API int ASN1DEREncUTF8String(ASN1encoding_t enc, ASN1uint32_t tag, ASN1uint32_t length, WCHAR* value);
|
||||||
|
WINPR_API int ASN1BERDecUTF8String(ASN1decoding_t dec, ASN1uint32_t tag, ASN1wstring_t* val);
|
||||||
|
WINPR_API int ASN1DEREncBeginBlk(ASN1encoding_t enc, ASN1blocktype_e eBlkType, void** ppBlk);
|
||||||
|
WINPR_API int ASN1DEREncNewBlkElement(void* pBlk, ASN1encoding_t* enc2);
|
||||||
|
WINPR_API int ASN1DEREncFlushBlkElement(void* pBlk);
|
||||||
|
WINPR_API int ASN1DEREncEndBlk(void* pBlk);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* WINPR_ASN1_H */
|
#endif /* WINPR_ASN1_H */
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <winpr/winpr.h>
|
#include <winpr/winpr.h>
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ add_subdirectory(synch)
|
|||||||
add_subdirectory(sysinfo)
|
add_subdirectory(sysinfo)
|
||||||
add_subdirectory(bcrypt)
|
add_subdirectory(bcrypt)
|
||||||
add_subdirectory(dsparse)
|
add_subdirectory(dsparse)
|
||||||
|
add_subdirectory(asn1)
|
||||||
add_subdirectory(rpc)
|
add_subdirectory(rpc)
|
||||||
add_subdirectory(sspicli)
|
add_subdirectory(sspicli)
|
||||||
add_subdirectory(sspi)
|
add_subdirectory(sspi)
|
||||||
|
@ -19,9 +19,284 @@
|
|||||||
|
|
||||||
#include <winpr/asn1.h>
|
#include <winpr/asn1.h>
|
||||||
|
|
||||||
|
#include <winpr/crt.h>
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
|
|
||||||
|
ASN1module_t ASN1_CreateModule(ASN1uint32_t nVersion, ASN1encodingrule_e eRule,
|
||||||
|
ASN1uint32_t dwFlags, ASN1uint32_t cPDU, const ASN1GenericFun_t apfnEncoder[],
|
||||||
|
const ASN1GenericFun_t apfnDecoder[], const ASN1FreeFun_t apfnFreeMemory[],
|
||||||
|
const ASN1uint32_t acbStructSize[], ASN1magic_t nModuleName)
|
||||||
|
{
|
||||||
|
ASN1module_t module = NULL;
|
||||||
|
|
||||||
|
if (!((apfnEncoder) && (apfnDecoder) && (apfnFreeMemory) && (acbStructSize)))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
module = (ASN1module_t) malloc(sizeof(struct tagASN1module_t));
|
||||||
|
ZeroMemory(module, sizeof(struct tagASN1module_t));
|
||||||
|
|
||||||
|
if (module)
|
||||||
|
{
|
||||||
|
module->nModuleName = nModuleName;
|
||||||
|
module->dwFlags = dwFlags;
|
||||||
|
module->eRule = eRule;
|
||||||
|
module->cPDUs = cPDU;
|
||||||
|
module->apfnFreeMemory = apfnFreeMemory;
|
||||||
|
module->acbStructSize = acbStructSize;
|
||||||
|
|
||||||
|
if (eRule & ASN1_BER_RULE)
|
||||||
|
{
|
||||||
|
module->BER.apfnEncoder = (const ASN1BerEncFun_t*) apfnEncoder;
|
||||||
|
module->BER.apfnDecoder = (const ASN1BerDecFun_t*) apfnDecoder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return module;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASN1_CloseModule(ASN1module_t pModule)
|
||||||
|
{
|
||||||
|
if (!pModule)
|
||||||
|
free(pModule);
|
||||||
|
}
|
||||||
|
|
||||||
|
ASN1error_e ASN1_CreateEncoder(ASN1module_t pModule, ASN1encoding_t* ppEncoderInfo,
|
||||||
|
ASN1octet_t* pbBuf, ASN1uint32_t cbBufSize, ASN1encoding_t pParent)
|
||||||
|
{
|
||||||
|
ASN1error_e status;
|
||||||
|
ASN1encoding_t encoder;
|
||||||
|
ASN1encodingrule_e rule;
|
||||||
|
|
||||||
|
if (pModule && ppEncoderInfo)
|
||||||
|
{
|
||||||
|
*ppEncoderInfo = 0;
|
||||||
|
encoder = (ASN1encoding_t) malloc(sizeof(struct ASN1encoding_s));
|
||||||
|
|
||||||
|
if (encoder)
|
||||||
|
{
|
||||||
|
ZeroMemory(encoder, sizeof(struct ASN1encoding_s));
|
||||||
|
encoder->magic = 0x44434E45;
|
||||||
|
encoder->err = 0;
|
||||||
|
encoder->dwFlags = pModule->dwFlags;
|
||||||
|
encoder->module = pModule;
|
||||||
|
|
||||||
|
if (pbBuf && cbBufSize)
|
||||||
|
{
|
||||||
|
encoder->dwFlags |= ASN1ENCODE_SETBUFFER;
|
||||||
|
encoder->buf = pbBuf;
|
||||||
|
encoder->pos = pbBuf;
|
||||||
|
encoder->size = cbBufSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pParent)
|
||||||
|
{
|
||||||
|
encoder[1].magic = (ASN1magic_t) pParent;
|
||||||
|
rule = pParent->eRule;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
encoder[1].magic = (ASN1magic_t) encoder;
|
||||||
|
rule = pModule->eRule;
|
||||||
|
}
|
||||||
|
|
||||||
|
encoder->eRule = rule;
|
||||||
|
|
||||||
|
if (encoder->dwFlags & ASN1ENCODE_SETBUFFER)
|
||||||
|
goto LABEL_SET_BUFFER;
|
||||||
|
|
||||||
|
if (!pParent)
|
||||||
|
{
|
||||||
|
LABEL_ENCODER_COMPLETE:
|
||||||
|
*ppEncoderInfo = encoder;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rule & ASN1_BER_RULE)
|
||||||
|
{
|
||||||
|
//if (ASN1BEREncCheck(encoder, 1))
|
||||||
|
{
|
||||||
|
*encoder->buf = 0;
|
||||||
|
LABEL_SET_BUFFER:
|
||||||
|
if (pParent)
|
||||||
|
pParent[1].version = (ASN1uint32_t) encoder;
|
||||||
|
|
||||||
|
goto LABEL_ENCODER_COMPLETE;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = ASN1_ERR_MEMORY;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = ASN1_ERR_RULE;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(encoder);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = ASN1_ERR_MEMORY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = ASN1_ERR_BADARGS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASN1error_e ASN1_Encode(ASN1encoding_t pEncoderInfo, void* pDataStruct, ASN1uint32_t nPduNum,
|
||||||
|
ASN1uint32_t dwFlags, ASN1octet_t* pbBuf, ASN1uint32_t cbBufSize)
|
||||||
|
{
|
||||||
|
int flags;
|
||||||
|
ASN1error_e status;
|
||||||
|
ASN1module_t module;
|
||||||
|
ASN1BerEncFun_t pfnEncoder;
|
||||||
|
|
||||||
|
if (!pEncoderInfo)
|
||||||
|
return ASN1_ERR_BADARGS;
|
||||||
|
|
||||||
|
ASN1EncSetError(pEncoderInfo, ASN1_SUCCESS);
|
||||||
|
|
||||||
|
if (dwFlags & 8)
|
||||||
|
{
|
||||||
|
pEncoderInfo->dwFlags |= 8;
|
||||||
|
pEncoderInfo->buf = pbBuf;
|
||||||
|
pEncoderInfo->pos = pbBuf;
|
||||||
|
pEncoderInfo->size = cbBufSize;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flags = dwFlags | pEncoderInfo->dwFlags;
|
||||||
|
|
||||||
|
if (flags & 0x10)
|
||||||
|
{
|
||||||
|
pEncoderInfo->dwFlags &= 0xFFFFFFF7;
|
||||||
|
pEncoderInfo->buf = 0;
|
||||||
|
pEncoderInfo->pos = 0;
|
||||||
|
pEncoderInfo->size = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!(dwFlags & ASN1ENCODE_REUSEBUFFER) && (flags & ASN1ENCODE_APPEND))
|
||||||
|
goto LABEL_MODULE;
|
||||||
|
|
||||||
|
pEncoderInfo->pos = pEncoderInfo->buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pEncoderInfo->len = 0;
|
||||||
|
pEncoderInfo->bit = 0;
|
||||||
|
|
||||||
|
LABEL_MODULE:
|
||||||
|
module = pEncoderInfo->module;
|
||||||
|
|
||||||
|
if (nPduNum >= module->cPDUs)
|
||||||
|
goto LABEL_BAD_PDU;
|
||||||
|
|
||||||
|
if (!(pEncoderInfo->eRule & ASN1_BER_RULE))
|
||||||
|
{
|
||||||
|
status = ASN1_ERR_RULE;
|
||||||
|
return ASN1EncSetError(pEncoderInfo, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
pfnEncoder = module->BER.apfnEncoder[nPduNum];
|
||||||
|
|
||||||
|
if (!pfnEncoder)
|
||||||
|
{
|
||||||
|
LABEL_BAD_PDU:
|
||||||
|
status = ASN1_ERR_BADPDU;
|
||||||
|
return ASN1EncSetError(pEncoderInfo, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pfnEncoder(pEncoderInfo, 0, pDataStruct))
|
||||||
|
{
|
||||||
|
//ASN1BEREncFlush(pEncoderInfo);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pEncoderInfo[1].err >= 0)
|
||||||
|
ASN1EncSetError(pEncoderInfo, ASN1_ERR_CORRUPT);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pEncoderInfo[1].err < 0)
|
||||||
|
{
|
||||||
|
if (((dwFlags & 0xFF) | (pEncoderInfo->dwFlags & 0xFF)) & 0x10)
|
||||||
|
{
|
||||||
|
ASN1_FreeEncoded(pEncoderInfo, pEncoderInfo->buf);
|
||||||
|
pEncoderInfo->buf = 0;
|
||||||
|
pEncoderInfo->pos = 0;
|
||||||
|
pEncoderInfo->bit = 0;
|
||||||
|
pEncoderInfo->len = 0;
|
||||||
|
pEncoderInfo->size = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pEncoderInfo[1].err;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASN1_CloseEncoder(ASN1encoding_t pEncoderInfo)
|
||||||
|
{
|
||||||
|
ASN1magic_t magic;
|
||||||
|
|
||||||
|
if (pEncoderInfo)
|
||||||
|
{
|
||||||
|
magic = pEncoderInfo[1].magic;
|
||||||
|
|
||||||
|
if (pEncoderInfo != (ASN1encoding_t) magic)
|
||||||
|
pEncoderInfo[1].version = 0;
|
||||||
|
|
||||||
|
free(pEncoderInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ASN1error_e ASN1EncSetError(ASN1encoding_t enc, ASN1error_e err)
|
||||||
|
{
|
||||||
|
ASN1error_e status;
|
||||||
|
ASN1encoding_t encoder;
|
||||||
|
ASN1encoding_t nextEncoder;
|
||||||
|
|
||||||
|
status = err;
|
||||||
|
encoder = enc;
|
||||||
|
|
||||||
|
while (encoder)
|
||||||
|
{
|
||||||
|
nextEncoder = (ASN1encoding_t) &encoder[1];
|
||||||
|
|
||||||
|
encoder->err = err;
|
||||||
|
|
||||||
|
if (encoder == nextEncoder)
|
||||||
|
break;
|
||||||
|
|
||||||
|
encoder = nextEncoder;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASN1error_e ASN1DecSetError(ASN1decoding_t dec, ASN1error_e err)
|
||||||
|
{
|
||||||
|
ASN1error_e status;
|
||||||
|
ASN1decoding_t decoder;
|
||||||
|
ASN1decoding_t nextDecoder;
|
||||||
|
|
||||||
|
status = err;
|
||||||
|
decoder = dec;
|
||||||
|
|
||||||
|
while (decoder)
|
||||||
|
{
|
||||||
|
nextDecoder = (ASN1decoding_t) &decoder[1];
|
||||||
|
|
||||||
|
decoder->err = err;
|
||||||
|
|
||||||
|
if (decoder == nextDecoder)
|
||||||
|
break;
|
||||||
|
|
||||||
|
decoder = nextDecoder;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user