<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2292727873123668144</id><updated>2011-07-07T22:56:02.167+02:00</updated><category term='logging'/><category term='yahoo pipes'/><category term='otr4j'/><category term='otr'/><category term='libjotr'/><category term='java'/><category term='sourcegear vault'/><category term='bug'/><category term='bouncycastle'/><category term='eclipse'/><category term='mercurial'/><category term='tip'/><category term='netbeans'/><category term='svn'/><category term='newtaskmaybe?'/><title type='text'>OTR (Off-the-Record) Messaging for SIP Communicator</title><subtitle type='html'>&lt;a href="http://code.google.com/p/otr4j"&gt;otr4j&lt;/a&gt; is part of my GSoC 09' project and is encouraged by the &lt;a href="http://sip-communicator.org"&gt;SIP Communicator&lt;/a&gt; development.

&lt;a href="http://code.google.com/p/otr4j"&gt;otr4j&lt;/a&gt; is an implementation of the &lt;a href="http://www.cypherpunks.ca/otr/"&gt;OTR (Off-the-Record) protocol&lt;/a&gt; in java.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-1155656448130876074</id><published>2009-10-11T17:20:00.003+02:00</published><updated>2009-10-11T17:34:22.437+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='otr4j'/><title type='text'>otr4j I/O redesign almost complete</title><content type='html'>&lt;a href="http://code.google.com/p/otr4j"&gt;otr4j (the java Off-the-Record library)&lt;/a&gt;, I/O redesign is almost complete now. The plan was to create a dedicated java.net.otr4j.io package that would host various I/O streams for optimal message serialization/deserialization.&lt;br /&gt;&lt;br /&gt;The java.net.otr4j.io package development is complete now. It has been developed independently from the existing otr4j code base because it was not possible to both develop the package and refactor it's dependencies at the same time.&lt;br /&gt;&lt;br /&gt;As soon as I complete the refactoring and make sure everything works as expected, I will commit the code.&lt;br /&gt;&lt;br /&gt;These code changes will fix &lt;a href="http://code.google.com/p/otr4j/issues/detail?id=1"&gt;issue 1 (&lt;span class="h3"&gt;Enhance serialization/deserialization&lt;/span&gt;)&lt;/a&gt; and &lt;a href="http://code.google.com/p/otr4j/issues/detail?id=8"&gt;issue 8 (&lt;span class="h3"&gt;non-(ISO Latin 1) characters do not display correctly&lt;/span&gt;)&lt;/a&gt;, both of which are very important.&lt;br /&gt;&lt;div style="border: 0.5px solid Blue; padding: 5pt; position: absolute; display: none; z-index: 1000; background-color: White; color: Black;"&gt;&lt;hr /&gt;&lt;div&gt;&lt;input style="vertical-align: middle;" id="contentCommander_cbRequireAlt" type="checkbox"&gt;&lt;label title="Select to require the Alt key to be pressed for this dialog to popup" for="contentCommander_cbRequireAlt"&gt;Require Alt Key&lt;/label&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="border: 0.5px solid Blue; padding: 5pt; position: absolute; display: none; z-index: 1000; background-color: White; color: Black;"&gt;&lt;hr /&gt;&lt;div&gt;&lt;input style="vertical-align: middle;" id="contentCommander_cbRequireAlt" type="checkbox"&gt;&lt;label title="Select to require the Alt key to be pressed for this dialog to popup" for="contentCommander_cbRequireAlt"&gt;Require Alt Key&lt;/label&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-1155656448130876074?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/1155656448130876074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/10/otr4j-io-redesign-almost-complete.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1155656448130876074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1155656448130876074'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/10/otr4j-io-redesign-almost-complete.html' title='otr4j I/O redesign almost complete'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-1261074209244151653</id><published>2009-09-17T01:43:00.007+02:00</published><updated>2009-09-17T02:18:45.361+02:00</updated><title type='text'>Life After GSoC</title><content type='html'>GSoC is not that important to split the time before and after it (GSoC), but I liked that subject because it reminds of a well known song I was listening to in my earliest youth :&gt;&lt;br /&gt;&lt;br /&gt;So what's going on after GSoC (relevant to GSoC)?&lt;br /&gt;&lt;br /&gt;The truth is that I don't have much free time, but I try to devote some time in &lt;a href="http://code.google.com/p/otr4j"&gt;otr4j&lt;/a&gt; and &lt;a href="http://sip-communicator.org/"&gt;SIP Communicator&lt;/a&gt;. The SIP Communicator plugin is in a good state but there are some open issues for otr4j.&lt;br /&gt;&lt;br /&gt;I have already worked on &lt;a href="http://code.google.com/p/otr4j/issues/detail?id=3"&gt;otr4j issue 3&lt;/a&gt; because there was demand. Currently I'm reading &lt;a href="http://www.amazon.com/Java-I-O-Elliotte-Harold/dp/0596527500/"&gt;Java I/O&lt;/a&gt; so I can work on &lt;a href="http://code.google.com/p/otr4j/issues/detail?id=1"&gt;issue 1&lt;/a&gt; with more confidence.&lt;br /&gt;&lt;br /&gt;The code changes required for closing issue 1 would affect 20-25% of the code approximately and will improve code quality and readability a lot and a bit it's efficiency.&lt;br /&gt;&lt;br /&gt;Another thing I've started working on is a port of otr4j in .NET (&lt;a href="http://code.google.com/p/otr4net"&gt;otr4net&lt;/a&gt;), I think that will follow IO changes because I want to have a good model before I finish the port.&lt;br /&gt;&lt;br /&gt;That's about it :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-1261074209244151653?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/1261074209244151653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/09/life-after-gsoc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1261074209244151653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1261074209244151653'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/09/life-after-gsoc.html' title='Life After GSoC'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-1593311504411000790</id><published>2009-08-22T14:17:00.003+02:00</published><updated>2009-08-22T14:32:18.655+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tip'/><category scheme='http://www.blogger.com/atom/ns#' term='newtaskmaybe?'/><title type='text'>Debugging SIP Communicator Tests</title><content type='html'>In order to debug SIP Communicator tests we have to define a &lt;a href="http://www.sip-communicator.org/index.php/Documentation/ConfigureEclipseNew"&gt;similar run configuration as the one we use to debug SIP Communicator (non-tests)&lt;/a&gt;, only this time we need to define some more properties (as VM arguments).&lt;br /&gt;&lt;br /&gt;These properties come from the testing.properties and accounts.properties files, that SIP Communicator does not yet have the ability to read.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;-Daccounts.icq.TESTED_IMPL_ACCOUNT_ID=&lt;br /&gt;-Daccounts.icq.TESTED_IMPL_PWD=&lt;br /&gt;-Daccounts.icq.TESTING_IMPL_ACCOUNT_ID=&lt;br /&gt;-Daccounts.icq.TESTING_IMPL_PWD=&lt;br /&gt;-Daccounts.icq.CONTACT_LIST=&lt;br /&gt;-Daccounts.sip.PRESERVE_PEER_INFO=false&lt;br /&gt;-Daccounts.sip.account1.USER_ID=&lt;br /&gt;-Daccounts.sip.account1.DISPLAY_NAME=&lt;br /&gt;-Daccounts.sip.account1.PASSWORD=&lt;br /&gt;-Daccounts.sip.account1.SERVER_ADDRESS=&lt;br /&gt;-Daccounts.sip.account1.SERVER_PORT=&lt;br /&gt;-Daccounts.sip.account1.PROXY_ADDRESS=&lt;br /&gt;-Daccounts.sip.account1.PROXY_PORT=&lt;br /&gt;-Daccounts.sip.account2.USER_ID=&lt;br /&gt;-Daccounts.sip.account2.DISPLAY_NAME=&lt;br /&gt;-Daccounts.sip.account2.PASSWORD=&lt;br /&gt;-Daccounts.sip.account2.SERVER_ADDRESS=&lt;br /&gt;-Daccounts.sip.account2.SERVER_PORT=&lt;br /&gt;-Daccounts.sip.account2.PROXY_ADDRESS=&lt;br /&gt;-Daccounts.sip.account2.PROXY_PORT=&lt;br /&gt;-Daccounts.jabber.account1.USER_ID=&lt;br /&gt;-Daccounts.jabber.account1.SERVER_PORT=&lt;br /&gt;-Daccounts.jabber.account1.PASSWORD=&lt;br /&gt;-Daccounts.jabber.account1.SERVER_ADDRESS=&lt;br /&gt;-Daccounts.jabber.account2.USER_ID=&lt;br /&gt;-Daccounts.jabber.account2.PASSWORD=&lt;br /&gt;-Daccounts.jabber.account2.SERVER_ADDRESS=&lt;br /&gt;-Daccounts.jabber.account2.SERVER_PORT=&lt;br /&gt;-Daccounts.jabber.CONTACT_LIST=&lt;br /&gt;-Daccounts.reporting.JABBER_REPORT_LIST=&lt;br /&gt;-Daccounts.msn.account1.USER_ID=&lt;br /&gt;-Daccounts.msn.account1.PASSWORD=&lt;br /&gt;-Daccounts.msn.account2.USER_ID=&lt;br /&gt;-Daccounts.msn.account2.PASSWORD=&lt;br /&gt;-Daccounts.msn.CONTACT_LIST=&lt;br /&gt;-Daccounts.reporting.MSN_REPORT_LIST=&lt;br /&gt;-Daccounts.yahoo.account1.USER_ID=&lt;br /&gt;-Daccounts.yahoo.account1.PASSWORD=&lt;br /&gt;-Daccounts.yahoo.account2.USER_ID=&lt;br /&gt;-Daccounts.yahoo.account2.PASSWORD=&lt;br /&gt;-Daccounts.yahoo.CONTACT_LIST=&lt;br /&gt;-Daccounts.reporting.YAHOO_REPORT_LIST=&lt;br /&gt;-Daccounts.gibberish.account1.USER_ID=gibacc1&lt;br /&gt;-Daccounts.gibberish.account1.PASSWORD=whatever&lt;br /&gt;-Daccounts.gibberish.account2.USER_ID=gibacc2&lt;br /&gt;-Daccounts.gibberish.account2.PASSWORD=whatever2&lt;br /&gt;-Daccounts.gibberish.CONTACT_LIST=test-group.user1&lt;br /&gt;&lt;br /&gt;-Dnet.java.sip.communicator.slick.runner.TEST_LIST=JabberProtocolProviderSlick&lt;br /&gt;-Dnet.java.sip.communicator.CONFIGURATION_FILE_NAME=testing.sip-communicator.xml&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-1593311504411000790?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/1593311504411000790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/08/debugging-sip-communicator-tests.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1593311504411000790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1593311504411000790'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/08/debugging-sip-communicator-tests.html' title='Debugging SIP Communicator Tests'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-8149765921286817243</id><published>2009-08-17T01:53:00.001+02:00</published><updated>2009-08-17T01:55:11.902+02:00</updated><title type='text'>August 17 Update</title><content type='html'>Here's a summary of the project's current status.. Screenshots of the current UI can be found in the &lt;a href="http://picasaweb.google.com/Geekius.Caesar/OTRPluginUI#"&gt;OTR Plugin UI Picasa Web Album&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;1. Make the OTR plugin register an encryption button in the tool (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;) and menu (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;) bars of the chat window.&lt;br /&gt;2. The above mentioned button should indicate the status of the current chat (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;3. The above mentioned button should also contain (at least) the following options&lt;br /&gt;&lt;br /&gt;* Start an ecnrypted chat (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;* End encrypted chat (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;* Authenticate/Verify contact (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;* Auto encrypt every session with this contact (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;* Help/ What is this (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;4. Implement support for clients that do not have OTR (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;5. Add support for incoming fragmented messages (&lt;span style="color: rgb(255, 102, 0);"&gt;Pending&lt;/span&gt;, otr4j has to be extended)&lt;br /&gt;6. Configuration intertface that allows generating and displaying our own key as well as managing other people’s keys (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;a href="http://picasaweb.google.com/Geekius.Caesar/OTRPluginUI#5370713614898943698"&gt;screenshot&lt;/a&gt;)&lt;br /&gt;7. JUnit tests that run with every protocol (&lt;span style="color: rgb(255, 102, 0);"&gt;Pending&lt;/span&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-8149765921286817243?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/8149765921286817243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/08/august-17-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/8149765921286817243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/8149765921286817243'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/08/august-17-update.html' title='August 17 Update'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-3104341645053776283</id><published>2009-08-15T16:37:00.002+02:00</published><updated>2009-08-17T01:56:11.998+02:00</updated><title type='text'>August 15 Update</title><content type='html'>Here's a summary of the project's current status.. Screenshots of the current UI can be found in the &lt;a href="http://picasaweb.google.com/Geekius.Caesar/OTRPluginUI#"&gt;OTR Plugin UI Picasa Web Album&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;1. Make the OTR plugin register an encryption button in the tool (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;, see bellow) and menu (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;) bars of the chat window.&lt;br /&gt;&lt;br /&gt;Current implementation adds a button in the tool bar which is &lt;span style="font-style: italic;"&gt;dummy&lt;/span&gt; for the time being. I'm not sure what this button should do. For example it could be a toggle button (start/stop encryption) or it could bring up the whole OTR menu.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UPDATE, August 16&lt;/span&gt;: Toggle button functionality implemented.&lt;br /&gt;&lt;br /&gt;2. The above mentioned button should indicate the status of the current chat (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;3. The above mentioned button should also contain (at least) the following options&lt;br /&gt;&lt;br /&gt;* Start an ecnrypted chat (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;* End encrypted chat (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;* Authenticate/Verify contact (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;* Auto encrypt every session with this contact (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;* Help/ What is this (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;4. Implement support for clients that do not have OTR (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;5. Add support for incoming fragmented messages (&lt;span style="color: rgb(255, 102, 0);"&gt;Pending&lt;/span&gt;, otr4j has to be extended)&lt;br /&gt;6. Configuration intertface that allows generating and displaying our own key as well as managing other people’s keys (&lt;span style="color: rgb(255, 102, 0);"&gt;Pending&lt;/span&gt;)&lt;br /&gt;7. JUnit tests that run with every protocol (&lt;span style="color: rgb(255, 102, 0);"&gt;Pending&lt;/span&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-3104341645053776283?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/3104341645053776283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/08/august-15-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/3104341645053776283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/3104341645053776283'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/08/august-15-update.html' title='August 15 Update'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-6647363304407636705</id><published>2009-08-11T01:08:00.002+02:00</published><updated>2009-08-11T01:13:23.616+02:00</updated><title type='text'>Midterm milestones status</title><content type='html'>Here's a summary of the project's current status&lt;br /&gt;&lt;br /&gt;1. Make the OTR plugin register an encryption button in the tool (&lt;span style="color: rgb(255, 102, 0);"&gt;Pending&lt;/span&gt;, see bellow) and menu (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;) bars of the chat window&lt;br /&gt;&lt;br /&gt;Current implementation adds a button in the tool bar which is &lt;span style="font-style: italic;"&gt;dummy&lt;/span&gt; for the time being. I'm not sure what this button should do. For example it could be a toggle button (start/stop encryption) or it could bring up the whole OTR menu.&lt;br /&gt;&lt;br /&gt;2. The above mentioned button should indicate the status of the current chat (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;3. The above mentioned button should also contain (at least) the following options&lt;br /&gt;&lt;br /&gt;    * Start an ecnrypted chat (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;    * End encrypted chat (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;    * Authenticate/Verify contact (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;    * Auto encrypt every session with this contact (&lt;span style="color: rgb(255, 102, 0);"&gt;Pending&lt;/span&gt;. This can only be set globally in the configuration form for the time being.)&lt;br /&gt;    * Help/ What is this (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;4. Implement support for clients that do not have OTR (&lt;span style="color: rgb(0, 153, 0);"&gt;Implemented&lt;/span&gt;)&lt;br /&gt;5. Add support for incoming fragmented messages (&lt;span style="color: rgb(255, 102, 0);"&gt;Pending&lt;/span&gt;, otr4j has to be extended)&lt;br /&gt;6. Configuration intertface that allows generating and displaying our own key as well as managing other people’s keys (&lt;span style="color: rgb(255, 102, 0);"&gt;Pending&lt;/span&gt;)&lt;br /&gt;7. JUnit tests that run with every protocol (&lt;span style="color: rgb(255, 102, 0);"&gt;Pending&lt;/span&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-6647363304407636705?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/6647363304407636705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/08/midterm-milestones-status.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/6647363304407636705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/6647363304407636705'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/08/midterm-milestones-status.html' title='Midterm milestones status'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-1826494452333277023</id><published>2009-07-23T01:56:00.004+02:00</published><updated>2009-07-23T02:48:34.275+02:00</updated><title type='text'>Progress by July 23</title><content type='html'>After solving the &lt;a href="http://otr4sipcomm.blogspot.com/2009/07/dsa-signature-signverify-using.html"&gt;signature generation/verification puzzles&lt;/a&gt;, the two last first term milestones where reached.&lt;br /&gt;&lt;br /&gt;More specifically, message transformation operation sets where added earlier tonight for MSN, Yahoo! and ICQ (Jabber transformation set has been added some time ago). Now OtrTransformationLayer can hook into all of these protocols (MSN, Yahoo!, ICQ and Jabber) and provide encrypted communication!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-1826494452333277023?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/1826494452333277023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/07/progress-by-july-23.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1826494452333277023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1826494452333277023'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/07/progress-by-july-23.html' title='Progress by July 23'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-2569455298207158590</id><published>2009-07-15T14:17:00.005+02:00</published><updated>2009-07-23T02:48:48.447+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><title type='text'>DSA Signature sign/verify using JCE/BouncyCastle/libgcrypt</title><content type='html'>In my &lt;a href="http://otr4sipcomm.blogspot.com/2009/07/first-term-period-results.html"&gt;previous update&lt;/a&gt; I described various interoperability problems in the signing/verification process.&lt;br /&gt;&lt;br /&gt;- Problem 1: signing with standard JCE and verifying with BouncyCastle (and vica versa)&lt;br /&gt;&lt;br /&gt;The answer to this problem is that... &lt;span style="font-style: italic;"&gt;the BouncyCastle DSA code does not perform the SHA1 hash of the message; they expect you to do that and pass the 20 byte hash in rather than the message. The JCE code automatically does the hashing for you; you just pass it the message you want to get signed&lt;/span&gt;, as ghstark and Werner mention &lt;a href="http://forums.sun.com/thread.jspa?threadID=5396849"&gt;here&lt;/a&gt; and &lt;a href="https://sip-communicator.dev.java.net/servlets/ReadMsg?list=dev&amp;amp;msgNo=6624"&gt;here&lt;/a&gt; accordingly.&lt;br /&gt;&lt;br /&gt;- Problem 2: signing with BouncyCastle and verifying with libgcrypt (and vica versa)&lt;br /&gt;&lt;br /&gt;This problem is slightly more complicated and in order to understand what's going on I had to debug SIP Communicator/otr4j/BC &amp;amp; Pidgin/libotr/libgcrypt simultaneously. Fortunately we got to an end.&lt;br /&gt;&lt;br /&gt;The BC DSA signature algorithm implements the latest standard according to &lt;a href="http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf"&gt;FIPS-186-3&lt;/a&gt; while libgcrypt adheres to &lt;a href="http://www.mozilla.org/projects/security/pki/nss/fips1861.pdf"&gt;FIPS-186-1&lt;/a&gt;, FIPS-186-2.&lt;br /&gt;&lt;br /&gt;According to FIPS-186-3/p. DSA Signature Generation, (r,s) should be generated as follows:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Let N be the bit length of q. Let min(N, outlen) denote the minimum of the positive integers N and outlen, where outlen is the bit length of the hash function output block. The signature of a message M consists of the pair of numbers r and s that is computed according to the following equations:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;r = (g^k mod p) mod q. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;z = the leftmost min(N, outlen) bits of Hash(M).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;s = (k^-1 (z + xr)) mod q&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;while according to FIPS-186-1, FIPS-186-2&lt;br /&gt;&lt;span style="font-style: italic;"&gt;z = Hash(M)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Full topic discussion is available &lt;a href="https://sip-communicator.dev.java.net/servlets/ReadMsg?list=dev&amp;amp;msgNo=6642"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Finally, Ian Goldberg &lt;a href="http://lists.cypherpunks.ca/pipermail/otr-dev/2009-July/001022.html"&gt;in this thread&lt;/a&gt; provided a solution to this problem to pass to the signature generator (Hash(M) mod q) rather than truncating the Hash(M) value.&lt;br /&gt;&lt;br /&gt;Note that this solution will not work with standard JCE because it requires a DSA signer implementation that doesn't hash it's input...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-2569455298207158590?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/2569455298207158590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/07/dsa-signature-signverify-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/2569455298207158590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/2569455298207158590'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/07/dsa-signature-signverify-using.html' title='DSA Signature sign/verify using JCE/BouncyCastle/libgcrypt'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-8809089163367842305</id><published>2009-07-10T22:44:00.007+02:00</published><updated>2009-07-23T01:19:31.511+02:00</updated><title type='text'>First term period results</title><content type='html'>&lt;p&gt;Here I present the results from my first term period. The list is based on my &lt;a href="http://otr4sipcomm.blogspot.com/2009/05/first-term-planning.html"&gt;first term planning&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt; &lt;ul style="list-style-type: decimal; list-style-image: none; list-style-position: outside;"&gt; &lt;li&gt;&lt;span&gt;Develop a java library that handles encryption (see &lt;a href="http://otr4sipcomm.blogspot.com/2009/05/existing-implementations-jotr-is-java.html"&gt;The current state of OTR libraries in Java&lt;/a&gt;)&lt;/span&gt; &lt;ul&gt; &lt;li&gt;&lt;span&gt;Build methods to &lt;b&gt;Assemble/Dissasemble OTR Messages&lt;/b&gt; and tests to verify things work properly&lt;/span&gt; &lt;ul&gt; &lt;li&gt;OTR Query Messages&lt;/li&gt; &lt;li&gt;Tagged plaintext messages&lt;/li&gt; &lt;li&gt;OTR Error Messages (&lt;span style="color: rgb(51, 204, 0);"&gt;Completed&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;D-H Commit Message&lt;/li&gt; &lt;li&gt;D-H Key Message&lt;/li&gt; &lt;li&gt;Reveal Signature Message&lt;/li&gt; &lt;li&gt;Signature Message&lt;/li&gt; &lt;li&gt;Data Message (&lt;span style="color: rgb(51, 204, 0);"&gt;Completed&lt;/span&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;span&gt;Handle &lt;b&gt;state transitions&lt;/b&gt; for the following actions (detailed description of state transitions &lt;a href="http://www.cypherpunks.ca/otr/Protocol-v2-3.1.0.html"&gt;here&lt;/a&gt;),build &lt;b&gt;key management infrastructure&lt;/b&gt; (&lt;i&gt;NOTE: key management for the library, not SC&lt;/i&gt;) and build tests to verify things work properly&lt;/span&gt;&lt;br /&gt;&lt;span&gt;In this period functionality for &lt;b&gt;Requesting an OTR conversation&lt;/b&gt;, &lt;b&gt;Authenticated Key Exchange (AKE)&lt;/b&gt;, and &lt;b&gt;Data Exchange&lt;/b&gt; will be added.&lt;/span&gt; &lt;ul&gt; &lt;li&gt;Plaintext &lt;b&gt;message&lt;/b&gt; without the whitespace tag&lt;/li&gt; &lt;li&gt;Plaintext &lt;b&gt;message&lt;/b&gt; with the whitespace tag&lt;/li&gt; &lt;li&gt;Query &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;Error &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;D-H Commit &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;D-H Key &lt;b&gt;Message&lt;/b&gt; (&lt;span style="color: rgb(51, 204, 0);"&gt;Completed&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;Reveal Signature &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;Signature &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;Version 1 Key Exchange &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;Data &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;&lt;b&gt;User&lt;/b&gt; requests to start an OTR conversation&lt;/li&gt; &lt;li&gt;&lt;b&gt;User&lt;/b&gt; requests to end an OTR conversation&lt;/li&gt; &lt;li&gt;&lt;b&gt;User&lt;/b&gt; types a message to be sent (&lt;span style="color: rgb(51, 204, 0);"&gt;Completed&lt;/span&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Create a transformation operation set (&lt;span style="color: rgb(51, 204, 0);"&gt;Completed&lt;/span&gt;)&lt;br /&gt;&lt;/li&gt; &lt;li&gt;Implement support for the transformation set in all protocols (&lt;span style="color: rgb(255, 0, 0);"&gt;Failed&lt;/span&gt;)&lt;br /&gt;&lt;/li&gt; &lt;li&gt;Implement an OTR encryption bundle prototype/proof of concept that encrypts all conversations (&lt;span style="color:red;"&gt;Failed&lt;/span&gt;)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I have created a transformation set for jabber as an initial effort to incorporate otr4j in SIP Communicator. I've chosen jabber because it is an open standard with server implementation, such as &lt;a href="http://www.igniterealtime.org/projects/openfire/index.jsp"&gt;OpenFire&lt;/a&gt;, freely available.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I did not proceed into creating transformation sets for the rest of the protocols because there is an issue that the DSA signature (generated with standard JCE) does not verify in Pidgin/libotr, this action is taken in the &lt;a href="http://www.cypherpunks.ca/otr/Protocol-v2-3.1.0.html"&gt;OTR Protocol Draft, High Level Overview, Authenticated Key Exchange, Step 9&lt;/a&gt;. I tried to sign using BouncyCastle Lightweight API instead of the Standard JCE, but that failed too.&lt;/p&gt;&lt;p&gt;To make sure the signature I use is correct, I created a set of test cases to verify signatures created with bouncycastle using the Sun JCE provider and visa versa, but that failed too.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I posted a question about this issue today in several places (&lt;a href="http://www.coderanch.com/t/453480/Security/DSA-Signature-sign-verify-using"&gt;CodeRanch&lt;/a&gt;, &lt;a href="http://forums.sun.com/thread.jspa?threadID=5396849"&gt;Sun Forums&lt;/a&gt;, &lt;a href="https://sip-communicator.dev.java.net/servlets/ReadMsg?list=dev&amp;amp;msgNo=6617"&gt;SIP Communicator dev-list&lt;/a&gt;), but I have received no answer yet, so I need to further investigate this issue.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-8809089163367842305?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/8809089163367842305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/07/first-term-period-results.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/8809089163367842305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/8809089163367842305'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/07/first-term-period-results.html' title='First term period results'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-1778173946383216281</id><published>2009-07-05T14:05:00.007+02:00</published><updated>2009-07-08T16:35:12.274+02:00</updated><title type='text'>OSGi + BouncyCastle Round 3</title><content type='html'>In &lt;a href="http://otr4sipcomm.blogspot.com/2009/07/osgi-bouncycastle-round-2.html"&gt;OSGi + BouncyCastle Round 2&lt;/a&gt; I described the problems I was facing while trying to wire up BouncyCastle in SIP Communicator, so as to be used as alternate JCE provider. There where two important problems.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem A&lt;/span&gt; is this exception &lt;span style="font-style: italic;"&gt;[java] java.net.MalformedURLException: invalid url: reference:file:sc-bundles/protocol-msn.jar!/ (java.net.MalformedURLException: Unknown protocol: reference)&lt;/span&gt; during AES128-CTR encryption.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight: bold;"&gt;solution&lt;/span&gt; to this problem was found by &lt;a href="https://sip-communicator.dev.java.net/servlets/ReadMsg?list=dev&amp;amp;msgNo=6569"&gt;Werner Dittmann in this email&lt;/a&gt;. Briefly, I needed to install the "unlimited strength crypto policies" from Sun which are available &lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;here in the Other Downloads&lt;/a&gt; section. This is not an acceptable solution off course, so we will have to find an alternative (which is pretty obvious, drop the alternative JCE provider and use BouncyCastle Lightweight API).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem B&lt;/span&gt; is that running SIP Communicator from within Eclipse, &lt;span style="font-style: italic;"&gt;and only from within Eclipse&lt;/span&gt;, the bundle-plugin-otr fails to generate a D-H key pair using BouncyCastle as alternate provider with &lt;span style="font-style: italic;"&gt;class "org.bouncycastle.crypto.CipherParameters"'s signer information does not match signer information of other classes in the same package&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://osdir.com/ml/encryption.bouncy-castle.devel/2007/msg00157.html"&gt;This email in the BouncyCastle developers mailing list&lt;/a&gt; mentions that the cause for this exception most likely  is an incorrect installation of BouncyCastle, which in my case I guess that means a class path problem.&lt;br /&gt;&lt;br /&gt;This guess makes sense, because when Eclipse launches SIP Communicator sets the classpath to whatever the buildpath is. The buildpath in my case contained both bouncycastle and zrtp4j which both export org.bouncycastle.crypto.*. Apparently there is a conflict there.&lt;br /&gt;&lt;br /&gt;In this case we could have a bouncycastle bundle that both otr4j and zrtp4j will use or remove zrtp4j from the classpath (we could also update the "&lt;a href="http://www.sip-communicator.org/index.php/Documentation/ConfigureEclipseNew"&gt;How to configure Eclipse to compile and debug SIP Communicator&lt;/a&gt;" to contain only the most required libs, like felix, in the classpath).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-1778173946383216281?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/1778173946383216281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/07/osgi-bouncycastle-round-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1778173946383216281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1778173946383216281'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/07/osgi-bouncycastle-round-3.html' title='OSGi + BouncyCastle Round 3'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-7010256438716302692</id><published>2009-07-03T23:59:00.012+02:00</published><updated>2009-07-05T14:59:41.286+02:00</updated><title type='text'>OSGi + BouncyCastle, Round 2</title><content type='html'>This is getting crazy... What I'm trying to do is wire up BouncyCastle correctly, so as to be used as alternate JCE provider by otr4j (or at least from within a sc-bundle), so the &lt;a href="https://sip-communicator.dev.java.net/source/browse/*checkout*/sip-communicator/branches/gsoc09/otr/src/net/java/sip/communicator/plugin/otr/OtrTransformLayer.java?rev=5496"&gt;OtrTransformLayer&lt;/a&gt; can work properly..&lt;br /&gt;&lt;br /&gt;What I've tried is:&lt;br /&gt;&lt;br /&gt;A) Import every single package of BouncyCastle (I found those packages using &lt;a href="http://snipplr.com/view/16625/get-all-packages-of-java-project/"&gt;this snippet&lt;/a&gt;) in org.osgi.framework.system.packages.extra &lt;span style="font-weight: bold;"&gt;+ any other packages required&lt;/span&gt; (discover them through ClassDefNotFound exceptions + &lt;a href="http://snipplr.com/view/16602/get-all-imports-of-java-project/"&gt;this snippet&lt;/a&gt;) in &lt;a href="https://sip-communicator.dev.java.net/source/browse/*checkout*/sip-communicator/branches/gsoc09/otr/lib/felix.client.run.properties?rev=5496"&gt;felix.client.run.properties file&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;B) Import &lt;span style="font-weight: bold;"&gt;all of those packages&lt;/span&gt; in bundle-plugin-otr in &lt;a href="https://sip-communicator.dev.java.net/source/browse/*checkout*/sip-communicator/branches/gsoc09/otr/build.xml?rev=5496"&gt;build.xml&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So with this setup...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gBYr2dci6XE/Sk6Mx2dryPI/AAAAAAAAABw/vEVCzT0rliI/s1600-h/UknownProtocolReference.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 160px;" src="http://3.bp.blogspot.com/_gBYr2dci6XE/Sk6Mx2dryPI/AAAAAAAAABw/vEVCzT0rliI/s200/UknownProtocolReference.gif" alt="" id="BLOGGER_PHOTO_ID_5354371795051596018" border="0" /&gt;&lt;/a&gt;Running SIP Communicator using "ant run" seems to be &lt;span style="font-style: italic;"&gt;partially&lt;/span&gt; working. We can generate D-H key pair using BouncyCastle as alternate provider, but I get (&lt;span style="font-weight: bold;"&gt;Problem A&lt;/span&gt;) [java] java.net.MalformedURLException: invalid url: reference:file:sc-bundles/protocol-msn.jar!/ (java.net.MalformedURLException: Unknown protocol: reference), like in &lt;a href="https://sip-communicator.dev.java.net/issues/show_bug.cgi?id=647"&gt;this SIP Communicator issue&lt;/a&gt;. So let's try to debug this problem!&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gBYr2dci6XE/Sk6NRy8P2pI/AAAAAAAAAB4/jeXyo498F2g/s1600-h/fails+to+generate+a+D-H+key+pair+using+BouncyCastle+as+alternate+provider.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 160px;" src="http://3.bp.blogspot.com/_gBYr2dci6XE/Sk6NRy8P2pI/AAAAAAAAAB4/jeXyo498F2g/s200/fails+to+generate+a+D-H+key+pair+using+BouncyCastle+as+alternate+provider.gif" alt="" id="BLOGGER_PHOTO_ID_5354372343861861010" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gBYr2dci6XE/Sk6N9ybLb_I/AAAAAAAAACI/z25WffXb4ns/s1600-h/class+org.bouncycastle.crypto.CipherParameters+signer+information+does+not+match+signer+information+of+other+classes+in+the+same+package.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 160px;" src="http://3.bp.blogspot.com/_gBYr2dci6XE/Sk6N9ybLb_I/AAAAAAAAACI/z25WffXb4ns/s200/class+org.bouncycastle.crypto.CipherParameters+signer+information+does+not+match+signer+information+of+other+classes+in+the+same+package.gif" alt="" id="BLOGGER_PHOTO_ID_5354373099637403634" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.sip-communicator.org/index.php/Documentation/ConfigureEclipseNew"&gt;Running SIP Communicator using Eclipse&lt;/a&gt;, fails to generate a D-H key pair using BouncyCastle as alternate provider (&lt;span style="font-weight: bold;"&gt;Problem B&lt;/span&gt;) with &lt;span style="font-style: italic;"&gt;class "org.bouncycastle.crypto.CipherParameters"'s signer information does not match signer information of other classes in the same package&lt;/span&gt;, so I cannot debug the above problem... So let's try to debug this problem!&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gBYr2dci6XE/Sk6NuNic3hI/AAAAAAAAACA/wSedBPth_uY/s1600-h/Unable+to+install+breakpoint+due+to+missing+line+numbers.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 160px;" src="http://1.bp.blogspot.com/_gBYr2dci6XE/Sk6NuNic3hI/AAAAAAAAACA/wSedBPth_uY/s200/Unable+to+install+breakpoint+due+to+missing+line+numbers.gif" alt="" id="BLOGGER_PHOTO_ID_5354372832037756434" border="0" /&gt;&lt;/a&gt;The BouncyCastle signed jar does not have debug information, so attaching the BouncyCastle source code and installing a breakpoint in org.bouncycastle.jce.provider.JDKKeyPairGenerator$DH constructor gives me &lt;span style="font-style: italic;"&gt;Unable to install breakpoint due to missing line numbers&lt;/span&gt; (&lt;span style="font-weight: bold;"&gt;Problem C&lt;/span&gt;), so I cannot debug the above problem, and this problem can only be resolved if we recompile the BouncyCastle lib, and it won't be a signed jar anymore.&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;br /&gt;To the bottom line, even if I didn't care about the first problem, the most important problem is that I cannot debug properly (Problem B). To the very bottom line, this probably means refactoring otr4j so as to use the BouncyCastle lightweight API instead of the BouncyCastle JCE provider. This would solve Problem C, and hopefully Problem B as well.&lt;br /&gt;&lt;br /&gt;The setup I've used is &lt;a href="https://sip-communicator.dev.java.net/source/browse/sip-communicator/branches/gsoc09/otr/?rev=5496"&gt;r5496 of my branch&lt;/a&gt;.. I checked it in for reference.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UPDATE&lt;/span&gt;: There are solutions to these problems, and I discuss them in &lt;a href="http://otr4sipcomm.blogspot.com/2009/07/osgi-bouncycastle-round-3.html"&gt;OSGi + BouncyCastle Round 3&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-7010256438716302692?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/7010256438716302692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/07/osgi-bouncycastle-round-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/7010256438716302692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/7010256438716302692'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/07/osgi-bouncycastle-round-2.html' title='OSGi + BouncyCastle, Round 2'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_gBYr2dci6XE/Sk6Mx2dryPI/AAAAAAAAABw/vEVCzT0rliI/s72-c/UknownProtocolReference.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-9222817429675684409</id><published>2009-06-30T01:08:00.000+02:00</published><updated>2009-06-30T01:50:09.185+02:00</updated><title type='text'>OSGi Bundle of BouncyCastle / Alternate JCE Provider</title><content type='html'>&lt;a href="http://www.bouncycastle.org/"&gt;BouncyCastle&lt;/a&gt; comes in the form of signed jar, and there is a good reason for doing so. &lt;a href="http://java.sun.com/j2se/1.4.2/docs/guide/security/jce/JCERefGuide.html"&gt;Java JCE Reference Guide&lt;/a&gt; states very clearly that &lt;span style="font-weight: bold;"&gt;providers need to be signed&lt;/span&gt; by a trusted entity to be plugged into the JCE framework.&lt;br /&gt;&lt;br /&gt;So, if you try to &lt;span style="font-style: italic;"&gt;OSGi bundle&lt;/span&gt; BouncyCastle the resulting jar won't be signed anymore, and JCE won't be able to authenticate the BouncyCastle provider.&lt;br /&gt;&lt;br /&gt;This is the reason we see problems like this: &lt;a href="http://osdir.com/ml/voip.sip-communicator.devel/2008-06/msg00144.html"&gt;ZRTP integration (possible) OSGi bundle related problem&lt;/a&gt; and this: &lt;a href="http://forum.springsource.org/showthread.php?t=57564"&gt;bouncy castle exception with osgi&lt;/a&gt;. Two workarounds would be to...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;OSGi bundle BouncyCastle, but loose it's ability to be an alternate JCE provider&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add it in the org.osgi.framework.system.packages.extra list in the felix.client.run.properties and make sure it's in the class path as it is mentioned &lt;a href="https://sip-communicator.dev.java.net/servlets/ReadMsg?list=dev&amp;amp;msgNo=6535"&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;If you finally choose to OSGi bundle BouncyCastle, &lt;span style="font-weight: bold;"&gt;make sure that no manifest merging occurs, or else OSGi won't be able to start your bundle&lt;/span&gt;, it will probably fail with something like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;java.lang.NullPointerException&lt;br /&gt;at java.util.jar.Manifest$FastInputStream.fill(Unknown Source)&lt;br /&gt;at java.util.jar.Manifest$FastInputStream.readLine(Unknown Source)&lt;br /&gt;at java.util.jar.Manifest$FastInputStream.readLine(Unknown Source)&lt;br /&gt;at java.util.jar.Attributes.read(Unknown Source)&lt;br /&gt;at java.util.jar.Manifest.read(Unknown Source)&lt;br /&gt;at java.util.jar.Manifest.&lt;init&gt;(Unknown Source)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.ContentLoaderImpl.calculateContentPath(ContentLoaderImpl.java:344)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.ContentLoaderImpl.initializeContentPath(ContentLoaderImpl.java:315)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.ContentLoaderImpl.getClassPath(ContentLoaderImpl.java:90)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.ContentClassLoader.findClass(ContentClassLoader.java:154)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClassFromModule(ContentClassLoader.java:94)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.ContentLoaderImpl.getClass(ContentLoaderImpl.java:166)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.R4Wire.getClass(R4Wire.java:105)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.searchImports(R4SearchPolicyCore.java:505)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClassOrResource(R4SearchPolicyCore.java:466)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4SearchPolicyCore.java:185)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.R4SearchPolicy.findClass(R4SearchPolicy.java:45)&lt;br /&gt;at org.apache.felix.moduleloader.ModuleImpl.getClass(ModuleImpl.java:216)&lt;br /&gt;at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:3468)&lt;br /&gt;at org.apache.felix.framework.Felix._startBundle(Felix.java:1649)&lt;br /&gt;at org.apache.felix.framework.Felix.startBundle(Felix.java:1578)&lt;br /&gt;at org.apache.felix.framework.Felix.setFrameworkStartLevel(Felix.java:1172)&lt;br /&gt;at org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:265)&lt;br /&gt;at java.lang.Thread.run(Unknown Source)&lt;br /&gt;java.lang.NullPointerException&lt;br /&gt;at org.apache.felix.framework.searchpolicy.ContentClassLoader.findClass(ContentClassLoader.java:154)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClassFromModule(ContentClassLoader.java:94)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.ContentLoaderImpl.getClass(ContentLoaderImpl.java:166)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.R4Wire.getClass(R4Wire.java:105)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.searchImports(R4SearchPolicyCore.java:505)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClassOrResource(R4SearchPolicyCore.java:466)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4SearchPolicyCore.java:185)&lt;br /&gt;at org.apache.felix.framework.searchpolicy.R4SearchPolicy.findClass(R4SearchPolicy.java:45)&lt;br /&gt;at org.apache.felix.moduleloader.ModuleImpl.getClass(ModuleImpl.java:216)&lt;br /&gt;at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:3468)&lt;br /&gt;at org.apache.felix.framework.Felix._startBundle(Felix.java:1649)&lt;br /&gt;at org.apache.felix.framework.Felix.startBundle(Felix.java:1578)&lt;br /&gt;at org.apache.felix.framework.Felix.setFrameworkStartLevel(Felix.java:1172)&lt;br /&gt;at org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:265)&lt;br /&gt;at java.lang.Thread.run(Unknown Source)&lt;br /&gt;&lt;/init&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-9222817429675684409?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/9222817429675684409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/osgi-bundle-of-bouncycastle-alternate.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/9222817429675684409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/9222817429675684409'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/osgi-bundle-of-bouncycastle-alternate.html' title='OSGi Bundle of BouncyCastle / Alternate JCE Provider'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-2510896422505744018</id><published>2009-06-30T00:42:00.003+02:00</published><updated>2009-07-24T20:12:33.387+02:00</updated><title type='text'>Subversion, SourceGear's Diffmerge and Cygwin</title><content type='html'>A while back in my &lt;a href="http://otr4sipcomm.blogspot.com/2009/06/arsenal-selection.html"&gt;Arsenal Selection&lt;/a&gt; post I described a way to use &lt;a href="http://www.sourcegear.com/diffmerge/"&gt;SourceGear's Diffmerge&lt;/a&gt; with &lt;a href="http://www.selenic.com/mercurial/"&gt;Mercurial&lt;/a&gt;. No that I started to commit stuff to my &lt;a href="http://sip-communicator.org/"&gt;SIP Communicator&lt;/a&gt; branch, I needed to do the same with SVN (which I run under &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;It turns out to be a little trickier with &lt;a href="http://subversion.tigris.org/"&gt;SVN&lt;/a&gt; firstly because SVN is not that versatile as Mercurial and second because I use SVN under &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; which results in paths being delivered in diffmerge &lt;span style="font-style: italic;"&gt;Cygwinized&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;To enable a 3d party diff tool you need add something like this in your ~/.subversion/config file (c:\cygwin\home\your_user\.subversion\config):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;diff-cmd = diffwrapper.sh&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;With the help of Eric's post &lt;a href="http://eduncan911.com/archive/2007/07/14/living-with-subversion-part-3.aspx"&gt;Living with Subversion&lt;/a&gt; and Pete's post &lt;a href="http://goodliffe.blogspot.com/2009/04/subversion-kdiff3-and-cygwin.html"&gt;Subversion, KDiff3, and Cygwin&lt;/a&gt; I've built diffwrapper.sh to look like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;LEFT=`cygpath -d ${6}`&lt;br /&gt;RIGHT=`cygpath -d ${7}`&lt;br /&gt;&lt;br /&gt;# thanks to jtr for the sed regex&lt;br /&gt;LEFT_NAME=`echo ${3} | sed 's/.*\/\([^/]*\)/\1/'`&lt;br /&gt;RIGHT_NAME=`echo ${5} | sed 's/.*\/\([^/]*\)/\1/'` #src/net/java/sip/communicator/impl/protocol/jabber/OperationSetInstantMessageTransformJabberImpl.java (revision 0)&lt;br /&gt;&lt;br /&gt;/cygdrive/c/Program\ Files/SourceGear/Vault\ Client/sgdm.exe /title1:"$LEFT_NAME" "$LEFT" /title2:"$RIGHT_NAME" "$RIGHT"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now you need to make sure that diffwrapper.sh script is somewhere in your PATH. I've added in ~/bin, and did&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;echo export PATH="\$PATH:$HOME/bin" &gt;&gt; ~/.bashrc&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Update: Friday, 24 July, 2009&lt;br /&gt;Here's a mergewrapper.sh script&lt;br /&gt;&lt;pre&gt;#!/bin/sh&lt;br /&gt;local=`cygpath -d ${3}`&lt;br /&gt;remote=`cygpath -d ${2}`&lt;br /&gt;base=`cygpath -d ${1}`&lt;br /&gt;merged=`cygpath -d ${4}`&lt;br /&gt;/cygdrive/c/Program\ Files/SourceGear/Vault\ Client/sgdm.exe /result:"$merged" /title1:"Local" /title2:"Merged" /title3:"Remote" "$local" "$merged" "$remote"&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-2510896422505744018?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/2510896422505744018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/while-back-in-my-arsenal-selection-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/2510896422505744018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/2510896422505744018'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/while-back-in-my-arsenal-selection-post.html' title='Subversion, SourceGear&apos;s Diffmerge and Cygwin'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-6048971301041181642</id><published>2009-06-27T20:55:00.000+02:00</published><updated>2009-06-27T22:13:28.378+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yahoo pipes'/><title type='text'>Publishing your java.net SVN commits using Yahoo! Pipes</title><content type='html'>&lt;a href="http://profiles.yahoo.com/hapdaniel2000"&gt;hapdaniel&lt;/a&gt; has a nice post about &lt;a href="http://discuss.pipes.yahoo.com/Message_Boards_for_Pipes/threadview?m=mm&amp;amp;bn=pip-genDiscuss&amp;amp;tid=1870&amp;amp;mid=-1&amp;amp;tof=5&amp;amp;o=r&amp;amp;rt=2&amp;amp;frt=2&amp;amp;off=1"&gt;HTTPS, Pipes and YQL&lt;/a&gt;. Based on that post, &lt;a href="http://pipes.yahoo.com/pipes/pipe.info?_id=MDiJyktj3hGwV2v1eqAMnA"&gt;here's&lt;/a&gt; a pipe that builds an RSS feed that shows your personal SVN commits to SIP Communicator.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-6048971301041181642?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/6048971301041181642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/publishing-your-javanet-svn-commits.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/6048971301041181642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/6048971301041181642'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/publishing-your-javanet-svn-commits.html' title='Publishing your java.net SVN commits using Yahoo! Pipes'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-3716564021560526255</id><published>2009-06-27T18:31:00.005+02:00</published><updated>2009-07-24T18:12:47.513+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Working with your SVN branch - Merge trunk changes to your branch</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gBYr2dci6XE/SkZI2j0CVuI/AAAAAAAAABo/OR6yJJzQsjM/s1600-h/merge+trunk+changes.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 132px;" src="http://1.bp.blogspot.com/_gBYr2dci6XE/SkZI2j0CVuI/AAAAAAAAABo/OR6yJJzQsjM/s200/merge+trunk+changes.gif" alt="" id="BLOGGER_PHOTO_ID_5352045309340047074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now that the  &lt;a href="http://code.google.com/p/otr4j/"&gt;java otr library otr4j&lt;/a&gt; is functional, I wanted to merge any trunk changes back to my &lt;a href="http://sip-communicator.org/"&gt;SIP Communicator&lt;/a&gt; branch, prior tto getting to work with SIP Communicator. &lt;span style="font-style: italic;"&gt;I decided to post this because I always find my self googling for the answer..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;this actually involves 4 commands:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;svn update&lt;/span&gt;, you run &lt;span&gt;svn update&lt;/span&gt; to sync your working copy so  svn info will show you updated information.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;svn info&lt;/span&gt;, running &lt;span&gt;svn info&lt;/span&gt; will reveal the current HEAD revision (r2) as well as the revision of the last change of your branch (r1).&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;svn merge&lt;/span&gt;, having these two pieces of information you can run svn merge -r r1:r2 trunk_location&lt;/li&gt;&lt;li&gt;svn ci -m "Merged trunk changes r1:r2 into my branch"&lt;/li&gt;&lt;/ol&gt;Update: Friday, July 24, 2009&lt;br /&gt;&lt;br /&gt;If you have time I would recommend reading at least &lt;a href="http://svnbook.red-bean.com/en/1.5/svn.basic.in-action.html"&gt;Subversion in Action&lt;/a&gt; and &lt;a href="http://svnbook.red-bean.com/en/1.5/svn.branchmerge.html"&gt;Branching and Merging&lt;/a&gt; from the book &lt;a href="http://svnbook.red-bean.com/"&gt;Version Control with Subversion&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The procedure described above is not correct. It is simpler in &gt;= 1.5 setups and, occasionally, more complicated in &lt; 1.5 setups.&lt;br /&gt;&lt;br /&gt;MiniMax and stsp on #svn channel on &lt;a href="http://freenode.net/"&gt;Freenode&lt;/a&gt; kindly answered my questions regarding some issues I had. I have to incorporate the outcome of the discussion here but until then &lt;a href="http://colabti.de/irclogger/irclogger_log/svn?date=2009-07-24"&gt;here's the log&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-3716564021560526255?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/3716564021560526255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/working-with-your-svn-branch-merge_27.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/3716564021560526255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/3716564021560526255'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/working-with-your-svn-branch-merge_27.html' title='Working with your SVN branch - Merge trunk changes to your branch'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_gBYr2dci6XE/SkZI2j0CVuI/AAAAAAAAABo/OR6yJJzQsjM/s72-c/merge+trunk+changes.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-3048322465452720590</id><published>2009-06-26T19:09:00.000+02:00</published><updated>2009-06-27T22:18:54.051+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='otr4j'/><category scheme='http://www.blogger.com/atom/ns#' term='logging'/><title type='text'>OTR4j Authenticated Key Eexchange Log in Chainsaw V2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gBYr2dci6XE/SkUBD4qrTeI/AAAAAAAAABg/RVCGNJPqys8/s1600-h/AKE+log.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 314px;" src="http://2.bp.blogspot.com/_gBYr2dci6XE/SkUBD4qrTeI/AAAAAAAAABg/RVCGNJPqys8/s320/AKE+log.gif" alt="" id="BLOGGER_PHOTO_ID_5351684898462322146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Screen capture of &lt;a href="http://logging.apache.org/chainsaw/index.html"&gt;Chainsaw V2&lt;/a&gt; visualizing &lt;a href="http://code.google.com/p/otr4j/"&gt;otr4j&lt;/a&gt; running the &lt;a href="http://www.cypherpunks.ca/otr/Protocol-v2-3.1.0.html"&gt;Off-the-Record (OTR)&lt;/a&gt; Authenticated Key Exchange.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-3048322465452720590?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/3048322465452720590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/otr4j-authenticated-key-eexchange-log.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/3048322465452720590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/3048322465452720590'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/otr4j-authenticated-key-eexchange-log.html' title='OTR4j Authenticated Key Eexchange Log in Chainsaw V2'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gBYr2dci6XE/SkUBD4qrTeI/AAAAAAAAABg/RVCGNJPqys8/s72-c/AKE+log.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-3415594804632161262</id><published>2009-06-21T18:45:00.000+02:00</published><updated>2009-06-27T22:15:59.822+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='otr4j'/><category scheme='http://www.blogger.com/atom/ns#' term='otr'/><title type='text'>Progress by June 25</title><content type='html'>It's been a while I haven't update the blog. Well this is all but true for the &lt;a href="http://code.google.com/p/otr4j/source/list"&gt;otr4j library&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;I have been working on it during the past 14 days, and I am pretty happy to announce that with the latest changes just a few minutes ago, &lt;a href="http://otr4sipcomm.blogspot.com/2009/05/first-term-planning.html"&gt;goal "June 25"&lt;/a&gt; has been reached. That is, as of revision &lt;a href="http://code.google.com/p/otr4j/source/detail?r=068510f52fdf19f2f4e74b96038758243a3b0026"&gt;068510f52f&lt;/a&gt; otr4j can successfully run an Authenticated Key Exchange, and exchange encrypted data.&lt;br /&gt;&lt;br /&gt;Tomorrow I will write new tests and improve existing ones to make sure the implementation is fully functional.&lt;br /&gt;&lt;br /&gt;After that I will dive into SIP Communicator and will start working for goal &lt;a href="http://otr4sipcomm.blogspot.com/2009/05/first-term-planning.html"&gt;July 05&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-3415594804632161262?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/3415594804632161262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/progress-by-june-25.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/3415594804632161262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/3415594804632161262'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/progress-by-june-25.html' title='Progress by June 25'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-939598821468562877</id><published>2009-06-11T15:27:00.000+02:00</published><updated>2009-06-27T22:16:11.680+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='otr4j'/><category scheme='http://www.blogger.com/atom/ns#' term='otr'/><title type='text'>Progress by June 11</title><content type='html'>Did a relatively big code refactoring. First of, I purged some elements that where obtrusive like huge javadocs and getters/setters. Both can be added at a later development stage when the library will be relatively stable.&lt;br /&gt;&lt;br /&gt;Simplified how messages are assembled/disassembled. Now one can disassemble a message by calling the appropriate constructor, and can assemble messages by calling the &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#toString%28%29"&gt;toString()&lt;/a&gt; method of a message instance.&lt;br /&gt;&lt;br /&gt;Implemented state transition handling and message reply dispatching mechanism when receiving&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Plain text messages (with or without whitespace)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Query messages&lt;/li&gt;&lt;li&gt;Error messages&lt;/li&gt;&lt;li&gt;D-H Commit messages&lt;/li&gt;&lt;li&gt;D-H key messages&lt;/li&gt;&lt;/ul&gt;Created or adopted existing test cases, for refactored functionality (assemble/disassemble) and new functionality of handling state transitions respectively.&lt;br /&gt;&lt;br /&gt;The project now uses Mercurial. Get a local copy of the repository with this command:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;hg clone https://otr4j.googlecode.com/hg/ otr4j&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-939598821468562877?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/939598821468562877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/progress-by-june-11.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/939598821468562877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/939598821468562877'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/progress-by-june-11.html' title='Progress by June 11'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-1278076635796376856</id><published>2009-06-09T02:48:00.000+02:00</published><updated>2009-06-27T22:15:37.700+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='sourcegear vault'/><title type='text'>Arsenal selection</title><content type='html'>I feel much more productive in Eclipse, and I also find it less obtrusive so I switched back to it.&lt;br /&gt;&lt;br /&gt;A promising plugin, unfortunately not officially supported, for &lt;a href="http://www.vectrace.com/mercurialeclipse/"&gt;integrating Mercurial with Eclipse&lt;/a&gt; exists, and I installed it. IMHO the plugin is very nice and clean (I downloaded the source) BUT -as it usually happens..- I did some wrong clicks here and there and I messed up my source tree..&lt;br /&gt;&lt;br /&gt;Then (in a bright moment I guess..) I thought I'd better switch to the command line (, I am aware of &lt;a href="http://bitbucket.org/tortoisehg/stable/"&gt;TortoiseHg&lt;/a&gt;, but I want my terminal back!) where I can have full control of what I’m doing (step by step..). So there I was, back at the beginning, using Eclipse and the command line :D and as I had already lost quite some time clicking around the various windows, I got back to work.&lt;br /&gt;&lt;br /&gt;Finally (and thankfully..), I completed my changes and I wanted a tool to compare the diffs. I wanted a tool that would do folder diffing/directory diffing/folder compare/”call it what you like”, because I had done many changes and I wanted an overview picture of them.&lt;br /&gt;&lt;br /&gt;I stumbled upon &lt;a href="http://stackoverflow.com/questions/12625/best-diff-tool"&gt;this stackoverflow post&lt;/a&gt; which led me to use WinMerge, because it is free, and even better it’s open source! I had to download the setup executable to get it  to work because WinMergeU.exe depends on MFC7.1 and I could not find the the Microsoft VC++ 2003 Redistributable Package. The tool works fine, in fact it works great and I liked a lot.&lt;br /&gt;&lt;br /&gt;If anyone wants to use WinMerge add this to the Mercurial.ini:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[extensions]&lt;br /&gt;hgext.extdiff =&lt;br /&gt;[extdiff]&lt;br /&gt;cmd.wmdiff = C:\Program Files\WinMerge\WinMergeU.exe&lt;br /&gt;opts.wmdiff = /r /e /x /ub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and then run hg wmdiff&lt;br /&gt;&lt;br /&gt;But, (in yet another bright moment I guess..) I thought I’d try &lt;a href="http://www.sourcegear.com/diffmerge/"&gt;SourceGear’s DiffMerge&lt;/a&gt; which am used to it’s coloring conventions. This tool has folder diffing/directory diffing/folder compare/”call it what you like” and most importantly, it seemed to be a little faster than WinMerge.&lt;br /&gt;&lt;br /&gt;If anyone want to use Sourcegear’s DiffMerge tool add this to the Mercurial.ini:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[extensions]&lt;br /&gt;hgext.extdiff =&lt;br /&gt;[extdiff]&lt;br /&gt;cmd.sgdm = C:\Program Files\SourceGear\Vault Client\sgdm.exe&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and run then hg sgdm&lt;br /&gt;&lt;br /&gt;That’s all with my arsenal selection. If you ask me, it was a little boring to do all this stuff, but one has to do changes to his development toolset from time to time :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-1278076635796376856?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/1278076635796376856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/arsenal-selection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1278076635796376856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1278076635796376856'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/arsenal-selection.html' title='Arsenal selection'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-5372773108457982134</id><published>2009-06-07T19:20:00.001+02:00</published><updated>2009-06-07T19:36:30.559+02:00</updated><title type='text'>Have you checked out some cool features of NetBeans?</title><content type='html'>I wanted an overall picture of &lt;a href="http://code.google.com/p/otr4j/"&gt;otr4j&lt;/a&gt;, so I thought a good idea would be to create a class diagram.&lt;br /&gt;&lt;br /&gt;Initially, I checked what's the Eclipse way of doing this. It seems although there are &lt;a href="http://www.eclipse.org/modeling/mdt/?project=uml2"&gt;tools for modeling in Eclipse&lt;/a&gt;, they don't support reverse engineering source code into UML diagrams, so I thought "&lt;span style="font-style: italic;"&gt;this must be something Eclipse developers do with some 3rd party -not very expensive- application..&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;I browsed the web for a while, but found nothing standard except from &lt;a href="http://argouml.tigris.org/"&gt;ArgoUML&lt;/a&gt; maybe (one should define standard off course..). I eventually settled with NetBeans.&lt;br /&gt;&lt;br /&gt;I was aware of the fact that &lt;a href="http://www.netbeans.org/features/uml/"&gt;NetBeans has support for reverse engineering Java Applications&lt;/a&gt; but didn't consider using it from the beginning because I wanted to build up my existing Eclipse skills.&lt;br /&gt;&lt;br /&gt;The good stuff about NetBeans don't end here, it even has &lt;a href="http://wiki.netbeans.org/MercurialVersionControl"&gt;Mercurial&lt;/a&gt;&lt;a href="http://wiki.netbeans.org/MercurialVersionControl"&gt; support by default&lt;/a&gt;, which made me want to use Mercurial &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; let me be productive at the same time. Apparently I was very wrong about NetBeans..&lt;br /&gt;&lt;br /&gt;I got so excited that I just made a question in &lt;a href="http://google-code-updates.blogspot.com/2009/04/mercurial-support-for-project-hosting.html"&gt;the post where Mercurial support for Google Code has been announced&lt;/a&gt;, asking when it will go public. Now that Mercurial is working for me, I want to push my change sets!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-5372773108457982134?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/5372773108457982134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/have-you-checked-out-some-cool-features.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/5372773108457982134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/5372773108457982134'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/have-you-checked-out-some-cool-features.html' title='Have you checked out some cool features of NetBeans?'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-7154439106150212336</id><published>2009-06-04T23:20:00.000+02:00</published><updated>2009-06-27T22:17:03.406+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='otr4j'/><category scheme='http://www.blogger.com/atom/ns#' term='bouncycastle'/><category scheme='http://www.blogger.com/atom/ns#' term='otr'/><title type='text'>Progress by June 04</title><content type='html'>I think it's about time for another update on the otr4j library development progress..&lt;br /&gt;&lt;br /&gt;First of all, a new dependency has been added, the &lt;a href="http://www.bouncycastle.org/java.html"&gt;BouncyCastle Java Cryptography Library&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The default security provider fails to generate a D-H &lt;a href="http://java.sun.com/javase/6/docs/api/java/security/KeyPair.html"&gt;KeyPair&lt;/a&gt; with a modulus larger than 1024 bits with the following message: "&lt;span style="font-style: italic;"&gt;Prime size must be multiple of 64, and can only range from 512 to 1024&lt;/span&gt;". &lt;a href="http://www.cypherpunks.ca/otr/Protocol-v2-3.1.0.html"&gt;OTR&lt;/a&gt; uses a specific 1536 bit prime, so incorporating the BouncyCastle library was inevitable.&lt;br /&gt;&lt;br /&gt;Furthermore, I have revisited some of the methods for assembling/disassembling the various OTR messages. I mostly changed the method signatures, for example instead of passing BigIntegers and byte arrays, I now pass &lt;a href="http://java.sun.com/javase/6/docs/api/javax/crypto/interfaces/DHPublicKey.html"&gt;DHPublicKey&lt;/a&gt; or &lt;a href="http://java.sun.com/javase/6/docs/api/java/security/PublicKey.html"&gt;PublicKey&lt;/a&gt; interfaces, which seems to be a better choice for cleaner code.&lt;br /&gt;&lt;br /&gt;I have also made progress on handling state transitions, but this area still needs a lot of work.&lt;br /&gt;&lt;br /&gt;I expect that by June 10 (next Wednesday) there will be proper code structure for state transition handling and that the library will successfully "receive" (through test cases) plain text (with or without whitespace tags), query messages, error messages, D-H commit messages and D-H key messages.&lt;br /&gt;&lt;br /&gt;Lastly, I started using Mercurial, so to run the code (the tests) you must have mercurial to import the repository. The code for this preview release is available &lt;a href="http://otr4j.googlecode.com/files/otr4j-jun04.hgexport.gz"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-7154439106150212336?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/7154439106150212336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/progress-by-june-04.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/7154439106150212336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/7154439106150212336'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/06/progress-by-june-04.html' title='Progress by June 04'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-9205999706269266402</id><published>2009-05-27T03:31:00.000+02:00</published><updated>2009-06-27T22:17:16.890+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='otr4j'/><category scheme='http://www.blogger.com/atom/ns#' term='otr'/><title type='text'>Progress by May 26</title><content type='html'>Assembling/Disassembling of &lt;span style="font-weight: bold;"&gt;all OTR messages&lt;/span&gt; is now supported. &lt;span style="font-weight: bold;"&gt;All operations are accompanied by the corresponding test units&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I have also started working in handling state transitions.. It starts to get exciting!!&lt;br /&gt;&lt;br /&gt;This is the &lt;a href="http://otr4j.googlecode.com/files/otr4j-may27.zip"&gt;direct link&lt;/a&gt; to this preview release.&lt;br /&gt;&lt;br /&gt;P.S. As I read my previous blog posts, it seems that the post length is reduced over time; I want to believe that this is because the actual code length increases..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-9205999706269266402?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/9205999706269266402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/05/progress-by-may-27.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/9205999706269266402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/9205999706269266402'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/05/progress-by-may-27.html' title='Progress by May 26'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-8092536888752418658</id><published>2009-05-20T18:24:00.000+02:00</published><updated>2009-06-27T22:17:35.478+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='otr4j'/><category scheme='http://www.blogger.com/atom/ns#' term='otr'/><title type='text'>Progress by May 20</title><content type='html'>&lt;p&gt;The library can now disassemble all message types except tagged plain text messages. Whoever is interested in the library can download it from the project home page here: &lt;a href="http://code.google.com/p/otr4j/"&gt;http://code.google.com/p/otr4j/&lt;/a&gt; or use &lt;a href="http://otr4j.googlecode.com/files/otr4j-may20.zip"&gt;this&lt;/a&gt; direct link.&lt;/p&gt; &lt;p&gt; Unit testing and logging has been implemented for the so far functionality, so you can extract the library somewhere, run &lt;/p&gt;&lt;pre&gt;ant junit&lt;/pre&gt; and see what happens.&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-8092536888752418658?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/8092536888752418658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/05/progress-by-may-20.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/8092536888752418658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/8092536888752418658'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/05/progress-by-may-20.html' title='Progress by May 20'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-4931789457998693372</id><published>2009-05-11T14:03:00.000+02:00</published><updated>2009-05-20T13:03:24.818+02:00</updated><title type='text'>First term Planning</title><content type='html'>&lt;p&gt;Here I present a first plan of the first term period. &lt;b&gt;Numbered items correspond to top level requirement items&lt;/b&gt;. Also, dates are maximum values, hopefully it won't take that long!&lt;/p&gt; &lt;ul style="list-style: decimal"&gt; &lt;li&gt;&lt;span&gt;Develop a java library that handles encryption (see &lt;a href="http://otr4sipcomm.blogspot.com/2009/05/existing-implementations-jotr-is-java.html"&gt;The current state of OTR libraries in Java&lt;/a&gt;)&lt;/span&gt; &lt;ul&gt; &lt;li&gt;&lt;span&gt;Build methods to &lt;b&gt;Assemble/Dissasemble OTR Messages&lt;/b&gt; and tests to verify things work properly&lt;/span&gt; &lt;ul&gt; &lt;li&gt;OTR Query Messages&lt;/li&gt; &lt;li&gt;Tagged plaintext messages&lt;/li&gt; &lt;li&gt;OTR Error Messages (&lt;span style="color: red"&gt;May 20&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;D-H Commit Message&lt;/li&gt; &lt;li&gt;D-H Key Message&lt;/li&gt; &lt;li&gt;Reveal Signature Message&lt;/li&gt; &lt;li&gt;Signature Message&lt;/li&gt; &lt;li&gt;Data Message (&lt;span style="color: red"&gt;May 25&lt;/span&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;span&gt;Handle &lt;b&gt;state transitions&lt;/b&gt; for the following actions (detailed description of state transitions &lt;a href="http://www.cypherpunks.ca/otr/Protocol-v2-3.1.0.html"&gt;here&lt;/a&gt;),build &lt;b&gt;key management infrastructure&lt;/b&gt; (&lt;i&gt;NOTE: key management for the library, not SC&lt;/i&gt;) and build tests to verify things work properly&lt;/span&gt; &lt;br /&gt; &lt;span&gt;In this period functionality for &lt;b&gt;Requesting an OTR conversation&lt;/b&gt;, &lt;b&gt;Authenticated Key Exchange (AKE)&lt;/b&gt;, and &lt;b&gt;Data Exchange&lt;/b&gt; will be added.&lt;/span&gt; &lt;ul&gt; &lt;li&gt;Plaintext &lt;b&gt;message&lt;/b&gt; without the whitespace tag&lt;/li&gt; &lt;li&gt;Plaintext &lt;b&gt;message&lt;/b&gt; with the whitespace tag&lt;/li&gt; &lt;li&gt;Query &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;Error &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;D-H Commit &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;D-H Key &lt;b&gt;Message&lt;/b&gt; (&lt;span style="color: red"&gt;June 10&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;Reveal Signature &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;Signature &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;Version 1 Key Exchange &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;Data &lt;b&gt;Message&lt;/b&gt;&lt;/li&gt; &lt;li&gt;&lt;b&gt;User&lt;/b&gt; requests to start an OTR conversation&lt;/li&gt; &lt;li&gt;&lt;b&gt;User&lt;/b&gt; requests to end an OTR conversation&lt;/li&gt; &lt;li&gt;&lt;b&gt;User&lt;/b&gt; types a message to be sent (&lt;span style="color: red"&gt;June 25&lt;/span&gt;)&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Create a transformation operation set&lt;/li&gt; &lt;li&gt;Implement support for the transformation set in all protocols&lt;/li&gt; &lt;li&gt;Implement an OTR encryption bundle prototype/proof of concept that encrypts all conversations (&lt;span style="color: red"&gt;July 05&lt;/span&gt;)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Comments and critiques are very welcome :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-4931789457998693372?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/4931789457998693372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/05/first-term-planning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/4931789457998693372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/4931789457998693372'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/05/first-term-planning.html' title='First term Planning'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-8575930987117581885</id><published>2009-05-11T12:37:00.000+02:00</published><updated>2009-06-27T22:18:04.488+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='otr4j'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='libjotr'/><category scheme='http://www.blogger.com/atom/ns#' term='otr'/><title type='text'>The current state of OTR libraries in Java</title><content type='html'>&lt;h2&gt;Existing Implementations&lt;/h2&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://sourceforge.net/projects/jotr"&gt;jOTR&lt;/a&gt; is a Java framework that provides the base functionality for OTR (Off The Record) support. It is intended to be a java version of the c-based libotr, and be completely compatible with it.&lt;/span&gt; &lt;span style="text-decoration: underline;"&gt;Sounds great but, there is no source code although the project is more than a year old.&lt;/span&gt;&lt;/p&gt; &lt;/li&gt; &lt;li&gt; &lt;p&gt;Ian Goldberg, lead developer of the OTR development team, mentions an otr library for Java (java-otr) (&lt;a href="http://lists.cypherpunks.ca/pipermail/otr-dev/2009-April/000994.html"&gt;here&lt;/a&gt;) that is in the workings. There is no source code or binaries, only a mentioning so I sent a follow up mail (&lt;a href="http://lists.cypherpunks.ca/pipermail/otr-dev/2009-April/000996.html"&gt;here&lt;/a&gt;) with no reply, so we can't rely on this.&lt;/p&gt; &lt;/li&gt; &lt;li&gt; &lt;p&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://code.google.com/p/libjotr/"&gt;libjotr&lt;/a&gt; ibjotr is a Off-The-Record library in native java. It was developed for libkara but can also be used with other applications written in java.&lt;/span&gt; &lt;span style="text-decoration: underline;"&gt;This seems to be the first and only existing implementation for OTR in Java. libjotr is working but it will be hard to use it with an other messenger than kara without modfying the API. It is also OTR v2 only. No support for Version 1. These information are confirmed by Markus, libjotr developer.&lt;/span&gt;&lt;/p&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h2&gt;OTR4j&lt;/h2&gt; &lt;p&gt;Having considered the above solutions, I plan to develop my own library (&lt;a href="http://code.google.com/p/otr4j/"&gt;otr4j&lt;/a&gt;) for integration with SipCommunicator and any other IM, as described in &lt;a href="http://otr4sipcomm.blogspot.com/2009/04/initial-commit-err-thoughts.html"&gt;my initial post&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-8575930987117581885?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/8575930987117581885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/05/existing-implementations-jotr-is-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/8575930987117581885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/8575930987117581885'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/05/existing-implementations-jotr-is-java.html' title='The current state of OTR libraries in Java'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-8658523925826283845</id><published>2009-04-30T12:41:00.000+02:00</published><updated>2009-04-30T12:45:47.396+02:00</updated><title type='text'>Create a simple plugin for SipCommunicator with an external library and debug in Eclipse</title><content type='html'>&lt;h2&gt;Setting up the library project&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Create a new java project that will host your library, this will be our foo4j lib. Make sure you create a proper project layout (folder structure) for you project, in order for the ant buildfile in step 3 to work.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Create a foo class with two dummy methods like this: &lt;pre&gt;&lt;br /&gt;package net.java.foo4j;&lt;br /&gt;&lt;br /&gt;public class Foo {&lt;br /&gt; public void helloWorld() {&lt;br /&gt;  System.out.println("Hello World!");&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public void byeWorld() {&lt;br /&gt;  System.out.println("Bye World!");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Create a build.xml (&lt;a href="http://www.blogger.com/ant.apache.org/manual/using.html"&gt;ant buildfile&lt;/a&gt;) like the one bellow to produce a foo4j.jar file and build the project.&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;project default="main" name="otr4j"&amp;gt;&lt;br /&gt; &amp;lt;property name="src.dir" value="src" /&amp;gt;&lt;br /&gt; &amp;lt;property name="build.dir" value="bin" /&amp;gt;&lt;br /&gt; &amp;lt;property name="classes.dir" value="${build.dir}/classes" /&amp;gt;&lt;br /&gt; &amp;lt;property name="jar.dir" value="${build.dir}/jar" /&amp;gt;&lt;br /&gt; &amp;lt;target name="clean"&amp;gt;&lt;br /&gt;  &amp;lt;delete dir="${build.dir}" /&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt; &amp;lt;target name="main" depends="compile, compress"&lt;br /&gt; description="Main target"&amp;gt;&lt;br /&gt;  &amp;lt;echo&amp;gt;&lt;br /&gt;          Building the .jar file.&lt;br /&gt;      &amp;lt;/echo&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt; &amp;lt;target name="compile" description="Compilation target"&amp;gt;&lt;br /&gt;  &amp;lt;mkdir dir="${classes.dir}" /&amp;gt;&lt;br /&gt;  &amp;lt;javac srcdir="${src.dir}" destdir="${classes.dir}" debug="true" /&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt; &amp;lt;target name="compress" description="Compression target"&amp;gt;&lt;br /&gt;  &amp;lt;mkdir dir="${jar.dir}" /&amp;gt;&lt;br /&gt;  &amp;lt;jar destfile="${jar.dir}/${ant.project.name}.jar"&lt;br /&gt; basedir="${classes.dir}" /&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Setting up SipCommunicator&lt;/h2&gt;&lt;p&gt;Our plugin will be build as an OSGi bundle. What helped me understand OSGi, is Clement Escoffier's paper "Developing an OSGi-like service platform for .NET", just skip all the .NET stuff.&lt;/p&gt; &lt;p&gt;In this paper you can find a high level overview of the OSGi framework. there are various sources on the web that can help you better&lt;br /&gt;understand OSGi once you get the high level picture.&lt;/p&gt; &lt;p&gt;For the purpuses of this mini-guide, our strategy will be to build an OSGi bundle, and plug it into SipCommunicator. This &lt;span style="font-style: italic;"&gt;OSGi -plugged in SipCommunicator- bundle&lt;/span&gt; will be our plugin, so I may use the term bundle and plugin interchangibly.&lt;/p&gt;&lt;ul&gt; &lt;li&gt;Edit the properties of SipCommunicator project and add foo4j project in the Java Build Path.&lt;/li&gt; &lt;li&gt;Create a class (FooActivator) that will implement the &lt;a href="http://www.osgi.org/javadoc/r4v41/org/osgi/framework/BundleActivator.html"&gt;BundleActivator&lt;/a&gt; Interface. This class will handle the starting and stopping of our plugin.&lt;pre&gt; &lt;br /&gt;package net.java.sip.communicator.plugin.foo;&lt;br /&gt;&lt;br /&gt;import org.osgi.framework.BundleActivator;&lt;br /&gt;import net.java.foo4j.Foo;&lt;br /&gt;&lt;br /&gt;public class FooActivator implements BundleActivator {&lt;br /&gt; @Override&lt;br /&gt; public void start(BundleContext arg0) throws Exception {&lt;br /&gt;  Foo foo = new Foo();&lt;br /&gt;  foo.helloWorld();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public void stop(BundleContext arg0) throws Exception {&lt;br /&gt;  Foo foo = new Foo();&lt;br /&gt;  foo.byeWorld();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Create the manifest for you bundle &lt;pre&gt;&lt;br /&gt;Bundle-Activator: net.java.sip.communicator.plugin.otr.FooActivator&lt;br /&gt;Bundle-Name: The infamous foo plugin!&lt;br /&gt;Bundle-Description: A plug-in that will help burgers accomplish their master plan to rule the world.&lt;br /&gt;Bundle-Vendor: sip-communicator.org&lt;br /&gt;Bundle-Version: 0.0.1&lt;br /&gt;System-Bundle: yes&lt;br /&gt;Export-Package: net.java.sip.communicator.plugin.foo,&lt;br /&gt;&lt;b&gt;net.java.foo4j&lt;/b&gt;,&lt;br /&gt;Import-Package: net.java.sip.communicator.service.protocol,&lt;br /&gt;net.java.sip.communicator.service.protocol.event,&lt;br /&gt;net.java.sip.communicator.util,&lt;br /&gt;org.osgi.framework&lt;br /&gt;&lt;/pre&gt; &lt;span class="note"&gt;&lt;b&gt;Pay attention&lt;/b&gt; that our bundle exports the net.java.foo4j package.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Edit SipCommunicator's build.xml and add an ant build target for our bundle &lt;pre&gt;&lt;br /&gt;&amp;lt;!-- BUNDLE-PLUGIN-OTR --&amp;gt;&lt;br /&gt;&amp;lt;target name="bundle-plugin-otr"&amp;gt;&lt;br /&gt;  &amp;lt;!-- Creates a bundle for the plugin OTR.--&amp;gt;&lt;br /&gt;  &amp;lt;jar compress="false" destfile="${bundles.dest}/otr-plugin.jar"&lt;br /&gt;      manifest="${src}/net/java/sip/communicator/plugin/otr/otr.manifest.mf"&amp;gt;&lt;br /&gt;      &amp;lt;zipfileset dir="${dest}/net/java/sip/communicator/plugin/otr"&lt;br /&gt;          prefix="net/java/sip/communicator/plugin/otr"/&amp;gt;&lt;br /&gt;   &amp;lt;zipfileset dir="&lt;b&gt;PATH_TO_FOO4j_PROJECT&lt;/b&gt;/bin/jar/foo4j.jar"&lt;br /&gt;    prefix="net/java/foo4j"/&amp;gt;&lt;br /&gt;  &amp;lt;/jar&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;span class="note"&gt;&lt;b&gt;Make sure&lt;/b&gt; that you change &lt;b&gt;PATH_TO_FOO4j_PROJECT&lt;/b&gt;&lt;br /&gt; to something meaningful.&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;We're done, now you should be able to debug SipCommunicator as it described in the official guide &lt;a href="http://www.sip-communicator.org/index.php/Documentation/ConfigureEclipseNew"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-8658523925826283845?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/8658523925826283845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/04/create-simple-plugin-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/8658523925826283845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/8658523925826283845'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/04/create-simple-plugin-for.html' title='Create a simple plugin for SipCommunicator with an external library and debug in Eclipse'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2292727873123668144.post-1899479127232065916</id><published>2009-04-23T19:19:00.000+02:00</published><updated>2009-04-23T20:23:12.591+02:00</updated><title type='text'>Initial Commit err.. Thoughts!</title><content type='html'>&lt;h4&gt;Hello World!&lt;/h4&gt;&lt;p&gt;In this post, I will try to present my initial thoughts on how will I be implementing the OTR messaging project.&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;OTR Protocol Very High Level Overview&lt;br /&gt;&lt;/h4&gt;&lt;p&gt;OTR assumes a network model which provides in-order delivery of messages, but that some messages may not get delivered at all (for example, if the user disconnects). There may be an active attacker, who is allowed to perform a Denial of Service attack, but not to learn the contents of messages.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Alice signals to Bob that she would like (using an OTR Query Message) or is willing (using a whitespace-tagged plaintext message) to use OTR to communicate. Either mechanism should convey the version(s) of OTR that Alice is willing to use.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Bob initiates the authenticated key exchange (AKE) with Alice. Version 2 of OTR uses a variant of the SIGMA protocol as its AKE.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Alice and Bob exchange Data Messages to send information to each other.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This text is taken from the OTR protocol description &lt;a href="http://www.cypherpunks.ca/otr/Protocol-v2-3.1.0.html"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;h4&gt;Implementation&lt;/h4&gt;&lt;h5&gt;Overview&lt;br /&gt;&lt;/h5&gt;&lt;p&gt;I plan to split my development efforts into two parts. The first part will be building &lt;span style="font-weight: bold;"&gt;a new&lt;/span&gt; reusable Java library for OTR (otr4j) and the second part incorporating that library in SipCommunicator.&lt;br /&gt;&lt;/p&gt;&lt;h5&gt;Java library for OTR - otr4j&lt;br /&gt;&lt;/h5&gt;&lt;p&gt;OTR4j architecture will be service driven, i.e. you have a state object, e.g. &lt;a href="http://code.google.com/p/otr4j/source/browse/trunk/src/net/java/otr4j/userstate/OtrlUserState.java"&gt;OtrlUserState&lt;/a&gt;, that you pass over to a service, e.g. &lt;a href="http://code.google.com/p/otr4j/source/browse/trunk/src/net/java/otr4j/message/OtrlMessageServiceImpl.java"&gt;MessageServiceImpl&lt;/a&gt;, with other required parameters for the service to work. I have already uploaded a skeleton of the library in Google Code &lt;a href="http://code.google.com/p/otr4j/"&gt;http://code.google.com/p/otr4j/&lt;/a&gt;. Nothing functional yet, just a bunch of interfaces that may change in the future.&lt;br /&gt;&lt;/p&gt;&lt;h5&gt;SipCommunicator Integration&lt;br /&gt;&lt;/h5&gt;&lt;p&gt;SipCommunicator is build on top of Felix, so it makes sense to integrate the otr4j via an OSGi bundle, therefore the integration should be as simple as creating an &lt;a href="http://snipplr.com/view/14330/otr-plugin-for-sipcommunicator-draft"&gt;OtrActivator&lt;/a&gt; class (I don't include it here because it would make the post too lengthy... )&lt;br /&gt;This class is only a tiny tiny tiny (...) draft of the final OtrActivator and it doesn't have any GUI hooks, it just implements the BundleActivator interface that is required for the class to be an OSGi bundle and MessageListener and ServiceListener to hook to the inbound/outbound message traffic.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;All of the above writing is “near to theory”, issues for further discussion will arise as soon as actual coding starts.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2292727873123668144-1899479127232065916?l=otr4sipcomm.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://otr4sipcomm.blogspot.com/feeds/1899479127232065916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/04/initial-commit-err-thoughts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1899479127232065916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2292727873123668144/posts/default/1899479127232065916'/><link rel='alternate' type='text/html' href='http://otr4sipcomm.blogspot.com/2009/04/initial-commit-err-thoughts.html' title='Initial Commit err.. Thoughts!'/><author><name>Geekius Caesar</name><uri>http://www.blogger.com/profile/18324134691150257618</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_gBYr2dci6XE/SjEM6exhdQI/AAAAAAAAAA4/pA2p1M3lUCo/s1600-R/738e3fa23f2c7d11653f63646e778892.png'/></author><thr:total>0</thr:total></entry></feed>
