Re: bouncycastle pskserver error

kiranmayi boyapati <[email protected]> Mon, 6 May 2019 21:47:25 +0530
Newsgroups gmane.comp.encryption.bouncy-castle.devel
Message-ID <CAGuVNbtFFDgXcWifLWXZmq1o-9f=RhQ+Sdvn=_8jK4JAU+uYqw@mail.gmail.com>
thank you very much. I got it working open SSL client as well.

On Mon, 6 May 2019, 19:14 Peter Dettman <[email protected]
wrote:

> Note that the test you are running is actually performing two
> handshakes, the first of which is working, and the second one failing.
>
> I investigated this and discovered a small issue whereby the value
> returned from BasicTlsPSKIdentity.getPSK() is overwritten (zeroed out)
> by TlsPSKKeyExchange at completion of the key exchange. This explains
> why the second handshake fails since the client is sharing a single
> instance of BasicTlsPSKIdentity.
>
> This is now fixed so that getPSK returns a cloned array. You can work
> around the issue by creating a second instance of BasicTlsPSKIdentity at
> line 50 of your PSKTlsClientTest.
>
> I have also added a PSKTlsServer class to our test classes and modified
> PSKTlsClient to use the matching psk_identity/psk, so that they will
> work together. This amounts to the same test as yours.
>
> Regards,
> Pete Dettman
>
>
> On 4/5/19 5:22 pm, kiranmayi boyapati wrote:
> > I was running Mock server code from 1.58. So client and server
> > negotiated on block cipher.
> >
> > Now i downloaded the Mock server client code from 1.61. Still i face the
> > same issue.  Now the " TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256"
> > cipher is negotiated.
> >
> > Below is the error i am facing.
> > Accepted Socket[addr=/127.0.0.1
> > <http://127.0.0.1>,port=51386,localport=5556]
> > TLS-PSK server negotiated TLS 1.2
> > Returning PSK 6161616161
> > TLS-PSK server received alert: warning(1), close_notify(0)
> > TLS-PSK server raised alert: warning(1), close_notify(0)
> >> Connection closed
> > TLS-PSK server raised alert: fatal(2), bad_record_mac(20)
> >> Failed to read record
> > org.bouncycastle.tls.TlsFatalAlert: bad_record_mac(20)
> >     at
> >
> org.bouncycastle.tls.crypto.impl.TlsAEADCipher.decodeCiphertext(TlsAEADCipher.java:232)
> >     at
> > org.bouncycastle.tls.RecordStream.decodeAndVerify(RecordStream.java:232)
> >     at
> org.bouncycastle.tls.RecordStream.readRecord(RecordStream.java:217)
> >     at
> org.bouncycastle.tls.TlsProtocol.safeReadRecord(TlsProtocol.java:686)
> >     at
> > org.bouncycastle.tls.TlsProtocol.blockForHandshake(TlsProtocol.java:324)
> >     at
> > org.bouncycastle.tls.TlsServerProtocol.accept(TlsServerProtocol.java:81)
> >     at
> com.oracle.test.TlsServerTest$ServerThread.run(TlsServerTest.java:62)
> > Caused by: org.bouncycastle.tls.TlsFatalAlert: bad_record_mac(20)
> >     at
> >
> org.bouncycastle.tls.crypto.impl.bc.BcChaCha20Poly1305.doFinal(BcChaCha20Poly1305.java:70)
> >     at
> >
> org.bouncycastle.tls.crypto.impl.TlsAEADCipher.decodeCiphertext(TlsAEADCipher.java:228)
> >     ... 6 more
> > Exception in thread "Thread-1" java.lang.RuntimeException:
> > org.bouncycastle.tls.TlsFatalAlert: bad_record_mac(20)
> >     at
> com.oracle.test.TlsServerTest$ServerThread.run(TlsServerTest.java:69)
> > Caused by: org.bouncycastle.tls.TlsFatalAlert: bad_record_mac(20)
> >     at
> >
> org.bouncycastle.tls.crypto.impl.TlsAEADCipher.decodeCiphertext(TlsAEADCipher.java:232)
> >     at
> > org.bouncycastle.tls.RecordStream.decodeAndVerify(RecordStream.java:232)
> >     at
> org.bouncycastle.tls.RecordStream.readRecord(RecordStream.java:217)
> >     at
> org.bouncycastle.tls.TlsProtocol.safeReadRecord(TlsProtocol.java:686)
> >     at
> > org.bouncycastle.tls.TlsProtocol.blockForHandshake(TlsProtocol.java:324)
> >     at
> > org.bouncycastle.tls.TlsServerProtocol.accept(TlsServerProtocol.java:81)
> >     at
> com.oracle.test.TlsServerTest$ServerThread.run(TlsServerTest.java:62)
> > Caused by: org.bouncycastle.tls.TlsFatalAlert: bad_record_mac(20)
> >     at
> >
> org.bouncycastle.tls.crypto.impl.bc.BcChaCha20Poly1305.doFinal(BcChaCha20Poly1305.java:70)
> >     at
> >
> org.bouncycastle.tls.crypto.impl.TlsAEADCipher.decodeCiphertext(TlsAEADCipher.java:228)
> >     ... 6 more
> >
> > In code i see that calculated MAC and received MAC are not matching.
> >
> > Have attached TlsServerTest, MockPSKTlServer (i changed the PSK in this)
> > and PSKTlsClientTest for reference. Can you point out what i am doing
> wrong.
> >
> >
> > On Fri, May 3, 2019 at 10:34 PM Peter Dettman
> > <[email protected] <mailto:[email protected]>>
> > wrote:
> >
> >     You said you ran PSKTlsClientTest against the TlsServerTest code. I
> >     tested this here and it worked fine (after changing address, port,
> >     psk_identity, psk). You could also begin with TlsPSKProtocolTest as a
> >     working client/server test.
> >
> >     Also, for me your test negotiates
> >     TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 (which uses
> TlsAEADCipher),
> >     not a block cipher (TlsBlockCipher), so I guess you have made other
> >     changes which you did not mention; this makes it difficult to know
> what
> >     the issue is.
> >
> >     'useExplicitIV' should be (and is) true for both TLS 1.1 and TLS
> 1.2, so
> >     no, your understanding is not correct. Even so, it is very strange if
> >     setting it to false makes your test work. I suggest you double-check
> >     your test results.
> >
> >     If you're still seeing the error, please post the complete test
> classes
> >     you are using.
> >
> >     Regards,
> >     Pete Dettman
> >
> >
> >     On 3/5/19 10:01 pm, kiranmayi boyapati wrote:
> >     > Hi,
> >     >
> >     > Yes we changed the PSK identities to match on both sides. When i
> >     run it
> >     > in debug mode, i figured out that in "TlsBlockCipher" class
> >     > "useExplicitIV" flag is becoming true which should be false for
> TLS1.2
> >     > as i understand.
> >     >
> >     > If i change that parameter to false in the class and run the test,
> >     > client is successfully connecting to the server.
> >     >
> >     > When i dive deep to understand under what conditions the flag will
> be
> >     > true - found that for TLS 1.1 it should be true, but i am using
> >     TLS 1.2
> >     > still it is set to true.
> >     >
> >     > Can some one help me to verify if my understanding is correct?
> >     >
> >     > kiran
> >     >
> >     > On Fri, May 3, 2019 at 5:02 PM Peter Dettman
> >     > <[email protected]
> >     <mailto:[email protected]>
> >     <mailto:[email protected]
> >     <mailto:[email protected]>>>
> >     > wrote:
> >     >
> >     >     Presumably you need to modify the psk_identity/psk in
> >     PSKTlsClientTest
> >     >     to match the (only) configured PSK for MockPSKTlsServer (see
> >     the inner
> >     >     class MyIdentityManager in MockPSKTlsServer).
> >     >
> >     >     PSKTlsClientTest changes (lines 38-39):
> >     >
> >     >             String psk_identity = "client";
> >     >             byte[] psk = new byte[16];
> >     >
> >     >     Regards,
> >     >     Pete Dettman
> >     >
> >     >     On 3/5/19 4:29 pm, Sukawanth psr wrote:
> >     >     > I am trying to write PSKServer to use PSK ciphers in
> >     bouncycastle.
> >     >     >
> >     >     > Attached is the PSK server we wrote. And we are using
> >     >     > org.bouncycastle.tls.test.PSKTlsClientTest as client for
> >     testing.
> >     >     >
> >     >     > I see below error while tls handshake.
> >     >     >
> >     >     > I am using 1.6.1 version.
> >     >     >
> >     >     > org.bouncycastle.tls.TlsFatalAlert: bad_record_mac(20)
> >     >
> >
> >
>
>
>