I've been working on an OpenSSL engine to support the SPU's.

Seems I've finally got it all glued together using the IBM multi-precision (MPM) library.

You may be interested in the results of [b][i]version 0.001 [/i][/b]

bottom line is [b] 47 * 4096bit RSA sign/sec[/b] as opposed to [b]11[/b] sign/sec without

>./apps/openssl speed rsa4096 -engine cellspumpm -elapsed -multi 15

(see [2] below for openssl build options)

code

This is with 15 Multi processes and elapsed time. The choice of 15 is random.

with SPU engine : -

sign verify sign/s verify/s

rsa 4096 bits 0.020915s 0.000546s 47.8 1832.2

'raw' OpenSSL (same build)

sign verify sign/s verify/s

rsa 4096 bits 0.091103s 0.001213s 11.0 824.7

Without the -multi option.

with SPU engine : -

sign verify sign/s verify/s

rsa 4096 bits 0.098480s 0.001725s 10.2 579.7

'raw' OpenSSL (same build)

sign verify sign/s verify/s

rsa 4096 bits 0.108516s 0.001742s 9.2 574.1

[/code]

[b][i]Note:[/i][/b]

- Results are from a 3.2 GHz Playstation 3 Cell running yellow dog linux 5.0. [1] (I'd like to try a blade cell hint hint...)

- This is [i]first cut[/i] with a basic a mod_exp(). Further optimisations maybe possible with pre-computation and different window sizes.

- There are overheads with the current DMA transfer of parameters that will be erased as I optimise the big number conversion code and introduce better double buffering techniques.

- I still have an intermittent PKCS#1 padding problems. :-( (arrraggghhhh)

big thanks to Augusto Jun Devegili for assistance.

Regards

Neil Costigan,

School of Computing,

Dublin City University,

Dublin,

IRELAND.

http://www.computing.dcu.ie/~ncostiga

1 - Linux 2.6.16-20061110.ydl.1ps3 #1 SMP Fri Nov 24 16:16:29 EST 2006 ppc64 ppc64 ppc64 GNU/Linux

2 - OpenSSL 0.9.8d 28 Sep 2006

built on: Tue Jan 9 19:08:02 GMT 2007

options:bn(64,64) md2(int) rc4(ptr,char) des(idx,risc1,16,long) aes(partial) idea(int) blowfish(idx)

compiler: ppu-gcc -DOPENSSL_USE_MPM_SPU -DOPENSSL_USE_MIRACL -DOPENSSL_USE_MIRACL_SPU -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DB_ENDIAN -DTERMIO -O3 -Wall

available timing options: TIMES TIMEB HZ=100 sysconf value

timing function used: