File: DirectoryString.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (70 lines) | stat: -rw-r--r-- 2,601 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//===----------------------------------------------------------------------===//
//
// This source file is part of the SwiftCertificates open source project
//
// Copyright (c) 2022 Apple Inc. and the SwiftCertificates project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of SwiftCertificates project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

import SwiftASN1
/// A DirectoryString is defined as:
///
/// ```
/// DirectoryString ::= CHOICE {
///       teletexString       TeletexString   (SIZE (1..MAX)),
///       printableString     PrintableString (SIZE (1..MAX)),
///       universalString     UniversalString (SIZE (1..MAX)),
///       utf8String          UTF8String      (SIZE (1..MAX)),
///       bmpString           BMPString       (SIZE (1..MAX)) }
/// ```
///
/// Note that these upper bounds are measured in _characters_, not bytes.
///
@usableFromInline
enum DirectoryString: DERParseable, DERSerializable, Hashable {
    case teletexString(ASN1TeletexString)
    case printableString(ASN1PrintableString)
    case universalString(ASN1UniversalString)
    case utf8String(ASN1UTF8String)
    case bmpString(ASN1BMPString)

    @inlinable
    init(derEncoded rootNode: ASN1Node) throws {
        switch rootNode.identifier {
        case .teletexString:
            self = .teletexString(try ASN1TeletexString(derEncoded: rootNode))
        case .printableString:
            self = .printableString(try ASN1PrintableString(derEncoded: rootNode))
        case .universalString:
            self = .universalString(try ASN1UniversalString(derEncoded: rootNode))
        case .utf8String:
            self = .utf8String(try ASN1UTF8String(derEncoded: rootNode))
        case .bmpString:
            self = .bmpString(try ASN1BMPString(derEncoded: rootNode))
        default:
            throw ASN1Error.unexpectedFieldType(rootNode.identifier)
        }
    }

    @inlinable
    func serialize(into coder: inout DER.Serializer) throws {
        switch self {
        case .teletexString(let string):
            try string.serialize(into: &coder)
        case .printableString(let string):
            try string.serialize(into: &coder)
        case .universalString(let string):
            try string.serialize(into: &coder)
        case .utf8String(let string):
            try string.serialize(into: &coder)
        case .bmpString(let string):
            try string.serialize(into: &coder)
        }
    }
}