| Index: openssl/crypto/perlasm/readme
|
| diff --git a/openssl/crypto/perlasm/readme b/openssl/crypto/perlasm/readme
|
| deleted file mode 100644
|
| index f02bbee75a1bcc81764a12e0a26570dcee5918d9..0000000000000000000000000000000000000000
|
| --- a/openssl/crypto/perlasm/readme
|
| +++ /dev/null
|
| @@ -1,124 +0,0 @@
|
| -The perl scripts in this directory are my 'hack' to generate
|
| -multiple different assembler formats via the one origional script.
|
| -
|
| -The way to use this library is to start with adding the path to this directory
|
| -and then include it.
|
| -
|
| -push(@INC,"perlasm","../../perlasm");
|
| -require "x86asm.pl";
|
| -
|
| -The first thing we do is setup the file and type of assember
|
| -
|
| -&asm_init($ARGV[0],$0);
|
| -
|
| -The first argument is the 'type'. Currently
|
| -'cpp', 'sol', 'a.out', 'elf' or 'win32'.
|
| -Argument 2 is the file name.
|
| -
|
| -The reciprocal function is
|
| -&asm_finish() which should be called at the end.
|
| -
|
| -There are 2 main 'packages'. x86ms.pl, which is the microsoft assembler,
|
| -and x86unix.pl which is the unix (gas) version.
|
| -
|
| -Functions of interest are:
|
| -&external_label("des_SPtrans"); declare and external variable
|
| -&LB(reg); Low byte for a register
|
| -&HB(reg); High byte for a register
|
| -&BP(off,base,index,scale) Byte pointer addressing
|
| -&DWP(off,base,index,scale) Word pointer addressing
|
| -&stack_push(num) Basically a 'sub esp, num*4' with extra
|
| -&stack_pop(num) inverse of stack_push
|
| -&function_begin(name,extra) Start a function with pushing of
|
| - edi, esi, ebx and ebp. extra is extra win32
|
| - external info that may be required.
|
| -&function_begin_B(name,extra) Same as norma function_begin but no pushing.
|
| -&function_end(name) Call at end of function.
|
| -&function_end_A(name) Standard pop and ret, for use inside functions
|
| -&function_end_B(name) Call at end but with poping or 'ret'.
|
| -&swtmp(num) Address on stack temp word.
|
| -&wparam(num) Parameter number num, that was push
|
| - in C convention. This all works over pushes
|
| - and pops.
|
| -&comment("hello there") Put in a comment.
|
| -&label("loop") Refer to a label, normally a jmp target.
|
| -&set_label("loop") Set a label at this point.
|
| -&data_word(word) Put in a word of data.
|
| -
|
| -So how does this all hold together? Given
|
| -
|
| -int calc(int len, int *data)
|
| - {
|
| - int i,j=0;
|
| -
|
| - for (i=0; i<len; i++)
|
| - {
|
| - j+=other(data[i]);
|
| - }
|
| - }
|
| -
|
| -So a very simple version of this function could be coded as
|
| -
|
| - push(@INC,"perlasm","../../perlasm");
|
| - require "x86asm.pl";
|
| -
|
| - &asm_init($ARGV[0],"cacl.pl");
|
| -
|
| - &external_label("other");
|
| -
|
| - $tmp1= "eax";
|
| - $j= "edi";
|
| - $data= "esi";
|
| - $i= "ebp";
|
| -
|
| - &comment("a simple function");
|
| - &function_begin("calc");
|
| - &mov( $data, &wparam(1)); # data
|
| - &xor( $j, $j);
|
| - &xor( $i, $i);
|
| -
|
| - &set_label("loop");
|
| - &cmp( $i, &wparam(0));
|
| - &jge( &label("end"));
|
| -
|
| - &mov( $tmp1, &DWP(0,$data,$i,4));
|
| - &push( $tmp1);
|
| - &call( "other");
|
| - &add( $j, "eax");
|
| - &pop( $tmp1);
|
| - &inc( $i);
|
| - &jmp( &label("loop"));
|
| -
|
| - &set_label("end");
|
| - &mov( "eax", $j);
|
| -
|
| - &function_end("calc");
|
| -
|
| - &asm_finish();
|
| -
|
| -The above example is very very unoptimised but gives an idea of how
|
| -things work.
|
| -
|
| -There is also a cbc mode function generator in cbc.pl
|
| -
|
| -&cbc( $name,
|
| - $encrypt_function_name,
|
| - $decrypt_function_name,
|
| - $true_if_byte_swap_needed,
|
| - $parameter_number_for_iv,
|
| - $parameter_number_for_encrypt_flag,
|
| - $first_parameter_to_pass,
|
| - $second_parameter_to_pass,
|
| - $third_parameter_to_pass);
|
| -
|
| -So for example, given
|
| -void BF_encrypt(BF_LONG *data,BF_KEY *key);
|
| -void BF_decrypt(BF_LONG *data,BF_KEY *key);
|
| -void BF_cbc_encrypt(unsigned char *in, unsigned char *out, long length,
|
| - BF_KEY *ks, unsigned char *iv, int enc);
|
| -
|
| -&cbc("BF_cbc_encrypt","BF_encrypt","BF_encrypt",1,4,5,3,-1,-1);
|
| -
|
| -&cbc("des_ncbc_encrypt","des_encrypt","des_encrypt",0,4,5,3,5,-1);
|
| -&cbc("des_ede3_cbc_encrypt","des_encrypt3","des_decrypt3",0,6,7,3,4,5);
|
| -
|
|
|