📄 h235-security-messagesdec.c
字号:
memset (&pvalue->m, 0, sizeof(pvalue->m)); DECODEBIT (pctxt, &optbit); pvalue->m.ranIntPresent = optbit; DECODEBIT (pctxt, &optbit); pvalue->m.iv8Present = optbit; /* decode ranInt */ if (pvalue->m.ranIntPresent) { invokeStartElement (pctxt, "ranInt", -1); stat = decodeUnconsInteger (pctxt, &pvalue->ranInt); if (stat != ASN_OK) return stat; invokeIntValue (pctxt, pvalue->ranInt); invokeEndElement (pctxt, "ranInt", -1); } /* decode iv8 */ if (pvalue->m.iv8Present) { invokeStartElement (pctxt, "iv8", -1); stat = asn1PD_H235IV8 (pctxt, &pvalue->iv8); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "iv8", -1); } if (extbit) { /* decode extension optional bits length */ stat = decodeSmallNonNegWholeNumber (pctxt, &bitcnt); if (stat != ASN_OK) return stat; bitcnt += 1; ZEROCONTEXT (&lctxt); stat = setPERBufferUsingCtxt (&lctxt, pctxt); if (stat != ASN_OK) return stat; stat = moveBitCursor (pctxt, bitcnt); if (stat != ASN_OK) return stat; for (i = 0; i < bitcnt; i++) { DECODEBIT (&lctxt, &optbit); if (optbit) { stat = decodeOpenType (pctxt, &openType.data, &openType.numocts); if (stat != ASN_OK) return 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; invokeStartElement (pctxt, "iv16", -1); stat = asn1PD_H235IV16 (pctxt, &pvalue->iv16); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "iv16", -1); break; default: pctxt->buffer.byteIndex += openType.numocts; } copyContext (pctxt, &lctxt2); } else { /* unknown element */ pctxt->buffer.byteIndex += openType.numocts; } } } } return (stat);}/**************************************************************//* *//* ENCRYPTED *//* *//**************************************************************/EXTERN int asn1PD_H235ENCRYPTED (OOCTXT* pctxt, H235ENCRYPTED* pvalue){ int stat = ASN_OK; /* decode algorithmOID */ invokeStartElement (pctxt, "algorithmOID", -1); stat = decodeObjectIdentifier (pctxt, &pvalue->algorithmOID); if (stat != ASN_OK) return stat; invokeOidValue (pctxt, pvalue->algorithmOID.numids, pvalue->algorithmOID.subid); invokeEndElement (pctxt, "algorithmOID", -1); /* decode paramS */ invokeStartElement (pctxt, "paramS", -1); stat = asn1PD_H235Params (pctxt, &pvalue->paramS); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "paramS", -1); /* decode encryptedData */ invokeStartElement (pctxt, "encryptedData", -1); stat = decodeDynOctetString (pctxt, (ASN1DynOctStr*)&pvalue->encryptedData); if (stat != ASN_OK) return stat; invokeOctStrValue (pctxt, pvalue->encryptedData.numocts, pvalue->encryptedData.data); invokeEndElement (pctxt, "encryptedData", -1); return (stat);}/**************************************************************//* *//* CryptoToken_cryptoEncryptedToken *//* *//**************************************************************/EXTERN int asn1PD_H235CryptoToken_cryptoEncryptedToken (OOCTXT* pctxt, H235CryptoToken_cryptoEncryptedToken* pvalue){ int stat = ASN_OK; /* decode tokenOID */ invokeStartElement (pctxt, "tokenOID", -1); stat = decodeObjectIdentifier (pctxt, &pvalue->tokenOID); if (stat != ASN_OK) return stat; invokeOidValue (pctxt, pvalue->tokenOID.numids, pvalue->tokenOID.subid); invokeEndElement (pctxt, "tokenOID", -1); /* decode token */ invokeStartElement (pctxt, "token", -1); stat = asn1PD_H235ENCRYPTED (pctxt, &pvalue->token); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "token", -1); 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 stat; invokeOpenTypeValue (pctxt, pvalue->numocts, pvalue->data); return (stat);}/**************************************************************//* *//* CryptoToken_cryptoSignedToken_token *//* *//**************************************************************/EXTERN int asn1PD_H235CryptoToken_cryptoSignedToken_token (OOCTXT* pctxt, H235CryptoToken_cryptoSignedToken_token* pvalue){ int stat = ASN_OK; /* decode toBeSigned */ invokeStartElement (pctxt, "toBeSigned", -1); stat = asn1PD_H235EncodedGeneralToken (pctxt, &pvalue->toBeSigned); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "toBeSigned", -1); /* decode algorithmOID */ invokeStartElement (pctxt, "algorithmOID", -1); stat = decodeObjectIdentifier (pctxt, &pvalue->algorithmOID); if (stat != ASN_OK) return stat; invokeOidValue (pctxt, pvalue->algorithmOID.numids, pvalue->algorithmOID.subid); invokeEndElement (pctxt, "algorithmOID", -1); /* decode paramS */ invokeStartElement (pctxt, "paramS", -1); stat = asn1PD_H235Params (pctxt, &pvalue->paramS); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "paramS", -1); /* decode signature */ invokeStartElement (pctxt, "signature", -1); stat = decodeDynBitString (pctxt, (ASN1DynBitStr*)&pvalue->signature); if (stat != ASN_OK) return stat; invokeBitStrValue (pctxt, pvalue->signature.numbits, pvalue->signature.data); invokeEndElement (pctxt, "signature", -1); return (stat);}/**************************************************************//* *//* CryptoToken_cryptoSignedToken *//* *//**************************************************************/EXTERN int asn1PD_H235CryptoToken_cryptoSignedToken (OOCTXT* pctxt, H235CryptoToken_cryptoSignedToken* pvalue){ int stat = ASN_OK; /* decode tokenOID */ invokeStartElement (pctxt, "tokenOID", -1); stat = decodeObjectIdentifier (pctxt, &pvalue->tokenOID); if (stat != ASN_OK) return stat; invokeOidValue (pctxt, pvalue->tokenOID.numids, pvalue->tokenOID.subid); invokeEndElement (pctxt, "tokenOID", -1); /* decode token */ invokeStartElement (pctxt, "token", -1); stat = asn1PD_H235CryptoToken_cryptoSignedToken_token (pctxt, &pvalue->token); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "token", -1); return (stat);}/**************************************************************//* *//* HASHED *//* *//**************************************************************/EXTERN int asn1PD_H235HASHED (OOCTXT* pctxt, H235HASHED* pvalue){ int stat = ASN_OK; /* decode algorithmOID */ invokeStartElement (pctxt, "algorithmOID", -1); stat = decodeObjectIdentifier (pctxt, &pvalue->algorithmOID); if (stat != ASN_OK) return stat; invokeOidValue (pctxt, pvalue->algorithmOID.numids, pvalue->algorithmOID.subid); invokeEndElement (pctxt, "algorithmOID", -1); /* decode paramS */ invokeStartElement (pctxt, "paramS", -1); stat = asn1PD_H235Params (pctxt, &pvalue->paramS); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "paramS", -1); /* decode hash */ invokeStartElement (pctxt, "hash", -1); stat = decodeDynBitString (pctxt, (ASN1DynBitStr*)&pvalue->hash); if (stat != ASN_OK) return stat; invokeBitStrValue (pctxt, pvalue->hash.numbits, pvalue->hash.data); invokeEndElement (pctxt, "hash", -1); return (stat);}/**************************************************************//* *//* CryptoToken_cryptoHashedToken *//* *//**************************************************************/EXTERN int asn1PD_H235CryptoToken_cryptoHashedToken (OOCTXT* pctxt, H235CryptoToken_cryptoHashedToken* pvalue){ int stat = ASN_OK; /* decode tokenOID */ invokeStartElement (pctxt, "tokenOID", -1); stat = decodeObjectIdentifier (pctxt, &pvalue->tokenOID); if (stat != ASN_OK) return stat; invokeOidValue (pctxt, pvalue->tokenOID.numids, pvalue->tokenOID.subid); invokeEndElement (pctxt, "tokenOID", -1); /* decode hashedVals */ invokeStartElement (pctxt, "hashedVals", -1); stat = asn1PD_H235ClearToken (pctxt, &pvalue->hashedVals); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "hashedVals", -1); /* decode token */ invokeStartElement (pctxt, "token", -1); stat = asn1PD_H235HASHED (pctxt, &pvalue->token); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "token", -1); return (stat);}/**************************************************************//* *//* CryptoToken *//* *//**************************************************************/EXTERN int asn1PD_H235CryptoToken (OOCTXT* pctxt, H235CryptoToken* pvalue){ int stat = ASN_OK; ASN1UINT ui; ASN1OpenType openType; ASN1BOOL extbit; /* extension bit */ DECODEBIT (pctxt, &extbit); if (!extbit) { stat = decodeConsUnsigned (pctxt, &ui, 0, 3); if (stat != ASN_OK) return stat; else pvalue->t = ui + 1; switch (ui) { /* cryptoEncryptedToken */ case 0: invokeStartElement (pctxt, "cryptoEncryptedToken", -1); pvalue->u.cryptoEncryptedToken = ALLOC_ASN1ELEM (pctxt, H235CryptoToken_cryptoEncryptedToken); stat = asn1PD_H235CryptoToken_cryptoEncryptedToken (pctxt, pvalue->u.cryptoEncryptedToken); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "cryptoEncryptedToken", -1); break; /* cryptoSignedToken */ case 1: invokeStartElement (pctxt, "cryptoSignedToken", -1); pvalue->u.cryptoSignedToken = ALLOC_ASN1ELEM (pctxt, H235CryptoToken_cryptoSignedToken); stat = asn1PD_H235CryptoToken_cryptoSignedToken (pctxt, pvalue->u.cryptoSignedToken); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "cryptoSignedToken", -1); break; /* cryptoHashedToken */ case 2: invokeStartElement (pctxt, "cryptoHashedToken", -1); pvalue->u.cryptoHashedToken = ALLOC_ASN1ELEM (pctxt, H235CryptoToken_cryptoHashedToken); stat = asn1PD_H235CryptoToken_cryptoHashedToken (pctxt, pvalue->u.cryptoHashedToken); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "cryptoHashedToken", -1); break; /* cryptoPwdEncr */ case 3: invokeStartElement (pctxt, "cryptoPwdEncr", -1); pvalue->u.cryptoPwdEncr = ALLOC_ASN1ELEM (pctxt, H235ENCRYPTED); stat = asn1PD_H235ENCRYPTED (pctxt, pvalue->u.cryptoPwdEncr); if (stat != ASN_OK) return stat; invokeEndElement (pctxt, "cryptoPwdEncr", -1); break; default: return ASN_E_INVOPT; } } else { stat = decodeSmallNonNegWholeNumber (pctxt, &ui); if (stat != ASN_OK) return stat; else pvalue->t = ui + 5; stat = decodeByteAlign (pctxt); if (stat != ASN_OK) return stat; stat = decodeOpenType (pctxt, &openType.data, &openType.numocts); if (stat != ASN_OK) return stat; } return (stat);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -