Skip to content

Commit

Permalink
tests: Name, DirectoryString, LDAPMessage, Certificate, ContentInfo, …
Browse files Browse the repository at this point in the history
…SignedData
  • Loading branch information
5HT committed Sep 29, 2024
1 parent 9cb83f9 commit 730e6e4
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 6 deletions.
1 change: 1 addition & 0 deletions Sources/Suite/ASN1SCG/EncapsulatedContentInfo.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import Foundation
self = try DER.sequence(root, identifier: identifier) { nodes in
let eContentType: ASN1ObjectIdentifier = try ASN1ObjectIdentifier(derEncoded: &nodes)
let eContent: ASN1OctetString? = try DER.optionalExplicitlyTagged(&nodes, tagNumber: 0, tagClass: .contextSpecific) { node in return try ASN1OctetString(derEncoded: node) }
nodes.next()
return EncapsulatedContentInfo(eContentType: eContentType, eContent: eContent)
}
}
Expand Down
7 changes: 6 additions & 1 deletion Sources/Suite/ASN1SCG/GeneralName.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import Foundation
case ASN1Identifier(tagWithNumber: 2, tagClass: .contextSpecific):
self = .dNSName(try ASN1IA5String(derEncoded: rootNode, withIdentifier: rootNode.identifier))
case ASN1Identifier(tagWithNumber: 4, tagClass: .contextSpecific):
self = .directoryName(try Name(derEncoded: rootNode, withIdentifier: rootNode.identifier))
self = .directoryName(try Name(derEncoded: rootNode, withIdentifier: withIdentifier))
case ASN1Identifier(tagWithNumber: 6, tagClass: .contextSpecific):
self = .uniformResourceIdentifier(try ASN1IA5String(derEncoded: rootNode, withIdentifier: rootNode.identifier))
case ASN1Identifier(tagWithNumber: 7, tagClass: .contextSpecific):
Expand All @@ -45,6 +45,11 @@ import Foundation
identifier: ASN1Identifier(tagWithNumber: 2, tagClass: .contextSpecific),
{ coder in try coder.serialize(dNSName) })
case .directoryName(let directoryName):
// try coder.appendConstructedNode(identifier: ASN1Identifier(tagWithNumber: 4, tagClass: .contextSpecific)) { codec in
// try codec.serialize(directoryName)
//bytes.append(contentsOf: simple.bytes)
// }

try coder.appendConstructedNode(
identifier: ASN1Identifier(tagWithNumber: 4, tagClass: .contextSpecific),
{ coder in try coder.serialize(directoryName) })
Expand Down
1 change: 0 additions & 1 deletion Sources/Suite/ASN1SCG/LDAPMessage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import Foundation
@inlinable func serialize(into coder: inout DER.Serializer,
withIdentifier identifier: ASN1Identifier) throws {
try coder.appendConstructedNode(identifier: ASN1Identifier.sequence) { coder in
print(": identifier \(identifier)")
try coder.serialize(messageID)
try coder.serialize(protocolOp)
if let controls = self.controls { try coder.serializeSequenceOf(controls, identifier: ASN1Identifier(tagWithNumber: 0, tagClass: .contextSpecific)) }
Expand Down
6 changes: 4 additions & 2 deletions Sources/Suite/ASN1SCG/SignedData.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@ import Foundation
let version: Int = try Int(derEncoded: &nodes)
let digestAlgorithms: [AlgorithmIdentifier] = try DER.set(of: AlgorithmIdentifier.self, identifier: .set, nodes: &nodes)
let encapContentInfo: EncapsulatedContentInfo = try EncapsulatedContentInfo(derEncoded: &nodes)
let certificates: [Certificate] = try DER.set(of: Certificate.self, identifier: ASN1Identifier(tagWithNumber: 0, tagClass: .contextSpecific), nodes: &nodes)
let crls: [CertificateList] = try DER.set(of: CertificateList.self, identifier: ASN1Identifier(tagWithNumber: 1, tagClass: .contextSpecific), nodes: &nodes)
nodes.next() ; let certificates: [Certificate]? = try DER.optionalImplicitlyTagged(&nodes, tagNumber: 0, tagClass: .contextSpecific,
{ node in return try DER.set(of: Certificate.self, identifier: .set, rootNode: node) })
let crls: [CertificateList]? = try DER.optionalImplicitlyTagged(&nodes, tagNumber: 1, tagClass: .contextSpecific)
{ node in return try DER.set(of: CertificateList.self, identifier: .set, rootNode: node) }
let signerInfos: [SignerInfo] = try DER.set(of: SignerInfo.self, identifier: .set, nodes: &nodes)
return SignedData(version: version, digestAlgorithms: digestAlgorithms, encapContentInfo: encapContentInfo, certificates: certificates, crls: crls, signerInfos: signerInfos)
}
Expand Down
6 changes: 4 additions & 2 deletions Sources/Suite/ASN1SCG/SignerInfo.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,12 @@ import Foundation
let version: Int = try Int(derEncoded: &nodes)
let sid: SignerIdentifier = try SignerIdentifier(derEncoded: &nodes)
let digestAlgorithm: AlgorithmIdentifier = try AlgorithmIdentifier(derEncoded: &nodes)
let signedAttrs: [PartialAttribute] = try DER.set(of: PartialAttribute.self, identifier: ASN1Identifier(tagWithNumber: 0, tagClass: .contextSpecific), nodes: &nodes)
nodes.next() ; let signedAttrs: [PartialAttribute]? = try DER.optionalImplicitlyTagged(&nodes, tagNumber: 0, tagClass: .contextSpecific)
{ node in return try DER.set(of: PartialAttribute.self, identifier: .set, rootNode: node) }
let signatureAlgorithm: AlgorithmIdentifier = try AlgorithmIdentifier(derEncoded: &nodes)
let signature: ASN1OctetString = try ASN1OctetString(derEncoded: &nodes)
let unsignedAttrs: [PartialAttribute] = try DER.set(of: PartialAttribute.self, identifier: ASN1Identifier(tagWithNumber: 1, tagClass: .contextSpecific), nodes: &nodes)
nodes.next() ; let unsignedAttrs: [PartialAttribute]? = try DER.optionalImplicitlyTagged(&nodes, tagNumber: 1, tagClass: .contextSpecific)
{ node in return try DER.set(of: PartialAttribute.self, identifier: .set, rootNode: node) }
return SignerInfo(version: version, sid: sid, digestAlgorithm: digestAlgorithm, signedAttrs: signedAttrs, signatureAlgorithm: signatureAlgorithm, signature: signature, unsignedAttrs: unsignedAttrs)
}
}
Expand Down
25 changes: 25 additions & 0 deletions Sources/Suite/main.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,15 @@ public class Console {
print(": DER.Name \(serializer.serializedBytes)")
}

public static func showGeneralName(data: Array<UInt8>) throws {
let name: GeneralName? = try GeneralName(derEncoded: data)
if let name { print(": GeneralName \(name)") }
var serializer = DER.Serializer()
try name!.serialize(into: &serializer)
print(": GeneralName.DER \(data)")
print(": DER.GeneralName \(serializer.serializedBytes)")
}

public static func showDirectoryString(data: Array<UInt8>) throws {
let ds: DirectoryString? = try DirectoryString(derEncoded: data)
if let ds { print(": DirectoryString \(ds)") }
Expand Down Expand Up @@ -43,12 +52,28 @@ public class Console {
}
}

public static func showContentInfo(file: String) throws {
let url = URL(fileURLWithPath: file)
if (!Console.exists(f: url.path)) { print(": CI file not found.") } else {
let data = try Data(contentsOf: url)
var cert = try ContentInfo(derEncoded: Array(data))
var serializer = DER.Serializer()
try cert.content.serialize(into: &serializer)
let signedData = try SignedData(derEncoded: Array(serializer.serializedBytes))
print(": SignedData \(signedData)")
cert.content = try ASN1Any(erasing: ASN1Null())
print(": ContentInfo \(cert)")
}
}

public static func suite() throws -> Int32 {
do {
try showName(data: [48,13,49,11,48,9,6,3,85,4,6,19,2,85,65])
// try showGeneralName(data: [164,2,48,0])
try showDirectoryString(data: [19,3,49,50,51])
try showLDAPMessage(data: [48,16,2,1,1,96,9,2,1,1,4,0,128,2,49,50,160,0])
try showCertificate(file: "ca.crt")
try showContentInfo(file: "data.bin")
print(": PASSED")
return 0
} catch {
Expand Down

0 comments on commit 730e6e4

Please sign in to comment.