From 39ab923224388c826e250d1a4eb2b7e6cc66c4c6 Mon Sep 17 00:00:00 2001 From: Alexander Iljin Date: Tue, 28 Apr 2020 00:40:45 +0200 Subject: [PATCH] sodium: add sodium-bin>base64 --- extra/sodium/sodium-tests.factor | 37 ++++++++++++++++++++++++++++++++ extra/sodium/sodium.factor | 10 +++++++++ 2 files changed, 47 insertions(+) diff --git a/extra/sodium/sodium-tests.factor b/extra/sodium/sodium-tests.factor index 4361d40395..fd3473769d 100644 --- a/extra/sodium/sodium-tests.factor +++ b/extra/sodium/sodium-tests.factor @@ -17,3 +17,40 @@ IN: sodium.tests [ nip crypto-sign ] [ drop crypto-sign-verify ] 3bi ] unit-test + +! https://github.com/sqrldev/sqrl-test-vectors/blob/master/vectors/enhash-vectors.txt +CONSTANT: base64-tests { + "" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "_FHmfDKg6e6rE-hV-1dGCrtbmVUnQtByMvqkCXxdfuU" + "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE" + "vhFHvj4Qdlv8VAsnTdRJ_YsdctXQpJ5Elh9aM-hI2yQ" + "__________________________________________8" + "yyHN-LfEkKdKNRkuUHWvpzYYJy3FhVJQusPGpvlGWsE" + "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU" + "bk7GPoNy_qWdAjZ-gF5GHmioZ0ZM04a8wQBvwxSQWnE" + "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo" + "TCDPMl3crNzjLnd94BiaVg0wV63oJ9TyKIu3gS33MA0" + "hA3Dw5BPbcuJQYQYRAukKBYa1u9m4pV5jtEpQ1DDtHk" + "EGisR5HKQFtLvqTcbZu7Xvl9_uySHlFaiaLxM5V5Ta0" + "3FI8xwyoFAU1eWsnAdAUh3D-SS-XiiWdiIGw7mGY2qk" + "chvqBddUlaePrIhevV1ap48P4cKR6B60i4oTnQ1BRuU" + "0jtFpgpHqvzcfSdKXJ5f8hXRAi0Ytf3K7zlXWN6dies" + "xH3LNXP0-SJnP-jtQaGXeIH3ZTK_6B-Vu_IT6wz4TjM" + "Wf5wO411DCEe53k7lPp_dh5pp06AEUCNpEXCi5KG0ro" + "iHNsJLKJ3InnB4a3D7nwzLGx-z4HXxXnnX6Ppp4fgRE" + "0g9euYTG7974KIhW6en7BP6-2S7u_9qabd1V-7SDIOU" + "-TAyGNEEkNuFceonDUF_Nz20RnlyTVpeDp92KGkCRxs" + "d1podenEZmoVmyP7gZ8XxAKW82jSt4QiX3mC4JnM_K8" + "rNZG4IAkyQAmKcoCQKOEyC34KAaU-wPA_2NY_5y7-Q4" + "8QROWCEzP0Ni2MwmlVKffsUm5MlX-pzxX03Q9D0zsYw" + "BK2JN4_78CwB3MSJjFEAwHQX-1efCOYNAvKn8-z4ALw" + "be30E76EBlTd_DW66KBUYZqYYhSr1eHhv-UMKrVHJOA" + "nrZb5PYuff38xgEP4dg6xpBzIk6XHauBFYqPD1KOu6g" + "Z_H_qwKAcqOilZTHIZKHhXLlRdWfty24UWWq-28a1wc" + "5CezCWqQX09B_MllxHQNmBE2080BADIBoMtqc5LZNfc" +} + +{ t } [ + base64-tests [ dup sodium-base64>bin sodium-bin>base64 = ] all? +] unit-test diff --git a/extra/sodium/sodium.factor b/extra/sodium/sodium.factor index 2a7db1bb15..b6df8306bd 100644 --- a/extra/sodium/sodium.factor +++ b/extra/sodium/sodium.factor @@ -115,4 +115,14 @@ ERROR: sodium-malloc-error ; sodium_base64_VARIANT_URLSAFE_NO_PADDING sodium_base642bin check0 bin bin-length size_t deref head ; +: (base64-buffer) ( bin -- len byte-array ) + length sodium_base64_VARIANT_URLSAFE_NO_PADDING sodium_base64_encoded_len + dup ; + +:: sodium-bin>base64 ( byte-array -- string ) + byte-array (base64-buffer) dup :> b64 swap + byte-array dup length sodium_base64_VARIANT_URLSAFE_NO_PADDING + sodium_bin2base64 0 = [ call-fail ] when b64 ascii decode unclip-last + CHAR: \0 = [ call-fail ] unless ; + [ sodium-init ] "sodium" add-startup-hook