feat: add Gemini and Spartan protocol support

This commit is contained in:
randogoth 2026-10-11 22:07:25 +03:00
parent a4a49f41d7
commit fa7aa5557c
48 changed files with 4992 additions and 161 deletions

17
app/test/fixtures/client-test-cert.pem vendored Normal file
View file

@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE-----
MIICsjCCAZqgAwIBAgIBWjANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDEwZyZWFk
ZXIwHhcNMjYxMDExMTI0MjE1WhcNMzYxMDA4MTI0MjE1WjARMQ8wDQYDVQQDEwZy
ZWFkZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCPWGGLKgFsrVVJ
lB4Xnk2YqiWeJ+KgDr2wikdIJ6kA0D6pM0+fnDCQhJAztsLQ6XMEdOBpC8gB8Vrj
o2Zshg4BD45HCb848mYgwjlCR+oCmaRBV4HhuOZk7JNOS/VHCINRpN9WPSr2UDRs
aXKvYosuz92b3g537N2Pp3x2guCGPQ8svIpv0xmF97IR0cX+1VTQ1fvpwu25CxPl
xnXlHtX5Dif7mNhb1H9gkx1/yamSpVaeH9mAX/4DmJmFOY95oUybK+yIqSwIVH2g
EMuTtqxaMMlph7faodJD6vDb1g5yNUfwDG/MVtHRgPx+47FTTd3wG8t+4Blsytpj
q0oI51vLAgMBAAGjFTATMBEGA1UdEQQKMAiCBnJlYWRlcjANBgkqhkiG9w0BAQsF
AAOCAQEAgn0/ifmoPo8ecKzpoHuYXRso9M3t/+rmvFTRri+NBSBzehIXdF46Yynw
imqEAZpr5eRIIIE/0J1///LbVcRMe0KOwdlJrM+AZOS6CtHuxLTspvYcLLjRPV4B
/asZnTEZMgZTX9kbisiQ9sFW9qekqvDIDM3Eu4/AYpA+Khbmp+O1+1r6dNOESIQl
YxtnbRxVLvNbxXxNxbAH7bXLixW3+9s3LaZ3mfQDwU3rr/yzctFk3W4b7pYKuWyQ
CSOYF7CF15ClflIs9jsejNrL3x6pwkJRRmAZYRY7nDdzF0K5LawD8jtLV9cwqOr4
LEE9eq3AfaIN8VldEMmt/WohrwYtdQ==
-----END CERTIFICATE-----

28
app/test/fixtures/client-test-key.pem vendored Normal file
View file

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCPWGGLKgFsrVVJ
lB4Xnk2YqiWeJ+KgDr2wikdIJ6kA0D6pM0+fnDCQhJAztsLQ6XMEdOBpC8gB8Vrj
o2Zshg4BD45HCb848mYgwjlCR+oCmaRBV4HhuOZk7JNOS/VHCINRpN9WPSr2UDRs
aXKvYosuz92b3g537N2Pp3x2guCGPQ8svIpv0xmF97IR0cX+1VTQ1fvpwu25CxPl
xnXlHtX5Dif7mNhb1H9gkx1/yamSpVaeH9mAX/4DmJmFOY95oUybK+yIqSwIVH2g
EMuTtqxaMMlph7faodJD6vDb1g5yNUfwDG/MVtHRgPx+47FTTd3wG8t+4Blsytpj
q0oI51vLAgMBAAECggEAFGBX3VRnR2+MRB1N+cWC+kSVfFnnGSF/TW0anOMmXvs7
LQoiM2ocbS6q4O8F2nSU6PlEPSpzj/MjHGDJ2ntj2jq/2tFD4XBznAx/3zAhz6TP
eIpb6B5EgewvNF4Py70mDaEGLlgbl0/nY9HJf6zeZBUgR1vVaq69AAKq6p3IFMy5
JzuL9kgxjidqVrGYIJ8Vp/FA/WVFLjsUnMJNhBtM4Ldc+nxUiq/9PQS1+E6KUr9+
Q+F1PlGQpX71Txwnpnkb/41hjh+EEUiXTHXT+Xlw1toIiC8hk2fqCp2/pxyKd2EQ
PJHB+afLcFO8heZi4r9owqLXYDZeyGPtCWhonkPjwQKBgQDzbGkdklJ6LrLzts/m
dp+o6Bg7dFDq1HZA/F+iR/rCJKfnv1Nw9odEYA/bfQuNf9Tue71Ze33WXGzFXb4H
4Od4IJCXrMn7leZ8OaLIaIHZbxhvLU2CItfanMOyhh02irUDh4t0mdQ7Om3SetCR
NxiaKUL6J895F/EnV1l3BGUZuQKBgQCWwE6ARULaTXWIqEgkuEQCHKcVPjRGue0C
nugjWTBcfDz8JSb7s+D2fsFjukrXx1wx9jSF9feeD5rE7bwyHiVfSae4ydDW85DV
Z2NWnbPTdbu1S/R5I1ut8CUXutd3njLJCO4PcDxR/2j8rz9mpYsDv35Msc9AoGZb
E6T6EzlTowKBgQDOPGpukHrqY8hf7eIEizpIG6P0M18fJjSuaGQKFNviQrYzBYmH
aoc+KfklZ7MzBjv8db/+IT+DLzlEmmCXQjg6MbTvnIhgbCcj1p0RGGHzO0nDX+mM
OUMSR8ER7sivXiNwwxUnC/Gg4KcNLdqpPbnNWuoREUuZd+xr/Xih+opBmQKBgG9d
NSCxCcf2/OKtXk4yCZt9yzh4MWomI56SAW9LjdxkszCZyYibw46U6QxhLLTmw4bt
GLP1lq0fXfgon6RufLE92jc6b5q7Z70emVX9PkDycm5l4/4xTqLaCqzTDCWDqoS0
ohipkwYIJmi0laOgm2dzaTwDBtX5KGQTyQYseWb9AoGAY4ctZu3vHl2Pbg2zl53E
lD/n5zSPBRjfbZKJVfiWvC2+ut5YX7dWNKiVmurS9XPRQCTcujOYNxjbzB+t5Bcm
AQpSnwKe36wWyrH3YZkGmHxsAtxi1tUQVZxTX13NfhqYWAyxTxIrIUwXwabfTH7G
CB8KWfIABVIG4nWJDE/kRIQ=
-----END PRIVATE KEY-----

View file

@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE-----
MIICxjCCAa6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDEwlsb2Nh
bGhvc3QwHhcNMjYxMDExMTIxMjI1WhcNMzYxMDA4MTIxMjI1WjAUMRIwEAYDVQQD
Ewlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBNxVR
zQ0tgS4HmmpbsOFF4n0wip6fZKolD7Kif1vKKuzj9/+3cIiChGixmPNu4WtcIuf6
8HvLDBcp/uoDDroALe6Y9eoAsx2ibHGFuujOhTT/fAe87GYqIMTttSuOeP2VGauT
hcHiQIB25UB7ejUUPtgk/+9b/dQpZOrFonb2FjAASy3Sxp8uhflz/D42yz/8Bes0
0Z3ZihZeaJTTWX3fPmHbK9X5ZjjbtpIbiE+leBWQ1Kt5zuucq5tERBSDEXSw16Wk
vKubKe+t249L1QsCIg4t11v+BbY2SuvT9K5uNatxAEeNCVGWdghwQ95XaG9XrybM
05rSPGPylZogSSXNAgMBAAGjIzAhMB8GA1UdEQQYMBaCCWxvY2FsaG9zdIIJMTI3
LjAuMC4xMA0GCSqGSIb3DQEBCwUAA4IBAQAySnYV9S5ARkwXfSCYPC9m8nmDnaIa
5iqCMmZRdGVTj/jR653s3QJZMkYSaN7UnALxTgdb8pNASgca+HuM5PBhxrX2wmI+
4ocMwbdFrPPEi5gpIBZs6acGzX9KtpOOOOaNcz0+AsbcvyYFZLxVcdiFkcbBL1HM
jw6rqAxTvjyhSJMGcf/Es3SL/WffF3tDmumOyhN4BVgzKoQyMF+Ei0Pija+yoGrN
pyQJm0RYDEzYiw7DGUMSC8BoTj5yIUETWvNkRK78WDu1Kb5Fq3RqYAasd/wRKEfX
4dsZmmoH35tfGI0xMc2GnnMC8c7g7p/dMJdIOiupcg6/1sgqGTH5Tvb9
-----END CERTIFICATE-----

28
app/test/fixtures/gemini-test-a-key.pem vendored Normal file
View file

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDBNxVRzQ0tgS4H
mmpbsOFF4n0wip6fZKolD7Kif1vKKuzj9/+3cIiChGixmPNu4WtcIuf68HvLDBcp
/uoDDroALe6Y9eoAsx2ibHGFuujOhTT/fAe87GYqIMTttSuOeP2VGauThcHiQIB2
5UB7ejUUPtgk/+9b/dQpZOrFonb2FjAASy3Sxp8uhflz/D42yz/8Bes00Z3ZihZe
aJTTWX3fPmHbK9X5ZjjbtpIbiE+leBWQ1Kt5zuucq5tERBSDEXSw16WkvKubKe+t
249L1QsCIg4t11v+BbY2SuvT9K5uNatxAEeNCVGWdghwQ95XaG9XrybM05rSPGPy
lZogSSXNAgMBAAECggEACFNfT88OKk/Os/UrcBgHHQPNcTIH88Zaro4mnGnwgp2m
54vgMP9gYn9iI4T7uGNuROIcLOv/6Zfzx5N8cfVIfol8JosyMiWFuWIC4khTj9Kd
ngSyMKnfHSGcWsHbxp/gDXS1t/2jhSRSZM0sIiX5841hsvZ0Ufp2EfKPS0Tc622m
KRgN+EfM9cLuknon7L3YcK2dYhMp1ZslzDYkIjU97ydHxtZ5Xn0Zd+HGFueaWzon
zP94nx31wRSbzGF1nQ+7ESbkB2pGtP+xRva/sAlXUTRDLV3Krr5paqLWMU+law+j
PeZay5aH0go7yfLuRsxavQ/A0xHw0Tl9PoL0ikZb4QKBgQDer9OzsddE1pkTq7HR
ttX3Xg2RQoDBgFVDtrbQOm+RUOqw4NNjJVah8zx2ZSwc75PMR4WcjgLOl7JwH7Eg
3eFLFknJbGaFvkoMhKLmA6PnXFs7rX7cB3uusf2VCP5oFXiRltwOY6XxfYHyVGTw
HUfVx1eVUy0LFPNKX/fKEhWIewKBgQDeHpa+/lOusGk9xJlBFkd891j6+MsROB7C
CIQMXJiv9wKQg5G4uV3qlMiddsApwFxlpXoPxjcA0rgureNFAM4/R7PTq8yHG2NO
nUDCxkkhPb8sR7D4qZFEVvQQEjqPWQFsv+OdykPh29lzSDmPyu5rv0FHP2IKA2wM
hNHAWhYMVwKBgHSKXCa8ucZC8NXEk0kHgK72v+73eN7LxNOtObt7+Yt5Z3muD7Lh
hZc37rqfdBiooRbVj21BPOLVrQLU8yQaOp/LSE5rtrPjxGkMuRvbZ9nbEbwHrk6E
dAwXBnkKvenG4tR+uSemqt/ZKTqjRDgNety8eG+jmf0kt7aCxvEvyaklAoGBAIjd
8meoEWqAG6lK/mBD2TMguvyS15Y5rYJEexGe8Rrkqvjfiah42G0W1vNoXAqeFJEx
wR/9NKFWNtXUokk/sNb/WMiigPnzn2KutVwPkLph8O3ZEyx2WCPzLJrGkL0JzD31
k80D+IYw0TIfHBEFq5pLFG9RmBixeR/Rq+nJ2PIrAoGBANbGlg1YZHZloev+nhOO
0TiaS0GwlnHAvss228m+V2rXkX1niH6JbVCDIQ+XxzG25Tj+UFnoSdBTnpajdZzX
5IPUenRh6wTOxKPjHj7Zvhwxx+RL9xzwudBBPC3jTJLqruTg1cw24ux7b+LDO0wG
pYXQqTjqhtdw4XTH10JQdAIj
-----END PRIVATE KEY-----

View file

@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE-----
MIICxjCCAa6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDEwlsb2Nh
bGhvc3QwHhcNMjYxMDExMTIxMjI1WhcNMzYxMDA4MTIxMjI1WjAUMRIwEAYDVQQD
Ewlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCQPvJZ
SEze1FQQLOzsRDMmVnRttzrLC7MxR8kVk4DMrN2Dub6/1siyn74oQI3IMYOV2JRn
MC6S5ejy0y/5F3eeZ/n1xgiUOuWi8Rg/tS74WweLY/dcn5cVhibrSmEBJtYxt0KO
3t2s6A+haK8JKztm8V7wuSHbdkjpCCMoJj175SLuCyiF0iwD80mAM4WG0OmVIXtX
lyJ/5DwTBlb0XQMXBhmRe5v95m9UanxYef9aG03LPm8pjl2EWDEzK/25mNSI5eGv
AnniRhxHtp0sXoAi6oN0sTX3eCAru2/5WdjpOan6YLsXIsRmYizDevTX/tiB18al
152YJ0Bor4QI0xARAgMBAAGjIzAhMB8GA1UdEQQYMBaCCWxvY2FsaG9zdIIJMTI3
LjAuMC4xMA0GCSqGSIb3DQEBCwUAA4IBAQCFnr7gLYsnjraD8NRtguLEElJtTKIe
L8KW9Inil43CxJ5BF+p1IcExnZmcedRljGVES7tJ8sZDX5/VnUhErkjoy1uZjAIZ
3VVFXgKkH170HsSQv+SnRsUr/vfcqvI2AKr2Dapy+L4ftUYR9+0uXmSRXKTP2kQK
5wd2B2vjX4DMRrEiClQ2R4+bbut7bRokIr4X6NXVoEBuAZWYTGQK5Dydhg4m/t0o
NE8VC0qB2xhHxIhU5Q9PSpHuL8KJr0zJ++53X+LHfhy2fgN+ia/cqLaYszqbvQDQ
8lRGVUmpvQ+nYpvgYMmluEHJtbFGnSfvNBXsJGP9EqwN6ZiQBzNwWmRE
-----END CERTIFICATE-----

28
app/test/fixtures/gemini-test-b-key.pem vendored Normal file
View file

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCQPvJZSEze1FQQ
LOzsRDMmVnRttzrLC7MxR8kVk4DMrN2Dub6/1siyn74oQI3IMYOV2JRnMC6S5ejy
0y/5F3eeZ/n1xgiUOuWi8Rg/tS74WweLY/dcn5cVhibrSmEBJtYxt0KO3t2s6A+h
aK8JKztm8V7wuSHbdkjpCCMoJj175SLuCyiF0iwD80mAM4WG0OmVIXtXlyJ/5DwT
Blb0XQMXBhmRe5v95m9UanxYef9aG03LPm8pjl2EWDEzK/25mNSI5eGvAnniRhxH
tp0sXoAi6oN0sTX3eCAru2/5WdjpOan6YLsXIsRmYizDevTX/tiB18al152YJ0Bo
r4QI0xARAgMBAAECggEADy2QcrSY4hmVft47T+EdQLt4JNNS7GqewGC9V/fdZawK
4wF4gNco5yLH75RbVuVe4zWW6AS54dsvV93A/oTpoVFvi9z6qh5Ia4zS8GEwQBHU
CWbLcIOacjlbfwakjmp3v2N5LW9mA/unKWTKhjx2U66yPsI8PcuEgIDKsj7T2WVq
hqT2slp0sB96y6HyIo56Wwi/DFp5Jm05n2+DqaI9OzdYsvF5XgErLRENmWmTyd8/
N/Z/VhrJZXzmTx08fT1FoMjcyEr2km8SafX/U7TH9fV1SWqzNi/wHH0i/664IEkF
iiwDD9ArSu0PxoQ9g+IDOsS4PUifyH3ZwkNTUmvpAQKBgQDAqeGE2iWEdNFS8nZF
z76TArrqcuJwVxAyEfxrznilamu2/L0DEE9WVfGFNuenWl8mD6aZ4mmH7dHpdxH1
pNem+KelrKYyADTREDRWIotb8/xnbRpz3OmVbbMxf/XU+4qREvg9koCiXwD0Jzb1
eF+V6dN13EQAmRKrosnITixWnQKBgQC/qlgRSHBnBJVhpjaASlpSp6sXiOGiFsXI
MpfDAzkMZSgyroBeJQg0Yc4ZyWXmbFF/X1DhSIzMEwYjppZVgH6ME5Di3wditU96
/iz+zt6Wa5xRh0rbBHaMqChWWdi8sHZ0QaI1NYQFs1H5hFubSRGhv4SAOv4K1sdI
JaJoXD0rBQKBgDMFCbaPuj2wXbpUgOON1w7BO1RYpgRP2fcYcjruS16qpumnVjpY
eFoJmlLHrmLP+MBwhpLbtUyMuvjTUks1ovIRiPvDk6NMELCIVQO2VCc+nkmZR9cE
2kp66WgjVatYDWLLnjdX836MIAmH1PL+NHnTmO7uLIfoAVy4WC0WHoG1AoGBAIqh
wJ+HoN2ywAXofmVe4mQEqMkWFfXyuM4sYf8JFrtzc5btByaRbJTO5Y9bUBxR3sTd
gZfhrQ1y+S7SMMzZay8Qe+zNWv83m6yfqpYHtZJhdai2zhsK6GCmxL5osE8S6CsA
yj3oXnztDm8HIGd6e4leCI3jnZrjbTMvHYCUrx2tAoGBAK/8HO7FMu14z16C9yv9
L1Bxi51n7xe0llojR1nv+UzKE1BaG3u9Ni3kNiJGGZ21B4TS3nlWS6D3CZOMsH10
t5fqOCKdGY1eUxRu0qKa2jMn/lbdszevsDFsry++6xf4ZgcWB9++4FJupchf2Jet
U8bDDYMHS3yhAw/hOX8Q/Vy4
-----END PRIVATE KEY-----