mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-12-22 10:57:58 +01:00
Kotlin conversion: SignatureGenerationStream
This commit is contained in:
parent
0fa09065cf
commit
068aa0ec27
2 changed files with 39 additions and 65 deletions
|
@ -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