@peculiar/asn1-schema
Advanced tools
Comparing version 1.1.1 to 1.1.2
@@ -6,3 +6,3 @@ /** | ||
import * as asn1 from 'asn1js'; | ||
import { Null, fromBER, Integer, Enumerated, BitString, ObjectIdentifier, Boolean, OctetString, BmpString, UniversalString, NumericString, PrintableString, TeletexString, VideotexString, IA5String, GraphicString, VisibleString, GeneralString, CharacterString, UTCTime, GeneralizedTime, Utf8String, Any, Repeated, Set, Sequence, Primitive, Constructed, Choice, compareSchema } from 'asn1js'; | ||
import { Null, fromBER, Integer, Enumerated, BitString, ObjectIdentifier, Boolean, OctetString, BmpString, UniversalString, NumericString, PrintableString, TeletexString, VideotexString, IA5String, GraphicString, VisibleString, GeneralString, CharacterString, UTCTime, GeneralizedTime, Utf8String, Any, Repeated, Set, Sequence, Constructed, Primitive, Choice, compareSchema } from 'asn1js'; | ||
@@ -78,2 +78,8 @@ const AsnAnyConverter = { | ||
}; | ||
const AsnNullConverter = { | ||
fromASN: (value) => null, | ||
toASN: (value) => { | ||
return new Null(); | ||
}, | ||
}; | ||
@@ -103,3 +109,4 @@ var defaultConverters = /*#__PURE__*/Object.freeze({ | ||
AsnUTCTimeConverter: AsnUTCTimeConverter, | ||
AsnGeneralizedTimeConverter: AsnGeneralizedTimeConverter | ||
AsnGeneralizedTimeConverter: AsnGeneralizedTimeConverter, | ||
AsnNullConverter: AsnNullConverter | ||
}); | ||
@@ -222,3 +229,6 @@ | ||
if (typeof item.type === "number") { | ||
asn1Value.push(new Primitive({ | ||
const Container = item.repeated | ||
? Constructed | ||
: Primitive; | ||
asn1Value.push(new Container({ | ||
name, | ||
@@ -234,5 +244,8 @@ optional, | ||
this.cache(item.type); | ||
const value = this.get(item.type).schema.valueBlock.value; | ||
const isRepeatedString = typeof item.repeated === "string"; | ||
const value = !isRepeatedString | ||
? this.get(item.type).schema.valueBlock.value | ||
: asn1Item.valueBlock.value; | ||
asn1Value.push(new Constructed({ | ||
name, | ||
name: !isRepeatedString ? name : "", | ||
optional, | ||
@@ -363,3 +376,3 @@ idBlock: { | ||
} | ||
static fromASN(asn1Schema, target, validateSchema = true) { | ||
static fromASN(asn1Schema, target) { | ||
try { | ||
@@ -385,7 +398,5 @@ if (isConvertible(target)) { | ||
} | ||
if (validateSchema) { | ||
const asn1ComparedSchema = compareSchema(asn1Schema, asn1Schema, targetSchema); | ||
if (!asn1ComparedSchema.verified) { | ||
throw new AsnSchemaValidationError(`Data does not match to ${target.name} ASN1 schema. ${asn1ComparedSchema.result.error}`); | ||
} | ||
const asn1ComparedSchema = compareSchema(asn1Schema, asn1Schema, targetSchema); | ||
if (!asn1ComparedSchema.verified) { | ||
throw new AsnSchemaValidationError(`Data does not match to ${target.name} ASN1 schema. ${asn1ComparedSchema.result.error}`); | ||
} | ||
@@ -404,3 +415,14 @@ const res = new target(); | ||
if (schemaItem.repeated) { | ||
res[key] = Array.from(asn1Schema[key], (element) => converter.fromASN(element)); | ||
if (schemaItem.implicit && typeof schemaItem.repeated === "string") { | ||
const Container = schemaItem.repeated === "sequence" | ||
? Sequence | ||
: Set; | ||
const newItem = new Container(); | ||
newItem.valueBlock = asn1Schema[key].valueBlock; | ||
const value = fromBER(newItem.toBER(false)).result.valueBlock.value; | ||
res[key] = Array.from(value, (element) => converter.fromASN(element)); | ||
} | ||
else { | ||
res[key] = Array.from(asn1Schema[key], (element) => converter.fromASN(element)); | ||
} | ||
} | ||
@@ -472,6 +494,6 @@ else { | ||
else { | ||
const container = item.repeated === "sequence" | ||
const Container = item.repeated === "sequence" | ||
? Sequence | ||
: Set; | ||
asn1Item = new container({ | ||
asn1Item = new Container({ | ||
value: items, | ||
@@ -492,6 +514,6 @@ }); | ||
else { | ||
const container = item.repeated === "sequence" | ||
const Container = item.repeated === "sequence" | ||
? Sequence | ||
: Set; | ||
asn1Item = new container({ | ||
asn1Item = new Container({ | ||
value: items, | ||
@@ -507,3 +529,3 @@ }); | ||
if (item.implicit) { | ||
if (typeof item.type === "number") { | ||
if (!item.repeated && typeof item.type === "number") { | ||
const value = {}; | ||
@@ -564,2 +586,2 @@ value.valueHex = asn1Item.valueBlock.toBER(); | ||
export { AsnAnyConverter, AsnBitStringConverter, AsnBmpStringConverter, AsnBooleanConverter, AsnCharacterStringConverter, AsnEnumeratedConverter, AsnGeneralStringConverter, AsnGeneralizedTimeConverter, AsnGraphicStringConverter, AsnIA5StringConverter, AsnIntegerArrayBufferConverter, AsnIntegerConverter, AsnNumericStringConverter, AsnObjectIdentifierConverter, AsnOctetStringConverter, AsnParser, AsnPrintableStringConverter, AsnProp, AsnPropTypes, AsnSerializer, AsnTeletexStringConverter, AsnType, AsnTypeTypes, AsnUTCTimeConverter, AsnUniversalStringConverter, AsnUtf8StringConverter, AsnVideotexStringConverter, AsnVisibleStringConverter, index as errors }; | ||
export { AsnAnyConverter, AsnBitStringConverter, AsnBmpStringConverter, AsnBooleanConverter, AsnCharacterStringConverter, AsnEnumeratedConverter, AsnGeneralStringConverter, AsnGeneralizedTimeConverter, AsnGraphicStringConverter, AsnIA5StringConverter, AsnIntegerArrayBufferConverter, AsnIntegerConverter, AsnNullConverter, AsnNumericStringConverter, AsnObjectIdentifierConverter, AsnOctetStringConverter, AsnParser, AsnPrintableStringConverter, AsnProp, AsnPropTypes, AsnSerializer, AsnTeletexStringConverter, AsnType, AsnTypeTypes, AsnUTCTimeConverter, AsnUniversalStringConverter, AsnUtf8StringConverter, AsnVideotexStringConverter, AsnVisibleStringConverter, index as errors }; |
@@ -80,2 +80,8 @@ /** | ||
}; | ||
const AsnNullConverter = { | ||
fromASN: (value) => null, | ||
toASN: (value) => { | ||
return new asn1.Null(); | ||
}, | ||
}; | ||
@@ -105,3 +111,4 @@ var defaultConverters = /*#__PURE__*/Object.freeze({ | ||
AsnUTCTimeConverter: AsnUTCTimeConverter, | ||
AsnGeneralizedTimeConverter: AsnGeneralizedTimeConverter | ||
AsnGeneralizedTimeConverter: AsnGeneralizedTimeConverter, | ||
AsnNullConverter: AsnNullConverter | ||
}); | ||
@@ -222,3 +229,6 @@ | ||
if (typeof item.type === "number") { | ||
asn1Value.push(new asn1.Primitive({ | ||
const Container = item.repeated | ||
? asn1.Constructed | ||
: asn1.Primitive; | ||
asn1Value.push(new Container({ | ||
name, | ||
@@ -234,5 +244,8 @@ optional, | ||
this.cache(item.type); | ||
const value = this.get(item.type).schema.valueBlock.value; | ||
const isRepeatedString = typeof item.repeated === "string"; | ||
const value = !isRepeatedString | ||
? this.get(item.type).schema.valueBlock.value | ||
: asn1Item.valueBlock.value; | ||
asn1Value.push(new asn1.Constructed({ | ||
name, | ||
name: !isRepeatedString ? name : "", | ||
optional, | ||
@@ -363,3 +376,3 @@ idBlock: { | ||
} | ||
static fromASN(asn1Schema, target, validateSchema = true) { | ||
static fromASN(asn1Schema, target) { | ||
try { | ||
@@ -385,7 +398,5 @@ if (isConvertible(target)) { | ||
} | ||
if (validateSchema) { | ||
const asn1ComparedSchema = asn1.compareSchema(asn1Schema, asn1Schema, targetSchema); | ||
if (!asn1ComparedSchema.verified) { | ||
throw new AsnSchemaValidationError(`Data does not match to ${target.name} ASN1 schema. ${asn1ComparedSchema.result.error}`); | ||
} | ||
const asn1ComparedSchema = asn1.compareSchema(asn1Schema, asn1Schema, targetSchema); | ||
if (!asn1ComparedSchema.verified) { | ||
throw new AsnSchemaValidationError(`Data does not match to ${target.name} ASN1 schema. ${asn1ComparedSchema.result.error}`); | ||
} | ||
@@ -404,3 +415,14 @@ const res = new target(); | ||
if (schemaItem.repeated) { | ||
res[key] = Array.from(asn1Schema[key], (element) => converter.fromASN(element)); | ||
if (schemaItem.implicit && typeof schemaItem.repeated === "string") { | ||
const Container = schemaItem.repeated === "sequence" | ||
? asn1.Sequence | ||
: asn1.Set; | ||
const newItem = new Container(); | ||
newItem.valueBlock = asn1Schema[key].valueBlock; | ||
const value = asn1.fromBER(newItem.toBER(false)).result.valueBlock.value; | ||
res[key] = Array.from(value, (element) => converter.fromASN(element)); | ||
} | ||
else { | ||
res[key] = Array.from(asn1Schema[key], (element) => converter.fromASN(element)); | ||
} | ||
} | ||
@@ -472,6 +494,6 @@ else { | ||
else { | ||
const container = item.repeated === "sequence" | ||
const Container = item.repeated === "sequence" | ||
? asn1.Sequence | ||
: asn1.Set; | ||
asn1Item = new container({ | ||
asn1Item = new Container({ | ||
value: items, | ||
@@ -492,6 +514,6 @@ }); | ||
else { | ||
const container = item.repeated === "sequence" | ||
const Container = item.repeated === "sequence" | ||
? asn1.Sequence | ||
: asn1.Set; | ||
asn1Item = new container({ | ||
asn1Item = new Container({ | ||
value: items, | ||
@@ -507,3 +529,3 @@ }); | ||
if (item.implicit) { | ||
if (typeof item.type === "number") { | ||
if (!item.repeated && typeof item.type === "number") { | ||
const value = {}; | ||
@@ -576,2 +598,3 @@ value.valueHex = asn1Item.valueBlock.toBER(); | ||
exports.AsnIntegerConverter = AsnIntegerConverter; | ||
exports.AsnNullConverter = AsnNullConverter; | ||
exports.AsnNumericStringConverter = AsnNumericStringConverter; | ||
@@ -578,0 +601,0 @@ exports.AsnObjectIdentifierConverter = AsnObjectIdentifierConverter; |
@@ -94,1 +94,5 @@ import { AnyConverterType, IAsnConverter, IntegerConverterType } from "./types"; | ||
export declare const AsnGeneralizedTimeConverter: IAsnConverter<Date>; | ||
/** | ||
* ASN.1 ANY converter | ||
*/ | ||
export declare const AsnNullConverter: IAsnConverter<null>; |
@@ -18,3 +18,2 @@ import { IEmptyConstructor } from "./types"; | ||
static fromASN<T>(asn1Schema: any, target: IEmptyConstructor<T>): any; | ||
static fromASN<T>(asn1Schema: any, target: IEmptyConstructor<T>, validateSchema?: boolean): any; | ||
} |
{ | ||
"name": "@peculiar/asn1-schema", | ||
"version": "1.1.1", | ||
"version": "1.1.2", | ||
"description": "This package uses ES2015 decorators to simplify working with ASN.1 creation and parsing", | ||
@@ -5,0 +5,0 @@ "main": "build/index.js", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
63755
1416