mirror of
https://github.com/RGBCube/serenity
synced 2025-05-30 23:38:11 +00:00
LibTLS+LibCrypto: Remove all remaining uses of ByteBuffer::wrap()
This commit is contained in:
parent
050eb5afa8
commit
d5600e966a
6 changed files with 29 additions and 24 deletions
|
@ -49,8 +49,8 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void encrypt(ReadonlyBytes in, ByteBuffer& out) = 0;
|
virtual void encrypt(ReadonlyBytes in, Bytes& out) = 0;
|
||||||
virtual void decrypt(ReadonlyBytes in, ByteBuffer& out) = 0;
|
virtual void decrypt(ReadonlyBytes in, Bytes& out) = 0;
|
||||||
|
|
||||||
virtual void sign(ReadonlyBytes in, Bytes& out) = 0;
|
virtual void sign(ReadonlyBytes in, Bytes& out) = 0;
|
||||||
virtual void verify(ReadonlyBytes in, Bytes& out) = 0;
|
virtual void verify(ReadonlyBytes in, Bytes& out) = 0;
|
||||||
|
|
|
@ -113,7 +113,7 @@ RSA::KeyPairType RSA::parse_rsa_key(ReadonlyBytes in)
|
||||||
return keypair;
|
return keypair;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RSA::encrypt(ReadonlyBytes in, ByteBuffer& out)
|
void RSA::encrypt(ReadonlyBytes in, Bytes& out)
|
||||||
{
|
{
|
||||||
#ifdef CRYPTO_DEBUG
|
#ifdef CRYPTO_DEBUG
|
||||||
dbg() << "in size: " << in.size();
|
dbg() << "in size: " << in.size();
|
||||||
|
@ -121,7 +121,7 @@ void RSA::encrypt(ReadonlyBytes in, ByteBuffer& out)
|
||||||
auto in_integer = UnsignedBigInteger::import_data(in.data(), in.size());
|
auto in_integer = UnsignedBigInteger::import_data(in.data(), in.size());
|
||||||
if (!(in_integer < m_public_key.modulus())) {
|
if (!(in_integer < m_public_key.modulus())) {
|
||||||
dbg() << "value too large for key";
|
dbg() << "value too large for key";
|
||||||
out.clear();
|
out = {};
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto exp = NumberTheory::ModularPower(in_integer, m_public_key.public_exponent(), m_public_key.modulus());
|
auto exp = NumberTheory::ModularPower(in_integer, m_public_key.public_exponent(), m_public_key.modulus());
|
||||||
|
@ -133,7 +133,7 @@ void RSA::encrypt(ReadonlyBytes in, ByteBuffer& out)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RSA::decrypt(ReadonlyBytes in, ByteBuffer& out)
|
void RSA::decrypt(ReadonlyBytes in, Bytes& out)
|
||||||
{
|
{
|
||||||
// FIXME: Actually use the private key properly
|
// FIXME: Actually use the private key properly
|
||||||
|
|
||||||
|
@ -228,7 +228,7 @@ VerificationConsistency RSA_EMSA_PSS<HashFunction>::verify(ReadonlyBytes in)
|
||||||
return m_emsa_pss.verify(in, EM, mod_bytes * 8 - 1);
|
return m_emsa_pss.verify(in, EM, mod_bytes * 8 - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RSA_PKCS1_EME::encrypt(ReadonlyBytes in, ByteBuffer& out)
|
void RSA_PKCS1_EME::encrypt(ReadonlyBytes in, Bytes& out)
|
||||||
{
|
{
|
||||||
auto mod_len = (m_public_key.modulus().trimmed_length() * sizeof(u32) * 8 + 7) / 8;
|
auto mod_len = (m_public_key.modulus().trimmed_length() * sizeof(u32) * 8 + 7) / 8;
|
||||||
#ifdef CRYPTO_DEBUG
|
#ifdef CRYPTO_DEBUG
|
||||||
|
@ -236,7 +236,7 @@ void RSA_PKCS1_EME::encrypt(ReadonlyBytes in, ByteBuffer& out)
|
||||||
#endif
|
#endif
|
||||||
if (in.size() > mod_len - 11) {
|
if (in.size() > mod_len - 11) {
|
||||||
dbg() << "message too long :(";
|
dbg() << "message too long :(";
|
||||||
out.trim(0);
|
out = out.trim(0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (out.size() < mod_len) {
|
if (out.size() < mod_len) {
|
||||||
|
@ -263,7 +263,7 @@ void RSA_PKCS1_EME::encrypt(ReadonlyBytes in, ByteBuffer& out)
|
||||||
out.overwrite(2, ps, ps_length);
|
out.overwrite(2, ps, ps_length);
|
||||||
out.overwrite(2 + ps_length, paddings, 1);
|
out.overwrite(2 + ps_length, paddings, 1);
|
||||||
out.overwrite(3 + ps_length, in.data(), in.size());
|
out.overwrite(3 + ps_length, in.data(), in.size());
|
||||||
out.trim(3 + ps_length + in.size()); // should be a single block
|
out = out.trim(3 + ps_length + in.size()); // should be a single block
|
||||||
|
|
||||||
#ifdef CRYPTO_DEBUG
|
#ifdef CRYPTO_DEBUG
|
||||||
dbg() << "padded output size: " << 3 + ps_length + in.size() << " buffer size: " << out.size();
|
dbg() << "padded output size: " << 3 + ps_length + in.size() << " buffer size: " << out.size();
|
||||||
|
@ -271,12 +271,12 @@ void RSA_PKCS1_EME::encrypt(ReadonlyBytes in, ByteBuffer& out)
|
||||||
|
|
||||||
RSA::encrypt(out, out);
|
RSA::encrypt(out, out);
|
||||||
}
|
}
|
||||||
void RSA_PKCS1_EME::decrypt(ReadonlyBytes in, ByteBuffer& out)
|
void RSA_PKCS1_EME::decrypt(ReadonlyBytes in, Bytes& out)
|
||||||
{
|
{
|
||||||
auto mod_len = (m_public_key.modulus().trimmed_length() * sizeof(u32) * 8 + 7) / 8;
|
auto mod_len = (m_public_key.modulus().trimmed_length() * sizeof(u32) * 8 + 7) / 8;
|
||||||
if (in.size() != mod_len) {
|
if (in.size() != mod_len) {
|
||||||
dbg() << "decryption error: wrong amount of data: " << in.size();
|
dbg() << "decryption error: wrong amount of data: " << in.size();
|
||||||
out.trim(0);
|
out = out.trim(0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,7 +284,7 @@ void RSA_PKCS1_EME::decrypt(ReadonlyBytes in, ByteBuffer& out)
|
||||||
|
|
||||||
if (out.size() < RSA::output_size()) {
|
if (out.size() < RSA::output_size()) {
|
||||||
dbg() << "decryption error: not enough data after decryption: " << out.size();
|
dbg() << "decryption error: not enough data after decryption: " << out.size();
|
||||||
out.trim(0);
|
out = out.trim(0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -178,8 +178,8 @@ public:
|
||||||
m_private_key = pair.private_key;
|
m_private_key = pair.private_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void encrypt(ReadonlyBytes in, ByteBuffer& out) override;
|
virtual void encrypt(ReadonlyBytes in, Bytes& out) override;
|
||||||
virtual void decrypt(ReadonlyBytes in, ByteBuffer& out) override;
|
virtual void decrypt(ReadonlyBytes in, Bytes& out) override;
|
||||||
|
|
||||||
virtual void sign(ReadonlyBytes in, Bytes& out) override;
|
virtual void sign(ReadonlyBytes in, Bytes& out) override;
|
||||||
virtual void verify(ReadonlyBytes in, Bytes& out) override;
|
virtual void verify(ReadonlyBytes in, Bytes& out) override;
|
||||||
|
@ -222,8 +222,8 @@ public:
|
||||||
|
|
||||||
~RSA_PKCS1_EME() { }
|
~RSA_PKCS1_EME() { }
|
||||||
|
|
||||||
virtual void encrypt(ReadonlyBytes in, ByteBuffer& out) override;
|
virtual void encrypt(ReadonlyBytes in, Bytes& out) override;
|
||||||
virtual void decrypt(ReadonlyBytes in, ByteBuffer& out) override;
|
virtual void decrypt(ReadonlyBytes in, Bytes& out) override;
|
||||||
|
|
||||||
virtual void sign(ReadonlyBytes, Bytes&) override;
|
virtual void sign(ReadonlyBytes, Bytes&) override;
|
||||||
virtual void verify(ReadonlyBytes, Bytes&) override;
|
virtual void verify(ReadonlyBytes, Bytes&) override;
|
||||||
|
|
|
@ -290,7 +290,7 @@ void TLSv12::build_random(PacketBuilder& builder)
|
||||||
Crypto::PK::RSA_PKCS1_EME rsa(certificate.public_key.modulus(), 0, certificate.public_key.public_exponent());
|
Crypto::PK::RSA_PKCS1_EME rsa(certificate.public_key.modulus(), 0, certificate.public_key.public_exponent());
|
||||||
|
|
||||||
u8 out[rsa.output_size()];
|
u8 out[rsa.output_size()];
|
||||||
auto outbuf = ByteBuffer::wrap(out, rsa.output_size());
|
auto outbuf = Bytes { out, rsa.output_size() };
|
||||||
rsa.encrypt(m_context.premaster_key, outbuf);
|
rsa.encrypt(m_context.premaster_key, outbuf);
|
||||||
|
|
||||||
#ifdef TLS_DEBUG
|
#ifdef TLS_DEBUG
|
||||||
|
@ -305,7 +305,7 @@ void TLSv12::build_random(PacketBuilder& builder)
|
||||||
|
|
||||||
builder.append_u24(outbuf.size() + 2);
|
builder.append_u24(outbuf.size() + 2);
|
||||||
builder.append((u16)outbuf.size());
|
builder.append((u16)outbuf.size());
|
||||||
builder.append(outbuf.bytes());
|
builder.append(outbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t TLSv12::handle_payload(ReadonlyBytes vbuffer)
|
ssize_t TLSv12::handle_payload(ReadonlyBytes vbuffer)
|
||||||
|
|
|
@ -153,14 +153,14 @@ ByteBuffer TLSv12::build_finished()
|
||||||
builder.append_u24(out_size);
|
builder.append_u24(out_size);
|
||||||
|
|
||||||
u8 out[out_size];
|
u8 out[out_size];
|
||||||
auto outbuffer = ByteBuffer::wrap(out, out_size);
|
auto outbuffer = Bytes { out, out_size };
|
||||||
auto dummy = ByteBuffer::create_zeroed(0);
|
auto dummy = ByteBuffer::create_zeroed(0);
|
||||||
|
|
||||||
auto digest = m_context.handshake_hash.digest();
|
auto digest = m_context.handshake_hash.digest();
|
||||||
auto hashbuf = ReadonlyBytes { digest.immutable_data(), m_context.handshake_hash.digest_size() };
|
auto hashbuf = ReadonlyBytes { digest.immutable_data(), m_context.handshake_hash.digest_size() };
|
||||||
pseudorandom_function(outbuffer, m_context.master_key, (const u8*)"client finished", 15, hashbuf, dummy);
|
pseudorandom_function(outbuffer, m_context.master_key, (const u8*)"client finished", 15, hashbuf, dummy);
|
||||||
|
|
||||||
builder.append(outbuffer.bytes());
|
builder.append(outbuffer);
|
||||||
auto packet = builder.build();
|
auto packet = builder.build();
|
||||||
update_packet(packet);
|
update_packet(packet);
|
||||||
|
|
||||||
|
|
|
@ -781,7 +781,7 @@ static void aes_ctr_test_name()
|
||||||
PASS;
|
PASS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define AS_BB(x) (ByteBuffer::wrap((x), sizeof((x)) / sizeof((x)[0])))
|
#define AS_BB(x) (ReadonlyBytes { (x), sizeof((x)) / sizeof((x)[0]) })
|
||||||
static void aes_ctr_test_encrypt()
|
static void aes_ctr_test_encrypt()
|
||||||
{
|
{
|
||||||
auto test_it = [](auto key, auto ivec, auto in, auto out_expected) {
|
auto test_it = [](auto key, auto ivec, auto in, auto out_expected) {
|
||||||
|
@ -1808,7 +1808,7 @@ static void rsa_test_encrypt()
|
||||||
"4234603516465654167360850580101327813936403862038934287300450163438938741499875303761385527882335478349599685406941909381269804396099893549838642251053393"_bigint,
|
"4234603516465654167360850580101327813936403862038934287300450163438938741499875303761385527882335478349599685406941909381269804396099893549838642251053393"_bigint,
|
||||||
"65537"_bigint);
|
"65537"_bigint);
|
||||||
u8 buffer[rsa.output_size()];
|
u8 buffer[rsa.output_size()];
|
||||||
auto buf = ByteBuffer::wrap(buffer, sizeof(buffer));
|
auto buf = Bytes { buffer, sizeof(buffer) };
|
||||||
rsa.encrypt(data, buf);
|
rsa.encrypt(data, buf);
|
||||||
if (memcmp(result, buf.data(), buf.size())) {
|
if (memcmp(result, buf.data(), buf.size())) {
|
||||||
FAIL(Invalid encryption result);
|
FAIL(Invalid encryption result);
|
||||||
|
@ -1825,7 +1825,7 @@ static void rsa_test_encrypt()
|
||||||
"4234603516465654167360850580101327813936403862038934287300450163438938741499875303761385527882335478349599685406941909381269804396099893549838642251053393"_bigint,
|
"4234603516465654167360850580101327813936403862038934287300450163438938741499875303761385527882335478349599685406941909381269804396099893549838642251053393"_bigint,
|
||||||
"65537"_bigint);
|
"65537"_bigint);
|
||||||
u8 buffer[rsa.output_size()];
|
u8 buffer[rsa.output_size()];
|
||||||
auto buf = ByteBuffer::wrap(buffer, sizeof(buffer));
|
auto buf = Bytes { buffer, sizeof(buffer) };
|
||||||
rsa.encrypt(data, buf);
|
rsa.encrypt(data, buf);
|
||||||
rsa.decrypt(buf, buf);
|
rsa.decrypt(buf, buf);
|
||||||
|
|
||||||
|
@ -2000,8 +2000,13 @@ static void rsa_test_encrypt_decrypt()
|
||||||
"39542231845947188736992321577701849924317746648774438832456325878966594812143638244746284968851807975097653255909707366086606867657273809465195392910913"_bigint,
|
"39542231845947188736992321577701849924317746648774438832456325878966594812143638244746284968851807975097653255909707366086606867657273809465195392910913"_bigint,
|
||||||
"65537"_bigint);
|
"65537"_bigint);
|
||||||
dbg() << "Output size: " << rsa.output_size();
|
dbg() << "Output size: " << rsa.output_size();
|
||||||
auto dec = ByteBuffer::create_zeroed(rsa.output_size());
|
|
||||||
auto enc = ByteBuffer::create_zeroed(rsa.output_size());
|
u8 enc_buffer[rsa.output_size()];
|
||||||
|
u8 dec_buffer[rsa.output_size()];
|
||||||
|
|
||||||
|
auto enc = Bytes { enc_buffer, rsa.output_size() };
|
||||||
|
auto dec = Bytes { dec_buffer, rsa.output_size() };
|
||||||
|
|
||||||
enc.overwrite(0, "WellHelloFriendsWellHelloFriendsWellHelloFriendsWellHelloFriends", 64);
|
enc.overwrite(0, "WellHelloFriendsWellHelloFriendsWellHelloFriendsWellHelloFriends", 64);
|
||||||
|
|
||||||
rsa.encrypt(enc, dec);
|
rsa.encrypt(enc, dec);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue