Skip to content

Commit

Permalink
Merge branch 'develop' into devsecops
Browse files Browse the repository at this point in the history
  • Loading branch information
aleks-ivanov committed Aug 24, 2024
2 parents 7d20ba4 + 0459582 commit 6e4c5dc
Show file tree
Hide file tree
Showing 69 changed files with 933 additions and 1,449 deletions.
1 change: 1 addition & 0 deletions itext.tests/itext.pdfua.tests/itext.pdfua.tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
<ProjectReference Include="..\..\itext\itext.pdfua\itext.pdfua.csproj" />
<ProjectReference Include="..\..\itext\itext.pdftest\itext.pdftest.csproj" />
<ProjectReference Include="..\..\itext\itext.font-asian\itext.font-asian.csproj" />
<ProjectReference Include="..\..\itext\itext.sign\itext.sign.csproj" />
</ItemGroup>
<ItemGroup>
</ItemGroup>
Expand Down
312 changes: 312 additions & 0 deletions itext.tests/itext.pdfua.tests/itext/pdfua/PdfUASignerTest.cs

Large diffs are not rendered by default.

80 changes: 80 additions & 0 deletions itext.tests/itext.pdfua.tests/itext/pdfua/PemFileHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
/*
This file is part of the iText (R) project.
Copyright (c) 1998-2024 Apryse Group NV
Authors: Apryse Software.
This program is offered under a commercial and under the AGPL license.
For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below.
AGPL licensing:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using iText.Bouncycastleconnector;
using iText.Commons.Bouncycastle;
using iText.Commons.Bouncycastle.Cert;
using iText.Commons.Bouncycastle.Crypto;
using iText.Commons.Bouncycastle.Openssl;

namespace iText.Pdfua {
public sealed class PemFileHelper {
private static readonly IBouncyCastleFactory FACTORY = BouncyCastleFactoryCreator.GetFactory();

private PemFileHelper() {
// Empty constructor.
}

public static IX509Certificate[] ReadFirstChain(String pemFileName) {
return ReadCertificates(pemFileName).ToArray();
}

public static IPrivateKey ReadFirstKey(String pemFileName, char[] keyPass) {
return ReadPrivateKey(pemFileName, keyPass);
}

public static List<IX509Certificate> InitStore(String pemFileName) {
IX509Certificate[] chain = ReadFirstChain(pemFileName);
return chain.Length > 0 ? new List<IX509Certificate> { chain[0] } : chain.ToList();
}

private static IList<IX509Certificate> ReadCertificates(String pemFileName) {
using (TextReader file = new StreamReader(pemFileName)) {
IPemReader parser = FACTORY.CreatePEMParser(file, null);
Object readObject = parser.ReadObject();
IList<IX509Certificate> certificates = new List<IX509Certificate>();
while (readObject != null) {
if (readObject is IX509Certificate) {
certificates.Add((IX509Certificate)readObject);
}
readObject = parser.ReadObject();
}
return certificates;
}
}

private static IPrivateKey ReadPrivateKey(String pemFileName, char[] keyPass) {
using (TextReader file = new StreamReader(pemFileName)) {
IPemReader parser = FACTORY.CreatePEMParser(file, keyPass);
Object readObject = parser.ReadObject();
while (!(readObject is IPrivateKey) && readObject != null) {
readObject = parser.ReadObject();
}
return (IPrivateKey)readObject;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFNTBfBgkqhkiG9w0BBQ0wUjAxBgkqhkiG9w0BBQwwJAQQckJU/1QOCBdNhbzA
qt9eJQICCAAwDAYIKoZIhvcNAgkFADAdBglghkgBZQMEAQIEEG383GXg0NLIhlxe
6SJAomIEggTQ6QRSX1Gx8X6JbCGnQitDEtZmjCbz8zF9Uq/AtAvDE7kuR1cnOmpn
+ElbU379I66fwiiGxzZNAh84ZXrDLEHojBQYLZBQI85Z/Rwy0zFi8S1BkI1Hhc3O
SplWOlqoof9PRIJ+cYTRe63+R4own1oReKSGGjzOqkw+hhi8PI06RZssqzahkNUd
Ag/AGp5zdV361TlszYWGJGSTQuDqbiXshXedLLjq65dDDyWYe5DV4mV2nOM0LYVn
IsRv4qBISl6tGCLsd1LHWwz8k/uotzFb9DzyA0fh6sV7JR3eGB8geMrNhlrvkVWN
xsXdB3gwW/u2SSMRcO2STs8PNbcs+IeznFUb4nqNbthoTZb24UyI0kC+ltfhMiMv
qnnpen1JY0ITOGNKyBaUm6uvh8SPrMvESHGFD7aJDVa7bzI+P+mZ+Xj+mk7NFoeT
N6lBkBiivBZ1ZgaHJsFFF4nq+LN/NWbxM+BYKy5yK6YPstatKuIvHwyD3GnLEnfq
dbr54l+qaSKei616ArjUK3jVqElC5vHRh9Vdfvqbt+tDWkxV1EIyzwDzG9mpGRU0
Sopi4NdyRXZ+OvaV2YN4iXUhkbrJ/FodlJnUSo4YUthK1jA0pCdvbbLu4tBqd9iH
z23nKmSfguTGao6vfPVPkusUr00L0S1s1yDvevHM2IXF3DxFOkdkgdVSUzGkLenJ
N1aGBs+Eq4FVK/WuuLeM4njcoULqaOGnZ9j4ntBZXdrLZa1gwrLGwiGmIBOll6fN
7Btoj/frPvPp9RJwqyYjjILMSI0g/y1mzGIa5ODW7Dac4Lux0byzRYlxSdRlN3vb
nStW/Y1CcyhsOeiNHnJhmH8refNti6U9RZbgRBq9WeEbVTOdHZEn9QN8wVxpVz2H
csEocPezL80gI8rdVRlLO+igI7HqUZZTZwv25s5rQFj9fOo9/35gR6GXcYdSfezn
W4j9Q9Cb7S042hrKC2Qkhaoz+m68Ic9eNEGTiHOYZ5aLkHX4K38Bqxq7+rgi6eao
lao6UpnLOurZF5Fm+LEqsfFx+zbIHGJFIb22Y6zy01c9pKiAi77TJxEVC6WCE0dS
j1ywvdT1i1oZzDYBWnqJ0fczddbsc1/5gcvsj4sCFuRhP1KBpsTO3h4cG8TS/vKw
0rhljSsLbYnlKsguneNg4bb7tw2n5rCxGSkXaLgrfpexoxh5rHIr9Bcd9uTBhojE
xykqIG3LevcAn3+hAdEdvcwF0Ck/v4r/xXD3+pGKHbDR/076KKjWe6uR/Il3pegi
6QU95NNyWDNOsolv8fogsJzdjhYVONQlpavHRSWT95Jkrli9k0sfyDCKNLX/+142
plFVHH9RQJfcrHFmJV40p96oeGKfiC0TTix45lM2QM3tF7Im2ajzCBchacAJFktH
DtaYeMcMLiJBvmv5Cb9gEkyUJ1QyTQIe+XUaFkSz9dfvQMsghRgYcUpD4IGleeWQ
70A0miyvu+y1mZpLe7qGsBugN8pjkbnqfPv/B2+7LPYT3JabW0Q9OMbmktEG6cjM
zim5Vq3EiCgEkI+G4lmdVF0dHhweCQzd88RfWjLyrsh8NcFy15jxaHaxw9llrB0A
oIhX8e8RBiqW5xD2PtNl1spO2m2kpCjfOKD4TOnxU+/c8Cbd25DgtZs=
-----END ENCRYPTED PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIEMDCCAxigAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwPTELMAkGA1UEBhMCQkUx
DjAMBgNVBAoMBWlUZXh0MR4wHAYDVQQDDBVpVGV4dFRlc3RJbnRlcm1lZGlhdGUw
IBcNMjAwMTAxMDAwMDAwWhgPMjQwMDAxMDEwMDAwMDBaMDUxCzAJBgNVBAYTAkJF
MQ4wDAYDVQQKDAVpVGV4dDEWMBQGA1UEAwwNaVRleHRUZXN0TGVhZjCCASIwDQYJ
KoZIhvcNAQEBBQADggEPADCCAQoCggEBANAerFO5YC/19zwIJCq9eT6dXtnZ9CR6
D1qvOYD4mmcSYaQDxbkSGGhvF80TEKuuo0HypEy0xzKLK+zcuE/+e4qAIMYrA6PR
XxaXmGa1SiVVidG55TWWgbGNwBQ3xwpEBwWWWuz/va8bvjcmVuRaJdI9dajCpct4
Crk9kNH/ctV6aT2/4oJ58NYRsHBzBIfm7XDoId8PyKGeSPLS6HIn9hd7o0H80eOa
lovIv19HyoQ16IhkuJ8wNgbHsz67e9DfsSk6vyBCP7DL01jvfHyPMPFHRTqhwjh8
waCAVkfENJaAJwgNFTpu3QadG1qHLp9DC7bvpyaDLNxvVqCrtn16dgECAwEAAaOC
AT4wggE6MB0GA1UdDgQWBBQKzNSfEJzjZP6eEsBg1ltKDz9n0jAfBgNVHSMEGDAW
gBTmJ/JV3iF82DReVKOaHPWXKCq9izAOBgNVHQ8BAf8EBAMCBeAwgZkGCCsGAQUF
BwEBBIGMMIGJMD0GCCsGAQUFBzABhjFodHRwOi8vdGVzdC5leGFtcGxlLmNvbS9l
eGFtcGxlLWNhL29jc3Avc2lnbi1vY3NwMEgGCCsGAQUFBzAChjxodHRwOi8vdGVz
dC5leGFtcGxlLmNvbS9leGFtcGxlLWNhL2NlcnRzL2ludGVybWVkaWF0ZS9jYS5j
cnQwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3Rlc3QuZXhhbXBsZS5jb20vZXhh
bXBsZS1jYS9jcmxzL3NpZ24tY3JsL2xhdGVzdC5jcmwwDQYJKoZIhvcNAQELBQAD
ggEBAFacTDkc4o4eTYwrgfFb5elu66897UIGHAL1UlXfWUUW7csMkSYSj/Sl7Wuj
ueGRY0l00eExRBCZW4UdcjwCNsI/9wC8CRpM90vw3e8MjKvm5KeVza3HydkIk/YU
h5M+5J1AcqgSUw1RHvRXhMoZ2/tOahoLawc4hU/6Fd5l2sxxxh7Vu/Ls5cQkLd5N
PSpcpByOAzCUAOcAWcBLlzdH5tS5GN69B+oKYBPDJYaSpRSWfljLcVfhr0F2Nuyb
JmtSs8hoiKFv+faCcWRnYnCpKxStc/bkMXosoTW6RU51wD+v4KI0BxXwfIv5UT6G
GoBJOuvldIX6xGU3GbcCyQzm5VA=
-----END CERTIFICATE-----
Binary file not shown.
Loading

0 comments on commit 6e4c5dc

Please sign in to comment.