]> gitweb.factorcode.org Git - factor.git/commitdiff
sodium: add sodium-bin>base64
authorAlexander Iljin <ajsoft@yandex.ru>
Mon, 27 Apr 2020 22:40:45 +0000 (00:40 +0200)
committerDoug Coleman <doug.coleman@gmail.com>
Sun, 10 May 2020 23:31:37 +0000 (18:31 -0500)
extra/sodium/sodium-tests.factor
extra/sodium/sodium.factor

index 4361d40395f17d83fc49c2d3a9087b9738aba017..fd3473769d7d0b29141460b6cd6f02a53b5c5b09 100644 (file)
@@ -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
index 2a7db1bb153216b0a17fe7f6b5ef48b531c9b3cd..b6df8306bdf61a12f8ea4d05c7a9cd102f489f9c 100644 (file)
@@ -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 <byte-array> ;
+
+:: 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