Re: Incomplete Armored Detached Signature

Russell Haley <[email protected]>
Newsgroups gmane.comp.encryption.bouncy-castle.devel
Message-ID <CABx9NuSe4zu+WPiu6rBoTVDBfw=+pOYj0Lc43zQaUg=sZw_dxQ@mail.gmail.com>
On Wed, Jun 20, 2018 at 11:08 PM, Rogan Dawes <[email protected]> wrote:

> Missing flush() on bOut?


Thanks for the suggestion. I just retested and flush(), finish() or both
don't seem to have an effect:


-----BEGIN PGP SIGNATURE-----
Version: BCPG v1.59

iJwEAAECAAYFAlsr144ACgkQQmMlIjYrRyHvCAP7B/nqHGTO/48QprAg/JoXTu4s
SCglKa1U3PbgZX0plAphmiu8og+ZWPaaVQ6zSR7GYkAxqv4MG4Fq2jdZRLEErrTW
QzNgRJT7QXocky/7S2VAU8rgGFdNzkxkY2XHFsS82ZlEvfbeBLqv68zwjKpM18gp
mPWTadnOoTXQJsXF


private OutputStream createSignature(InputStream script, InputStream keyIn,
char[] pass, boolean  armor)
throws GeneralSecurityException, IOException, PGPException
{
OutputStream out = new ByteArrayOutputStream();
ArmoredOutputStream aOut = null;
if (armor){
aOut = new ArmoredOutputStream(out);
}

PGPSecretKey             pgpSec = readSecretKey(keyIn);
PGPPrivateKey            pgpPrivKey = pgpSec.extractPrivateKey(new
JcePBESecretKeyDecryptorBuilder().setProvider("BC").build(pass));
PGPSignatureGenerator    sGen = new PGPSignatureGenerator(new
JcaPGPContentSignerBuilder(pgpSec.getPublicKey().getAlgorithm(),
PGPUtil.SHA1).setProvider("BC"));

sGen.init(PGPSignature.BINARY_DOCUMENT, pgpPrivKey);

BCPGOutputStream         bOut = new BCPGOutputStream((aOut!=null)?aOut:out);
InputStream              fIn = new BufferedInputStream(script);

int ch;
while ((ch = fIn.read()) >= 0){
sGen.update((byte)ch);
}

fIn.close();

sGen.generate().encode(bOut);
bOut.flush();
bOut.finish();
return out;
}

If there are no other suggestions I'll try running the example code.

Russ


>
> On Wed, 20 Jun 2018 at 21:19 Russell Haley <[email protected]> wrote:
>
>> Hi,
>>
>> I have a function that creates a detached signature and returns a
>> ByteArrayOutputStream. That signature is put in a zip file comment. When I
>> run create the signature without armor and use  DatatypeConverter.printHexBinary
>> to "encode" it, everything works. However, when I have tried to use the
>> armor API my signature is incomplete:
>>
>> -----BEGIN PGP SIGNATURE-----
>> Version: BCPG v1.59
>>
>> iJwEAAECAAYFAlsqpWQACgkQQmMlIjYrRyEkTwP/TJAULzklDhQ49fJwpdxd8AD2
>> rtVktEq5gFupRBp4Zoi9BqzHbhrymhiCRuZgq1jAJGd5+qpErfwrFCmPevTq6ksE
>> 4qtauuUw30WRzDbNzO53+6ZENUA2EDQFawfSQPG1/VpI9NOLsKsbEGBrdax7BJJO
>> wHx9Lab29VPPBXCb
>>
>>
>> When attempting to verify the signature I get "premature end of stream in
>> PartialInputStream". When using my on 'encoding' I get a verified
>> signature.
>>
>> The createSignature function I'm using is pretty close to the example
>> code (I changed where the final output stream lives and I don't close it
>> explicitly in this function):
>>
>> private OutputStream createSignature(InputStream script, InputStream
>> keyIn, char[] pass, boolean  armor)
>> throws GeneralSecurityException, IOException, PGPException
>> {
>> OutputStream out = new ByteArrayOutputStream();
>> ArmoredOutputStream aOut = null;
>> if (armor){
>> aOut = new ArmoredOutputStream(out);
>> }
>>
>> PGPSecretKey             pgpSec = readSecretKey(keyIn);
>> PGPPrivateKey            pgpPrivKey = pgpSec.extractPrivateKey(new
>> JcePBESecretKeyDecryptorBuilder().setProvider("BC").build(pass));
>> PGPSignatureGenerator    sGen = new PGPSignatureGenerator(new
>> JcaPGPContentSignerBuilder(pgpSec.getPublicKey().getAlgorithm(),
>> PGPUtil.SHA1).setProvider("BC"));
>>
>> sGen.init(PGPSignature.BINARY_DOCUMENT, pgpPrivKey);
>>
>> BCPGOutputStream         bOut = new BCPGOutputStream((aOut!=null)?
>> aOut:out);
>> InputStream              fIn = new BufferedInputStream(script);
>>
>> int ch;
>> while ((ch = fIn.read()) >= 0){
>> sGen.update((byte)ch);
>> }
>>
>> fIn.close();
>>
>> sGen.generate().encode(bOut);
>> return out;
>> }
>>
>> I've put a breakpoint at the "return out" and the signature is truncated
>> before it leaves the function. I checked the ArmouredOutputStream and
>> nothing looks suspect to my untrained eye. Does anyone have some thoughts
>> on what I've missed?
>>
>> Thanks,
>> Russ
>>
>>
>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.