mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-15 23:09:05 +00:00
LibCrypto+LibWeb: Support passing parameters to ASN.1 wrappers
Add support for encoding parameters in `wrap_in_private_key_info` and `wrap_in_subject_public_key_info` as well as turn `Span<int>` into `Span<int const>`.
This commit is contained in:
parent
1647893fc8
commit
9eea94aa14
Notes:
github-actions[bot]
2024-11-27 10:02:00 +00:00
Author: https://github.com/devgianlu
Commit: 9eea94aa14
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/2598
Reviewed-by: https://github.com/stelar7
3 changed files with 21 additions and 25 deletions
|
@ -13,8 +13,8 @@
|
|||
|
||||
namespace Crypto::PK {
|
||||
|
||||
template<class ByteBuffer>
|
||||
ErrorOr<ByteBuffer> wrap_in_private_key_info(ByteBuffer key, Span<int> algorithm_identifier)
|
||||
template<class ByteBuffer, typename Params>
|
||||
ErrorOr<ByteBuffer> wrap_in_private_key_info(ByteBuffer key, Span<int const> algorithm_identifier, Params params)
|
||||
{
|
||||
ASN1::Encoder encoder;
|
||||
TRY(encoder.write_constructed(ASN1::Class::Universal, ASN1::Kind::Sequence, [&]() -> ErrorOr<void> {
|
||||
|
@ -24,8 +24,7 @@ ErrorOr<ByteBuffer> wrap_in_private_key_info(ByteBuffer key, Span<int> algorithm
|
|||
TRY(encoder.write_constructed(ASN1::Class::Universal, ASN1::Kind::Sequence, [&]() -> ErrorOr<void> {
|
||||
TRY(encoder.write(algorithm_identifier)); // algorithm
|
||||
|
||||
// FIXME: This assumes we have a NULL parameter, this is not always the case
|
||||
TRY(encoder.write(nullptr)); // parameters
|
||||
TRY(encoder.write(params)); // parameters
|
||||
|
||||
return {};
|
||||
}));
|
||||
|
@ -39,8 +38,8 @@ ErrorOr<ByteBuffer> wrap_in_private_key_info(ByteBuffer key, Span<int> algorithm
|
|||
return encoder.finish();
|
||||
}
|
||||
|
||||
template<typename ExportableKey>
|
||||
ErrorOr<ByteBuffer> wrap_in_private_key_info(ExportableKey key, Span<int> algorithm_identifier)
|
||||
template<typename ExportableKey, typename Params>
|
||||
ErrorOr<ByteBuffer> wrap_in_private_key_info(ExportableKey key, Span<int const> algorithm_identifier, Params params)
|
||||
requires requires(ExportableKey k) {
|
||||
k.export_as_der();
|
||||
}
|
||||
|
@ -53,8 +52,7 @@ requires requires(ExportableKey k) {
|
|||
TRY(encoder.write_constructed(ASN1::Class::Universal, ASN1::Kind::Sequence, [&]() -> ErrorOr<void> {
|
||||
TRY(encoder.write(algorithm_identifier)); // algorithm
|
||||
|
||||
// FIXME: This assumes we have a NULL parameter, this is not always the case
|
||||
TRY(encoder.write(nullptr)); // parameters
|
||||
TRY(encoder.write(params)); // parameters
|
||||
|
||||
return {};
|
||||
}));
|
||||
|
@ -69,8 +67,8 @@ requires requires(ExportableKey k) {
|
|||
return encoder.finish();
|
||||
}
|
||||
|
||||
template<class ByteBuffer>
|
||||
ErrorOr<ByteBuffer> wrap_in_subject_public_key_info(ByteBuffer key, Span<int> algorithm_identifier)
|
||||
template<class ByteBuffer, typename ParamsType>
|
||||
ErrorOr<ByteBuffer> wrap_in_subject_public_key_info(ByteBuffer key, Span<int const> algorithm_identifier, ParamsType const& params)
|
||||
{
|
||||
ASN1::Encoder encoder;
|
||||
TRY(encoder.write_constructed(ASN1::Class::Universal, ASN1::Kind::Sequence, [&]() -> ErrorOr<void> {
|
||||
|
@ -78,8 +76,7 @@ ErrorOr<ByteBuffer> wrap_in_subject_public_key_info(ByteBuffer key, Span<int> al
|
|||
TRY(encoder.write_constructed(ASN1::Class::Universal, ASN1::Kind::Sequence, [&]() -> ErrorOr<void> {
|
||||
TRY(encoder.write(algorithm_identifier)); // algorithm
|
||||
|
||||
// FIXME: This assumes we have a NULL parameter, this is not always the case
|
||||
TRY(encoder.write(nullptr)); // parameters
|
||||
TRY(encoder.write(params)); // parameters
|
||||
|
||||
return {};
|
||||
}));
|
||||
|
@ -94,8 +91,8 @@ ErrorOr<ByteBuffer> wrap_in_subject_public_key_info(ByteBuffer key, Span<int> al
|
|||
return encoder.finish();
|
||||
}
|
||||
|
||||
template<typename ExportableKey>
|
||||
ErrorOr<ByteBuffer> wrap_in_subject_public_key_info(ExportableKey key, Span<int> algorithm_identifier)
|
||||
template<typename ExportableKey, typename ParamsType>
|
||||
ErrorOr<ByteBuffer> wrap_in_subject_public_key_info(ExportableKey key, Span<int const> algorithm_identifier, ParamsType const& params)
|
||||
requires requires(ExportableKey k) {
|
||||
k.export_as_der();
|
||||
}
|
||||
|
@ -106,8 +103,7 @@ requires requires(ExportableKey k) {
|
|||
TRY(encoder.write_constructed(ASN1::Class::Universal, ASN1::Kind::Sequence, [&]() -> ErrorOr<void> {
|
||||
TRY(encoder.write(algorithm_identifier)); // algorithm
|
||||
|
||||
// FIXME: This assumes we have a NULL parameter, this is not always the case
|
||||
TRY(encoder.write(nullptr)); // parameters
|
||||
TRY(encoder.write(params)); // parameters
|
||||
|
||||
return {};
|
||||
}));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue