Ben,
    theEncryptor::blowfish(unsigned char *data, int data_len, unsigned char*
key, unsigned char *ivec, int enc)

    In this function you are passing key argument as char *, i am not able
to find alice's public key in char* format, we received that in 2 buffers
and we put that in RSA struct. Which one should i use to pass in here.
Thanks.

// Harshvir


On Wed, Jul 21, 2010 at 10:07 AM, Ben Jones <b...@bhjones.com> wrote:

> Ok, well assuming you're talking about C++ which is what I'm using, then to
> create an RSA key pair you do:
>
> // alice would do this
> RSA *rsa = RSA_generate_key(bits, 65537, NULL, NULL);
>
> // alice can then get the public part of the key and send to bob
> const int max_hex_size = (bits / 4) + 1;
> long size = max_hex_size;
>     char keyBufferA[size];
>     char keyBufferB[size];
>     bzero(keyBufferA,size);
>     bzero(keyBufferB,size);
>     sprintf(keyBufferA,"%s\r\n",BN_bn2hex(rsa->n));
>     sprintf(keyBufferB,"%s\r\n",BN_bn2hex(rsa->e));
>     int n = send(sock,keyBufferA,size,0);
>     char recBuf[2];
>     n = recv(sock,recBuf,2,0);
>     n = send(sock,keyBufferB,size,0);
>     n = recv(sock,recBuf,2,0);
>
> // bob can then receive the public key, so on bob's end:
> int max_hex_size = (bits / 4) + 1;
>     char keybufA[max_hex_size];
>     bzero(keybufA,max_hex_size);
>     char keybufB[max_hex_size];
>     bzero(keybufB,max_hex_size);
>     int n = recv(sock,keybufA,max_hex_size,0);
>     n = send(sock,"OK",2,0);
>     n = recv(sock,keybufB,max_hex_size,0);
>     n = send(sock,"OK",2,0);
>     rsa = RSA_new();
>     BN_hex2bn(&rsa->n, keybufA);
>     BN_hex2bn(&rsa->e, keybufB);
>
> // bob can then generate symmetric key
> unsigned char* key;
> int n = RAND_bytes(key, bytes); // if n is 0 then system failed in having
> enough entropy to gather a strong key and should be //considered insecure
>
> // bob can then encrypt key with alice's public key, in fact here is a
> snippet of a function
> // note ivec is an intialisation vector. This is often initialized to 0
> (but doing this is very insecure, but its useful
> // to do this for testing purposes)
> void
> theEncryptor::blowfish(unsigned char *data, int data_len, unsigned char*
> key, unsigned char *ivec, int enc)
> {
>
>     //  hash the key first!
>     unsigned char obuf[20];
>     bzero(obuf,20);
>     SHA1((const unsigned char*)key, 64, obuf);
>
>     BF_KEY bfkey;
>     int keySize = 20;//strlen((char*)key);
>     BF_set_key(&bfkey, keySize, obuf);
>
>     //unsigned char ivec[16];
>     //memset(ivec, 0, 16);
>
>     unsigned char* out=(unsigned char*) malloc(data_len);
>     bzero(out,data_len);
>     int num = 0;
>
>     // enc is whether to encrypt (true) or decrypt (false)
>     BF_cfb64_encrypt(data, out, data_len, &bfkey, ivec, &num, enc);
>
>     memcpy(data, out, data_len);
>     free(out);
> }
>
> // bob is now free to send the ecnrypted key back to alice
>
> Note: you should also look at the open_ssl api. I found this very helpful.
>
> Cheers,
> Ben.
>
>
>
>
> On 21 July 2010 15:41, Harshvir Sidhu <hvssi...@gmail.com> wrote:
>
>> Ben:
>>    Yes thats what i need to do. If you can provide some example, that will
>> be great.
>>
>>     Thanks.
>>
>> // Harshvir
>>
>>
>> On Wed, Jul 21, 2010 at 9:17 AM, Ben Jones <b...@bhjones.com> wrote:
>>
>>> Well I implemented something very similar recently but using tcp rather
>>> than udp. In my case,  alice creates a public-private key pair and sends
>>> public key to bob. Bob then encrypts randomly generated symmetric key (.e.g
>>> blowish, dsa or aes etc.) with public key and sends the result to alice.
>>> Alice then decrypts with her private key. Both alice and bob have knowledge
>>> of symmetric key which can then be used for secure communication.
>>>
>>> A clear problem with this is a man-in-the-middle attack. There are
>>> functions built into the open ssl framework that allows you do create such
>>> keys manually. If that's what you need to do, I can give a more concrete (
>>> albeit probably naive) example...
>>>
>>> Cheers,
>>> Ben.
>>>
>>>
>>> On 21 July 2010 15:02, Harshvir Sidhu <hvssi...@gmail.com> wrote:
>>>
>>>> Hi All,
>>>>     I am trying to use encryption over Client/Server machines. My
>>>> requirement is that i have to use winsock UDP functions to send and receive
>>>> data. Is there some mechanism to perform key and cipher exchange in this
>>>> case, like normally SSL_Connect will do this, but in my case i cannot use
>>>> that. Is there some suggestion for this?
>>>>
>>>> // Harshvir
>>>>
>>>>
>>>
>>>
>>>
>>>
>>>
>>
>
>
>
>

Reply via email to