377 lines
13 KiB
Factor
377 lines
13 KiB
Factor
USING: cryptlib.libcl cryptlib prettyprint kernel alien sequences libc math
|
|
tools.test io io.files continuations alien.c-types splitting generic.math ;
|
|
|
|
"=========================================================" print
|
|
"Envelope/de-envelop test..." print
|
|
"=========================================================" print
|
|
|
|
[
|
|
! envelope
|
|
CRYPT_FORMAT_CRYPTLIB [
|
|
"Hello world" set-pop-buffer
|
|
envelope-handle CRYPT_ENVINFO_DATASIZE
|
|
get-pop-buffer alien>char-string length set-attribute
|
|
envelope-handle get-pop-buffer dup alien>char-string length push-data
|
|
get-bytes-copied .
|
|
envelope-handle flush-data
|
|
envelope-handle 1024 pop-data
|
|
get-bytes-copied .
|
|
pop-buffer-string .
|
|
] with-envelope
|
|
|
|
! de-envelope
|
|
CRYPT_FORMAT_AUTO [
|
|
envelope-handle get-pop-buffer get-bytes-copied push-data
|
|
get-bytes-copied .
|
|
envelope-handle flush-data
|
|
envelope-handle get-bytes-copied pop-data
|
|
get-bytes-copied .
|
|
[ "Hello world" ] [ pop-buffer-string ] unit-test
|
|
] with-envelope
|
|
|
|
] with-cryptlib
|
|
|
|
"=========================================================" print
|
|
"Password encryption test..." print
|
|
"=========================================================" print
|
|
|
|
[
|
|
! envelope
|
|
CRYPT_FORMAT_CRYPTLIB [
|
|
envelope-handle CRYPT_ENVINFO_PASSWORD "password" set-attribute-string
|
|
"Hello world" set-pop-buffer
|
|
envelope-handle CRYPT_ENVINFO_DATASIZE
|
|
get-pop-buffer alien>char-string length set-attribute
|
|
envelope-handle get-pop-buffer dup alien>char-string length push-data
|
|
get-bytes-copied .
|
|
envelope-handle flush-data
|
|
envelope-handle 1024 pop-data
|
|
get-bytes-copied .
|
|
pop-buffer-string .
|
|
] with-envelope
|
|
|
|
! de-envelope
|
|
CRYPT_FORMAT_AUTO [
|
|
[ envelope-handle get-pop-buffer get-bytes-copied push-data ] [
|
|
dup CRYPT_ENVELOPE_RESOURCE = [
|
|
envelope-handle CRYPT_ENVINFO_PASSWORD
|
|
"password" set-attribute-string
|
|
] [
|
|
rethrow
|
|
] if
|
|
] recover drop
|
|
get-bytes-copied .
|
|
envelope-handle flush-data
|
|
envelope-handle get-bytes-copied pop-data
|
|
get-bytes-copied .
|
|
[ "Hello world" ] [ pop-buffer-string ] unit-test
|
|
] with-envelope
|
|
] with-cryptlib
|
|
|
|
"=========================================================" print
|
|
"Compression test..." print
|
|
"=========================================================" print
|
|
|
|
[
|
|
! envelope
|
|
CRYPT_FORMAT_CRYPTLIB [
|
|
envelope-handle CRYPT_ENVINFO_COMPRESSION CRYPT_UNUSED set-attribute
|
|
"Hello world" set-pop-buffer
|
|
envelope-handle CRYPT_ENVINFO_DATASIZE
|
|
get-pop-buffer alien>char-string length set-attribute
|
|
envelope-handle get-pop-buffer dup alien>char-string length push-data
|
|
get-bytes-copied .
|
|
envelope-handle flush-data
|
|
envelope-handle 1024 pop-data
|
|
get-bytes-copied .
|
|
pop-buffer-string .
|
|
] with-envelope
|
|
|
|
! de-envelope
|
|
CRYPT_FORMAT_AUTO [
|
|
envelope-handle get-pop-buffer get-bytes-copied push-data
|
|
get-bytes-copied .
|
|
envelope-handle flush-data
|
|
envelope-handle get-bytes-copied pop-data
|
|
get-bytes-copied .
|
|
[ "Hello world" ] [ pop-buffer-string ] unit-test
|
|
] with-envelope
|
|
] with-cryptlib
|
|
|
|
"=========================================================" print
|
|
"Conventional encryption test..." print
|
|
"=========================================================" print
|
|
|
|
[
|
|
! envelope
|
|
CRYPT_FORMAT_CRYPTLIB [
|
|
CRYPT_ALGO_IDEA [
|
|
context-handle CRYPT_CTXINFO_KEY "0123456789ABCDEF" set-attribute-string
|
|
envelope-handle CRYPT_ENVINFO_SESSIONKEY context-handle *int set-attribute
|
|
] with-context
|
|
|
|
"Hello world" set-pop-buffer
|
|
envelope-handle CRYPT_ENVINFO_DATASIZE
|
|
get-pop-buffer alien>char-string length set-attribute
|
|
envelope-handle get-pop-buffer dup alien>char-string length push-data
|
|
get-bytes-copied .
|
|
envelope-handle flush-data
|
|
envelope-handle 1024 pop-data
|
|
get-bytes-copied .
|
|
pop-buffer-string .
|
|
] with-envelope
|
|
|
|
! de-envelope
|
|
CRYPT_FORMAT_AUTO [
|
|
[ envelope-handle get-pop-buffer get-bytes-copied push-data ] [
|
|
dup CRYPT_ENVELOPE_RESOURCE = [
|
|
CRYPT_ALGO_IDEA create-context
|
|
context-handle CRYPT_CTXINFO_KEY "0123456789ABCDEF"
|
|
set-attribute-string
|
|
envelope-handle CRYPT_ENVINFO_SESSIONKEY context-handle *int
|
|
set-attribute
|
|
] [
|
|
rethrow
|
|
] if
|
|
] recover drop
|
|
|
|
get-bytes-copied .
|
|
destroy-context
|
|
envelope-handle flush-data
|
|
envelope-handle get-bytes-copied pop-data
|
|
get-bytes-copied .
|
|
[ "Hello world" ] [ pop-buffer-string ] unit-test
|
|
] with-envelope
|
|
] with-cryptlib
|
|
|
|
"=========================================================" print
|
|
"Large data size envelope/de-envelop test..." print
|
|
"=========================================================" print
|
|
|
|
[
|
|
! envelope
|
|
CRYPT_FORMAT_CRYPTLIB [
|
|
"extra/cryptlib/test/large_data.txt" resource-path
|
|
file-contents set-pop-buffer
|
|
envelope-handle CRYPT_ATTRIBUTE_BUFFERSIZE
|
|
get-pop-buffer alien>char-string length 10000 + set-attribute
|
|
envelope-handle CRYPT_ENVINFO_DATASIZE
|
|
get-pop-buffer alien>char-string length set-attribute
|
|
envelope-handle get-pop-buffer dup alien>char-string length push-data
|
|
get-bytes-copied .
|
|
envelope-handle flush-data
|
|
envelope-handle get-pop-buffer alien>char-string length 10000 + pop-data
|
|
get-bytes-copied .
|
|
! pop-buffer-string .
|
|
] with-envelope
|
|
|
|
! de-envelope
|
|
CRYPT_FORMAT_AUTO [
|
|
envelope-handle CRYPT_ATTRIBUTE_BUFFERSIZE
|
|
get-pop-buffer alien>char-string length 10000 + set-attribute
|
|
envelope-handle get-pop-buffer get-bytes-copied push-data
|
|
get-bytes-copied .
|
|
envelope-handle flush-data
|
|
envelope-handle get-bytes-copied pop-data
|
|
get-bytes-copied .
|
|
! pop-buffer-string .
|
|
[ "/opt/local/lib/libcl.dylib(dylib1.o):" ]
|
|
[ pop-buffer-string "\n" split first ] unit-test
|
|
[ "00000000 t __mh_dylib_header" ]
|
|
[ pop-buffer-string "\n" split last/first first ] unit-test
|
|
] with-envelope
|
|
] with-cryptlib
|
|
|
|
"=========================================================" print
|
|
"Large data size password encryption test..." print
|
|
"=========================================================" print
|
|
|
|
[
|
|
|
|
! envelope
|
|
CRYPT_FORMAT_CRYPTLIB [
|
|
envelope-handle CRYPT_ENVINFO_PASSWORD "password" set-attribute-string
|
|
"extra/cryptlib/test/large_data.txt" resource-path
|
|
file-contents set-pop-buffer
|
|
envelope-handle CRYPT_ATTRIBUTE_BUFFERSIZE
|
|
get-pop-buffer alien>char-string length 10000 + set-attribute
|
|
envelope-handle CRYPT_ENVINFO_DATASIZE
|
|
get-pop-buffer alien>char-string length set-attribute
|
|
envelope-handle get-pop-buffer dup alien>char-string length push-data
|
|
get-bytes-copied .
|
|
envelope-handle flush-data
|
|
envelope-handle get-pop-buffer alien>char-string length 10000 + pop-data
|
|
get-bytes-copied .
|
|
pop-buffer-string .
|
|
] with-envelope
|
|
|
|
! de-envelope
|
|
CRYPT_FORMAT_AUTO [
|
|
envelope-handle CRYPT_ATTRIBUTE_BUFFERSIZE 130000 set-attribute
|
|
[ envelope-handle get-pop-buffer get-bytes-copied push-data ] [
|
|
dup CRYPT_ENVELOPE_RESOURCE = [
|
|
envelope-handle CRYPT_ENVINFO_PASSWORD
|
|
"password" set-attribute-string
|
|
] [
|
|
rethrow
|
|
] if
|
|
] recover drop
|
|
|
|
get-bytes-copied .
|
|
envelope-handle flush-data
|
|
envelope-handle get-bytes-copied pop-data
|
|
get-bytes-copied .
|
|
! pop-buffer-string .
|
|
|
|
[ "/opt/local/lib/libcl.dylib(dylib1.o):" ]
|
|
[ pop-buffer-string "\n" split first ] unit-test
|
|
|
|
[ "00000000 t __mh_dylib_header" ]
|
|
[ pop-buffer-string "\n" split last/first first ] unit-test
|
|
] with-envelope
|
|
] with-cryptlib
|
|
|
|
"=========================================================" print
|
|
"Generating a key pair test..." print
|
|
"=========================================================" print
|
|
|
|
[
|
|
CRYPT_ALGO_RSA [
|
|
context-handle CRYPT_CTXINFO_LABEL "private key" set-attribute-string
|
|
|
|
! a particular key length can be set (e.g. 1536-bit/192-byte key)
|
|
context-handle CRYPT_CTXINFO_KEYSIZE 1536 8 / set-attribute
|
|
|
|
context-handle generate-key
|
|
|
|
CRYPT_KEYSET_FILE "extra/cryptlib/test/keys.p15" resource-path
|
|
CRYPT_KEYOPT_CREATE [
|
|
"password" add-private-key
|
|
] with-keyset
|
|
] with-context
|
|
] with-cryptlib
|
|
|
|
"Passed" print
|
|
|
|
"=========================================================" print
|
|
"Simple certificate creation test..." print
|
|
"=========================================================" print
|
|
|
|
[
|
|
CRYPT_ALGO_RSA [
|
|
context-handle CRYPT_CTXINFO_LABEL "private key" set-attribute-string
|
|
context-handle generate-key
|
|
CRYPT_KEYSET_FILE "extra/cryptlib/test/keys.p15" resource-path
|
|
CRYPT_KEYOPT_CREATE [
|
|
"password" add-private-key
|
|
CRYPT_CERTTYPE_CERTIFICATE [
|
|
certificate-handle CRYPT_CERTINFO_XYZZY 1 set-attribute
|
|
certificate-handle CRYPT_CERTINFO_SUBJECTPUBLICKEYINFO
|
|
context-handle *int set-attribute
|
|
certificate-handle CRYPT_CERTINFO_COMMONNAME "Dave Smith"
|
|
set-attribute-string
|
|
sign-certificate
|
|
check-certificate
|
|
add-public-key
|
|
f 0 CRYPT_CERTFORMAT_TEXT_CERTIFICATE export-certificate
|
|
get-cert-length *int dup malloc swap
|
|
CRYPT_CERTFORMAT_TEXT_CERTIFICATE export-certificate
|
|
get-cert-buffer alien>char-string print
|
|
] with-certificate
|
|
] with-keyset
|
|
] with-context
|
|
] with-cryptlib
|
|
|
|
: ssh-session ( -- )
|
|
"=========================================================" print
|
|
"SSH session test..." print
|
|
"=========================================================" print
|
|
|
|
! start client connection with:
|
|
! ssh -v localhost -p3000
|
|
"waiting for: ssh -v localhost -p3000" print flush
|
|
|
|
! Are you sure you want to continue connecting (yes/no)? yes
|
|
! ...
|
|
! <at> localhost's password: (any password will be accepted)
|
|
|
|
! If you want to run the test again you should clean the [localhost]:3000
|
|
! ssh-rsa entry in the known_hosts file, in your home directory under the .ssh
|
|
! folder, since the test generates a new RSA certificate on every run.
|
|
|
|
[
|
|
CRYPT_KEYSET_FILE "extra/cryptlib/test/keys.p15" resource-path
|
|
CRYPT_KEYOPT_READONLY [
|
|
CRYPT_KEYID_NAME "private key" "password" get-private-key
|
|
|
|
CRYPT_SESSION_SSH_SERVER [
|
|
|
|
session-handle CRYPT_SESSINFO_SERVER_NAME "localhost"
|
|
set-attribute-string
|
|
|
|
session-handle CRYPT_SESSINFO_SERVER_PORT 3000 set-attribute
|
|
|
|
session-handle CRYPT_SESSINFO_PRIVATEKEY
|
|
|
|
context-handle *int set-attribute
|
|
|
|
[ session-handle CRYPT_SESSINFO_ACTIVE 1 set-attribute ] [
|
|
dup CRYPT_ENVELOPE_RESOURCE = [
|
|
session-handle CRYPT_SESSINFO_AUTHRESPONSE 1
|
|
set-attribute
|
|
|
|
session-handle CRYPT_SESSINFO_ACTIVE 1 set-attribute
|
|
|
|
"Welcome to cryptlib, now go away.\r\n" set-pop-buffer
|
|
|
|
session-handle get-pop-buffer dup alien>char-string
|
|
length push-data
|
|
|
|
session-handle flush-data
|
|
] [
|
|
rethrow
|
|
] if
|
|
] recover drop
|
|
] with-session
|
|
] with-keyset
|
|
] with-cryptlib
|
|
|
|
"Passed" print
|
|
;
|
|
|
|
: ssl-session ( -- )
|
|
"=========================================================" print
|
|
"SSL session test..." print
|
|
"=========================================================" print
|
|
|
|
! start client connection with:
|
|
! curl -k https://localhost:3000
|
|
"waiting for: curl -k https://localhost:3000" print flush
|
|
|
|
[
|
|
CRYPT_KEYSET_FILE "extra/cryptlib/test/keys.p15" resource-path
|
|
CRYPT_KEYOPT_READONLY [
|
|
CRYPT_KEYID_NAME "private key" "password" get-private-key
|
|
|
|
CRYPT_SESSION_SSL_SERVER [
|
|
session-handle CRYPT_SESSINFO_SERVER_NAME "localhost"
|
|
set-attribute-string
|
|
session-handle CRYPT_SESSINFO_SERVER_PORT 3000 set-attribute
|
|
session-handle CRYPT_OPTION_NET_WRITETIMEOUT 10 set-attribute
|
|
session-handle CRYPT_OPTION_NET_READTIMEOUT 10 set-attribute
|
|
session-handle CRYPT_OPTION_NET_CONNECTTIMEOUT 10 set-attribute
|
|
session-handle CRYPT_SESSINFO_PRIVATEKEY
|
|
context-handle *int set-attribute
|
|
|
|
session-handle CRYPT_SESSINFO_ACTIVE 1 set-attribute
|
|
"Welcome to cryptlib, now go away.\r\n" set-pop-buffer
|
|
session-handle get-pop-buffer dup alien>char-string
|
|
length push-data
|
|
session-handle flush-data
|
|
] with-session
|
|
] with-keyset
|
|
] with-cryptlib
|
|
|
|
"Passed" print
|
|
;
|