mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-09-28 18:49:56 +02:00
Kotlin conversion: SignatureGenerationStream
This commit is contained in:
parent
fe13c290b4
commit
dca2dc6221
|
@ -1,65 +0,0 @@
|
||||||
// SPDX-FileCopyrightText: 2022 Paul Schaub <vanitasvitae@fsfe.org>
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
package org.pgpainless.encryption_signing;
|
|
||||||
|
|
||||||
import org.bouncycastle.openpgp.PGPSignatureGenerator;
|
|
||||||
import org.pgpainless.key.SubkeyIdentifier;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OutputStream which has the task of updating signature generators for written data.
|
|
||||||
*/
|
|
||||||
class SignatureGenerationStream extends OutputStream {
|
|
||||||
|
|
||||||
private final OutputStream wrapped;
|
|
||||||
private final SigningOptions options;
|
|
||||||
|
|
||||||
SignatureGenerationStream(@Nonnull OutputStream wrapped, @Nullable SigningOptions signingOptions) {
|
|
||||||
this.wrapped = wrapped;
|
|
||||||
this.options = signingOptions;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void write(int b) throws IOException {
|
|
||||||
wrapped.write(b);
|
|
||||||
if (options == null || options.getSigningMethods().isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (SubkeyIdentifier signingKey : options.getSigningMethods().keySet()) {
|
|
||||||
SigningOptions.SigningMethod signingMethod = options.getSigningMethods().get(signingKey);
|
|
||||||
PGPSignatureGenerator signatureGenerator = signingMethod.getSignatureGenerator();
|
|
||||||
byte asByte = (byte) (b & 0xff);
|
|
||||||
signatureGenerator.update(asByte);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void write(@Nonnull byte[] buffer) throws IOException {
|
|
||||||
write(buffer, 0, buffer.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void write(@Nonnull byte[] buffer, int off, int len) throws IOException {
|
|
||||||
wrapped.write(buffer, 0, len);
|
|
||||||
if (options == null || options.getSigningMethods().isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (SubkeyIdentifier signingKey : options.getSigningMethods().keySet()) {
|
|
||||||
SigningOptions.SigningMethod signingMethod = options.getSigningMethods().get(signingKey);
|
|
||||||
PGPSignatureGenerator signatureGenerator = signingMethod.getSignatureGenerator();
|
|
||||||
signatureGenerator.update(buffer, 0, len);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close() throws IOException {
|
|
||||||
wrapped.close();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
// SPDX-FileCopyrightText: 2023 Paul Schaub <vanitasvitae@fsfe.org>
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package org.pgpainless.encryption_signing
|
||||||
|
|
||||||
|
import java.io.OutputStream
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OutputStream which has the task of updating signature generators for written data.
|
||||||
|
*/
|
||||||
|
class SignatureGenerationStream(
|
||||||
|
private val wrapped: OutputStream,
|
||||||
|
private val options: SigningOptions?
|
||||||
|
) : OutputStream() {
|
||||||
|
|
||||||
|
override fun close() = wrapped.close()
|
||||||
|
override fun flush() = wrapped.flush()
|
||||||
|
|
||||||
|
override fun write(b: Int) {
|
||||||
|
wrapped.write(b)
|
||||||
|
options?.run {
|
||||||
|
signingMethods.values.forEach {
|
||||||
|
it.signatureGenerator.update((b and 0xff).toByte())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun write(b: ByteArray) = write(b, 0, b.size)
|
||||||
|
|
||||||
|
override fun write(b: ByteArray, off: Int, len: Int) {
|
||||||
|
wrapped.write(b, off, len)
|
||||||
|
options?.run {
|
||||||
|
signingMethods.values.forEach {
|
||||||
|
it.signatureGenerator.update(b, off, len)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue