Hi everyone!
I am writing a program that demonstrates the xtea encryption algorithm in CTR block cipher mode. I need to encrypt 64 bit blocks of the message. How do I get only 64 bit blocks of the message into a buffer? So far I have
So that the message is in hMemory. How would I get the consecutive 64 bits out of hMemory?
Thanks!
I am writing a program that demonstrates the xtea encryption algorithm in CTR block cipher mode. I need to encrypt 64 bit blocks of the message. How do I get only 64 bit blocks of the message into a buffer? So far I have
...
mov gettextlength.flags,GTL_NUMBYTES
mov gettextlength.codepage,CP_ACP
invoke SendDlgItemMessage,hWin,d0_rte_message,EM_GETTEXTLENGTHEX,addr gettextlength,0
mov txtlength,eax
invoke GlobalAlloc,GPTR,txtlength
mov hMemory,eax
invoke GetDlgItemText,hWin,d0_rte_message,hMemory,txtlength
; confusion???
invoke GlobalFree,hMemory
So that the message is in hMemory. How would I get the consecutive 64 bits out of hMemory?
Thanks!
It would seem to me that all that you need to do is take eight bytes (8bits * 8==64)that you want to encode, at the offset that you want from hMemory, and do your processing on it.
Rags
Rags
I know but how? :shock: I have a lot to learn about assembly still...
1) By working on 32-but pieces one by one
2) By using MMX/SSE to work on 64/128-bit pieces
2) By using MMX/SSE to work on 64/128-bit pieces
Silverflow,
Without writing the code for you here's an outline.
Let's say that the 64-bits (8bytes) that you want to encode start at the 8th byte of the buffer.
Get the base address that hMemory holds, add 7 to it(because zero is first byte of buffer), and
read your 8 bytes starting from that address you calculated, then do your processing on that data.
Remember that hMemory holds a "pointer" to the start address in memory, where the buffer you allocated
with GlobalAlloc resides.
Also, do your processing on the data, BEFORE you free the memory that it is in.
Just a thought, maybe you should brush up on the basics such as pointers,indexing and memory offsets, before tackling a cypher project.
Rags
Without writing the code for you here's an outline.
Let's say that the 64-bits (8bytes) that you want to encode start at the 8th byte of the buffer.
Get the base address that hMemory holds, add 7 to it(because zero is first byte of buffer), and
read your 8 bytes starting from that address you calculated, then do your processing on that data.
Remember that hMemory holds a "pointer" to the start address in memory, where the buffer you allocated
with GlobalAlloc resides.
Also, do your processing on the data, BEFORE you free the memory that it is in.
Just a thought, maybe you should brush up on the basics such as pointers,indexing and memory offsets, before tackling a cypher project.
Rags
Thanks rags. I have noticed that adding to hMemory subtracts the number of bits available from that address. After studying a few more tutorials, I still can't figure out how to read only 8 bytes from hMemory. :mad: I've tried moving the contents of hMemory into a register in hopes of truncating the data to 4 bytes, but this doens't seem to work. I figure I am only moving the pointer to hMemory around. How do you move the actual data at the address hMemory? Or would this work at all?
SilverFlow,
hMemory only holds the starting address of the block of memory that you allocated using Global Alloc, not the whole buffer.
The masm32 package has a help file called "ASM intro help".
In it is a section called "addressing and pointers". Read it. It will give you an understanding of how pointers work.
Rags
hMemory only holds the starting address of the block of memory that you allocated using Global Alloc, not the whole buffer.
The masm32 package has a help file called "ASM intro help".
In it is a section called "addressing and pointers". Read it. It will give you an understanding of how pointers work.
Rags
push hMemory
mov eax, hMemory
mov eax,
mov blockdword,eax
mov eax,hMemory
mov eax,
mov ,eax
pop hMemory
add hMemory,8
invoke SetDlgItemText,hWin,d0_rte_message,addr blockword
Works perfectly! :D We really should advertise that help file a little more! It was very helpful and I didn't even know it existed!