Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,62 @@
|
||||
// Copyright (c) 2022, 2023 blackshirt. All rights reserved.
|
||||
// Use of this source code is governed by a MIT License
|
||||
// that can be found in the LICENSE file.
|
||||
module asn1
|
||||
|
||||
// default_null_tag is the default tag of ASN.1 NULL type.
|
||||
pub const default_null_tag = Tag{.universal, false, int(TagType.null)}
|
||||
|
||||
// ASN.1 UNIVERSAL CLASS OF NULL TYPE.
|
||||
//
|
||||
// The ASN.1 NULL type is a placeholder used when there is no value.
|
||||
// It's a simple, non-string type with the UNIVERSAL TAG number 5.
|
||||
// The NULL type can be used in situations where the presence of a type is important, but no concrete value is needed.
|
||||
pub struct Null {}
|
||||
|
||||
// tag returns the tag of Null element.
|
||||
pub fn (n Null) tag() Tag {
|
||||
return default_null_tag
|
||||
}
|
||||
|
||||
// payload returns the payload of the Null element, its should empty bytes.
|
||||
pub fn (n Null) payload() ![]u8 {
|
||||
return []u8{}
|
||||
}
|
||||
|
||||
fn (n Null) str() string {
|
||||
return 'NULL'
|
||||
}
|
||||
|
||||
// `Null.parse` tries to read into Null type from ongoing parser.
|
||||
fn Null.parse(mut p Parser) !Null {
|
||||
tag := p.read_tag()!
|
||||
if !tag.equal(default_null_tag) {
|
||||
return error('Get unexpected null tag')
|
||||
}
|
||||
length := p.read_length()!
|
||||
if length != 0 {
|
||||
return error('Get unexpected non-null length for Null type')
|
||||
}
|
||||
return Null{}
|
||||
}
|
||||
|
||||
// Null.decode read Null from bytes.
|
||||
fn Null.decode(bytes []u8) !(Null, int) {
|
||||
tag, length_pos := Tag.decode(bytes)!
|
||||
if !tag.equal(default_null_tag) {
|
||||
return error('Null: get unexpected tag')
|
||||
}
|
||||
length, content_pos := Length.decode_from_offset(bytes, length_pos)!
|
||||
if length != 0 {
|
||||
return error('Null with non-null length')
|
||||
}
|
||||
next := content_pos + length
|
||||
return Null{}, next
|
||||
}
|
||||
|
||||
fn Null.from_bytes(b []u8) !Null {
|
||||
if b.len != 0 {
|
||||
return error('Null: bad non-null bytes')
|
||||
}
|
||||
return Null{}
|
||||
}
|
||||
Reference in new issue
Block a user