// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package testcert contains a test-only localhost certificate.
package testcert

import (
	"strings"
)

// LocalhostCert is a PEM-encoded TLS cert with SAN IPs
// "127.0.0.1" and "[::1]", expiring at Jan 29 16:00:00 2084 GMT.
// generated from src/crypto/tls:
// go run generate_cert.go  --ecdsa-curve P256 --host 127.0.0.1,::1,example.com --ca --start-date "Jan 1 00:00:00 1970" --duration=1000000h
var LocalhostCert = []byte(`-----BEGIN CERTIFICATE-----
MIIBrDCCAVKgAwIBAgIPCvPhO+Hfv+NW76kWxULUMAoGCCqGSM49BAMCMBIxEDAO
BgNVBAoTB0FjbWUgQ28wIBcNNzAwMTAxMDAwMDAwWhgPMjA4NDAxMjkxNjAwMDBa
MBIxEDAOBgNVBAoTB0FjbWUgQ28wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARh
WRF8p8X9scgW7JjqAwI9nYV8jtkdhqAXG9gyEgnaFNN5Ze9l3Tp1R9yCDBMNsGms
PyfMPe5Jrha/LmjgR1G9o4GIMIGFMA4GA1UdDwEB/wQEAwIChDATBgNVHSUEDDAK
BggrBgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSOJri/wLQxq6oC
Y6ZImms/STbTljAuBgNVHREEJzAlggtleGFtcGxlLmNvbYcEfwAAAYcQAAAAAAAA
AAAAAAAAAAAAATAKBggqhkjOPQQDAgNIADBFAiBUguxsW6TGhixBAdORmVNnkx40
HjkKwncMSDbUaeL9jQIhAJwQ8zV9JpQvYpsiDuMmqCuW35XXil3cQ6Drz82c+fvE
-----END CERTIFICATE-----`)

// LocalhostKey is the private key for localhostCert.
var LocalhostKey = []byte(testingKey(`-----BEGIN TESTING KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgY1B1eL/Bbwf/MDcs
rnvvWhFNr1aGmJJR59PdCN9lVVqhRANCAARhWRF8p8X9scgW7JjqAwI9nYV8jtkd
hqAXG9gyEgnaFNN5Ze9l3Tp1R9yCDBMNsGmsPyfMPe5Jrha/LmjgR1G9
-----END TESTING KEY-----`))

// BigCert is a very large certificate.
var BigCert = []byte(`-----BEGIN CERTIFICATE-----
MIIUbTCCFBOgAwIBAgIRALtRwka+SPD9/pf/xVUYYKcwCgYIKoZIzj0EAwIwEjEQ
MA4GA1UEChMHQWNtZSBDbzAgFw03MDAxMDEwMDAwMDBaGA8yMDg0MDEyOTE2MDAw
MFowEjEQMA4GA1UEChMHQWNtZSBDbzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
BDat4JNaxZU6/Sv9uj8yFCFokOn3zTVArVEjx69jOgxB7MUIWMjWfkoWrZPFylK4
9rNybJZX8FdfRRHpZC0XGBmjghNGMIITQjAOBgNVHQ8BAf8EBAMCAoQwEwYDVR0l
BAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVwlz6QFN
0uZUjW/FKM7QIFX6C6kwghLpBgNVHREEghLgMIIS3IKCEsBhNjkzMDYwZmE3ZmFh
NmQwNjZhNjVhMGYyZDc3MmI0ODY3NjZlZTRiYmEwM2Y0YmE0YzQwNmI4ZTkxOWZm
NzgwMTk0Yzg2YjE0ZTFjZDQ5ODQ4ZjljM2RjODdlNGNmZTdhZTg0OWQ4OTcyM2Jj
YTA5OTUzN2U4YmYyYWZiYjY3ZTkzY2Y3OWY3ZGJhNWVmZWU2ZmM2OTM5MjY0MGRi
NDQ3MDhhMTUxOWRhYTUzZjJkODZjZWUwMDcwN2I2YjliYmNiNjhlNDI0YTQyMTNi
OGYyMGFlMWI0Nzc0ZGU0ODhhMTkyYzNjMjQ5NmJlZjYxZDVmNWJlZWE4MjFmNDNl
MTA4YmM1N2QwMTVkYzgwYmE5NWRiMGQ2ZjA2ZDY4ZDliNmQ3MjgwMDc1MjJiZjFm
ZTkzYzc1MDI5MmI4NjQ1Y2I3N2E1YTNmZjcyMmMyNzc5ZDlmYjAyODNmYWRhM2Q5
ZjAwOWIwZjYzMzY0Y2FkZTJiMmJlYmIzNWVmZGRiNmEzNTU5MmYyZGQyMDczMDM0
OGU5NzBlNmRiYTQ2MTBjNjI1OGQyYTI4ZDU2ZTFlYTVmMWYyZmFlMTk3N2M5YWJj
YmJkODRiOTk5OThhYjcyM2I0MmE0YzJmNmM1ZTJhYzk3NDkzYzlkOTc3OWMwY2Uz
NGMxNmUwODg2MjUxNjQ3NzExY2UyZDA4ZDczM2NlZTRjMDU2NTA1N2UyYWVmNjY0
NWUwMDc2MWRiOTQ3YmFlMTllMmRlYWM5N2YxYjkyYmU0MmVmNTU4YjkzMTdjYzNh
NDc3MDcyODU5NDViOGExMTFmYjc2OTJlNDg0YmU0NjRjMGY4YjlkOWU2MzE3YWUz
MTM1N2Q5Mjk3MGI5MzI2Y2UxNTU5OWNjZDg2MzMxMDljOTYxYTU1YTM1YTMyNjRh
ODljM2M2MWM3ZjVhODJmOGMzYWRjNWUwYzYwZmRkNzllODcwNDg0NGYzODBmYmY5
MTVkNGJkM2JmZjNmYzVlNWJjY2RjYWY0MDBmNzAyY2U4YjUwZWM2ODU0ZDdiZjhj
NmRlNTc1NmFkNGE3NmE0ZTk2Y2RmYTY5ZTgyZmI3OGMwZDdjZDFkMjAyY2ExZmNl
OTZjYmViN2RhOGYwYjdlMzBkYzZmNjI5NDkyMzYwYTc1NTM3Yzg5MWI4YjI3NTNl
MzUwNDQ1OTgyN2IwMWYxZDgzY2E5MmExNzgyZmVhNzZjZjNkYjExYzJiOGNlNGUw
YWJlZDgyZmU0ZjFmZjFiYmZkZWZlMDQ4NTY2NWYwYTgxMjBmZGI3MGMyZTk2N2Mx
YWEzYTk4OTdmNjQ3NDhlMDVjNzVlOWE1YTg5NzI1OWQxMzQzYjY1ZTMwYjVmZWFm
NTBhOTIyNzVkNjIzNjU1MGVlOWNiOGQ0ODk2NTIzYTI1YTc2ZmNkYjU0MWYyZDlh
MzIyZTYyZTkyN2UyNzYwOTViODdmMzJjNGRjNTJkODQ5NDJmMGE2ZjYwMmEzYTI1
MTQ3NmEzZmQ4YjFkOTcwZWU3ODIwOWRhYTJlM2JjOTdiMWM1NDk3MTM0MWQyNjcw
NzM1ZjRhOWVlY2ZlMDViMTAxMmY0NmY0ZDYwMGZhNmE3ZGIwZDJlYjI5ZDQ5N2Nj
ZjI5ZTIyOTM5MTA0MjA2MmRjYWI2MGYzZjIxNmFlZGVjZjExODUwZGYxYTNmODc2
YzRjNDE5OGQyMThhNWIwZmRlNjRlMzE1MWNhNmFhNjZlNDdjZTY3MDE0MGY2Mjcz
ZDkyNmY5MGQzYjY2MGY1OTg0NzQ4NTk5NmQ1MGEyMGEwOTVhNjM5MDljZDBmNzIw
NDM0YWQ5YmE1NzI1NzE2YzhkYjc2ZGU3NzVmMDg0YzVlYTdhYzgzNGM3YjI1OWZj
ODM4NDgzNDhmYzkwN2FlZGYxODc2ZjI5MDVkMGEzMTVmMzEyMDg4ODE4YjljMzdi
NWVhMGRkZWM3NTRlMjFjMmU2OWE5YjYzOGU4YTkxNTIwZGViZDMyY2NiNzY1YTM3
MjdhZWU2NzFhMDkyNDQ0OTJiNWNmMDU2NDkyNTZlOWY1MTE5MzM3ZDE5ZWI5ODE1
ODJiM2FkZmI4YmY0YjJkYzg2OTdjMDBhMmM4NjkwN2YwM2Y2YjgzYTQwZDY4MGZh
NGFiOWY0ZmQ4NzQzYTMxNmM0ZGYzOWJmZThlZGEyNGJiNDEwYjRiY2EwMzI1ZGFl
NjQwMDVjOGVlZjQ0MDFmNmNkYjc4YTNiZDhkZDRiZjFjN2M3MGFiMmRjNWQ1NjA0
ZThjNzk1Yzk5NTU0NzhiY2RjOTkyNjNlMGE1NTdkODA4ZTU3MTZhNTYwMDFlYmIz
MmRhYjYwMWVhYzY2ZGU1NDkxYTZjZmVhNDlhZTdkMGY2NGYwZGMxZTZhZmFiYjU3
YTA0OWIxYmQxY2NkNmFiNTBhNWNlMjI3NTJkZTU1N2I1NTVjZTAyYWE3ODM1YjBi
ZmUwMTljYjc5ZGJjZTNhNTZlN2MwZTc3Njc0MDQ0NTZkMjMxZjA1MjJhZGIzMGI3
ZTIyZjRmNmQ1N2E5OWM0N2NmYzc1MTNhNTBhZWZkNzNkNTQ1ODIzY2U5MmEyNmE4
NDBkOWRkNDRmYjkzNzQwZDliMTkwYThiYjk2OWM2MGRkMTdjZTA5NjgyZGE3Yzk5
NjYwZTE5Y2Y5NmIzNmRmYzUwZTE2NWFkMmQyNTJlNWMzOWFhYmI0Y2Y5MDJmNTI1
ZTYwMGE1MjQ1M2NlOWFjZDkxOTcwMmU1YjRkZGFlN2ZkNWRiMWU4N2I4YTI1MGRh
ZTU3MDEzNjc1ZjE2M2M0MDI4YWRlNzJjZjlhNWQyNDFmY2MzM2NkZTU0MjJkYWJh
ZmQ2NzBkZTkxY2UyNzBmNDEyNWU3YjY2MWY4OWI3NDJjYTRmYjE0NDY1YTdkMGY1
ZGJmODBlZDhhZWFlMjUzYWNlOTAxMDRjMDIyOGJhYTZiMGQxZDZkYzliZTE4YTcy
MjIxZjEwNzcxMDY0MTI1YjcyMzQzYTY3OTMwNjNiMDczYmJkZjE4YTk4OWFjZWQ1
N2ZmZTBmOTViMDQ4YWI4ZDM5NjhhYjE2NTU2YWFiNjcyYTQ1ZGYyOWJmZDdhOWNi
YmNlODJlNmFhYjIzM2U0MTlhZjZkYWUwYTI5YWNmMmUwNmM3Y2JkYmRmN2Y5NmRj
OGMwNmQ1NzlmNmMwNmU2YjhlNzE5OGZmZDUzNTQwNTBlNzM5NTY5ZDYzNTNkOTgz
ZjY4OTU4ZjlmNjRkMzU1NThmYjk0ZTdmNThjMmU4MjhiNjM3OWU4YTE4OTgxZGNm
ZGVkZDRiNGY0YzdkMjE3MDg5YjU5YWI1YjdiMWYyYmNjMGM1ZDQ2YzM2ODk1ZWRm
ZTE0MTIzMzNkZGNmOGMxMWM1ZmVjNjMwMzNjYjAzYWIyNWI2Mzk1MDA2Y2QzYjll
NGVlZmJjOGMyODUzYzkzZDU4NzA3ZjBiZjE1MWRmNDQ0Zjc0OTQ3OTVlMGY2NDhm
ZmZkYjU0OTVjNGY5OGY5YTkyODAzYWJhOGNjNzFjN2Y0YTY0NDk0MmFiMTRjYzhm
ZDk1M2ZkZGZkNWJjMTA3ZDM4Mjk3NzFhMjllNDc1MTVmY2Q1OWI2MTJiYjRjNGY3
NmQ3OGNkOGFlZmU1ZDEzYzdlMjY2MmQzODA0YzYxYjVlNDkyZGI2NDM1YzY0YTk2
Njk4YzI1NjMyNzM0MDFmMzA3MjM2ZWQ2NDU3MGM4MmVkN2RkMWEzZWYyYTY4MWY1
ZGIwNjM4MjNiMmRlYmEzYmVmMTE0MWI3NWJmMjhjM2ZjMzg0YTZhZjdhOWRlNmE3
YTM3NjUxNjc3ZTRlMDMzY2QzYzQ5YjUxNDJkNjAyZjlkMjk2ZTlmNjY0ODI1MWZl
YzE4MTUzODc2ZWNiOGQ1NDRmOGQ1MzU1MTFkMzU3ZmE3M2I1ZjZhOWIzN2ZiMzAz
YTc1ZTRjMmRhYmJkMGIzMWZmZTBlMzU1OTExYzg4NjI5ZmQ2NTA3MzIwYWNhZjVi
YWZjMDFiN2JmMzEyMzU2MzE1YWNiYWZiZTFmNDAxNWFjMjNkMzY5OTM5OWRlZjQ1
MTY1MThkOTk4ODk4YWE1OWNlZWViNDY0N2RiODc2Y2YwYmQyZjNlMDE3OTMzNGVm
MzQwYjQwMzVhZjFmYWU0ODliNThmNTk0MmEyNWFkMzExMDYxYzRiMDkxZjQyYTBl
NTdmNTM0MjVhMTliOGIzNjI1OTFmMTQ1OTVkYTdjZGRkNjFmYWJkMjc4OWY0ZjM2
MWRlNzcyNDUwYmFlNzYxMzQ1MmYyNDZkMGM1MGI5ZjEzMjAxMDllYzgyZjRlOWY3
YTliNDRlNjRiNGZiZjg0ZDJlODBkNjVlZDljNTdlZTUxYzUxOWYzNmQyNDk2NzAw
ZTdhMjc4MTliMDcxOGI1ZDFhZGRlYWEyM2E4ZTJhMGI2NzYxNTZlMjdiMmIzMzJh
MDg1MTc2NTViNWU4NDM2YThlMjZmZDJlMDViMmI1ODI1NjRmZjRlMTgwZWVhNGRk
YTYyY2FhNmUzMDc4MGFmY2RkYTdmOWQ4ZjU1YzJjNTk3NmE5MDkyZmU2NjI0NTk2
YTZjMmFmNDczOWQ1ZDk3NDNjNjYxMmU4NzY1ZWE2YmY3ZWMzOGY3OTRjZmQ4YTQw
YmZkZjViMmViMjFhMjVkNGNjOGE5Y2Y5YWI4NzM3NDgzYTkzZDZhOTkyOTM3OGM5
NjMwY2Y3YjA5MDI4OTYxMWM5MjEwMWQxODc5ZjNjZDMzMjMyN2QyM2UxMzEyNmE2
ZmViOTZkZjdlYzBmNzUyZGY0OWNiMGMzNzgwZjU2ZjNjOWIyOTM1YTUyZGM3YzZm
NWQxOTkwMDRhZTk2NjFmNjI2YjA4NmEyZTE3ODI5YWFjZjhlNjRiOTMwMWI4ZDdm
OWU3YmZiYjI2ODI0ZjI1Mjg2YjRiZTllZmE2ZDQyODU2YThjNGY5ZmUyZTcwY2Mx
NTBhZmEzZWI3NjdiNjliYzdmZmY1ZDNmMTkxM2NiYjVhYTc0MmU4NTNjNDgyYWE0
Yzg4MjE1Y2M5MzI4NTRjZDY0ODk0ZjNjYTA5M2MzMDRmYTNkZGUzZjhjNTYxZDUy
YzM2NDk5ZTQwMTgxZThlYzg5MjMzMTY3NDUyMWU5MTU4MmNiM2NjMmRmNDQ5MjMz
NWNjNTMzOTI2ZmNkNTBkYTFmNzc4NjgzMTk2MjRhYTliYWZjNTk0ZTFiNzYxYWQy
NjU4NTJjOGFmZWZlYTk0MGQ5OTQwYzg3ZTc4YjVhYzJjMzcwZGNjMzhmNTk5YWJk
ZmVkNDBjOGE3ZTRjYzVhYTA1NzE0ZjBlZTdmZWRiZDk5NGVjMzIwMWRmMTliOWJi
Y2ZiZThhZTIwZjI4Y2I3NmQzOGVkNzYxMDhjYjU3YjFkZmQ2MTI5NTQ2NWIxMDM3
MWQyNTI3ZjE4ODFjOWY1ZTUzODlkMDAyZjk4YzMyYzAzNjYzNDgxZTlkOGE4Zjhj
YTE2MTcwNzQ1NTkyZDdhYjM0MTI2MjVkOTE5MzNjZGI3MGFmNjdjYzU0ZTE3NWIz
ZjQwYjMxODhiZTg3N2M5MzQyMGJhNDhkOGRkNzYyODQyNGZhYWU2YTUwMmZhODE4
YzkzN2M1ODNjMWY2NzEzYTE3YzVhODJhOTllMTFiNDNhMDRkM2FlZWJjMTMyODBl
OWZmOGMyNTZjOGFiNmQ2ODA3MWZjM2NkNDgyOTIzYjk2ZmNmODJjMTYzYzQ1YWI3
Njg5ZjI0MjVhODVhMzQzMGVlY2Q5Y2Q0MTNkOWQ2Yjc2ZTUyN2JkM2RjNWQxNTcy
ZjE4N2M1NjY5MWJlNzFjMzYxYmQzNTdkODkwMWE5ZTE0MGIxMTQyNDA1ZDM4OGY5
N2YyMmM2N2I0MDAwYTllODhjMDE1ZWJlNjliNDg1ZmY4YzFmMjdiYjg4NGZmNGI0
ZTFiN2FiZDgzMDZmMTE3YTM4OGMxMmYzMzYwNGEyM2NlMWJiY2IyMDVjMWFlZGZh
ZjllOTI5OGM5ODExMWVjODVjMGE1ZjdiZWJiMGRlNzllYjNlMTJkOTMzYzllNzFj
MmFhMDU4OGNjOWY0NDU1YjIwOTk1NjIwZmRkZTViZThjYTFlZmZjNGFkNTBhODFm
NWI1YzAwYTg4MjQwY2U5ZmFkNGI4MGRmMGZhMWUxZjVhODBkNWNmZDJhNTQ4MjFm
ZDcxNDM2YmU5ZDMwNDA3NTlmOTI4NzJmMzYwZDc5MWJjZWJjZjhjYTc4NzZiOTBj
YjNiNjYxZGNhMTk5N2UyZmVkOTczMjliMmFmMjU5OGUxNTU4MmU4YzYzODc2ZTBk
NWZhOTY3Y2M4NjJiNGZlNGRkNmM1Zjg3OTBmNTA4OTZjN2NkNmI1ZGM1ZDlkYWY3
YjM0ZGMxZGE2MzQ5MDkyMTI5NWJkYmYzYmY2MzQ3OWJmM2SHBH8AAAGHEAAAAAAA
AAAAAAAAAAAAAAEwCgYIKoZIzj0EAwIDSAAwRQIgHUTj/Ml9c+U8z3xwA9Bvbvsc
yA1E8ugj3FHoscBuptcCIQC69Yp6E0EwvWpD8I/YWItrn1NwXsMrxPXtLG5HADiQ
0g==
-----END CERTIFICATE-----`)

// BigKey is the private key for BigCert.
var BigKey = []byte(testingKey(`-----BEGIN TESTING KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgOQUd/IPs0i1pKyH+
u4ayrF95rKl0iv+v2fXZoHq8qGShRANCAAQ2reCTWsWVOv0r/bo/MhQhaJDp9801
QK1RI8evYzoMQezFCFjI1n5KFq2TxcpSuPazcmyWV/BXX0UR6WQtFxgZ
-----END TESTING KEY-----`))

// testingKey helps keep security scanners from getting excited about a private key in this file.
func testingKey(s string) string { return strings.ReplaceAll(s, "TESTING KEY", "PRIVATE KEY") }
