www.pudn.com > VOIP(H323).rar > H235-SECURITY-MESSAGESDec.c
/**
* This file was generated by the Objective Systems ASN1C Compiler
* (http://www.obj-sys.com). Version: 5.70, Date: 07-Oct-2004.
*/
#include "ooasn1.h"
#include "H235-SECURITY-MESSAGES.h"
/**************************************************************/
/* */
/* TimeStamp */
/* */
/**************************************************************/
EXTERN int asn1PD_H235TimeStamp (OOCTXT* pctxt, H235TimeStamp* pvalue)
{
int stat = ASN_OK;
stat = decodeConsUnsigned (pctxt, pvalue, 1U, ASN1UINT_MAX);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* Password */
/* */
/**************************************************************/
EXTERN int asn1PD_H235Password (OOCTXT* pctxt, H235Password* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 1, 128, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeBMPString (pctxt, pvalue, 0);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* DHset_halfkey */
/* */
/**************************************************************/
EXTERN int asn1PD_H235DHset_halfkey (OOCTXT* pctxt, H235DHset_halfkey* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 0, 2048, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeBitString (pctxt,
&pvalue->numbits,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* DHset_modSize */
/* */
/**************************************************************/
EXTERN int asn1PD_H235DHset_modSize (OOCTXT* pctxt, H235DHset_modSize* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 0, 2048, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeBitString (pctxt,
&pvalue->numbits,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* DHset_generator */
/* */
/**************************************************************/
EXTERN int asn1PD_H235DHset_generator (OOCTXT* pctxt, H235DHset_generator* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 0, 2048, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeBitString (pctxt,
&pvalue->numbits,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* DHset */
/* */
/**************************************************************/
EXTERN int asn1PD_H235DHset (OOCTXT* pctxt, H235DHset* pvalue)
{
int stat = ASN_OK;
OOCTXT lctxt;
ASN1OpenType openType;
ASN1UINT bitcnt;
ASN1UINT i;
ASN1BOOL optbit;
ASN1BOOL extbit;
/* extension bit */
stat = DECODEBIT (pctxt, &extbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode halfkey */
stat = asn1PD_H235DHset_halfkey (pctxt, &pvalue->halfkey);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode modSize */
stat = asn1PD_H235DHset_modSize (pctxt, &pvalue->modSize);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode generator */
stat = asn1PD_H235DHset_generator (pctxt, &pvalue->generator);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
if (extbit) {
/* decode extension optional bits length */
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
bitcnt += 1;
ZEROCONTEXT (&lctxt);
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = moveBitCursor (pctxt, bitcnt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
for (i = 0; i < bitcnt; i++) {
DECODEBIT (&lctxt, &optbit);
if (optbit) {
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
pctxt->buffer.byteIndex += openType.numocts;
}
}
}
return (stat);
}
/**************************************************************/
/* */
/* ChallengeString */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ChallengeString (OOCTXT* pctxt, H235ChallengeString* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 8, 128, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeOctetString (pctxt,
&pvalue->numocts,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* RandomVal */
/* */
/**************************************************************/
EXTERN int asn1PD_H235RandomVal (OOCTXT* pctxt, H235RandomVal* pvalue)
{
int stat = ASN_OK;
stat = decodeUnconsInteger (pctxt, pvalue);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* TypedCertificate */
/* */
/**************************************************************/
EXTERN int asn1PD_H235TypedCertificate (OOCTXT* pctxt, H235TypedCertificate* pvalue)
{
int stat = ASN_OK;
OOCTXT lctxt;
ASN1OpenType openType;
ASN1UINT bitcnt;
ASN1UINT i;
ASN1BOOL optbit;
ASN1BOOL extbit;
/* extension bit */
stat = DECODEBIT (pctxt, &extbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode type */
stat = decodeObjectIdentifier (pctxt, &pvalue->type);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode certificate */
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->certificate);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
if (extbit) {
/* decode extension optional bits length */
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
bitcnt += 1;
ZEROCONTEXT (&lctxt);
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = moveBitCursor (pctxt, bitcnt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
for (i = 0; i < bitcnt; i++) {
DECODEBIT (&lctxt, &optbit);
if (optbit) {
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
pctxt->buffer.byteIndex += openType.numocts;
}
}
}
return (stat);
}
/**************************************************************/
/* */
/* Identifier */
/* */
/**************************************************************/
EXTERN int asn1PD_H235Identifier (OOCTXT* pctxt, H235Identifier* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 1, 128, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeBMPString (pctxt, pvalue, 0);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* NonStandardParameter */
/* */
/**************************************************************/
EXTERN int asn1PD_H235NonStandardParameter (OOCTXT* pctxt, H235NonStandardParameter* pvalue)
{
int stat = ASN_OK;
/* decode nonStandardIdentifier */
stat = decodeObjectIdentifier (pctxt, &pvalue->nonStandardIdentifier);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode data */
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->data);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* ECpoint_x */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ECpoint_x (OOCTXT* pctxt, H235ECpoint_x* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 0, 511, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeBitString (pctxt,
&pvalue->numbits,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* ECpoint_y */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ECpoint_y (OOCTXT* pctxt, H235ECpoint_y* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 0, 511, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeBitString (pctxt,
&pvalue->numbits,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* ECpoint */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ECpoint (OOCTXT* pctxt, H235ECpoint* pvalue)
{
int stat = ASN_OK;
OOCTXT lctxt;
ASN1OpenType openType;
ASN1UINT bitcnt;
ASN1UINT i;
ASN1BOOL optbit;
ASN1BOOL extbit;
/* extension bit */
stat = DECODEBIT (pctxt, &extbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* optional bits */
memset (&pvalue->m, 0, sizeof(pvalue->m));
stat = DECODEBIT (pctxt, &optbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->m.xPresent = optbit;
stat = DECODEBIT (pctxt, &optbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->m.yPresent = optbit;
/* decode x */
if (pvalue->m.xPresent) {
stat = asn1PD_H235ECpoint_x (pctxt, &pvalue->x);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
/* decode y */
if (pvalue->m.yPresent) {
stat = asn1PD_H235ECpoint_y (pctxt, &pvalue->y);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
if (extbit) {
/* decode extension optional bits length */
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
bitcnt += 1;
ZEROCONTEXT (&lctxt);
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = moveBitCursor (pctxt, bitcnt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
for (i = 0; i < bitcnt; i++) {
DECODEBIT (&lctxt, &optbit);
if (optbit) {
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
pctxt->buffer.byteIndex += openType.numocts;
}
}
}
return (stat);
}
/**************************************************************/
/* */
/* ECKASDH_eckasdhp_modulus */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ECKASDH_eckasdhp_modulus (OOCTXT* pctxt, H235ECKASDH_eckasdhp_modulus* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 0, 511, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeBitString (pctxt,
&pvalue->numbits,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* ECKASDH_eckasdhp_weierstrassA */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ECKASDH_eckasdhp_weierstrassA (OOCTXT* pctxt, H235ECKASDH_eckasdhp_weierstrassA* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 0, 511, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeBitString (pctxt,
&pvalue->numbits,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* ECKASDH_eckasdhp_weierstrassB */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ECKASDH_eckasdhp_weierstrassB (OOCTXT* pctxt, H235ECKASDH_eckasdhp_weierstrassB* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 0, 511, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeBitString (pctxt,
&pvalue->numbits,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* ECKASDH_eckasdhp */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ECKASDH_eckasdhp (OOCTXT* pctxt, H235ECKASDH_eckasdhp* pvalue)
{
int stat = ASN_OK;
/* decode public_key */
stat = asn1PD_H235ECpoint (pctxt, &pvalue->public_key);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode modulus */
stat = asn1PD_H235ECKASDH_eckasdhp_modulus (pctxt, &pvalue->modulus);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode base */
stat = asn1PD_H235ECpoint (pctxt, &pvalue->base);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode weierstrassA */
stat = asn1PD_H235ECKASDH_eckasdhp_weierstrassA (pctxt, &pvalue->weierstrassA);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode weierstrassB */
stat = asn1PD_H235ECKASDH_eckasdhp_weierstrassB (pctxt, &pvalue->weierstrassB);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* ECKASDH_eckasdh2_fieldSize */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ECKASDH_eckasdh2_fieldSize (OOCTXT* pctxt, H235ECKASDH_eckasdh2_fieldSize* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 0, 511, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeBitString (pctxt,
&pvalue->numbits,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* ECKASDH_eckasdh2_weierstrassA */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ECKASDH_eckasdh2_weierstrassA (OOCTXT* pctxt, H235ECKASDH_eckasdh2_weierstrassA* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 0, 511, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeBitString (pctxt,
&pvalue->numbits,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* ECKASDH_eckasdh2_weierstrassB */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ECKASDH_eckasdh2_weierstrassB (OOCTXT* pctxt, H235ECKASDH_eckasdh2_weierstrassB* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 0, 511, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeBitString (pctxt,
&pvalue->numbits,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* ECKASDH_eckasdh2 */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ECKASDH_eckasdh2 (OOCTXT* pctxt, H235ECKASDH_eckasdh2* pvalue)
{
int stat = ASN_OK;
/* decode public_key */
stat = asn1PD_H235ECpoint (pctxt, &pvalue->public_key);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode fieldSize */
stat = asn1PD_H235ECKASDH_eckasdh2_fieldSize (pctxt, &pvalue->fieldSize);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode base */
stat = asn1PD_H235ECpoint (pctxt, &pvalue->base);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode weierstrassA */
stat = asn1PD_H235ECKASDH_eckasdh2_weierstrassA (pctxt, &pvalue->weierstrassA);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode weierstrassB */
stat = asn1PD_H235ECKASDH_eckasdh2_weierstrassB (pctxt, &pvalue->weierstrassB);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* ECKASDH */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ECKASDH (OOCTXT* pctxt, H235ECKASDH* pvalue)
{
int stat = ASN_OK;
ASN1UINT ui;
ASN1OpenType openType;
ASN1BOOL extbit;
/* extension bit */
stat = DECODEBIT (pctxt, &extbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
if (!extbit) {
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->t = ui + 1;
switch (ui) {
/* eckasdhp */
case 0:
pvalue->u.eckasdhp = ALLOC_ASN1ELEM (pctxt, H235ECKASDH_eckasdhp);
if (pvalue->u.eckasdhp == NULL)
return LOG_ASN1ERR (pctxt, ASN_E_NOMEM);
stat = asn1PD_H235ECKASDH_eckasdhp (pctxt, pvalue->u.eckasdhp);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
break;
/* eckasdh2 */
case 1:
pvalue->u.eckasdh2 = ALLOC_ASN1ELEM (pctxt, H235ECKASDH_eckasdh2);
if (pvalue->u.eckasdh2 == NULL)
return LOG_ASN1ERR (pctxt, ASN_E_NOMEM);
stat = asn1PD_H235ECKASDH_eckasdh2 (pctxt, pvalue->u.eckasdh2);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
break;
default:
return LOG_ASN1ERR (pctxt, ASN_E_INVOPT);
}
}
else {
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->t = ui + 3;
stat = decodeByteAlign (pctxt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
return (stat);
}
/**************************************************************/
/* */
/* ClearToken */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ClearToken (OOCTXT* pctxt, H235ClearToken* pvalue)
{
int stat = ASN_OK;
OOCTXT lctxt;
OOCTXT lctxt2;
ASN1OpenType openType;
ASN1UINT bitcnt;
ASN1UINT i;
ASN1BOOL optbit;
ASN1BOOL extbit;
/* extension bit */
stat = DECODEBIT (pctxt, &extbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* optional bits */
memset (&pvalue->m, 0, sizeof(pvalue->m));
stat = DECODEBIT (pctxt, &optbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->m.timeStampPresent = optbit;
stat = DECODEBIT (pctxt, &optbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->m.passwordPresent = optbit;
stat = DECODEBIT (pctxt, &optbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->m.dhkeyPresent = optbit;
stat = DECODEBIT (pctxt, &optbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->m.challengePresent = optbit;
stat = DECODEBIT (pctxt, &optbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->m.randomPresent = optbit;
stat = DECODEBIT (pctxt, &optbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->m.certificatePresent = optbit;
stat = DECODEBIT (pctxt, &optbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->m.generalIDPresent = optbit;
stat = DECODEBIT (pctxt, &optbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->m.nonStandardPresent = optbit;
/* decode tokenOID */
stat = decodeObjectIdentifier (pctxt, &pvalue->tokenOID);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode timeStamp */
if (pvalue->m.timeStampPresent) {
stat = asn1PD_H235TimeStamp (pctxt, &pvalue->timeStamp);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
/* decode password */
if (pvalue->m.passwordPresent) {
stat = asn1PD_H235Password (pctxt, &pvalue->password);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
/* decode dhkey */
if (pvalue->m.dhkeyPresent) {
stat = asn1PD_H235DHset (pctxt, &pvalue->dhkey);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
/* decode challenge */
if (pvalue->m.challengePresent) {
stat = asn1PD_H235ChallengeString (pctxt, &pvalue->challenge);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
/* decode random */
if (pvalue->m.randomPresent) {
stat = asn1PD_H235RandomVal (pctxt, &pvalue->random);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
/* decode certificate */
if (pvalue->m.certificatePresent) {
stat = asn1PD_H235TypedCertificate (pctxt, &pvalue->certificate);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
/* decode generalID */
if (pvalue->m.generalIDPresent) {
stat = asn1PD_H235Identifier (pctxt, &pvalue->generalID);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
/* decode nonStandard */
if (pvalue->m.nonStandardPresent) {
stat = asn1PD_H235NonStandardParameter (pctxt, &pvalue->nonStandard);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
if (extbit) {
/* decode extension optional bits length */
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
bitcnt += 1;
ZEROCONTEXT (&lctxt);
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = moveBitCursor (pctxt, bitcnt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
for (i = 0; i < bitcnt; i++) {
DECODEBIT (&lctxt, &optbit);
if (optbit) {
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
if (i < 2 && openType.numocts > 0) { /* known element */
copyContext (&lctxt2, pctxt);
initContextBuffer (pctxt, openType.data, openType.numocts);
switch (i) {
case 0:
pvalue->m.eckasdhkeyPresent = 1;
stat = asn1PD_H235ECKASDH (pctxt, &pvalue->eckasdhkey);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
break;
case 1:
pvalue->m.sendersIDPresent = 1;
stat = asn1PD_H235Identifier (pctxt, &pvalue->sendersID);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
break;
default:
pctxt->buffer.byteIndex += openType.numocts;
}
copyContext (pctxt, &lctxt2);
}
else { /* unknown element */
pctxt->buffer.byteIndex += openType.numocts;
}
}
}
}
return (stat);
}
/**************************************************************/
/* */
/* IV8 */
/* */
/**************************************************************/
EXTERN int asn1PD_H235IV8 (OOCTXT* pctxt, H235IV8* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 8, 8, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeOctetString (pctxt,
&pvalue->numocts,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* IV16 */
/* */
/**************************************************************/
EXTERN int asn1PD_H235IV16 (OOCTXT* pctxt, H235IV16* pvalue)
{
static Asn1SizeCnst lsize1 = { 0, 16, 16, 0 };
int stat = ASN_OK;
stat = addSizeConstraint (pctxt, &lsize1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeOctetString (pctxt,
&pvalue->numocts,
pvalue->data,
sizeof(pvalue->data));
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* Params */
/* */
/**************************************************************/
EXTERN int asn1PD_H235Params (OOCTXT* pctxt, H235Params* pvalue)
{
int stat = ASN_OK;
OOCTXT lctxt;
OOCTXT lctxt2;
ASN1OpenType openType;
ASN1UINT bitcnt;
ASN1UINT i;
ASN1BOOL optbit;
ASN1BOOL extbit;
/* extension bit */
stat = DECODEBIT (pctxt, &extbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* optional bits */
memset (&pvalue->m, 0, sizeof(pvalue->m));
stat = DECODEBIT (pctxt, &optbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->m.ranIntPresent = optbit;
stat = DECODEBIT (pctxt, &optbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->m.iv8Present = optbit;
/* decode ranInt */
if (pvalue->m.ranIntPresent) {
stat = decodeUnconsInteger (pctxt, &pvalue->ranInt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
/* decode iv8 */
if (pvalue->m.iv8Present) {
stat = asn1PD_H235IV8 (pctxt, &pvalue->iv8);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
if (extbit) {
/* decode extension optional bits length */
stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
bitcnt += 1;
ZEROCONTEXT (&lctxt);
stat = setPERBufferUsingCtxt (&lctxt, pctxt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = moveBitCursor (pctxt, bitcnt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
for (i = 0; i < bitcnt; i++) {
DECODEBIT (&lctxt, &optbit);
if (optbit) {
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
if (i < 1 && openType.numocts > 0) { /* known element */
copyContext (&lctxt2, pctxt);
initContextBuffer (pctxt, openType.data, openType.numocts);
switch (i) {
case 0:
pvalue->m.iv16Present = 1;
stat = asn1PD_H235IV16 (pctxt, &pvalue->iv16);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
break;
default:
pctxt->buffer.byteIndex += openType.numocts;
}
copyContext (pctxt, &lctxt2);
}
else { /* unknown element */
pctxt->buffer.byteIndex += openType.numocts;
}
}
}
}
return (stat);
}
/**************************************************************/
/* */
/* HASHED */
/* */
/**************************************************************/
EXTERN int asn1PD_H235HASHED (OOCTXT* pctxt, H235HASHED* pvalue)
{
int stat = ASN_OK;
/* decode algorithmOID */
stat = decodeObjectIdentifier (pctxt, &pvalue->algorithmOID);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode paramS */
stat = asn1PD_H235Params (pctxt, &pvalue->paramS);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode hash */
stat = decodeDynBitString (pctxt, (ASN1DynBitStr*)&pvalue->hash);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* ENCRYPTED */
/* */
/**************************************************************/
EXTERN int asn1PD_H235ENCRYPTED (OOCTXT* pctxt, H235ENCRYPTED* pvalue)
{
int stat = ASN_OK;
/* decode algorithmOID */
stat = decodeObjectIdentifier (pctxt, &pvalue->algorithmOID);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode paramS */
stat = asn1PD_H235Params (pctxt, &pvalue->paramS);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode encryptedData */
stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->encryptedData);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* EncodedPwdCertToken */
/* */
/**************************************************************/
EXTERN int asn1PD_H235EncodedPwdCertToken (OOCTXT* pctxt, H235EncodedPwdCertToken* pvalue)
{
int stat = ASN_OK;
stat = decodeOpenType (pctxt, &pvalue->data, &pvalue->numocts);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* CryptoToken_cryptoEncryptedToken */
/* */
/**************************************************************/
EXTERN int asn1PD_H235CryptoToken_cryptoEncryptedToken (OOCTXT* pctxt, H235CryptoToken_cryptoEncryptedToken* pvalue)
{
int stat = ASN_OK;
/* decode tokenOID */
stat = decodeObjectIdentifier (pctxt, &pvalue->tokenOID);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode token */
stat = asn1PD_H235ENCRYPTED (pctxt, &pvalue->token);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* EncodedGeneralToken */
/* */
/**************************************************************/
EXTERN int asn1PD_H235EncodedGeneralToken (OOCTXT* pctxt, H235EncodedGeneralToken* pvalue)
{
int stat = ASN_OK;
stat = decodeOpenType (pctxt, &pvalue->data, &pvalue->numocts);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* CryptoToken_cryptoSignedToken_token */
/* */
/**************************************************************/
EXTERN int asn1PD_H235CryptoToken_cryptoSignedToken_token (OOCTXT* pctxt, H235CryptoToken_cryptoSignedToken_token* pvalue)
{
int stat = ASN_OK;
/* decode toBeSigned */
stat = asn1PD_H235EncodedGeneralToken (pctxt, &pvalue->toBeSigned);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode algorithmOID */
stat = decodeObjectIdentifier (pctxt, &pvalue->algorithmOID);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode paramS */
stat = asn1PD_H235Params (pctxt, &pvalue->paramS);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode signature */
stat = decodeDynBitString (pctxt, (ASN1DynBitStr*)&pvalue->signature);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* CryptoToken_cryptoSignedToken */
/* */
/**************************************************************/
EXTERN int asn1PD_H235CryptoToken_cryptoSignedToken (OOCTXT* pctxt, H235CryptoToken_cryptoSignedToken* pvalue)
{
int stat = ASN_OK;
/* decode tokenOID */
stat = decodeObjectIdentifier (pctxt, &pvalue->tokenOID);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode token */
stat = asn1PD_H235CryptoToken_cryptoSignedToken_token (pctxt, &pvalue->token);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* CryptoToken_cryptoHashedToken */
/* */
/**************************************************************/
EXTERN int asn1PD_H235CryptoToken_cryptoHashedToken (OOCTXT* pctxt, H235CryptoToken_cryptoHashedToken* pvalue)
{
int stat = ASN_OK;
/* decode tokenOID */
stat = decodeObjectIdentifier (pctxt, &pvalue->tokenOID);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode hashedVals */
stat = asn1PD_H235ClearToken (pctxt, &pvalue->hashedVals);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
/* decode token */
stat = asn1PD_H235HASHED (pctxt, &pvalue->token);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
return (stat);
}
/**************************************************************/
/* */
/* CryptoToken */
/* */
/**************************************************************/
EXTERN int asn1PD_H235CryptoToken (OOCTXT* pctxt, H235CryptoToken* pvalue)
{
int stat = ASN_OK;
ASN1UINT ui;
ASN1OpenType openType;
ASN1BOOL extbit;
/* extension bit */
stat = DECODEBIT (pctxt, &extbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
if (!extbit) {
stat = decodeConsUnsigned (pctxt, &ui, 0, 3);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->t = ui + 1;
switch (ui) {
/* cryptoEncryptedToken */
case 0:
pvalue->u.cryptoEncryptedToken = ALLOC_ASN1ELEM (pctxt, H235CryptoToken_cryptoEncryptedToken);
if (pvalue->u.cryptoEncryptedToken == NULL)
return LOG_ASN1ERR (pctxt, ASN_E_NOMEM);
stat = asn1PD_H235CryptoToken_cryptoEncryptedToken (pctxt, pvalue->u.cryptoEncryptedToken);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
break;
/* cryptoSignedToken */
case 1:
pvalue->u.cryptoSignedToken = ALLOC_ASN1ELEM (pctxt, H235CryptoToken_cryptoSignedToken);
if (pvalue->u.cryptoSignedToken == NULL)
return LOG_ASN1ERR (pctxt, ASN_E_NOMEM);
stat = asn1PD_H235CryptoToken_cryptoSignedToken (pctxt, pvalue->u.cryptoSignedToken);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
break;
/* cryptoHashedToken */
case 2:
pvalue->u.cryptoHashedToken = ALLOC_ASN1ELEM (pctxt, H235CryptoToken_cryptoHashedToken);
if (pvalue->u.cryptoHashedToken == NULL)
return LOG_ASN1ERR (pctxt, ASN_E_NOMEM);
stat = asn1PD_H235CryptoToken_cryptoHashedToken (pctxt, pvalue->u.cryptoHashedToken);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
break;
/* cryptoPwdEncr */
case 3:
pvalue->u.cryptoPwdEncr = ALLOC_ASN1ELEM (pctxt, H235ENCRYPTED);
if (pvalue->u.cryptoPwdEncr == NULL)
return LOG_ASN1ERR (pctxt, ASN_E_NOMEM);
stat = asn1PD_H235ENCRYPTED (pctxt, pvalue->u.cryptoPwdEncr);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
break;
default:
return LOG_ASN1ERR (pctxt, ASN_E_INVOPT);
}
}
else {
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->t = ui + 5;
stat = decodeByteAlign (pctxt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
return (stat);
}
/**************************************************************/
/* */
/* AuthenticationBES */
/* */
/**************************************************************/
EXTERN int asn1PD_H235AuthenticationBES (OOCTXT* pctxt, H235AuthenticationBES* pvalue)
{
int stat = ASN_OK;
ASN1UINT ui;
ASN1OpenType openType;
ASN1BOOL extbit;
/* extension bit */
stat = DECODEBIT (pctxt, &extbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
if (!extbit) {
stat = decodeConsUnsigned (pctxt, &ui, 0, 1);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->t = ui + 1;
switch (ui) {
/* default_ */
case 0:
/* NULL */
break;
/* radius */
case 1:
/* NULL */
break;
default:
return LOG_ASN1ERR (pctxt, ASN_E_INVOPT);
}
}
else {
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->t = ui + 3;
stat = decodeByteAlign (pctxt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
}
return (stat);
}
/**************************************************************/
/* */
/* AuthenticationMechanism */
/* */
/**************************************************************/
EXTERN int asn1PD_H235AuthenticationMechanism (OOCTXT* pctxt, H235AuthenticationMechanism* pvalue)
{
int stat = ASN_OK;
ASN1UINT ui;
ASN1OpenType openType;
ASN1BOOL extbit;
OOCTXT lctxt;
/* extension bit */
stat = DECODEBIT (pctxt, &extbit);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
if (!extbit) {
stat = decodeConsUnsigned (pctxt, &ui, 0, 6);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->t = ui + 1;
switch (ui) {
/* dhExch */
case 0:
/* NULL */
break;
/* pwdSymEnc */
case 1:
/* NULL */
break;
/* pwdHash */
case 2:
/* NULL */
break;
/* certSign */
case 3:
/* NULL */
break;
/* ipsec */
case 4:
/* NULL */
break;
/* tls */
case 5:
/* NULL */
break;
/* nonStandard */
case 6:
pvalue->u.nonStandard = ALLOC_ASN1ELEM (pctxt, H235NonStandardParameter);
if (pvalue->u.nonStandard == NULL)
return LOG_ASN1ERR (pctxt, ASN_E_NOMEM);
stat = asn1PD_H235NonStandardParameter (pctxt, pvalue->u.nonStandard);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
break;
default:
return LOG_ASN1ERR (pctxt, ASN_E_INVOPT);
}
}
else {
stat = decodeSmallNonNegWholeNumber (pctxt, &ui);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
else pvalue->t = ui + 8;
stat = decodeByteAlign (pctxt);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
stat = decodeOpenType (pctxt, &openType.data, &openType.numocts);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
copyContext (&lctxt, pctxt);
initContextBuffer (pctxt, openType.data, openType.numocts);
switch (pvalue->t) {
/* authenticationBES */
case 8:
pvalue->u.authenticationBES = ALLOC_ASN1ELEM (pctxt, H235AuthenticationBES);
if (pvalue->u.authenticationBES == NULL)
return LOG_ASN1ERR (pctxt, ASN_E_NOMEM);
stat = asn1PD_H235AuthenticationBES (pctxt, pvalue->u.authenticationBES);
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
break;
default:;
}
copyContext (pctxt, &lctxt);
}
return (stat);
}