summaryrefslogtreecommitdiff
path: root/Libraries/LibCrypto
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/LibCrypto')
-rw-r--r--Libraries/LibCrypto/PK/RSA.cpp24
-rw-r--r--Libraries/LibCrypto/PK/RSA.h10
2 files changed, 21 insertions, 13 deletions
diff --git a/Libraries/LibCrypto/PK/RSA.cpp b/Libraries/LibCrypto/PK/RSA.cpp
index 5e0f12cba7..1c984c60c2 100644
--- a/Libraries/LibCrypto/PK/RSA.cpp
+++ b/Libraries/LibCrypto/PK/RSA.cpp
@@ -163,11 +163,15 @@ void RSA::verify(const ByteBuffer& in, ByteBuffer& out)
out = out.slice(out.size() - size, size);
}
-void RSA::import_private_key(const ByteBuffer& buffer, bool pem)
+void RSA::import_private_key(ReadonlyBytes bytes, bool pem)
{
- // so gods help me, I hate DER
- auto decoded_buffer = pem ? decode_pem(buffer.span()) : buffer;
- auto key = parse_rsa_key(decoded_buffer.span());
+ ByteBuffer buffer;
+ if (pem) {
+ buffer = decode_pem(bytes);
+ bytes = buffer.span();
+ }
+
+ auto key = parse_rsa_key(bytes);
if (!key.private_key.length()) {
dbg() << "We expected to see a private key, but we found none";
ASSERT_NOT_REACHED();
@@ -175,11 +179,15 @@ void RSA::import_private_key(const ByteBuffer& buffer, bool pem)
m_private_key = key.private_key;
}
-void RSA::import_public_key(const ByteBuffer& buffer, bool pem)
+void RSA::import_public_key(ReadonlyBytes bytes, bool pem)
{
- // so gods help me, I hate DER
- auto decoded_buffer = pem ? decode_pem(buffer.span()) : buffer;
- auto key = parse_rsa_key(decoded_buffer.span());
+ ByteBuffer buffer;
+ if (pem) {
+ buffer = decode_pem(bytes);
+ bytes = buffer.span();
+ }
+
+ auto key = parse_rsa_key(bytes);
if (!key.public_key.length()) {
dbg() << "We expected to see a public key, but we found none";
ASSERT_NOT_REACHED();
diff --git a/Libraries/LibCrypto/PK/RSA.h b/Libraries/LibCrypto/PK/RSA.h
index 6a5f56ad1b..9d429d0b4a 100644
--- a/Libraries/LibCrypto/PK/RSA.h
+++ b/Libraries/LibCrypto/PK/RSA.h
@@ -160,13 +160,13 @@ public:
RSA(const ByteBuffer& publicKeyPEM, const ByteBuffer& privateKeyPEM)
{
- import_public_key(publicKeyPEM);
- import_private_key(privateKeyPEM);
+ import_public_key(publicKeyPEM.span());
+ import_private_key(privateKeyPEM.span());
}
RSA(const StringView& privKeyPEM)
{
- import_private_key(ByteBuffer::wrap(privKeyPEM.characters_without_null_termination(), privKeyPEM.length()));
+ import_private_key(privKeyPEM.bytes());
m_public_key.set(m_private_key.modulus(), m_private_key.public_exponent());
}
@@ -188,8 +188,8 @@ public:
virtual size_t output_size() const override { return m_public_key.length(); }
- void import_public_key(const ByteBuffer& buffer, bool pem = true);
- void import_private_key(const ByteBuffer& buffer, bool pem = true);
+ void import_public_key(ReadonlyBytes, bool pem = true);
+ void import_private_key(ReadonlyBytes, bool pem = true);
const PrivateKeyType& private_key() const { return m_private_key; }
const PublicKeyType& public_key() const { return m_public_key; }