module pem

// example PEM structures from the RFC
fn test_decode_rfc1421() {
	for i in 0 .. pem.test_data_rfc1421.len {
		decoded, rest := decode(pem.test_data_rfc1421[i]) or { Block{}, '' }
		assert decoded == pem.expected_results_rfc1421[i]
		assert decoded == decode_only(pem.test_data_rfc1421[i]) or { Block{} }
		assert rest == ''
	}
}

fn test_decode() {
	for i in 0 .. pem.test_data.len {
		decoded, rest := decode(pem.test_data[i]) or { Block{}, '' }
		assert decoded == pem.expected_results[i]
		assert decoded == decode_only(pem.test_data[i]) or { Block{} }
		assert rest == pem.expected_rest[i]
	}
}

fn test_encode_rfc1421() {
	for i in 0 .. pem.test_data_rfc1421.len {
		encoded := pem.expected_results_rfc1421[i].encode() or { '' }
		decoded, rest := decode(encoded) or { Block{}, '' }
		assert rest == ''
		assert decoded == pem.expected_results_rfc1421[i]
		assert decoded == decode_only(encoded) or { Block{} }
	}
}

fn test_encode() {
	for i in 0 .. pem.test_data.len {
		encoded := pem.expected_results[i].encode() or { '' }
		decoded, rest := decode(encoded) or { Block{}, '' }
		assert rest == ''
		assert decoded == pem.expected_results[i]
		assert decoded == decode_only(encoded) or { Block{} }
	}
}

fn test_encode_config() {
	for i in 0 .. pem.test_data.len {
		encoded := pem.expected_results[i].encode(EncodeConfig{31, '\r\n'}) or { '' }
		decoded, rest := decode(encoded) or { Block{}, '' }
		assert rest == ''
		assert decoded == pem.expected_results[i]
		assert decoded == decode_only(encoded) or { Block{} }
	}
}

fn test_decode_no_pem() {
	for test in pem.test_data_no_pem {
		if _, _ := decode(test) {
			assert false, 'decode should return `none` on input without PEM data'
		}
		if _ := decode_only(test) {
			assert false, 'decode_only should return `none` on input without PEM data'
		}
	}
}

const test_data_no_pem = [
	'',
	'-----BEGIN',
	'-----BEGIN -----',
	'-----END',
]

// https://datatracker.ietf.org/doc/html/rfc7468#section-4
const test_data_rfc1421 = [
	'-----BEGIN PRIVACY-ENHANCED MESSAGE-----
Proc-Type: 4,MIC-ONLY
Content-Domain: RFC822
Originator-Certificate:
MIIBlTCCAScCAWUwDQYJKoZIhvcNAQECBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNV
BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMQ8wDQYDVQQLEwZCZXRhIDExDzAN
BgNVBAsTBk5PVEFSWTAeFw05MTA5MDQxODM4MTdaFw05MzA5MDMxODM4MTZaMEUx
CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEU
MBIGA1UEAxMLVGVzdCBVc2VyIDEwWTAKBgRVCAEBAgICAANLADBIAkEAwHZHl7i+
yJcqDtjJCowzTdBJrdAiLAnSC+CnnjOJELyuQiBgkGrgIh3j8/x0fM+YrsyF1u3F
LZPVtzlndhYFJQIDAQABMA0GCSqGSIb3DQEBAgUAA1kACKr0PqphJYw1j+YPtcIq
iWlFPuN5jJ79Khfg7ASFxskYkEMjRNZV/HZDZQEhtVaU7Jxfzs2wfX5byMp2X3U/
5XUXGx7qusDgHQGs7Jk9W8CW1fuSWUgN4w==
Issuer-Certificate:
MIIB3DCCAUgCAQowDQYJKoZIhvcNAQECBQAwTzELMAkGA1UEBhMCVVMxIDAeBgNV
BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMQ8wDQYDVQQLEwZCZXRhIDExDTAL
BgNVBAsTBFRMQ0EwHhcNOTEwOTAxMDgwMDAwWhcNOTIwOTAxMDc1OTU5WjBRMQsw
CQYDVQQGEwJVUzEgMB4GA1UEChMXUlNBIERhdGEgU2VjdXJpdHksIEluYy4xDzAN
BgNVBAsTBkJldGEgMTEPMA0GA1UECxMGTk9UQVJZMHAwCgYEVQgBAQICArwDYgAw
XwJYCsnp6lQCxYykNlODwutF/jMJ3kL+3PjYyHOwk+/9rLg6X65B/LD4bJHtO5XW
cqAz/7R7XhjYCm0PcqbdzoACZtIlETrKrcJiDYoP+DkZ8k1gCk7hQHpbIwIDAQAB
MA0GCSqGSIb3DQEBAgUAA38AAICPv4f9Gx/tY4+p+4DB7MV+tKZnvBoy8zgoMGOx
dD2jMZ/3HsyWKWgSF0eH/AJB3qr9zosG47pyMnTf3aSy2nBO7CMxpUWRBcXUpE+x
EREZd9++32ofGBIXaialnOgVUn0OzSYgugiQ077nJLDUj0hQehCizEs5wUJ35a5h
MIC-Info: RSA-MD5,RSA,
jV2OfH+nnXHU8bnL8kPAad/mSQlTDZlbVuxvZAOVRZ5q5+Ejl5bQvqNeqOUNQjr6
EtE7K2QDeVMCyXsdJlA8fA==

LSBBIG1lc3NhZ2UgZm9yIHVzZSBpbiB0ZXN0aW5nLg0KLSBGb2xsb3dpbmcgaXMg
YSBibGFuayBsaW5lOg0KDQpUaGlzIGlzIHRoZSBlbmQuDQo=
-----END PRIVACY-ENHANCED MESSAGE-----',
	'-----BEGIN PRIVACY-ENHANCED MESSAGE-----
Proc-Type: 4,ENCRYPTED
Content-Domain: RFC822
DEK-Info: DES-CBC,BFF968AA74691AC1
Originator-Certificate:
MIIBlTCCAScCAWUwDQYJKoZIhvcNAQECBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNV
BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMQ8wDQYDVQQLEwZCZXRhIDExDzAN
BgNVBAsTBk5PVEFSWTAeFw05MTA5MDQxODM4MTdaFw05MzA5MDMxODM4MTZaMEUx
CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEU
MBIGA1UEAxMLVGVzdCBVc2VyIDEwWTAKBgRVCAEBAgICAANLADBIAkEAwHZHl7i+
yJcqDtjJCowzTdBJrdAiLAnSC+CnnjOJELyuQiBgkGrgIh3j8/x0fM+YrsyF1u3F
LZPVtzlndhYFJQIDAQABMA0GCSqGSIb3DQEBAgUAA1kACKr0PqphJYw1j+YPtcIq
iWlFPuN5jJ79Khfg7ASFxskYkEMjRNZV/HZDZQEhtVaU7Jxfzs2wfX5byMp2X3U/
5XUXGx7qusDgHQGs7Jk9W8CW1fuSWUgN4w==
Key-Info: RSA,
I3rRIGXUGWAF8js5wCzRTkdhO34PTHdRZY9Tuvm03M+NM7fx6qc5udixps2Lng0+
wGrtiUm/ovtKdinz6ZQ/aQ==
Issuer-Certificate:
MIIB3DCCAUgCAQowDQYJKoZIhvcNAQECBQAwTzELMAkGA1UEBhMCVVMxIDAeBgNV
BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMQ8wDQYDVQQLEwZCZXRhIDExDTAL
BgNVBAsTBFRMQ0EwHhcNOTEwOTAxMDgwMDAwWhcNOTIwOTAxMDc1OTU5WjBRMQsw
CQYDVQQGEwJVUzEgMB4GA1UEChMXUlNBIERhdGEgU2VjdXJpdHksIEluYy4xDzAN
BgNVBAsTBkJldGEgMTEPMA0GA1UECxMGTk9UQVJZMHAwCgYEVQgBAQICArwDYgAw
XwJYCsnp6lQCxYykNlODwutF/jMJ3kL+3PjYyHOwk+/9rLg6X65B/LD4bJHtO5XW
cqAz/7R7XhjYCm0PcqbdzoACZtIlETrKrcJiDYoP+DkZ8k1gCk7hQHpbIwIDAQAB
MA0GCSqGSIb3DQEBAgUAA38AAICPv4f9Gx/tY4+p+4DB7MV+tKZnvBoy8zgoMGOx
dD2jMZ/3HsyWKWgSF0eH/AJB3qr9zosG47pyMnTf3aSy2nBO7CMxpUWRBcXUpE+x
EREZd9++32ofGBIXaialnOgVUn0OzSYgugiQ077nJLDUj0hQehCizEs5wUJ35a5h
MIC-Info: RSA-MD5,RSA,
UdFJR8u/TIGhfH65ieewe2lOW4tooa3vZCvVNGBZirf/7nrgzWDABz8w9NsXSexv
AjRFbHoNPzBuxwmOAFeA0HJszL4yBvhG
Recipient-ID-Asymmetric:
MFExCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5j
LjEPMA0GA1UECxMGQmV0YSAxMQ8wDQYDVQQLEwZOT1RBUlk=,
66
Key-Info: RSA,
O6BS1ww9CTyHPtS3bMLD+L0hejdvX6Qv1HK2ds2sQPEaXhX8EhvVphHYTjwekdWv
7x0Z3Jx2vTAhOYHMcqqCjA==

qeWlj/YJ2Uf5ng9yznPbtD0mYloSwIuV9FRYx+gzY+8iXd/NQrXHfi6/MhPfPF3d
jIqCJAxvld2xgqQimUzoS1a4r7kQQ5c/Iua4LqKeq3ciFzEv/MbZhA==
-----END PRIVACY-ENHANCED MESSAGE-----',
	'-----BEGIN PRIVACY-ENHANCED MESSAGE-----
Proc-Type: 4,ENCRYPTED
Content-Domain: RFC822
DEK-Info: DES-CBC,F8143EDE5960C597
Originator-ID-Symmetric: linn@zendia.enet.dec.com,,
Recipient-ID-Symmetric: linn@zendia.enet.dec.com,ptf-kmc,3
Key-Info: DES-ECB,RSA-MD2,9FD3AAD2F2691B9A,
         B70665BB9BF7CBCDA60195DB94F727D3
Recipient-ID-Symmetric: pem-dev@tis.com,ptf-kmc,4
Key-Info: DES-ECB,RSA-MD2,161A3F75DC82EF26,
         E2EF532C65CBCFF79F83A2658132DB47

LLrHB0eJzyhP+/fSStdW8okeEnv47jxe7SJ/iN72ohNcUk2jHEUSoH1nvNSIWL9M
8tEjmF/zxB+bATMtPjCUWbz8Lr9wloXIkjHUlBLpvXR0UrUzYbkNpk0agV2IzUpk
J6UiRRGcDSvzrsoK+oNvqu6z7Xs5Xfz5rDqUcMlK1Z6720dcBWGGsDLpTpSCnpot
dXd/H5LMDWnonNvPCwQUHt==
-----END PRIVACY-ENHANCED MESSAGE-----',
]

const expected_results_rfc1421 = [
	Block{
		block_type: 'PRIVACY-ENHANCED MESSAGE'
		headers: {
			'Proc-Type':              ['4,MIC-ONLY']
			'Content-Domain':         ['RFC822']
			'Originator-Certificate': [
				'MIIBlTCCAScCAWUwDQYJKoZIhvcNAQECBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMQ8wDQYDVQQLEwZCZXRhIDExDzANBgNVBAsTBk5PVEFSWTAeFw05MTA5MDQxODM4MTdaFw05MzA5MDMxODM4MTZaMEUxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEUMBIGA1UEAxMLVGVzdCBVc2VyIDEwWTAKBgRVCAEBAgICAANLADBIAkEAwHZHl7i+yJcqDtjJCowzTdBJrdAiLAnSC+CnnjOJELyuQiBgkGrgIh3j8/x0fM+YrsyF1u3FLZPVtzlndhYFJQIDAQABMA0GCSqGSIb3DQEBAgUAA1kACKr0PqphJYw1j+YPtcIqiWlFPuN5jJ79Khfg7ASFxskYkEMjRNZV/HZDZQEhtVaU7Jxfzs2wfX5byMp2X3U/5XUXGx7qusDgHQGs7Jk9W8CW1fuSWUgN4w==',
			]
			'Issuer-Certificate':     [
				'MIIB3DCCAUgCAQowDQYJKoZIhvcNAQECBQAwTzELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMQ8wDQYDVQQLEwZCZXRhIDExDTALBgNVBAsTBFRMQ0EwHhcNOTEwOTAxMDgwMDAwWhcNOTIwOTAxMDc1OTU5WjBRMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXUlNBIERhdGEgU2VjdXJpdHksIEluYy4xDzANBgNVBAsTBkJldGEgMTEPMA0GA1UECxMGTk9UQVJZMHAwCgYEVQgBAQICArwDYgAwXwJYCsnp6lQCxYykNlODwutF/jMJ3kL+3PjYyHOwk+/9rLg6X65B/LD4bJHtO5XWcqAz/7R7XhjYCm0PcqbdzoACZtIlETrKrcJiDYoP+DkZ8k1gCk7hQHpbIwIDAQABMA0GCSqGSIb3DQEBAgUAA38AAICPv4f9Gx/tY4+p+4DB7MV+tKZnvBoy8zgoMGOxdD2jMZ/3HsyWKWgSF0eH/AJB3qr9zosG47pyMnTf3aSy2nBO7CMxpUWRBcXUpE+xEREZd9++32ofGBIXaialnOgVUn0OzSYgugiQ077nJLDUj0hQehCizEs5wUJ35a5h',
			]
			'MIC-Info':               [
				'RSA-MD5,RSA,jV2OfH+nnXHU8bnL8kPAad/mSQlTDZlbVuxvZAOVRZ5q5+Ejl5bQvqNeqOUNQjr6EtE7K2QDeVMCyXsdJlA8fA==',
			]
		}
		// vfmt off
		data: [
			u8(0x2d), 0x20, 0x41, 0x20, 0x6d, 0x65, 0x73, 0x73,
			0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20,
			0x75, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74,
			0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x0d,
			0x0a, 0x2d, 0x20, 0x46, 0x6f, 0x6c, 0x6c, 0x6f,
			0x77, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20,
			0x61, 0x20, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x20,
			0x6c, 0x69, 0x6e, 0x65, 0x3a, 0x0d, 0x0a, 0x0d,
			0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73,
			0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64,
			0x2e, 0x0d, 0x0a,
		]
		// vfmt on
	},
	Block{
		block_type: 'PRIVACY-ENHANCED MESSAGE'
		headers: {
			'Proc-Type':               [
				'4,ENCRYPTED',
			]
			'Content-Domain':          [
				'RFC822',
			]
			'DEK-Info':                [
				'DES-CBC,BFF968AA74691AC1',
			]
			'Originator-Certificate':  [
				'MIIBlTCCAScCAWUwDQYJKoZIhvcNAQECBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMQ8wDQYDVQQLEwZCZXRhIDExDzANBgNVBAsTBk5PVEFSWTAeFw05MTA5MDQxODM4MTdaFw05MzA5MDMxODM4MTZaMEUxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEUMBIGA1UEAxMLVGVzdCBVc2VyIDEwWTAKBgRVCAEBAgICAANLADBIAkEAwHZHl7i+yJcqDtjJCowzTdBJrdAiLAnSC+CnnjOJELyuQiBgkGrgIh3j8/x0fM+YrsyF1u3FLZPVtzlndhYFJQIDAQABMA0GCSqGSIb3DQEBAgUAA1kACKr0PqphJYw1j+YPtcIqiWlFPuN5jJ79Khfg7ASFxskYkEMjRNZV/HZDZQEhtVaU7Jxfzs2wfX5byMp2X3U/5XUXGx7qusDgHQGs7Jk9W8CW1fuSWUgN4w==',
			]
			'Key-Info':                [
				'RSA,I3rRIGXUGWAF8js5wCzRTkdhO34PTHdRZY9Tuvm03M+NM7fx6qc5udixps2Lng0+wGrtiUm/ovtKdinz6ZQ/aQ==',
				'RSA,O6BS1ww9CTyHPtS3bMLD+L0hejdvX6Qv1HK2ds2sQPEaXhX8EhvVphHYTjwekdWv7x0Z3Jx2vTAhOYHMcqqCjA==',
			]
			'Issuer-Certificate':      [
				'MIIB3DCCAUgCAQowDQYJKoZIhvcNAQECBQAwTzELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMQ8wDQYDVQQLEwZCZXRhIDExDTALBgNVBAsTBFRMQ0EwHhcNOTEwOTAxMDgwMDAwWhcNOTIwOTAxMDc1OTU5WjBRMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXUlNBIERhdGEgU2VjdXJpdHksIEluYy4xDzANBgNVBAsTBkJldGEgMTEPMA0GA1UECxMGTk9UQVJZMHAwCgYEVQgBAQICArwDYgAwXwJYCsnp6lQCxYykNlODwutF/jMJ3kL+3PjYyHOwk+/9rLg6X65B/LD4bJHtO5XWcqAz/7R7XhjYCm0PcqbdzoACZtIlETrKrcJiDYoP+DkZ8k1gCk7hQHpbIwIDAQABMA0GCSqGSIb3DQEBAgUAA38AAICPv4f9Gx/tY4+p+4DB7MV+tKZnvBoy8zgoMGOxdD2jMZ/3HsyWKWgSF0eH/AJB3qr9zosG47pyMnTf3aSy2nBO7CMxpUWRBcXUpE+xEREZd9++32ofGBIXaialnOgVUn0OzSYgugiQ077nJLDUj0hQehCizEs5wUJ35a5h',
			]
			'MIC-Info':                [
				'RSA-MD5,RSA,UdFJR8u/TIGhfH65ieewe2lOW4tooa3vZCvVNGBZirf/7nrgzWDABz8w9NsXSexvAjRFbHoNPzBuxwmOAFeA0HJszL4yBvhG',
			]
			'Recipient-ID-Asymmetric': [
				'MFExCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEPMA0GA1UECxMGQmV0YSAxMQ8wDQYDVQQLEwZOT1RBUlk=,66',
			]
		}
		// vfmt off
		data: [
			u8(0xa9), 0xe5, 0xa5, 0x8f, 0xf6, 0x09, 0xd9, 0x47,
			0xf9, 0x9e, 0x0f, 0x72, 0xce, 0x73, 0xdb, 0xb4,
			0x3d, 0x26, 0x62, 0x5a, 0x12, 0xc0, 0x8b, 0x95,
			0xf4, 0x54, 0x58, 0xc7, 0xe8, 0x33, 0x63, 0xef,
			0x22, 0x5d, 0xdf, 0xcd, 0x42, 0xb5, 0xc7, 0x7e,
			0x2e, 0xbf, 0x32, 0x13, 0xdf, 0x3c, 0x5d, 0xdd,
			0x8c, 0x8a, 0x82, 0x24, 0x0c, 0x6f, 0x95, 0xdd,
			0xb1, 0x82, 0xa4, 0x22, 0x99, 0x4c, 0xe8, 0x4b,
			0x56, 0xb8, 0xaf, 0xb9, 0x10, 0x43, 0x97, 0x3f,
			0x22, 0xe6, 0xb8, 0x2e, 0xa2, 0x9e, 0xab, 0x77,
			0x22, 0x17, 0x31, 0x2f, 0xfc, 0xc6, 0xd9, 0x84,
		]
		// vfmt on
	},
	Block{
		block_type: 'PRIVACY-ENHANCED MESSAGE'
		headers: {
			'Proc-Type':               [
				'4,ENCRYPTED',
			]
			'Content-Domain':          [
				'RFC822',
			]
			'DEK-Info':                [
				'DES-CBC,F8143EDE5960C597',
			]
			'Originator-ID-Symmetric': [
				'linn@zendia.enet.dec.com,,',
			]
			'Recipient-ID-Symmetric':  [
				'linn@zendia.enet.dec.com,ptf-kmc,3',
				'pem-dev@tis.com,ptf-kmc,4',
			]
			'Key-Info':                [
				'DES-ECB,RSA-MD2,9FD3AAD2F2691B9A,B70665BB9BF7CBCDA60195DB94F727D3',
				'DES-ECB,RSA-MD2,161A3F75DC82EF26,E2EF532C65CBCFF79F83A2658132DB47',
			]
		}
		// vfmt off
		data: [
			u8(0x2c), 0xba, 0xc7, 0x07, 0x47, 0x89, 0xcf, 0x28,
			0x4f, 0xfb, 0xf7, 0xd2, 0x4a, 0xd7, 0x56, 0xf2,
			0x89, 0x1e, 0x12, 0x7b, 0xf8, 0xee, 0x3c, 0x5e,
			0xed, 0x22, 0x7f, 0x88, 0xde, 0xf6, 0xa2, 0x13,
			0x5c, 0x52, 0x4d, 0xa3, 0x1c, 0x45, 0x12, 0xa0,
			0x7d, 0x67, 0xbc, 0xd4, 0x88, 0x58, 0xbf, 0x4c,
			0xf2, 0xd1, 0x23, 0x98, 0x5f, 0xf3, 0xc4, 0x1f,
			0x9b, 0x01, 0x33, 0x2d, 0x3e, 0x30, 0x94, 0x59,
			0xbc, 0xfc, 0x2e, 0xbf, 0x70, 0x96, 0x85, 0xc8,
			0x92, 0x31, 0xd4, 0x94, 0x12, 0xe9, 0xbd, 0x74,
			0x74, 0x52, 0xb5, 0x33, 0x61, 0xb9, 0x0d, 0xa6,
			0x4d, 0x1a, 0x81, 0x5d, 0x88, 0xcd, 0x4a, 0x64,
			0x27, 0xa5, 0x22, 0x45, 0x11, 0x9c, 0x0d, 0x2b,
			0xf3, 0xae, 0xca, 0x0a, 0xfa, 0x83, 0x6f, 0xaa,
			0xee, 0xb3, 0xed, 0x7b, 0x39, 0x5d, 0xfc, 0xf9,
			0xac, 0x3a, 0x94, 0x70, 0xc9, 0x4a, 0xd5, 0x9e,
			0xbb, 0xdb, 0x47, 0x5c, 0x05, 0x61, 0x86, 0xb0,
			0x32, 0xe9, 0x4e, 0x94, 0x82, 0x9e, 0x9a, 0x2d,
			0x75, 0x77, 0x7f, 0x1f, 0x92, 0xcc, 0x0d, 0x69,
			0xe8, 0x9c, 0xdb, 0xcf, 0x0b, 0x04, 0x14, 0x1e,
		]
		// vfmt on
	},
]

const test_data = [
	// https://qsupport.quantum.com/kb/flare/Content/stornext/SN5_DocSite/Guide_Users/Topics/Example_of_a_server_pem_.htm
	"--BEG
An RSA PRIVATE KEY is on it's way!!
----BEGIN
I only want to parse the certificate below
-----BEGIN RSA PRIVATE KEY-----
izfrNTmQLnfsLzi2Wb9xPz2Qj9fQYGgeug3N2MkDuVHwpPcgkhHkJgCQuuvT+qZI
MbS2U6wTS24SZk5RunJIUkitRKeWWMS28SLGfkDs1bBYlSPa5smAd3/q1OePi4ae
dU6YgWuDxzBAKEKVSUu6pA2HOdyQ9N4F1dI+F8w9J990zE93EgyNqZFBBa2L70h4
M7DrB0gJBWMdUMoxGnun5glLiCMo2JrHZ9RkMiallS1sHMhELx2UAlP8I1+0Mav8
iMlHGyUW8EJy0paVf09MPpceEcVwDBeX0+G4UQlO551GTFtOSRjcD8U+GkCzka9W
/SFQrSGe3Gh3SDaOw/4JEMAjWPDLiCglwh0rLIO4VwU6AxzTCuCw3d1ZxQsU6VFQ
PqHA8haOUATZIrp3886PBThVqALBk9p1Nqn51bXLh13Zy9DZIVx4Z5Ioz/EGuzgR
d68VW5wybLjYE2r6Q9nHpitSZ4ZderwjIZRes67HdxYFw8unm4Wo6kuGnb5jSSag
vwBxKzAf3Omn+J6IthTJKuDd13rKZGMcRpQQ6VstwihYt1TahQ/qfJUWPjPcU5ML
9LkgVwA8Ndi1wp1/sEPe+UlL16L6vO9jUHcueWN7+zSUOE/cDSJyMd9x/ZL8QASA
ETd5dujVIqlINL2vJKr1o4T+i0RsnpfFiqFmBKlFqww/SKzJeChdyEtpa/dJMrt2
8S86b6zEmkser+SDYgGketS2DZ4hB+vh2ujSXmS8Gkwrn+BfHMzkbtio8lWbGw0l
eM1tfdFZ6wMTLkxRhBkBK4JiMiUMvpERyPib6a2L6iXTfH+3RUDS6A==
-----END RSA PRIVATE KEY-----Extra stuff
This should be sent back in the second variable
I will now continue to spam my keyboard to add junk
lfajsdkfsndckasdjflkasdjclsdfjljjasldfj
alsdfsdkfasdfasfsdafasdcjaosdicnsad


fas90dfsdsdj
----------------------------------
-----
asddfadsfasjfsadf
-----BEGIN lkfajsdklfjasldkfjalsdjf;kasdflkjsaf
flajsdfkjasdfajskfjslkdfjaskdjf
FJASKDJjklfjasdfklsdjf
BEGIN BEGIN BEGIN
----BEGIN
-----END RSA PRIVATE KEY
: fkalsdjflkasdjf
private key: fsaddf",
	'Mollitia magnam ullam ipsam voluptas ipsa
rerum debitis. Vel nulla ipsum enim perspiciatis adipisci quam. Nihil incidunt ipsum
--- --BEGIN


-- BEGIN ------
---
--BEGIN ------
amet rem rerum explicabo. Cum distinctio ipsum dolorum quae. Suscipit asperiores et aut eos numquam.
-----BEGIN CERTIFICATE-----
MIICMzCCAZygAwIBAgIJALiPnVsvq8dsMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV
BAYTAlVTMQwwCgYDVQQIEwNmb28xDDAKBgNVBAcTA2ZvbzEMMAoGA1UEChMDZm9v
MQwwCgYDVQQLEwNmb28xDDAKBgNVBAMTA2ZvbzAeFw0xMzAzMTkxNTQwMTlaFw0x
ODAzMTgxNTQwMTlaMFMxCzAJBgNVBAYTAlVTMQwwCgYDVQQIEwNmb28xDDAKBgNV
BAcTA2ZvbzEMMAoGA1UEChMDZm9vMQwwCgYDVQQLEwNmb28xDDAKBgNVBAMTA2Zv
bzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzdGfxi9CNbMf1UUcvDQh7MYB
OveIHyc0E0KIbhjK5FkCBU4CiZrbfHagaW7ZEcN0tt3EvpbOMxxc/ZQU2WN/s/wP
xph0pSfsfFsTKM4RhTWD2v4fgk+xZiKd1p0+L4hTtpwnEw0uXRVd0ki6muwV5y/P
+5FHUeldq+pgTcgzuK8CAwEAAaMPMA0wCwYDVR0PBAQDAgLkMA0GCSqGSIb3DQEB
BQUAA4GBAJiDAAtY0mQQeuxWdzLRzXmjvdSuL9GoyT3BF/jSnpxz5/58dba8pWen
v3pj4P3w5DoOso0rzkZy2jEsEitlVM2mLSbQpMM+MUVQCQoiG6W9xuCFuxSrwPIS
pAqEAuV4DNoxQKKWmhVv+J0ptMWD25Pnpxeq5sXzghfJnslJlQND
-----END CERTIFICATE-----
fdsjaf888888888888
-----

-----END
-----BEGIN',
	'Lorem ipsum dolor sit amet
, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Massa id neque aliquam vestibulum
morbi blandit cursus risus. Elit at imperdiet dui accumsan sit amet nulla. Pulvinar pellentesque habitant


morbi tristique senectus. Vulputate
dignissim suspendisse in est ante in. Egestas dui id ornare arcu. Ultrices mi tempus imperdiet
nulla malesuada. Elementum nisi quis eleifend quam adipiscing.
Mi in nulla posuere sollicitudin aliquam ultrices. Elit at imperdiet dui accumsan sit amet nulla facilisi. In hac
habitasse platea dictumst quisque sagittis. Vestibulum
lectus mauris ultrices eros in cursus. Blandit volutpat maecenas volutpat blandit. Sed nisi
lacus sed viverra tellus in hac habitasse platea.
Nulla facilisi etiam dignissim diam. Donec et odio pellentesque diam volutpat
commodo sed egestas. Eleifend quam adipiscing
vitae proin sagittis nisl.

Pharetra et ultrices neque ornare aenean euismod elementum nisi. Sit amet consectetur sed id semper risus in.
Eget nullam non nisi est. A diam maecenas sed enim. Enim nec dui nunc mattis. Lectus quam id leo in vitae turpis massa sed
. In eu mi bibendum neque egestas congue. Dui faucibus in ornare quam viverra orci j
sagittis. Lectus sit amet est placerat in egestas erat imperdiet.

Suspendisse potenti nullam ac tortor. Iaculis nunc sed augue lacus viverra vitae congue eu consequat.
Lacus vestibulum sed arcu
non odio euismod. Massa sed elementum tempus egestas sed. Nulla facilisi etiam dignissim diam quis enim
. Ac ut consequat semper viverra. Eleifend quam adipiscing vitae proin sagittis nisl rhoncus mattis rhoncus. Nunc consequat interdum varius sit amet mattis vulputate enim.
Orci nulla pellentesque dignissim enim sit amet. Sed vulputate mi sit amet.
Sagittis vitae et leo duis ut diam. Orci a scelerisque purus semper eget duis
at tellus at. In hac habitasse platea dictumst vestibulum rhoncus est
. Fames
ac turpis egestas integer. Mattis enim ut
tellus elementum sagittis vitae. Pellentesque pulvinar pellentesque habitant morbi tristique senectus et netus
et. Id semper risus in hendrerit.
Et sollicitudin ac orci phasellus egestas. Sem integer vitae justo eget
magna. Et ligula ullamcorper malesuada proin libero nunc consequat.-----BEGIN CERTIFICATE-----
MIICMzCCAZygAwIBAgIJALiPnVsvq8dsMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV
BAYTAlVTMQwwCgYDVQQIEwNmb28xDDAKBgNVBAcTA2ZvbzEMMAoGA1UEChMDZm9v
MQwwCgYDVQQLEwNmb28xDDAKBgNVBAMTA2ZvbzAeFw0xMzAzMTkxNTQwMTlaFw0x
ODAzMTgxNTQwMTlaMFMxCzAJBgNVBAYTAlVTMQwwCgYDVQQIEwNmb28xDDAKBgNV
BAcTA2ZvbzEMMAoGA1UEChMDZm9vMQwwCgYDVQQLEwNmb28xDDAKBgNVBAMTA2Zv
bzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzdGfxi9CNbMf1UUcvDQh7MYB
OveIHyc0E0KIbhjK5FkCBU4CiZrbfHagaW7ZEcN0tt3EvpbOMxxc/ZQU2WN/s/wP
xph0pSfsfFsTKM4RhTWD2v4fgk+xZiKd1p0+L4hTtpwnEw0uXRVd0ki6muwV5y/P
+5FHUeldq+pgTcgzuK8CAwEAAaMPMA0wCwYDVR0PBAQDAgLkMA0GCSqGSIb3DQEB
BQUAA4GBAJiDAAtY0mQQeuxWdzLRzXmjvdSuL9GoyT3BF/jSnpxz5/58dba8pWen
v3pj4P3w5DoOso0rzkZy2jEsEitlVM2mLSbQpMM+MUVQCQoiG6W9xuCFuxSrwPIS
pAqEAuV4DNoxQKKWmhVv+J0ptMWD25Pnpxeq5sXzghfJnslJlQND
-----END CERTIFICATE-----YXMuIEVsZWlmZW5kIHF1YW0gYWRpcGlzY2luZyB2aXRh
ZSBwcm9pbiBzYWdpdHRpcyBuaXNsLgoKUGVsbGVudGVzcXVlIG
hh



Yml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gRWdldCBudW5jIGxvYm9ydGlzIG1hdHRpcyBhb
GlxdWFtIGZhdWNpYnVzLiBOdWxsYW0g
dmVoaWN1bGEgaXBzdW0gYSBhcmN1IGN1cnN1cy4gUG9ydHRpdG9yIGVnZXQg
ZG9sb3IgbW9yYmkgbm9uIGFyY3Ugcml


zdXMgcXVpcyB2YXJpdXMgcXVhbS4gRGlnbmlzc2ltIGVuaW0gc2l0IGFtZXQgdmVuZW5hd
GlzLiBDb25zZWN0ZXR1ciBhIGVyYXQgbmFtIGF0IGxlY3R1cyB1cm5h
IGR1aXMuIEluIGZlcm1lbnR1bS
Bwb3N1ZXJlIHVybmEgbmVjIHRpbmNpZHVudCBwcmFlc2VudCBzZW1wZXIgZmV1Z2lhdCBuaWJoLiBOYW
0gYWxpcXVhbSBzZW0gZXQgdG9ydG9yIGNvbg==',
]

const expected_results = [
	Block{
		block_type: 'RSA PRIVATE KEY'
		// vfmt off
		data: [
			u8(0x8b), 0x37, 0xeb, 0x35, 0x39, 0x90, 0x2e, 0x77,
			0xec, 0x2f, 0x38, 0xb6, 0x59, 0xbf, 0x71, 0x3f,
			0x3d, 0x90, 0x8f, 0xd7, 0xd0, 0x60, 0x68, 0x1e,
			0xba, 0x0d, 0xcd, 0xd8, 0xc9, 0x03, 0xb9, 0x51,
			0xf0, 0xa4, 0xf7, 0x20, 0x92, 0x11, 0xe4, 0x26,
			0x00, 0x90, 0xba, 0xeb, 0xd3, 0xfa, 0xa6, 0x48,
			0x31, 0xb4, 0xb6, 0x53, 0xac, 0x13, 0x4b, 0x6e,
			0x12, 0x66, 0x4e, 0x51, 0xba, 0x72, 0x48, 0x52,
			0x48, 0xad, 0x44, 0xa7, 0x96, 0x58, 0xc4, 0xb6,
			0xf1, 0x22, 0xc6, 0x7e, 0x40, 0xec, 0xd5, 0xb0,
			0x58, 0x95, 0x23, 0xda, 0xe6, 0xc9, 0x80, 0x77,
			0x7f, 0xea, 0xd4, 0xe7, 0x8f, 0x8b, 0x86, 0x9e,
			0x75, 0x4e, 0x98, 0x81, 0x6b, 0x83, 0xc7, 0x30,
			0x40, 0x28, 0x42, 0x95, 0x49, 0x4b, 0xba, 0xa4,
			0x0d, 0x87, 0x39, 0xdc, 0x90, 0xf4, 0xde, 0x05,
			0xd5, 0xd2, 0x3e, 0x17, 0xcc, 0x3d, 0x27, 0xdf,
			0x74, 0xcc, 0x4f, 0x77, 0x12, 0x0c, 0x8d, 0xa9,
			0x91, 0x41, 0x05, 0xad, 0x8b, 0xef, 0x48, 0x78,
			0x33, 0xb0, 0xeb, 0x07, 0x48, 0x09, 0x05, 0x63,
			0x1d, 0x50, 0xca, 0x31, 0x1a, 0x7b, 0xa7, 0xe6,
			0x09, 0x4b, 0x88, 0x23, 0x28, 0xd8, 0x9a, 0xc7,
			0x67, 0xd4, 0x64, 0x32, 0x26, 0xa5, 0x95, 0x2d,
			0x6c, 0x1c, 0xc8, 0x44, 0x2f, 0x1d, 0x94, 0x02,
			0x53, 0xfc, 0x23, 0x5f, 0xb4, 0x31, 0xab, 0xfc,
			0x88, 0xc9, 0x47, 0x1b, 0x25, 0x16, 0xf0, 0x42,
			0x72, 0xd2, 0x96, 0x95, 0x7f, 0x4f, 0x4c, 0x3e,
			0x97, 0x1e, 0x11, 0xc5, 0x70, 0x0c, 0x17, 0x97,
			0xd3, 0xe1, 0xb8, 0x51, 0x09, 0x4e, 0xe7, 0x9d,
			0x46, 0x4c, 0x5b, 0x4e, 0x49, 0x18, 0xdc, 0x0f,
			0xc5, 0x3e, 0x1a, 0x40, 0xb3, 0x91, 0xaf, 0x56,
			0xfd, 0x21, 0x50, 0xad, 0x21, 0x9e, 0xdc, 0x68,
			0x77, 0x48, 0x36, 0x8e, 0xc3, 0xfe, 0x09, 0x10,
			0xc0, 0x23, 0x58, 0xf0, 0xcb, 0x88, 0x28, 0x25,
			0xc2, 0x1d, 0x2b, 0x2c, 0x83, 0xb8, 0x57, 0x05,
			0x3a, 0x03, 0x1c, 0xd3, 0x0a, 0xe0, 0xb0, 0xdd,
			0xdd, 0x59, 0xc5, 0x0b, 0x14, 0xe9, 0x51, 0x50,
			0x3e, 0xa1, 0xc0, 0xf2, 0x16, 0x8e, 0x50, 0x04,
			0xd9, 0x22, 0xba, 0x77, 0xf3, 0xce, 0x8f, 0x05,
			0x38, 0x55, 0xa8, 0x02, 0xc1, 0x93, 0xda, 0x75,
			0x36, 0xa9, 0xf9, 0xd5, 0xb5, 0xcb, 0x87, 0x5d,
			0xd9, 0xcb, 0xd0, 0xd9, 0x21, 0x5c, 0x78, 0x67,
			0x92, 0x28, 0xcf, 0xf1, 0x06, 0xbb, 0x38, 0x11,
			0x77, 0xaf, 0x15, 0x5b, 0x9c, 0x32, 0x6c, 0xb8,
			0xd8, 0x13, 0x6a, 0xfa, 0x43, 0xd9, 0xc7, 0xa6,
			0x2b, 0x52, 0x67, 0x86, 0x5d, 0x7a, 0xbc, 0x23,
			0x21, 0x94, 0x5e, 0xb3, 0xae, 0xc7, 0x77, 0x16,
			0x05, 0xc3, 0xcb, 0xa7, 0x9b, 0x85, 0xa8, 0xea,
			0x4b, 0x86, 0x9d, 0xbe, 0x63, 0x49, 0x26, 0xa0,
			0xbf, 0x00, 0x71, 0x2b, 0x30, 0x1f, 0xdc, 0xe9,
			0xa7, 0xf8, 0x9e, 0x88, 0xb6, 0x14, 0xc9, 0x2a,
			0xe0, 0xdd, 0xd7, 0x7a, 0xca, 0x64, 0x63, 0x1c,
			0x46, 0x94, 0x10, 0xe9, 0x5b, 0x2d, 0xc2, 0x28,
			0x58, 0xb7, 0x54, 0xda, 0x85, 0x0f, 0xea, 0x7c,
			0x95, 0x16, 0x3e, 0x33, 0xdc, 0x53, 0x93, 0x0b,
			0xf4, 0xb9, 0x20, 0x57, 0x00, 0x3c, 0x35, 0xd8,
			0xb5, 0xc2, 0x9d, 0x7f, 0xb0, 0x43, 0xde, 0xf9,
			0x49, 0x4b, 0xd7, 0xa2, 0xfa, 0xbc, 0xef, 0x63,
			0x50, 0x77, 0x2e, 0x79, 0x63, 0x7b, 0xfb, 0x34,
			0x94, 0x38, 0x4f, 0xdc, 0x0d, 0x22, 0x72, 0x31,
			0xdf, 0x71, 0xfd, 0x92, 0xfc, 0x40, 0x04, 0x80,
			0x11, 0x37, 0x79, 0x76, 0xe8, 0xd5, 0x22, 0xa9,
			0x48, 0x34, 0xbd, 0xaf, 0x24, 0xaa, 0xf5, 0xa3,
			0x84, 0xfe, 0x8b, 0x44, 0x6c, 0x9e, 0x97, 0xc5,
			0x8a, 0xa1, 0x66, 0x04, 0xa9, 0x45, 0xab, 0x0c,
			0x3f, 0x48, 0xac, 0xc9, 0x78, 0x28, 0x5d, 0xc8,
			0x4b, 0x69, 0x6b, 0xf7, 0x49, 0x32, 0xbb, 0x76,
			0xf1, 0x2f, 0x3a, 0x6f, 0xac, 0xc4, 0x9a, 0x4b,
			0x1e, 0xaf, 0xe4, 0x83, 0x62, 0x01, 0xa4, 0x7a,
			0xd4, 0xb6, 0x0d, 0x9e, 0x21, 0x07, 0xeb, 0xe1,
			0xda, 0xe8, 0xd2, 0x5e, 0x64, 0xbc, 0x1a, 0x4c,
			0x2b, 0x9f, 0xe0, 0x5f, 0x1c, 0xcc, 0xe4, 0x6e,
			0xd8, 0xa8, 0xf2, 0x55, 0x9b, 0x1b, 0x0d, 0x25,
			0x78, 0xcd, 0x6d, 0x7d, 0xd1, 0x59, 0xeb, 0x03,
			0x13, 0x2e, 0x4c, 0x51, 0x84, 0x19, 0x01, 0x2b,
			0x82, 0x62, 0x32, 0x25, 0x0c, 0xbe, 0x91, 0x11,
			0xc8, 0xf8, 0x9b, 0xe9, 0xad, 0x8b, 0xea, 0x25,
			0xd3, 0x7c, 0x7f, 0xb7, 0x45, 0x40, 0xd2, 0xe8,
		]
		// vfmt on
	},
	Block{
		block_type: 'CERTIFICATE'
		// vfmt off
		data: [
			u8(0x30), 0x82, 0x02, 0x33, 0x30, 0x82, 0x01, 0x9c,
			0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00,
			0xb8, 0x8f, 0x9d, 0x5b, 0x2f, 0xab, 0xc7, 0x6c,
			0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
			0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30,
			0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
			0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0c,
			0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13,
			0x03, 0x66, 0x6f, 0x6f, 0x31, 0x0c, 0x30, 0x0a,
			0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x03, 0x66,
			0x6f, 0x6f, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03,
			0x55, 0x04, 0x0a, 0x13, 0x03, 0x66, 0x6f, 0x6f,
			0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04,
			0x0b, 0x13, 0x03, 0x66, 0x6f, 0x6f, 0x31, 0x0c,
			0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13,
			0x03, 0x66, 0x6f, 0x6f, 0x30, 0x1e, 0x17, 0x0d,
			0x31, 0x33, 0x30, 0x33, 0x31, 0x39, 0x31, 0x35,
			0x34, 0x30, 0x31, 0x39, 0x5a, 0x17, 0x0d, 0x31,
			0x38, 0x30, 0x33, 0x31, 0x38, 0x31, 0x35, 0x34,
			0x30, 0x31, 0x39, 0x5a, 0x30, 0x53, 0x31, 0x0b,
			0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
			0x02, 0x55, 0x53, 0x31, 0x0c, 0x30, 0x0a, 0x06,
			0x03, 0x55, 0x04, 0x08, 0x13, 0x03, 0x66, 0x6f,
			0x6f, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55,
			0x04, 0x07, 0x13, 0x03, 0x66, 0x6f, 0x6f, 0x31,
			0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x0a,
			0x13, 0x03, 0x66, 0x6f, 0x6f, 0x31, 0x0c, 0x30,
			0x0a, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x03,
			0x66, 0x6f, 0x6f, 0x31, 0x0c, 0x30, 0x0a, 0x06,
			0x03, 0x55, 0x04, 0x03, 0x13, 0x03, 0x66, 0x6f,
			0x6f, 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09,
			0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01,
			0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30,
			0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xcd, 0xd1,
			0x9f, 0xc6, 0x2f, 0x42, 0x35, 0xb3, 0x1f, 0xd5,
			0x45, 0x1c, 0xbc, 0x34, 0x21, 0xec, 0xc6, 0x01,
			0x3a, 0xf7, 0x88, 0x1f, 0x27, 0x34, 0x13, 0x42,
			0x88, 0x6e, 0x18, 0xca, 0xe4, 0x59, 0x02, 0x05,
			0x4e, 0x02, 0x89, 0x9a, 0xdb, 0x7c, 0x76, 0xa0,
			0x69, 0x6e, 0xd9, 0x11, 0xc3, 0x74, 0xb6, 0xdd,
			0xc4, 0xbe, 0x96, 0xce, 0x33, 0x1c, 0x5c, 0xfd,
			0x94, 0x14, 0xd9, 0x63, 0x7f, 0xb3, 0xfc, 0x0f,
			0xc6, 0x98, 0x74, 0xa5, 0x27, 0xec, 0x7c, 0x5b,
			0x13, 0x28, 0xce, 0x11, 0x85, 0x35, 0x83, 0xda,
			0xfe, 0x1f, 0x82, 0x4f, 0xb1, 0x66, 0x22, 0x9d,
			0xd6, 0x9d, 0x3e, 0x2f, 0x88, 0x53, 0xb6, 0x9c,
			0x27, 0x13, 0x0d, 0x2e, 0x5d, 0x15, 0x5d, 0xd2,
			0x48, 0xba, 0x9a, 0xec, 0x15, 0xe7, 0x2f, 0xcf,
			0xfb, 0x91, 0x47, 0x51, 0xe9, 0x5d, 0xab, 0xea,
			0x60, 0x4d, 0xc8, 0x33, 0xb8, 0xaf, 0x02, 0x03,
			0x01, 0x00, 0x01, 0xa3, 0x0f, 0x30, 0x0d, 0x30,
			0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04,
			0x03, 0x02, 0x02, 0xe4, 0x30, 0x0d, 0x06, 0x09,
			0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01,
			0x05, 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, 0x98,
			0x83, 0x00, 0x0b, 0x58, 0xd2, 0x64, 0x10, 0x7a,
			0xec, 0x56, 0x77, 0x32, 0xd1, 0xcd, 0x79, 0xa3,
			0xbd, 0xd4, 0xae, 0x2f, 0xd1, 0xa8, 0xc9, 0x3d,
			0xc1, 0x17, 0xf8, 0xd2, 0x9e, 0x9c, 0x73, 0xe7,
			0xfe, 0x7c, 0x75, 0xb6, 0xbc, 0xa5, 0x67, 0xa7,
			0xbf, 0x7a, 0x63, 0xe0, 0xfd, 0xf0, 0xe4, 0x3a,
			0x0e, 0xb2, 0x8d, 0x2b, 0xce, 0x46, 0x72, 0xda,
			0x31, 0x2c, 0x12, 0x2b, 0x65, 0x54, 0xcd, 0xa6,
			0x2d, 0x26, 0xd0, 0xa4, 0xc3, 0x3e, 0x31, 0x45,
			0x50, 0x09, 0x0a, 0x22, 0x1b, 0xa5, 0xbd, 0xc6,
			0xe0, 0x85, 0xbb, 0x14, 0xab, 0xc0, 0xf2, 0x12,
			0xa4, 0x0a, 0x84, 0x02, 0xe5, 0x78, 0x0c, 0xda,
			0x31, 0x40, 0xa2, 0x96, 0x9a, 0x15, 0x6f, 0xf8,
			0x9d, 0x29, 0xb4, 0xc5, 0x83, 0xdb, 0x93, 0xe7,
			0xa7, 0x17, 0xaa, 0xe6, 0xc5, 0xf3, 0x82, 0x17,
			0xc9, 0x9e, 0xc9, 0x49, 0x95, 0x03, 0x43,
		]
		// vfmt on
	},
	Block{
		block_type: 'CERTIFICATE'
		// vfmt off
		data: [
			u8(0x30), 0x82, 0x02, 0x33, 0x30, 0x82, 0x01, 0x9c,
			0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00,
			0xb8, 0x8f, 0x9d, 0x5b, 0x2f, 0xab, 0xc7, 0x6c,
			0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
			0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30,
			0x53, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
			0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x0c,
			0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13,
			0x03, 0x66, 0x6f, 0x6f, 0x31, 0x0c, 0x30, 0x0a,
			0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x03, 0x66,
			0x6f, 0x6f, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03,
			0x55, 0x04, 0x0a, 0x13, 0x03, 0x66, 0x6f, 0x6f,
			0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04,
			0x0b, 0x13, 0x03, 0x66, 0x6f, 0x6f, 0x31, 0x0c,
			0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13,
			0x03, 0x66, 0x6f, 0x6f, 0x30, 0x1e, 0x17, 0x0d,
			0x31, 0x33, 0x30, 0x33, 0x31, 0x39, 0x31, 0x35,
			0x34, 0x30, 0x31, 0x39, 0x5a, 0x17, 0x0d, 0x31,
			0x38, 0x30, 0x33, 0x31, 0x38, 0x31, 0x35, 0x34,
			0x30, 0x31, 0x39, 0x5a, 0x30, 0x53, 0x31, 0x0b,
			0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
			0x02, 0x55, 0x53, 0x31, 0x0c, 0x30, 0x0a, 0x06,
			0x03, 0x55, 0x04, 0x08, 0x13, 0x03, 0x66, 0x6f,
			0x6f, 0x31, 0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55,
			0x04, 0x07, 0x13, 0x03, 0x66, 0x6f, 0x6f, 0x31,
			0x0c, 0x30, 0x0a, 0x06, 0x03, 0x55, 0x04, 0x0a,
			0x13, 0x03, 0x66, 0x6f, 0x6f, 0x31, 0x0c, 0x30,
			0x0a, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x03,
			0x66, 0x6f, 0x6f, 0x31, 0x0c, 0x30, 0x0a, 0x06,
			0x03, 0x55, 0x04, 0x03, 0x13, 0x03, 0x66, 0x6f,
			0x6f, 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09,
			0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01,
			0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30,
			0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xcd, 0xd1,
			0x9f, 0xc6, 0x2f, 0x42, 0x35, 0xb3, 0x1f, 0xd5,
			0x45, 0x1c, 0xbc, 0x34, 0x21, 0xec, 0xc6, 0x01,
			0x3a, 0xf7, 0x88, 0x1f, 0x27, 0x34, 0x13, 0x42,
			0x88, 0x6e, 0x18, 0xca, 0xe4, 0x59, 0x02, 0x05,
			0x4e, 0x02, 0x89, 0x9a, 0xdb, 0x7c, 0x76, 0xa0,
			0x69, 0x6e, 0xd9, 0x11, 0xc3, 0x74, 0xb6, 0xdd,
			0xc4, 0xbe, 0x96, 0xce, 0x33, 0x1c, 0x5c, 0xfd,
			0x94, 0x14, 0xd9, 0x63, 0x7f, 0xb3, 0xfc, 0x0f,
			0xc6, 0x98, 0x74, 0xa5, 0x27, 0xec, 0x7c, 0x5b,
			0x13, 0x28, 0xce, 0x11, 0x85, 0x35, 0x83, 0xda,
			0xfe, 0x1f, 0x82, 0x4f, 0xb1, 0x66, 0x22, 0x9d,
			0xd6, 0x9d, 0x3e, 0x2f, 0x88, 0x53, 0xb6, 0x9c,
			0x27, 0x13, 0x0d, 0x2e, 0x5d, 0x15, 0x5d, 0xd2,
			0x48, 0xba, 0x9a, 0xec, 0x15, 0xe7, 0x2f, 0xcf,
			0xfb, 0x91, 0x47, 0x51, 0xe9, 0x5d, 0xab, 0xea,
			0x60, 0x4d, 0xc8, 0x33, 0xb8, 0xaf, 0x02, 0x03,
			0x01, 0x00, 0x01, 0xa3, 0x0f, 0x30, 0x0d, 0x30,
			0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04,
			0x03, 0x02, 0x02, 0xe4, 0x30, 0x0d, 0x06, 0x09,
			0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01,
			0x05, 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, 0x98,
			0x83, 0x00, 0x0b, 0x58, 0xd2, 0x64, 0x10, 0x7a,
			0xec, 0x56, 0x77, 0x32, 0xd1, 0xcd, 0x79, 0xa3,
			0xbd, 0xd4, 0xae, 0x2f, 0xd1, 0xa8, 0xc9, 0x3d,
			0xc1, 0x17, 0xf8, 0xd2, 0x9e, 0x9c, 0x73, 0xe7,
			0xfe, 0x7c, 0x75, 0xb6, 0xbc, 0xa5, 0x67, 0xa7,
			0xbf, 0x7a, 0x63, 0xe0, 0xfd, 0xf0, 0xe4, 0x3a,
			0x0e, 0xb2, 0x8d, 0x2b, 0xce, 0x46, 0x72, 0xda,
			0x31, 0x2c, 0x12, 0x2b, 0x65, 0x54, 0xcd, 0xa6,
			0x2d, 0x26, 0xd0, 0xa4, 0xc3, 0x3e, 0x31, 0x45,
			0x50, 0x09, 0x0a, 0x22, 0x1b, 0xa5, 0xbd, 0xc6,
			0xe0, 0x85, 0xbb, 0x14, 0xab, 0xc0, 0xf2, 0x12,
			0xa4, 0x0a, 0x84, 0x02, 0xe5, 0x78, 0x0c, 0xda,
			0x31, 0x40, 0xa2, 0x96, 0x9a, 0x15, 0x6f, 0xf8,
			0x9d, 0x29, 0xb4, 0xc5, 0x83, 0xdb, 0x93, 0xe7,
			0xa7, 0x17, 0xaa, 0xe6, 0xc5, 0xf3, 0x82, 0x17,
			0xc9, 0x9e, 0xc9, 0x49, 0x95, 0x03, 0x43,
		]
		// vfmt on
	},
]

const expected_rest = [
	'Extra stuff
This should be sent back in the second variable
I will now continue to spam my keyboard to add junk
lfajsdkfsndckasdjflkasdjclsdfjljjasldfj
alsdfsdkfasdfasfsdafasdcjaosdicnsad


fas90dfsdsdj
----------------------------------
-----
asddfadsfasjfsadf
-----BEGIN lkfajsdklfjasldkfjalsdjf;kasdflkjsaf
flajsdfkjasdfajskfjslkdfjaskdjf
FJASKDJjklfjasdfklsdjf
BEGIN BEGIN BEGIN
----BEGIN
-----END RSA PRIVATE KEY
: fkalsdjflkasdjf
private key: fsaddf',
	'
fdsjaf888888888888
-----

-----END
-----BEGIN',
	'YXMuIEVsZWlmZW5kIHF1YW0gYWRpcGlzY2luZyB2aXRh
ZSBwcm9pbiBzYWdpdHRpcyBuaXNsLgoKUGVsbGVudGVzcXVlIG
hh



Yml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cy4gRWdldCBudW5jIGxvYm9ydGlzIG1hdHRpcyBhb
GlxdWFtIGZhdWNpYnVzLiBOdWxsYW0g
dmVoaWN1bGEgaXBzdW0gYSBhcmN1IGN1cnN1cy4gUG9ydHRpdG9yIGVnZXQg
ZG9sb3IgbW9yYmkgbm9uIGFyY3Ugcml


zdXMgcXVpcyB2YXJpdXMgcXVhbS4gRGlnbmlzc2ltIGVuaW0gc2l0IGFtZXQgdmVuZW5hd
GlzLiBDb25zZWN0ZXR1ciBhIGVyYXQgbmFtIGF0IGxlY3R1cyB1cm5h
IGR1aXMuIEluIGZlcm1lbnR1bS
Bwb3N1ZXJlIHVybmEgbmVjIHRpbmNpZHVudCBwcmFlc2VudCBzZW1wZXIgZmV1Z2lhdCBuaWJoLiBOYW
0gYWxpcXVhbSBzZW0gZXQgdG9ydG9yIGNvbg==',
]
