/// <summary> /// Create a new DerInteger for the value. /// </summary> /// /// <param name="integer">The value to encode.</param> public DerInteger(int integer) : base(net.named_data.jndn.encoding.der.DerNodeType.Integer) { if (integer < 0) throw new DerEncodingException( "DerInteger: Negative integers are not currently supported"); // Convert the integer to bytes the easy/slow way. DynamicByteBuffer temp = new DynamicByteBuffer(10); // We encode backwards from the back. temp.position(temp.limit()); while (true) { temp.ensuredPutFromBack((byte) (integer & 0xff)); integer >>= 8; if (integer <= 0) // We check for 0 at the end so we encode one byte if it is 0. break; } if ((((int) temp.buffer().get(temp.position())) & 0xff) >= 0x80) // Make it a non-negative integer. temp.ensuredPutFromBack((byte) 0); payload_.ensuredPut(temp.buffer().slice()); encodeHeader(payload_.position()); }
/// <summary> /// Compute the encoding for one part of an OID, where values greater than 128 must be encoded as multiple bytes. /// </summary> /// /// <param name="value">A component of an OID.</param> /// <returns>The encoded buffer.</returns> public static ByteBuffer encode128(int value_ren) { int mask = (1 << 7) - 1; DynamicByteBuffer outBytes = new DynamicByteBuffer(10); // We encode backwards from the back. outBytes.position(outBytes.limit()); if (value_ren < 128) outBytes.ensuredPutFromBack((byte) (value_ren & mask)); else { outBytes.ensuredPutFromBack((byte) (value_ren & mask)); value_ren >>= 7; while (value_ren != 0) { outBytes.ensuredPutFromBack((byte) ((value_ren & mask) | (1 << 7))); value_ren >>= 7; } } return outBytes.buffer().slice(); }
/// <summary> /// Encode the given size and update the header. /// </summary> /// /// <param name="size">The payload size to encode.</param> protected internal void encodeHeader(int size) { DynamicByteBuffer buffer = new DynamicByteBuffer(10); buffer.ensuredPut((byte) nodeType_); if (size < 0) // We don't expect this to happen since this is a protected method and // always called with the non-negative size() of some buffer. throw new Exception("encodeHeader: DER object has negative length"); else if (size <= 127) buffer.ensuredPut((byte) (size & 0xff)); else { DynamicByteBuffer tempBuf = new DynamicByteBuffer(10); // We encode backwards from the back. tempBuf.position(tempBuf.limit()); int val = size; int n = 0; while (val != 0) { tempBuf.ensuredPutFromBack((byte) (val & 0xff)); val >>= 8; n += 1; } tempBuf.ensuredPutFromBack((byte) (((1 << 7) | n) & 0xff)); buffer.ensuredPut(tempBuf.buffer()); } header_ = buffer.flippedBuffer(); }