From accbb9d893ba34323919f5e17db17e6833d96f50 Mon Sep 17 00:00:00 2001 From: weidai Date: Sat, 19 Jun 2004 08:26:29 +0000 Subject: fix encoding/decoding of optional attributes git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@167 57ff6487-cd31-0410-9ec3-f628ee90f5f0 --- asn.h | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'asn.h') diff --git a/asn.h b/asn.h index ff91f86..b833d24 100644 --- a/asn.h +++ b/asn.h @@ -75,6 +75,9 @@ CRYPTOPP_DLL unsigned int BERDecodeTextString(BufferedTransformation &in, std::s CRYPTOPP_DLL unsigned int DEREncodeBitString(BufferedTransformation &out, const byte *str, unsigned int strLen, unsigned int unusedBits=0); CRYPTOPP_DLL unsigned int BERDecodeBitString(BufferedTransformation &in, SecByteBlock &str, unsigned int &unusedBits); +// BER decode from source and DER reencode into dest +CRYPTOPP_DLL void DERReencode(BufferedTransformation &source, BufferedTransformation &dest); + //! Object Identifier class CRYPTOPP_DLL OID { @@ -147,6 +150,7 @@ protected: unsigned int m_length; private: + void Init(byte asnTag); void StoreInitialize(const NameValuePairs ¶meters) {assert(false);} unsigned int ReduceLength(unsigned int delta); }; @@ -221,8 +225,8 @@ public: } void DEREncode(BufferedTransformation &out) { - if (get() != NULL) - get()->DEREncode(out); + if (this->get() != NULL) + this->get()->DEREncode(out); } }; @@ -259,10 +263,14 @@ public: void BERDecode(BufferedTransformation &bt); void DEREncode(BufferedTransformation &bt) const; - virtual void BERDecodeOptionalAttributes(BufferedTransformation &bt) - {} // TODO: skip optional attributes if present - virtual void DEREncodeOptionalAttributes(BufferedTransformation &bt) const - {} + //! decode optional attributes including context-specific tag + /*! /note default implementation stores attributes to be output in DEREncodeOptionalAttributes */ + virtual void BERDecodeOptionalAttributes(BufferedTransformation &bt); + //! encode optional attributes including context-specific tag + virtual void DEREncodeOptionalAttributes(BufferedTransformation &bt) const; + +private: + ByteQueue m_optionalAttributes; }; // ******************************************************** -- cgit v1.2.1