rethreading, to address Raul's comment, the first line in old thread was 
harmless and reassigned following it, but removed here.

part of J8 is openssl libeay on windows, and I believe its either also 
distributed or presumed on other platforms.  It includes a BN library.  As a 
start, 

I need some help with the code below. after loading (windows 64 j802), 

a =. dec2bn 1231231144 NB. looks ok. 
┌──┬───────────┬──────────┐ 
│10│_1181373152│1231231144│ 
└──┴───────────┴──────────┘ 

|. a. i. bn2dec a 

(hopefully doesn't crash) 

I don't really know what gets returned yet, but what is worrysome is that 
repeated calls return slightly different values. 

Some issues I don't know how to deal with in the code below, 

BNnum_bytes is a macro, and error 2 0 occurs if I try to call it.  Is there a 
workaround? 

BN_dec2bn (called above) actually has a pointer to pointer first argument 
(**BIGNUM).  Is there something special I have to do in the function signature, 
or when calling?  I'm pretending its just a pointer. 


BN_bn2dec has a function pointer type as its declaration, and I don't know if I 
need to do something special for it. 

the main doc landing page:
https://www.openssl.org/docs/manmaster/crypto/bn.html
the bn2... page
https://www.openssl.org/docs/manmaster/crypto/BN_bn2bin.html

require 'dll' 

sslp =: IFWIN pick ''; '/',~ jpath '~bin'  NB. with J802.  cut this line if you 
wish to point to downloaded folder 
NB. OPENSSL =: jpath '~system/ssleay32.dll ' 
NB.OPENSSL =: sslp , '\ssleay32.dll ' 
OPENSSL =: sslp , (IFIOS + (;: 'Win Linux Android Darwin') i. <UNAME_z_) pick 
'libeay32.dll '; (2 $ <'libssl.so.1.0.0 '),  (2 $ <'/usr/lib/libssl.dylib ') 
NB.OPENSSL =: sslp , (IFIOS + (;: 'Win Linux Android Darwin') i. <UNAME_z_) 
pick 'libeay32.dll '; (2 $ <'libssl.so ');  (2 $ <'libssl.0.9.8.dylib ') 

SSLE =: sslp , '\openssl' 
ssl =: 1 : '(OPENSSL , m)&cd' 

BNctxnew =: ' BN_CTX_new  *i' ssl 
BNnew =: ' BN_new  *i' ssl  NB. probably don't use... unamanaged memory 
version. 
BNmul =: ' BN_mul  + l *x *x *x *x' ssl 
NB. BIGNUM *BN_bin2bn(const unsigned char *s,int len,BIGNUM *ret) 
BN2bn =: ' BN_bin2bn *x *c l *x' ssl 
NB. int    BN_bn2bin(const BIGNUM *a, unsigned char *to) 
BN2bin =: ' BN_bn2bin l *i *c' ssl 
BN_bn2hex=: ' BN_bn2bin l *i *c' ssl NB.char * BN_bn2hex(const BIGNUM *a); 
BN_hex2bn =:  ' BN_bn2bin l *i *c' ssl  NB.(BIGNUM **a, const char *str); 
BNnum_bytes=: ' BN_num_bytes  i *i' ssl  NB. doest work as its macro? 
NB. int BN_num_bits(const BIGNUM *a) 
BN_num_bits=: ' BN_num_bits  i *i' ssl 
num_bytes =: BN_num_bits 
NB. char *BN_bn2dec(const BIGNUM *num) 
BN2dec=: ' BN_bn2dec  *c *i' ssl 
NB. int BN_dec2bn(BIGNUM **num, const char *str) 
dec2BN=: ' BN_dec2bn  x *i *c' ssl 
NB. BN_print(BIO *fp, const BIGNUM *a); 


pD =: 1!:2&2 

dec2bn=: 3 : 0 
o =. >BNnew 0{.a. 
NB. o =. 0{.a. 
NB.pD i=. dec2BN (o);(a. {~ 256 #. inv  y) 
pD i=. dec2BN (o);(": y) 
2 {. i 
) 

bn2dec=: 3 : 0 
NB.len =. BNnum_bytes y 
NB.o =. len # '0' 
pD y 
pD o =. BN2dec (, 1 { y) 
NB.pD a =.BNnum_bytes ,<o 
memr (0{::o),0,(0{::y),2 
)
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to