Skip to content

Commit 49c3942

Browse files
committed
Add ML-DSA
1 parent 2e9bff6 commit 49c3942

File tree

6 files changed

+320
-0
lines changed

6 files changed

+320
-0
lines changed

src/Servers/Kestrel/Core/src/Internal/Certificates/CertificateConfigLoader.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4+
using System.Diagnostics;
5+
using System.Diagnostics.CodeAnalysis;
46
using System.Globalization;
57
using System.Security.Cryptography;
68
using System.Security.Cryptography.X509Certificates;
@@ -95,6 +97,7 @@ private static X509Certificate2 LoadCertificateKey(X509Certificate2 certificate,
9597
const string RSAOid = "1.2.840.113549.1.1.1";
9698
const string DSAOid = "1.2.840.10040.4.1";
9799
const string ECDsaOid = "1.2.840.10045.2.1";
100+
const string MLDSA44Oid = "2.16.840.1.101.3.4.3.17";
98101

99102
// Duplication is required here because there are separate CopyWithPrivateKey methods for each algorithm.
100103
var keyText = File.ReadAllText(keyPath);
@@ -142,6 +145,21 @@ private static X509Certificate2 LoadCertificateKey(X509Certificate2 certificate,
142145
throw CreateErrorGettingPrivateKeyException(keyPath, ex);
143146
}
144147
}
148+
case MLDSA44Oid:
149+
{
150+
#pragma warning disable SYSLIB5006 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
151+
using var mlDsa = ImportMLDsaKeyFromFile(keyText, password);
152+
153+
try
154+
{
155+
return certificate.CopyWithPrivateKey(mlDsa);
156+
}
157+
catch (Exception ex)
158+
{
159+
throw CreateErrorGettingPrivateKeyException(keyPath, ex);
160+
}
161+
#pragma warning restore SYSLIB5006 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
162+
}
145163
default:
146164
throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, CoreStrings.UnrecognizedCertificateKeyOid, certificate.PublicKey.Oid.Value));
147165
}
@@ -174,6 +192,19 @@ private static void ImportKeyFromFile(AsymmetricAlgorithm asymmetricAlgorithm, s
174192
}
175193
}
176194

195+
[Experimental("SYSLIB5006")]
196+
private static MLDsa ImportMLDsaKeyFromFile(string keyText, string? password)
197+
{
198+
if (password == null)
199+
{
200+
return MLDsa.ImportFromPem(keyText);
201+
}
202+
else
203+
{
204+
return MLDsa.ImportFromEncryptedPem(keyText, password);
205+
}
206+
}
207+
177208
private static X509Certificate2 LoadFromStoreCert(CertificateConfig certInfo)
178209
{
179210
var subject = certInfo.Subject!;

src/Servers/Kestrel/Kestrel/test/KestrelConfigurationLoaderTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,10 @@ public void ConfigureEndpoint_ThrowsWhen_The_KeyIsPublic()
696696
[InlineData("https-dsa.pem", "https-dsa-protected.key", "test")]
697697
[InlineData("https-dsa.crt", "https-dsa.key", null)]
698698
[InlineData("https-dsa.crt", "https-dsa-protected.key", "test")]
699+
[InlineData("https-mldsa44.pem", "https-mldsa44.key", "aspnetcore")]
700+
[InlineData("https-mldsa44.pem", "https-mldsa44-protected.key", "aspnetcore")]
701+
[InlineData("https-mldsa44.crt", "https-mldsa44.key", "aspnetcore")]
702+
[InlineData("https-mldsa44.crt", "https-mldsa44-protected.key", "aspnetcore")]
699703
public void ConfigureEndpoint_CanLoadPemCertificates(string certificateFile, string certificateKey, string password)
700704
{
701705
var serverOptions = CreateServerOptions();
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
-----BEGIN ENCRYPTED PRIVATE KEY-----
2+
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
59+
bqtv6TQqYLVX
60+
-----END ENCRYPTED PRIVATE KEY-----
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIPVzCCBc2gAwIBAgIUHvkjopGVNlBdGzkbNxlswd2F7n0wCwYJYIZIAWUDBAMR
3+
MBQxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0yNTA3MjExODQ0MDJaFw0zNTA3MTkx
4+
ODQ0MDJaMBQxEjAQBgNVBAMMCWxvY2FsaG9zdDCCBTIwCwYJYIZIAWUDBAMRA4IF
5+
IQBE4Isi3MA9ZtHxXpxx+B5S1LIeRPibxmfv8RvUOxYyuBpbX6YlNJNrQmVgCa3M
6+
17BBc6QW9UhK2WARsYJkRU6MAlILPSDeqy12Njm7xynb1KqiM2T0PKirwbbg/NRF
7+
itKqZjBL0c4nrMaTqKNTX767qqGeaexnK5nKElw1wi1GaFq+CTT1eslUeibwyBHh
8+
/LoUe+eeBPcPsD011wO7g35pPOkX7aclZe2azouUGD4xLM6Zys/ksl+Fcyj8PJbx
9+
AHwRr9mHfTI50nJSwljMwQQadtMGBnskX4eptLyKVcPPHtugYStnKo2gm4I6N//z
10+
OcBNaR9jib5Z9MmdMCLScQCR0Rw71qgLgATPG/TMHUgkCBZ0MRQFCLXvNVfdbtTa
11+
k8oA57n7Yy8wHXYQGaC64vPU4ElJ01trs7VUdPmI+Wq++a3T887xy/5Wn1ABn5eN
12+
HSixhR2kpu/kKtNqMIPjZ8ahYGlpNkktTHWFbGGVNCGnBtAUQkYub0wat7eNWqFM
13+
qnnLdTqrVUHCJ7BNpOFB6lqIRBQjo9RvcbGV02SOxk04tbDqoBeqp9kc3SLqh2iy
14+
cbEUDdl88/obfpWnvIRfHDa2TGm8GU2xWpC1o8uR3mwJEZpKVKtGWDiAjFHc99Jp
15+
g3mdjAxI0sv+tYy1PTzFw03HShNmx7821RhJZSiQACqEoza1hzA+GR9ND5hoEW6S
16+
I3PrUQyQHUFWH0bfpYGj2oWPI33nDkS4B91tiWfExDCfp958D5zIh/eos+PS6t5n
17+
COJXSk4leQwx2x3U3gGZCb/2UsHURbYXK+6Kdr/AAQoaUD9Pc5GgLLU5VHGGYZdG
18+
Xwwv/pv1jASwZelWGMbzeO6+R88+wI+nEB7VvCUU6/KWlBw1GymRGLebdoPHBXWS
19+
QzujrII0Z4e0CYwc0ONKmI6kMEjJZrxuUw0s4Crn5LOY8lLUcPBwpsSOO55RNVF7
20+
7OxTmHxAY9EVdgn6hUV3VFjvSPA4LJtQNhLY0qoD9d6M+3ZEzWBI5LY6aZTrj1Wz
21+
7oXSyqudq3euMKTkW//6bPEV808FrjkMhtkPWwyNoVC98ynpeZF/wX/q+M5GM+OE
22+
6EJC6AqWi+Ldn3yDldEMWXlMEFKAyL1E/Hyb7blXzl+XNR/C3V2j0GKY50p8c7cq
23+
MpwjmEl5sXuQ/8cEOTwwSEksGO2WIsE72yMUJsaZ2vW10a9JpGPz0iq175mbptNQ
24+
qIWuAdSrxB8Cop+/kIprCCgiTNBldu07o4k38YAX32WIjdRKixZbKpeThHLnchbN
25+
mdGrkqc2fRRAVRwD7GCDrAw/gxPgz+6KsE+i1r5Elj7uoNO3PZ+V/cIhg7x9yKnP
26+
y5CydPBW2YpwJ/3Z23oxLhTySLLHFcp/6IKyZGcWgK9/G0t7OgVAoNOQY4fIe5eI
27+
P9LzB4++VZAMvXZBLoMKzfesBD1Qx2C0CCb5XHuyvuw4c5hgMLZjwtRAsL2EeXf/
28+
SSm6/k+kpArYTzzkG4zT/E8lPj1Hx4uk2QdMnasftEt3zElkBFpBH0x6OD24lDvo
29+
tovBB1WGt22208h3KGDf1+H/sdDooY02WG+sq9eaZmCIcP7Z27bH8OsxEe62x2ty
30+
+tF3Mv3JMefVnJqdiOvVFEbUr4Xq2rM0/wo3kHx9fWy9yaFMOmcDFHYWYGUavtBw
31+
OGNY9KhHAf6IY8UlpIErep2dh9Lx6nyHgEayLo1pstlJz4LRVkNkzaRIQ4nFBbeu
32+
J10J0MPe2EMvMRbE2F/x0atyoyEwHzAdBgNVHQ4EFgQUWnTnvfxEMSMsYQNEWM0D
33+
zRoeNXMwCwYJYIZIAWUDBAMRA4IJdQCbjjcJktjMpMArYaJ24F8Eoc9EIAmuI4wA
34+
i+2ZqWXiPrYhkhVvODGxInGvOWgRjlQT1KdE4Xcps4Csf/YaLEp/hdYRUErgDIO9
35+
xIxdzEil2i8N9UgEeXr4Rar7pE4WXqCQOQEhxE53UQLWSy+xvZXT97YkxDXVvV8p
36+
brOG+jZKRXUC0UTNcgyWRSQAQ9Fy6zHX02bSyrw4Wg0Pr/u5Kch4eFNEj2lHTXaE
37+
j42VrkzxatD8XvdY4xbP05TRGR+uoP3mzfhQnd2otp4oEzBvxybiJbUGS+c+vr/G
38+
GZDiMSLLLEE8Z06AJUk6ZWcp5To78HgS/ufH085S0SJuRliQervWzV2eE4LWxSLt
39+
OG/ggoY37fd/ovGbpqCP/+GTVrp9FC5inG7tJDiWxeeWgnRUG6aHcWafcbcAhbBu
40+
g3LhpQzl9Qkbl01CNaI9X4BWmPTkwqh92hGBHG7PUDQnowGYlsWz+dUnJz5LNU8R
41+
JJCvFt/V1YqDty6Xz2yGj8SMZNK8Lf59YbUEsKTsavY5MUHQ/QaQIoQA+oZH2p5N
42+
Ow2TDzlBZ+gfiRIiiEx3T1Ra6P5f/RyNIZQcer0NGn+dPPIxNDabUFKfhiyNuLsy
43+
pazvN3RlaaWBq+XkoQVSRUo7pIaEst/xIQmkEXixzu23dMEXD0/bI31X+UisATfD
44+
z6pBVOHMQpk95G0qMgmUI644uK5QZYCoYdJbQJCRZcFuEn37Z1yLC7B2LijieG5Q
45+
1AVV1uqOEkEBklwRMrzn/wfoTW0nTdTpIvq68+Z6tzOANdXdkw/mXxBxTx73vpli
46+
LIYk/9pxjNqCGs3oOFJfovw+eFQBcjl3zNxWiWxLxKzLBg8SIiI1/v51xSwOEa5c
47+
LZJny/HljPPgepM30VxffGF7oDpg0JKwYYvhHqxN6bOjsgj9xcxLvDYr7ukq4RXx
48+
l1o7BDSWEm7ihSbog/P5WO7lNWY+z+vXjuaGz1s7BP11TvVdj3qL4kEiotKaZsHA
49+
Nbv5ydkPjWYXmal7Z/3fq/4gwtvs6nGaG7nQ/KSHRCGQ/v2vqVIVX4JSZPB1CyVI
50+
O07jVX3zh8jxT35spG9m3MUhGZh8xoRNGURdV8ZeSd7TAKEGKC76/syOImEfqdy1
51+
D/9ZNvRRDDBkzOT8jQZ58vDl3qk8XSuqF2WvgRF9ihFtNAZ+wmCR7GEHwx1hVvB4
52+
BSqcs7onL8Z8pBllt4YXn+BrmKejgV1ACcj+AnSlqkGOgv8Nk9KXaCInXXXuaIJg
53+
5lqi9TtUk2ndiAxjWsvP5tm1QJm0cyPcyRedRQ8XC0PWNa6BVyCnN3QQthOMleMl
54+
NLNvm4GVwQuuuIF2qJSDvPG3tkmZuLAUoq1tj4X73YRyqg98g9d7dzmkKUupluSj
55+
e7HJJfhzdyDCPeh/zAUoHsLtOcf5b4bGtcpLnbtqbe9NKY5+fYqNUid2GL/otdVE
56+
2CHezFRFVX2+47I+zdQST7vxfPQg7BE08/xN8lsOavbDARUGSV5OTu+P7n8Eh9Ru
57+
DyKJaxnfW5dd8m/qfoyEuoLzxzEQ8lPM1tJDJk61K3mEXbEDC7hZd4rUtYh0Sm7w
58+
C82Gkz9D/XD8YEeeT1BGPVKroh3h5ObCRao8ZU56x0sJU8YWOe4SsCOF1riztaqx
59+
WXJzMaKy1ls/f1e6BgCrbaXkMqzaGqI14KxTQGG4njLfCCUhXj59nK2/zDY8duQq
60+
tqjjLts0g4VjS8U0U3UD4r3oSoYDiW1FxtMpaj4BrPKK6JbwR79N/qrfS+qO14lg
61+
daVJL6YtY/bhyWQuqiGSAPrQwxQwT42W2lriGhHJ8VMHUYuhC18ZMWmovo/2lq7u
62+
2KaeFiYUMbOYy2ejFS9eR4B+e5KE98k2mOZ6ZlyfO4rK7BmdhogltfxAxOQ4UAon
63+
2TN1bduweEQD9JbBqT1CdN51QHwrfiO3hd+QovEzmVwLhHFlHrY/6ZD6hlmovFze
64+
LQV4k7M3D+BAZVp7/TBj81UFacY2mkTH4IuyzZXagtAa257GZ3Ncl6tapQDvyMO8
65+
gR68J705zZraKq8UzcifinO8dRi4agyT54SIYAFzKvNuL8rrrqP8c3VjZx4+epOW
66+
DRG90rPBP099atCCEOaUdi1Vmcn3i1shGEoVLlrz1ae4y80l/OlKIFzqhLfBPj7e
67+
dphcPU77p/gl7K5lV3Fkmo+msSQ0xtNQRqUr/fFSxtQkheiEj793G7wLUMuJBpZr
68+
PX+2KdeV6rPvTyHutbl5uIviAHOGrY5yT2dzVe4pgEADLCGt0TG9bQFcOkEg8MY0
69+
JNeSw46UNhHWfGzibEeHAJxBdJaLSNMilRgyppvJ3SqwhRy3p/RUwOC1AiSRgxN0
70+
JfOCZ1SlhLdWGcH2aJHtGuj9lSdhEHvIoX8rSRJLnB/sYMXG1AmY0yxpg4xVRmuZ
71+
4KiHmuwax3s6bOXcJ6n5OkzJRf0hF6JDOd3cPSQ1fJFR3ruZjtB5GuzSdEcrN8PY
72+
DbeXta3uxd5pFqSScpjxslGIavwsGy+Gy48sM14pZJh/sWYL8VYDETShMEZ/++Nz
73+
8Ng3mbdJNToTkXBcaHdqJEGzOnqE1xylfhgB0CkhNH0MdI4nwHozHPFThjZ2bj9a
74+
WmfxI9lhA07pupF9RkMY0pbGICnAeDVcqfg9xCrHU70ChhonjOY7GO7ICpLEuPgX
75+
0M7KjGXXxvSz5euL7o36Enp0K/AoGW3iJlCxNMQ3PrzsOlAqrohHB+CHtpviBYkW
76+
JBIATZ7mKha9mxGL9AYctoELt7+/qUR8sQor/g8YaOkeTN5Kg/IIAPW2nIjePEDR
77+
XOLncoNQW7vWFsioTNrYAI3rEPhuwSIKTGirvdUOP0pnbjL3Ue6DdTzs7kPQC12p
78+
eRL1Ou/aYP25y7WruZcyK9T9X2EYvU7m+WgO5eWArUCOu4IiDL7MNaeCGmiTJY8r
79+
ZeNAFXHIdSoo1v/9EnTGB4nKbYiDXLuuLM0xEgEjPYmWAH8vaq57RpbJ7y7Lmm3Z
80+
06zsToqMpFAvtPOdrDCFK5vVWtEa4XLPGHgb0/RH58y1yqQBi/8r8FPEsq5Ac72k
81+
wTwGN12Bs8rqw+534pu5u6fXZpCg0ItIKhzIRcp5u1/nwxgHEuW67+WRiu1l31s1
82+
7giCq26RUwYICR0xNTxJeZquvcvQ5RIjJ1Zkl8fS3N/i7/0GIkN8f5amqrCxyM/R
83+
2uDi6/cDFRg+eHl9kJaepq+wwsfKzt/9AAAAAAAAAAAAAAAAAAAADxwuQQ==
84+
-----END CERTIFICATE-----
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
-----BEGIN PRIVATE KEY-----
2+
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
57+
-----END PRIVATE KEY-----

0 commit comments

Comments
 (0)