Search in sources :

Example 6 with BerTag

use of com.beanit.asn1bean.ber.BerTag in project jasn1 by openmuc.

the class BerClassWriter method writeSequenceOrSetClass.

private void writeSequenceOrSetClass(String className, AsnSequenceSet asnSequenceSet, Tag tag, String isStaticStr, List<String> listOfSubClassNames) throws IOException {
    write("public" + isStaticStr + " class " + className + " implements " + berTypeInterfaceString + "Serializable {\n");
    write("private static final long serialVersionUID = 1L;\n");
    List<AsnElementType> componentTypes = asnSequenceSet.componentTypes;
    addAutomaticTagsIfNeeded(componentTypes);
    if (asnSequenceSet.parameters != null) {
        List<AsnParameter> parameters = asnSequenceSet.parameters;
        replaceParametersByAnyTypes(componentTypes, parameters);
    }
    for (AsnElementType componentType : componentTypes) {
        if ((componentType.typeReference instanceof AsnConstructedType)) {
            listOfSubClassNames.add(getClassName(componentType));
        }
    }
    for (AsnElementType componentType : componentTypes) {
        if (isInnerType(componentType)) {
            String subClassName = getClassName(componentType, className);
            writeConstructedTypeClass(subClassName, componentType.typeReference, null, true, listOfSubClassNames);
        }
    }
    Tag mainTag;
    if (tag == null) {
        if (asnSequenceSet.isSequence) {
            mainTag = stdSeqTag;
        } else {
            mainTag = stdSetTag;
        }
    } else {
        mainTag = tag;
    }
    write("public static final BerTag tag = new BerTag(" + getBerTagParametersString(mainTag) + ");\n");
    write("private byte[] code = null;");
    setClassNamesOfComponents(listOfSubClassNames, componentTypes, className);
    writeMembers(componentTypes);
    if (asnSequenceSet.isSequence && accessExtended && extensibilityImplied) {
        String accessModifierString = jaxbMode ? "private" : "public";
        write(accessModifierString + " byte[] extensionBytes = null;");
    }
    writeEmptyConstructor(className);
    if (jaxbMode) {
        writeGetterAndSetter(componentTypes);
        if (asnSequenceSet.isSequence && accessExtended && extensibilityImplied) {
            write("public byte[] getExtensionBytes() {");
            write("return extensionBytes;");
            write("}\n");
            write("public void setExtensionBytes(byte[] bytes) {");
            write("this.extensionBytes = bytes;");
            write("}\n");
        }
    } else {
        writeEncodeConstructor(className, componentTypes);
    }
    boolean hasExplicitTag = (tag != null) && (tag.type == TagType.EXPLICIT);
    writeSimpleEncodeFunction();
    writeSequenceOrSetEncodeFunction(componentTypes, hasExplicitTag, asnSequenceSet.isSequence);
    writeSimpleDecodeFunction("true");
    if (asnSequenceSet.isSequence) {
        writeSequenceDecodeMethod(convertToComponentInfos(componentTypes), hasExplicitTag);
    } else {
        writeSetDecodeFunction(convertToComponentInfos(componentTypes), hasExplicitTag);
    }
    writeEncodeAndSaveFunction();
    writeSequenceOrSetToStringFunction(componentTypes);
    write("}\n");
}
Also used : AsnConstructedType(com.beanit.asn1bean.compiler.model.AsnConstructedType) AsnParameter(com.beanit.asn1bean.compiler.model.AsnParameter) AsnCharacterString(com.beanit.asn1bean.compiler.model.AsnCharacterString) AsnOctetString(com.beanit.asn1bean.compiler.model.AsnOctetString) HexString(com.beanit.asn1bean.util.HexString) AsnBitString(com.beanit.asn1bean.compiler.model.AsnBitString) BerTag(com.beanit.asn1bean.ber.BerTag) AsnTag(com.beanit.asn1bean.compiler.model.AsnTag) AsnElementType(com.beanit.asn1bean.compiler.model.AsnElementType)

Example 7 with BerTag

use of com.beanit.asn1bean.ber.BerTag in project jasn1 by openmuc.

the class BerOctetString method decodeConstructedOctetString.

private int decodeConstructedOctetString(InputStream is) throws IOException {
    BerLength length = new BerLength();
    int lengthLength = length.decode(is);
    value = new byte[0];
    int vLength = 0;
    if (length.val < 0) {
        BerTag berTag = new BerTag();
        vLength += berTag.decode(is);
        while (!berTag.equals(0, 0, 0)) {
            BerOctetString subOctetString = new BerOctetString();
            vLength += subOctetString.decode(is, false);
            value = concatenate(value, subOctetString.value);
            vLength += berTag.decode(is);
        }
        vLength += BerLength.readEocByte(is);
    } else {
        while (vLength < length.val) {
            BerOctetString subOctetString = new BerOctetString();
            vLength += subOctetString.decode(is);
            value = concatenate(value, subOctetString.value);
        }
    }
    return lengthLength + vLength;
}
Also used : BerLength(com.beanit.asn1bean.ber.BerLength) BerTag(com.beanit.asn1bean.ber.BerTag)

Example 8 with BerTag

use of com.beanit.asn1bean.ber.BerTag in project jasn1 by openmuc.

the class BerClassWriter method writeSequenceOfClass.

private void writeSequenceOfClass(String className, AsnSequenceOf asnSequenceOf, Tag tag, String isStaticStr, List<String> listOfSubClassNames) throws IOException {
    write("public" + isStaticStr + " class " + className + " implements " + berTypeInterfaceString + "Serializable {\n");
    write("private static final long serialVersionUID = 1L;\n");
    AsnElementType componentType = asnSequenceOf.componentType;
    String referencedTypeName = getClassNameOfSequenceOfElement(componentType, listOfSubClassNames);
    if (isInnerType(componentType)) {
        writeConstructedTypeClass(referencedTypeName, componentType.typeReference, null, true, listOfSubClassNames);
    }
    Tag mainTag;
    if (tag == null) {
        if (asnSequenceOf.isSequenceOf) {
            mainTag = stdSeqTag;
        } else {
            mainTag = stdSetTag;
        }
    } else {
        mainTag = tag;
    }
    write("public static final BerTag tag = new BerTag(" + getBerTagParametersString(mainTag) + ");");
    write("private byte[] code = null;");
    if (jaxbMode) {
        write("private List<" + referencedTypeName + "> seqOf = null;\n");
    } else {
        write("public List<" + referencedTypeName + "> seqOf = null;\n");
    }
    write("public " + className + "() {");
    write("seqOf = new ArrayList<>();");
    write("}\n");
    write("public " + className + "(byte[] code) {");
    write("this.code = code;");
    write("}\n");
    if (!jaxbMode) {
        write("public " + className + "(List<" + referencedTypeName + "> seqOf) {");
        write("this.seqOf = seqOf;");
        write("}\n");
    }
    if (jaxbMode) {
        writeGetterForSeqOf(referencedTypeName);
    }
    boolean hasExplicitTag = (tag != null) && (tag.type == TagType.EXPLICIT);
    writeSimpleEncodeFunction();
    writeSequenceOfEncodeFunction(componentType, hasExplicitTag, asnSequenceOf.isSequenceOf);
    writeSimpleDecodeFunction("true");
    writeSequenceOrSetOfDecodeFunction(convertToComponentInfo(componentType, false, referencedTypeName), hasExplicitTag, asnSequenceOf.isSequenceOf);
    writeEncodeAndSaveFunction();
    writeSequenceOrSetOfToStringFunction(referencedTypeName, componentType);
    write("}\n");
}
Also used : AsnCharacterString(com.beanit.asn1bean.compiler.model.AsnCharacterString) AsnOctetString(com.beanit.asn1bean.compiler.model.AsnOctetString) HexString(com.beanit.asn1bean.util.HexString) AsnBitString(com.beanit.asn1bean.compiler.model.AsnBitString) BerTag(com.beanit.asn1bean.ber.BerTag) AsnTag(com.beanit.asn1bean.compiler.model.AsnTag) AsnElementType(com.beanit.asn1bean.compiler.model.AsnElementType)

Example 9 with BerTag

use of com.beanit.asn1bean.ber.BerTag in project jasn1 by openmuc.

the class BerClassWriter method writeEncodeTag.

private void writeEncodeTag(Tag tag) throws IOException {
    int typeStructure;
    if (tag.typeStructure == TypeStructure.CONSTRUCTED) {
        typeStructure = BerTag.CONSTRUCTED;
    } else {
        typeStructure = BerTag.PRIMITIVE;
    }
    BerTag berTag = new BerTag(getTagClassId(tag.tagClass.toString()), typeStructure, tag.value);
    write("// write tag: " + tag.tagClass + "_CLASS, " + tag.typeStructure + ", " + tag.value);
    for (int i = (berTag.tagBytes.length - 1); i >= 0; i--) {
        write("reverseOS.write(0x" + HexString.fromByte(berTag.tagBytes[i]) + ");");
    }
    write("codeLength += " + berTag.tagBytes.length + ";");
}
Also used : BerTag(com.beanit.asn1bean.ber.BerTag)

Example 10 with BerTag

use of com.beanit.asn1bean.ber.BerTag in project sandbox-java by stIncMale.

the class ReceiptAttribute method decode.

public int decode(InputStream is, boolean withTag) throws IOException {
    int tlByteCount = 0;
    int vByteCount = 0;
    BerTag berTag = new BerTag();
    if (withTag) {
        tlByteCount += tag.decodeAndCheck(is);
    }
    BerLength length = new BerLength();
    tlByteCount += length.decode(is);
    int lengthVal = length.val;
    vByteCount += berTag.decode(is);
    if (berTag.equals(BerInteger.tag)) {
        type = new BerInteger();
        vByteCount += type.decode(is, false);
        vByteCount += berTag.decode(is);
    } else {
        throw new IOException("Tag does not match mandatory sequence component.");
    }
    if (berTag.equals(BerInteger.tag)) {
        version = new BerInteger();
        vByteCount += version.decode(is, false);
        vByteCount += berTag.decode(is);
    } else {
        throw new IOException("Tag does not match mandatory sequence component.");
    }
    if (berTag.equals(BerOctetString.tag)) {
        value = new BerOctetString();
        vByteCount += value.decode(is, false);
        if (lengthVal >= 0 && vByteCount == lengthVal) {
            return tlByteCount + vByteCount;
        }
        vByteCount += berTag.decode(is);
    } else {
        throw new IOException("Tag does not match mandatory sequence component.");
    }
    if (lengthVal < 0) {
        if (!berTag.equals(0, 0, 0)) {
            throw new IOException("Decoded sequence has wrong end of contents octets");
        }
        vByteCount += BerLength.readEocByte(is);
        return tlByteCount + vByteCount;
    }
    throw new IOException("Unexpected end of sequence, length tag: " + lengthVal + ", bytes decoded: " + vByteCount);
}
Also used : BerLength(com.beanit.asn1bean.ber.BerLength) BerOctetString(com.beanit.asn1bean.ber.types.BerOctetString) IOException(java.io.IOException) BerInteger(com.beanit.asn1bean.ber.types.BerInteger) BerTag(com.beanit.asn1bean.ber.BerTag)

Aggregations

BerTag (com.beanit.asn1bean.ber.BerTag)10 BerLength (com.beanit.asn1bean.ber.BerLength)6 IOException (java.io.IOException)5 BerInteger (com.beanit.asn1bean.ber.types.BerInteger)2 BerOctetString (com.beanit.asn1bean.ber.types.BerOctetString)2 AsnBitString (com.beanit.asn1bean.compiler.model.AsnBitString)2 AsnCharacterString (com.beanit.asn1bean.compiler.model.AsnCharacterString)2 AsnElementType (com.beanit.asn1bean.compiler.model.AsnElementType)2 AsnOctetString (com.beanit.asn1bean.compiler.model.AsnOctetString)2 AsnTag (com.beanit.asn1bean.compiler.model.AsnTag)2 HexString (com.beanit.asn1bean.util.HexString)2 BerObjectDescriptor (com.beanit.asn1bean.ber.types.string.BerObjectDescriptor)1 AsnConstructedType (com.beanit.asn1bean.compiler.model.AsnConstructedType)1 AsnParameter (com.beanit.asn1bean.compiler.model.AsnParameter)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1