📄 h235-security-messagesenc.c
字号:
if (extbit) { /* encode extension optional bits length */ stat = encodeSmallNonNegWholeNumber (pctxt, 1); if (stat != ASN_OK) return stat; /* encode optional bits */ encodeBit (pctxt, (ASN1BOOL)pvalue->m.eckasdhkeyPresent); encodeBit (pctxt, (ASN1BOOL)pvalue->m.sendersIDPresent); /* encode extension elements */ if (pvalue->m.eckasdhkeyPresent) { initContext (&lctxt); stat = setPERBuffer (&lctxt, 0, 0, TRUE); if (stat != ASN_OK) return freeContext (&lctxt), stat; stat = asn1PE_H235ECKASDH (&lctxt, &pvalue->eckasdhkey); if (stat != ASN_OK) return freeContext (&lctxt), stat; stat = encodeByteAlign (&lctxt); if (stat != ASN_OK) return freeContext (&lctxt), stat; openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts); stat = encodeOpenType (pctxt, openType.numocts, openType.data); if (stat != ASN_OK) return freeContext (&lctxt), stat; freeContext (&lctxt); } if (pvalue->m.sendersIDPresent) { initContext (&lctxt); stat = setPERBuffer (&lctxt, 0, 0, TRUE); if (stat != ASN_OK) return freeContext (&lctxt), stat; stat = asn1PE_H235Identifier (&lctxt, pvalue->sendersID); if (stat != ASN_OK) return freeContext (&lctxt), stat; stat = encodeByteAlign (&lctxt); if (stat != ASN_OK) return freeContext (&lctxt), stat; openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts); stat = encodeOpenType (pctxt, openType.numocts, openType.data); if (stat != ASN_OK) return freeContext (&lctxt), stat; freeContext (&lctxt); } } return (stat);}/**************************************************************//* *//* IV8 *//* *//**************************************************************/EXTERN int asn1PE_H235IV8 (OOCTXT* pctxt, H235IV8* pvalue){ static Asn1SizeCnst lsize1 = { 0, 8, 8, 0 }; int stat = ASN_OK; addSizeConstraint (pctxt, &lsize1); stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data); if (stat != ASN_OK) return stat; return (stat);}/**************************************************************//* *//* IV16 *//* *//**************************************************************/EXTERN int asn1PE_H235IV16 (OOCTXT* pctxt, H235IV16* pvalue){ static Asn1SizeCnst lsize1 = { 0, 16, 16, 0 }; int stat = ASN_OK; addSizeConstraint (pctxt, &lsize1); stat = encodeOctetString (pctxt, pvalue->numocts, pvalue->data); if (stat != ASN_OK) return stat; return (stat);}/**************************************************************//* *//* Params *//* *//**************************************************************/EXTERN int asn1PE_H235Params (OOCTXT* pctxt, H235Params* pvalue){ int stat = ASN_OK; ASN1BOOL extbit; ASN1OpenType openType; OOCTXT lctxt; /* extension bit */ extbit = (ASN1BOOL)(pvalue->m.iv16Present); encodeBit (pctxt, extbit); encodeBit (pctxt, (ASN1BOOL)pvalue->m.ranIntPresent); encodeBit (pctxt, (ASN1BOOL)pvalue->m.iv8Present); /* encode ranInt */ if (pvalue->m.ranIntPresent) { stat = encodeUnconsInteger (pctxt, pvalue->ranInt); if (stat != ASN_OK) return stat; } /* encode iv8 */ if (pvalue->m.iv8Present) { stat = asn1PE_H235IV8 (pctxt, &pvalue->iv8); if (stat != ASN_OK) return stat; } if (extbit) { /* encode extension optional bits length */ stat = encodeSmallNonNegWholeNumber (pctxt, 0); if (stat != ASN_OK) return stat; /* encode optional bits */ encodeBit (pctxt, (ASN1BOOL)pvalue->m.iv16Present); /* encode extension elements */ if (pvalue->m.iv16Present) { initContext (&lctxt); stat = setPERBuffer (&lctxt, 0, 0, TRUE); if (stat != ASN_OK) return freeContext (&lctxt), stat; stat = asn1PE_H235IV16 (&lctxt, &pvalue->iv16); if (stat != ASN_OK) return freeContext (&lctxt), stat; stat = encodeByteAlign (&lctxt); if (stat != ASN_OK) return freeContext (&lctxt), stat; openType.data = encodeGetMsgPtr (&lctxt, (int*)&openType.numocts); stat = encodeOpenType (pctxt, openType.numocts, openType.data); if (stat != ASN_OK) return freeContext (&lctxt), stat; freeContext (&lctxt); } } return (stat);}/**************************************************************//* *//* ENCRYPTED *//* *//**************************************************************/EXTERN int asn1PE_H235ENCRYPTED (OOCTXT* pctxt, H235ENCRYPTED* pvalue){ int stat = ASN_OK; /* encode algorithmOID */ stat = encodeObjectIdentifier (pctxt, &pvalue->algorithmOID); if (stat != ASN_OK) return stat; /* encode paramS */ stat = asn1PE_H235Params (pctxt, &pvalue->paramS); if (stat != ASN_OK) return stat; /* encode encryptedData */ stat = encodeOctetString (pctxt, pvalue->encryptedData.numocts, pvalue->encryptedData.data); if (stat != ASN_OK) return stat; return (stat);}/**************************************************************//* *//* CryptoToken_cryptoEncryptedToken *//* *//**************************************************************/EXTERN int asn1PE_H235CryptoToken_cryptoEncryptedToken (OOCTXT* pctxt, H235CryptoToken_cryptoEncryptedToken* pvalue){ int stat = ASN_OK; /* encode tokenOID */ stat = encodeObjectIdentifier (pctxt, &pvalue->tokenOID); if (stat != ASN_OK) return stat; /* encode token */ stat = asn1PE_H235ENCRYPTED (pctxt, &pvalue->token); if (stat != ASN_OK) return stat; return (stat);}/**************************************************************//* *//* EncodedGeneralToken *//* *//**************************************************************/EXTERN int asn1PE_H235EncodedGeneralToken (OOCTXT* pctxt, H235EncodedGeneralToken value){ int stat = ASN_OK; stat = encodeOpenType (pctxt, value.numocts, value.data); if (stat != ASN_OK) return stat; return (stat);}/**************************************************************//* *//* CryptoToken_cryptoSignedToken_token *//* *//**************************************************************/EXTERN int asn1PE_H235CryptoToken_cryptoSignedToken_token (OOCTXT* pctxt, H235CryptoToken_cryptoSignedToken_token* pvalue){ int stat = ASN_OK; /* encode toBeSigned */ stat = asn1PE_H235EncodedGeneralToken (pctxt, pvalue->toBeSigned); if (stat != ASN_OK) return stat; /* encode algorithmOID */ stat = encodeObjectIdentifier (pctxt, &pvalue->algorithmOID); if (stat != ASN_OK) return stat; /* encode paramS */ stat = asn1PE_H235Params (pctxt, &pvalue->paramS); if (stat != ASN_OK) return stat; /* encode signature */ stat = encodeBitString (pctxt, pvalue->signature.numbits, pvalue->signature.data); if (stat != ASN_OK) return stat; return (stat);}/**************************************************************//* *//* CryptoToken_cryptoSignedToken *//* *//**************************************************************/EXTERN int asn1PE_H235CryptoToken_cryptoSignedToken (OOCTXT* pctxt, H235CryptoToken_cryptoSignedToken* pvalue){ int stat = ASN_OK; /* encode tokenOID */ stat = encodeObjectIdentifier (pctxt, &pvalue->tokenOID); if (stat != ASN_OK) return stat; /* encode token */ stat = asn1PE_H235CryptoToken_cryptoSignedToken_token (pctxt, &pvalue->token); if (stat != ASN_OK) return stat; return (stat);}/**************************************************************//* *//* HASHED *//* *//**************************************************************/EXTERN int asn1PE_H235HASHED (OOCTXT* pctxt, H235HASHED* pvalue){ int stat = ASN_OK; /* encode algorithmOID */ stat = encodeObjectIdentifier (pctxt, &pvalue->algorithmOID); if (stat != ASN_OK) return stat; /* encode paramS */ stat = asn1PE_H235Params (pctxt, &pvalue->paramS); if (stat != ASN_OK) return stat; /* encode hash */ stat = encodeBitString (pctxt, pvalue->hash.numbits, pvalue->hash.data); if (stat != ASN_OK) return stat; return (stat);}/**************************************************************//* *//* CryptoToken_cryptoHashedToken *//* *//**************************************************************/EXTERN int asn1PE_H235CryptoToken_cryptoHashedToken (OOCTXT* pctxt, H235CryptoToken_cryptoHashedToken* pvalue){ int stat = ASN_OK; /* encode tokenOID */ stat = encodeObjectIdentifier (pctxt, &pvalue->tokenOID); if (stat != ASN_OK) return stat; /* encode hashedVals */ stat = asn1PE_H235ClearToken (pctxt, &pvalue->hashedVals); if (stat != ASN_OK) return stat; /* encode token */ stat = asn1PE_H235HASHED (pctxt, &pvalue->token); if (stat != ASN_OK) return stat; return (stat);}/**************************************************************//* *//* CryptoToken *//* *//**************************************************************/EXTERN int asn1PE_H235CryptoToken (OOCTXT* pctxt, H235CryptoToken* pvalue){ int stat = ASN_OK; ASN1BOOL extbit; /* extension bit */ extbit = (ASN1BOOL)(pvalue->t > 4); encodeBit (pctxt, extbit); if (!extbit) { /* Encode choice index value */ stat = encodeConsUnsigned (pctxt, pvalue->t - 1, 0, 3); if (stat != ASN_OK) return stat; /* Encode root element data value */ switch (pvalue->t) { /* cryptoEncryptedToken */ case 1: stat = asn1PE_H235CryptoToken_cryptoEncryptedToken (pctxt, pvalue->u.cryptoEncryptedToken); if (stat != ASN_OK) return stat; break; /* cryptoSignedToken */ case 2: stat = asn1PE_H235CryptoToken_cryptoSignedToken (pctxt, pvalue->u.cryptoSignedToken); if (stat != ASN_OK) return stat; break; /* cryptoHashedToken */ case 3: stat = asn1PE_H235CryptoToken_cryptoHashedToken (pctxt, pvalue->u.cryptoHashedToken); if (stat != ASN_OK) return stat; break; /* cryptoPwdEncr */ case 4: stat = asn1PE_H235ENCRYPTED (pctxt, pvalue->u.cryptoPwdEncr); if (stat != ASN_OK) return stat; break; default: return ASN_E_INVOPT; } } else { /* Encode extension choice index value */ stat = encodeSmallNonNegWholeNumber (pctxt, pvalue->t - 5); if (stat != ASN_OK) return stat; /* Encode extension element data value */ } return (stat);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -