! See http://factorcode.org/license.txt for BSD license.
USING: kernel accessors sequences sequences.private destructors math namespaces
- locals openssl openssl.libcrypto byte-arrays bit-arrays.private
+ openssl openssl.libcrypto byte-arrays bit-arrays.private
alien.c-types alien.destructors alien.data ;
IN: ecdsa
EC_KEY_new_by_curve_name dup ssl-error ec-key boa ;
: ec-key-handle ( -- handle )
- ec-key get dup handle>> [ nip ] [ already-disposed ] if* ;
+ ec-key get dup handle>> [ ] [ already-disposed ] ?if ;
DESTRUCTOR: BN_clear_free
: get-private-key ( -- bin/f )
ec-key-handle EC_KEY_get0_private_key
- dup [ dup BN_num_bits bits>bytes <byte-array> tuck BN_bn2bin drop ] when ;
+ dup [ dup BN_num_bits bits>bytes <byte-array> [ BN_bn2bin drop ] keep ] when ;
:: get-public-key ( -- bin/f )
ec-key-handle :> KEY
- KEY EC_KEY_get0_public_key dup
+ KEY EC_KEY_get0_public_key dup
[| PUB |
KEY EC_KEY_get0_group :> GROUP
GROUP EC_GROUP_get_degree bits>bytes 1 + :> LEN
:: ecdsa-sign ( DGST -- sig )
ec-key-handle :> KEY
KEY ECDSA_size dup ssl-error <byte-array> :> SIG
- "uint" <c-object> :> LEN
+ 0 uint <ref> :> LEN
0 DGST dup length SIG LEN KEY ECDSA_sign ssl-error
- LEN *uint SIG resize ;
+ LEN uint deref SIG resize ;
: ecdsa-verify ( dgst sig -- ? )
ec-key-handle [ 0 -rot [ dup length ] bi@ ] dip ECDSA_verify 0 > ;