×

Discussion Board

Results 1 to 14 of 14
  1. #1
    Registered User
    Join Date
    Sep 2006
    Posts
    11

    Question J2ME encrypt C# decrypt

    Hi!!! (Before anything, excuse me for my English)I`m developing a application to one movile device.

    In this application I`m trying to send a string to de device to one server wich is developed with C#. I need to encrypt the string in the device and decrypt this in the server.

    I use the code that I found in this page for the device :

    http://www.java-tips.org/java-me-tip...tle-crypt.html

    I align the code for the part in C# (the server, I copy the code in the visual studio and I change the methods to C# lenguage).

    I send the string by one http connection, I receive the encrypted string in the server, buy when I decrypt it, the string that I obtain is not completely decrypted........

    I tried in a simple application in j2me to encrypt and decypt and all go ok, and in C# also.

    Is the problem in the Shipping?
    How can I resolve it?

    I`m desesperate because i`m looking a lot in Internet and nothing....

    Thanks....................

  2. #2
    Super Contributor
    Join Date
    Mar 2003
    Location
    Finland
    Posts
    9,561

    Re: J2ME encrypt C# decrypt

    Perhaps if you post both your Java code and C# code someone can tell what you're doing wrong (either when decrypting or when transferring the data).

    Without the code it is hard for anyone to know what you've done incorrectly.

  3. #3
    Registered User
    Join Date
    Sep 2006
    Posts
    11

    Unhappy Re: J2ME encrypt C# decrypt

    This is the code:

    J2ME:

    import com.sun.kvem.midp.pim.formats.Base64Encoding;
    import org.bouncycastle.crypto.*;
    import org.bouncycastle.crypto.engines.*;
    import org.bouncycastle.crypto.modes.*;
    import org.bouncycastle.crypto.params.*;

    import org.bouncycastle.util.encoders.Base64;
    import org.bouncycastle.util.encoders.Base64Encoder;
    // A simple example that uses the Bouncy Castle
    // lightweight cryptography API to perform DES
    // encryption of arbitrary data.

    public class Encryptor {

    private BufferedBlockCipher cipher;
    private KeyParameter key;

    // Initialize the cryptographic engine.
    // The key array should be at least 8 bytes long.

    public Encryptor(Byte[] keyBytes ){
    /*
    cipher = new PaddedBlockCipher(
    new CBCBlockCipher(
    new DESEngine() ) );
    */

    cipher = new PaddedBlockCipher(
    new CBCBlockCipher(
    new BlowfishEngine() ) );

    this.key = new KeyParameter(keyBytes);
    }

    // Initialize the cryptographic engine.
    // The string should be at least 8 chars long.

    /*
    public Encryptor( String key ){
    this( this.keyBytes.getBytes() );
    }
    ***/

    // Private routine that does the gritty work.

    private byte[] callCipher( byte[] data )
    throws CryptoException {
    int size =
    cipher.getOutputSize( data.length );
    byte[] result = new byte[ size ];
    int olen = cipher.processBytes( data, 0,
    data.length, result, 0 );
    olen += cipher.doFinal( result, olen );

    if( olen < size ){
    byte[] tmp = new byte[ olen ];
    System.arraycopy(
    result, 0, tmp, 0, olen );
    result = tmp;
    }

    return result;
    }

    // Encrypt arbitrary byte array, returning the
    // encrypted data in a different byte array.

    public synchronized byte[] encrypt( byte[] data )
    throws CryptoException {
    if( data == null || data.length == 0 ){
    return new byte[0];
    }

    cipher.init( true, key );
    return callCipher( data );
    }

    // Encrypts a string.

    public byte[] encryptString( String data )
    throws CryptoException {
    if( data == null || data.length() == 0 ){
    return new byte[0];
    }

    return encrypt( data.getBytes() );
    }

    // Decrypts arbitrary data.

    public synchronized byte[] decrypt( byte[] data )
    throws CryptoException {
    if( data == null || data.length == 0 ){
    return new byte[0];
    }

    cipher.init( false, key );
    return callCipher( data );
    }

    // Decrypts a string that was previously encoded
    // using encryptString.

    public String decryptString( byte[] data )
    throws CryptoException {
    if( data == null || data.length == 0 ){
    return "";
    }

    //return new String( decrypt( data ) );

    return new String (Base64.encode(data));
    }
    }

    C#

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    using Org.BouncyCastle.Crypto;
    using Org.BouncyCastle.Crypto.Engines;
    using Org.BouncyCastle.Crypto.Modes;

    using Org.BouncyCastle.Crypto.Paddings;
    using Org.BouncyCastle.Crypto.Parameters;

    using System.Runtime.CompilerServices;
    using System.Threading;

    /// <summary>
    /// Summary description for Encryptor
    /// </summary>
    ///
    public class Encryptor {

    private BufferedBlockCipher cipher;
    private KeyParameter key;

    // Initialize the cryptographic engine.
    // The key array should be at least 8 bytes long.

    public Encryptor(Byte[] keyBytes ){
    /*
    cipher = new PaddedBlockCipher(
    new CBCBlockCipher(
    new DESEngine() ) );
    */

    cipher = new PaddedBufferedBlockCipher(
    new CbcBlockCipher(
    new BlowfishEngine() ) );

    this.key = new KeyParameter(keyBytes);
    }

    // Initialize the cryptographic engine.
    // The string should be at least 8 chars long.

    /*
    public Encryptor( String key ){
    this( this.keyBytes.getBytes() );
    }
    ***/

    // Private routine that does the gritty work.

    private byte[] callCipher( byte[] data ){
    int size =
    cipher.GetOutputSize( data.Length );
    byte[] result = new byte[ size ];
    int olen = cipher.ProcessBytes( data, 0,
    data.Length, result, 0 );
    olen += cipher.DoFinal( result, olen );

    if( olen < size ){
    byte[] tmp = new byte[ olen ];
    System.Array.Copy(
    result, 0, tmp, 0, olen );
    result = tmp;
    }

    return result;
    }

    // Encrypt arbitrary byte array, returning the
    // encrypted data in a different byte array.
    [MethodImpl(MethodImplOptions.Synchronized)]
    public byte[] encrypt( byte[] data ){
    if( data == null || data.Length == 0 ){
    return new byte[0];
    }

    cipher.Init( true, key );
    return callCipher( data );
    }

    // Encrypts a string.

    public byte[] encryptString( string data ){
    if( data == null || data.Length == 0 ){
    return new byte[0];
    }

    return encrypt( System.Text.ASCIIEncoding.ASCII.GetBytes(data));
    }

    // Decrypts arbitrary data.
    [MethodImpl(MethodImplOptions.Synchronized)]
    public byte[] decrypt( byte[] data ){
    if( data == null || data.Length == 0 ){
    return new byte[0];
    }

    cipher.Init( false, key );
    return callCipher( data );
    }

    // Decrypts a string that was previously encoded
    // using encryptString.

    public string decryptString( byte[] data ){
    if( data == null || data.Length == 0 ){
    return "";
    }

    return ( System.Text.ASCIIEncoding.ASCII.GetString(data));
    }
    }

  4. #4
    Super Contributor
    Join Date
    Mar 2003
    Location
    Finland
    Posts
    9,561

    Re: J2ME encrypt C# decrypt

    Data transfer parts are missing (in case the error is in how you send the data, or how the server receives it).

    Also, does the C# encryption/decryption code work on its own on your PC (just like the J2ME code, according to you, works on its own on the phone, or at least the emulator)?

    And, without doing the data transfer programmatically, encrypt to a file, and copy the file over so that there is no chance of transfer errors (do it on the emulator on a PC and take the file directly, or if you encrypt on the phone, copy it via USB or Bluetooth), and see what happens then.

  5. #5
    Registered User
    Join Date
    Sep 2006
    Posts
    11

    Re: J2ME encrypt C# decrypt

    Thanks Petrib ....

    The communication between the movil device ande the server goes ok if I don`t use the classes to encrypt the string.

    The string is received and when I decrypt, I obtain for example:

    "???'&the message" if I have sent "this is the message"

    -If I try in my IDE of Java to encrypt and decrypt a string in a simple application, all goes ok.

    -If I try in a simple application for C# to encrypt and decrypt a string, all goes ok.

  6. #6
    Registered User
    Join Date
    Jul 2007
    Posts
    3

    Re: J2ME encrypt C# decrypt

    Strangely enough I've been having a similar problem with encoding in C# and decoding the same string in J2ME.

    It seems that the Base64 encoding algorithm in C# has some slight differences with the org.bouncycastle.util.encoders.Base64 implementation. The first four characters are always messed up on decoding.

    My solution/hack until I find a better way is to prefix my string with four characters 'i.e. XXXX' before encoding. On the J2ME side, I simply ignore the first four characters of the decoded String.

    If someone does have a more elegant way of doing this then I'd love to know!

    Mark

  7. #7
    Regular Contributor
    Join Date
    Apr 2007
    Posts
    133

    Re: J2ME encrypt C# decrypt

    I had a lot of problems programming cryptographic algorithms in Java because of the Java types; you can check Java is Unicode not ansi and the most of the algorithms you can find in the net, consider hexadecimal code in a different way than Java; example, look for one algorithm and apply it in Java; it´s difficult to make it, because you´ve to change or make your own representation, I had to make it time ago and it wasn´t easy to do, kind regards

  8. #8
    Registered User
    Join Date
    Mar 2007
    Posts
    1

    Talking Re: J2ME encrypt C# decrypt

    Quote Originally Posted by MarkAshworth View Post
    Strangely enough I've been having a similar problem with encoding in C# and decoding the same string in J2ME.

    It seems that the Base64 encoding algorithm in C# has some slight differences with the org.bouncycastle.util.encoders.Base64 implementation. The first four characters are always messed up on decoding.

    My solution/hack until I find a better way is to prefix my string with four characters 'i.e. XXXX' before encoding. On the J2ME side, I simply ignore the first four characters of the decoded String.

    If someone does have a more elegant way of doing this then I'd love to know!

    Mark


    Hi..
    I my app does the opposite . Encrypts in J2ME using DES (Bouncy castle) decrypt in C# (BouncyCastle.Crypto.dll)... I think I might have a solution for you.


    in J2ME i used

    byte[] enc1= null;
    Encryptor en = new Encryptor("avG2h4Np");
    enc1 = en.encryptString(usrname);
    enc_uname = com.sun.midp.io.Base64.encode(enc1,0,enc1.length);

    ( the BouncyCastle Base64 is troublesome, the midp one returns a string)
    (the Encryptor class is the same code given in the top by the user who started the thread)

    now in C# you can use either

    byte[] unme = Base64.Decode(enc_uname); //BouncyCastle converter
    byte[] pwd = Convert.FromBase64String(enc_pwd);// C# converter

    now user name and password gets decoded correctly using a DES decrypt.

    **I have not tried this on the real phone, still on emulator only

    (I am using the DES engine by BouncyCastle.Crypto.dll not the one provided by C#. I could not decode it via DESCryptoServiceProvider() supplied originally in C#)

    So try using BouncyCastle.Crypto.dll in C# and com.sun.midp.io.Base64.decode in J2ME. (I am guessing it might work backwards also)

    Hope this helps
    Last edited by udayaathukorala; 2008-02-04 at 16:57.

  9. #9
    Registered User
    Join Date
    Sep 2006
    Posts
    11

    Red face Re: J2ME encrypt C# decrypt

    Hi! thanks a lot to all the responses...

    Excuse me but in this time I have been very busy...

    I will try this after solution and I will write here the result!!!

  10. #10
    Registered User
    Join Date
    Sep 2006
    Posts
    11

    Re: J2ME encrypt C# decrypt

    Hi!!!

    This is the coda that I have now

    In Java
    -------------------------

    //import com.sun.kvem.midp.pim.formats.Base64Encoding;

    import org.bouncycastle.crypto.*;
    import org.bouncycastle.crypto.engines.*;
    import org.bouncycastle.crypto.modes.*;
    import org.bouncycastle.crypto.params.*;

    import org.bouncycastle.util.encoders.Base64;
    import org.bouncycastle.util.encoders.Base64Encoder;


    // A simple example that uses the Bouncy Castle
    // lightweight cryptography API to perform DES
    // encryption of arbitrary data.

    public class Encryptor {

    private BufferedBlockCipher cipher;
    private KeyParameter key;

    // Initialize the cryptographic engine.
    // The key array should be at least 8 bytes long.

    public Encryptor(String keyString ){
    /*
    cipher = new PaddedBlockCipher(
    new CBCBlockCipher(
    new DESEngine() ) );
    */

    cipher = new PaddedBlockCipher(
    new CBCBlockCipher(
    new BlowfishEngine() ) );

    this.key = new KeyParameter(keyString.getBytes());
    }

    // Initialize the cryptographic engine.
    // The string should be at least 8 chars long.

    /*
    public Encryptor( String key ){
    this( this.keyBytes.getBytes() );
    }
    ***/

    // Private routine that does the gritty work.

    private byte[] callCipher( byte[] data )
    throws CryptoException {
    int size =
    cipher.getOutputSize( data.length );
    byte[] result = new byte[ size ];
    int olen = cipher.processBytes( data, 0,
    data.length, result, 0 );
    olen += cipher.doFinal( result, olen );

    if( olen < size ){
    byte[] tmp = new byte[ olen ];
    System.arraycopy(
    result, 0, tmp, 0, olen );
    result = tmp;
    }

    return result;
    }

    // Encrypt arbitrary byte array, returning the
    // encrypted data in a different byte array.

    public synchronized byte[] encrypt( byte[] data )
    throws CryptoException {
    if( data == null || data.length == 0 ){
    return new byte[0];
    }

    cipher.init( true, key );
    return callCipher( data );
    }

    // Encrypts a string.

    public byte[] encryptString( String data )
    throws CryptoException {
    if( data == null || data.length() == 0 ){
    return new byte[0];
    }

    return encrypt( data.getBytes());
    }

    // Decrypts arbitrary data.

    public synchronized byte[] decrypt( byte[] data )
    throws CryptoException {
    if( data == null || data.length == 0 ){
    return new byte[0];
    }

    cipher.init( false, key );
    return callCipher( data );
    }

    // Decrypts a string that was previously encoded
    // using encryptString.

    public String decryptString( byte[] data )
    throws CryptoException {
    if( data == null || data.length == 0 ){
    return "";
    }

    //return new String( decrypt( data ) );

    return new String (Base64.encode(data));
    }
    }


    In C#
    --------
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    using Org.BouncyCastle.Crypto;
    using Org.BouncyCastle.Crypto.Engines;
    using Org.BouncyCastle.Crypto.Modes;

    using Org.BouncyCastle.Crypto.Paddings;
    using Org.BouncyCastle.Crypto.Parameters;

    using System.Runtime.CompilerServices;
    using System.Threading;

    /// <summary>
    /// Summary description for Encryptor
    /// </summary>
    public class Encryptor
    {
    private BufferedBlockCipher cipher;
    private KeyParameter key;

    // Initialize the cryptographic engine.
    // The key array should be at least 8 bytes long.

    public Encryptor(String keyString ){
    /*
    cipher = new PaddedBlockCipher(
    new CBCBlockCipher(
    new DESEngine() ) );
    */

    cipher = new PaddedBufferedBlockCipher(
    new CbcBlockCipher(
    new BlowfishEngine() ) );

    this.key = new KeyParameter(System.Text.ASCIIEncoding.Default.GetBytes(keyString));
    }

    // Initialize the cryptographic engine.
    // The string should be at least 8 chars long.

    /*
    public Encryptor( String key ){
    this( this.keyBytes.getBytes() );
    }
    ***/

    // Private routine that does the gritty work.

    private byte[] callCipher( byte[] data ) {
    int size = cipher.GetOutputSize(data.Length);
    byte[] result = new byte[size];
    int olen = cipher.ProcessBytes(data, 0,
    data.Length, result, 0);

    if( olen < size ){
    byte[] tmp = new byte[ olen ];
    Array.Copy(
    result, 0, tmp, 0, olen );
    result = tmp;
    }

    return result;
    }

    // Encrypt arbitrary byte array, returning the
    // encrypted data in a different byte array.
    [MethodImpl(MethodImplOptions.Synchronized)]
    public byte[] encrypt( byte[] data ){
    if( data == null || data.Length == 0 ){
    return new byte[0];
    }

    cipher.Init( true, key );
    return callCipher( data );
    }

    // Encrypts a string.

    public byte[] encryptString( String data ) {
    if( data == null || data.Length == 0 ){
    return new byte[0];
    }

    return encrypt( System.Text.ASCIIEncoding.Default.GetBytes(data) );
    }

    // Decrypts arbitrary data.
    [MethodImpl(MethodImplOptions.Synchronized)]
    public byte[] decrypt( byte[] data ) {
    if( data == null || data.Length == 0 ){
    return new byte[0];
    }

    cipher.Init( false, key );
    return callCipher( data );
    }

    // Decrypts a string that was previously encoded
    // using encryptString.

    /*
    public String decryptString( byte[] data ) {
    if( data == null || data.Length == 0 ){
    return "";
    }

    //return new String( decrypt( data ) );
    Base64Encoder en = new Base64Encoder(data);
    return new String (en.GetEncoded());
    }
    * */
    }




    The class that I use in c# is the same that in Java but I have changed some methods that I have need to use.

    I have encrypt the same string with the class in Java an in C# and the result is not the same!!!! :S. I don't know......

    Can anybody tell me the reason???

    Thanks!!!!

  11. #11
    Registered User
    Join Date
    Sep 2006
    Posts
    11

    Unhappy Re: J2ME encrypt C# decrypt

    Hi!

    I don`t have a good notice... I have insert a new method in the class. With this method, I want to encrypt any string. I think that the class encrypts correctly any string whose length is 8bytes. This is the reason of the new method, I want to divide any string in blocks of 8 bytes to be encrypted later. If the length of the string is not multiple of 8, I insert a character in the end to fill in. The method doesn`t is correct but some of the blocks to encrypt, when I try to decrypt, are not ok....

    I think that the class is not ok in all....Some strings are encrypted correctly...other no...... (( . Can anybody give me some explanation?

    Code:
    This is the code:
    
    
    package util;
    
    //import com.sun.kvem.midp.pim.formats.Base64Encoding;
    
    import java.util.Vector;
    
    import org.bouncycastle.crypto.*;
    import org.bouncycastle.crypto.engines.*;
    import org.bouncycastle.crypto.modes.*;
    import org.bouncycastle.crypto.params.*;
    
    import org.bouncycastle.util.encoders.Base64;
    import org.bouncycastle.util.encoders.Base64Encoder;
    
    //A simple example that uses the Bouncy Castle
    //lightweight cryptography API to perform DES
    //encryption of arbitrary data.
    
    public class Encryptor {
    
     private BufferedBlockCipher cipher;
     private KeyParameter        key;
    
     // Initialize the cryptographic engine.
     // The key array should be at least 8 bytes long.
    
     public Encryptor( byte[] key ){
         cipher = new PaddedBlockCipher(
                     new CBCBlockCipher(
                        new DESEngine() ) );
    
         this.key = new KeyParameter( key );
     }
    
     // Initialize the cryptographic engine.
     // The string should be at least 8 chars long.
    
     /**
     public Encryptor( String key ){
         this( key.getBytes() );
     }
     */
    
     // Private routine that does the gritty work.
    
     private byte[] callCipher( byte[] data )
                         throws CryptoException {
         int    size = 
                    cipher.getOutputSize( data.length );
         byte[] result = new byte[ size ];
         int    olen = cipher.processBytes( data, 0,
                               data.length, result, 0 );
         olen += cipher.doFinal( result, olen );
    
         if( olen < size ){
             byte[] tmp = new byte[ olen ];
             System.arraycopy( 
                              result, 0, tmp, 0, olen );
             result = tmp;
         }
    
         return result;
     }
    
     // Encrypt arbitrary byte array, returning the
     // encrypted data in a different byte array.
    
     public synchronized byte[] encrypt( byte[] data )
                   throws CryptoException {
         if( data == null || data.length == 0 ){
             return new byte[0];
         }
    
         cipher.init( true, key );
         return callCipher( data );
     }
    
     // Encrypts a string.
    
     public byte[] encryptString( String data )
                   throws CryptoException {
         if( data == null || data.length() == 0 ){
             return new byte[0];
         }
    
         try{
         return encrypt( data.getBytes() );
         }catch(Exception e){
        	 e.printStackTrace();
        	 return null;
         }
     }
    
     // Decrypts arbitrary data.
    
     public synchronized byte[] decrypt( byte[] data )
                   throws CryptoException {
         if( data == null || data.length == 0 ){
             return new byte[0];
         }
    
         cipher.init( false, key );
         return callCipher( data );
     }
    
     // Decrypts a string that was previously encoded
     // using encryptString.
    
     public String decryptString( byte[] data )
                     throws CryptoException {
         if( data == null || data.length == 0 ){
             return "";
         }
    
         return new String( decrypt( data ) );
     }
     
     public String encryptAnyString(String chain)throws Exception{
    	 
    //	CONTROL BYTES (SUBDIVISION IN 8)
         
         while (!(chain.length() % 8 == 0)){
         	
        	 chain = chain + "|";
         	
         }
         
         System.out.println("Full chain: " + chain);
         
         Vector bytesChain = new Vector();
         
         
         //division in 8 bytes blocks
         int i = 0;
         
         while (chain.length() > 0){
         	
         	String subchain = chain.substring(0, 8);
         	System.out.println("Subchain: " + subchain );
         	bytesChain.addElement(subchain);
         	i++;
         	chain = chain.substring(8, chain.length());     	
         }
         
         
         //encrypt all the 8 bytes blocks
         
         for (int j = 0; j < bytesChain.size(); j++){
         	
         	String chaneToEmcrypt = (String)bytesChain.elementAt(j);
         	bytesChain.removeElementAt(j);
         	String encryptedChain = new String(this.encryptString(chaneToEmcrypt));
         	System.out.println("encrypted chain: " +  encryptedChain);
         	bytesChain.insertElementAt( encryptedChain, j);
         	
         	System.out.println("decrypted chain: " + decryptString(encryptedChain.getBytes()));
         }
         
    
         String finalChain = new String();
         for (int j = 0; j < bytesChain.size(); j++){
         	
         	if (j > 0 ){
         		//I want to separate the differents encrypted strings with "////"
         		finalChain = finalChain + "////";  
         	}
         	finalChain = finalChain + (String)bytesChain.elementAt(j);
         }
         
         System.out.println("the final chain: " + finalChain);
         
         ///////////////////////////////////////////////////////
         
         return finalChain;
    	 
    	 
     }
    }

  12. #12
    Registered User
    Join Date
    Jan 2006
    Location
    Argentina
    Posts
    24

    Re: J2ME encrypt C# decrypt

    Hi Josual,

    I'm observing the same problems with my project. I actually was searching the net for some solution and came across this thread you started. I also have a J2ME app and C# serverside and I'm having the same kind of troubles even when using BouncyCastle on both ends.

    I can see your last post is a little bit more than 1 month ago, have you reached any conclusions yet?

    I'll be working on this stuff over the weekend, I'll let you know if I find anything that might seem helpful. Please share with us if you found anything helpful these days.

    Regards
    Mario

  13. #13
    Registered User
    Join Date
    Jan 2006
    Location
    Argentina
    Posts
    24

    Re: J2ME encrypt C# decrypt

    ok I really could not make it work as expected. The only way I could make it "work for me" is to add a 16 byte block (case the block is 128 bits) at the beginning of the chunk that is to be encrypted, plus the remainder bytes to get a chunk that is divisible by block length (in my case, divisible by 128 bits).
    That will do ok for me with my context, but I know there's something bad abt it. Gee I cannot understand how 2 implementations of the same well known algorithm (in this case bouncycastle and .NET) actually don't produce the same outputs.

  14. #14
    Registered User
    Join Date
    Aug 2008
    Posts
    30

    Re: J2ME encrypt C# decrypt

    hiii...

    a problem that baffled me too...think its a problem with byte encoding.....make sure wen u use getBytes() method, specify the encoding type for eg...getBytes("UTF-8")...this is coz two machines will decode bytes in different manner depending on the default encoding of the machine....try it out n lemme know.....

Similar Threads

  1. How can the WAP browser communicate to J2ME application?
    By hbfornies in forum Mobile Java General
    Replies: 20
    Last Post: 2007-03-02, 16:32
  2. encrypt & decrypt the name and password in series 60
    By pravesh99_sw in forum Symbian Networking & Messaging (Closed)
    Replies: 1
    Last Post: 2006-02-02, 16:32
  3. J2ME Polish Version 1.0 RC6
    By enough in forum Mobile Java General
    Replies: 1
    Last Post: 2004-07-20, 11:25
  4. TinyLine SVG Minute Toolkit: Optimizing SVG for J2ME
    By girow in forum Mobile Java Media (Graphics & Sounds)
    Replies: 0
    Last Post: 2003-05-05, 18:44
  5. TinyLine SVG Minute Toolkit for J2ME: version 1.4 released
    By girow in forum Mobile Java General
    Replies: 0
    Last Post: 2003-05-05, 16:25

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
×