From 39198164cd9f78f9d0b1a44c7ba2e94bb66df017 Mon Sep 17 00:00:00 2001 From: Alec Murphy Date: Tue, 25 Mar 2025 07:32:23 -0400 Subject: [PATCH] Meta: Add files to repository --- .clang-format | 14 + .gitattributes | 2 + .gitignore | 3 + .vscode/settings.json | 10 + .vscode/tasks.json | 1 + Applets/Calendar.applet/Run.HC | 5 + Applets/ClipManager.applet/Run.HC | 32 + Applets/NetworkStatus.applet/Run.HC | 101 + .../window_icon_16x16.png | Bin 0 -> 613 bytes Applets/VolumeSlider.applet/Run.HC | 71 + .../Accessories/Calculator.app/Run.HC | 100 + .../Calculator.app/window_icon_16x16.png | Bin 0 -> 619 bytes Applications/Accessories/Icon.png | Bin 0 -> 850 bytes Applications/OS/Icon.png | Bin 0 -> 1010 bytes Applications/OS/MenuBar.app/Run.HC | 126 + Applications/OS/MenuBar.app/system_menu.png | Bin 0 -> 869 bytes Applications/OS/ShutDown.app/Icon.png | Bin 0 -> 875 bytes Applications/OS/ShutDown.app/Run.HC | 25 + Applications/OS/TaskSwitcher.app/Run.HC | 198 + Applications/OS/TempleOS.app/Run.HC | 127 + .../OS/TempleOS.app/window_icon_16x16.png | Bin 0 -> 268 bytes Applications/OS/Terminal.app/Icon.png | Bin 0 -> 689 bytes Applications/OS/Terminal.app/Run.HC | 205 + Applications/OS/Wallpaper.app/Run.HC | 29 + Applications/TestApplication.app/Run.HC | 96 + Include/Gui.HC | 53 + Media/Sounds/Beep.wav | Bin 0 -> 15404 bytes Media/Themes/Umami/BitmapFont/menu.png | Bin 0 -> 726 bytes Media/Themes/Umami/BitmapFont/monospace.png | Bin 0 -> 1371 bytes Media/Themes/Umami/BitmapFont/sans.png | Bin 0 -> 606 bytes Media/Themes/Umami/Icon/actions/add.png | Bin 0 -> 506 bytes .../Umami/Icon/actions/address-book-new.png | Bin 0 -> 1083 bytes .../Umami/Icon/actions/appointment-new.png | Bin 0 -> 1477 bytes .../Themes/Umami/Icon/actions/appointment.png | Bin 0 -> 1477 bytes Media/Themes/Umami/Icon/actions/back.png | Bin 0 -> 1135 bytes .../Umami/Icon/actions/bookmark-new.png | Bin 0 -> 1101 bytes .../Umami/Icon/actions/bookmark_add.png | Bin 0 -> 1101 bytes .../Umami/Icon/actions/bookmarks_list_add.png | Bin 0 -> 1101 bytes Media/Themes/Umami/Icon/actions/bottom.png | Bin 0 -> 1111 bytes .../Themes/Umami/Icon/actions/centrejust.png | Bin 0 -> 694 bytes .../Themes/Umami/Icon/actions/contact-new.png | Bin 0 -> 1032 bytes .../Umami/Icon/actions/document-new.png | Bin 0 -> 851 bytes .../Umami/Icon/actions/document-open.png | Bin 0 -> 1093 bytes .../Icon/actions/document-print-preview.png | Bin 0 -> 1291 bytes .../Umami/Icon/actions/document-print.png | Bin 0 -> 1030 bytes .../Icon/actions/document-properties.png | Bin 0 -> 767 bytes .../Umami/Icon/actions/document-save-as.png | Bin 0 -> 1048 bytes .../Umami/Icon/actions/document-save.png | Bin 0 -> 1109 bytes Media/Themes/Umami/Icon/actions/down.png | Bin 0 -> 1072 bytes .../Themes/Umami/Icon/actions/edit-clear.png | Bin 0 -> 1381 bytes Media/Themes/Umami/Icon/actions/edit-copy.png | Bin 0 -> 891 bytes Media/Themes/Umami/Icon/actions/edit-cut.png | Bin 0 -> 1272 bytes .../Themes/Umami/Icon/actions/edit-delete.png | Bin 0 -> 1389 bytes .../Umami/Icon/actions/edit-find-replace.png | Bin 0 -> 1244 bytes Media/Themes/Umami/Icon/actions/edit-find.png | Bin 0 -> 1254 bytes .../Themes/Umami/Icon/actions/edit-paste.png | Bin 0 -> 945 bytes Media/Themes/Umami/Icon/actions/edit-redo.png | Bin 0 -> 960 bytes .../Umami/Icon/actions/edit-select-all.png | Bin 0 -> 781 bytes Media/Themes/Umami/Icon/actions/edit-undo.png | Bin 0 -> 1161 bytes Media/Themes/Umami/Icon/actions/editclear.png | Bin 0 -> 1381 bytes Media/Themes/Umami/Icon/actions/editcopy.png | Bin 0 -> 891 bytes Media/Themes/Umami/Icon/actions/editcut.png | Bin 0 -> 1272 bytes .../Themes/Umami/Icon/actions/editdelete.png | Bin 0 -> 1389 bytes Media/Themes/Umami/Icon/actions/editpaste.png | Bin 0 -> 945 bytes Media/Themes/Umami/Icon/actions/exit.png | Bin 0 -> 1264 bytes Media/Themes/Umami/Icon/actions/filefind.png | Bin 0 -> 1254 bytes Media/Themes/Umami/Icon/actions/filenew.png | Bin 0 -> 851 bytes Media/Themes/Umami/Icon/actions/fileopen.png | Bin 0 -> 1093 bytes Media/Themes/Umami/Icon/actions/fileprint.png | Bin 0 -> 1030 bytes .../Umami/Icon/actions/filequickprint.png | Bin 0 -> 1291 bytes Media/Themes/Umami/Icon/actions/filesave.png | Bin 0 -> 1109 bytes .../Themes/Umami/Icon/actions/filesaveas.png | Bin 0 -> 1048 bytes Media/Themes/Umami/Icon/actions/find.png | Bin 0 -> 1254 bytes Media/Themes/Umami/Icon/actions/finish.png | Bin 0 -> 1106 bytes .../Themes/Umami/Icon/actions/folder-new.png | Bin 0 -> 1014 bytes .../Themes/Umami/Icon/actions/folder_new.png | Bin 0 -> 1014 bytes .../Umami/Icon/actions/format-indent-less.png | Bin 0 -> 840 bytes .../Umami/Icon/actions/format-indent-more.png | Bin 0 -> 854 bytes .../Icon/actions/format-justify-center.png | Bin 0 -> 694 bytes .../Icon/actions/format-justify-fill.png | Bin 0 -> 683 bytes .../Icon/actions/format-justify-left.png | Bin 0 -> 684 bytes .../Icon/actions/format-justify-right.png | Bin 0 -> 696 bytes .../Umami/Icon/actions/format-text-bold.png | Bin 0 -> 1109 bytes .../Umami/Icon/actions/format-text-italic.png | Bin 0 -> 952 bytes .../actions/format-text-strikethrough.png | Bin 0 -> 948 bytes .../Icon/actions/format-text-underline.png | Bin 0 -> 1038 bytes Media/Themes/Umami/Icon/actions/forward.png | Bin 0 -> 1100 bytes .../Umami/Icon/actions/gnome-lockscreen.png | Bin 0 -> 1169 bytes .../Umami/Icon/actions/gnome-logout.png | Bin 0 -> 1264 bytes .../Umami/Icon/actions/gnome-searchtool.png | Bin 0 -> 1414 bytes .../Icon/actions/gnome-session-logout.png | Bin 0 -> 1264 bytes .../Umami/Icon/actions/gnome-shutdown.png | Bin 0 -> 883 bytes .../Icon/actions/gnome-stock-mail-fwd.png | Bin 0 -> 985 bytes .../Icon/actions/gnome-stock-mail-new.png | Bin 0 -> 1102 bytes .../Icon/actions/gnome-stock-mail-rpl.png | Bin 0 -> 1181 bytes .../Icon/actions/gnome-stock-text-indent.png | Bin 0 -> 854 bytes .../actions/gnome-stock-text-unindent.png | Bin 0 -> 840 bytes Media/Themes/Umami/Icon/actions/go-bottom.png | Bin 0 -> 1111 bytes Media/Themes/Umami/Icon/actions/go-down.png | Bin 0 -> 1072 bytes Media/Themes/Umami/Icon/actions/go-first.png | Bin 0 -> 1140 bytes Media/Themes/Umami/Icon/actions/go-home.png | Bin 0 -> 1072 bytes Media/Themes/Umami/Icon/actions/go-jump.png | Bin 0 -> 1258 bytes Media/Themes/Umami/Icon/actions/go-last.png | Bin 0 -> 1106 bytes Media/Themes/Umami/Icon/actions/go-next.png | Bin 0 -> 1100 bytes .../Themes/Umami/Icon/actions/go-previous.png | Bin 0 -> 1135 bytes Media/Themes/Umami/Icon/actions/go-top.png | Bin 0 -> 1125 bytes Media/Themes/Umami/Icon/actions/go-up.png | Bin 0 -> 1063 bytes Media/Themes/Umami/Icon/actions/gohome.png | Bin 0 -> 1072 bytes Media/Themes/Umami/Icon/actions/gtk-add.png | Bin 0 -> 506 bytes Media/Themes/Umami/Icon/actions/gtk-bold.png | Bin 0 -> 1109 bytes .../Themes/Umami/Icon/actions/gtk-cancel.png | Bin 0 -> 1375 bytes Media/Themes/Umami/Icon/actions/gtk-clear.png | Bin 0 -> 1381 bytes Media/Themes/Umami/Icon/actions/gtk-copy.png | Bin 0 -> 891 bytes Media/Themes/Umami/Icon/actions/gtk-cut.png | Bin 0 -> 1272 bytes .../Themes/Umami/Icon/actions/gtk-delete.png | Bin 0 -> 1389 bytes .../Icon/actions/gtk-find-and-replace.png | Bin 0 -> 1244 bytes Media/Themes/Umami/Icon/actions/gtk-find.png | Bin 0 -> 1254 bytes .../Umami/Icon/actions/gtk-fullscreen.png | Bin 0 -> 988 bytes .../Umami/Icon/actions/gtk-go-back-ltr.png | Bin 0 -> 1135 bytes .../Umami/Icon/actions/gtk-go-back-rtl.png | Bin 0 -> 1100 bytes .../Themes/Umami/Icon/actions/gtk-go-down.png | Bin 0 -> 1072 bytes .../Umami/Icon/actions/gtk-go-forward-ltr.png | Bin 0 -> 1100 bytes .../Umami/Icon/actions/gtk-go-forward-rtl.png | Bin 0 -> 1135 bytes Media/Themes/Umami/Icon/actions/gtk-go-up.png | Bin 0 -> 1063 bytes .../Umami/Icon/actions/gtk-goto-bottom.png | Bin 0 -> 1111 bytes .../Umami/Icon/actions/gtk-goto-first-ltr.png | Bin 0 -> 1140 bytes .../Umami/Icon/actions/gtk-goto-first-rtl.png | Bin 0 -> 1106 bytes .../Umami/Icon/actions/gtk-goto-last-ltr.png | Bin 0 -> 1106 bytes .../Umami/Icon/actions/gtk-goto-last-rtl.png | Bin 0 -> 1140 bytes .../Umami/Icon/actions/gtk-goto-top.png | Bin 0 -> 1125 bytes Media/Themes/Umami/Icon/actions/gtk-home.png | Bin 0 -> 1072 bytes .../Umami/Icon/actions/gtk-indent-ltr.png | Bin 0 -> 854 bytes .../Umami/Icon/actions/gtk-indent-rtl.png | Bin 0 -> 840 bytes .../Themes/Umami/Icon/actions/gtk-italic.png | Bin 0 -> 952 bytes .../Umami/Icon/actions/gtk-jump-to-ltr.png | Bin 0 -> 1258 bytes .../Umami/Icon/actions/gtk-jump-to-rtl.png | Bin 0 -> 1258 bytes .../Umami/Icon/actions/gtk-justify-center.png | Bin 0 -> 694 bytes .../Umami/Icon/actions/gtk-justify-fill.png | Bin 0 -> 683 bytes .../Umami/Icon/actions/gtk-justify-left.png | Bin 0 -> 684 bytes .../Umami/Icon/actions/gtk-justify-right.png | Bin 0 -> 696 bytes .../Icon/actions/gtk-media-forward-ltr.png | Bin 0 -> 1229 bytes .../Icon/actions/gtk-media-forward-rtl.png | Bin 0 -> 1184 bytes .../Umami/Icon/actions/gtk-media-next-ltr.png | Bin 0 -> 1318 bytes .../Umami/Icon/actions/gtk-media-next-rtl.png | Bin 0 -> 1246 bytes .../Umami/Icon/actions/gtk-media-pause.png | Bin 0 -> 798 bytes .../Umami/Icon/actions/gtk-media-play-ltr.png | Bin 0 -> 1157 bytes .../Icon/actions/gtk-media-previous-ltr.png | Bin 0 -> 1246 bytes .../Icon/actions/gtk-media-previous-rtl.png | Bin 0 -> 1318 bytes .../Umami/Icon/actions/gtk-media-record.png | Bin 0 -> 1258 bytes .../Icon/actions/gtk-media-rewind-ltr.png | Bin 0 -> 1184 bytes .../Icon/actions/gtk-media-rewind-rtl.png | Bin 0 -> 1229 bytes .../Umami/Icon/actions/gtk-media-stop.png | Bin 0 -> 681 bytes Media/Themes/Umami/Icon/actions/gtk-new.png | Bin 0 -> 851 bytes Media/Themes/Umami/Icon/actions/gtk-open.png | Bin 0 -> 1093 bytes Media/Themes/Umami/Icon/actions/gtk-paste.png | Bin 0 -> 945 bytes .../Umami/Icon/actions/gtk-print-preview.png | Bin 0 -> 1291 bytes Media/Themes/Umami/Icon/actions/gtk-print.png | Bin 0 -> 1030 bytes .../Umami/Icon/actions/gtk-properties.png | Bin 0 -> 767 bytes .../Umami/Icon/actions/gtk-redo-ltr.png | Bin 0 -> 960 bytes .../Themes/Umami/Icon/actions/gtk-refresh.png | Bin 0 -> 1495 bytes .../Themes/Umami/Icon/actions/gtk-remove.png | Bin 0 -> 394 bytes .../Themes/Umami/Icon/actions/gtk-save-as.png | Bin 0 -> 1048 bytes Media/Themes/Umami/Icon/actions/gtk-save.png | Bin 0 -> 1109 bytes .../Umami/Icon/actions/gtk-select-all.png | Bin 0 -> 781 bytes Media/Themes/Umami/Icon/actions/gtk-stop.png | Bin 0 -> 1375 bytes .../Umami/Icon/actions/gtk-strikethrough.png | Bin 0 -> 948 bytes .../Umami/Icon/actions/gtk-underline.png | Bin 0 -> 1038 bytes .../Umami/Icon/actions/gtk-undo-ltr.png | Bin 0 -> 1161 bytes .../Umami/Icon/actions/gtk-unindent-ltr.png | Bin 0 -> 840 bytes .../Umami/Icon/actions/gtk-unindent-rtl.png | Bin 0 -> 854 bytes Media/Themes/Umami/Icon/actions/kfind.png | Bin 0 -> 1414 bytes Media/Themes/Umami/Icon/actions/kfm_home.png | Bin 0 -> 1072 bytes Media/Themes/Umami/Icon/actions/leftjust.png | Bin 0 -> 684 bytes Media/Themes/Umami/Icon/actions/list-add.png | Bin 0 -> 506 bytes .../Themes/Umami/Icon/actions/list-remove.png | Bin 0 -> 394 bytes Media/Themes/Umami/Icon/actions/lock.png | Bin 0 -> 1169 bytes .../Umami/Icon/actions/mail-forward.png | Bin 0 -> 985 bytes .../Umami/Icon/actions/mail-mark-junk.png | Bin 0 -> 1488 bytes .../Umami/Icon/actions/mail-mark-not-junk.png | Bin 0 -> 1395 bytes .../Umami/Icon/actions/mail-message-new.png | Bin 0 -> 1102 bytes .../Umami/Icon/actions/mail-reply-all.png | Bin 0 -> 1409 bytes .../Umami/Icon/actions/mail-reply-sender.png | Bin 0 -> 1181 bytes .../Umami/Icon/actions/mail-send-receive.png | Bin 0 -> 1111 bytes .../Umami/Icon/actions/mail_forward.png | Bin 0 -> 985 bytes Media/Themes/Umami/Icon/actions/mail_new.png | Bin 0 -> 1102 bytes .../Themes/Umami/Icon/actions/mail_reply.png | Bin 0 -> 1181 bytes .../Umami/Icon/actions/mail_replyall.png | Bin 0 -> 1409 bytes Media/Themes/Umami/Icon/actions/mail_spam.png | Bin 0 -> 1488 bytes .../Themes/Umami/Icon/actions/media-eject.png | Bin 0 -> 901 bytes .../Icon/actions/media-playback-pause.png | Bin 0 -> 798 bytes .../Icon/actions/media-playback-start.png | Bin 0 -> 1157 bytes .../Icon/actions/media-playback-stop.png | Bin 0 -> 681 bytes .../Umami/Icon/actions/media-record.png | Bin 0 -> 1258 bytes .../Icon/actions/media-seek-backward.png | Bin 0 -> 1184 bytes .../Umami/Icon/actions/media-seek-forward.png | Bin 0 -> 1229 bytes .../Icon/actions/media-skip-backward.png | Bin 0 -> 1246 bytes .../Umami/Icon/actions/media-skip-forward.png | Bin 0 -> 1318 bytes Media/Themes/Umami/Icon/actions/next.png | Bin 0 -> 1100 bytes .../Umami/Icon/actions/player_eject.png | Bin 0 -> 901 bytes .../Themes/Umami/Icon/actions/player_end.png | Bin 0 -> 1318 bytes .../Themes/Umami/Icon/actions/player_fwd.png | Bin 0 -> 1229 bytes .../Umami/Icon/actions/player_pause.png | Bin 0 -> 798 bytes .../Themes/Umami/Icon/actions/player_play.png | Bin 0 -> 1157 bytes .../Umami/Icon/actions/player_record.png | Bin 0 -> 1258 bytes .../Themes/Umami/Icon/actions/player_rew.png | Bin 0 -> 1184 bytes .../Umami/Icon/actions/player_start.png | Bin 0 -> 1246 bytes .../Themes/Umami/Icon/actions/player_stop.png | Bin 0 -> 681 bytes Media/Themes/Umami/Icon/actions/previous.png | Bin 0 -> 1135 bytes .../Umami/Icon/actions/process-stop.png | Bin 0 -> 1375 bytes .../Themes/Umami/Icon/actions/redhat-home.png | Bin 0 -> 1072 bytes Media/Themes/Umami/Icon/actions/redo.png | Bin 0 -> 960 bytes Media/Themes/Umami/Icon/actions/reload.png | Bin 0 -> 1495 bytes Media/Themes/Umami/Icon/actions/reload3.png | Bin 0 -> 1495 bytes .../Umami/Icon/actions/reload_all_tabs.png | Bin 0 -> 1495 bytes .../Themes/Umami/Icon/actions/reload_page.png | Bin 0 -> 1495 bytes Media/Themes/Umami/Icon/actions/remove.png | Bin 0 -> 394 bytes Media/Themes/Umami/Icon/actions/rightjust.png | Bin 0 -> 696 bytes Media/Themes/Umami/Icon/actions/search.png | Bin 0 -> 1414 bytes Media/Themes/Umami/Icon/actions/start.png | Bin 0 -> 1140 bytes .../Umami/Icon/actions/stock_add-bookmark.png | Bin 0 -> 1101 bytes .../Umami/Icon/actions/stock_bottom.png | Bin 0 -> 1111 bytes .../Themes/Umami/Icon/actions/stock_copy.png | Bin 0 -> 891 bytes Media/Themes/Umami/Icon/actions/stock_cut.png | Bin 0 -> 1272 bytes .../Umami/Icon/actions/stock_delete.png | Bin 0 -> 1389 bytes .../Themes/Umami/Icon/actions/stock_down.png | Bin 0 -> 1072 bytes .../Icon/actions/stock_file-properites.png | Bin 0 -> 767 bytes .../Themes/Umami/Icon/actions/stock_first.png | Bin 0 -> 1140 bytes .../Umami/Icon/actions/stock_fullscreen.png | Bin 0 -> 988 bytes .../Icon/actions/stock_help-add-bookmark.png | Bin 0 -> 1101 bytes .../Themes/Umami/Icon/actions/stock_home.png | Bin 0 -> 1072 bytes .../Themes/Umami/Icon/actions/stock_last.png | Bin 0 -> 1106 bytes .../Themes/Umami/Icon/actions/stock_left.png | Bin 0 -> 1135 bytes .../Umami/Icon/actions/stock_mail-compose.png | Bin 0 -> 1102 bytes .../Umami/Icon/actions/stock_mail-forward.png | Bin 0 -> 985 bytes .../Icon/actions/stock_mail-reply-to-all.png | Bin 0 -> 1409 bytes .../Umami/Icon/actions/stock_mail-reply.png | Bin 0 -> 1181 bytes .../Icon/actions/stock_mail-send-receive.png | Bin 0 -> 1111 bytes .../Umami/Icon/actions/stock_media-fwd.png | Bin 0 -> 1229 bytes .../Umami/Icon/actions/stock_media-next.png | Bin 0 -> 1318 bytes .../Umami/Icon/actions/stock_media-pause.png | Bin 0 -> 798 bytes .../Umami/Icon/actions/stock_media-play.png | Bin 0 -> 1157 bytes .../Umami/Icon/actions/stock_media-prev.png | Bin 0 -> 1246 bytes .../Umami/Icon/actions/stock_media-rec.png | Bin 0 -> 1258 bytes .../Umami/Icon/actions/stock_media-rew.png | Bin 0 -> 1184 bytes .../Umami/Icon/actions/stock_media-stop.png | Bin 0 -> 681 bytes .../Icon/actions/stock_new-address-book.png | Bin 0 -> 1083 bytes .../Icon/actions/stock_new-appointment.png | Bin 0 -> 1477 bytes .../Umami/Icon/actions/stock_new-bcard.png | Bin 0 -> 1032 bytes .../Umami/Icon/actions/stock_new-dir.png | Bin 0 -> 1014 bytes .../Umami/Icon/actions/stock_new-tab.png | Bin 0 -> 791 bytes .../Umami/Icon/actions/stock_new-text.png | Bin 0 -> 851 bytes .../Umami/Icon/actions/stock_new-window.png | Bin 0 -> 875 bytes .../Umami/Icon/actions/stock_not-spam.png | Bin 0 -> 1395 bytes .../Themes/Umami/Icon/actions/stock_paste.png | Bin 0 -> 945 bytes .../Icon/actions/stock_print-preview.png | Bin 0 -> 1291 bytes .../Themes/Umami/Icon/actions/stock_print.png | Bin 0 -> 1030 bytes .../Umami/Icon/actions/stock_properties.png | Bin 0 -> 767 bytes .../Themes/Umami/Icon/actions/stock_redo.png | Bin 0 -> 960 bytes .../Umami/Icon/actions/stock_refresh.png | Bin 0 -> 1495 bytes .../Themes/Umami/Icon/actions/stock_right.png | Bin 0 -> 1100 bytes .../Umami/Icon/actions/stock_save-as.png | Bin 0 -> 1048 bytes .../Themes/Umami/Icon/actions/stock_save.png | Bin 0 -> 1109 bytes .../Icon/actions/stock_search-and-replace.png | Bin 0 -> 1244 bytes .../Umami/Icon/actions/stock_search.png | Bin 0 -> 1254 bytes .../Umami/Icon/actions/stock_select-all.png | Bin 0 -> 781 bytes .../Themes/Umami/Icon/actions/stock_spam.png | Bin 0 -> 1488 bytes .../Themes/Umami/Icon/actions/stock_stop.png | Bin 0 -> 1375 bytes .../Icon/actions/stock_text-strikethrough.png | Bin 0 -> 948 bytes .../Umami/Icon/actions/stock_text_bold.png | Bin 0 -> 1109 bytes .../Umami/Icon/actions/stock_text_center.png | Bin 0 -> 694 bytes .../Umami/Icon/actions/stock_text_indent.png | Bin 0 -> 854 bytes .../Umami/Icon/actions/stock_text_italic.png | Bin 0 -> 952 bytes .../Umami/Icon/actions/stock_text_justify.png | Bin 0 -> 683 bytes .../Umami/Icon/actions/stock_text_left.png | Bin 0 -> 684 bytes .../Umami/Icon/actions/stock_text_right.png | Bin 0 -> 696 bytes .../Icon/actions/stock_text_underlined.png | Bin 0 -> 1038 bytes .../Icon/actions/stock_text_unindent.png | Bin 0 -> 840 bytes Media/Themes/Umami/Icon/actions/stock_top.png | Bin 0 -> 1125 bytes .../Themes/Umami/Icon/actions/stock_undo.png | Bin 0 -> 1161 bytes Media/Themes/Umami/Icon/actions/stock_up.png | Bin 0 -> 1063 bytes Media/Themes/Umami/Icon/actions/stop.png | Bin 0 -> 1375 bytes .../Umami/Icon/actions/system-lock-screen.png | Bin 0 -> 1169 bytes .../Umami/Icon/actions/system-log-out.png | Bin 0 -> 1264 bytes .../Umami/Icon/actions/system-search.png | Bin 0 -> 1414 bytes .../Umami/Icon/actions/system-shutdown.png | Bin 0 -> 883 bytes Media/Themes/Umami/Icon/actions/tab-new.png | Bin 0 -> 791 bytes Media/Themes/Umami/Icon/actions/tab_new.png | Bin 0 -> 791 bytes Media/Themes/Umami/Icon/actions/text_bold.png | Bin 0 -> 1109 bytes .../Themes/Umami/Icon/actions/text_italic.png | Bin 0 -> 952 bytes .../Themes/Umami/Icon/actions/text_strike.png | Bin 0 -> 948 bytes .../Themes/Umami/Icon/actions/text_under.png | Bin 0 -> 1038 bytes Media/Themes/Umami/Icon/actions/top.png | Bin 0 -> 1125 bytes Media/Themes/Umami/Icon/actions/undo.png | Bin 0 -> 1161 bytes Media/Themes/Umami/Icon/actions/up.png | Bin 0 -> 1063 bytes .../Umami/Icon/actions/view-fullscreen.png | Bin 0 -> 988 bytes .../Umami/Icon/actions/view-refresh.png | Bin 0 -> 1495 bytes .../Themes/Umami/Icon/actions/window-new.png | Bin 0 -> 875 bytes .../Umami/Icon/actions/window_fullscreen.png | Bin 0 -> 988 bytes .../Themes/Umami/Icon/actions/window_new.png | Bin 0 -> 875 bytes .../Umami/Icon/actions/xfce-system-lock.png | Bin 0 -> 1169 bytes Media/Themes/Umami/Icon/apps/access.png | Bin 0 -> 1171 bytes .../Icon/apps/accessibility-directory.png | Bin 0 -> 1171 bytes .../Icon/apps/accessories-calculator.png | Bin 0 -> 977 bytes .../Icon/apps/accessories-character-map.png | Bin 0 -> 1001 bytes .../Icon/apps/accessories-text-editor.png | Bin 0 -> 1007 bytes Media/Themes/Umami/Icon/apps/background.png | Bin 0 -> 1170 bytes Media/Themes/Umami/Icon/apps/browser.png | Bin 0 -> 1393 bytes Media/Themes/Umami/Icon/apps/calc.png | Bin 0 -> 977 bytes .../Umami/Icon/apps/config-language.png | Bin 0 -> 1124 bytes Media/Themes/Umami/Icon/apps/config-users.png | Bin 0 -> 1402 bytes Media/Themes/Umami/Icon/apps/date.png | Bin 0 -> 915 bytes Media/Themes/Umami/Icon/apps/email.png | Bin 0 -> 930 bytes Media/Themes/Umami/Icon/apps/file-manager.png | Bin 0 -> 559 bytes Media/Themes/Umami/Icon/apps/fonts.png | Bin 0 -> 1030 bytes .../Umami/Icon/apps/gnome-calculator.png | Bin 0 -> 977 bytes .../Umami/Icon/apps/gnome-character-map.png | Bin 0 -> 1001 bytes Media/Themes/Umami/Icon/apps/gnome-help.png | Bin 0 -> 1484 bytes .../Themes/Umami/Icon/apps/gnome-monitor.png | Bin 0 -> 1160 bytes .../Umami/Icon/apps/gnome-remote-desktop.png | Bin 0 -> 1387 bytes .../Themes/Umami/Icon/apps/gnome-session.png | Bin 0 -> 1139 bytes ...me-settings-accessibility-technologies.png | Bin 0 -> 1171 bytes .../Icon/apps/gnome-settings-background.png | Bin 0 -> 1170 bytes .../Umami/Icon/apps/gnome-settings-font.png | Bin 0 -> 1030 bytes .../Icon/apps/gnome-settings-keybindings.png | Bin 0 -> 1163 bytes .../Umami/Icon/apps/gnome-settings-theme.png | Bin 0 -> 1132 bytes .../Themes/Umami/Icon/apps/gnome-terminal.png | Bin 0 -> 1203 bytes .../Umami/Icon/apps/gnome-window-manager.png | Bin 0 -> 714 bytes Media/Themes/Umami/Icon/apps/gucharmap.png | Bin 0 -> 1001 bytes Media/Themes/Umami/Icon/apps/help-browser.png | Bin 0 -> 1484 bytes .../Umami/Icon/apps/internet-group-chat.png | Bin 0 -> 642 bytes .../Themes/Umami/Icon/apps/internet-mail.png | Bin 0 -> 930 bytes .../Umami/Icon/apps/internet-news-reader.png | Bin 0 -> 706 bytes .../Umami/Icon/apps/internet-web-browser.png | Bin 0 -> 1393 bytes Media/Themes/Umami/Icon/apps/kcalc.png | Bin 0 -> 977 bytes Media/Themes/Umami/Icon/apps/kcharselect.png | Bin 0 -> 1001 bytes Media/Themes/Umami/Icon/apps/kcmkwm.png | Bin 0 -> 714 bytes Media/Themes/Umami/Icon/apps/kedit.png | Bin 0 -> 1007 bytes Media/Themes/Umami/Icon/apps/key_bindings.png | Bin 0 -> 1163 bytes Media/Themes/Umami/Icon/apps/kfm.png | Bin 0 -> 559 bytes Media/Themes/Umami/Icon/apps/khelpcenter.png | Bin 0 -> 1484 bytes Media/Themes/Umami/Icon/apps/konsole.png | Bin 0 -> 1203 bytes Media/Themes/Umami/Icon/apps/krfb.png | Bin 0 -> 1387 bytes Media/Themes/Umami/Icon/apps/kscreensaver.png | Bin 0 -> 1116 bytes Media/Themes/Umami/Icon/apps/ksysguard.png | Bin 0 -> 1160 bytes Media/Themes/Umami/Icon/apps/kuser.png | Bin 0 -> 1402 bytes Media/Themes/Umami/Icon/apps/kwin.png | Bin 0 -> 714 bytes Media/Themes/Umami/Icon/apps/locale.png | Bin 0 -> 1124 bytes Media/Themes/Umami/Icon/apps/mail_generic.png | Bin 0 -> 930 bytes .../Umami/Icon/apps/office-calendar.png | Bin 0 -> 915 bytes Media/Themes/Umami/Icon/apps/openterm.png | Bin 0 -> 1203 bytes .../preferences-desktop-accessibility.png | Bin 0 -> 1171 bytes ...eferences-desktop-assistive-technology.png | Bin 0 -> 1233 bytes .../Icon/apps/preferences-desktop-font.png | Bin 0 -> 1030 bytes ...preferences-desktop-keyboard-shortcuts.png | Bin 0 -> 1163 bytes .../Icon/apps/preferences-desktop-locale.png | Bin 0 -> 1124 bytes .../apps/preferences-desktop-multimedia.png | Bin 0 -> 1043 bytes .../preferences-desktop-remote-desktop.png | Bin 0 -> 1387 bytes .../apps/preferences-desktop-screensaver.png | Bin 0 -> 1116 bytes .../Icon/apps/preferences-desktop-theme.png | Bin 0 -> 1132 bytes .../apps/preferences-desktop-wallpaper.png | Bin 0 -> 1170 bytes .../apps/preferences-system-network-proxy.png | Bin 0 -> 1358 bytes .../Icon/apps/preferences-system-session.png | Bin 0 -> 1139 bytes .../Icon/apps/preferences-system-windows.png | Bin 0 -> 714 bytes Media/Themes/Umami/Icon/apps/proxy-config.png | Bin 0 -> 1358 bytes Media/Themes/Umami/Icon/apps/proxy.png | Bin 0 -> 1358 bytes Media/Themes/Umami/Icon/apps/redhat-email.png | Bin 0 -> 930 bytes .../Umami/Icon/apps/redhat-filemanager.png | Bin 0 -> 559 bytes .../Umami/Icon/apps/redhat-web-browser.png | Bin 0 -> 1393 bytes Media/Themes/Umami/Icon/apps/screensaver.png | Bin 0 -> 1116 bytes Media/Themes/Umami/Icon/apps/stock_proxy.png | Bin 0 -> 1358 bytes Media/Themes/Umami/Icon/apps/style.png | Bin 0 -> 1132 bytes .../Themes/Umami/Icon/apps/susehelpcenter.png | Bin 0 -> 1484 bytes .../Umami/Icon/apps/system-config-users.png | Bin 0 -> 1402 bytes .../Umami/Icon/apps/system-file-manager.png | Bin 0 -> 559 bytes .../Umami/Icon/apps/system-installer.png | Bin 0 -> 1368 bytes .../Icon/apps/system-software-update.png | Bin 0 -> 1518 bytes Media/Themes/Umami/Icon/apps/system-users.png | Bin 0 -> 1402 bytes Media/Themes/Umami/Icon/apps/terminal.png | Bin 0 -> 1203 bytes Media/Themes/Umami/Icon/apps/text-editor.png | Bin 0 -> 1007 bytes .../Themes/Umami/Icon/apps/update-manager.png | Bin 0 -> 1518 bytes .../Icon/apps/utilities-system-monitor.png | Bin 0 -> 1160 bytes .../Umami/Icon/apps/utilities-terminal.png | Bin 0 -> 1203 bytes Media/Themes/Umami/Icon/apps/wallpaper.png | Bin 0 -> 1170 bytes Media/Themes/Umami/Icon/apps/web-browser.png | Bin 0 -> 1393 bytes Media/Themes/Umami/Icon/apps/xfcalendar.png | Bin 0 -> 915 bytes Media/Themes/Umami/Icon/apps/xfce-edit.png | Bin 0 -> 1007 bytes .../Umami/Icon/apps/xfce-filemanager.png | Bin 0 -> 559 bytes Media/Themes/Umami/Icon/apps/xfce-mail.png | Bin 0 -> 930 bytes Media/Themes/Umami/Icon/apps/xfce-man.png | Bin 0 -> 1484 bytes .../Themes/Umami/Icon/apps/xfce-terminal.png | Bin 0 -> 1203 bytes .../Themes/Umami/Icon/apps/xfce4-backdrop.png | Bin 0 -> 1170 bytes .../Themes/Umami/Icon/apps/xfce4-session.png | Bin 0 -> 1139 bytes Media/Themes/Umami/Icon/apps/xfce4-ui.png | Bin 0 -> 1132 bytes Media/Themes/Umami/Icon/apps/xfwm4.png | Bin 0 -> 714 bytes .../Icon/apps/ximian-evolution-calendar.png | Bin 0 -> 915 bytes Media/Themes/Umami/Icon/apps/xscreensaver.png | Bin 0 -> 1116 bytes Media/Themes/Umami/Icon/apps/zen-icon.png | Bin 0 -> 1518 bytes .../categories/applications-accessories.png | Bin 0 -> 1471 bytes .../categories/applications-development.png | Bin 0 -> 1489 bytes .../Icon/categories/applications-games.png | Bin 0 -> 1261 bytes .../Icon/categories/applications-graphics.png | Bin 0 -> 1055 bytes .../Icon/categories/applications-internet.png | Bin 0 -> 1532 bytes .../categories/applications-multimedia.png | Bin 0 -> 1428 bytes .../Icon/categories/applications-office.png | Bin 0 -> 1338 bytes .../Icon/categories/applications-other.png | Bin 0 -> 1130 bytes .../Icon/categories/applications-system.png | Bin 0 -> 1532 bytes .../Icon/categories/gnome-applications.png | Bin 0 -> 1338 bytes .../Icon/categories/gnome-control-center.png | Bin 0 -> 708 bytes .../Umami/Icon/categories/gnome-devel.png | Bin 0 -> 1489 bytes .../Umami/Icon/categories/gnome-globe.png | Bin 0 -> 1532 bytes .../Umami/Icon/categories/gnome-graphics.png | Bin 0 -> 1055 bytes .../Umami/Icon/categories/gnome-joystick.png | Bin 0 -> 1261 bytes .../Icon/categories/gnome-multimedia.png | Bin 0 -> 1428 bytes .../Umami/Icon/categories/gnome-other.png | Bin 0 -> 1130 bytes .../Umami/Icon/categories/gnome-settings.png | Bin 0 -> 708 bytes .../Umami/Icon/categories/gnome-system.png | Bin 0 -> 1532 bytes .../Umami/Icon/categories/gnome-util.png | Bin 0 -> 1471 bytes .../Umami/Icon/categories/gtk-preferences.png | Bin 0 -> 708 bytes .../categories/input_devices_settings.png | Bin 0 -> 1397 bytes .../Themes/Umami/Icon/categories/kcontrol.png | Bin 0 -> 708 bytes .../Icon/categories/package_development.png | Bin 0 -> 1489 bytes .../Umami/Icon/categories/package_games.png | Bin 0 -> 1261 bytes .../Icon/categories/package_graphics.png | Bin 0 -> 1055 bytes .../Icon/categories/package_multimedia.png | Bin 0 -> 1428 bytes .../Umami/Icon/categories/package_network.png | Bin 0 -> 1532 bytes .../Umami/Icon/categories/package_office.png | Bin 0 -> 1338 bytes .../Icon/categories/package_settings.png | Bin 0 -> 1143 bytes .../Umami/Icon/categories/package_system.png | Bin 0 -> 1532 bytes .../Icon/categories/package_utilities.png | Bin 0 -> 1471 bytes .../preferences-desktop-peripherals.png | Bin 0 -> 1397 bytes .../Icon/categories/preferences-desktop.png | Bin 0 -> 708 bytes .../Icon/categories/preferences-system.png | Bin 0 -> 1143 bytes .../Icon/categories/redhat-accessories.png | Bin 0 -> 1471 bytes .../Umami/Icon/categories/redhat-games.png | Bin 0 -> 1261 bytes .../Umami/Icon/categories/redhat-graphics.png | Bin 0 -> 1055 bytes .../Umami/Icon/categories/redhat-internet.png | Bin 0 -> 1532 bytes .../Umami/Icon/categories/redhat-office.png | Bin 0 -> 1338 bytes .../Icon/categories/redhat-preferences.png | Bin 0 -> 708 bytes .../Icon/categories/redhat-programming.png | Bin 0 -> 1489 bytes .../Icon/categories/redhat-sound_video.png | Bin 0 -> 1428 bytes .../categories/redhat-system_settings.png | Bin 0 -> 1143 bytes .../Icon/categories/redhat-system_tools.png | Bin 0 -> 1532 bytes .../Umami/Icon/categories/stock_internet.png | Bin 0 -> 1532 bytes .../Umami/Icon/categories/xfce-devel.png | Bin 0 -> 1489 bytes .../Umami/Icon/categories/xfce-games.png | Bin 0 -> 1261 bytes .../Umami/Icon/categories/xfce-graphics.png | Bin 0 -> 1055 bytes .../Umami/Icon/categories/xfce-internet.png | Bin 0 -> 1532 bytes .../Umami/Icon/categories/xfce-multimedia.png | Bin 0 -> 1428 bytes .../Umami/Icon/categories/xfce-office.png | Bin 0 -> 1338 bytes .../Icon/categories/xfce-system-settings.png | Bin 0 -> 1143 bytes .../Umami/Icon/categories/xfce-system.png | Bin 0 -> 1532 bytes .../Umami/Icon/categories/xfce-utils.png | Bin 0 -> 1471 bytes .../Umami/Icon/categories/xfce4-settings.png | Bin 0 -> 708 bytes Media/Themes/Umami/Icon/clipboard.png | Bin 0 -> 1196 bytes Media/Themes/Umami/Icon/default.png | Bin 0 -> 535 bytes .../Umami/Icon/devices/3floppy_unmount.png | Bin 0 -> 980 bytes .../Themes/Umami/Icon/devices/audio-card.png | Bin 0 -> 1319 bytes .../Icon/devices/audio-input-microphone.png | Bin 0 -> 1088 bytes Media/Themes/Umami/Icon/devices/battery.png | Bin 0 -> 1214 bytes .../Umami/Icon/devices/camera-photo.png | Bin 0 -> 1410 bytes .../Umami/Icon/devices/camera-video.png | Bin 0 -> 1169 bytes Media/Themes/Umami/Icon/devices/camera.png | Bin 0 -> 1410 bytes .../Umami/Icon/devices/camera_unmount.png | Bin 0 -> 1410 bytes .../Umami/Icon/devices/cdrom_unmount.png | Bin 0 -> 1507 bytes .../Umami/Icon/devices/cdwriter_unmount.png | Bin 0 -> 1507 bytes .../Themes/Umami/Icon/devices/chardevice.png | Bin 0 -> 1119 bytes Media/Themes/Umami/Icon/devices/computer.png | Bin 0 -> 1215 bytes Media/Themes/Umami/Icon/devices/display.png | Bin 0 -> 1119 bytes .../Themes/Umami/Icon/devices/drive-cdrom.png | Bin 0 -> 1176 bytes .../Umami/Icon/devices/drive-harddisk.png | Bin 0 -> 696 bytes .../Umami/Icon/devices/drive-optical.png | Bin 0 -> 1176 bytes .../Icon/devices/drive-removable-media.png | Bin 0 -> 775 bytes .../Themes/Umami/Icon/devices/dvd_unmount.png | Bin 0 -> 1507 bytes .../Umami/Icon/devices/gnome-dev-battery.png | Bin 0 -> 1214 bytes .../Icon/devices/gnome-dev-cdrom-audio.png | Bin 0 -> 1507 bytes .../Umami/Icon/devices/gnome-dev-cdrom.png | Bin 0 -> 1176 bytes .../Umami/Icon/devices/gnome-dev-computer.png | Bin 0 -> 1215 bytes .../Umami/Icon/devices/gnome-dev-disc-cdr.png | Bin 0 -> 1507 bytes .../Icon/devices/gnome-dev-disc-cdrw.png | Bin 0 -> 1507 bytes .../Icon/devices/gnome-dev-disc-dvdr-plus.png | Bin 0 -> 1507 bytes .../Icon/devices/gnome-dev-disc-dvdr.png | Bin 0 -> 1507 bytes .../Icon/devices/gnome-dev-disc-dvdram.png | Bin 0 -> 1507 bytes .../Icon/devices/gnome-dev-disc-dvdrom.png | Bin 0 -> 1507 bytes .../Icon/devices/gnome-dev-disc-dvdrw.png | Bin 0 -> 1507 bytes .../Umami/Icon/devices/gnome-dev-dvd.png | Bin 0 -> 1176 bytes .../Umami/Icon/devices/gnome-dev-ethernet.png | Bin 0 -> 1324 bytes .../Umami/Icon/devices/gnome-dev-floppy.png | Bin 0 -> 980 bytes .../Icon/devices/gnome-dev-harddisk-1394.png | Bin 0 -> 696 bytes .../Icon/devices/gnome-dev-harddisk-usb.png | Bin 0 -> 696 bytes .../Umami/Icon/devices/gnome-dev-harddisk.png | Bin 0 -> 696 bytes .../Umami/Icon/devices/gnome-dev-ipod.png | Bin 0 -> 1241 bytes .../Umami/Icon/devices/gnome-dev-keyboard.png | Bin 0 -> 890 bytes .../Umami/Icon/devices/gnome-dev-media-cf.png | Bin 0 -> 987 bytes .../Umami/Icon/devices/gnome-dev-media-ms.png | Bin 0 -> 987 bytes .../Icon/devices/gnome-dev-media-sdmmc.png | Bin 0 -> 987 bytes .../Umami/Icon/devices/gnome-dev-media-sm.png | Bin 0 -> 987 bytes .../Icon/devices/gnome-dev-mouse-ball.png | Bin 0 -> 1288 bytes .../Icon/devices/gnome-dev-mouse-optical.png | Bin 0 -> 1288 bytes .../Umami/Icon/devices/gnome-dev-printer.png | Bin 0 -> 979 bytes .../Icon/devices/gnome-dev-removable-1394.png | Bin 0 -> 775 bytes .../Icon/devices/gnome-dev-removable-usb.png | Bin 0 -> 775 bytes .../Icon/devices/gnome-dev-removable.png | Bin 0 -> 775 bytes .../Umami/Icon/devices/gnome-dev-wavelan.png | Bin 0 -> 1119 bytes .../Umami/Icon/devices/gnome-fs-client.png | Bin 0 -> 1215 bytes .../Umami/Icon/devices/gnome-stock-mic.png | Bin 0 -> 1088 bytes Media/Themes/Umami/Icon/devices/gtk-cdrom.png | Bin 0 -> 1507 bytes .../Themes/Umami/Icon/devices/gtk-floppy.png | Bin 0 -> 980 bytes .../Umami/Icon/devices/gtk-harddisk.png | Bin 0 -> 696 bytes Media/Themes/Umami/Icon/devices/harddrive.png | Bin 0 -> 696 bytes .../Themes/Umami/Icon/devices/hdd_unmount.png | Bin 0 -> 696 bytes .../Umami/Icon/devices/input-gaming.png | Bin 0 -> 1065 bytes .../Umami/Icon/devices/input-keyboard.png | Bin 0 -> 890 bytes .../Themes/Umami/Icon/devices/input-mouse.png | Bin 0 -> 1288 bytes .../Themes/Umami/Icon/devices/ipod_mount.png | Bin 0 -> 1241 bytes Media/Themes/Umami/Icon/devices/joystick.png | Bin 0 -> 1065 bytes Media/Themes/Umami/Icon/devices/keyboard.png | Bin 0 -> 890 bytes .../Themes/Umami/Icon/devices/kjobviewer.png | Bin 0 -> 979 bytes Media/Themes/Umami/Icon/devices/kxkb.png | Bin 0 -> 890 bytes .../Themes/Umami/Icon/devices/media-cdrom.png | Bin 0 -> 1507 bytes .../Themes/Umami/Icon/devices/media-flash.png | Bin 0 -> 987 bytes .../Umami/Icon/devices/media-floppy.png | Bin 0 -> 980 bytes .../Umami/Icon/devices/media-optical.png | Bin 0 -> 1507 bytes Media/Themes/Umami/Icon/devices/mouse.png | Bin 0 -> 1288 bytes .../Umami/Icon/devices/multimedia-player.png | Bin 0 -> 1241 bytes .../Umami/Icon/devices/network-wired.png | Bin 0 -> 1324 bytes .../Umami/Icon/devices/network-wireless.png | Bin 0 -> 1119 bytes Media/Themes/Umami/Icon/devices/nm-adhoc.png | Bin 0 -> 1119 bytes .../Umami/Icon/devices/nm-device-wired.png | Bin 0 -> 1324 bytes .../Umami/Icon/devices/nm-device-wireless.png | Bin 0 -> 1119 bytes .../Umami/Icon/devices/printer-remote.png | Bin 0 -> 979 bytes Media/Themes/Umami/Icon/devices/printer.png | Bin 0 -> 979 bytes Media/Themes/Umami/Icon/devices/printer1.png | Bin 0 -> 979 bytes Media/Themes/Umami/Icon/devices/printmgr.png | Bin 0 -> 979 bytes Media/Themes/Umami/Icon/devices/stock_mic.png | Bin 0 -> 1088 bytes .../Umami/Icon/devices/stock_printers.png | Bin 0 -> 979 bytes .../Umami/Icon/devices/system-floppy.png | Bin 0 -> 980 bytes Media/Themes/Umami/Icon/devices/system.png | Bin 0 -> 1215 bytes .../Icon/devices/usbpendrive_unmount.png | Bin 0 -> 775 bytes .../Umami/Icon/devices/video-display.png | Bin 0 -> 1119 bytes .../Umami/Icon/devices/xfce-printer.png | Bin 0 -> 979 bytes .../Umami/Icon/devices/xfce4-display.png | Bin 0 -> 1119 bytes .../Umami/Icon/devices/xfce4-keyboard.png | Bin 0 -> 890 bytes .../Themes/Umami/Icon/devices/xfce4-mouse.png | Bin 0 -> 1288 bytes Media/Themes/Umami/Icon/devices/yast_HD.png | Bin 0 -> 696 bytes .../Umami/Icon/devices/yast_idetude.png | Bin 0 -> 696 bytes .../Umami/Icon/devices/yast_joystick.png | Bin 0 -> 1065 bytes .../Themes/Umami/Icon/devices/yast_mouse.png | Bin 0 -> 1288 bytes .../Umami/Icon/devices/yast_printer.png | Bin 0 -> 979 bytes .../Umami/Icon/devices/yast_soundcard.png | Bin 0 -> 1319 bytes .../Umami/Icon/emblems/emblem-favorite.png | Bin 0 -> 1280 bytes .../Umami/Icon/emblems/emblem-important.png | Bin 0 -> 1254 bytes .../Umami/Icon/emblems/emblem-noread.png | Bin 0 -> 1060 bytes .../Umami/Icon/emblems/emblem-nowrite.png | Bin 0 -> 838 bytes .../Umami/Icon/emblems/emblem-photos.png | Bin 0 -> 1218 bytes .../Umami/Icon/emblems/emblem-readonly.png | Bin 0 -> 838 bytes .../Icon/emblems/emblem-symbolic-link.png | Bin 0 -> 904 bytes .../Umami/Icon/emblems/emblem-system.png | Bin 0 -> 1566 bytes .../Umami/Icon/emblems/emblem-unreadable.png | Bin 0 -> 1060 bytes Media/Themes/Umami/Icon/emotes/face-angel.png | Bin 0 -> 1496 bytes .../Themes/Umami/Icon/emotes/face-crying.png | Bin 0 -> 1490 bytes .../Umami/Icon/emotes/face-devilish.png | Bin 0 -> 1538 bytes .../Themes/Umami/Icon/emotes/face-glasses.png | Bin 0 -> 1567 bytes Media/Themes/Umami/Icon/emotes/face-grin.png | Bin 0 -> 1476 bytes Media/Themes/Umami/Icon/emotes/face-kiss.png | Bin 0 -> 1383 bytes .../Themes/Umami/Icon/emotes/face-monkey.png | Bin 0 -> 1411 bytes Media/Themes/Umami/Icon/emotes/face-plain.png | Bin 0 -> 1438 bytes Media/Themes/Umami/Icon/emotes/face-sad.png | Bin 0 -> 1468 bytes .../Umami/Icon/emotes/face-smile-big.png | Bin 0 -> 1455 bytes Media/Themes/Umami/Icon/emotes/face-smile.png | Bin 0 -> 1456 bytes .../Umami/Icon/emotes/face-surprise.png | Bin 0 -> 1482 bytes Media/Themes/Umami/Icon/emotes/face-wink.png | Bin 0 -> 1461 bytes .../Umami/Icon/emotes/stock_smiley-1.png | Bin 0 -> 1456 bytes .../Umami/Icon/emotes/stock_smiley-11.png | Bin 0 -> 1490 bytes .../Umami/Icon/emotes/stock_smiley-13.png | Bin 0 -> 1383 bytes .../Umami/Icon/emotes/stock_smiley-18.png | Bin 0 -> 1496 bytes .../Umami/Icon/emotes/stock_smiley-2.png | Bin 0 -> 1456 bytes .../Umami/Icon/emotes/stock_smiley-22.png | Bin 0 -> 1411 bytes .../Umami/Icon/emotes/stock_smiley-3.png | Bin 0 -> 1461 bytes .../Umami/Icon/emotes/stock_smiley-4.png | Bin 0 -> 1468 bytes .../Umami/Icon/emotes/stock_smiley-5.png | Bin 0 -> 1482 bytes .../Umami/Icon/emotes/stock_smiley-6.png | Bin 0 -> 1455 bytes .../Umami/Icon/emotes/stock_smiley-7.png | Bin 0 -> 1456 bytes .../Umami/Icon/emotes/stock_smiley-8.png | Bin 0 -> 1438 bytes .../mimetypes/application-certificate.png | Bin 0 -> 1440 bytes ...ion-vnd.ms-excel.sheet.macroEnabled.12.png | Bin 0 -> 1178 bytes ...owerpoint.presentation.macroEnabled.12.png | Bin 0 -> 1007 bytes ...n-vnd.ms-word.document.macroEnabled.12.png | Bin 0 -> 802 bytes ...cedocument.presentationml.presentation.png | Bin 0 -> 1007 bytes ...officedocument.presentationml.template.png | Bin 0 -> 1296 bytes ...ats-officedocument.spreadsheetml.sheet.png | Bin 0 -> 1178 bytes ...-officedocument.spreadsheetml.template.png | Bin 0 -> 1382 bytes ...ficedocument.wordprocessingml.document.png | Bin 0 -> 802 bytes ...ficedocument.wordprocessingml.template.png | Bin 0 -> 1190 bytes .../mimetypes/application-x-executable.png | Bin 0 -> 1198 bytes Media/Themes/Umami/Icon/mimetypes/ascii.png | Bin 0 -> 651 bytes .../Umami/Icon/mimetypes/audio-x-generic.png | Bin 0 -> 1124 bytes Media/Themes/Umami/Icon/mimetypes/binary.png | Bin 0 -> 1198 bytes .../Themes/Umami/Icon/mimetypes/contents2.png | Bin 0 -> 1019 bytes Media/Themes/Umami/Icon/mimetypes/deb.png | Bin 0 -> 847 bytes .../Themes/Umami/Icon/mimetypes/document.png | Bin 0 -> 802 bytes Media/Themes/Umami/Icon/mimetypes/empty.png | Bin 0 -> 651 bytes Media/Themes/Umami/Icon/mimetypes/exec.png | Bin 0 -> 1198 bytes .../Umami/Icon/mimetypes/folder_tar.png | Bin 0 -> 847 bytes .../Umami/Icon/mimetypes/font-x-generic.png | Bin 0 -> 1057 bytes Media/Themes/Umami/Icon/mimetypes/font.png | Bin 0 -> 1057 bytes .../Umami/Icon/mimetypes/font_bitmap.png | Bin 0 -> 1057 bytes .../Umami/Icon/mimetypes/font_truetype.png | Bin 0 -> 1057 bytes .../Umami/Icon/mimetypes/font_type1.png | Bin 0 -> 1057 bytes .../Icon/mimetypes/gnome-fs-executable.png | Bin 0 -> 1198 bytes .../gnome-mime-application-magicpoint.png | Bin 0 -> 1007 bytes .../gnome-mime-application-msword.png | Bin 0 -> 802 bytes .../mimetypes/gnome-mime-application-ogg.png | Bin 0 -> 1124 bytes .../mimetypes/gnome-mime-application-pdf.png | Bin 0 -> 802 bytes .../gnome-mime-application-postscript.png | Bin 0 -> 802 bytes .../mimetypes/gnome-mime-application-rtf.png | Bin 0 -> 802 bytes ...gnome-mime-application-vnd.lotus-1-2-3.png | Bin 0 -> 1178 bytes .../gnome-mime-application-vnd.ms-excel.png | Bin 0 -> 1178 bytes ...ome-mime-application-vnd.ms-powerpoint.png | Bin 0 -> 1007 bytes ...d.oasis.opendocument.graphics-template.png | Bin 0 -> 1247 bytes ...cation-vnd.oasis.opendocument.graphics.png | Bin 0 -> 883 bytes ...plication-vnd.oasis.opendocument.image.png | Bin 0 -> 883 bytes ...sis.opendocument.presentation-template.png | Bin 0 -> 1296 bytes ...on-vnd.oasis.opendocument.presentation.png | Bin 0 -> 1007 bytes ...asis.opendocument.spreadsheet-template.png | Bin 0 -> 1382 bytes ...ion-vnd.oasis.opendocument.spreadsheet.png | Bin 0 -> 1178 bytes ...n-vnd.oasis.opendocument.text-template.png | Bin 0 -> 1190 bytes ...cation-vnd.oasis.opendocument.text-web.png | Bin 0 -> 1256 bytes ...pplication-vnd.oasis.opendocument.text.png | Bin 0 -> 802 bytes ...me-application-vnd.rn-realmedia-secure.png | Bin 0 -> 1386 bytes ...-mime-application-vnd.rn-realmedia-vbr.png | Bin 0 -> 1386 bytes ...nome-mime-application-vnd.rn-realmedia.png | Bin 0 -> 1386 bytes ...mime-application-vnd.stardivision.calc.png | Bin 0 -> 1178 bytes ...e-application-vnd.stardivision.impress.png | Bin 0 -> 1007 bytes ...me-application-vnd.stardivision.writer.png | Bin 0 -> 802 bytes ...nome-mime-application-vnd.sun.xml.calc.png | Bin 0 -> 1178 bytes ...-application-vnd.sun.xml.calc.template.png | Bin 0 -> 1382 bytes ...nome-mime-application-vnd.sun.xml.draw.png | Bin 0 -> 883 bytes ...-application-vnd.sun.xml.draw.template.png | Bin 0 -> 1247 bytes ...e-mime-application-vnd.sun.xml.impress.png | Bin 0 -> 1007 bytes ...plication-vnd.sun.xml.impress.template.png | Bin 0 -> 1296 bytes ...me-mime-application-vnd.sun.xml.writer.png | Bin 0 -> 802 bytes ...pplication-vnd.sun.xml.writer.template.png | Bin 0 -> 1190 bytes .../gnome-mime-application-wordperfect.png | Bin 0 -> 802 bytes ...gnome-mime-application-x-7z-compressed.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-abiword.png | Bin 0 -> 802 bytes ...-mime-application-x-applix-spreadsheet.png | Bin 0 -> 1178 bytes .../gnome-mime-application-x-applix-word.png | Bin 0 -> 802 bytes .../gnome-mime-application-x-archive.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-arj.png | Bin 0 -> 847 bytes ...mime-application-x-bzip-compressed-tar.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-bzip.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-compress.png | Bin 0 -> 847 bytes ...nome-mime-application-x-compressed-tar.png | Bin 0 -> 847 bytes ...ome-mime-application-x-cpio-compressed.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-cpio.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-deb.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-dvi.png | Bin 0 -> 802 bytes .../gnome-mime-application-x-executable.png | Bin 0 -> 1198 bytes .../gnome-mime-application-x-font-afm.png | Bin 0 -> 1057 bytes .../gnome-mime-application-x-font-bdf.png | Bin 0 -> 1057 bytes ...nome-mime-application-x-font-linux-psf.png | Bin 0 -> 1057 bytes .../gnome-mime-application-x-font-pcf.png | Bin 0 -> 1057 bytes ...ome-mime-application-x-font-sunos-news.png | Bin 0 -> 1057 bytes .../gnome-mime-application-x-font-ttf.png | Bin 0 -> 1057 bytes .../gnome-mime-application-x-gnumeric.png | Bin 0 -> 1178 bytes .../gnome-mime-application-x-gzip.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-gzpostscript.png | Bin 0 -> 802 bytes .../gnome-mime-application-x-jar.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-killustrator.png | Bin 0 -> 1063 bytes .../gnome-mime-application-x-kpresenter.png | Bin 0 -> 1007 bytes .../gnome-mime-application-x-kspread.png | Bin 0 -> 1178 bytes .../gnome-mime-application-x-kword.png | Bin 0 -> 802 bytes .../gnome-mime-application-x-lha.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-lhz.png | Bin 0 -> 847 bytes ...mime-application-x-lzma-compressed-tar.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-lzma.png | Bin 0 -> 847 bytes ...e-mime-application-x-ms-dos-executable.png | Bin 0 -> 1198 bytes .../gnome-mime-application-x-perl.png | Bin 0 -> 1009 bytes .../gnome-mime-application-x-php.png | Bin 0 -> 1256 bytes ...ome-mime-application-x-python-bytecode.png | Bin 0 -> 1009 bytes .../gnome-mime-application-x-rar.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-rpm.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-scribus.png | Bin 0 -> 802 bytes .../gnome-mime-application-x-shellscript.png | Bin 0 -> 1009 bytes ...ome-mime-application-x-shockwave-flash.png | Bin 0 -> 1386 bytes .../gnome-mime-application-x-stuffit.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-tar.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-tarz.png | Bin 0 -> 847 bytes .../gnome-mime-application-x-tex.png | Bin 0 -> 802 bytes .../gnome-mime-application-xhtml+xml.png | Bin 0 -> 1256 bytes .../mimetypes/gnome-mime-application-zip.png | Bin 0 -> 847 bytes .../Umami/Icon/mimetypes/gnome-mime-audio.png | Bin 0 -> 1124 bytes .../Umami/Icon/mimetypes/gnome-mime-image.png | Bin 0 -> 1063 bytes .../Icon/mimetypes/gnome-mime-text-html.png | Bin 0 -> 1256 bytes .../mimetypes/gnome-mime-text-vnd.wap.wml.png | Bin 0 -> 1256 bytes .../Icon/mimetypes/gnome-mime-text-x-csh.png | Bin 0 -> 1009 bytes .../mimetypes/gnome-mime-text-x-python.png | Bin 0 -> 1009 bytes .../Icon/mimetypes/gnome-mime-text-x-sh.png | Bin 0 -> 1009 bytes .../mimetypes/gnome-mime-text-x-vcalendar.png | Bin 0 -> 1212 bytes .../mimetypes/gnome-mime-text-x-vcard.png | Bin 0 -> 1019 bytes .../Icon/mimetypes/gnome-mime-text-x-zsh.png | Bin 0 -> 1009 bytes .../Umami/Icon/mimetypes/gnome-mime-text.png | Bin 0 -> 651 bytes .../Umami/Icon/mimetypes/gnome-mime-video.png | Bin 0 -> 1386 bytes .../Icon/mimetypes/gnome-mime-x-font-afm.png | Bin 0 -> 1057 bytes .../Umami/Icon/mimetypes/gnome-package.png | Bin 0 -> 847 bytes Media/Themes/Umami/Icon/mimetypes/html.png | Bin 0 -> 1256 bytes .../Umami/Icon/mimetypes/image-x-generic.png | Bin 0 -> 1063 bytes Media/Themes/Umami/Icon/mimetypes/image.png | Bin 0 -> 1063 bytes .../Umami/Icon/mimetypes/kpresenter_kpr.png | Bin 0 -> 1007 bytes .../Umami/Icon/mimetypes/mime_ascii.png | Bin 0 -> 651 bytes Media/Themes/Umami/Icon/mimetypes/misc.png | Bin 0 -> 651 bytes .../Icon/mimetypes/package-x-generic.png | Bin 0 -> 847 bytes Media/Themes/Umami/Icon/mimetypes/package.png | Bin 0 -> 847 bytes .../Umami/Icon/mimetypes/package_editors.png | Bin 0 -> 651 bytes .../Icon/mimetypes/package_wordprocessing.png | Bin 0 -> 802 bytes Media/Themes/Umami/Icon/mimetypes/plan.png | Bin 0 -> 1212 bytes Media/Themes/Umami/Icon/mimetypes/rpm.png | Bin 0 -> 847 bytes .../Umami/Icon/mimetypes/shellscript.png | Bin 0 -> 1009 bytes Media/Themes/Umami/Icon/mimetypes/sound.png | Bin 0 -> 1124 bytes .../Umami/Icon/mimetypes/spreadsheet.png | Bin 0 -> 1178 bytes .../Icon/mimetypes/stock_addressbook.png | Bin 0 -> 1019 bytes .../Umami/Icon/mimetypes/stock_calendar.png | Bin 0 -> 1212 bytes .../Icon/mimetypes/stock_certificate.png | Bin 0 -> 1440 bytes .../Umami/Icon/mimetypes/stock_script.png | Bin 0 -> 1009 bytes Media/Themes/Umami/Icon/mimetypes/tar.png | Bin 0 -> 847 bytes .../Umami/Icon/mimetypes/template_source.png | Bin 0 -> 747 bytes .../Themes/Umami/Icon/mimetypes/text-html.png | Bin 0 -> 1256 bytes .../mimetypes/text-x-generic-template.png | Bin 0 -> 747 bytes .../Umami/Icon/mimetypes/text-x-generic.png | Bin 0 -> 651 bytes .../Umami/Icon/mimetypes/text-x-script.png | Bin 0 -> 1009 bytes Media/Themes/Umami/Icon/mimetypes/tgz.png | Bin 0 -> 847 bytes Media/Themes/Umami/Icon/mimetypes/txt.png | Bin 0 -> 651 bytes Media/Themes/Umami/Icon/mimetypes/txt2.png | Bin 0 -> 651 bytes Media/Themes/Umami/Icon/mimetypes/unknown.png | Bin 0 -> 651 bytes .../Themes/Umami/Icon/mimetypes/vcalendar.png | Bin 0 -> 1212 bytes Media/Themes/Umami/Icon/mimetypes/vcard.png | Bin 0 -> 1019 bytes .../Umami/Icon/mimetypes/video-x-generic.png | Bin 0 -> 1386 bytes Media/Themes/Umami/Icon/mimetypes/video.png | Bin 0 -> 1386 bytes .../Umami/Icon/mimetypes/wordprocessing.png | Bin 0 -> 802 bytes Media/Themes/Umami/Icon/mimetypes/www.png | Bin 0 -> 1256 bytes .../Icon/mimetypes/x-office-address-book.png | Bin 0 -> 1019 bytes .../Icon/mimetypes/x-office-calendar.png | Bin 0 -> 1212 bytes .../mimetypes/x-office-document-template.png | Bin 0 -> 1190 bytes .../Icon/mimetypes/x-office-document.png | Bin 0 -> 802 bytes .../mimetypes/x-office-drawing-template.png | Bin 0 -> 1247 bytes .../Umami/Icon/mimetypes/x-office-drawing.png | Bin 0 -> 883 bytes .../x-office-presentation-template.png | Bin 0 -> 1296 bytes .../Icon/mimetypes/x-office-presentation.png | Bin 0 -> 1007 bytes .../x-office-spreadsheet-template.png | Bin 0 -> 1382 bytes .../Icon/mimetypes/x-office-spreadsheet.png | Bin 0 -> 1178 bytes Media/Themes/Umami/Icon/mimetypes/zip.png | Bin 0 -> 847 bytes .../application-x-gnome-saved-search.png | Bin 0 -> 1207 bytes Media/Themes/Umami/Icon/places/desktop.png | Bin 0 -> 1109 bytes .../Umami/Icon/places/distributor-logo.png | Bin 0 -> 1119 bytes Media/Themes/Umami/Icon/places/emptytrash.png | Bin 0 -> 1323 bytes .../Umami/Icon/places/folder-remote.png | Bin 0 -> 1128 bytes .../Umami/Icon/places/folder-saved-search.png | Bin 0 -> 1207 bytes Media/Themes/Umami/Icon/places/folder.png | Bin 0 -> 1008 bytes .../Themes/Umami/Icon/places/folder_home.png | Bin 0 -> 1114 bytes .../Umami/Icon/places/gnome-fs-desktop.png | Bin 0 -> 1109 bytes .../Umami/Icon/places/gnome-fs-directory.png | Bin 0 -> 1008 bytes .../Themes/Umami/Icon/places/gnome-fs-ftp.png | Bin 0 -> 1128 bytes .../Umami/Icon/places/gnome-fs-home.png | Bin 0 -> 1114 bytes .../Umami/Icon/places/gnome-fs-network.png | Bin 0 -> 1071 bytes .../Themes/Umami/Icon/places/gnome-fs-nfs.png | Bin 0 -> 1128 bytes .../Umami/Icon/places/gnome-fs-server.png | Bin 0 -> 1021 bytes .../Umami/Icon/places/gnome-fs-share.png | Bin 0 -> 1128 bytes .../Themes/Umami/Icon/places/gnome-fs-smb.png | Bin 0 -> 1128 bytes .../Themes/Umami/Icon/places/gnome-fs-ssh.png | Bin 0 -> 1128 bytes .../Icon/places/gnome-fs-trash-empty.png | Bin 0 -> 1323 bytes .../Umami/Icon/places/gnome-main-menu.png | Bin 0 -> 1119 bytes .../gnome-mime-x-directory-nfs-server.png | Bin 0 -> 1021 bytes .../gnome-mime-x-directory-smb-server.png | Bin 0 -> 1021 bytes .../gnome-mime-x-directory-smb-share.png | Bin 0 -> 1128 bytes .../gnome-mime-x-directory-smb-workgroup.png | Bin 0 -> 1071 bytes .../Umami/Icon/places/gnome-stock-trash.png | Bin 0 -> 1323 bytes .../Umami/Icon/places/gtk-directory.png | Bin 0 -> 1008 bytes .../Themes/Umami/Icon/places/gtk-network.png | Bin 0 -> 1071 bytes .../Umami/Icon/places/inode-directory.png | Bin 0 -> 1008 bytes .../Umami/Icon/places/network-server.png | Bin 0 -> 1021 bytes .../Umami/Icon/places/network-workgroup.png | Bin 0 -> 1071 bytes Media/Themes/Umami/Icon/places/network.png | Bin 0 -> 1128 bytes .../Umami/Icon/places/network_local.png | Bin 0 -> 1071 bytes .../Umami/Icon/places/novell-button.png | Bin 0 -> 1119 bytes .../Icon/places/redhat-network-server.png | Bin 0 -> 1021 bytes Media/Themes/Umami/Icon/places/server.png | Bin 0 -> 1021 bytes Media/Themes/Umami/Icon/places/start-here.png | Bin 0 -> 1119 bytes .../Themes/Umami/Icon/places/stock_folder.png | Bin 0 -> 1008 bytes .../Umami/Icon/places/trashcan_empty.png | Bin 0 -> 1323 bytes .../Themes/Umami/Icon/places/user-desktop.png | Bin 0 -> 1109 bytes Media/Themes/Umami/Icon/places/user-home.png | Bin 0 -> 1114 bytes Media/Themes/Umami/Icon/places/user-trash.png | Bin 0 -> 1323 bytes .../Umami/Icon/places/xfce-trash_empty.png | Bin 0 -> 1323 bytes .../Umami/Icon/status/audio-volume-high.png | Bin 0 -> 1161 bytes .../Umami/Icon/status/audio-volume-low.png | Bin 0 -> 888 bytes .../Umami/Icon/status/audio-volume-medium.png | Bin 0 -> 1008 bytes .../Umami/Icon/status/audio-volume-muted.png | Bin 0 -> 1044 bytes .../Umami/Icon/status/battery-caution.png | Bin 0 -> 1244 bytes .../Umami/Icon/status/connect_creating.png | Bin 0 -> 906 bytes .../Umami/Icon/status/connect_established.png | Bin 0 -> 901 bytes Media/Themes/Umami/Icon/status/connect_no.png | Bin 0 -> 753 bytes .../Themes/Umami/Icon/status/dialog-error.png | Bin 0 -> 1075 bytes .../Umami/Icon/status/dialog-information.png | Bin 0 -> 1352 bytes .../Umami/Icon/status/dialog-warning.png | Bin 0 -> 1079 bytes Media/Themes/Umami/Icon/status/edittrash.png | Bin 0 -> 1589 bytes Media/Themes/Umami/Icon/status/error.png | Bin 0 -> 1075 bytes .../Umami/Icon/status/folder-drag-accept.png | Bin 0 -> 1041 bytes .../Themes/Umami/Icon/status/folder-open.png | Bin 0 -> 1073 bytes .../Umami/Icon/status/folder-visiting.png | Bin 0 -> 792 bytes .../Themes/Umami/Icon/status/folder_open.png | Bin 0 -> 1073 bytes .../status/gnome-dev-wavelan-encrypted.png | Bin 0 -> 1309 bytes .../Icon/status/gnome-fs-directory-accept.png | Bin 0 -> 1041 bytes .../status/gnome-fs-directory-visiting.png | Bin 0 -> 792 bytes .../Icon/status/gnome-fs-loading-icon.png | Bin 0 -> 955 bytes .../Umami/Icon/status/gnome-fs-trash-full.png | Bin 0 -> 1589 bytes .../Icon/status/gnome-netstatus-disconn.png | Bin 0 -> 753 bytes .../Icon/status/gnome-netstatus-error.png | Bin 0 -> 1138 bytes .../Icon/status/gnome-netstatus-idle.png | Bin 0 -> 901 bytes .../Umami/Icon/status/gnome-netstatus-rx.png | Bin 0 -> 1027 bytes .../Umami/Icon/status/gnome-netstatus-tx.png | Bin 0 -> 1030 bytes .../Icon/status/gnome-netstatus-txrx.png | Bin 0 -> 906 bytes .../Icon/status/gnome-stock-trash-full.png | Bin 0 -> 1589 bytes .../Umami/Icon/status/gtk-dialog-error.png | Bin 0 -> 1075 bytes .../Umami/Icon/status/gtk-dialog-info.png | Bin 0 -> 1352 bytes .../Umami/Icon/status/gtk-dialog-warning.png | Bin 0 -> 1079 bytes .../Umami/Icon/status/gtk-directory.png | Bin 0 -> 1073 bytes .../Umami/Icon/status/gtk-missing-image.png | Bin 0 -> 808 bytes .../Umami/Icon/status/image-loading.png | Bin 0 -> 955 bytes .../Umami/Icon/status/image-missing.png | Bin 0 -> 808 bytes Media/Themes/Umami/Icon/status/important.png | Bin 0 -> 1079 bytes Media/Themes/Umami/Icon/status/info.png | Bin 0 -> 1352 bytes .../Umami/Icon/status/mail-attachment.png | Bin 0 -> 1324 bytes .../Umami/Icon/status/messagebox_critical.png | Bin 0 -> 1075 bytes .../Icon/status/messagebox_critical_16x16.png | Bin 0 -> 1053 bytes .../Umami/Icon/status/messagebox_info.png | Bin 0 -> 1352 bytes .../Icon/status/messagebox_info_16x16.png | Bin 0 -> 1123 bytes .../Umami/Icon/status/messagebox_warning.png | Bin 0 -> 1079 bytes .../Icon/status/messagebox_warning_16x16.png | Bin 0 -> 1047 bytes .../Umami/Icon/status/network-error.png | Bin 0 -> 1138 bytes .../Themes/Umami/Icon/status/network-idle.png | Bin 0 -> 901 bytes .../Umami/Icon/status/network-offline.png | Bin 0 -> 753 bytes .../Umami/Icon/status/network-receive.png | Bin 0 -> 1027 bytes .../Icon/status/network-transmit-receive.png | Bin 0 -> 906 bytes .../Umami/Icon/status/network-transmit.png | Bin 0 -> 1030 bytes .../status/network-wireless-encrypted.png | Bin 0 -> 1309 bytes .../Umami/Icon/status/nm-no-connection.png | Bin 0 -> 753 bytes .../Umami/Icon/status/printer-error.png | Bin 0 -> 1169 bytes .../Icon/status/software-update-available.png | Bin 0 -> 1363 bytes .../Icon/status/software-update-urgent.png | Bin 0 -> 1036 bytes .../Themes/Umami/Icon/status/stock_attach.png | Bin 0 -> 1324 bytes .../Umami/Icon/status/stock_dialog-error.png | Bin 0 -> 1075 bytes .../Umami/Icon/status/stock_dialog-info.png | Bin 0 -> 1352 bytes .../Icon/status/stock_dialog-warning.png | Bin 0 -> 1079 bytes Media/Themes/Umami/Icon/status/stock_open.png | Bin 0 -> 1073 bytes .../Umami/Icon/status/stock_trash_full.png | Bin 0 -> 1589 bytes .../Umami/Icon/status/stock_volume-0.png | Bin 0 -> 888 bytes .../Umami/Icon/status/stock_volume-max.png | Bin 0 -> 1161 bytes .../Umami/Icon/status/stock_volume-med.png | Bin 0 -> 1008 bytes .../Umami/Icon/status/stock_volume-min.png | Bin 0 -> 888 bytes .../Umami/Icon/status/stock_volume-mute.png | Bin 0 -> 1044 bytes .../Themes/Umami/Icon/status/stock_volume.png | Bin 0 -> 1161 bytes .../Icon/status/stock_weather-cloudy.png | Bin 0 -> 1078 bytes .../Icon/status/stock_weather-few-clouds.png | Bin 0 -> 1277 bytes .../Icon/status/stock_weather-night-clear.png | Bin 0 -> 1079 bytes .../status/stock_weather-night-few-clouds.png | Bin 0 -> 1269 bytes .../Icon/status/stock_weather-showers.png | Bin 0 -> 1527 bytes .../Umami/Icon/status/stock_weather-snow.png | Bin 0 -> 1507 bytes .../Umami/Icon/status/stock_weather-storm.png | Bin 0 -> 1598 bytes .../Umami/Icon/status/stock_weather-sunny.png | Bin 0 -> 1079 bytes Media/Themes/Umami/Icon/status/sunny.png | Bin 0 -> 1079 bytes .../Umami/Icon/status/trashcan_full.png | Bin 0 -> 1589 bytes .../Umami/Icon/status/user-trash-full.png | Bin 0 -> 1589 bytes .../Umami/Icon/status/weather-clear-night.png | Bin 0 -> 1079 bytes .../Umami/Icon/status/weather-clear.png | Bin 0 -> 1079 bytes .../Icon/status/weather-few-clouds-night.png | Bin 0 -> 1269 bytes .../Umami/Icon/status/weather-few-clouds.png | Bin 0 -> 1277 bytes .../Umami/Icon/status/weather-overcast.png | Bin 0 -> 1078 bytes .../Icon/status/weather-severe-alert.png | Bin 0 -> 1440 bytes .../Icon/status/weather-showers-scattered.png | Bin 0 -> 1442 bytes .../Umami/Icon/status/weather-showers.png | Bin 0 -> 1527 bytes .../Themes/Umami/Icon/status/weather-snow.png | Bin 0 -> 1507 bytes .../Umami/Icon/status/weather-storm.png | Bin 0 -> 1598 bytes .../Umami/Icon/status/xfce-trash_full.png | Bin 0 -> 1589 bytes Media/Themes/Umami/Pointer/alternate.png | Bin 0 -> 922 bytes Media/Themes/Umami/Pointer/cross.png | Bin 0 -> 632 bytes Media/Themes/Umami/Pointer/dgn1.png | Bin 0 -> 951 bytes Media/Themes/Umami/Pointer/dgn2.png | Bin 0 -> 952 bytes Media/Themes/Umami/Pointer/help.png | Bin 0 -> 1346 bytes Media/Themes/Umami/Pointer/horz.png | Bin 0 -> 1064 bytes Media/Themes/Umami/Pointer/link.png | Bin 0 -> 999 bytes Media/Themes/Umami/Pointer/move.png | Bin 0 -> 1102 bytes Media/Themes/Umami/Pointer/pen.png | Bin 0 -> 1253 bytes Media/Themes/Umami/Pointer/pointer.png | Bin 0 -> 960 bytes Media/Themes/Umami/Pointer/text.png | Bin 0 -> 5514 bytes Media/Themes/Umami/Pointer/unavailable.png | Bin 0 -> 1314 bytes Media/Themes/Umami/Pointer/vert.png | Bin 0 -> 1084 bytes Media/Themes/Umami/Pointer/wait.png | Bin 0 -> 7107 bytes Media/Themes/Umami/Theme.HC | 1635 + Media/Themes/Umami/Widget/checkbox.png | Bin 0 -> 233 bytes Media/Themes/Umami/Widget/checkbox_active.png | Bin 0 -> 231 bytes .../Themes/Umami/Widget/checkbox_checked.png | Bin 0 -> 259 bytes .../Umami/Widget/checkbox_checked_active.png | Bin 0 -> 261 bytes Media/Themes/Umami/Widget/horz_slider.png | Bin 0 -> 224 bytes Media/Themes/Umami/Widget/radio.png | Bin 0 -> 255 bytes Media/Themes/Umami/Widget/radio_active.png | Bin 0 -> 258 bytes Media/Themes/Umami/Widget/radio_selected.png | Bin 0 -> 285 bytes Media/Themes/Umami/Widget/sb_down_button.png | Bin 0 -> 115 bytes Media/Themes/Umami/Widget/sb_left_button.png | Bin 0 -> 116 bytes Media/Themes/Umami/Widget/sb_right_button.png | Bin 0 -> 114 bytes Media/Themes/Umami/Widget/sb_up_button.png | Bin 0 -> 115 bytes Media/Themes/Umami/Widget/vert_slider.png | Bin 0 -> 162 bytes Media/Themes/Umami/Window/corner_resize.png | Bin 0 -> 1426 bytes Media/Themes/Umami/Window/min_max_close.png | Bin 0 -> 650 bytes .../Umami/Window/min_max_close_pressed.png | Bin 0 -> 359 bytes Media/Themes/Umami/wallpaper.jpg | Bin 0 -> 527141 bytes Media/Themes/Umami/wallpaper_old.png | Bin 0 -> 1839928 bytes Run.HC | 3 + Settings/SystemMenu.json | 40 + System/Api/Dns.HC | 28 + System/Api/Icmp.HC | 32 + System/Api/Ipv4.HC | 9 + System/Api/MD5.HC | 144 + System/Api/NetInfo.HC | 32 + System/Api/Tcp.HC | 210 + System/Api/Tls.HC | 99 + System/Config/Net.json | 10 + System/Core/Compositor.HC | 1112 + System/Core/FileSystem.HC | 3 + System/Core/Menu.HC | 67 + System/Core/MessageBox.HC | 108 + System/Core/Scheduler.HC | 79 + System/Core/Shell.HC | 282 + System/Core/ShellCommands.HC | 13 + System/Core/SystemStarter.HC | 214 + System/Core/SystemTray.HC | 139 + System/Drivers/AC97.HC | 153 + System/Drivers/Audio.HC | 117 + System/Drivers/Display.HC | 26 + System/Drivers/Mouse.HC | 111 + System/Drivers/Pci.HC | 98 + System/Drivers/VMSVGA.HC | 255 + System/Drivers/VMwareTools.HC | 148 + System/Drivers/Virtio-blk.HC | 475 + System/FFI/Base.HC | 51 + System/FFI/ELF64.HC | 301 + System/FFI/LibC.HC | 324 + System/FFI/New.HC | 35 + System/Jakt/DC.HC | 288 + System/Jakt/IOPort.HC | 53 + System/Jakt/Input.HC | 72 + System/Jakt/OS.HC | 289 + System/Jakt/PCI.HC | 62 + System/Jakt/Time.HC | 37 + System/Jakt/Window.HC | 94 + System/Libraries/Animation2D.HC | 65 + System/Libraries/Audio.HC | 143 + System/Libraries/Base64.HC | 90 + System/Libraries/BitmapFont.HC | 146 + System/Libraries/Clipboard.HC | 125 + System/Libraries/Display.HC | 49 + System/Libraries/FileSystem.HC | 234 + System/Libraries/Function.HC | 28 + System/Libraries/Graphics2D.HC | 1428 + System/Libraries/Gui.HC | 398 + System/Libraries/Http.HC | 628 + System/Libraries/Image.HC | 55 + System/Libraries/Ipc.HC | 54 + System/Libraries/Json.HC | 1550 + System/Libraries/RawText.HC | 104 + System/Libraries/Rsa.HC | 46 + System/Libraries/Session.HC | 8 + System/Libraries/Sha256.HC | 235 + System/Libraries/Shell.HC | 52 + System/Libraries/Stdio.HC | 155 + System/Libraries/String.HC | 171 + System/Libraries/System.HC | 104 + System/Libraries/Theme.HC | 49 + System/Libraries/Tlse.HC | 115 + System/Libraries/User.HC | 10 + System/Libraries/Widget.HC | 834 + System/MakeSystem.HC | 103 + System/Setup/Environment.HC | 229 + System/Setup/Init.HC | 65 + System/Shell/Commands/aplay.HC | 35 + System/Shell/Commands/cat.HC | 19 + System/Shell/Commands/clear.HC | 9 + System/Shell/Commands/echo.HC | 10 + System/Shell/Commands/esh.HC | 5 + System/Shell/Commands/history.HC | 14 + System/Shell/Commands/ifconfig.HC | 47 + System/Shell/Commands/ls.HC | 70 + System/Shell/Commands/nslookup.HC | 32 + System/Shell/Commands/open.HC | 8 + System/Shell/Commands/ping.HC | 58 + System/Shell/Commands/poweroff.HC | 5 + System/Shell/Commands/pwd.HC | 7 + System/Shell/Commands/reboot.HC | 5 + System/Shell/Commands/sh.HC | 4 + System/Shell/Commands/uname.HC | 81 + System/Shell/Commands/whoami.HC | 28 + System/Shell/Commands/wpset.HC | 24 + System/Utilities/Dns.HC | 10 + System/Utilities/Image.HC | 414 + System/Utilities/NetRep.HC | 22 + System/Utilities/Ping.HC | 72 + System/Utilities/Time.HC | 92 + scripts/build-all | 191 + src/image/image.c | 209 + src/image/stb_image.h | 8634 ++++ src/image/stb_image_write.h | 1807 + src/libtemple/ioport.h | 6 + src/libtemple/libtemple.cpp | 77 + src/libtemple/os.h | 15 + src/libtemple/pci.h | 10 + src/libtemple/time.h | 4 + src/net/devices/virtio.h | 28 + src/net/devices/virtio.jakt | 143 + src/net/lib/json.jakt | 350 + src/net/lib/util.jakt | 147 + src/net/net.jakt | 173 + src/net/os/ioport.jakt | 29 + src/net/os/os.jakt | 154 + src/net/os/pci.jakt | 103 + src/net/os/time.jakt | 94 + src/net/tcpip.jakt | 1675 + src/tlse/LICENSE | 60 + src/tlse/libtomcrypt.c | 34766 ++++++++++++++++ src/tlse/tlse.c | 12374 ++++++ src/tlse/tlse.h | 472 + 1029 files changed, 78311 insertions(+) create mode 100644 .clang-format create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json create mode 100644 Applets/Calendar.applet/Run.HC create mode 100644 Applets/ClipManager.applet/Run.HC create mode 100644 Applets/NetworkStatus.applet/Run.HC create mode 100644 Applets/NetworkStatus.applet/window_icon_16x16.png create mode 100644 Applets/VolumeSlider.applet/Run.HC create mode 100644 Applications/Accessories/Calculator.app/Run.HC create mode 100644 Applications/Accessories/Calculator.app/window_icon_16x16.png create mode 100644 Applications/Accessories/Icon.png create mode 100644 Applications/OS/Icon.png create mode 100644 Applications/OS/MenuBar.app/Run.HC create mode 100644 Applications/OS/MenuBar.app/system_menu.png create mode 100644 Applications/OS/ShutDown.app/Icon.png create mode 100644 Applications/OS/ShutDown.app/Run.HC create mode 100644 Applications/OS/TaskSwitcher.app/Run.HC create mode 100644 Applications/OS/TempleOS.app/Run.HC create mode 100644 Applications/OS/TempleOS.app/window_icon_16x16.png create mode 100644 Applications/OS/Terminal.app/Icon.png create mode 100644 Applications/OS/Terminal.app/Run.HC create mode 100644 Applications/OS/Wallpaper.app/Run.HC create mode 100644 Applications/TestApplication.app/Run.HC create mode 100644 Include/Gui.HC create mode 100644 Media/Sounds/Beep.wav create mode 100644 Media/Themes/Umami/BitmapFont/menu.png create mode 100644 Media/Themes/Umami/BitmapFont/monospace.png create mode 100644 Media/Themes/Umami/BitmapFont/sans.png create mode 100644 Media/Themes/Umami/Icon/actions/add.png create mode 100644 Media/Themes/Umami/Icon/actions/address-book-new.png create mode 100644 Media/Themes/Umami/Icon/actions/appointment-new.png create mode 100644 Media/Themes/Umami/Icon/actions/appointment.png create mode 100644 Media/Themes/Umami/Icon/actions/back.png create mode 100644 Media/Themes/Umami/Icon/actions/bookmark-new.png create mode 100644 Media/Themes/Umami/Icon/actions/bookmark_add.png create mode 100644 Media/Themes/Umami/Icon/actions/bookmarks_list_add.png create mode 100644 Media/Themes/Umami/Icon/actions/bottom.png create mode 100644 Media/Themes/Umami/Icon/actions/centrejust.png create mode 100644 Media/Themes/Umami/Icon/actions/contact-new.png create mode 100644 Media/Themes/Umami/Icon/actions/document-new.png create mode 100644 Media/Themes/Umami/Icon/actions/document-open.png create mode 100644 Media/Themes/Umami/Icon/actions/document-print-preview.png create mode 100644 Media/Themes/Umami/Icon/actions/document-print.png create mode 100644 Media/Themes/Umami/Icon/actions/document-properties.png create mode 100644 Media/Themes/Umami/Icon/actions/document-save-as.png create mode 100644 Media/Themes/Umami/Icon/actions/document-save.png create mode 100644 Media/Themes/Umami/Icon/actions/down.png create mode 100644 Media/Themes/Umami/Icon/actions/edit-clear.png create mode 100644 Media/Themes/Umami/Icon/actions/edit-copy.png create mode 100644 Media/Themes/Umami/Icon/actions/edit-cut.png create mode 100644 Media/Themes/Umami/Icon/actions/edit-delete.png create mode 100644 Media/Themes/Umami/Icon/actions/edit-find-replace.png create mode 100644 Media/Themes/Umami/Icon/actions/edit-find.png create mode 100644 Media/Themes/Umami/Icon/actions/edit-paste.png create mode 100644 Media/Themes/Umami/Icon/actions/edit-redo.png create mode 100644 Media/Themes/Umami/Icon/actions/edit-select-all.png create mode 100644 Media/Themes/Umami/Icon/actions/edit-undo.png create mode 100644 Media/Themes/Umami/Icon/actions/editclear.png create mode 100644 Media/Themes/Umami/Icon/actions/editcopy.png create mode 100644 Media/Themes/Umami/Icon/actions/editcut.png create mode 100644 Media/Themes/Umami/Icon/actions/editdelete.png create mode 100644 Media/Themes/Umami/Icon/actions/editpaste.png create mode 100644 Media/Themes/Umami/Icon/actions/exit.png create mode 100644 Media/Themes/Umami/Icon/actions/filefind.png create mode 100644 Media/Themes/Umami/Icon/actions/filenew.png create mode 100644 Media/Themes/Umami/Icon/actions/fileopen.png create mode 100644 Media/Themes/Umami/Icon/actions/fileprint.png create mode 100644 Media/Themes/Umami/Icon/actions/filequickprint.png create mode 100644 Media/Themes/Umami/Icon/actions/filesave.png create mode 100644 Media/Themes/Umami/Icon/actions/filesaveas.png create mode 100644 Media/Themes/Umami/Icon/actions/find.png create mode 100644 Media/Themes/Umami/Icon/actions/finish.png create mode 100644 Media/Themes/Umami/Icon/actions/folder-new.png create mode 100644 Media/Themes/Umami/Icon/actions/folder_new.png create mode 100644 Media/Themes/Umami/Icon/actions/format-indent-less.png create mode 100644 Media/Themes/Umami/Icon/actions/format-indent-more.png create mode 100644 Media/Themes/Umami/Icon/actions/format-justify-center.png create mode 100644 Media/Themes/Umami/Icon/actions/format-justify-fill.png create mode 100644 Media/Themes/Umami/Icon/actions/format-justify-left.png create mode 100644 Media/Themes/Umami/Icon/actions/format-justify-right.png create mode 100644 Media/Themes/Umami/Icon/actions/format-text-bold.png create mode 100644 Media/Themes/Umami/Icon/actions/format-text-italic.png create mode 100644 Media/Themes/Umami/Icon/actions/format-text-strikethrough.png create mode 100644 Media/Themes/Umami/Icon/actions/format-text-underline.png create mode 100644 Media/Themes/Umami/Icon/actions/forward.png create mode 100644 Media/Themes/Umami/Icon/actions/gnome-lockscreen.png create mode 100644 Media/Themes/Umami/Icon/actions/gnome-logout.png create mode 100644 Media/Themes/Umami/Icon/actions/gnome-searchtool.png create mode 100644 Media/Themes/Umami/Icon/actions/gnome-session-logout.png create mode 100644 Media/Themes/Umami/Icon/actions/gnome-shutdown.png create mode 100644 Media/Themes/Umami/Icon/actions/gnome-stock-mail-fwd.png create mode 100644 Media/Themes/Umami/Icon/actions/gnome-stock-mail-new.png create mode 100644 Media/Themes/Umami/Icon/actions/gnome-stock-mail-rpl.png create mode 100644 Media/Themes/Umami/Icon/actions/gnome-stock-text-indent.png create mode 100644 Media/Themes/Umami/Icon/actions/gnome-stock-text-unindent.png create mode 100644 Media/Themes/Umami/Icon/actions/go-bottom.png create mode 100644 Media/Themes/Umami/Icon/actions/go-down.png create mode 100644 Media/Themes/Umami/Icon/actions/go-first.png create mode 100644 Media/Themes/Umami/Icon/actions/go-home.png create mode 100644 Media/Themes/Umami/Icon/actions/go-jump.png create mode 100644 Media/Themes/Umami/Icon/actions/go-last.png create mode 100644 Media/Themes/Umami/Icon/actions/go-next.png create mode 100644 Media/Themes/Umami/Icon/actions/go-previous.png create mode 100644 Media/Themes/Umami/Icon/actions/go-top.png create mode 100644 Media/Themes/Umami/Icon/actions/go-up.png create mode 100644 Media/Themes/Umami/Icon/actions/gohome.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-add.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-bold.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-cancel.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-clear.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-copy.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-cut.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-delete.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-find-and-replace.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-find.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-fullscreen.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-go-back-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-go-back-rtl.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-go-down.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-go-forward-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-go-forward-rtl.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-go-up.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-goto-bottom.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-goto-first-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-goto-first-rtl.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-goto-last-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-goto-last-rtl.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-goto-top.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-home.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-indent-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-indent-rtl.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-italic.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-jump-to-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-jump-to-rtl.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-justify-center.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-justify-fill.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-justify-left.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-justify-right.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-media-forward-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-media-forward-rtl.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-media-next-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-media-next-rtl.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-media-pause.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-media-play-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-media-previous-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-media-previous-rtl.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-media-record.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-media-rewind-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-media-rewind-rtl.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-media-stop.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-new.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-open.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-paste.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-print-preview.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-print.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-properties.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-redo-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-refresh.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-remove.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-save-as.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-save.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-select-all.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-stop.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-strikethrough.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-underline.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-undo-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-unindent-ltr.png create mode 100644 Media/Themes/Umami/Icon/actions/gtk-unindent-rtl.png create mode 100644 Media/Themes/Umami/Icon/actions/kfind.png create mode 100644 Media/Themes/Umami/Icon/actions/kfm_home.png create mode 100644 Media/Themes/Umami/Icon/actions/leftjust.png create mode 100644 Media/Themes/Umami/Icon/actions/list-add.png create mode 100644 Media/Themes/Umami/Icon/actions/list-remove.png create mode 100644 Media/Themes/Umami/Icon/actions/lock.png create mode 100644 Media/Themes/Umami/Icon/actions/mail-forward.png create mode 100644 Media/Themes/Umami/Icon/actions/mail-mark-junk.png create mode 100644 Media/Themes/Umami/Icon/actions/mail-mark-not-junk.png create mode 100644 Media/Themes/Umami/Icon/actions/mail-message-new.png create mode 100644 Media/Themes/Umami/Icon/actions/mail-reply-all.png create mode 100644 Media/Themes/Umami/Icon/actions/mail-reply-sender.png create mode 100644 Media/Themes/Umami/Icon/actions/mail-send-receive.png create mode 100644 Media/Themes/Umami/Icon/actions/mail_forward.png create mode 100644 Media/Themes/Umami/Icon/actions/mail_new.png create mode 100644 Media/Themes/Umami/Icon/actions/mail_reply.png create mode 100644 Media/Themes/Umami/Icon/actions/mail_replyall.png create mode 100644 Media/Themes/Umami/Icon/actions/mail_spam.png create mode 100644 Media/Themes/Umami/Icon/actions/media-eject.png create mode 100644 Media/Themes/Umami/Icon/actions/media-playback-pause.png create mode 100644 Media/Themes/Umami/Icon/actions/media-playback-start.png create mode 100644 Media/Themes/Umami/Icon/actions/media-playback-stop.png create mode 100644 Media/Themes/Umami/Icon/actions/media-record.png create mode 100644 Media/Themes/Umami/Icon/actions/media-seek-backward.png create mode 100644 Media/Themes/Umami/Icon/actions/media-seek-forward.png create mode 100644 Media/Themes/Umami/Icon/actions/media-skip-backward.png create mode 100644 Media/Themes/Umami/Icon/actions/media-skip-forward.png create mode 100644 Media/Themes/Umami/Icon/actions/next.png create mode 100644 Media/Themes/Umami/Icon/actions/player_eject.png create mode 100644 Media/Themes/Umami/Icon/actions/player_end.png create mode 100644 Media/Themes/Umami/Icon/actions/player_fwd.png create mode 100644 Media/Themes/Umami/Icon/actions/player_pause.png create mode 100644 Media/Themes/Umami/Icon/actions/player_play.png create mode 100644 Media/Themes/Umami/Icon/actions/player_record.png create mode 100644 Media/Themes/Umami/Icon/actions/player_rew.png create mode 100644 Media/Themes/Umami/Icon/actions/player_start.png create mode 100644 Media/Themes/Umami/Icon/actions/player_stop.png create mode 100644 Media/Themes/Umami/Icon/actions/previous.png create mode 100644 Media/Themes/Umami/Icon/actions/process-stop.png create mode 100644 Media/Themes/Umami/Icon/actions/redhat-home.png create mode 100644 Media/Themes/Umami/Icon/actions/redo.png create mode 100644 Media/Themes/Umami/Icon/actions/reload.png create mode 100644 Media/Themes/Umami/Icon/actions/reload3.png create mode 100644 Media/Themes/Umami/Icon/actions/reload_all_tabs.png create mode 100644 Media/Themes/Umami/Icon/actions/reload_page.png create mode 100644 Media/Themes/Umami/Icon/actions/remove.png create mode 100644 Media/Themes/Umami/Icon/actions/rightjust.png create mode 100644 Media/Themes/Umami/Icon/actions/search.png create mode 100644 Media/Themes/Umami/Icon/actions/start.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_add-bookmark.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_bottom.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_copy.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_cut.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_delete.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_down.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_file-properites.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_first.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_fullscreen.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_help-add-bookmark.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_home.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_last.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_left.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_mail-compose.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_mail-forward.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_mail-reply-to-all.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_mail-reply.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_mail-send-receive.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_media-fwd.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_media-next.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_media-pause.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_media-play.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_media-prev.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_media-rec.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_media-rew.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_media-stop.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_new-address-book.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_new-appointment.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_new-bcard.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_new-dir.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_new-tab.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_new-text.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_new-window.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_not-spam.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_paste.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_print-preview.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_print.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_properties.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_redo.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_refresh.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_right.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_save-as.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_save.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_search-and-replace.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_search.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_select-all.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_spam.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_stop.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_text-strikethrough.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_text_bold.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_text_center.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_text_indent.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_text_italic.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_text_justify.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_text_left.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_text_right.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_text_underlined.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_text_unindent.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_top.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_undo.png create mode 100644 Media/Themes/Umami/Icon/actions/stock_up.png create mode 100644 Media/Themes/Umami/Icon/actions/stop.png create mode 100644 Media/Themes/Umami/Icon/actions/system-lock-screen.png create mode 100644 Media/Themes/Umami/Icon/actions/system-log-out.png create mode 100644 Media/Themes/Umami/Icon/actions/system-search.png create mode 100644 Media/Themes/Umami/Icon/actions/system-shutdown.png create mode 100644 Media/Themes/Umami/Icon/actions/tab-new.png create mode 100644 Media/Themes/Umami/Icon/actions/tab_new.png create mode 100644 Media/Themes/Umami/Icon/actions/text_bold.png create mode 100644 Media/Themes/Umami/Icon/actions/text_italic.png create mode 100644 Media/Themes/Umami/Icon/actions/text_strike.png create mode 100644 Media/Themes/Umami/Icon/actions/text_under.png create mode 100644 Media/Themes/Umami/Icon/actions/top.png create mode 100644 Media/Themes/Umami/Icon/actions/undo.png create mode 100644 Media/Themes/Umami/Icon/actions/up.png create mode 100644 Media/Themes/Umami/Icon/actions/view-fullscreen.png create mode 100644 Media/Themes/Umami/Icon/actions/view-refresh.png create mode 100644 Media/Themes/Umami/Icon/actions/window-new.png create mode 100644 Media/Themes/Umami/Icon/actions/window_fullscreen.png create mode 100644 Media/Themes/Umami/Icon/actions/window_new.png create mode 100644 Media/Themes/Umami/Icon/actions/xfce-system-lock.png create mode 100644 Media/Themes/Umami/Icon/apps/access.png create mode 100644 Media/Themes/Umami/Icon/apps/accessibility-directory.png create mode 100644 Media/Themes/Umami/Icon/apps/accessories-calculator.png create mode 100644 Media/Themes/Umami/Icon/apps/accessories-character-map.png create mode 100644 Media/Themes/Umami/Icon/apps/accessories-text-editor.png create mode 100644 Media/Themes/Umami/Icon/apps/background.png create mode 100644 Media/Themes/Umami/Icon/apps/browser.png create mode 100644 Media/Themes/Umami/Icon/apps/calc.png create mode 100644 Media/Themes/Umami/Icon/apps/config-language.png create mode 100644 Media/Themes/Umami/Icon/apps/config-users.png create mode 100644 Media/Themes/Umami/Icon/apps/date.png create mode 100644 Media/Themes/Umami/Icon/apps/email.png create mode 100644 Media/Themes/Umami/Icon/apps/file-manager.png create mode 100644 Media/Themes/Umami/Icon/apps/fonts.png create mode 100644 Media/Themes/Umami/Icon/apps/gnome-calculator.png create mode 100644 Media/Themes/Umami/Icon/apps/gnome-character-map.png create mode 100644 Media/Themes/Umami/Icon/apps/gnome-help.png create mode 100644 Media/Themes/Umami/Icon/apps/gnome-monitor.png create mode 100644 Media/Themes/Umami/Icon/apps/gnome-remote-desktop.png create mode 100644 Media/Themes/Umami/Icon/apps/gnome-session.png create mode 100644 Media/Themes/Umami/Icon/apps/gnome-settings-accessibility-technologies.png create mode 100644 Media/Themes/Umami/Icon/apps/gnome-settings-background.png create mode 100644 Media/Themes/Umami/Icon/apps/gnome-settings-font.png create mode 100644 Media/Themes/Umami/Icon/apps/gnome-settings-keybindings.png create mode 100644 Media/Themes/Umami/Icon/apps/gnome-settings-theme.png create mode 100644 Media/Themes/Umami/Icon/apps/gnome-terminal.png create mode 100644 Media/Themes/Umami/Icon/apps/gnome-window-manager.png create mode 100644 Media/Themes/Umami/Icon/apps/gucharmap.png create mode 100644 Media/Themes/Umami/Icon/apps/help-browser.png create mode 100644 Media/Themes/Umami/Icon/apps/internet-group-chat.png create mode 100644 Media/Themes/Umami/Icon/apps/internet-mail.png create mode 100644 Media/Themes/Umami/Icon/apps/internet-news-reader.png create mode 100644 Media/Themes/Umami/Icon/apps/internet-web-browser.png create mode 100644 Media/Themes/Umami/Icon/apps/kcalc.png create mode 100644 Media/Themes/Umami/Icon/apps/kcharselect.png create mode 100644 Media/Themes/Umami/Icon/apps/kcmkwm.png create mode 100644 Media/Themes/Umami/Icon/apps/kedit.png create mode 100644 Media/Themes/Umami/Icon/apps/key_bindings.png create mode 100644 Media/Themes/Umami/Icon/apps/kfm.png create mode 100644 Media/Themes/Umami/Icon/apps/khelpcenter.png create mode 100644 Media/Themes/Umami/Icon/apps/konsole.png create mode 100644 Media/Themes/Umami/Icon/apps/krfb.png create mode 100644 Media/Themes/Umami/Icon/apps/kscreensaver.png create mode 100644 Media/Themes/Umami/Icon/apps/ksysguard.png create mode 100644 Media/Themes/Umami/Icon/apps/kuser.png create mode 100644 Media/Themes/Umami/Icon/apps/kwin.png create mode 100644 Media/Themes/Umami/Icon/apps/locale.png create mode 100644 Media/Themes/Umami/Icon/apps/mail_generic.png create mode 100644 Media/Themes/Umami/Icon/apps/office-calendar.png create mode 100644 Media/Themes/Umami/Icon/apps/openterm.png create mode 100644 Media/Themes/Umami/Icon/apps/preferences-desktop-accessibility.png create mode 100644 Media/Themes/Umami/Icon/apps/preferences-desktop-assistive-technology.png create mode 100644 Media/Themes/Umami/Icon/apps/preferences-desktop-font.png create mode 100644 Media/Themes/Umami/Icon/apps/preferences-desktop-keyboard-shortcuts.png create mode 100644 Media/Themes/Umami/Icon/apps/preferences-desktop-locale.png create mode 100644 Media/Themes/Umami/Icon/apps/preferences-desktop-multimedia.png create mode 100644 Media/Themes/Umami/Icon/apps/preferences-desktop-remote-desktop.png create mode 100644 Media/Themes/Umami/Icon/apps/preferences-desktop-screensaver.png create mode 100644 Media/Themes/Umami/Icon/apps/preferences-desktop-theme.png create mode 100644 Media/Themes/Umami/Icon/apps/preferences-desktop-wallpaper.png create mode 100644 Media/Themes/Umami/Icon/apps/preferences-system-network-proxy.png create mode 100644 Media/Themes/Umami/Icon/apps/preferences-system-session.png create mode 100644 Media/Themes/Umami/Icon/apps/preferences-system-windows.png create mode 100644 Media/Themes/Umami/Icon/apps/proxy-config.png create mode 100644 Media/Themes/Umami/Icon/apps/proxy.png create mode 100644 Media/Themes/Umami/Icon/apps/redhat-email.png create mode 100644 Media/Themes/Umami/Icon/apps/redhat-filemanager.png create mode 100644 Media/Themes/Umami/Icon/apps/redhat-web-browser.png create mode 100644 Media/Themes/Umami/Icon/apps/screensaver.png create mode 100644 Media/Themes/Umami/Icon/apps/stock_proxy.png create mode 100644 Media/Themes/Umami/Icon/apps/style.png create mode 100644 Media/Themes/Umami/Icon/apps/susehelpcenter.png create mode 100644 Media/Themes/Umami/Icon/apps/system-config-users.png create mode 100644 Media/Themes/Umami/Icon/apps/system-file-manager.png create mode 100644 Media/Themes/Umami/Icon/apps/system-installer.png create mode 100644 Media/Themes/Umami/Icon/apps/system-software-update.png create mode 100644 Media/Themes/Umami/Icon/apps/system-users.png create mode 100644 Media/Themes/Umami/Icon/apps/terminal.png create mode 100644 Media/Themes/Umami/Icon/apps/text-editor.png create mode 100644 Media/Themes/Umami/Icon/apps/update-manager.png create mode 100644 Media/Themes/Umami/Icon/apps/utilities-system-monitor.png create mode 100644 Media/Themes/Umami/Icon/apps/utilities-terminal.png create mode 100644 Media/Themes/Umami/Icon/apps/wallpaper.png create mode 100644 Media/Themes/Umami/Icon/apps/web-browser.png create mode 100644 Media/Themes/Umami/Icon/apps/xfcalendar.png create mode 100644 Media/Themes/Umami/Icon/apps/xfce-edit.png create mode 100644 Media/Themes/Umami/Icon/apps/xfce-filemanager.png create mode 100644 Media/Themes/Umami/Icon/apps/xfce-mail.png create mode 100644 Media/Themes/Umami/Icon/apps/xfce-man.png create mode 100644 Media/Themes/Umami/Icon/apps/xfce-terminal.png create mode 100644 Media/Themes/Umami/Icon/apps/xfce4-backdrop.png create mode 100644 Media/Themes/Umami/Icon/apps/xfce4-session.png create mode 100644 Media/Themes/Umami/Icon/apps/xfce4-ui.png create mode 100644 Media/Themes/Umami/Icon/apps/xfwm4.png create mode 100644 Media/Themes/Umami/Icon/apps/ximian-evolution-calendar.png create mode 100644 Media/Themes/Umami/Icon/apps/xscreensaver.png create mode 100644 Media/Themes/Umami/Icon/apps/zen-icon.png create mode 100644 Media/Themes/Umami/Icon/categories/applications-accessories.png create mode 100644 Media/Themes/Umami/Icon/categories/applications-development.png create mode 100644 Media/Themes/Umami/Icon/categories/applications-games.png create mode 100644 Media/Themes/Umami/Icon/categories/applications-graphics.png create mode 100644 Media/Themes/Umami/Icon/categories/applications-internet.png create mode 100644 Media/Themes/Umami/Icon/categories/applications-multimedia.png create mode 100644 Media/Themes/Umami/Icon/categories/applications-office.png create mode 100644 Media/Themes/Umami/Icon/categories/applications-other.png create mode 100644 Media/Themes/Umami/Icon/categories/applications-system.png create mode 100644 Media/Themes/Umami/Icon/categories/gnome-applications.png create mode 100644 Media/Themes/Umami/Icon/categories/gnome-control-center.png create mode 100644 Media/Themes/Umami/Icon/categories/gnome-devel.png create mode 100644 Media/Themes/Umami/Icon/categories/gnome-globe.png create mode 100644 Media/Themes/Umami/Icon/categories/gnome-graphics.png create mode 100644 Media/Themes/Umami/Icon/categories/gnome-joystick.png create mode 100644 Media/Themes/Umami/Icon/categories/gnome-multimedia.png create mode 100644 Media/Themes/Umami/Icon/categories/gnome-other.png create mode 100644 Media/Themes/Umami/Icon/categories/gnome-settings.png create mode 100644 Media/Themes/Umami/Icon/categories/gnome-system.png create mode 100644 Media/Themes/Umami/Icon/categories/gnome-util.png create mode 100644 Media/Themes/Umami/Icon/categories/gtk-preferences.png create mode 100644 Media/Themes/Umami/Icon/categories/input_devices_settings.png create mode 100644 Media/Themes/Umami/Icon/categories/kcontrol.png create mode 100644 Media/Themes/Umami/Icon/categories/package_development.png create mode 100644 Media/Themes/Umami/Icon/categories/package_games.png create mode 100644 Media/Themes/Umami/Icon/categories/package_graphics.png create mode 100644 Media/Themes/Umami/Icon/categories/package_multimedia.png create mode 100644 Media/Themes/Umami/Icon/categories/package_network.png create mode 100644 Media/Themes/Umami/Icon/categories/package_office.png create mode 100644 Media/Themes/Umami/Icon/categories/package_settings.png create mode 100644 Media/Themes/Umami/Icon/categories/package_system.png create mode 100644 Media/Themes/Umami/Icon/categories/package_utilities.png create mode 100644 Media/Themes/Umami/Icon/categories/preferences-desktop-peripherals.png create mode 100644 Media/Themes/Umami/Icon/categories/preferences-desktop.png create mode 100644 Media/Themes/Umami/Icon/categories/preferences-system.png create mode 100644 Media/Themes/Umami/Icon/categories/redhat-accessories.png create mode 100644 Media/Themes/Umami/Icon/categories/redhat-games.png create mode 100644 Media/Themes/Umami/Icon/categories/redhat-graphics.png create mode 100644 Media/Themes/Umami/Icon/categories/redhat-internet.png create mode 100644 Media/Themes/Umami/Icon/categories/redhat-office.png create mode 100644 Media/Themes/Umami/Icon/categories/redhat-preferences.png create mode 100644 Media/Themes/Umami/Icon/categories/redhat-programming.png create mode 100644 Media/Themes/Umami/Icon/categories/redhat-sound_video.png create mode 100644 Media/Themes/Umami/Icon/categories/redhat-system_settings.png create mode 100644 Media/Themes/Umami/Icon/categories/redhat-system_tools.png create mode 100644 Media/Themes/Umami/Icon/categories/stock_internet.png create mode 100644 Media/Themes/Umami/Icon/categories/xfce-devel.png create mode 100644 Media/Themes/Umami/Icon/categories/xfce-games.png create mode 100644 Media/Themes/Umami/Icon/categories/xfce-graphics.png create mode 100644 Media/Themes/Umami/Icon/categories/xfce-internet.png create mode 100644 Media/Themes/Umami/Icon/categories/xfce-multimedia.png create mode 100644 Media/Themes/Umami/Icon/categories/xfce-office.png create mode 100644 Media/Themes/Umami/Icon/categories/xfce-system-settings.png create mode 100644 Media/Themes/Umami/Icon/categories/xfce-system.png create mode 100644 Media/Themes/Umami/Icon/categories/xfce-utils.png create mode 100644 Media/Themes/Umami/Icon/categories/xfce4-settings.png create mode 100644 Media/Themes/Umami/Icon/clipboard.png create mode 100644 Media/Themes/Umami/Icon/default.png create mode 100644 Media/Themes/Umami/Icon/devices/3floppy_unmount.png create mode 100644 Media/Themes/Umami/Icon/devices/audio-card.png create mode 100644 Media/Themes/Umami/Icon/devices/audio-input-microphone.png create mode 100644 Media/Themes/Umami/Icon/devices/battery.png create mode 100644 Media/Themes/Umami/Icon/devices/camera-photo.png create mode 100644 Media/Themes/Umami/Icon/devices/camera-video.png create mode 100644 Media/Themes/Umami/Icon/devices/camera.png create mode 100644 Media/Themes/Umami/Icon/devices/camera_unmount.png create mode 100644 Media/Themes/Umami/Icon/devices/cdrom_unmount.png create mode 100644 Media/Themes/Umami/Icon/devices/cdwriter_unmount.png create mode 100644 Media/Themes/Umami/Icon/devices/chardevice.png create mode 100644 Media/Themes/Umami/Icon/devices/computer.png create mode 100644 Media/Themes/Umami/Icon/devices/display.png create mode 100644 Media/Themes/Umami/Icon/devices/drive-cdrom.png create mode 100644 Media/Themes/Umami/Icon/devices/drive-harddisk.png create mode 100644 Media/Themes/Umami/Icon/devices/drive-optical.png create mode 100644 Media/Themes/Umami/Icon/devices/drive-removable-media.png create mode 100644 Media/Themes/Umami/Icon/devices/dvd_unmount.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-battery.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-cdrom-audio.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-cdrom.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-computer.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-disc-cdr.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-disc-cdrw.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdr-plus.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdr.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdram.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdrom.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdrw.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-dvd.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-ethernet.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-floppy.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-harddisk-1394.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-harddisk-usb.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-harddisk.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-ipod.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-keyboard.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-media-cf.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-media-ms.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-media-sdmmc.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-media-sm.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-mouse-ball.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-mouse-optical.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-printer.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-removable-1394.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-removable-usb.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-removable.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-dev-wavelan.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-fs-client.png create mode 100644 Media/Themes/Umami/Icon/devices/gnome-stock-mic.png create mode 100644 Media/Themes/Umami/Icon/devices/gtk-cdrom.png create mode 100644 Media/Themes/Umami/Icon/devices/gtk-floppy.png create mode 100644 Media/Themes/Umami/Icon/devices/gtk-harddisk.png create mode 100644 Media/Themes/Umami/Icon/devices/harddrive.png create mode 100644 Media/Themes/Umami/Icon/devices/hdd_unmount.png create mode 100644 Media/Themes/Umami/Icon/devices/input-gaming.png create mode 100644 Media/Themes/Umami/Icon/devices/input-keyboard.png create mode 100644 Media/Themes/Umami/Icon/devices/input-mouse.png create mode 100644 Media/Themes/Umami/Icon/devices/ipod_mount.png create mode 100644 Media/Themes/Umami/Icon/devices/joystick.png create mode 100644 Media/Themes/Umami/Icon/devices/keyboard.png create mode 100644 Media/Themes/Umami/Icon/devices/kjobviewer.png create mode 100644 Media/Themes/Umami/Icon/devices/kxkb.png create mode 100644 Media/Themes/Umami/Icon/devices/media-cdrom.png create mode 100644 Media/Themes/Umami/Icon/devices/media-flash.png create mode 100644 Media/Themes/Umami/Icon/devices/media-floppy.png create mode 100644 Media/Themes/Umami/Icon/devices/media-optical.png create mode 100644 Media/Themes/Umami/Icon/devices/mouse.png create mode 100644 Media/Themes/Umami/Icon/devices/multimedia-player.png create mode 100644 Media/Themes/Umami/Icon/devices/network-wired.png create mode 100644 Media/Themes/Umami/Icon/devices/network-wireless.png create mode 100644 Media/Themes/Umami/Icon/devices/nm-adhoc.png create mode 100644 Media/Themes/Umami/Icon/devices/nm-device-wired.png create mode 100644 Media/Themes/Umami/Icon/devices/nm-device-wireless.png create mode 100644 Media/Themes/Umami/Icon/devices/printer-remote.png create mode 100644 Media/Themes/Umami/Icon/devices/printer.png create mode 100644 Media/Themes/Umami/Icon/devices/printer1.png create mode 100644 Media/Themes/Umami/Icon/devices/printmgr.png create mode 100644 Media/Themes/Umami/Icon/devices/stock_mic.png create mode 100644 Media/Themes/Umami/Icon/devices/stock_printers.png create mode 100644 Media/Themes/Umami/Icon/devices/system-floppy.png create mode 100644 Media/Themes/Umami/Icon/devices/system.png create mode 100644 Media/Themes/Umami/Icon/devices/usbpendrive_unmount.png create mode 100644 Media/Themes/Umami/Icon/devices/video-display.png create mode 100644 Media/Themes/Umami/Icon/devices/xfce-printer.png create mode 100644 Media/Themes/Umami/Icon/devices/xfce4-display.png create mode 100644 Media/Themes/Umami/Icon/devices/xfce4-keyboard.png create mode 100644 Media/Themes/Umami/Icon/devices/xfce4-mouse.png create mode 100644 Media/Themes/Umami/Icon/devices/yast_HD.png create mode 100644 Media/Themes/Umami/Icon/devices/yast_idetude.png create mode 100644 Media/Themes/Umami/Icon/devices/yast_joystick.png create mode 100644 Media/Themes/Umami/Icon/devices/yast_mouse.png create mode 100644 Media/Themes/Umami/Icon/devices/yast_printer.png create mode 100644 Media/Themes/Umami/Icon/devices/yast_soundcard.png create mode 100644 Media/Themes/Umami/Icon/emblems/emblem-favorite.png create mode 100644 Media/Themes/Umami/Icon/emblems/emblem-important.png create mode 100644 Media/Themes/Umami/Icon/emblems/emblem-noread.png create mode 100644 Media/Themes/Umami/Icon/emblems/emblem-nowrite.png create mode 100644 Media/Themes/Umami/Icon/emblems/emblem-photos.png create mode 100644 Media/Themes/Umami/Icon/emblems/emblem-readonly.png create mode 100644 Media/Themes/Umami/Icon/emblems/emblem-symbolic-link.png create mode 100644 Media/Themes/Umami/Icon/emblems/emblem-system.png create mode 100644 Media/Themes/Umami/Icon/emblems/emblem-unreadable.png create mode 100644 Media/Themes/Umami/Icon/emotes/face-angel.png create mode 100644 Media/Themes/Umami/Icon/emotes/face-crying.png create mode 100644 Media/Themes/Umami/Icon/emotes/face-devilish.png create mode 100644 Media/Themes/Umami/Icon/emotes/face-glasses.png create mode 100644 Media/Themes/Umami/Icon/emotes/face-grin.png create mode 100644 Media/Themes/Umami/Icon/emotes/face-kiss.png create mode 100644 Media/Themes/Umami/Icon/emotes/face-monkey.png create mode 100644 Media/Themes/Umami/Icon/emotes/face-plain.png create mode 100644 Media/Themes/Umami/Icon/emotes/face-sad.png create mode 100644 Media/Themes/Umami/Icon/emotes/face-smile-big.png create mode 100644 Media/Themes/Umami/Icon/emotes/face-smile.png create mode 100644 Media/Themes/Umami/Icon/emotes/face-surprise.png create mode 100644 Media/Themes/Umami/Icon/emotes/face-wink.png create mode 100644 Media/Themes/Umami/Icon/emotes/stock_smiley-1.png create mode 100644 Media/Themes/Umami/Icon/emotes/stock_smiley-11.png create mode 100644 Media/Themes/Umami/Icon/emotes/stock_smiley-13.png create mode 100644 Media/Themes/Umami/Icon/emotes/stock_smiley-18.png create mode 100644 Media/Themes/Umami/Icon/emotes/stock_smiley-2.png create mode 100644 Media/Themes/Umami/Icon/emotes/stock_smiley-22.png create mode 100644 Media/Themes/Umami/Icon/emotes/stock_smiley-3.png create mode 100644 Media/Themes/Umami/Icon/emotes/stock_smiley-4.png create mode 100644 Media/Themes/Umami/Icon/emotes/stock_smiley-5.png create mode 100644 Media/Themes/Umami/Icon/emotes/stock_smiley-6.png create mode 100644 Media/Themes/Umami/Icon/emotes/stock_smiley-7.png create mode 100644 Media/Themes/Umami/Icon/emotes/stock_smiley-8.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/application-certificate.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/application-vnd.ms-excel.sheet.macroEnabled.12.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/application-vnd.ms-powerpoint.presentation.macroEnabled.12.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/application-vnd.ms-word.document.macroEnabled.12.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.presentation.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.sheet.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.document.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/application-x-executable.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/ascii.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/audio-x-generic.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/binary.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/contents2.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/deb.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/document.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/empty.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/exec.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/folder_tar.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/font-x-generic.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/font.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/font_bitmap.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/font_truetype.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/font_type1.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-fs-executable.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-magicpoint.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-msword.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-ogg.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-pdf.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-postscript.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-rtf.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.lotus-1-2-3.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.ms-excel.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.ms-powerpoint.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics-template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.image.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation-template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet-template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-web.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.rn-realmedia-secure.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.rn-realmedia-vbr.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.rn-realmedia.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.stardivision.calc.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.stardivision.impress.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.stardivision.writer.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.calc.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.calc.template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.draw.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.draw.template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.impress.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.impress.template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.writer.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.writer.template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-wordperfect.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-7z-compressed.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-abiword.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-applix-spreadsheet.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-applix-word.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-archive.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-arj.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-bzip-compressed-tar.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-bzip.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-compress.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-compressed-tar.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-cpio-compressed.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-cpio.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-deb.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-dvi.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-executable.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-afm.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-bdf.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-linux-psf.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-pcf.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-sunos-news.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-ttf.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-gnumeric.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-gzip.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-gzpostscript.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-jar.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-killustrator.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-kpresenter.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-kspread.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-kword.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-lha.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-lhz.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-lzma-compressed-tar.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-lzma.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-ms-dos-executable.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-perl.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-php.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-python-bytecode.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-rar.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-rpm.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-scribus.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-shellscript.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-shockwave-flash.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-stuffit.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-tar.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-tarz.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-tex.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-xhtml+xml.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-zip.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-audio.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-image.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-html.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-vnd.wap.wml.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-csh.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-python.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-sh.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-vcalendar.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-vcard.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-zsh.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-text.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-video.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-mime-x-font-afm.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/gnome-package.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/html.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/image-x-generic.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/image.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/kpresenter_kpr.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/mime_ascii.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/misc.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/package-x-generic.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/package.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/package_editors.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/package_wordprocessing.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/plan.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/rpm.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/shellscript.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/sound.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/spreadsheet.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/stock_addressbook.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/stock_calendar.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/stock_certificate.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/stock_script.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/tar.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/template_source.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/text-html.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/text-x-generic-template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/text-x-generic.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/text-x-script.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/tgz.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/txt.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/txt2.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/unknown.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/vcalendar.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/vcard.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/video-x-generic.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/video.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/wordprocessing.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/www.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/x-office-address-book.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/x-office-calendar.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/x-office-document-template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/x-office-document.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/x-office-drawing-template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/x-office-drawing.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/x-office-presentation-template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/x-office-presentation.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/x-office-spreadsheet-template.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/x-office-spreadsheet.png create mode 100644 Media/Themes/Umami/Icon/mimetypes/zip.png create mode 100644 Media/Themes/Umami/Icon/places/application-x-gnome-saved-search.png create mode 100644 Media/Themes/Umami/Icon/places/desktop.png create mode 100644 Media/Themes/Umami/Icon/places/distributor-logo.png create mode 100644 Media/Themes/Umami/Icon/places/emptytrash.png create mode 100644 Media/Themes/Umami/Icon/places/folder-remote.png create mode 100644 Media/Themes/Umami/Icon/places/folder-saved-search.png create mode 100644 Media/Themes/Umami/Icon/places/folder.png create mode 100644 Media/Themes/Umami/Icon/places/folder_home.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-fs-desktop.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-fs-directory.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-fs-ftp.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-fs-home.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-fs-network.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-fs-nfs.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-fs-server.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-fs-share.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-fs-smb.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-fs-ssh.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-fs-trash-empty.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-main-menu.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-mime-x-directory-nfs-server.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-mime-x-directory-smb-server.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-mime-x-directory-smb-share.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-mime-x-directory-smb-workgroup.png create mode 100644 Media/Themes/Umami/Icon/places/gnome-stock-trash.png create mode 100644 Media/Themes/Umami/Icon/places/gtk-directory.png create mode 100644 Media/Themes/Umami/Icon/places/gtk-network.png create mode 100644 Media/Themes/Umami/Icon/places/inode-directory.png create mode 100644 Media/Themes/Umami/Icon/places/network-server.png create mode 100644 Media/Themes/Umami/Icon/places/network-workgroup.png create mode 100644 Media/Themes/Umami/Icon/places/network.png create mode 100644 Media/Themes/Umami/Icon/places/network_local.png create mode 100644 Media/Themes/Umami/Icon/places/novell-button.png create mode 100644 Media/Themes/Umami/Icon/places/redhat-network-server.png create mode 100644 Media/Themes/Umami/Icon/places/server.png create mode 100644 Media/Themes/Umami/Icon/places/start-here.png create mode 100644 Media/Themes/Umami/Icon/places/stock_folder.png create mode 100644 Media/Themes/Umami/Icon/places/trashcan_empty.png create mode 100644 Media/Themes/Umami/Icon/places/user-desktop.png create mode 100644 Media/Themes/Umami/Icon/places/user-home.png create mode 100644 Media/Themes/Umami/Icon/places/user-trash.png create mode 100644 Media/Themes/Umami/Icon/places/xfce-trash_empty.png create mode 100644 Media/Themes/Umami/Icon/status/audio-volume-high.png create mode 100644 Media/Themes/Umami/Icon/status/audio-volume-low.png create mode 100644 Media/Themes/Umami/Icon/status/audio-volume-medium.png create mode 100644 Media/Themes/Umami/Icon/status/audio-volume-muted.png create mode 100644 Media/Themes/Umami/Icon/status/battery-caution.png create mode 100644 Media/Themes/Umami/Icon/status/connect_creating.png create mode 100644 Media/Themes/Umami/Icon/status/connect_established.png create mode 100644 Media/Themes/Umami/Icon/status/connect_no.png create mode 100644 Media/Themes/Umami/Icon/status/dialog-error.png create mode 100644 Media/Themes/Umami/Icon/status/dialog-information.png create mode 100644 Media/Themes/Umami/Icon/status/dialog-warning.png create mode 100644 Media/Themes/Umami/Icon/status/edittrash.png create mode 100644 Media/Themes/Umami/Icon/status/error.png create mode 100644 Media/Themes/Umami/Icon/status/folder-drag-accept.png create mode 100644 Media/Themes/Umami/Icon/status/folder-open.png create mode 100644 Media/Themes/Umami/Icon/status/folder-visiting.png create mode 100644 Media/Themes/Umami/Icon/status/folder_open.png create mode 100644 Media/Themes/Umami/Icon/status/gnome-dev-wavelan-encrypted.png create mode 100644 Media/Themes/Umami/Icon/status/gnome-fs-directory-accept.png create mode 100644 Media/Themes/Umami/Icon/status/gnome-fs-directory-visiting.png create mode 100644 Media/Themes/Umami/Icon/status/gnome-fs-loading-icon.png create mode 100644 Media/Themes/Umami/Icon/status/gnome-fs-trash-full.png create mode 100644 Media/Themes/Umami/Icon/status/gnome-netstatus-disconn.png create mode 100644 Media/Themes/Umami/Icon/status/gnome-netstatus-error.png create mode 100644 Media/Themes/Umami/Icon/status/gnome-netstatus-idle.png create mode 100644 Media/Themes/Umami/Icon/status/gnome-netstatus-rx.png create mode 100644 Media/Themes/Umami/Icon/status/gnome-netstatus-tx.png create mode 100644 Media/Themes/Umami/Icon/status/gnome-netstatus-txrx.png create mode 100644 Media/Themes/Umami/Icon/status/gnome-stock-trash-full.png create mode 100644 Media/Themes/Umami/Icon/status/gtk-dialog-error.png create mode 100644 Media/Themes/Umami/Icon/status/gtk-dialog-info.png create mode 100644 Media/Themes/Umami/Icon/status/gtk-dialog-warning.png create mode 100644 Media/Themes/Umami/Icon/status/gtk-directory.png create mode 100644 Media/Themes/Umami/Icon/status/gtk-missing-image.png create mode 100644 Media/Themes/Umami/Icon/status/image-loading.png create mode 100644 Media/Themes/Umami/Icon/status/image-missing.png create mode 100644 Media/Themes/Umami/Icon/status/important.png create mode 100644 Media/Themes/Umami/Icon/status/info.png create mode 100644 Media/Themes/Umami/Icon/status/mail-attachment.png create mode 100644 Media/Themes/Umami/Icon/status/messagebox_critical.png create mode 100644 Media/Themes/Umami/Icon/status/messagebox_critical_16x16.png create mode 100644 Media/Themes/Umami/Icon/status/messagebox_info.png create mode 100644 Media/Themes/Umami/Icon/status/messagebox_info_16x16.png create mode 100644 Media/Themes/Umami/Icon/status/messagebox_warning.png create mode 100644 Media/Themes/Umami/Icon/status/messagebox_warning_16x16.png create mode 100644 Media/Themes/Umami/Icon/status/network-error.png create mode 100644 Media/Themes/Umami/Icon/status/network-idle.png create mode 100644 Media/Themes/Umami/Icon/status/network-offline.png create mode 100644 Media/Themes/Umami/Icon/status/network-receive.png create mode 100644 Media/Themes/Umami/Icon/status/network-transmit-receive.png create mode 100644 Media/Themes/Umami/Icon/status/network-transmit.png create mode 100644 Media/Themes/Umami/Icon/status/network-wireless-encrypted.png create mode 100644 Media/Themes/Umami/Icon/status/nm-no-connection.png create mode 100644 Media/Themes/Umami/Icon/status/printer-error.png create mode 100644 Media/Themes/Umami/Icon/status/software-update-available.png create mode 100644 Media/Themes/Umami/Icon/status/software-update-urgent.png create mode 100644 Media/Themes/Umami/Icon/status/stock_attach.png create mode 100644 Media/Themes/Umami/Icon/status/stock_dialog-error.png create mode 100644 Media/Themes/Umami/Icon/status/stock_dialog-info.png create mode 100644 Media/Themes/Umami/Icon/status/stock_dialog-warning.png create mode 100644 Media/Themes/Umami/Icon/status/stock_open.png create mode 100644 Media/Themes/Umami/Icon/status/stock_trash_full.png create mode 100644 Media/Themes/Umami/Icon/status/stock_volume-0.png create mode 100644 Media/Themes/Umami/Icon/status/stock_volume-max.png create mode 100644 Media/Themes/Umami/Icon/status/stock_volume-med.png create mode 100644 Media/Themes/Umami/Icon/status/stock_volume-min.png create mode 100644 Media/Themes/Umami/Icon/status/stock_volume-mute.png create mode 100644 Media/Themes/Umami/Icon/status/stock_volume.png create mode 100644 Media/Themes/Umami/Icon/status/stock_weather-cloudy.png create mode 100644 Media/Themes/Umami/Icon/status/stock_weather-few-clouds.png create mode 100644 Media/Themes/Umami/Icon/status/stock_weather-night-clear.png create mode 100644 Media/Themes/Umami/Icon/status/stock_weather-night-few-clouds.png create mode 100644 Media/Themes/Umami/Icon/status/stock_weather-showers.png create mode 100644 Media/Themes/Umami/Icon/status/stock_weather-snow.png create mode 100644 Media/Themes/Umami/Icon/status/stock_weather-storm.png create mode 100644 Media/Themes/Umami/Icon/status/stock_weather-sunny.png create mode 100644 Media/Themes/Umami/Icon/status/sunny.png create mode 100644 Media/Themes/Umami/Icon/status/trashcan_full.png create mode 100644 Media/Themes/Umami/Icon/status/user-trash-full.png create mode 100644 Media/Themes/Umami/Icon/status/weather-clear-night.png create mode 100644 Media/Themes/Umami/Icon/status/weather-clear.png create mode 100644 Media/Themes/Umami/Icon/status/weather-few-clouds-night.png create mode 100644 Media/Themes/Umami/Icon/status/weather-few-clouds.png create mode 100644 Media/Themes/Umami/Icon/status/weather-overcast.png create mode 100644 Media/Themes/Umami/Icon/status/weather-severe-alert.png create mode 100644 Media/Themes/Umami/Icon/status/weather-showers-scattered.png create mode 100644 Media/Themes/Umami/Icon/status/weather-showers.png create mode 100644 Media/Themes/Umami/Icon/status/weather-snow.png create mode 100644 Media/Themes/Umami/Icon/status/weather-storm.png create mode 100644 Media/Themes/Umami/Icon/status/xfce-trash_full.png create mode 100644 Media/Themes/Umami/Pointer/alternate.png create mode 100644 Media/Themes/Umami/Pointer/cross.png create mode 100644 Media/Themes/Umami/Pointer/dgn1.png create mode 100644 Media/Themes/Umami/Pointer/dgn2.png create mode 100644 Media/Themes/Umami/Pointer/help.png create mode 100644 Media/Themes/Umami/Pointer/horz.png create mode 100644 Media/Themes/Umami/Pointer/link.png create mode 100644 Media/Themes/Umami/Pointer/move.png create mode 100644 Media/Themes/Umami/Pointer/pen.png create mode 100644 Media/Themes/Umami/Pointer/pointer.png create mode 100644 Media/Themes/Umami/Pointer/text.png create mode 100644 Media/Themes/Umami/Pointer/unavailable.png create mode 100644 Media/Themes/Umami/Pointer/vert.png create mode 100644 Media/Themes/Umami/Pointer/wait.png create mode 100644 Media/Themes/Umami/Theme.HC create mode 100644 Media/Themes/Umami/Widget/checkbox.png create mode 100644 Media/Themes/Umami/Widget/checkbox_active.png create mode 100644 Media/Themes/Umami/Widget/checkbox_checked.png create mode 100644 Media/Themes/Umami/Widget/checkbox_checked_active.png create mode 100644 Media/Themes/Umami/Widget/horz_slider.png create mode 100644 Media/Themes/Umami/Widget/radio.png create mode 100644 Media/Themes/Umami/Widget/radio_active.png create mode 100644 Media/Themes/Umami/Widget/radio_selected.png create mode 100644 Media/Themes/Umami/Widget/sb_down_button.png create mode 100644 Media/Themes/Umami/Widget/sb_left_button.png create mode 100644 Media/Themes/Umami/Widget/sb_right_button.png create mode 100644 Media/Themes/Umami/Widget/sb_up_button.png create mode 100644 Media/Themes/Umami/Widget/vert_slider.png create mode 100644 Media/Themes/Umami/Window/corner_resize.png create mode 100644 Media/Themes/Umami/Window/min_max_close.png create mode 100644 Media/Themes/Umami/Window/min_max_close_pressed.png create mode 100644 Media/Themes/Umami/wallpaper.jpg create mode 100644 Media/Themes/Umami/wallpaper_old.png create mode 100644 Run.HC create mode 100644 Settings/SystemMenu.json create mode 100644 System/Api/Dns.HC create mode 100644 System/Api/Icmp.HC create mode 100644 System/Api/Ipv4.HC create mode 100644 System/Api/MD5.HC create mode 100644 System/Api/NetInfo.HC create mode 100644 System/Api/Tcp.HC create mode 100644 System/Api/Tls.HC create mode 100644 System/Config/Net.json create mode 100644 System/Core/Compositor.HC create mode 100644 System/Core/FileSystem.HC create mode 100644 System/Core/Menu.HC create mode 100644 System/Core/MessageBox.HC create mode 100644 System/Core/Scheduler.HC create mode 100644 System/Core/Shell.HC create mode 100644 System/Core/ShellCommands.HC create mode 100644 System/Core/SystemStarter.HC create mode 100644 System/Core/SystemTray.HC create mode 100644 System/Drivers/AC97.HC create mode 100644 System/Drivers/Audio.HC create mode 100644 System/Drivers/Display.HC create mode 100644 System/Drivers/Mouse.HC create mode 100644 System/Drivers/Pci.HC create mode 100644 System/Drivers/VMSVGA.HC create mode 100644 System/Drivers/VMwareTools.HC create mode 100644 System/Drivers/Virtio-blk.HC create mode 100644 System/FFI/Base.HC create mode 100644 System/FFI/ELF64.HC create mode 100644 System/FFI/LibC.HC create mode 100644 System/FFI/New.HC create mode 100644 System/Jakt/DC.HC create mode 100644 System/Jakt/IOPort.HC create mode 100644 System/Jakt/Input.HC create mode 100644 System/Jakt/OS.HC create mode 100644 System/Jakt/PCI.HC create mode 100644 System/Jakt/Time.HC create mode 100644 System/Jakt/Window.HC create mode 100644 System/Libraries/Animation2D.HC create mode 100644 System/Libraries/Audio.HC create mode 100644 System/Libraries/Base64.HC create mode 100644 System/Libraries/BitmapFont.HC create mode 100644 System/Libraries/Clipboard.HC create mode 100644 System/Libraries/Display.HC create mode 100644 System/Libraries/FileSystem.HC create mode 100644 System/Libraries/Function.HC create mode 100644 System/Libraries/Graphics2D.HC create mode 100644 System/Libraries/Gui.HC create mode 100644 System/Libraries/Http.HC create mode 100644 System/Libraries/Image.HC create mode 100644 System/Libraries/Ipc.HC create mode 100644 System/Libraries/Json.HC create mode 100644 System/Libraries/RawText.HC create mode 100644 System/Libraries/Rsa.HC create mode 100644 System/Libraries/Session.HC create mode 100644 System/Libraries/Sha256.HC create mode 100644 System/Libraries/Shell.HC create mode 100644 System/Libraries/Stdio.HC create mode 100644 System/Libraries/String.HC create mode 100644 System/Libraries/System.HC create mode 100644 System/Libraries/Theme.HC create mode 100644 System/Libraries/Tlse.HC create mode 100644 System/Libraries/User.HC create mode 100644 System/Libraries/Widget.HC create mode 100644 System/MakeSystem.HC create mode 100644 System/Setup/Environment.HC create mode 100644 System/Setup/Init.HC create mode 100644 System/Shell/Commands/aplay.HC create mode 100644 System/Shell/Commands/cat.HC create mode 100644 System/Shell/Commands/clear.HC create mode 100644 System/Shell/Commands/echo.HC create mode 100644 System/Shell/Commands/esh.HC create mode 100644 System/Shell/Commands/history.HC create mode 100644 System/Shell/Commands/ifconfig.HC create mode 100644 System/Shell/Commands/ls.HC create mode 100644 System/Shell/Commands/nslookup.HC create mode 100644 System/Shell/Commands/open.HC create mode 100644 System/Shell/Commands/ping.HC create mode 100644 System/Shell/Commands/poweroff.HC create mode 100644 System/Shell/Commands/pwd.HC create mode 100644 System/Shell/Commands/reboot.HC create mode 100644 System/Shell/Commands/sh.HC create mode 100644 System/Shell/Commands/uname.HC create mode 100644 System/Shell/Commands/whoami.HC create mode 100644 System/Shell/Commands/wpset.HC create mode 100644 System/Utilities/Dns.HC create mode 100644 System/Utilities/Image.HC create mode 100644 System/Utilities/NetRep.HC create mode 100644 System/Utilities/Ping.HC create mode 100644 System/Utilities/Time.HC create mode 100755 scripts/build-all create mode 100644 src/image/image.c create mode 100644 src/image/stb_image.h create mode 100644 src/image/stb_image_write.h create mode 100644 src/libtemple/ioport.h create mode 100644 src/libtemple/libtemple.cpp create mode 100644 src/libtemple/os.h create mode 100644 src/libtemple/pci.h create mode 100644 src/libtemple/time.h create mode 100644 src/net/devices/virtio.h create mode 100644 src/net/devices/virtio.jakt create mode 100644 src/net/lib/json.jakt create mode 100644 src/net/lib/util.jakt create mode 100644 src/net/net.jakt create mode 100644 src/net/os/ioport.jakt create mode 100644 src/net/os/os.jakt create mode 100644 src/net/os/pci.jakt create mode 100644 src/net/os/time.jakt create mode 100644 src/net/tcpip.jakt create mode 100644 src/tlse/LICENSE create mode 100644 src/tlse/libtomcrypt.c create mode 100644 src/tlse/tlse.c create mode 100644 src/tlse/tlse.h diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..61e0467 --- /dev/null +++ b/.clang-format @@ -0,0 +1,14 @@ +--- +Language: Cpp +BasedOnStyle: WebKit +SpaceAfterTemplateKeyword: false +AlignEscapedNewlines: Left +AlignTrailingComments: true +BreakBeforeInheritanceComma: true +BreakConstructorInitializers: BeforeComma +IndentPPDirectives: AfterHash +BreakBeforeBraces: Custom +BraceWrapping: + AfterFunction: true +NamespaceIndentation: None +QualifierAlignment: Right diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f9613a5 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +src/image/** linguist-vendored +src/tlse/** linguist-vendored diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0de6233 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +build/ +reports/ +src/net/exports/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..fb63315 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "jaktLanguageServer.compiler.executablePath": "jakt", + "git.ignoreLimitWarning": true, + "pmd-cpd.language": [ + "cpp" + ], + "pmd-cpd.onStartBehavior": "Show", + "pmd-cpd.sourceDirectory": "/home/alec/repos/erythros", + "terminal.integrated.shellIntegration.history": 0 +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..370f88e --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1 @@ +{"version":"2.0.0","tasks":[{"label":"Build All","type":"shell","command":"${workspaceFolder}/scripts/build-all ${workspaceFolder}","group":{"kind":"build","isDefault":true},"problemMatcher":[]}]} diff --git a/Applets/Calendar.applet/Run.HC b/Applets/Calendar.applet/Run.HC new file mode 100644 index 0000000..e9048fb --- /dev/null +++ b/Applets/Calendar.applet/Run.HC @@ -0,0 +1,5 @@ +Gui.App(); + +U0 Main() { Suspend; } + +Main; diff --git a/Applets/ClipManager.applet/Run.HC b/Applets/ClipManager.applet/Run.HC new file mode 100644 index 0000000..9854994 --- /dev/null +++ b/Applets/ClipManager.applet/Run.HC @@ -0,0 +1,32 @@ +Gui.App(); + +Context2DWidget* clipmanager_icon = SystemTray.RegisterItem(); + +Context2D* ctx_clip_icon = Image.FileToContext2D("M:/Media/Themes/Umami/Icon/clipboard.png"); + +CopyRect2D(clipmanager_icon->ctx, 0, 0, ctx_clip_icon); + +U0 Main() +{ + I64 length = 0; + I64 text_width = 0; + while (1) { + if (length < Clipboard.Length()) { + CopyRect2D(clipmanager_icon->ctx, 0, 0, ctx_clip_icon); + Rect2D(clipmanager_icon->ctx, 12, 12, 12, 12, Color(255, 0, 0)); + text_width = Print2D(NULL, Compositor.theme.font.sans, 0, 0, + Color(255, 255, 255), , "%02d", Clipboard.Length()); + Print2D(clipmanager_icon->ctx, Compositor.theme.font.sans, + 11 + 6 - (text_width / 2), 13, Color(255, 255, 255), , "%02d", + Clipboard.Length()); + Print2D(clipmanager_icon->ctx, Compositor.theme.font.sans, + 11 + 7 - (text_width / 2), 13, Color(255, 255, 255), , "%02d", + Clipboard.Length()); + length = Clipboard.Length(); + Gui.Window.Refresh(Compositor.menubar.win); + } + Sleep(1); + } +} + +Main; diff --git a/Applets/NetworkStatus.applet/Run.HC b/Applets/NetworkStatus.applet/Run.HC new file mode 100644 index 0000000..ef3d13e --- /dev/null +++ b/Applets/NetworkStatus.applet/Run.HC @@ -0,0 +1,101 @@ +Gui.App(); + +U64 flags = WIN_FLAGS_MOVABLE | WIN_FLAGS_ICON | WIN_FLAGS_TITLE_BAR | WIN_FLAGS_CLOSE_BUTTON | WIN_FLAGS_SKIP; +Window* win = Compositor.CreateWindow(Display.Width() - 240, 33, 240, 120, flags); +Gui.Window.SetIcon(win, Image.FileToContext2D("window_icon_16x16.png")); +Gui.Window.Hide(win); +Gui.Window.SetTitle(win, "Network Status"); + +TextLabelWidget* status_label1 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 16, 16, 192, 16); +TextLabelWidget* status_label2 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 16, 32, 192, 16); +TextLabelWidget* status_label3 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 16, 48, 192, 16); +TextLabelWidget* status_label4 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 16, 64, 192, 16); + +TextLabelWidget* status_label5 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 128, 16, 192, 16); +TextLabelWidget* status_label6 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 128, 32, 192, 16); +TextLabelWidget* status_label7 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 128, 48, 192, 16); +TextLabelWidget* status_label8 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 128, 64, 192, 16); +Gui.Widget.SetFont(status_label1, "Eight Bit Dragon"); +Gui.Widget.SetFont(status_label2, "Eight Bit Dragon"); +Gui.Widget.SetFont(status_label3, "Eight Bit Dragon"); +Gui.Widget.SetFont(status_label4, "Eight Bit Dragon"); +Gui.Widget.SetFont(status_label5, "Eight Bit Dragon"); +Gui.Widget.SetFont(status_label6, "Eight Bit Dragon"); +Gui.Widget.SetFont(status_label7, "Eight Bit Dragon"); +Gui.Widget.SetFont(status_label8, "Eight Bit Dragon"); + +Context2DWidget* network_icon = SystemTray.RegisterItem(); + +Context2D* ctx_network_error = Image.FileToContext2D("M:/Media/Themes/Umami/Icon/status/network-error.png"); +Context2D* ctx_network_idle = Image.FileToContext2D("M:/Media/Themes/Umami/Icon/status/network-idle.png"); +Context2D* ctx_network_offline = Image.FileToContext2D( + "M:/Media/Themes/Umami/Icon/status/network-offline.png"); +Context2D* ctx_network_rx = Image.FileToContext2D( + "M:/Media/Themes/Umami/Icon/status/network-receive.png"); +Context2D* ctx_network_tx = Image.FileToContext2D( + "M:/Media/Themes/Umami/Icon/status/network-transmit.png"); +Context2D* ctx_network_txrx = Image.FileToContext2D( + "M:/Media/Themes/Umami/Icon/status/network-transmit-receive.png"); +Context2D* ctx_network_wireless_enc = Image.FileToContext2D( + "M:/Media/Themes/Umami/Icon/status/network-wireless-encrypted.png"); + +U0 @networkstatus_show(Widget*) +{ + + NetInfoRequest* req = @net_info_request; + + win->flags &= ~WIN_FLAGS_SKIP; + + U8 status_ipaddr[128]; + U8 status_netmask[128]; + U8 status_gateway[128]; + U8 status_dns1[128]; + + StrPrint(&status_ipaddr, "%d.%d.%d.%d", req->ipv4_address.u8[3], req->ipv4_address.u8[2], + req->ipv4_address.u8[1], req->ipv4_address.u8[0]); + StrPrint(&status_netmask, "%d.%d.%d.%d", req->ipv4_netmask.u8[3], req->ipv4_netmask.u8[2], + req->ipv4_netmask.u8[1], req->ipv4_netmask.u8[0]); + StrPrint(&status_gateway, "%d.%d.%d.%d", req->ipv4_gateway.u8[3], req->ipv4_gateway.u8[2], + req->ipv4_gateway.u8[1], req->ipv4_gateway.u8[0]); + StrPrint(&status_dns1, "%d.%d.%d.%d", req->dns_server_address.u8[3], req->dns_server_address.u8[2], + req->dns_server_address.u8[1], req->dns_server_address.u8[0], req->dns_server_port); + + Gui.Widget.SetText(status_label1, "IP address:"); + Gui.Widget.SetText(status_label2, "Subnet mask:"); + Gui.Widget.SetText(status_label3, "Gateway:"); + Gui.Widget.SetText(status_label4, "DNS Server:"); + + Gui.Widget.SetText(status_label5, &status_ipaddr); + Gui.Widget.SetText(status_label6, &status_netmask); + Gui.Widget.SetText(status_label7, &status_gateway); + Gui.Widget.SetText(status_label8, &status_dns1); + + Gui.Window.SetFocus(win); + Gui.Window.Refresh(win); + while (!Gui.Window.IsVisible(win)) + Compositor.ShowWindow(win); +} + +U0 @networkstatus_hide(Window*) +{ + win->flags |= WIN_FLAGS_SKIP; + Compositor.HideWindow(win); +} + +network_icon->ctx = ctx_network_error; +Gui.Window.Refresh(Compositor.menubar.win); +Gui.Window.SetCallback(win, "close", &@networkstatus_hide); + +U0 Main() +{ + Gui.Widget.SetCallback(network_icon, "clicked", &@networkstatus_show); + while (1) { + if (network_icon->ctx == ctx_network_error) { + network_icon->ctx = ctx_network_idle; + Gui.Window.Refresh(Compositor.menubar.win); + } + Sleep(10); + } +} + +Main; diff --git a/Applets/NetworkStatus.applet/window_icon_16x16.png b/Applets/NetworkStatus.applet/window_icon_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..12d636979083c744c5ab6b285f7056793cc03085 GIT binary patch literal 613 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s76p}rHd>I(3)EF2VS{N99 zF)%PRykKA`)n{OM70S~UI8L&U364Fvaj$}a#YE3(0${Zs2J#R%_)#unM>>^dsFMwBNH@~ zxD8MKon?GnsoFe}qvc1KKKr?u-)CAThfEDBSIfVD_H)gl>Wy3rx>jwP%>H=I)_$Ga zQ&dhKd2wRJ+t;s`ONDnnmdJL#WTNORJjq1$tXb{mn_G&Ddq4Iux(42`=##XvZDZmJ z@oA_y$kJxP6PRFoGGfL~$A?_E4IPds#&N7!`uv9Hx2sBgU$6Z5^_Rcdy?Ukmn`4&e zpY!J%9#in!aC_(Dtf?Ou;(Vp-F3XeAYKfL!tO;2xcsmq?t=Qx#`RvoYO&(PIA%lobT_>2XI`s3?Q&VBu$ z?#BbWV-n)77ayNxc@)6^ckkXSt72QYuIhDbx12c~r6zml@L_cWwG*LFVyzp)&p(>( zpQF2M+g>f%JL%`=CZ<*{{r2nX?8?`ncV4|(_4mgYt3VOKR>6h5hK?7qM7osJ&wrjY zyLxgk!;K5;W>3rxU%p94Iy^M`A9wEF`j_5Q?--wtyQ7s|mXYva@5+$8RloYy-tkoZ z{%uxlOw_FX1s`kH)-Bl=T|fJ_#O1YXGoF2#>TN%_xV`+Xoctx = NewContext2D(24, 24); +HorizontalSliderWidget* volume_slider = Gui.CreateWidget(win, WIDGET_TYPE_HORZ_SLIDER, 32, 4, 212, 24); +volume_slider->max = 100; +volume_slider->scroll = volume_slider->width; + +Context2DWidget* tray_icon = SystemTray.RegisterItem(); + +Context2D* ctx_volume_muted = Image.FileToContext2D( + "M:/Media/Themes/Umami/Icon/status/audio-volume-muted.png"); +Context2D* ctx_volume_low = Image.FileToContext2D( + "M:/Media/Themes/Umami/Icon/status/audio-volume-low.png"); +Context2D* ctx_volume_medium = Image.FileToContext2D( + "M:/Media/Themes/Umami/Icon/status/audio-volume-medium.png"); +Context2D* ctx_volume_high = Image.FileToContext2D( + "M:/Media/Themes/Umami/Icon/status/audio-volume-high.png"); + +U0 @volumeslider_show(Widget*) +{ + win->x = Display.Width() - 256; + Compositor.ShowWindow(win); + Gui.Window.SetFocus(win); +} + +U0 @volumeslider_change(Widget*) +{ + I64 volume = Min(ToI64(volume_slider->scroll * 0.47), 100); + Audio.mixer.left = volume; + Audio.mixer.right = volume; + Context2D* update_slider_icon = NULL; + switch (volume) { + case 0: + update_slider_icon = ctx_volume_muted; + break; + case 1...24: + update_slider_icon = ctx_volume_low; + break; + case 25...74: + update_slider_icon = ctx_volume_medium; + break; + case 75...100: + default: + update_slider_icon = ctx_volume_high; + break; + } + CopyRect2D(volume_slider_icon->ctx, 0, 0, update_slider_icon); + CopyRect2D(tray_icon->ctx, 0, 0, update_slider_icon); + Gui.Window.Refresh(Compositor.menubar.win); +} +@volumeslider_change(NULL); + +U0 Main() +{ + Gui.Window.SetTitle(win, "VolumeSlider"); + Compositor.HideWindow(win); + Gui.Widget.SetCallback(tray_icon, "clicked", &@volumeslider_show); + Gui.Widget.SetCallback(volume_slider, "change", &@volumeslider_change); + + while (1) { + if (Gui.Window.IsVisible(win) && Compositor.active_win != win) + Compositor.HideWindow(win); + Sleep(1); + } +} + +Main; \ No newline at end of file diff --git a/Applications/Accessories/Calculator.app/Run.HC b/Applications/Accessories/Calculator.app/Run.HC new file mode 100644 index 0000000..2de14ec --- /dev/null +++ b/Applications/Accessories/Calculator.app/Run.HC @@ -0,0 +1,100 @@ +Gui.App(); + +#define CALC_OP_ADD 0 +#define CALC_OP_SUB 1 +#define CALC_OP_MUL 2 +#define CALC_OP_DIV 3 + +class @calc_entry +{ + I64 op; + F64 entry; +}; + +Window* win = NULL; +TextInputWidget* result = NULL; + +U8* calc_font = "Eight Bit Dragon"; +U8* @calc_button_label[27] = { "Back", "CE", "C", "MC", "7", "8", "9", + "/", "sqrt", "MR", "4", "5", "6", "*", + "%", "MS", "1", "2", "3", "-", "1/x", + "M+", "0", "+/-", ".", "+", "=" }; + +U0 @calc_keypress_callback(Window*, I64 key) +{ + if (win != Compositor.active_win) + return; + U8* res_text = result->text; + switch (ScanCode2Char(key)) { + case '0' ... '9': + StrPrint(res_text + StrLen(res_text), "%c", ScanCode2Char(key)); + break; + } +} + +U0 @calc_btn_callback(ButtonWidget* widget) +{ + U8* res_text = result->text; + if (Str2I64(widget->text)) { + StrCpy(res_text + StrLen(res_text), widget->text); + } + if (!StrCmp(widget->text, "0")) + StrCpy(res_text + StrLen(res_text), widget->text); +} + +U0 window_close(Window* win) +{ + if (win == Compositor.active_win) + Gui.Window.SetFocus(Compositor.GetWindowByTitle("Wallpaper")); + Compositor.UnregisterForGlobalInputEvents(win); + Compositor.DestroyWindow(win); +} + +U0 Main() +{ + I64 i; + I64 j; + I64 k; + U64 flags = WIN_FLAGS_DEFAULT; + flags &= ~WIN_FLAGS_RESIZABLE; + flags &= ~WIN_FLAGS_MAX_BUTTON; + win = Compositor.CreateWindow(224, 224, 233, 240, flags); + Gui.Window.SetTitle(win, "Calculator"); + Compositor.RegisterForGlobalInputEvents(win); + Gui.Window.SetIcon(win, Image.FileToContext2D("window_icon_16x16.png")); + Gui.Window.SetFocus(win); + Gui.Window.SetCallback(win, "close", &window_close); + Gui.Window.SetCallback(win, "keypress", &@calc_keypress_callback); + + result = Gui.CreateWidget(win, WIDGET_TYPE_INPUT, 4, 4, 246, 24); + Gui.Widget.SetFont(result, calc_font); + + ButtonWidget* calc_btn[27]; + + for (i = 0; i < 4; i++) { + if (i < 3) { + calc_btn[i] = Gui.CreateWidget(win, WIDGET_TYPE_BUTTON, 46 + (60 * i), 32, 56, 32); + calc_btn[i]->color = Color(255, 0, 0); + Gui.Widget.SetText(calc_btn[i], @calc_button_label[i]); + Gui.Widget.SetFont(calc_btn[i], calc_font); + Gui.Widget.SetCallback(calc_btn[i], "clicked", &@calc_btn_callback); + } + j = 3 + (6 * i); + calc_btn[j] = Gui.CreateWidget(win, WIDGET_TYPE_BUTTON, 4, 68 + (36 * i), 32, 32); + calc_btn[j]->color = Color(255, 0, 0); + Gui.Widget.SetText(calc_btn[j], @calc_button_label[j]); + Gui.Widget.SetFont(calc_btn[j], calc_font); + Gui.Widget.SetCallback(calc_btn[j], "clicked", &@calc_btn_callback); + for (k = 1; k < 6; k++) { + calc_btn[j + k] = Gui.CreateWidget(win, WIDGET_TYPE_BUTTON, 10 + (36 * k), + 68 + (36 * i), 32, 32); + calc_btn[j + k]->color = T(k == 4 || k == 5 && i == 3, Color(255, 0, 0), Color(0, 0, 255)); + Gui.Widget.SetText(calc_btn[j + k], @calc_button_label[j + k]); + Gui.Widget.SetFont(calc_btn[j + k], calc_font); + Gui.Widget.SetCallback(calc_btn[j + k], "clicked", &@calc_btn_callback); + } + } + Suspend; +} + +Main; \ No newline at end of file diff --git a/Applications/Accessories/Calculator.app/window_icon_16x16.png b/Applications/Accessories/Calculator.app/window_icon_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..4c07061405ba0d8bbc73b051efef4de5811ca484 GIT binary patch literal 619 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!toj67W&Ln`L9PV)7*5-4)C z-gxo36)9&s;$JLTDDu{+TuQH1jP-34YwjHvSC%}bTUXSgTAaKy1=$2&9tz#swa7?? zgXyRWhv}NkS!r|De=p4Mw*P!yX5sE#@9$Qhw|>4yIx#$^a&|3mPZwMIbCLC3g}=ir<(v<5LhoX}1HTS5pY9Kv5r1phizz2}ny$0` zEA+s=reR;qimlgYzgQFW@zm8$Muth964(7@`Id0hRBSu-Eo|OiL8F3Wu0k6*{+_g$ zzd5zX$x8Bhg3_tJ@U}_5Teg~BWqfmwnRUm{B<6;B-@?-3av2RwW+Z)ltj2KsQZ7Rj zyTUQoQ(-$TZk_$zvv9rYv7Zz9!no$mTgI_+v1Z*=nMDe%NiPn@3(sBQ{4ys~A(1!m zfrrt#2zTX+5mP$%rS+L;UrZ>GXS=qTYjSb+!j@|PYm63#ch3HO9?vKt|L)d(=J%>h z1;5`Yc-w2097#^(yHLMLyy1Q2Xa3J8^0s`8eqYC=`LSt*(xM9e2<;9wZk5(Wv2$&O c>yFD;t~IK!{T`mez`(%Z>FVdQ&MBb@0At-0ivR!s literal 0 HcmV?d00001 diff --git a/Applications/Accessories/Icon.png b/Applications/Accessories/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5722be45d8c9c7b0c26c2f4a9d41286a1acd10 GIT binary patch literal 850 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7Sc;uILpV4%IBGajIv5xj zI14-?iy0VruY)k7lg8`{1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh zq!<{O&U?BzhFJ9WPQ2|M5-4(Pf2~dNvomLR&WJshR3dX~jfB_BCNJ^D?1tKh+V$!k z{T*3sJ<{b`^nwJZT@4oKypZ9)G|4smq9<3bfV}%klSNl%DnH)2UarW%ZFQ`Em_|WzW@CA_Zc2G;e5qgu5a#dXJ4GW z_*eJz^X=#7*zImE&AT~;Yi&g28$+Hm{XGW+d!3$D_Po|&I%}Atb)Tu_GP8q4R10@J zo{)(=w|37;-lYRJvlMa(rGWE=RPBUtC)HxO%SY(?0 zpu~D(ZnkQCXlU^1Pj{x*nd>w0Fu#{*p6RFW`JiBz0*BcWwPO<}Zg#ra)~l``zq8^| z{((bB66fcil&`Rj+c76^P4sTDO*+a#n!?Qg4$Pf4?b)UMLOK_n?q9#Y+UVFpy&D$; z;@b;64W;f45W zTX)Tx@2}#pi!W`n~4-9uWZH^sc}>NQUcwvHOpcyz`1D#L|V$33^M zz475e(~?E2KVQsfS@-d?##SMI#?|59cl8<0IQN3<#;?|Nkx=87=Pk<7ZCM}ZZE!!S ze)*94p*mkajhgJ2E7|r(&dL5T{b-cUHioj*%gwJJTWJ>dDJrlc=tj8Cl&Q}u*Ua8w zwDhU!$;F$FUFZ~4Ynd*RYNnAOFd=5r%+hbHulKo{9bJ4Perc0hpG@V)U#_~|*L$9< zc_I0eD`d^i|MQp6n>#P7q`Y;(_p2uM#}Dr0-?}RE-@I9AZ+T?&3u3c=ny310zP~6u zde(c1JJto2moEje7i{HLKA#ojeNDApr`n8LUff_x!^3Kci0m_~cAoz!d}RC6&UX(! zaHuW0xAz}=d}aE9h(4oZ3=9mM1s;*b3=F*2L734=V|E1t1EXVrPlzi614Eo~T8vpr zlxcdbX=;o~MwEG4tXWE|d1kC-W~_Neyj6CZb78tuLApy(mRoU_TS5eMMM(WmIELY;#?FTV-TZRb*3V_Jp3o8U01Grc}yIDYaOCK=Q%AR*KECVxiCyPT?zwPk@7Ys(FP_?a`P9CvXAhh|d+^G+ zLzmATx_dHw9o zo9AyozWw;|?Wa%gK7D%s`SXV_pFezKdiR8rfq_AxB*-tA!N%6k-oer7?%l_azd*oO z1o-x?|H=^5 zH=J6k+V1)?)56oiCE{tYuyYghR#Ba#76+xAPb)nY6&3fL%KN9L_QyeR-Geh9K73$E z_SP3wRo3NWV=LR(5h1TF>sroi8tg4ML9Q%Nytp*path) + return; + SystemStarter.CreateTask(widget->path, &widget->text); +} + +U0 @system_menu_init() +{ + JsonObject* data = Json.ParseFile("M:/Settings/SystemMenu.json", erythros_mem_task); + JsonArray* items = data->a("items"); + JsonArray* subitems = NULL; + Window* submenu = NULL; + I64 i; + I64 j; + // System Menu supports 2 levels of nesting to separate groups of Applications + // into categories. + for (i = 0; i < items->length; i++) { + if (items->o(i)->@("name")) { + if (items->o(i)->@("path")) { + Menu.AddItem( + sys_menu, items->o(i)->@("name"), + @image_file_to_context2d(items->o(i)->@("icon")), + &@system_menu_item_clicked, + items->o(i)->@("path")); + } + if (items->o(i)->@("items")) { + submenu = Menu.New(items->o(i)->@("name")); + submenu->x = sys_menu->width; + submenu->y = 35 + sys_menu->y + (MENU_ITEM_MIN_HEIGHT * i); + subitems = items->o(i)->a("items"); + for (j = 0; j < subitems->length; j++) { + if (subitems->o(j)->@("name")) { + if (subitems->o(j)->@("path")) { + Menu.AddItem(submenu, + subitems->o(j)->@("name"), + @image_file_to_context2d( + subitems->o(j)->@("icon")), + &@system_menu_item_clicked, + subitems->o(j)->@("path")); + } + } + } + Menu.AddItem( + sys_menu, items->o(i)->@("name"), + @image_file_to_context2d(items->o(i)->@("icon")), + NULL, NULL, submenu); + } + } + } +} + +U0 @system_menu_show(Context2DWidget* widget) +{ + sys_menu->x = 0; + sys_menu->y = 32; + if (widget->width == 30 && widget->height == 30) + Fill2D(widget->ctx, Color(192, 192, 192)); + Gui.Window.Show(sys_menu); + Gui.Window.SetFocus(sys_menu); + Gui.Window.Refresh(sys_menu); +} + +U0 Main() +{ + Window* win = Compositor.CreateWindow(0, 0, Display.Width(), 32, + WIN_FLAGS_NOHILIGHT | WIN_FLAGS_SKIP); + Gui.Window.SetTitle(win, "MenuBar"); + + ButtonWidget* system_menu_btn = Gui.CreateWidget(win, WIDGET_TYPE_BUTTON, 0, 0, 58, 24); + Gui.Widget.SetText(system_menu_btn, ""); + system_menu_btn->image = @image_file_to_context2d("system_menu.png"); + system_menu_btn->width = system_menu_btn->image->width + 8; + + Context2DWidget* separator = Gui.CreateWidget( + win, WIDGET_TYPE_CONTEXT2D, + system_menu_btn->x + system_menu_btn->width + 4, 2, 2, 20); + separator->ctx = NewContext2D(2, 20); + Line2D(separator->ctx, 0, 0, 0, 20, Color(224, 224, 224)); + Line2D(separator->ctx, 1, 0, 1, 20, Color(128, 128, 128)); + + TextInputWidget* active_app_title = Gui.CreateWidget( + win, WIDGET_TYPE_LABEL, separator->x + separator->width + 8, 8, 192, 64); + + if (!Compositor.active_win) + Gui.Window.SetFocus(Compositor.GetWindowByTitle("Wallpaper")); + + Gui.Widget.SetFont(active_app_title, "Eight Bit Dragon"); + Gui.Widget.SetText(active_app_title, Compositor.active_win->title); + + CDateStruct ds; + U8 clock_text[32]; + TextInputWidget* clock = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, Display.Width() - 94, 8, 64, 32); + Gui.Widget.SetFont(clock, "Eight Bit Dragon"); + Gui.Window.Refresh(win); + + // FIXME: This is an ugly way to do this... + Compositor.menubar.win = win; + Compositor.menubar.task = Fs; + Compositor.menubar.title = active_app_title; + + Gui.Widget.SetCallback(system_menu_btn, "clicked", &@system_menu_show); + + // System Clock + I64 min = -1; + while (1) { + Date2Struct(&ds, Now); + if (ds.min != min) { + StrPrint(&clock_text, "%02d %03tZ, %02d:%02d", ds.day_of_mon, ds.mon - 1, + "ST_MONTHS", ds.hour, ds.min); + Gui.Widget.SetText(clock, &clock_text); + Gui.Window.Refresh(win); + min = ds.min; + } + if (Compositor.active_win != sys_menu && Gui.Window.IsVisible(sys_menu)) + Gui.Window.Hide(sys_menu); + Sleep(1); + } +} + +@system_menu_init; +Main; \ No newline at end of file diff --git a/Applications/OS/MenuBar.app/system_menu.png b/Applications/OS/MenuBar.app/system_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..345b7ec8331880b46551ed9439861318eb461808 GIT binary patch literal 869 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU!z$g~(3%E+zuG!#`sQtH`_dj7p4}qzkn`b>S;<=Wgx+1@ zdYSr=`QZjtc9DG{RmUEyAFb@aFA{z7h{%u7^8x?F)9W^dZRk4Ge5lrS?~=cB-0!N) zFnyM`^xKIyN7WpAG!%`dL^vK#j98^O^XhlkeYKa@bh%I7?xUmy2zE5 z7dL-;IVJR6{pT&kil;(LQG z|N6GDmf24~D=LlsoY}(P_k5yX=C5>IW*A&;VpDe9hqJ~l5Ry{=MTi3TbX-M;hX z%g>*`|NQy;_us#N0j%to7#J9qc)B=-NJyskpXO?EkZApHY&^@v(};D-a3JvD<%KgnG&*2mYvuu3i6q!tDnm{ Hr-UW|7&)so literal 0 HcmV?d00001 diff --git a/Applications/OS/ShutDown.app/Icon.png b/Applications/OS/ShutDown.app/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..788df679a5667da7c7ee921a37fb84653ebebee6 GIT binary patch literal 875 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU86oljrobre7|8_&}JK zB_nZ4o^Scvk1k5*_CNm1Hhf3`Y@xQW@(1@J%POI z#kUrH*jI36A~RRKhHdau_oFwp_G^^|o#gzmdfvk~{OA58*gk*K`nyHBa`lq>`R;dB zQbf|0EiF6s=8)=16~jX*8XH?&C)TZGJ^3d8{(Obt6F2|AQn0ooM9iPqmB96vt3+*d^PEWdgV)l#K zrn;Nh*Jc+K#a%YKU9gK!wtU;OjQAjjW%o@U{*;KibfJvZ_w&^?`>tE=YQ3_`=A!DG zH%{x{O>_%)r2V9fTR3G-g*YFfiN*@Ck99J9qB9dGi)5 zSTKM7{JC@I&Y3gk!i5W$FJES0U|?lsAKix)3my?XW9wQJX}U%zqV#?6~I@7}$8@7}%p_wPS=@ZjOYhmRjWe)8nW)2C0L zJ$v^2`STYqUc7wy^3|(XuV24@^XARlw{PFQd-wkR`wt&JeEj(F)2C0LKY#x6<;%Bk z-+ul2_51hlKY#xG{rmUdzkmP#|94*?zmsignature == WIN_SIGNATURE) { + Compositor.DestroyWindow(o(Window*)); + Gui.Window.SetFocus(Compositor.GetWindowByTitle("Wallpaper")); + return; + } + switch (o(Widget*)->tag) { + case TRUE: + System.PowerOff(); + break; + default: + Compositor.DestroyWindow(o(Widget*)->parent_win); + Gui.Window.SetFocus(Compositor.GetWindowByTitle("Wallpaper")); + return; + break; + } +} + +MessageBox.Alert("Do you want to shut down this computer?", + "[\"OK\",\"Cancel\"]", &@shutdown_callback); \ No newline at end of file diff --git a/Applications/OS/TaskSwitcher.app/Run.HC b/Applications/OS/TaskSwitcher.app/Run.HC new file mode 100644 index 0000000..10453ed --- /dev/null +++ b/Applications/OS/TaskSwitcher.app/Run.HC @@ -0,0 +1,198 @@ +Gui.App(); +#define MAX_THUMBS_PER_LINE 10 + +Window* win = Compositor.CreateWindow(120, 120, 640, 192, WIN_FLAGS_SKIP); +Window* to_be_focused_win = NULL; +Bool task_switcher_active = FALSE; +Bool task_switcher_invoke = FALSE; + +I64 caption_width = 0; +F64 win_scale = 0.0; +I64 win_thumb_size = 128; +I64 win_thumb_container_size = win_thumb_size + 32; +I64 win_index = -1; +I64 win_items = 0; +I64 cur_index = 0; +U8* cur_win_title = NULL; +Context2D* win_scaled = NULL; + +@compositor_windows_list* win_list = NULL; + +TextLabelWidget* caption = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 8, 8, 256, 64); +Gui.Widget.SetFont(caption, "Eight Bit Dragon"); + +Context2DWidget* cursor = NULL; + +U0 keypress_callback(Window* win, I64) +{ + I64 i; + if (!task_switcher_active) { + if ((KeyDown(SC_CTRL) && KeyDown(Char2ScanCode('w'))) || (KeyDown(SC_ALT) && KeyDown(SC_F4))) + if (Compositor.active_win != win && Compositor.active_win->callback.close) + Compositor.active_win->callback.close(Compositor.active_win); + return; + } + if (KeyDown(SC_TAB)) { + if (KeyDown(SC_SHIFT)) + win_index--; + else + win_index += T(win_items > 1 && task_switcher_invoke, 2, 1); + } + + if (!win_items) + return; + + @window_widgets_list* set_item = win->widget->next->next->next; + if (win_index < 0) + win_index = win_items - 1; + if (win_index >= win_items) + win_index = 0; + for (i = 0; i < win_index; i++) + set_item = set_item->next; + + cursor->x = set_item->widget->x; + cursor->y = set_item->widget->y; + + to_be_focused_win = set_item->widget->id; + Gui.Widget.SetText(caption, set_item->widget->tag); + caption->width = Print2D(NULL, Compositor.theme.font.menu, 0, 0, , , &caption->text); + caption->x = (win->width / 2) - (caption->width / 2); + caption->y = win->height - 24; + + Gui.Window.Refresh(win); + task_switcher_invoke = FALSE; +} + +U0 @taskswitcher_clear_win_thumbs(Window* win) +{ + @window_widgets_list* iter_widget = win->widget; + @window_widgets_list* del_widget = NULL; + while (iter_widget->next) + iter_widget = iter_widget->next; + while (iter_widget->widget->type == WIDGET_TYPE_CONTEXT2D) { + iter_widget = iter_widget->prev; + del_widget = iter_widget->next; + iter_widget->next = NULL; + if (del_widget->widget(Context2DWidget*)->ctx) + DelContext2D(del_widget->widget(Context2DWidget*)->ctx); + Free(del_widget->widget->tag); + Free(del_widget->widget); + Free(del_widget); + } + Gui.Widget.SetText(caption, ""); +} + +U0 @taskswitcher_render_win_thumbs(Window* win) +{ + @compositor_windows_list* origin_list; + @compositor_windows_list* iter_list; + Context2DWidget* widget = NULL; + cursor = Gui.CreateWidget(win, WIDGET_TYPE_CONTEXT2D, -999, -999, + win_thumb_container_size, win_thumb_container_size); + cursor->ctx = NewContext2D(win_thumb_container_size, win_thumb_container_size); + Fill2D(cursor->ctx, Compositor.theme.color.hilight); + + I64 min_caption_width = 0; + win_items = 0; + I64 cur_item = 0; + I64 item_offset = 0; + + origin_list = Compositor.windows->next; + while (origin_list->next) + origin_list = origin_list->next; + + iter_list = origin_list; + while (iter_list) { + if (iter_list->window) + if (!@gui_window_flag_is_set(iter_list->window, WIN_FLAGS_SKIP)) { + min_caption_width = Max(min_caption_width, + Print2D(NULL, Compositor.theme.font.menu, 0, 0, , , + "%s - [%dx%d] at [%d, %d]", iter_list->window->title, + iter_list->window->width, iter_list->window->height, + iter_list->window->x, iter_list->window->y)); + win_items++; + } + iter_list = iter_list->prev; + } + + win->width = Max((win_thumb_container_size * win_items) + T(win_items, 4, 0), + 64 + min_caption_width); + + item_offset = (win->width / 2) - (((win_thumb_container_size * win_items) + T(win_items, 0, 0)) / 2); + + iter_list = origin_list; + while (iter_list) { + if (iter_list->window) + if (!@gui_window_flag_is_set(iter_list->window, WIN_FLAGS_SKIP)) { + widget = Gui.CreateWidget( + win, WIDGET_TYPE_CONTEXT2D, + (win_thumb_container_size * cur_item) + item_offset, 0, + win_thumb_container_size, win_thumb_container_size); + widget->ctx = NewContext2D(win_thumb_container_size, win_thumb_container_size); + Fill2D(widget->ctx, NULL); + win_scale = 1.0; + while (iter_list->window->backing_store->width * win_scale > win_thumb_size || iter_list->window->backing_store->height * win_scale > win_thumb_size) + win_scale -= 0.001; + + win_scaled = Scale2D(iter_list->window->backing_store, win_scale, win_scale); + Fill2D(widget->ctx, NULL); + Blot2D(widget->ctx, + (win_thumb_container_size / 2) - (win_scaled->width / 2), + (win_thumb_container_size / 2) - (win_scaled->height / 2), + win_scaled); + DelContext2D(win_scaled); + widget->tag = CAlloc(256); + StrPrint(widget->tag, "%s - [%dx%d] at [%d, %d]", + iter_list->window->title, iter_list->window->width, + iter_list->window->height, iter_list->window->x, + iter_list->window->y); + widget->id = iter_list->window; // FIXME: We are abusing this property, + // introduce a better way to do this + + cur_item++; + } + iter_list = iter_list->prev; + } +} + +U0 Main() +{ + Gui.Window.SetTitle(win, "TaskSwitcher"); + Gui.Window.EnableAlphaChannel(win); + Gui.Window.SetOpacity(win, 224); + Compositor.RegisterForGlobalInputEvents(win); + Gui.Window.SetCallback(win, "keypress", &keypress_callback); + Gui.Window.Hide(win); + + while (1) { + if (KeyDown(SC_ALT) && KeyDown(SC_TAB)) + task_switcher_active = TRUE; + if (!KeyDown(SC_ALT)) + task_switcher_active = FALSE; + switch (task_switcher_active) { + case TRUE: + if (!to_be_focused_win) { + to_be_focused_win = Compositor.active_win; + task_switcher_invoke = TRUE; + @taskswitcher_render_win_thumbs(win); + Gui.Window.Center(win); + Gui.Window.SetFocus(win); + Gui.Window.Show(win); + } + break; + case FALSE: + if (to_be_focused_win) { + Gui.Window.SetFocus(to_be_focused_win); + Gui.Window.Show(to_be_focused_win); + to_be_focused_win = NULL; + Gui.Window.Hide(win); + @taskswitcher_clear_win_thumbs(win); + win_index = -1; + } + break; + } + Sleep(1); + } +} + +Main; \ No newline at end of file diff --git a/Applications/OS/TempleOS.app/Run.HC b/Applications/OS/TempleOS.app/Run.HC new file mode 100644 index 0000000..ef01123 --- /dev/null +++ b/Applications/OS/TempleOS.app/Run.HC @@ -0,0 +1,127 @@ +Gui.App(); + +U32 tos_palette_std[16] = { + Color(0, 0, 0), Color(0, 0, 170), Color(0, 170, 0), + Color(0, 170, 170), Color(170, 0, 0), Color(170, 0, 170), + Color(170, 85, 0), Color(170, 170, 170), Color(85, 85, 85), + Color(85, 85, 255), Color(85, 255, 85), Color(85, 255, 255), + Color(255, 85, 85), Color(255, 85, 255), Color(255, 255, 85), + Color(255, 255, 255) +}; + +I64 win_mouse_x = ms.pos.x; +I64 win_mouse_y = ms.pos.y; + +CTask* templeos_winmgr_task = NULL; + +U0 @templeos_close_callback(Window* win) +{ + Kill(templeos_winmgr_task); + Compositor.UnregisterForGlobalInputEvents(win); + Compositor.DestroyWindow(win); + win = NULL; + Exit; +} + +Context2D* win_hide_pointer_ctx = NewContext2D(4, 4); + +U0 @templeos_mouseat_callback(Window* win) +{ + win_mouse_x = win->mouse.x - 4; + win_mouse_y = win->mouse.y - 24; + if (win_mouse_x > 0 && win_mouse_x < 640 && win_mouse_y > 0 && win_mouse_y < 480) { + win->pointer = win_hide_pointer_ctx; + } else { + win->pointer = NULL; + } +} + +U0 @templeos_keypress_callback(Window* win, I64 key) +{ + if (win != Compositor.active_win) + return; + if (!KeyDown(SC_GUI) && key) { + if (KeyDown(SC_CURSOR_UP)) { + PostMsg(sys_focus_task, MSG_KEY_DOWN_UP, 0, SC_CURSOR_UP); + return; + } + if (KeyDown(SC_CURSOR_DOWN)) { + PostMsg(sys_focus_task, MSG_KEY_DOWN_UP, 0, SC_CURSOR_DOWN); + return; + } + if (KeyDown(SC_CURSOR_LEFT)) { + PostMsg(sys_focus_task, MSG_KEY_DOWN_UP, 0, SC_CURSOR_LEFT); + return; + } + if (KeyDown(SC_CURSOR_RIGHT)) { + PostMsg(sys_focus_task, MSG_KEY_DOWN_UP, 0, SC_CURSOR_RIGHT); + return; + } + // FIXME: Ctrl-key combinations + if (KeyDown(SC_SHIFT)) { + XTalkWait(sys_focus_task, "%c", SHIFT_KEY_SCAN_DECODE_TABLE(U8*)[key]); + } else { + XTalkWait(sys_focus_task, "%c", NORMAL_KEY_SCAN_DECODE_TABLE(U8*)[key]); + } + } +} + +Context2D* icon = Image.FileToContext2D("window_icon_16x16.png"); + +Window* win = Compositor.CreateWindow( + 18, 554, 649, 508, + (WIN_FLAGS_MOVABLE | WIN_FLAGS_ICON | WIN_FLAGS_TITLE_BAR | WIN_FLAGS_MIN_BUTTON | WIN_FLAGS_CLOSE_BUTTON), + "TempleOS Window Manager", icon); + +U0 Main() +{ + Gui.Window.Refresh(win); + Compositor.RegisterForGlobalInputEvents(win); + Gui.Window.SetCallback(win, "close", &@templeos_close_callback); + Gui.Window.SetCallback(win, "keypress", &@templeos_keypress_callback); + Gui.Window.SetCallback(win, "mouseat", &@templeos_mouseat_callback); + + Gui.Window.SetFocus(win); + + while (win) { + if (win == Compositor.active_win) { + win->flags |= WIN_FLAGS_NOFILL; + if (IsSuspended(sys_winmgr_task)) { + keydev.fp_ctrl_alt_cbs = tos_fp_cbs_enabled; + Suspend(sys_winmgr_task, FALSE); + } + ms.pos.x = win_mouse_x; + ms.pos.y = win_mouse_y; + } else { + if (!IsSuspended(sys_winmgr_task)) { + keydev.fp_ctrl_alt_cbs = tos_fp_cbs_disabled; + Suspend(sys_winmgr_task, TRUE); + } + } + Sleep(1); + } +} + +U0 @templeos_winmgr_redraw() +{ + CDC* dc; + I64 x, y; + while (1) { + dc = DCScrnCapture; + for (y = 0; y < GR_HEIGHT; y++) { + for (x = 0; x < GR_WIDTH; x++) { + Plot2D(win->render_ctx, x + 4, y + 24, + tos_palette_std[dc->body[(y * dc->width) + x]]); + Plot2D(win->backing_store, x + 4, y + 24, + tos_palette_std[dc->body[(y * dc->width) + x]]); + } + } + DCDel(dc); + Sleep(1); + } +} + +templeos_winmgr_task = Spawn(&@templeos_winmgr_redraw, , , 3); +// Adam("blkdev.boot_drv_let='C';WinFocus(User(\"WinMax;\n\"));\n"); + +Main; \ No newline at end of file diff --git a/Applications/OS/TempleOS.app/window_icon_16x16.png b/Applications/OS/TempleOS.app/window_icon_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f6461538200858463e73c227b3521254dc40f1 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdn`UJR*x37`TN&n2}-D90>*n z2KEw9Usv`gtUTg8>X#q(*efbC4s3S)-%eWICvGa_b!T;S>I=d#Wzp$P!NCr5Dr literal 0 HcmV?d00001 diff --git a/Applications/OS/Terminal.app/Icon.png b/Applications/OS/Terminal.app/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c8772e2c1f87cd9edc37012e86f676997a62c3d4 GIT binary patch literal 689 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7Sc;uILpV4%IBGajIv5xj zI14-?iy0VruY)k7lg8`{1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh zq!<_&_&|z6GD~t&8A4Kvax?Q1bFThgFp+_QK^!FGSXz>iU&P>(Sdg#aoS2iCo0ykU zl$v>eqLdZ`1A`_=iA!p6a#3bMNoIZ?gHvL0YKlUBnu1qic4?AAa7k)rUTTqgu|j!% zQMUSJ^_dI|jC(v?978O6mrl0L76}w-n?G~!=cj4MT92~0PYP|WKRAU^acR?1g+y-0 z2qB#{t{b)(I384sRp7`RbECdYB+@shecJD z81B3%`=9;$+chzzCVi!z+KT`0bf=#yfAPd})w-X5UMfHBXB0p8bjxO*r&(?He=&5N zkO+`x(9_eq^!lsE<|(VTJ*hl*=~C*XXPUEK@)&2jUCUy8FvoexyfA@dhUeq=CDi8j z21!2?x5@}Mlo9Q5bM}f25IM@?5HPvHc=P5p_hM2%pG+{LSOv^Y2(%{UPy zq}}nG-66cKn*Uw!lv!oF&wfA1kge^NtI^GrY+}my;U6EzApud1S(&H4uD)(DH`OBH z_f0;}NeQ{FhHdNPe@$+17Cw4aDa_jHyIrhDlp=RldjS6y)@AUc33A&KAwPVr@ zgB}hi*ToC#=AQ|Y>^78&o$_V5s0`CL`#18I9>EMNTbD~qyZ0+9d|j_lc{+Sr`O#a+ jc9U;?_WO0tp7E}+%GQrdr6L#@7#KWV{an^LB{Ts5^;IB? literal 0 HcmV?d00001 diff --git a/Applications/OS/Terminal.app/Run.HC b/Applications/OS/Terminal.app/Run.HC new file mode 100644 index 0000000..177b111 --- /dev/null +++ b/Applications/OS/Terminal.app/Run.HC @@ -0,0 +1,205 @@ +Gui.App(); + +Window* win = Compositor.CreateWindow(18, 62, 684, 474, WIN_FLAGS_DEFAULT); +Gui.Window.EnableAlphaChannel(win); +Gui.Window.SetOpacity(win, 224); +Gui.Window.SetIcon(win, Image.FileToContext2D("Icon.png")); +Gui.Window.SetTitle(win, "Terminal"); + +TerminalWidget* active_term = NULL; +@shell* sh = NULL; + +U0 @terminal_keypress_callback(Window* win, I64 key) +{ + if (!active_term || Compositor.active_win != win) + return; + I64 i; + U8 send_key[4]; + MemSetU32(&send_key, 0, 1); + switch (key) { + case SC_CURSOR_UP: + send_key[0] = '\x1b'; + send_key[1] = '['; + send_key[2] = 'A'; + break; + case SC_CURSOR_DOWN: + send_key[0] = '\x1b'; + send_key[1] = '['; + send_key[2] = 'B'; + break; + case SC_CURSOR_LEFT: + send_key[0] = '\x1b'; + send_key[1] = '['; + send_key[2] = 'D'; + break; + case SC_CURSOR_RIGHT: + send_key[0] = '\x1b'; + send_key[1] = '['; + send_key[2] = 'C'; + break; + case SC_DELETE: + send_key[0] = 21; + break; + case SC_BACKSPACE: + send_key[0] = 8; + break; + case SC_TAB: + send_key[0] = 9; + break; + case SC_ENTER: + send_key[0] = 10; + break; + case SC_HOME: + send_key[0] = 22; + break; + case SC_END: + send_key[0] = 23; + break; + case SC_PAGE_UP: + send_key[0] = 24; + break; + case SC_PAGE_DOWN: + send_key[0] = 25; + break; + case SC_ESC: + send_key[0] = 27; + break; + case 0x02 ... 0x0D: + case 0x10 ... 0x1B: + case 0x1E ... 0x29: + case 0x2B ... 0x35: + case 0x39: + if (!KeyDown(SC_SHIFT)) { + if (KeyDown(SC_CTRL)) { + switch (key) { + case Char2ScanCode('c'): + send_key[0] = 0x03; + sh->break = TRUE; + break; + default: + break; + } + } else { + send_key[0] = NORMAL_KEY_SCAN_DECODE_TABLE(U8*)[key]; + } + } else { + if (key == 0x39) // Handle TempleOS SHIFT-SPACE character. + send_key[0] = ' '; + else { + if (KeyDown(SC_CTRL)) { + // terminal copy paste handling + } else { + send_key[0] = SHIFT_KEY_SCAN_DECODE_TABLE(U8*)[key]; + } + } + }; + break; + default: + return; + break; + } + for (i = 0; i < 4; i++) + if (send_key[i] && active_term->output) + FifoU8Ins(active_term->output, send_key[i]); +} + +TerminalWidget* t = Gui.CreateWidget(win, WIDGET_TYPE_TERMINAL, 0, 0, 120, 120); +t->pointer = Compositor.theme.pointer.text; +VerticalScrollBarWidget* vscroll = Gui.CreateWidget(win, WIDGET_TYPE_VERT_SCROLLBAR, 0, 0, 16, 128); +vscroll->height = 128; +Context2DWidget* status = Gui.CreateWidget(win, WIDGET_TYPE_CONTEXT2D, 0, 0, Display.Width(), 44); +status->ctx = NewContext2D(Display.Width(), 44); +Fill2D(status->ctx, Color(204, 204, 204, win->opacity)); + +U0 @terminal_create_new_instance() +{ + U32 init_bg_color = t->color.background; + init_bg_color.u8[3] = win->opacity; + Fill2D(t->backing_store, init_bg_color); + active_term = t; + sh = @shell_new; + sh->session = &Compositor.session; + t->output = sh->input; + sh->output = t->input; +} + +U0 window_close(Window* win) +{ + if (sh) + if (sh->task && sh->exit) + Free(sh); + if (win == Compositor.active_win) + Gui.Window.SetFocus(Compositor.GetWindowByTitle("Wallpaper")); + Compositor.UnregisterForGlobalInputEvents(win); + Compositor.DestroyWindow(win); +} + +U0 @terminal_vscroll_change(Widget*) +{ + I64 i = 0; + I64 max_scroll = vscroll->height - 32; + F64 f1 = (ToF64(max_scroll) / ToF64(t->cursor.y + t->max.y - 2)); + while (vscroll->scroll > ToI64(i * f1)) + i++; + t->scroll.y = i; + t->refresh = TRUE; + Gui.Window.Refresh(win); +} + +U0 Main() +{ + Compositor.RegisterForGlobalInputEvents(win); + Gui.Window.SetCallback(win, "keypress", &@terminal_keypress_callback); + Gui.Widget.SetCallback(vscroll, "change", &@terminal_vscroll_change); + I64 prev_width = -1; + I64 prev_height = -1; + I64 prev_max_x = -1; + I64 prev_max_y = -1; + F64 f1; + Gui.Window.SetFocus(win); + Gui.Window.SetCallback(win, "close", &window_close); + + @terminal_create_new_instance; + + while (win) { + // FIXME: This should be event-driven... + if (win->width != prev_width || win->height != prev_height) { + win->width = 3 + RoundI64(win->width, 8); + win->height = RoundI64(win->height, 16); + prev_width = win->width; + prev_height = win->height; + if (active_term) { + active_term->width = win->width; + active_term->height = win->height; + } + status->y = win->height - 44; + goto terminal_update_vscroll; + } + if (prev_max_x != t->max.x || prev_max_y != t->max.y) { + terminal_update_vscroll: + if (!t->max.y) { + vscroll->x = Display.Width(); // Hide + } else { + vscroll->x = win->width - vscroll->width - 9; + vscroll->height = win->height - 44; + f1 = (ToF64(t->size.rows) / ToF64(1 + t->cursor.y + t->max.y)); + vscroll->length = ToI64((vscroll->height - 32) * f1); + vscroll->scroll = vscroll->height; + } + prev_max_x = t->max.x; + prev_max_y = t->max.y; + // System.Log(Fs, "vscroll->scroll: %d", vscroll->scroll); + + Gui.Window.Refresh(win); + } + if (FifoU8Cnt(active_term->input)) + Gui.Window.Refresh(win); + if (sh->exit) { + win->callback.close(win); + return; + } + Sleep(10); + } +} + +Main; \ No newline at end of file diff --git a/Applications/OS/Wallpaper.app/Run.HC b/Applications/OS/Wallpaper.app/Run.HC new file mode 100644 index 0000000..d07d5a2 --- /dev/null +++ b/Applications/OS/Wallpaper.app/Run.HC @@ -0,0 +1,29 @@ +// Gui.App(); + +U0 @event_loop(CTask* task) +{ + Fs->ipc = task->ipc; + IpcMessage* msg; + while (1) { + msg = Ipc.MsgRecv(); + if (msg) { + Free(msg); + } + Sleep(1); + } +} + +Ipc.InitQueue(Fs); +Spawn(&@event_loop, Fs); + +U0 Main() +{ + System.Log(Fs, "Task running at 0x%08x", Fs); + Window* win = Compositor.CreateWindow(0, 0, Display.Width(), Display.Height(), + WIN_FLAGS_NO_REINDEX | WIN_FLAGS_SKIP, + "Wallpaper"); + Compositor.SetWallpaper(Compositor.theme.wallpaper); + Suspend; +} + +Main; \ No newline at end of file diff --git a/Applications/TestApplication.app/Run.HC b/Applications/TestApplication.app/Run.HC new file mode 100644 index 0000000..8539dfe --- /dev/null +++ b/Applications/TestApplication.app/Run.HC @@ -0,0 +1,96 @@ +#include "M:/Include/Gui"; + +U0 window_close(Window* win) { Compositor.DestroyWindow(win); } + +U0 btn1_click(Widget* widget) +{ + no_warn widget; + Window* win = Compositor.CreateWindow(Rand * Display.Width(), Rand * Display.Height(), + 320, 240, WIN_FLAGS_DEFAULT); + win->callback.close = &window_close; + Gui.Window.SetTitle(win, "New Window"); + Gui.Window.SetFocus(win); +} + +U0 btn2_click(Widget*) +{ + System.text_mode = TRUE; + Dbg; +} + +U0 hs1_change(HorizontalSliderWidget* widget) +{ + Gui.Window.SetOpacity(widget->parent_win, + ClampI64(1.4 * widget->scroll, 0, 255)); +} + +U0 Main() +{ + Window* win = Compositor.CreateWindow(240, 240, 662, 504, WIN_FLAGS_DEFAULT); + win->alpha = TRUE; + Gui.Window.Center(win); + Gui.Window.SetTitle(win, "Test Application"); + + TextInputWidget* label1 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 8, 0, 192, 64); + Gui.Widget.SetText(label1, + "\n" + "Welcome to Erythros desktop environment for TempleOS!\n" + "\n" + "This is a test application for Gui Widgets. " + "There will be bugs. Please report them! :)\n" + "\n"); + + ButtonWidget* btn1 = Gui.CreateWidget(win, WIDGET_TYPE_BUTTON, 8, 56, 192, 32); + Gui.Widget.SetText(btn1, "Click me for a new Window"); + + ButtonWidget* btn2 = Gui.CreateWidget(win, WIDGET_TYPE_BUTTON, 224, 56, 256, 32); + Gui.Widget.SetText(btn2, "Click me to open TempleOS Debugger"); + + btn1->callback.clicked = &btn1_click; + btn2->callback.clicked = &btn2_click; + + CheckBoxWidget* cb1 = Gui.CreateWidget(win, WIDGET_TYPE_CHECKBOX, 8, 160, 14, 14); + TextInputWidget* label2 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 32, 162, 100, 14); + Gui.Widget.SetText(label2, "Some random checkbox"); + + RadioButtonWidget* radio1 = Gui.CreateWidget(win, WIDGET_TYPE_RADIO, 192, 160, 14, 14); + RadioButtonWidget* radio2 = Gui.CreateWidget(win, WIDGET_TYPE_RADIO, 192, 180, 14, 14); + RadioButtonWidget* radio3 = Gui.CreateWidget(win, WIDGET_TYPE_RADIO, 192, 200, 14, 14); + TextInputWidget* label3 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 216, 162, 192, 14); + Gui.Widget.SetText(label3, "Radio #1"); + TextInputWidget* label4 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 216, 182, 192, 14); + Gui.Widget.SetText(label4, "Radio #2"); + TextInputWidget* label5 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 216, 202, 192, 14); + Gui.Widget.SetText(label5, "Radio #3"); + + Gui.Widget.SetEcho(label2, cb1); + Gui.Widget.SetEcho(label3, radio1); + Gui.Widget.SetEcho(label4, radio2); + Gui.Widget.SetEcho(label5, radio3); + + HorizontalSliderWidget* hs1 = Gui.CreateWidget(win, WIDGET_TYPE_HORZ_SLIDER, 338, 192, 192, 64); + hs1->max = 100; + hs1->scroll = (hs1->width / 5) * 4.25; + hs1->callback.change = &hs1_change; + TextInputWidget* label6 = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 398, 220, 192, 64); + Gui.Widget.SetText(label6, "Window Opacity"); + + VerticalSliderWidget* vs1 = Gui.CreateWidget(win, WIDGET_TYPE_VERT_SLIDER, 576, 192, 64, 192); + vs1->max = 100; + vs1->scroll = hs1->height / 2; + + Gui.Widget.SetEcho(vs1, hs1); + + TextInputWidget* input1 = Gui.CreateWidget(win, WIDGET_TYPE_INPUT, 8, 320, 256, 64); + input1->font = BitmapFonts.GetByName("Eight Bit Dragon"); + Gui.Widget.SetText(input1, "this is some sample text"); + + Gui.Window.SetFocus(win); + Gui.Window.Refresh(win); + + Gui.Window.SetOpacity(win, ClampI64(1.4 * hs1->scroll, 0, 255)); + + Suspend; +} + +Main; \ No newline at end of file diff --git a/Include/Gui.HC b/Include/Gui.HC new file mode 100644 index 0000000..4b13fd3 --- /dev/null +++ b/Include/Gui.HC @@ -0,0 +1,53 @@ +U0 @gui_event_loop(CTask* task) +{ + Fs->ipc = task->ipc; + IpcMessage* msg; + while (1) { + msg = Ipc.MsgRecv(); + if (msg) { + switch (msg->type) { + // TODO: + case CPZ_MSG_WIN_WIDGET_DESTROY: + @gui_widget_destroy(msg->payload); + case CPZ_MSG_WIN_MOVE_TO: + break; + case CPZ_MSG_WIN_KEY_PRESS: + if (msg->payload(Window*)->callback.keypress) + msg->payload(Window*)->callback.keypress(msg->payload, msg->i64); + @gui_window_repaint(msg->payload, msg->type); + Compositor.theme.window_repaint(msg->payload, msg->type); + if (msg->payload(Window*)->callback.repaint) + msg->payload(Window*)->callback.repaint(msg->payload); + break; + case CPZ_MSG_WIN_MOUSE_AT: + if (msg->payload(Window*)->callback.mouseat) + msg->payload(Window*)->callback.mouseat(msg->payload); + @gui_window_repaint(msg->payload, msg->type); + Compositor.theme.window_repaint(msg->payload, msg->type); + if (msg->payload(Window*)->callback.repaint) + msg->payload(Window*)->callback.repaint(msg->payload); + break; + case CPZ_MSG_WIN_MOUSE_WHEEL: + case CPZ_MSG_WIN_LEFT_BTN_UP: + case CPZ_MSG_WIN_LEFT_BTN_DOWN: + case CPZ_MSG_WIN_RIGHT_BTN_UP: + case CPZ_MSG_WIN_RIGHT_BTN_DOWN: + case CPZ_MSG_WIN_REPAINT: + @gui_window_repaint(msg->payload, msg->type); + Compositor.theme.window_repaint(msg->payload, msg->type); + if (msg->payload(Window*)->callback.repaint) + msg->payload(Window*)->callback.repaint(msg->payload); + break; + // FIXME: add CPZ_MSG_WIN_RESIZE + default: + break; + } + Free(msg); + } + Sleep(1); + } +} + +Ipc.InitQueue(Fs); +Spawn(&@gui_event_loop, Fs, Fs->task_name, 1); +System.Log(Fs, "Task running at 0x%08x", Fs); \ No newline at end of file diff --git a/Media/Sounds/Beep.wav b/Media/Sounds/Beep.wav new file mode 100644 index 0000000000000000000000000000000000000000..6b421b7be4ed904c7ece735c3cb90ada0da90e61 GIT binary patch literal 15404 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/BitmapFont/monospace.png b/Media/Themes/Umami/BitmapFont/monospace.png new file mode 100644 index 0000000000000000000000000000000000000000..dd0e181a099b19c8d36af62b43df45046fd3ca6f GIT binary patch literal 1371 zcmeAS@N?(olHy`uVBq!ia0y~yVEVzpz#zcH%)r1PcjWOl1_s80OlRkS%;aPS291fO z6K%Z@2Z*%YU*_eiEn6Z`cp~8F!q!C^eNpXtu3l>suBz_zjZ*YH?As+0e(>nR2MW7> znEv1|5seXLaTIik`NLeN8}w+W??TsG#XBwe^Uqc9_#WfnC4Hu(N~j@or_F4yQ>%ZP zT7KzcP>Cv@5jZ1RKgB4sq<6mis$~@&-EntcTOD(7ES3;>p*%0uti1Di=jG^ix)uEu zGp0^q`p8+>bD6O-zjfWOKWaN(e4d^#@3bD%q!*gvwQ|LtjTL?{#YF4Y&wOU`-M4D( zQrG^*6MO}gmoHsmevl6Nl{J!54CH|K4!9SjT%3dtTpz6=aiY77hwEes657#J8DUNA6}8Za=tN?>5H zn!&&zUNC1@pbY~9180FpWHAE+w-5+3UbgtpknHeG$J+gUnfAiw$0-NgZFKB4^&y?U96u4md z(xp!;=TAu0P$_BM<+QLet$~AaVOWT^mX_C?d`A)IwWjwTeJinKIU&4(Wy`hAOf25s zcl%2J&YKfx{g1&j@>f(Ych3vWJd4ka3>*a=3u{H16r!TKoUSG+M$CKjQb8eW-R6hZ z``Z3TbMMb?xb@+rah(c>S5t%R{bkQr#J~Tr`xWz_ryc5lZhn^h8c zJN}&aeukvB^6teA8V5E#Pt<5!v{Yhi67PkNPip1v&Hu5P-)0ZLmCUr=-@m(jzq_yS z;PE#57n)9t-d9-f8_J!(w_PX7>VV!FUbUYh=cE7J3_ky(S?L7#zqI>b@fY}%Guv!7pXEjh5wnlOX92GzZ)M{>Iq(%a!&Z)vxnl37+(mibo46OBfwu?Q*?Ot zk3}4@hpqMf;!os%s66_8jsGKWzPlf6pHHkfo-g?Ez`P*g`5dmLtqTH92y&gxVc>8- zb7f7~6ob=Y&OK2lccewQNxE#j`qX%y_wVJi-4~qr30Pl*Imy zX87Q8K)m>s)$8_c`_+@#Vwj`Cau^sGR7+eVN>UO_QmvAUQWHy38H@~!40R0*bq$O{ z42-P|jIE3fwG9lc3=B*^*Gxvykei>9nO2EggUh-j`V0&VY9JdjlasBI^9w4AGSf3k z82s`T;2a%=(&AKww4&71oXX|1J~S~fFv!Amq@)%n7iAWdWaj5F6bHFGDI}F<=9K7W V<~?pbc@&h-JYD@<);T3K0RS(7Qz!rc literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/BitmapFont/sans.png b/Media/Themes/Umami/BitmapFont/sans.png new file mode 100644 index 0000000000000000000000000000000000000000..244ab5fbc967b9ba700d4c033ea18fa70fa35730 GIT binary patch literal 606 zcmeAS@N?(olHy`uVBq!ia0y~yVEoR&z`(`C%)r2KCE@>Z1_lPk;vjb?hIQv;UNSH+ za0d8xAoX%4PH82xTC+M`H5{~{vIA?`42y}?OPuPFPO4*;aVAw39EABS=(#Ggp{Uw z9DLfqtR}-TbK~8Ln2J=z@F!VuhXkD?v)|3J&dyJ^eDS+;LY~n#&vS95YDU5nR%Pu_ zE}qhIWanmw3C*FR=g4h|b8!n3k4%*@NAeSEu_$@UiO?j-{LCRYeiR_uI|0N?dG-x{2gbf|I#^oOGs|s(}fpV65?gw z&3U%_^JPgkwl-^4u@l=ALYzE5y{bvJyp>>|q5pV;_(qRg?>_%HUfsT_t?10$sk+n|496UaQN=bQ{B_1NPv=t Mr>mdKI;Vst0J%UJn*aa+ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/add.png b/Media/Themes/Umami/Icon/actions/add.png new file mode 100644 index 0000000000000000000000000000000000000000..54f958c454c82562456ae6cb36327871ed06acbe GIT binary patch literal 506 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UssnsNTp5snN$L`l)FpXyF6Ga?R5%*nDf!mRnP{-JZJr_WXShmK=Pv^x&gaM;>oF^>p*;r<>0_-E!vX*3-|oo_V_U z%(Ja$o^LzzY}?sq+s{4Qec}1;i_iC5e7^7U%LA8RTz>HW|NsAHD>t2FU|?V^3GxeO zU}R!Gb6`!zBL)Tr#w2fd7md9ewr*lzV94}zaSYKopPV2e)6hC~D(h;N)jcBGS5;IZ zH{Rf82@*=+y2-jG>y(z(DxpVSU0j@#wU}&go jV5Vzm9%5)@Wn^w;Xav#lJThhpD9Als{an^LB{Ts51AWH* literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/address-book-new.png b/Media/Themes/Umami/Icon/actions/address-book-new.png new file mode 100644 index 0000000000000000000000000000000000000000..1cdd0b6b73d4d00e6e426964218b6554a4b2f2b5 GIT binary patch literal 1083 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zFuY{&H@Uu%mw|zSv%n*=n1O-!ItVj5Y0R!*U|_cOba4#vIKFl2*?ehNiDUJf<-cD4 zW$ee>+37JmOl4x!60cU~|BMUd1cLZPAFrf#LD44W`%^m{RtX&H zeX2HP!jZy9JNjOKUHACz&8H9e-yB&N%PE&>vba2LUi!1zdvja=OEMj>-La6_+y0qe zO~L!~>3Mn6maT|p{PXS0kqMV#|NeQr{XSF70rm@4#na9BpS_QX-Z!uI>C^~-H#)6~AlEzLepw|k2IQ`=ST zQTxrtZQ~!8#&zr-{s*r=TVZ-RWG!>hi@mOm$&-&gwG`s-p0W8dhi2y#xr;thN6PrB zUN1W4ocA|IpbOHFJ~Yr@hG{F?q3@hFW|^+)Mmy)feY0qqpjt`H@iR+2o^Sss+W5gn>9^>s zn=en=yeQ&-c)X^p>q@iitId~X;&yhdUp2!xy;HwN_UTufn7bQ(q|7)_P*rf)aTRxD z&t9XAa}Ss4EC`OAl`gX-@nFD*J2Phpa|Z6UF`rhjhMlRy&B@=_Hz%Yw@+P8?JG^cgg5 z|J~C4z4rP&;qCSNt7UiChdkJwU;lLJQI0O7pY;xbB6)uU+5-0MKDl^(6dOxUc+!ze zDd|SaoUInx{~k44?H8?%FWjtbq@l2Mca&y$_`Z1az22XvEy}L_*Z(mgPt9><#eMyW zLR+}qd2X-T`}1G=>MDgV$Bz7zY`QIfcMsc>mwU>Vb2~C8Ifz+&zw+kol`D<84^pl? zy~?-K$TFYbPN7k3@x0dmQvVs!e;C&AOy2UBfq_A_#5JNMC9x#cD!C{%u_Tqj$iT=z z*T7QOz%0bj!phjx%Fs;Pz`)ADVA^L3Llh0U`6-!cl?+A(hK9NZX1a#vA%;d)M&?$A Yh7b+cHo93dFfcH9y85}Sb4q9e0DS({mjD0& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/appointment-new.png b/Media/Themes/Umami/Icon/actions/appointment-new.png new file mode 100644 index 0000000000000000000000000000000000000000..1c55f86f3fb5bdd09fc211bf84a9623574f81cfb GIT binary patch literal 1477 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE$30yfLp+Wj4bAqM94;Z2WOnw>mDowS zdd{1VK1>oTPxLP9j5eCvozlpp%_lx5C(=yCC*$Il2N7a(z5l!yoBTI$iX)5b&W;EL zg{J78VP2Vt zEaF+}Hf3uD5vAE2CMnLUxp_ zluXyo`gnVNXvT^?ZRfn-ZoG9lepk)5Cu%N}LO9ez6*hg$PWb#P^(4QSi0>T9^r*kp z!pDyL?y!|^yd1zd`<=|2Us`9*xIFy00%S#PZnE0Wx4jzN3Yz!?l84c*p#faO;f5jVZrjC4ue&zS07Q@eOJ$7 zZrP@iDM@UGYj$q;PuZgQUvGn+Uc$y17w-h|cVAW6)#`fap+e+Cktb1W!}eHK%N1Lw zEqM3VF+E&*P1x)Q6ZDlQ1WYPT>C?TGm#tJ-{^Y=*0)JaAc z>m-{mKNQ*>qo%oc?-o~kZT?S6@$X*<9^~29(3)d*n#r>N=*gSatFQ7*KIt*_M&??d zM;w+j7S4!K3Q!0wDVlw6$0c8t$xRIhyCu}0=gTEWTNJCA&pw`LB9(Ejb6dCUqncCG zr-bMU{z&Toqgt7EGxlBv^Iqqs9#4zY$BtEfO#2`aeq`H`lYi^v+kUkjy{URyW3KY) z>w49EPt)bHdgMigw{cF?oLsn!hq<)-WRA#@H+4< zOLN(WRy}UNyQ9%s)8PG9)?C@^3*PPaTojfVs_>xw-L$wrrw#8fJ1KKy^VAPVikSF? z&D8eq(A^xcisyKLcI@fW0(({*U(mXQ!X|`}(@wOkbIN zfqAih3KKUpey|Fiv`ybM-alJt_x)DqdB-=|-?5)FW5x{cjnMG{5~PDODXeaOkUQ$Xzg0%A-Fq ztyRxa+~a%W>x)^X)hBnozhC|Ov9adud;e8m?mT;{rKM%BiMrw&g(U*>6xaM&A8s6e zMECobn$+lL9}n%B+kbxj-RA0lOw#)Tmm65_@M2(KP%UwdC`m~yNwrEYN=+5@$GBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6T Zm7yU-!?lfWmJAFG44$rjF6*2UngB$mDowS zdd{1VK1>oTPxLP9j5eCvozlpp%_lx5C(=yCC*$Il2N7a(z5l!yoBTI$iX)5b&W;EL zg{J78VP2Vt zEaF+}Hf3uD5vAE2CMnLUxp_ zluXyo`gnVNXvT^?ZRfn-ZoG9lepk)5Cu%N}LO9ez6*hg$PWb#P^(4QSi0>T9^r*kp z!pDyL?y!|^yd1zd`<=|2Us`9*xIFy00%S#PZnE0Wx4jzN3Yz!?l84c*p#faO;f5jVZrjC4ue&zS07Q@eOJ$7 zZrP@iDM@UGYj$q;PuZgQUvGn+Uc$y17w-h|cVAW6)#`fap+e+Cktb1W!}eHK%N1Lw zEqM3VF+E&*P1x)Q6ZDlQ1WYPT>C?TGm#tJ-{^Y=*0)JaAc z>m-{mKNQ*>qo%oc?-o~kZT?S6@$X*<9^~29(3)d*n#r>N=*gSatFQ7*KIt*_M&??d zM;w+j7S4!K3Q!0wDVlw6$0c8t$xRIhyCu}0=gTEWTNJCA&pw`LB9(Ejb6dCUqncCG zr-bMU{z&Toqgt7EGxlBv^Iqqs9#4zY$BtEfO#2`aeq`H`lYi^v+kUkjy{URyW3KY) z>w49EPt)bHdgMigw{cF?oLsn!hq<)-WRA#@H+4< zOLN(WRy}UNyQ9%s)8PG9)?C@^3*PPaTojfVs_>xw-L$wrrw#8fJ1KKy^VAPVikSF? z&D8eq(A^xcisyKLcI@fW0(({*U(mXQ!X|`}(@wOkbIN zfqAih3KKUpey|Fiv`ybM-alJt_x)DqdB-=|-?5)FW5x{cjnMG{5~PDODXeaOkUQ$Xzg0%A-Fq ztyRxa+~a%W>x)^X)hBnozhC|Ov9adud;e8m?mT;{rKM%BiMrw&g(U*>6xaM&A8s6e zMECobn$+lL9}n%B+kbxj-RA0lOw#)Tmm65_@M2(KP%UwdC`m~yNwrEYN=+5@$GBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6T Zm7yU-!?lfWmJAFG44$rjF6*2UngB$| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovyPZ!4!kK=Er`ewwsO0>=YY5Cm5d}Y!t zuFkbHn%rDgG#z{Ltn8xOS`Xf9|AXE*9q|oc*4e$wKq1dXKx>!5-4NHei=Fe{-szpV_hF`HbS^x4vfU{ya!Mci_zLy8FM+&TRa@*t276 z-V5s$<(vl<_n+mdvF^&;7Pqd|#{7}&j?Cce>Om{sHpHEsca^h8Y4hP%Z*OnQss7t~ z&{$CKiECVr ziMniSJN)`bft%-w%Z8*S|V&~kK@R%l{J46jT^4bxV+ z$5|H7XN4%dbWxHKG!0fXQO$CCSfC+)K%vk>RbbP+)tmXk8z=283GJ5p*DN2kX!*1A z^Q}Ll7+WgCf+Q+pm%UY(2285O{)O9PJ(73i$tLfUW?bnqyF1i)d5cp=L`I!qx zk9sQ~_m|P#`aAl?+bWjxp9AK({1(!mP&#q{Nl~i_9;yWgF4ZVMKc!afVDNLAW!ZD% zrL7-d9R4nM;$7bDdtbMl(64Ko94dG3mr_*r6!pS$iM`53Uj-StFQ+s_^{_GW{xEF1 zEbnfAch2LD!fAj0{;Mv_J9BrRzrU{B@yLqLC$bYGR`P1WPoF9r#YcOzAmGk@UlCv6thZJ+UZ`Q4r!>wawBf3Nh6|IXxXZkDNm5|gJT@0N-A>neOQ zv&((%tNxCML61C{Iy)jg%hm>L4Ap8~Vl`W+V^Yum&p){B{XICvR$TnYz`&qd;u=ws zl30>zm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhX zLqlByGhIXT5JMv?BXcW5BZ!9Qkuggc7#Ji$HU#IVm6RtIr81P4m+NKbWfvzW7NqLs X7p2dBXCuYHz`)??>gTe~DWM4f`6c|1 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/bookmark-new.png b/Media/Themes/Umami/Icon/actions/bookmark-new.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e8d311022d678d82efff324ceb848479779b1c GIT binary patch literal 1101 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_{+=$5As)x~PClD29V&9P{{7jWTw1F!Z3fu&9zqS@0rxCBLA6&)fMDJgDztlz<~(IIxxg-2cj zi=vkLP2Tcv#pKSFNyp=p&nG|RU%KwDnS#Zo7cci#zMoh9Zm0Oa`QMo z&VK#q({`7(%{~4-#YzFsmfqaWV_z(l*|%Z(&MkGHI_>W@R0Z*`HTkmciI`o*e`kh$ zzyGmM+y86k{r^6b@7;YLBf-bUQ1SUp^qKSL7q1Er*ecEOJ5->q%`Zz(>v~-Kuj>x` zW-~OLJ?krz&c8h@Nxy!2Oy2s*`{KW^xPHo_&slBqL4j1c%`rW0oC`g(o{HFMehV~V zs1o8(ys+d*srQvtsjH?o_a){XUGy&O#;sdPxw*WWug)Bu$5P69c!S6NxYVR0d$~m9 zJQS8XcnKdiFsM;u@M>Hp?ctkVQZgmOgv;S*_Jgou9@*8x@#ZrnGXGpN+qs{~chPU1 zlFP@otkPX9+IHW`T*u7JOhQJ6MM124;S+-&eg(&Wa@uYQ$~^wc`$EV<#U(D6d;Qd3 z?&4qhvZuG#(AxU;S3mca)zQ(XU|c;Yl=U< z2sroKb30hgJ+?`QVcD`}zqBU&<@i%)AH=b4z530QRxvSFr~R%ybbF-6@UUQphsvQZ zUrd5d?c=Jt%v85u-e0q96JNaEyhHg6BV5{J(cPWOeAIlPW)JrJE%T`V|K14T?4ZaLklZoQ!7I=Z36=<1A}RwEeugK?UF+SC95 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/bookmark_add.png b/Media/Themes/Umami/Icon/actions/bookmark_add.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e8d311022d678d82efff324ceb848479779b1c GIT binary patch literal 1101 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_{+=$5As)x~PClD29V&9P{{7jWTw1F!Z3fu&9zqS@0rxCBLA6&)fMDJgDztlz<~(IIxxg-2cj zi=vkLP2Tcv#pKSFNyp=p&nG|RU%KwDnS#Zo7cci#zMoh9Zm0Oa`QMo z&VK#q({`7(%{~4-#YzFsmfqaWV_z(l*|%Z(&MkGHI_>W@R0Z*`HTkmciI`o*e`kh$ zzyGmM+y86k{r^6b@7;YLBf-bUQ1SUp^qKSL7q1Er*ecEOJ5->q%`Zz(>v~-Kuj>x` zW-~OLJ?krz&c8h@Nxy!2Oy2s*`{KW^xPHo_&slBqL4j1c%`rW0oC`g(o{HFMehV~V zs1o8(ys+d*srQvtsjH?o_a){XUGy&O#;sdPxw*WWug)Bu$5P69c!S6NxYVR0d$~m9 zJQS8XcnKdiFsM;u@M>Hp?ctkVQZgmOgv;S*_Jgou9@*8x@#ZrnGXGpN+qs{~chPU1 zlFP@otkPX9+IHW`T*u7JOhQJ6MM124;S+-&eg(&Wa@uYQ$~^wc`$EV<#U(D6d;Qd3 z?&4qhvZuG#(AxU;S3mca)zQ(XU|c;Yl=U< z2sroKb30hgJ+?`QVcD`}zqBU&<@i%)AH=b4z530QRxvSFr~R%ybbF-6@UUQphsvQZ zUrd5d?c=Jt%v85u-e0q96JNaEyhHg6BV5{J(cPWOeAIlPW)JrJE%T`V|K14T?4ZaLklZoQ!7I=Z36=<1A}RwEeugK?UF+SC95 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/bookmarks_list_add.png b/Media/Themes/Umami/Icon/actions/bookmarks_list_add.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e8d311022d678d82efff324ceb848479779b1c GIT binary patch literal 1101 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_{+=$5As)x~PClD29V&9P{{7jWTw1F!Z3fu&9zqS@0rxCBLA6&)fMDJgDztlz<~(IIxxg-2cj zi=vkLP2Tcv#pKSFNyp=p&nG|RU%KwDnS#Zo7cci#zMoh9Zm0Oa`QMo z&VK#q({`7(%{~4-#YzFsmfqaWV_z(l*|%Z(&MkGHI_>W@R0Z*`HTkmciI`o*e`kh$ zzyGmM+y86k{r^6b@7;YLBf-bUQ1SUp^qKSL7q1Er*ecEOJ5->q%`Zz(>v~-Kuj>x` zW-~OLJ?krz&c8h@Nxy!2Oy2s*`{KW^xPHo_&slBqL4j1c%`rW0oC`g(o{HFMehV~V zs1o8(ys+d*srQvtsjH?o_a){XUGy&O#;sdPxw*WWug)Bu$5P69c!S6NxYVR0d$~m9 zJQS8XcnKdiFsM;u@M>Hp?ctkVQZgmOgv;S*_Jgou9@*8x@#ZrnGXGpN+qs{~chPU1 zlFP@otkPX9+IHW`T*u7JOhQJ6MM124;S+-&eg(&Wa@uYQ$~^wc`$EV<#U(D6d;Qd3 z?&4qhvZuG#(AxU;S3mca)zQ(XU|c;Yl=U< z2sroKb30hgJ+?`QVcD`}zqBU&<@i%)AH=b4z530QRxvSFr~R%ybbF-6@UUQphsvQZ zUrd5d?c=Jt%v85u-e0q96JNaEyhHg6BV5{J(cPWOeAIlPW)JrJE%T`V|K14T?4ZaLklZoQ!7I=Z36=<1A}RwEeugK?UF+SC95 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/bottom.png b/Media/Themes/Umami/Icon/actions/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..ecea1ee672ad6e5b4b07e8b0e716840f20eb5dd2 GIT binary patch literal 1111 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc zVDJEAx0Bg+3=E8S1AIbU85kI>idh&?fmJaJ99fsLSe3BYl(E>9vsjmckW~qbbqR=J zT?Ue}ui&z;Bdk+BZlaEL8B4|ttD@z0#jET}mb=uf41yY4 z!qT}XYU1v6t6~9=S;7%EPcVE1SHw!Lh*exsYq+BqN<^;^j9$+Z zvq&mtJx}af{@4vXu^V~fHu1!5=8fMdl(1GJaXVkqQstzbe96mHl6Uc^EK^NgrIfl? zAbo{a`a!{rLxPzrbuw4#W*!#ITBVnBLO6GgQT|$!{0)W$Yt0Ie%N1=gF4eaj>sQHXd z_bLC0XTv9*51(=}Y37N%IVTF{p3R+mwqV||@`X3E7oDtKe5!8o>AJ<2$`;?rS#r8= z$?5tfryG`>satZkZt2;&rRVCFo~vJWqjdR&`sEkvSAbB%ic1YEuQaT@Rk7+^$Es_M ztFJY#zTUXzV#k^rjcaZ;t-aZ__Eyu{M-}TX^lrQ~Y0H&qJFd;yePhAi8;keeT(s}j zlKr=q?!UF{;O!Ov|NmcjF!%`r1A|sckY6wZBNH~S4{nOq450nrYlf2zs=FQ)4>DfvZhS zfhL@5Z(d&RJJ)FE<|yviB)_Vhj{V)PqGg=sIzpR+lbmZ}eY_1-(o~PJ{Irl<;K9Kl zt88zqXmjDR)9w(t6M_w11t-tVu+FZEaoMnYUS6zkIvgeQ1-pq+%)6BM+P1||uPY*}*jaF0cw{K`}#O^PjwV_;hZh z!nwv*F@Bw&H1;<<;q&zS67XbN9#8K)mBYP~`}TAl74@poaB5nmuwdD|xr^7arEwi> zTD)Y*rhQBI?yi5-vTxqHZ_}!D(>7RihppVUt#9AL&YfF(x9;p*ShrS8I-<>UwFpO+ z)T~*zZ$-_XEtTc9HR9qT(eN*e7#ONv`|vD{{v61_z@S><8c~vxSdwa$T$GwvlFDFY zU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_LnA9A zb1Oq5h=%8pF-sU27$iY91m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BL&LIp00i_ I>zopr0QEP^t^fc4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/centrejust.png b/Media/Themes/Umami/Icon/actions/centrejust.png new file mode 100644 index 0000000000000000000000000000000000000000..896dfa106be7b47a9277f420976407891a146bfc GIT binary patch literal 694 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s8-o-U3d9>=#%KJ9nNL8R@xx%5qAScq0VFK0X#brQy(dBoX~nOL{IeD4u!q`iBTU^Ci^}ARR8>s zG4qG>jd{zzUy!xxOO|sAxx8ij>(#T}GBy;Kd$)JJt8I^oRrQM36Q60Uu5{vgzf-c8 z+u9ihf(#5tp9wLZKd--1VcJ!uMIsGlzk`&r_ZRxTWZ2zmKF!5(CBr7OnagJKCPeBk zlywmhP*Hevlc8th0X3E*8Y~SQw*QwhzH?G)s{3EM+O{o`<(!h;`i>*bYj5Uo=y>K? zGtMdY571%jJQT!GemKFP#Uya`RfkuqyG1416jvx|R{z(IWlVl?chcEo8yJ+_j_iCR z*|J%>*DZSO$}oMW^-+tMPxAHBojmYy7_4tXcQps&8M^+Am*ciCe^rTP#mjic?_{6`bCY zVSFs-*bRTZ>6=AEXJ*c_(iZFbR$=pRmfwDHg2D?NY%?P UN}v7C2ILF|Pgg&ebxsLQ0H3x3jQ{`u literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/contact-new.png b/Media/Themes/Umami/Icon/actions/contact-new.png new file mode 100644 index 0000000000000000000000000000000000000000..9123074d35799adf58778e153d4cb96140c7b429 GIT binary patch literal 1032 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_T%InDAs)xyPW8_b36(i+pP#ntZr;>$ z)21l-{-4pIvZ(auD;%H9H(?Xv7Jtl{ll17Q zv+$~=-QMQ6%{;nKUrK6!cjisCJ%8)M+j=rme6xP|#?|THKUrh{xi0@1@1N-^>>H+4 zy=r7RZ~M#SM4FCgQpiN9*WsbFcmHr;FuFd`X`}Q**9oN>rL0eE`f5F{K2wuvNWL#; zXKY)Vd)AdNgIa@eSzuuUv&k!FVIw7Z0X1|5^ z9>vBM#*d-dhQ}`4z3UquF0RyM$R@aO{rdOc{#d%OoR9w?ym5D>Xv4qD?~P34A7}mN zw`fd^i~RG_?%2uT_ZyzCZGKX;^To?v!}9o0!K956zP`Q}zpiR1e!g#EYOQSj=(@k=2eNj6m(REbG zQNZP)Qd3Y@ic#dnUDZrg@%8g#*UKiH({_ogO){O9s;snQU3W)Fi|)K|=8zip$&)7^ zd0Z;8{`};U>xFv@x@+oW1QT;|c$SL%tdUzPvMtxx#)##>i5IL}uJ!!;`1@}(ivSDb zwA6)L)5^-sKG~jMy@FeJSFHHm^;`GZGjy04PxW$*OHWUCWqon$4-Z3h(B0EbtC_5< ztPGANM4tAWu SZk7xT3=E#GelF{r5}E)GjI_o8 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/document-new.png b/Media/Themes/Umami/Icon/actions/document-new.png new file mode 100644 index 0000000000000000000000000000000000000000..f01576b5f17ce433947043de8819af206f7e4c21 GIT binary patch literal 851 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zFuY{&H@Uu%mw|zSv%n*=n1O-!ItVj5Y0R!*U|Ep<>6H z*YEs{t|#5A$uY{_v^q{A?U~X0Ipyan%OBWJ|HD0DZ7(aMm%|J8P-%~X{}1opKJduk zftKJ?Wmzp_T^rL~wzV}Mo&L^}54p|oukXEhe$4)z`30K=4*9#ho!%05Y(~Q8+t0Pz zzGr18KU^svvb*l$p{l)o&nst0Dm8iNnEdB)^OW*=!M*2_g;^Qr$7L2Kf2F$T#ftsj z$5V6VP=ZVVQ(9U=+swp?iEJBsy|^dpsa;+W+`z=%@Rsv|!Me@rj7%!Fq9Kk)lqWU2 zoKc8gEwHaKqd9JQ+l}+03B~?Qp}p^wIx^g}y1Lwt1X`WByjl1{^dbKFn}4P9DpoO> zbUFEPhM1maU_6T+aGQRUak*Q4seE?-@7=2>{J8sj z`|dIgq39_M&y6RjEcq*R=KS3BvNE&TjHQW-^%5KdLOw5Fbz@1Rq{-~F`;xutHcgzO zvA$#lkCEBg);A5wSJoWoV0rn@g!{%rwTbDMb0^JiRuo;bT;*r#1^I$CT@OWA95*a4 z{=L?&Nu%qXO-0H3Yxf!IVzXo37C-QR*K;CKd7bpyI%c~S(`@zM@8)D+U{Eb_jVMV; zEJ?LWE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|WN@iLmgOP!u mp{{|MuAzB|p^=r5xs{Zk7xT3=E#GelF{r5}E)})mlIR literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/document-open.png b/Media/Themes/Umami/Icon/actions/document-open.png new file mode 100644 index 0000000000000000000000000000000000000000..9e4a9780c66fb64eb859c69c33b27db420c41580 GIT binary patch literal 1093 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_N}eu`As)xKPV>!(2^BeB|9!8yv1iWW z1(7!zL{wP?V|Hk)bzRfM=z8adW?sb8S zt`5bG$9&F|T$*YA{_&mSm@_GpeqQRiz&yQN|NFfE@8?#Z+xz~YtXcUC*XQw8(=DDm z85f@`jrnGE)am2&vN?8Ip zE8hEt&h7Ye=zcaspvcBQKhrDTSD*8rTRThVbk)s}s|h)LE=9s8Ki-@C^f!Ybqj(c{ zWK7Mv_iy>_7O!ZDT#z2W)8^~bk6U}Zr*Gk(kZM_}wdrkTq`5DXEh63pnwlcK(onb z7QGA}#!q`DKd~r3b8d=3vxbe$f~g#rk514Lj&Z2vxNuX+f6l>)Go8{u3H*xdwfNc* zzO0*dQW@I@TP>zN-&HErb7#JoFhS~W@IA@&MJv9Bhb*3&lvUr`<>1;laLv3D| zR>~sfR=2!hsZFKYZXx-7JqqHApWXJ(+`RGfvDfw8a$D{?9q>~=dG_@+0fq|}U#D;> zZok#!qro@fncLo(X%^qVYcQO3+4=uoy&?_C2kt!B=9|IwhG{=D=bQV%d>p$Uwf_>7NWRwkr02(%dxF2&SJ=It7mmtT}V`<;yx0|Nttr>mdKI;Vst0PwNp=Kufz literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/document-print-preview.png b/Media/Themes/Umami/Icon/actions/document-print-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..760d4c62798d9e72616d6b121c0b7289b059d187 GIT binary patch literal 1291 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2G1yq+$OAs)xCPL0l);wo~y{`1z`WxH>8 zFB9LT60;h`Ll@=CUgie%|7c^R8*8%p>I? zIp?iPcg=m2Wc@aFaZSmV{>^voyu7_K|9mqLoG5rB$IQg{clcUKd#kzT^&7;ee<=N} z5bl;#X{g@I?JOo$_bzqv-YNdy-Ywj|U0m_VUFL1m^Kb7eI{J8-{Q2*npGSzSUmJJe zPm1A*!Nj=x)~@wxOINJ9GqKXWVak*#t7~ijp7HNmw)*(llYMow>R&#)SShyXgOI3V z!S41GQM+=ocyFCPCEMy_`D=37l&RKSOG8#J_nV*M`%I?F)+%{d;}ov%YYk)CX5Q&> z+4tiULt$ZIPfyQ-j};6a{@%$Yv%GI#DT zcGIb%@0mXA+S?**FT4164ENF1&o>z*3$9O7FMP21?vmxpluaCca(FI=akuK{ro7$t z+;FDS4D)=(*Ym3x7o;5%;oTW)Vq%iO#h?BhIkW5--?Aet!=)wzy%xa@l07pH=1jwzjqrYr}5c_TO|e?$FuU zez*FzZd$ltLc4ra&;9qyH?Ex6tG~bLXcDV}nHt-E`-am`552#h&d#A2;I(n{rb!L& zjvJ^1dGQ=x@c5CaS{{?8>hEu%%>o+Eo6dgZYg06wefGsKdxkrC<}Y7np7HcMWc$R8 zIpo6?&7~YK81pJ^D)uhUNMurEaq3BrylkSR>~r~7f{?@YQW37zSDjKqRFadE7aW*S zWK(ol!R}w(lpu{vg{d;}+O1QBma^E**Wa?wNaRD|=kM;_^Qw&cmG7Gt>VG?MD8y>_ zx(A#QwI(_ zU>9bcedSu})4sb77j0YXrMHw{uMR!RqQ8IUJRimxjTH)l9*jwiFCI)dXe;!A;qL*{ z1cnbxZWoT{G+a<>WnA_^Ml{Bsp(kO=;)9V!hr7Scza8IDbNsI8`PG~Z3=FCzt`Q|E zi6yC4$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%? nG}JXP(={{?F*LF=GPg1`glM?7(an;9fq}u()z4*}Q$iB}Vbn`Q literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/document-print.png b/Media/Themes/Umami/Icon/actions/document-print.png new file mode 100644 index 0000000000000000000000000000000000000000..0c35a115626b7974612b3ef4eb2d47b3d15c8f1b GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?9G)(YAs)xCPCcI;6Do4t{`)o0v^NTw znUlXwbxWS3vuQU0t+{FJIz)KJ#uzSXkJKu+cjjiCF9UpZa1s?pa zdlVczSz~G0(OaQPOGU)>Vq7#`mlg>(e12~4lKt1hamRBWucwb9HaTX;Tt8YGYc!LG zolnN+z-6JO=ihh)Xo=f1y<2WvAj5vV(4z2BYFm5z#VGZ8n|^=1`EJ)y>2>}!za$xY z-Iy7&b&pA~vCn`0C>l!w8SUZ zy;!kmYgO;h-S)+wo~)L!Dw(l#sj8d1yWm8Z{A8a=QzIN-`kqu*-=CQCW@_I7YmR?0 zk*TGnQ)}$bA3DV3?5scG{CoCWqRL91nX@#!&UHpat(_3H)@`+Dsd|8yqEgJP845j7 z63OO{tSa+Zl+4`n(l1Vadr-n#Z@O|sMzE5FViH$ z%=U|2YY^AcTbDA|zI=N!N3)5qNux`krKZk)@6EWH`|OO#w*{kAF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjthZq`J8JSxd8bUN& S+vsKqvcl8V&t;ucLK6UG>cTq! literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/document-properties.png b/Media/Themes/Umami/Icon/actions/document-properties.png new file mode 100644 index 0000000000000000000000000000000000000000..a0043c70258ac8526af7073e2eff017c03246813 GIT binary patch literal 767 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9Uz6JP%xH6CkvU4)qJ6k%sTH89B0|NuY!ouR?P@OG_&%Dw>;{TU%Q@x>_eso;-j4`~?dZELyZ^&6+i9*REZ=e$Be|Yd37z zuyNzYZQHhO-@bkC-o1wo9XfaJ+=UAlu3fu!{rdHrH*em%ckllF`wt#Gc=+()qeqV( zKYsk=$&;r~pFVr`?D_NOFJ8QO`SRtfSFc{be*Nano40S@zI*rX{rmSHK79E2@#CjY zpFV&7{N>A+uV24@`}Xbo_wPS`{P_9v=l}oz#U{@5Wnf?sDGBlmW?*FD6_Ais(=s!6 zaCCNcOKNIr4(K?&fq{X6G0EHAC2&e+jTQp~!xK*z#}Elg)`Nk5!igem7e3$J$*Z67 zc1l)~LQdn~^@r5M6POnA87uTpxnB$kRE}r13<=ShZ{!&m_J>LRndzpa*z^8^!biOW zi4AO>`e&CaE^wR_-muf5`O1$pb_S_6%hyyqD){=DNlGSvn)0uW_ujLLoS2mR`>(|} zdHHl!E|r! zfv@}LIWWtVdt}{KyWpU6;BJkv1M{4qsa~l(7ZTVUxLA&_XJ{x@Ua(3lI4kDZ)6c~{ zj0_A7|BoED+1Ar1beMsGLAAs+q9i4;B-JXpC^fMpmBGls$UxV?QrEyN#L&XZ*wo6< zOxwV~%D`aSXA46V4Y~O#nQ4^_Mh1q4x&~&thUOuLMpj1VR)&TU4c9ihS%QMd)78&q Iol`;+0L3jp{{R30 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/document-save-as.png b/Media/Themes/Umami/Icon/actions/document-save-as.png new file mode 100644 index 0000000000000000000000000000000000000000..00fdfe01ae117e41de48a02b22b1b34a738613b5 GIT binary patch literal 1048 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp1V`N}7FVF3!m-$ey~eFf=?kuQ?>IAiJVFCZ{nR#4X6K z>P^Y2j{*sHq?UJsROS_A*EHtl6=bJnq~x@gC)DN@bTy@CrbJg2k-8MfnZ?c1-P zzyAOKZ@F{#c?Jds^O7LHUw;w-#{_^$Puit(XUF$@)k3S5W;v|d@rX^`Z%xCB9YNu5?DHlSMYz<~zj(TD`QGtFj8>72ZL;px1^_vhTSSWwL+zDUVZHL|E%T_U@t zGj;ZQ4hGjrbMgcZ%*e3L>AbrBC`V=Dq310}OzfkRtmjlzEpTaa5Ns}y*)40Yu{fZ% z@6p<(tv_CFne$dnLu6l&bCye}bK=!?ZtDd1D|Ib8zSw2`x9$DqRz?p#OPB0k_nPy9 zud1ULTaRn7RO*EGI?d1Tzm0XmXSdz+MWME{V zYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv?BXcW5 YLx_fJ8{I4!7#J8lUHx3vIVCg!0CIEr)c^nh literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/document-save.png b/Media/Themes/Umami/Icon/actions/document-save.png new file mode 100644 index 0000000000000000000000000000000000000000..747686b650a599fcb879f9faa0468de8574a7100 GIT binary patch literal 1109 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/edit-cut.png b/Media/Themes/Umami/Icon/actions/edit-cut.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf70b470b0eb97598c75e6d7c826bf0983de7aa GIT binary patch literal 1272 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc zkWm0(#(8si!ZL-0WzM`=Yk7Fqv9hj<2<_-<-ORx; zdFq69LV_J#tqV9f=5uf?S+)pdK0EswHnz3w>?_&W`X~0Rh&B zTD@ZO)Cmg~&RxsOI$=`ZW)6<6oSf@9I5u-~Ze(ZQ#L0O?P!QsziIe-MOqe_wL=lfB*i2dk-GmfAHYJLq)}h z4<9~KQhN00(PL%h$B!R9e*E~ks_KguFJ8TR`TF(i_nMmj|NnPj{OrWQz>r=Nmf5sqq0Z70eU-wcPo8mT7_YKF zE~EI+E;V(c)Qr@qeap@>D++E)e7eU%z*(XA>!p_yIXIvHC_TM;Z3EBrYp&X#rwRx$ zb$Uj=-z{w-p|EfiJzYvo!a$E@Mq80 zV)dzJXQKo<-?_eSaowyX_3WAFVsDNkdh;yTF1sgc9I}Ng%r9H#piqp|&QhMzol+T# zn$#YyG`@BER{D~**&Irp+P{2eY|e@FiafO`wOH+k#-XFBHtFnaUrREjGt0lSu%7!i zrO|W7+P4N*=EST#pb%~ud3i(fT1lTng~?mi{O8K|D>Hj9`ft-k>A4b$k9_u>PP!Gw z`ht_2^X0F#S>2J(P9J2Nl$3HYbLOq+Y(-T~Mb*^E+tyo;HnjJ0E@__Wd-PaXq>E2T zNK8z~)q8$(xfe07Xzy&DI(c?`dwc)<>D`m3&YZ~^e~OX8N;e^^Wrn6E0|SFRdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn m3=MS+%ybRSLkx|qjLfYJ4Ivt?ZFI8)l^&k1elF{r5}E)*C>8Ml literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/edit-delete.png b/Media/Themes/Umami/Icon/actions/edit-delete.png new file mode 100644 index 0000000000000000000000000000000000000000..7768ad96c11cee831a071ec4bb3befb966f5aa51 GIT binary patch literal 1389 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?3oVGw3ym^DX&fq^B&)5S5wz;4Xi< z^lnQK%aPnkx{J;@L~Pp0pLHd3j@x2+lP8)5)tB)GSlPO0v4^-O_z#VyFM}1&}mxn6cx_p z=jT*09;jk`Uwix>^M!pphAKjwN0K&{9=RDYNhQFmc*CMaN+~-w>2LKfk+++)cER7b z;rvM!E1YD13$0p}R8>{wT*M&2!q_5kBWIgvk0D!V=*JVu{tOJetoCKI7pN?Eovg^a z(m`fp1W%*GgZOBcgr!^zAAZ)%nA3TBq+a1=0Dm%ZODx6L>AfBO0dpQPpUbvEQL|Fr)EW5e7(OdPAExp~${?Fdv$tGfLA zU}y1K^GP$Bzca7)`}C2&|I=}PyUJWUp~87Tzm#OXzgNBV;KBHdSGLUl^|x;C)~#2K zN?w*Hrythy{(rP?@5gg)nHd=xS1(*h;B0?> z*tK4op3<4gj+%wK#~ycY{A9HKq(r#wJl$oPn>-3P=5$RGDV|;_wxz{P`?S#+li9_) z@7{U1!Cl7n9P4UR{q*xs&p3#v6hC;rPhKSQW_)yTcjrlmRf`^piS?e#F4{P!=Xhvz zWu;_vR8-Q_r>QLg0{K(JHFR~C1|Q^9J8iT%GB?QYl4YXr%qj_ zq35M3x!s!Ua?!>$mT&wnKQ274-PLVyZpP(@Cfrd$eqdyO8g{UYV+w_Kv{44-C~_Wjpi^{iyd6a^&qCl`E}t}E8fvU~3ZnY~t7)*n7B z4qf;%;NzP&J^NNVIC;0I20oIVo4$DE7Q1z;HfE$>x7=#5e?y_2k+~y>XU*@w=3l<$ ze!a0TS$dLZEdTjdXW>Re9-c3c7qau~97!@fzs#7yebu&o-;#nZHzhBA%+GR+Ic@3s zN5z36mHF}S|IR5ci>|$^dG6=#76FkPpY?zIt}Yjxa9^i#+L!S7`TKV-UAmRu;d2{P z&rG(_d6Y2%#g4(D&XnovS6>BcjH2W!h@%;S1+wy z%;m!H;rs8;*;!e$UGH`+nHTfVf>EJGz>AZE(Sm(iEz>zmjimxCf~?nSGQ6eU{#>a( z^Whez3!9l(7hX8?o8eyOuGN}O9628=WZDuNiuoJ`c4QXKI1?i$vrwR=p2a1w<>;jL zgaR!qW9z#Ty>9233z%n|kmHhOIR82KyzHuV-}cTho_1z`!du()?}D3(S`QcBl})$q z_w{96&%lw+%E7?Rz}jH^_%e?lgTWdT9+k(%3~6d&M*BDwI3Gwc@HRBg&aG!YEq1x< z@0r>r1_lQH64!_l=ltB<)Vvag%oK&3{Pg^`W92&;7#LJRQYncgsaDBFsfi`23`Pb< z2D%28x&~$;h89-FrdEb#+6D$z1_skUTNt8f$jwj5OsixtGB7mMH89gPG!HQ}vNAHa YGBku}xVF*F5>)hgy85}Sb4q9e0MXM-@Bjb+ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/edit-find-replace.png b/Media/Themes/Umami/Icon/actions/edit-find-replace.png new file mode 100644 index 0000000000000000000000000000000000000000..2644f6b6384caa62040fff2ba6c8025530e80d3a GIT binary patch literal 1244 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfr0s+r;B5V$ML&UqJ3gqB^vh6ERMXfRe{NL zt(%6Dh|}y9S27+ohj?V&VxRp(!BF#-`=zdk6clmG7>97ww<$jO}5;if<>UnHd^bD3sal zYM)UsIY=n__|9*SS#Msub?7j^srV(!hqcdF_U27c_fQe4N+@u+V){POD8#2YmR0Zc zk@DouOUL%sm|8R(f1LPw+S=9kr%ai`By!Iu<@%>f3q&?8ds(=yJ?2gQnptht@0YB) zbhdBRZVyR0v-dZ=|KI#~^>5Vrvop5GX65e=xfvmrcj2gL$lcgOUN(*vMco-X2j@4s z_Js7dZdt<)yszL7I-^OEvzj zWrE@B^_c_W7nW!vkX?(X-R4` z7VTNlq440lKf|oHHaCVI?e&tYKb&-(R`a~)ow3&%!8=`UJHK5vzq38t-rI2UB_-*@ zMx1R*BGoFNm7m|dyJ_~@+ph(k7HnPi-Ewl@y~JhvUq60zBi==AzY6#H)dv@fTdU8S zRTi}QZCzf>&pEqv^OiB0OU{gQ(>(j*jlJ5bQkP&~EFIM>lSkKCEnVNa%A&=$pQ4 z7ia6VmFw3>v!)C@!(BTgK+zzfZ4k&z~-j z)k`J?S-n*kuuR{iqs?qzH}hn-y5wxWO%`Q+>n>~NnSTmeveixV>6ah&%f+1*OiAl< z|52IIA#Ln9t>(GqhdPF(B3_zv_W9orV|Y7umfXX~?q*CxODYI{>7b#!zRZkq*p zJ^E0b5tAYK-6Pt32jU`+w zWdnFPtSbAhHvTeidb8`{nKVBgS%?)Fi6yBFMg~R(x(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OP jFw-?O4>2^dGBUR^G=yllw$aTJRML35`njxgN@xNA`eiEl literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/edit-find.png b/Media/Themes/Umami/Icon/actions/edit-find.png new file mode 100644 index 0000000000000000000000000000000000000000..3f3faf3aa094fe54c7f84894591a1cb73b93aa5b GIT binary patch literal 1254 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_FFaiwLp+XOotm8^5-M`M-q?C`zuw!R zH$esgQqjA;y)JTeJiIB;x}~FEptO1Ano!t5V|DW@Z`TpGZ^(@;~ zx94e2d3m^^!sK8P)+JMTdhYuKh@^i1l$vi-8NRKH|2miEQW2*+pC<;LDxE4?rsb16 zL7(xc!Mc0JoSQb)tenEQfbY_*u-f0J%iJ#q#b#t>?b5C=urRZ2N?|>i@S!hWcj=#e zF2DJ9wcbT90y@0UiVHd^EOEGOvdn+}&-Wrdvem(LpO>a>dw=8HqSkH={n_q!Hf>b3 zkmb7Gb9GQ ze>|L&>ODPpYvJGXtFNz_wd2v-smI@WIw}Y_cvY02)ta{Fi`ISlyr=6U#LiFed-N|+ zPRQxPm85|3MN>00&S-nb1+O*>Gh>)}az*rXd&JybWTJ$PJn4P~>!q%#v zTUJVZm(8AtS;q_JOK*R7KI$7^R=Et`5^i_j6_rh7YltGBd2Sm6_sHe)nz1xHQY7-O0WGki`B~B_%P2?mZHf5BgMJDZdB~Hd@!x-0pm4 z?gZ~>{TZB%Q@ETwlBW4Oc`S-Gyz`Igl-#$~^WXls(&1+PeVI}KLyVrdrKRPMzjbo6 zZCX844*d*vpAkIg=*4cf-_rU@BJ9_FJm0QQzj67-u|Gn+zijPK7*_tgw=Vncdi(7O z|4uM2xSkuEdbE67uDx-^%c!U*4IPc7cbmC?zWmNHech2x@2Tv6t&E#)=G@#6Wn=n2 z^XrL?$|YrG9ES~V&D~Xe?wRk^8hfWtVQF#|wLDz($a!=7%gJhf zpPoH`p8n=f(ewGw_5VD4V^nqRS>K0zO?~a>M^3t>`OMbbcjM>IU6sLGi*_6OGO&Fx zFW|F?+`sRkESPYtUyv)8!1`C)#)Zta@;9~f6T&(qY=saU>jS=#CimFvsGbvJvZ zKm7bN@4>R~?Jr-?yjAb-d1wMdx43@Y!O0JAU6YUAP#Ik6JL|{G+x8LCAB!4VwCfod z7*tDKBT7;dOH!?pi&7IyQW=a4j0|)QEOiacLJTdej7_Z!&9n^+tPBjMeYP+}(U6;; ul9^V?U}RuusB2)RYiJ%~Xk=w%Ze?f)(Qs{}n| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXn>}3|Lp+Xeo$Buq5-4)4{`=Yao3;cV zmoyb*ay%J3gWEjuVvk4nnOiK|ip6)H6>FU0F*`?)^&yL6)9qUpyJxw2PS8^k;9@d# zPCr(1@3W=Z)R%tISDlOTf=wcM3dGyYma1-Aa;f-hOsz037IWRNtk+SlM zNes?%r*&Ivv{a`u?9bk{<<~X6i+5t;r`-KiG~;T%@v9%ddO{l145nUrXH&iXx0P)2 z+0=a>1MOb!zwn6T-Hx9*TQ=vuc~r71BQx{t2hT2#bsHtttlQSvwQTdWbHUse99GNH z_w_SZGm0_aSiL6Xc8=8M*Kc|5*SE-Bl$5VO^XHFKAZuvoR385Oi)@Y+dtrKNYw_ggshwK%cfe8d${VKZ-W;DppU zF_#tE7CtUBmyuae;CK0Qox{_uM_+$Ut4Y4BF*Dl9(aguo)4$)mf8&&s`<8z{wD7~j z=qb?}+g-J_?G4ZBF1o1UC7X7_l`+MuF)8yUdu{D?ENtLzb5wsE6o@wJc%D_&3B z^T_Y_wS%H2r}cYmWz?juYowdcvMW3!qAF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjt ghZq`J8JSxd8bUN&+vsM=z`(%Z>FVdQ&MBb@0B59%=Kufz literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/edit-redo.png b/Media/Themes/Umami/Icon/actions/edit-redo.png new file mode 100644 index 0000000000000000000000000000000000000000..ab73631109595c31b33c4d71ca04bb3fe46740e7 GIT binary patch literal 960 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}hahdf;zLp+Y3o$Q@094K=9|MPRoYgewV zmC8QqCK$Mib+wb@nvf~myu_M19(bkLHGA)G;4Yos%l(%n@`r|q$dpHmZj>obyOpHt zdzr;}W2K4l%$?VL)%=c~*%HJRXK|+B{mlFC=T)C)`2V=$XsBTK>fhy)PM1Br*>m*j zH(TKtDQj+qn{QQiuS{?ky2U5dy*iQMJEP6lL+09pk^ogN!^6`_w)0~r2THEcI`Zx77b_ECHJVUg&B9tWd? zCOif+7cB2mU~^d<=q}`!k)|0S(7pONgHG&T!=5e;#l_3BZr%|}5OUOD>)F!~_+Y^+ z-(4zRPR6LKKu z{@am(hpSa#6(^IK*-xe`1`G8sy{~4kW74?7)0wiRbgR=%jl`^~jd_1h9jQFw%hAHz z_@8m%(zTM(GndSm6?cZwV(JASuM9QD2A5OYJ~%Y8ND5{;=+vCK$&jaR@_BXj-3{G* ze>&uCK6LO*+ z_1Xu%3sc>sKIK*Lr?4N-^wk*>bIkT!{-t{F+}~l*>~E~w+iq;1`rYPblU2e>u4ng>KXJWs@t$1s z(qYQH*_)OMI2_TCmrQZnF?-D&{=|aSY>#(?yfncfB&v+z3jz#{r7|4S}`ycJfFqD zz@S><8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$ vl+3hB1|tJQLtO(iT|@H_LnA9Ab1Oqbh=yw$-7Fax7#KWV{an^LB{Ts5+^CE* literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/edit-select-all.png b/Media/Themes/Umami/Icon/actions/edit-select-all.png new file mode 100644 index 0000000000000000000000000000000000000000..4bb0c27038c29339ba0ae90756c5784daec6ae90 GIT binary patch literal 781 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc zVDJEAx0Bg+3=9mf0(?ST8Ni^UtCfL)p`)u6&VX>ik|;z^UuREWXWxYG-u|xc-j1%G z_O9;sj;_|u?l!pghH2{>r>}3Cv7vSL=8mq`mHV%+I&fq4!JBIi-CBG2_PQf?)*rpQ z;n=;6$M0`C@nG}Ghg(iPx^w5w-Me@1-Me@H{{06J9z1;b@X@13j~_pN^5n_Wr%#_f zd-nYK^OrAQzIyfQ&6_uG-@bkS{{4p!A3lEk`03N9&!0bk`SRuK*RS8cef$3X`;Q+# ze*XOV>({T}zkmPv^XKp1zyJRI`~Uwx*N)}@1_lP{k|4ie1~zsM4nBT<0Rc%V6+L~^ z-l?;f{P^|z&!4~l*0J6QWnf@nO!9Vj@omUZNM&GPxa8^L7$PCbdhnz#bD#k0fvU%C zhHe~Zl)5G6)XU77!yxXb^XQP-=h<2e3=EB#Obp2iH}cyV6!xzdS=XPNHS5}!%YPOt zoc}zlqv5t;pu&6QrU!f?9ju?rU*tMCsy|?25#i`~Ag3|GVc!PsfD4B1ZxkFFC6tmr zGiV5KKQJ;8DKS!4GRh2SP!#;M$+DrT&wfMRwX>lPjN3X@&G=-^GR?)+f1?>07#iv?zqXc_y==IL zfq_A_#5JNMC9x#cD!C{%u_Tqj$iT=z*T7QOz%0bj!phjx%Fs;Pz`)ADVA^L3Llh0U z`6-!cl?+A(hK9NZX1a#vA%;d)M&?$Ah7b+cHo93dFfd4hYzWRzD=AMbN@XZ7FW1Y= e%Pvk%EJ)SMFG`>N&PEE9#ynm9T-G@yGywqmeMx2j literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/edit-undo.png b/Media/Themes/Umami/Icon/actions/edit-undo.png new file mode 100644 index 0000000000000000000000000000000000000000..7b790ae0655ad5c302be459877cafad14c0f3191 GIT binary patch literal 1161 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_-JULvAs)w%PVvo=b`?4Pf3tj?y0mp+ zN9Xoqo^!00HWq12=h*7#)xpphp!^`HWz{OJAV1rt9Stp9GJ*;g0h*hNGDBNLSXQ-U z+&w1I#h<6`WsyUeN&9Tx z)p0IsXB{khWn^*Z!rr(?U-?CR*NV*kZtUETl3{#TRqe%|3p+s0yYU7>h)pHrf!@cHCy;e5PA6{W{*PA*ZMNl#`^rb}v#^(*wMQnp-_|g5fl`&q&$H#T?O5-%HW(h* zT^+`m#rh&vq~K?JL+>`zjGz3=`gP;a1l~{i^hdYl@WZoTo82AxeZDQvUlf1 zMV`wMp0d+%ru27Xm5Z^j?zlIK3k4Pw-rOm(tWNst)6M(eZm#!dd$IGp&7Pg}-ugL6 z1$N!q(KpBAcwWk{c%k2Z4Qj%CoUFN_7& zi`N+G`ik7uNUNW!<28+C23PV~hD*;_x|CNPo5P^6+^@{P+D0W{`Kw!}tUgcwyw#Y& ziZP_sLi}3M&533PR|~anK5i7cxp=>1U&y8SntcoIo%>LJ|DQlS^96>8LsAp!W6Jy< zJ}Z@E=yXx3eaC!XeV^QBiD-?R+1_u~mfN|;ELp1PH<#g($`hY5iRo5Ox~F(i8!5MOzPXaZLjx*DDF#7?pGAG8=8pzu$Qc7-Z!(Wfo=3(kVPIfj@O1TaS?83{1ORMk?g;<@ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/editclear.png b/Media/Themes/Umami/Icon/actions/editclear.png new file mode 100644 index 0000000000000000000000000000000000000000..fa8cadb5726aacd5c9d48ee4062c1cd72e5d0145 GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq z7(Bq(?PRtc0|NtFlDE4H!+#K5uy^@n1_l-{2y8+#oC_ezDUhZJCbBuC;3#4!=B>!aTh|WSL(|+GHOEzePp8 zr*;;`FO|_Q2}zi;J2rE_-TRuy@@ZV$FJ{;Lubg-P{r8`-@10Nl|5z(`IA@Vnk>0fR zXKty_uopi)=T3k_n9k>uPxG;$LUD2g8Uwl$IQf=$}Y~zGG+jFPi-q(3}?V-Cr z6uny}ZRVRHE&RA@;`^9?g+f~eZ;MRbdp~96k0rXNKF1iY?Kr;3i1TaUJq_VcVW%Y3 zs$(0RI6vxGIKB(1dzmBizJ@dTYU7Gew|lDCr8Qz=3w;kZl-lMBmTnpT}Yuj8fK)27!oqv^~) zQ3YSsu7lIA8(eu(D!*Wb`QeDwcWV#Kxx>zV*m}Xsn{0cHMA$+lc!Vcj@L%p|`+@P3 zYEM}x!&#-x3w3T7T-!LAN#aX5_kx^TK8*Kfy!_hsu8c#>eUZV{Ubc<|YXFD5t zWjb5-%MVLeZ|g`C`15tS*ypUDi6>s`TnInvPkpo*%9WZ+mM+d(UijtO=K8R}RL0cB%xR+528EZ!KmTns zxMSOwS!wiY{g3;TmvQYfn%wa?t8wkhIV<;kd#hwP-EMR2Jc$bauKRNg?!0LH7r(~f z=1bT46U+^is-$EDJ z>$!KUto7HhUYYUXu`?Zt`$rxoHD~M z#>=R_x;Fn%&#HNQXGm4ab49Xb?fV*WQq;J(`p}8vSMtQOPyg)LA@To5+{V{OzkM{+ z+V*6DLi{JMbu-Lwhl*$JiQIWNV#c}a^Q_MNzIk)r9-sH~lXESiuN`me+CQzn_hG`C z!_$~2sx;*tw^_UFSAt3Bvh;T$dLiFpo*rWV`q%#dKZfM0fJHg6>)aR^7*tDKBT7;d zOH!?pi&7IyQW=a4j0|)QEOiacLJTdej7_Z!&9n^+tPBjMeYP+}(U6;;l9^V?U}Ruu zsB2)RYiJ%~Xk=w%Ze?f)(Qs{}nO>_%)r1c48n{Iv*t)JFfi46x;Tb-9N!x1>n|KAV*7pX%xxtX z-~Hm|GJgEupzX!6sh!@}brd+*9^GQuuwasgp~||uJ4#cXIHm}2IvsLfn;pZz?R})= z*RAqcp3k>3z0+sCxP2z&*`4BdJD;bq{W#ywu;5G9OTp~7e6cz%sZ~YK9xL>)GOW5- zFz@Uc{=0Wyo1gZRImX1G$iWb>`mdMIywgt|T{c>1^Bp*ICBr1;y77{rOao(n-GH_K zIwriAe`C9E-@jOv3yy9ITrF{W`d?=23SNBva^+2STc+gX#n0}2uid%v=TeK`C4Dn2 z>*R9Fri6(dPnKP=?2zyClG0G`Q~fb|^4AgCxH;3X7Qo+&6_;w4bLkDAFW_$?wDl3VU&=jarI5%1A*t%U*{ z4Ey4bzq`JP(Yh~r*V{4&m4rwkFU^d#)vQr#!;a_`mpq*zsjmJ|%(d`lj@Zu{IfeiY z5uR}Q#t9~Gx|EpujKvh$B%C}vG#74d6FB6vSo=vrvYVURnH3!z+j7fWy%e(Ydvk9q z2qmONOiOjrd!HjI$j$I3Cg2|Qs-^B%wr?Uz`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? cBXcW5Lx_fJ8{I4!7#J8lUHx3vIVCg!0A^KZu>b%7 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/editcut.png b/Media/Themes/Umami/Icon/actions/editcut.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf70b470b0eb97598c75e6d7c826bf0983de7aa GIT binary patch literal 1272 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc zkWm0(#(8si!ZL-0WzM`=Yk7Fqv9hj<2<_-<-ORx; zdFq69LV_J#tqV9f=5uf?S+)pdK0EswHnz3w>?_&W`X~0Rh&B zTD@ZO)Cmg~&RxsOI$=`ZW)6<6oSf@9I5u-~Ze(ZQ#L0O?P!QsziIe-MOqe_wL=lfB*i2dk-GmfAHYJLq)}h z4<9~KQhN00(PL%h$B!R9e*E~ks_KguFJ8TR`TF(i_nMmj|NnPj{OrWQz>r=Nmf5sqq0Z70eU-wcPo8mT7_YKF zE~EI+E;V(c)Qr@qeap@>D++E)e7eU%z*(XA>!p_yIXIvHC_TM;Z3EBrYp&X#rwRx$ zb$Uj=-z{w-p|EfiJzYvo!a$E@Mq80 zV)dzJXQKo<-?_eSaowyX_3WAFVsDNkdh;yTF1sgc9I}Ng%r9H#piqp|&QhMzol+T# zn$#YyG`@BER{D~**&Irp+P{2eY|e@FiafO`wOH+k#-XFBHtFnaUrREjGt0lSu%7!i zrO|W7+P4N*=EST#pb%~ud3i(fT1lTng~?mi{O8K|D>Hj9`ft-k>A4b$k9_u>PP!Gw z`ht_2^X0F#S>2J(P9J2Nl$3HYbLOq+Y(-T~Mb*^E+tyo;HnjJ0E@__Wd-PaXq>E2T zNK8z~)q8$(xfe07Xzy&DI(c?`dwc)<>D`m3&YZ~^e~OX8N;e^^Wrn6E0|SFRdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn m3=MS+%ybRSLkx|qjLfYJ4Ivt?ZFI8)l^&k1elF{r5}E)*C>8Ml literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/editdelete.png b/Media/Themes/Umami/Icon/actions/editdelete.png new file mode 100644 index 0000000000000000000000000000000000000000..7768ad96c11cee831a071ec4bb3befb966f5aa51 GIT binary patch literal 1389 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?3oVGw3ym^DX&fq^B&)5S5wz;4Xi< z^lnQK%aPnkx{J;@L~Pp0pLHd3j@x2+lP8)5)tB)GSlPO0v4^-O_z#VyFM}1&}mxn6cx_p z=jT*09;jk`Uwix>^M!pphAKjwN0K&{9=RDYNhQFmc*CMaN+~-w>2LKfk+++)cER7b z;rvM!E1YD13$0p}R8>{wT*M&2!q_5kBWIgvk0D!V=*JVu{tOJetoCKI7pN?Eovg^a z(m`fp1W%*GgZOBcgr!^zAAZ)%nA3TBq+a1=0Dm%ZODx6L>AfBO0dpQPpUbvEQL|Fr)EW5e7(OdPAExp~${?Fdv$tGfLA zU}y1K^GP$Bzca7)`}C2&|I=}PyUJWUp~87Tzm#OXzgNBV;KBHdSGLUl^|x;C)~#2K zN?w*Hrythy{(rP?@5gg)nHd=xS1(*h;B0?> z*tK4op3<4gj+%wK#~ycY{A9HKq(r#wJl$oPn>-3P=5$RGDV|;_wxz{P`?S#+li9_) z@7{U1!Cl7n9P4UR{q*xs&p3#v6hC;rPhKSQW_)yTcjrlmRf`^piS?e#F4{P!=Xhvz zWu;_vR8-Q_r>QLg0{K(JHFR~C1|Q^9J8iT%GB?QYl4YXr%qj_ zq35M3x!s!Ua?!>$mT&wnKQ274-PLVyZpP(@Cfrd$eqdyO8g{UYV+w_Kv{44-C~_Wjpi^{iyd6a^&qCl`E}t}E8fvU~3ZnY~t7)*n7B z4qf;%;NzP&J^NNVIC;0I20oIVo4$DE7Q1z;HfE$>x7=#5e?y_2k+~y>XU*@w=3l<$ ze!a0TS$dLZEdTjdXW>Re9-c3c7qau~97!@fzs#7yebu&o-;#nZHzhBA%+GR+Ic@3s zN5z36mHF}S|IR5ci>|$^dG6=#76FkPpY?zIt}Yjxa9^i#+L!S7`TKV-UAmRu;d2{P z&rG(_d6Y2%#g4(D&XnovS6>BcjH2W!h@%;S1+wy z%;m!H;rs8;*;!e$UGH`+nHTfVf>EJGz>AZE(Sm(iEz>zmjimxCf~?nSGQ6eU{#>a( z^Whez3!9l(7hX8?o8eyOuGN}O9628=WZDuNiuoJ`c4QXKI1?i$vrwR=p2a1w<>;jL zgaR!qW9z#Ty>9233z%n|kmHhOIR82KyzHuV-}cTho_1z`!du()?}D3(S`QcBl})$q z_w{96&%lw+%E7?Rz}jH^_%e?lgTWdT9+k(%3~6d&M*BDwI3Gwc@HRBg&aG!YEq1x< z@0r>r1_lQH64!_l=ltB<)Vvag%oK&3{Pg^`W92&;7#LJRQYncgsaDBFsfi`23`Pb< z2D%28x&~$;h89-FrdEb#+6D$z1_skUTNt8f$jwj5OsixtGB7mMH89gPG!HQ}vNAHa YGBku}xVF*F5>)hgy85}Sb4q9e0MXM-@Bjb+ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/editpaste.png b/Media/Themes/Umami/Icon/actions/editpaste.png new file mode 100644 index 0000000000000000000000000000000000000000..8a955039f03467324658ebd4042a8c4900a3b395 GIT binary patch literal 945 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXn>}3|Lp+Xeo$Buq5-4)4{`=Yao3;cV zmoyb*ay%J3gWEjuVvk4nnOiK|ip6)H6>FU0F*`?)^&yL6)9qUpyJxw2PS8^k;9@d# zPCr(1@3W=Z)R%tISDlOTf=wcM3dGyYma1-Aa;f-hOsz037IWRNtk+SlM zNes?%r*&Ivv{a`u?9bk{<<~X6i+5t;r`-KiG~;T%@v9%ddO{l145nUrXH&iXx0P)2 z+0=a>1MOb!zwn6T-Hx9*TQ=vuc~r71BQx{t2hT2#bsHtttlQSvwQTdWbHUse99GNH z_w_SZGm0_aSiL6Xc8=8M*Kc|5*SE-Bl$5VO^XHFKAZuvoR385Oi)@Y+dtrKNYw_ggshwK%cfe8d${VKZ-W;DppU zF_#tE7CtUBmyuae;CK0Qox{_uM_+$Ut4Y4BF*Dl9(aguo)4$)mf8&&s`<8z{wD7~j z=qb?}+g-J_?G4ZBF1o1UC7X7_l`+MuF)8yUdu{D?ENtLzb5wsE6o@wJc%D_&3B z^T_Y_wS%H2r}cYmWz?juYowdcvMW3!qAF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjt ghZq`J8JSxd8bUN&+vsM=z`(%Z>FVdQ&MBb@0B59%=Kufz literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/exit.png b/Media/Themes/Umami/Icon/actions/exit.png new file mode 100644 index 0000000000000000000000000000000000000000..b757c74afcb372ea4afba5223af7936d5034dc88 GIT binary patch literal 1264 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 ul9^V?U}RuusB2)RYiJ%~Xk=w%Ze?f)(Qs{}n| zFuY{&H@Uu%mw|zSv%n*=n1O-!ItVj5Y0R!*U|Ep<>6H z*YEs{t|#5A$uY{_v^q{A?U~X0Ipyan%OBWJ|HD0DZ7(aMm%|J8P-%~X{}1opKJduk zftKJ?Wmzp_T^rL~wzV}Mo&L^}54p|oukXEhe$4)z`30K=4*9#ho!%05Y(~Q8+t0Pz zzGr18KU^svvb*l$p{l)o&nst0Dm8iNnEdB)^OW*=!M*2_g;^Qr$7L2Kf2F$T#ftsj z$5V6VP=ZVVQ(9U=+swp?iEJBsy|^dpsa;+W+`z=%@Rsv|!Me@rj7%!Fq9Kk)lqWU2 zoKc8gEwHaKqd9JQ+l}+03B~?Qp}p^wIx^g}y1Lwt1X`WByjl1{^dbKFn}4P9DpoO> zbUFEPhM1maU_6T+aGQRUak*Q4seE?-@7=2>{J8sj z`|dIgq39_M&y6RjEcq*R=KS3BvNE&TjHQW-^%5KdLOw5Fbz@1Rq{-~F`;xutHcgzO zvA$#lkCEBg);A5wSJoWoV0rn@g!{%rwTbDMb0^JiRuo;bT;*r#1^I$CT@OWA95*a4 z{=L?&Nu%qXO-0H3Yxf!IVzXo37C-QR*K;CKd7bpyI%c~S(`@zM@8)D+U{Eb_jVMV; zEJ?LWE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|WN@iLmgOP!u mp{{|MuAzB|p^=r5xs{Zk7xT3=E#GelF{r5}E)})mlIR literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/fileopen.png b/Media/Themes/Umami/Icon/actions/fileopen.png new file mode 100644 index 0000000000000000000000000000000000000000..9e4a9780c66fb64eb859c69c33b27db420c41580 GIT binary patch literal 1093 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_N}eu`As)xKPV>!(2^BeB|9!8yv1iWW z1(7!zL{wP?V|Hk)bzRfM=z8adW?sb8S zt`5bG$9&F|T$*YA{_&mSm@_GpeqQRiz&yQN|NFfE@8?#Z+xz~YtXcUC*XQw8(=DDm z85f@`jrnGE)am2&vN?8Ip zE8hEt&h7Ye=zcaspvcBQKhrDTSD*8rTRThVbk)s}s|h)LE=9s8Ki-@C^f!Ybqj(c{ zWK7Mv_iy>_7O!ZDT#z2W)8^~bk6U}Zr*Gk(kZM_}wdrkTq`5DXEh63pnwlcK(onb z7QGA}#!q`DKd~r3b8d=3vxbe$f~g#rk514Lj&Z2vxNuX+f6l>)Go8{u3H*xdwfNc* zzO0*dQW@I@TP>zN-&HErb7#JoFhS~W@IA@&MJv9Bhb*3&lvUr`<>1;laLv3D| zR>~sfR=2!hsZFKYZXx-7JqqHApWXJ(+`RGfvDfw8a$D{?9q>~=dG_@+0fq|}U#D;> zZok#!qro@fncLo(X%^qVYcQO3+4=uoy&?_C2kt!B=9|IwhG{=D=bQV%d>p$Uwf_>7NWRwkr02(%dxF2&SJ=It7mmtT}V`<;yx0|Nttr>mdKI;Vst0PwNp=Kufz literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/fileprint.png b/Media/Themes/Umami/Icon/actions/fileprint.png new file mode 100644 index 0000000000000000000000000000000000000000..0c35a115626b7974612b3ef4eb2d47b3d15c8f1b GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?9G)(YAs)xCPCcI;6Do4t{`)o0v^NTw znUlXwbxWS3vuQU0t+{FJIz)KJ#uzSXkJKu+cjjiCF9UpZa1s?pa zdlVczSz~G0(OaQPOGU)>Vq7#`mlg>(e12~4lKt1hamRBWucwb9HaTX;Tt8YGYc!LG zolnN+z-6JO=ihh)Xo=f1y<2WvAj5vV(4z2BYFm5z#VGZ8n|^=1`EJ)y>2>}!za$xY z-Iy7&b&pA~vCn`0C>l!w8SUZ zy;!kmYgO;h-S)+wo~)L!Dw(l#sj8d1yWm8Z{A8a=QzIN-`kqu*-=CQCW@_I7YmR?0 zk*TGnQ)}$bA3DV3?5scG{CoCWqRL91nX@#!&UHpat(_3H)@`+Dsd|8yqEgJP845j7 z63OO{tSa+Zl+4`n(l1Vadr-n#Z@O|sMzE5FViH$ z%=U|2YY^AcTbDA|zI=N!N3)5qNux`krKZk)@6EWH`|OO#w*{kAF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjthZq`J8JSxd8bUN& S+vsKqvcl8V&t;ucLK6UG>cTq! literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/filequickprint.png b/Media/Themes/Umami/Icon/actions/filequickprint.png new file mode 100644 index 0000000000000000000000000000000000000000..760d4c62798d9e72616d6b121c0b7289b059d187 GIT binary patch literal 1291 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2G1yq+$OAs)xCPL0l);wo~y{`1z`WxH>8 zFB9LT60;h`Ll@=CUgie%|7c^R8*8%p>I? zIp?iPcg=m2Wc@aFaZSmV{>^voyu7_K|9mqLoG5rB$IQg{clcUKd#kzT^&7;ee<=N} z5bl;#X{g@I?JOo$_bzqv-YNdy-Ywj|U0m_VUFL1m^Kb7eI{J8-{Q2*npGSzSUmJJe zPm1A*!Nj=x)~@wxOINJ9GqKXWVak*#t7~ijp7HNmw)*(llYMow>R&#)SShyXgOI3V z!S41GQM+=ocyFCPCEMy_`D=37l&RKSOG8#J_nV*M`%I?F)+%{d;}ov%YYk)CX5Q&> z+4tiULt$ZIPfyQ-j};6a{@%$Yv%GI#DT zcGIb%@0mXA+S?**FT4164ENF1&o>z*3$9O7FMP21?vmxpluaCca(FI=akuK{ro7$t z+;FDS4D)=(*Ym3x7o;5%;oTW)Vq%iO#h?BhIkW5--?Aet!=)wzy%xa@l07pH=1jwzjqrYr}5c_TO|e?$FuU zez*FzZd$ltLc4ra&;9qyH?Ex6tG~bLXcDV}nHt-E`-am`552#h&d#A2;I(n{rb!L& zjvJ^1dGQ=x@c5CaS{{?8>hEu%%>o+Eo6dgZYg06wefGsKdxkrC<}Y7np7HcMWc$R8 zIpo6?&7~YK81pJ^D)uhUNMurEaq3BrylkSR>~r~7f{?@YQW37zSDjKqRFadE7aW*S zWK(ol!R}w(lpu{vg{d;}+O1QBma^E**Wa?wNaRD|=kM;_^Qw&cmG7Gt>VG?MD8y>_ zx(A#QwI(_ zU>9bcedSu})4sb77j0YXrMHw{uMR!RqQ8IUJRimxjTH)l9*jwiFCI)dXe;!A;qL*{ z1cnbxZWoT{G+a<>WnA_^Ml{Bsp(kO=;)9V!hr7Scza8IDbNsI8`PG~Z3=FCzt`Q|E zi6yC4$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%? nG}JXP(={{?F*LF=GPg1`glM?7(an;9fq}u()z4*}Q$iB}Vbn`Q literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/filesave.png b/Media/Themes/Umami/Icon/actions/filesave.png new file mode 100644 index 0000000000000000000000000000000000000000..747686b650a599fcb879f9faa0468de8574a7100 GIT binary patch literal 1109 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U_XPNaxH2#>lr;O!T%40vkUe!_VQ6@8UUNuZL3TxVOip7sh+B|d z)ti!49|aQZNGXQEB+MEBaoUJWb!+BXDrYz*k!6xh8r zxMyofQFX+mz0uPS#!NpPH}hEBtm6rDP9@AeoizVk@`7{83ooQEzLe29IeY2lyn^ha z((IBIS4t~$N>^SjuPm)^tZQy<=6yi4%`N?N z<}O^fanshFdrw`ya`*1tCvQJ~{QTwXw_m^i{{8z83>M!Nddk4Sz?kIi?lSoy^ZjiM z42*%EE{-7@!L?^YgAY51v^_k!bjR-9zcUp@ZiqFpmzQ^mYKyc7Nj+h?5r5`Q+6>KK z&y=j6@BG2>bA3wm>4*CGvP2hF9mxqoEWIzM4}%sHXaUR1W} zm`PiQ!`Ug{7#`{N{p9SJaXC(+p+V2!psk-Y%M!V20mo_8XLYY6<+2~yEWvncG5g0$ zD&A)&MQ)nqCtzy$$XrRS&tck{ zb<@i(!_d;}>yHRJO*(%+bg!+&6Z`LnXB*GU-yHwwb=T>Y<*S|-SjgzfetWN${(O44 zxmme>&h)!ag8WRNi0dVN-j!GEJ8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp1V`N}7FVF3!m-$ey~eFf=?kuQ?>IAiJVFCZ{nR#4X6K z>P^Y2j{*sHq?UJsROS_A*EHtl6=bJnq~x@gC)DN@bTy@CrbJg2k-8MfnZ?c1-P zzyAOKZ@F{#c?Jds^O7LHUw;w-#{_^$Puit(XUF$@)k3S5W;v|d@rX^`Z%xCB9YNu5?DHlSMYz<~zj(TD`QGtFj8>72ZL;px1^_vhTSSWwL+zDUVZHL|E%T_U@t zGj;ZQ4hGjrbMgcZ%*e3L>AbrBC`V=Dq310}OzfkRtmjlzEpTaa5Ns}y*)40Yu{fZ% z@6p<(tv_CFne$dnLu6l&bCye}bK=!?ZtDd1D|Ib8zSw2`x9$DqRz?p#OPB0k_nPy9 zud1ULTaRn7RO*EGI?d1Tzm0XmXSdz+MWME{V zYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv?BXcW5 YLx_fJ8{I4!7#J8lUHx3vIVCg!0CIEr)c^nh literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/find.png b/Media/Themes/Umami/Icon/actions/find.png new file mode 100644 index 0000000000000000000000000000000000000000..3f3faf3aa094fe54c7f84894591a1cb73b93aa5b GIT binary patch literal 1254 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_FFaiwLp+XOotm8^5-M`M-q?C`zuw!R zH$esgQqjA;y)JTeJiIB;x}~FEptO1Ano!t5V|DW@Z`TpGZ^(@;~ zx94e2d3m^^!sK8P)+JMTdhYuKh@^i1l$vi-8NRKH|2miEQW2*+pC<;LDxE4?rsb16 zL7(xc!Mc0JoSQb)tenEQfbY_*u-f0J%iJ#q#b#t>?b5C=urRZ2N?|>i@S!hWcj=#e zF2DJ9wcbT90y@0UiVHd^EOEGOvdn+}&-Wrdvem(LpO>a>dw=8HqSkH={n_q!Hf>b3 zkmb7Gb9GQ ze>|L&>ODPpYvJGXtFNz_wd2v-smI@WIw}Y_cvY02)ta{Fi`ISlyr=6U#LiFed-N|+ zPRQxPm85|3MN>00&S-nb1+O*>Gh>)}az*rXd&JybWTJ$PJn4P~>!q%#v zTUJVZm(8AtS;q_JOK*R7KI$7^R=Et`5^i_j6_rh7YltGBd2Sm6_sHe)nz1xHQY7-O0WGki`B~B_%P2?mZHf5BgMJDZdB~Hd@!x-0pm4 z?gZ~>{TZB%Q@ETwlBW4Oc`S-Gyz`Igl-#$~^WXls(&1+PeVI}KLyVrdrKRPMzjbo6 zZCX844*d*vpAkIg=*4cf-_rU@BJ9_FJm0QQzj67-u|Gn+zijPK7*_tgw=Vncdi(7O z|4uM2xSkuEdbE67uDx-^%c!U*4IPc7cbmC?zWmNHech2x@2Tv6t&E#)=G@#6Wn=n2 z^XrL?$|YrG9ES~V&D~Xe?wRk^8hfWtVQF#|wLDz($a!=7%gJhf zpPoH`p8n=f(ewGw_5VD4V^nqRS>K0zO?~a>M^3t>`OMbbcjM>IU6sLGi*_6OGO&Fx zFW|F?+`sRkESPYtUyv)8!1`C)#)Zta@;9~f6T&(qY=saU>jS=#CimFvsGbvJvZ zKm7bN@4>R~?Jr-?yjAb-d1wMdx43@Y!O0JAU6YUAP#Ik6JL|{G+x8LCAB!4VwCfod z7*tDKBT7;dOH!?pi&7IyQW=a4j0|)QEOiacLJTdej7_Z!&9n^+tPBjMeYP+}(U6;; ul9^V?U}RuusB2)RYiJ%~Xk=w%Ze?f)(Qs{}n| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ow*PZ!4!kK=Er#%9QbiX5;1es1oYw5wd2 zIadU>25>!FsF9Jee1S$pfQxI=LjR@*$D0*4aYks?Ub@!KChy`jG01hxU6G}(sxw4Z zZCsPF@mN~!mL*qDWtneXyYSe%>vOAXZe$vznV;PE^N}Rq^qH35|D3b@Z_V>3UwcND zYR2V;pD{A|&)D9!dmm-_`%LE0+Kp$7ci#P`cA3jT=6mV#>)+V^UjD9-bDB3QljqU2 z=i76fS5}>MzBzX;!>+4g^J{CWf5*Ny+q=Rf+40z&4Iy_9c3%Hqdf(_k#^J*UuRVFj zTl-zh*Y3oOt-5ccO^z!$J%6O|G?4G8n!kwK⪼9`+prP`TpU?z5HgL=%VIto2M~y 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/format-indent-more.png b/Media/Themes/Umami/Icon/actions/format-indent-more.png new file mode 100644 index 0000000000000000000000000000000000000000..6da223e27f1c96b515f761fbc7cefb4ec9ee7011 GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GX5uPrNAs)xKhMdh43Y4%d{}HLsvdYBK zO{^?>{t@*Hp~=}BKdKup3;4!sk(s>MFl#OUf@>E>(UieMJDIc#D}7#Qqi_V;gjaxv}X;wN8j zi7+}pxNx=VX!7zeEGYqo3Ib~nOfhbEm?$v+B(u3yLCvSav>mghqd#-HFbg?u-M8xa zZEFGDcE+9O8e<$783KHIgg^P))pxD=^YGX*&7?Xu5eLBu57={mehcGV_xe%U#urbQ z!h*#`fD8<$HEtez)NA%LV24jPGBKzZ$qUEO1NrhibD;zRDs7DgE!hzj$cDC)La5 z!V#ooeyfD-S%d)dx%wO>h5|krli6o4)I};I+AEHpW#SWp6JfmmTT_Enp=m>_xGP~&wYUV+tehnnOyr1QhGyCZ237_J(>_}mqG-s?PsvQH rWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efq}u()z4*}Q$iB}6i#Gf literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/format-justify-center.png b/Media/Themes/Umami/Icon/actions/format-justify-center.png new file mode 100644 index 0000000000000000000000000000000000000000..896dfa106be7b47a9277f420976407891a146bfc GIT binary patch literal 694 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s8-o-U3d9>=#%KJ9nNL8R@xx%5qAScq0VFK0X#brQy(dBoX~nOL{IeD4u!q`iBTU^Ci^}ARR8>s zG4qG>jd{zzUy!xxOO|sAxx8ij>(#T}GBy;Kd$)JJt8I^oRrQM36Q60Uu5{vgzf-c8 z+u9ihf(#5tp9wLZKd--1VcJ!uMIsGlzk`&r_ZRxTWZ2zmKF!5(CBr7OnagJKCPeBk zlywmhP*Hevlc8th0X3E*8Y~SQw*QwhzH?G)s{3EM+O{o`<(!h;`i>*bYj5Uo=y>K? zGtMdY571%jJQT!GemKFP#Uya`RfkuqyG1416jvx|R{z(IWlVl?chcEo8yJ+_j_iCR z*|J%>*DZSO$}oMW^-+tMPxAHBojmYy7_4tXcQps&8M^+Am*ciCe^rTP#mjic?_{6`bCY zVSFs-*bRTZ>6=AEXJ*c_(iZFbR$=pRmfwDHg2D?NY%?P UN}v7C2ILF|Pgg&ebxsLQ0H3x3jQ{`u literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/format-justify-fill.png b/Media/Themes/Umami/Icon/actions/format-justify-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..b009ee3b3cb4edd08d8f5440e80ffa7236b4d18d GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s6sPZ!4!kKLiF_Uv2{WI0`V#dUp^-QVIFTqX&hVB9^arE{BB;Lez7$}7UOv!6zk zyjee4rg2#&V}iMWz+n}JGaT!xBkI^!35jyGeq}ksvo$I-Xwn18i7hTJCiR-TkZfhK&LeuZ8|^XA@-R-BG?$)}Ul}tZHY` zPUo4N99>5zFP&6T#A5ybG0W;$A-1*?pS_w&tk$aZ*PCx-X-nK=YqPEIU+X@F%K6XZ zCY_agG4t=4xc`gudEJ#?A1_?L+w$X@$=PeX zwHdRH8BF!Lxi{{8vB3{1=R5j&mp^ig?Yf=7@?Gd20|SFRdP{kVo554 zk%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn3=MS+%ybRSLkx|q zjLfYJjUXDHN5(8+U|^60*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGn LtDnm{r-UW|CRhRb literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/format-justify-left.png b/Media/Themes/Umami/Icon/actions/format-justify-left.png new file mode 100644 index 0000000000000000000000000000000000000000..224d70023345320156b7f57b56361d1cd02092be GIT binary patch literal 684 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s7XPZ!4!kKxye%Yt8=p+xlL(soX1_(z6=1HgdUd=gd@`Y8CYD zjPBN?LuVKmWU9A|T*%t1!W6Q4D#Ieq6<61p#GcnvVoJNf{(|$oQY1?z^CXuiyPjUy zYqlV0XN+WfiTr(U1_K^v!Fi%gNg_-RB?mgZmIf*8s?d{WIJ2fF)7Vq%pcm`u|i_Tee<#d z7haZZc{Jm`qx=D%0G+rsoh?dD(Ip$|ydE`mGTh7&E7NodndjV)8Y%C8{_N+uSDsHe zU!W`g^Uutg)@SE_*;jQg!J_0}&Hb4^YUfJ4G8bje>gb=Td6-8`sZa2tuv3LoNBm&} zo6AP*+j4o0UiMsnTekoA-}!<%vv1d4w@(q{O@E}6@REUnLAAs+q9i4;B-JXpC^fMp zmBGls$UxV?QrEyN#L&XZ*wo6| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s8do-U3d9>=$ap7uNBAhNeSqkE;mVZP~~ z%(GrF2_?0j(3cRlKiJ}-BDJ5Pxly&VbN&%0F}C2!kR8`qHA|v2WY?HyTFp&6xAXaz zGa?V>bMJM0z42yg>~|&3fWrn==GV7xGr75A|KlaAeqKo659i)=KJD^e>-02_<@`%5 zbN$x{7#K4!wBK_T+Hzap%jN2;rBaT2>$Wb={?F>LWQBrMMW*KjkC_ffmw7E+*toX(+sd#21r{&OkMm7C zG;Z$LbNmRmaA~^EPU?K6r;CYTW8|ddp{YO zVz1wyH!nK9-YI_ap7qD>EeNo<`04o1#Sf2PknvZ0*8h6e=bv|CbTpi|oDle^Xq-CJ z(fx>|l9dyOJIBYlUQ1e*kj)2?C{7#J8- zOI#yLQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=I zR>@#wU}&goV5Vzm9%5)@Wn^w;Xav#lJThhp0|SF3$cEtjw370~qEv?R@^Zb*yzJuS c#DY}4{G#;P?`)(P7#J8lUHx3vIVCg!0Oe{Bs{jB1 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/format-text-bold.png b/Media/Themes/Umami/Icon/actions/format-text-bold.png new file mode 100644 index 0000000000000000000000000000000000000000..87bfdb2c7ca50dcd52f718f6bc29454679204007 GIT binary patch literal 1109 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ov$PZ!4!kK=Er_-Dkp${gQs{Qm7b@3PBp z_NPtWG2z-W(PZDVGXXdR{xU}j*_m^ui zf0%{3rnaQ{-q>|>Pwo1W$b;iF#d<(;Xi55jO+IqA29xV zU1_(fyV|}^Z5C~(j(2Y@y)s+9dGyZgjlYr0SGrxLbxxJ7=>p$<)hsOxL3TOfLO*^z zn^gAs`czGZ`TtkT_ME#H^xEy-pI3*4FE*Xskagul_&$~2kM6465_PCQ(q9~2ziG?8 zeMkPh;avY$>Gp|hUpF$J^jM&Nr?cm!!s_WCZoikDWPIwvTB|p^T>MQ$Hk8)pd=Ji8 z+~Aacukvd^!O;~9&#_E1UdH=ixBcd2XKfmhqO`D6x@>0kHXIcIZsw&msADxn_cjTtHoCtj+v_4vf}aX*}EV>f3>xsj+vDcj?^i4M7O zObjc|dh>UQ6-x7*nf!v!T~zbP$%&n(KdRq$oa`rSzpFpO%z0mkd)e6s6CNEqbSH(8 zLF}0tw@a7wvY!pc{tgX`j726b@?8FpbHmYPix+QRWqTpL?#n^xi*t@Hh%VL9)3t7O zGTc%7U|zwIm%euLPht+0nol^tY;D0ck2B}b=WTp5tv&2bfA8Ddx8Je{Zp;f6{IXi2 z{`J%a&w>R$XkPduGArKk_+gHJA3j_C+mX)P#TNSYch}#Ih78wlGljIC;o*PFue<*G zg%qK@#hjb(Fo+AyoA4l}iMzpmop;Bz*LDuveDh;l}BgU+(s@s@-1t zyG8P4^mPUm29329DO{Wl&&BKi?E8My+`iN+&3$#O;uOB^zfQ{P-Fmj}?Z%szih?`b zC+BL-e_6j|KjX~Zg;CwhS12$rFsPQeMwFx^mZVxG7o{eaq%s&87#ZjqSn3*>g&0~` z8Jk)enrRytSQ!{h`)px|q9HdwB{Qv(!N|bSP}jgr*U&t~(8$Wj+{(}hqTzXD%n}9$ y21$?&!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NHH)lFnGH9xvX| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q|7o-U3d9>?EKx$PYiC~|CntzL1Ogt7k0 z=F}P6PncZ3D5E`rtC`99RL==^&a={X9D-liS!{o%Ojw{QWZ5~zscXp$zQAcqTM}nX zdA4-ZL8)|^(r0rvm-A;WIayJ?g55qM|9;&5t=Df=Ge-Zqt~A?nPE3ZGU|;_7DK8ls zo}WC@{poX?z3m~l$?{re?woUeEcwzDD894UdRbaZjP84msCSReCfTf9aZW+t-lTH1 zW2etYcSoHzNNHXBBG&xDiKoYMrTSi z%)V6zRD&;k-J-GafQ)iM#hhZRF!Q%*8MQx8s_wpPWpGPoelY7XjRP7IixpbV>`Ymf znw=XM6qw6#Ji`52XU1NQtPf=wT*v+{4DyPRP?^}Q@@aw#UlcF@+!KeF2E5(7d~t;E zgM@Rj@_h@9buI6txA)Jxllh|P)*HUR@4GZ(gKQUzw1__|b5+aIj7?<|R6RRM<$sRx zk9__?^Oz0u9vNZwJ1vs#$M!8)lg8r`s{-{@&cLvZA>nkA_y3u7jP)(5 zbDo%2YcVh|sFt`!l%ync8R!~V>Kd4Z7+P2vn_3x~X&V?=85m6a zY+;C^AvZrIGp&-r$iUE0*T78I&^*M@$jZpv%Fqa+;dx}t5(WkaNstY}`DrEPiAAXl l<>lpinR(g8$%zH2dih1^v)|cBF)%PNc)I$ztaD0e0sy41i=hAj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/format-text-strikethrough.png b/Media/Themes/Umami/Icon/actions/format-text-strikethrough.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0c115e905091c0c354644c02469c261c1acf7e GIT binary patch literal 948 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{yo-U3d9>?EKj`s)-lsUft`Mu4%@8SlwH z|K{5hbI+bUyJf-JYy*}Dj_vstDFy`wvwLo)&P)5gi9zJZ?(FV_Z@fNAKWufPQ+KL~ zbe;IC>?rc&c?8FoDXo4QpN<{AzE5LST71{nCGCbiPj(lo=o_BAucF=cH=tCN!Qm=H z=;ehgtU^ND7yZqe+`DpB-@NO0KTq;zFlZ?G8~1v?wSr63m##-bW%JjZH(mX_j--9-DY;iCI6pqNZbR48p8niEr+2T9M2O7!`scuA@7|NIXSif;+d6O6+^5G9 zT%30u**t5V?RgQcXDO#wlr3a==^A+X$cqK+4nYTO*w_6HzauHRT5jj|{B3N@k~XBz zNLau!#ppo{oFhu!N|bKK-a)h*T5{q(89{t)XLCI+rYrez+l>E3quqQ zx%nxXX_X8{28M>Z24=d3<{^egRz~JlhDHz#&m&`&FfcGkf@}!RPb(=;EJ|f4FE7{2 g%*!rLPAo{(%P&fw{mw>;fq{X+)78&qol`;+0AZz=(EtDd literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/format-text-underline.png b/Media/Themes/Umami/Icon/actions/format-text-underline.png new file mode 100644 index 0000000000000000000000000000000000000000..fafd4fbe482ebdcf9817d499857b7ec8e8f72acd GIT binary patch literal 1038 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q|ro-U3d9>?!a_Vow}6gmF?`@Zib^YXpi zy@Q!#1qIh^e_`FdC}vAupo`(8B#$i|i#IHrHql9d?VyJqSNDtThs$DH6)uXWX)1?Y zlSnmtd?VuU8H>;F+_`n7WM^ODcy-|6yyADq-~W66km>)fiT5M7{Clv~cuuGA{bJXp zXZvld@7A*yt8`04k$D=wGbE`KSO@@h%i-7Y02 zrwe824qToI)1C^Sb&K7}FF%?Xv!&OC zi9fwLU8huH$M+|`5(nPCySH$|vQ&lB(`Ihp_Au*f6N6SqwR>n}*!u*5h5CZ0^CH(3 zSY++3lRxz7kSbfF&+QkHjA^yIgM(8-Jr_3Lskf1Md?)Met{CfsJFmWymFc@#((G|; z^_gE~&-XA$I_2Kkvnr(Wvtdv9VMZp?hcl;4{m{d9{6x#q2PaAcd@mfcWcCSfS5#fC zt*>`M?i+uhL&>+891bRj^GDkjh%7RGApi8HWu;_Ox7FpViD!Hpd#+5GE|Oq#%J9P_ z@#mb^CYhX#@IGKKG(Du%_quAzlC*Dj%d~<_rdm&z&UfF}6sZ&J@$t@`@`uN5rt`D} z%Jr)!oIkhyxY9#4hIt|BXMdc0Ht+LQOUrJn)!Xwn)bputIFs1CDj-P6cLmfh1>6MB}=iB!z{2s|K9JDNilc7amT71k(y>q%- z`q}U8WIV&5qG?b*x6~h5#D)YRv@K69P^@-W;# zxn=XIebL8jHftqJ3O^uJRen7-z)5(T*R2oSn?){)$;#VGasDi2uu{-w`0*h=GKl}$ zm2LG&F(PMv8+iTQJDp$W_s(fon7cPN{oTFIkx9U*iMxS&rqaAK%a7mXmpi*7MyP@5 zpSStDbJ2`TkNiKaJ}brH=gF&?>lh|5NHEx$F6;U~ua-IXj+eovXeUqxQ!R0gC`m~y zNwrEYN=+5@$GBB9-*}{;4fdQc*H$Npat&+jW zz|c_Fz)aWBJjBq*%E;Wx&h*rdD+Fui3O>8 Y`9| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_owLPZ!4!kK=Er_-4d}iX5;1e)qSU{Ixny z&x1*^Kd6zrxJxMM3HoZl;R&USzCyPfY3{tr8zvbgbP zp6Qmv-5O$_-hDdDu*Z#g?$YGs+p+Q~yZ_ey=VD0sF1+3(e^>GAg|fe&TF;%^TUsB? zpjkWb&5f&@YA-K7AAfTNn{`~8>t5qk*Dl^$TX+1@wk1NUOxdNMe`+_sxv^<;=G89K zoBp3_7xTX{=bu~Me8`^hh>*kdqW14!?mQ?y_oyHuU2@h7*9V37f9YH{4*qr};Cy`4 z>-Nv?k1n<`vX}2aE^hx#{iG~k_eQqYI@dCLu1YN5x%{nT%#*@TmmhOKUGOF5ov-nQ z3p_nnTXy-ZIPIdQaD{OrXQ!{j5@sb~ftN=2|CP06r_D;2zg>KKRrK|*Tgz9jYh$=| zY|3My&E1z{bbXDC|7#aNwdW}5oWY>%w5DT&Qqr5OzRpLM^Xi_oUgOOz-!tv)H23MU zMh==YQa4oywy(aknElfC31JGgo^Gihrnp2jin1*~bV^Hrqp&*GA?L94q~E@BTEP>S zv&_5Fa4hQh-PN}v=kJ`}e{N31oZ0$v(wU~!ubD2X)$+frUZM8h>O?S;e??B*X5pPX zChco{-2J(jn|+^6*1fg1@!TI)&pxNiF3_;tg>?~25a&5R`Gs4Tw*Jnqo-^~%9P83u z>51Q-e>nR7*IR=Nv!3uY?hsqh(9=9~`)|JW(U&@fF7BHich=^BGNueqTPb#l1IrkNCj8v~C2fIbU~%dFdrRHc6y`+#<=Oc#=F8dE^>tFe z1K#fqd*H9Yd_!d=V@Xg!NI6?3_bEpCdNYCE{{H9Z=5JU(dqQjKq1?BkOJ5oVx;)J; zXZX9kdU3p-zwGW0``-E{J$4B!($fv*zHm}2NHiw@`jL09<=wb#lhxlAFl||x66(P- zrEx*jl}Yu1k3LV{{e801D%s8u_p6R!-5kO%Z>5}`=@ZxHv+`DK)rw_NAM5k#nRR*d zY}gLRs4*}wsFt`!l%ync8R!~V>Kd4Z7+P2vn_3x~X&V?=85m6a zY+;C^AvZrIGp&-r$iUE0*T78I&^*M@$jZpv%Fqa+;dx}t5(WkaNstY}`DrEPiAAXl l<>lpinR(g8$%zH2dih1^v)|cBF)%PNc)I$ztaD0e0sz-3;QRmp literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gnome-lockscreen.png b/Media/Themes/Umami/Icon/actions/gnome-lockscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ff34715ad12a2f26f514b67a62c1a44af5846c GIT binary patch literal 1169 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CYO>_%)r2V9fTR3G-g*YFfdQ{ba4#vIDU1icScO8M8kgT@8^`y zFJlYlozb+lD=8@`V9ktef+8*j1}TZLoK0pC;a(gecQPDfIP^r6oy4^47TjWdsTOi6 z?6TOAS!WJ8B(rN~daAEaOMADs`26E?!^-_???S3(l)gR6l$6?CLMC8Ft=L{q<|t#;^@x0vjW;r+>c| z<&x5Rj>*7k*3-M+s~9EZ<@cL1EQsKl*4yDx8ar{N)O1tbV=o9=^J&Es>m&b?e-{<@26A(AF=0bE98k z?RKUcuWoPV$+{VMdf)QhGk;Zg3ETG<TU zG9EAVRI!mct~md^GRMY<9v7Ry(tm0WOO&GDN6vNCj&5CYIrCSQ{erDu>*l=jJYHC_ z?zOmFwspI+>hrCQ9?enKp{{OHIyJw(9hZrF?pW<^eY5k8R_yWabjuG>eCBBmT^+g! zJ`JXJZof0$E-n=e)myZP>F6UKdtUzUhuIpw_kUCR6tr}Iz{=K_6W^<68@RNg$%6}c|OQV@h_;~gem&JeoXZ3I4(jp56&BncaX`HLqC7)sqiBQpEpK_Yf z>v-q&A0g3KjzzK@X?$|#%+~u{txKCdxji`2xUN(NOun({pqtcUp0MmSh7pS|o?3AA z&$CuG35WJXi*HxWFcUXLbnb6=U+K+w*ErZ$5Z`f z&-?2c(;mnxDy}Q`U|?WSEpd$~Nl7e8wMs5ZO)N=eFfuSQ&^55sH82Y?w6HQZwK6o* zHZZUzopr0NfY#u>b%7 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gnome-logout.png b/Media/Themes/Umami/Icon/actions/gnome-logout.png new file mode 100644 index 0000000000000000000000000000000000000000..b757c74afcb372ea4afba5223af7936d5034dc88 GIT binary patch literal 1264 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 MboFyt=akR{02)4tCIA2c literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gnome-session-logout.png b/Media/Themes/Umami/Icon/actions/gnome-session-logout.png new file mode 100644 index 0000000000000000000000000000000000000000..b757c74afcb372ea4afba5223af7936d5034dc88 GIT binary patch literal 1264 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_XFXjULp+Y}opv@mCRCz*e(|}v#qVn@ z{?1TyZNDH9yfD*qWy;hBy(r~(Olv(>sz$7N;I=D=t7*2t!W}Dr@rMW=Sr@~x?vkr& ztctFlP=;o(0h_kZ>oaF-=KU^=In(ZGWn8kDo$q_m`_u1t?k~RgeUJFR$BJ<#7oxNo zI4$04H?TS>2szzoY~U6@uP>Fn?kls#QjeuUDVu+Ph!Jm4;PFuT(!2Di{yL`KIDzHG z$vr#2-Mjf+Q-teEmg%dnR$r@RlX;FwEScgnZ^n~PPx~iqN?mYq#pkQ$@%3CfOl%#$ zm>6QNyJq_eu(Tw4h`1gpvsjQ(@U&+1%wo%_*xj&-hE#3i)qWXih0|;V>lY82(2~EtA1PF_pRuwuh>rW z8-+44*N=X-u{nRZ^zOSWQOdtO{!Tc#=d0}BGftW zk-fj)Jo|!2M@;`8Wd0hv@=M|G!XJz+yJbqIB|pD&>(-&qHhprox9;9Kx1q47_;a+; z&p(Hx!`JQbS{a}fIi+YNNL=pau9RxTt8z|)1!BHms^&-kzlxbynm;y_30B=M4XkCbM*C_w{k4q zQ0VjRjAY9cf#Z8+ITUv-=ZLN-lcCPGywCaY;WyuHw&mYH)}~mv)hlML z(qzv`$NMjzY-{BE^wVZ*RPWcXrA9M(`YvD7&a&z|cSJvou_ zdJ8XelYv5)(x11v4bOfW{E6ZCc+;U_tJqSJYfV_3n$}0;fb%~q(>W%WyzgX@$pU$WAQlXx(_ z_TP`s<;UXlb(s%c$}!8BmFB%;wcf6%!km?1+6>F${ogUQ@$>87{q^zMp>tkhNgwPR zw~DR(Dr6h=^uO6Z#>B|VbJp7hG8h;bR7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly z3@xmTO|1;gv<(cb3=F1ywlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQJ^@H{eR z2?GOzB*=!~{Irtt#G+J&^73-M%)IR48NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UO#^&FTp36N9bK&u9S{bbgfL`fW##1LR8&;d)zvjLG_Po6w;=FFLMXD(g3bmhvG8#iv;yLa#Y{re9dJb3u<;iE^79zTBk zt5>gHzkdDZ&6~Gx-@beI?*04sA3l8e`0?YXPoF-2 z{`}?3m#<&He*5(vNFV z^#A|+3!Zz${_I>Nvh~-Qp6;mMS{2iai;8Bl{OfEud2;^4qs%EY=A1iqY|s01`6mmE zs<{>}m1Qxk-ml8cdU;1yrOmu(5d~(C$5J1QFMi`*)3DNHojmJHi-~i#HWpj5pDJO` zOlVOSj+TF?C@pbzlns280r;Jzczw2y|U_2BU z{z0X`m#;j;de^U+?F>7U`}1p_7F^#Y^Qr0X>+9>cyuEZ`!7E+abGkDx@$Fxr-+Sxi zF{9I5{c;`~UZ|O>8(+23IvMorSx#faUS+f5(&Oh32e_r3JQMwSU-=K#6H|27xPHFc z|95i!-36HuziyX{F)%QwmbgZgq$HN4S|t~yCYGc!7#SED=o(n+8kmI`T38vIS{a&Y z8yHv_7)<+YVTht3H$Npat&+jWz|c_Fz)aWBJjBq*%E;Wx&bP0 Hl+XkK3f^zp literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gnome-stock-mail-fwd.png b/Media/Themes/Umami/Icon/actions/gnome-stock-mail-fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..33d884326cc95c6dc1ddcd46c470080420356fd0 GIT binary patch literal 985 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&j9Muu5)Bp4VNdjfnyTp5tSf_$Te`G(8#wbIj)Cr|9n%t)OzW75G!^)>nOKlbGO zI#l!fXxs0T6GFp-lTs2=qJ2`*lF~9#vU4-@3UW%ziz}l&(?TN^sMT34@LxoOje z?Q7=m%4XQtXn3fQ;qc*uM-Cl4TEcMR#EG+K&z_56ICt*cxr^5>UcGdsp5a;}!>y$O z_phD4|M32UPKF29&pfz)=UFeqv%BY?J$v?Q0>i6UuU@}?{pQTfH*em&ef##^ySMLm zroMl2@%`IZ@87@waPRPk4<9~${P^k0@=u>Weg6FMGYEYBGM(Ye;m$8#zI=WC;Op0~ z-@bkO{`~6q@85sSVfpdn$In>|KSAL4uh|U0e*OCO`{(c9zyHi(`19x2pFh9<{Q2{D zF2lcnfBw&7_`iVt|3a?+iv|8K75%?l_Ww%d|7-OAuQmL?-t7Nom;YPb|8MpAzs>*u z_Q3x;!vF6{{J%f@|Dn?VhsysSsri4R^Z&{2|EGHYpPT;w%JTo$*8IP@@&C=u|8H&i ze{awKd;9)BKKlRh@&Et-cWE^QGcYg+mIV0)Gcd7p8M|cGH#W6SpZoB|tJjHQ;d>bv z7#Neh-CdghY&n04fq_xm)5S4F<9u?$0<8y=9NFgxaL!CCQDB}pA*{cPo0pG|k7dyT zhyMoRrI{TqA)BjW5*Ez24=}iJU)>;VTO^l~;!T+qV$Yv5v&hNG9W*S`J3C2$voptW#iF9UYP`V{S|of9-3qeab?3;nu*Lfv4|6Cg-pWZ7SULH9>WU@N;ZeL( zGR0awI!tD}&Ul&jOjIOnipccq84{-54k|4U3m43oBqb{(G=I*t(4`l3SSCIYU|~vZ zy|duOj~_oKsO0lHmQ^qq8yS9HAtw4vwQV_f#)d_$cH7(9-2B+&+blRTrhH5mO~3Hq zsNT5+3lFy0PBM+)SkA(*NhTAF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjthZq`J8JSxd8bLHX SkBnIY%2A%KelF{r5}E)MIM+h} literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gnome-stock-mail-new.png b/Media/Themes/Umami/Icon/actions/gnome-stock-mail-new.png new file mode 100644 index 0000000000000000000000000000000000000000..f810f7c44a7954fdb654d30952cc9743cf6fffc6 GIT binary patch literal 1102 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_0iG_7As)xiPW8`_36(fdzu9=EWbEsA zX|sKVIkIM}ZB{uPzqzYZ+DvIsQ`LmhJsf z-#060_OX=Rk&AB5O(`o&yZ8CR-O~R(*$NzX741LwRqnt4eXn_cOA>T{QKLt|K3bpyx#PQpWj>t3A=x3ue=wqelW?7%8NEIwEQRZ z;pK}H60cvsX5dg1a8g)$WRuP^zgma*{AV{V_v`I!;EQ2hmv!w+Sn$CkPkx*}pq^SG zDZ}D8^~mCE|9RQ>=P!HxZyj&wT~!mq@?gQ2{Gv_9vrOMIWhj1lXk;_{tXac*o8K$` zoO637{jE&?NO*k5!nf1*m7lxPm3}Ya$^7t!`O+*)ng7<5r1bcx33KfiE)G<-oWQzA zp)G3*W0%s>bxsB50@}t~t$v(&aYEu{$u7Q#`;88PK1SP|a<22cTs6BgjlIxJ|E2V{ z6Wi4z^ox~4dC&Cp^-TPw*ZThVkA3~mD=X%OSH|txc;L?;ne3Z7eun3m+3zV$tLce( zmTk6KUU>iYN2_oC?qksAl?`E>-Nn*UNddaUoI&jam2)T$&{(NMX}>d?j=dWeGBr5Y{++YCVA{NQax%wPK3O_NAyIdC+jCLN zKSu(58E=cd(6#zo+h6drs7rdku9=PrPjh(xzI!6~LKK#!nC@i~Y)#JJ-z>1`*=OI_ zok!jr{VY>gvtp%!keYzghs*l*Nwd_>+g7*4=(XqGw&-)-7~$e|^1wpJsOZUa{(s9! zJ-f|nLQqj{;=IOxj$Exw+j6hV6nu63{?6XvpsqprUn$$Wdwp4DpEf+Nw)qnv|FgzU zBxY|fLtEa4`gs1li)){i1?@VU+8BGXq=ZSJ*X`!P6IaUzm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhX oLqlByGhIXT5JMv?BXcW5BZ!9Qkuggc7#J8lUHx3vIVCg!07t0VF#rGn literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gnome-stock-mail-rpl.png b/Media/Themes/Umami/Icon/actions/gnome-stock-mail-rpl.png new file mode 100644 index 0000000000000000000000000000000000000000..e769da498258b2f43528fcb2c0aa1c6212963bb1 GIT binary patch literal 1181 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq{9xr;B5V$MLsQVtr&nCEDiSoXHq-gGqPk z1YMJ+X;T=EZOshYtC+RQFmA?{OS2*_M=Xw$oUG<{%R@@a=kgNYHN8Uht6sG3_r0PO z#P2E_LbD{o1Zc9znhHxMI~V$-OvM@bbkH*y>j(x z=RlDb0gst$T)jFMX`HNkwPV$*BagjXoD_9Vd+qzYMudZfiKW?*LFTxlSEm5e@xn

+6Fier*l8xAV$YtX!!m!K3CHmff{z!qlaLe^ig0oBLfQ*So-oMM$xwRiLS>i;Ino z?Znx$z8jr|ekq^YxLxnj*Jl^5UOjpurRR0q=2x9w!Un#^XQLZVo${)C^HNP;zyD8- zd~z`No4SY2``-SY``*f0^Y)wc1dB6w9vSVO{@>?u3Wv%9PHvskhYWbS{;HPzFX-ey zSNh>Y@%xW2SN=VtJLAr_tzEvVs$Y101?C#>yddrMcunTSDMFg6!Vf)b?BuuS-D}#m zZi@1Io=e|8JwDR2f3MzWaYK_Y($gmN_~;r5&O4uwdZ+mamsqdsw%oOcOdfstV{_); z;`k4zCbHFW`37%Z+R)p&^Ul8$l7Ei=6cMYC?=sM zIo0^=^PX#4rhojvbV!URZtl|u_o{c6*|tfRZ)liVIa%ha-{Uo!0Z~!2&Xn6G4>P|={VuyN{_MBfn?KGt zPki65O4F1je&|L(+R_H!~; z0ruX0bq`NoJ1?1=e}{2~o`I?UPAAFl3R_RG@NBmbll-%!IP=wYb^m?U8x3qsZC_qH z-r%}j@7*;$l?UdxnUDTuFx|TDPvf)YwyWx*ZhiX@aol@r12c#D`dt&VTT9gSmajP> z^MBdP(1hKKGT-k`z83Z2zsf(R)HHoN=_4$83=9maC9V-ADTyViR>?)Fi6yBFMg~R( zx(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O4>2^dGBUR^ XG=gY&9vQO)R8)An`njxgN@xNAkUJEY literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gnome-stock-text-indent.png b/Media/Themes/Umami/Icon/actions/gnome-stock-text-indent.png new file mode 100644 index 0000000000000000000000000000000000000000..6da223e27f1c96b515f761fbc7cefb4ec9ee7011 GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GX5uPrNAs)xKhMdh43Y4%d{}HLsvdYBK zO{^?>{t@*Hp~=}BKdKup3;4!sk(s>MFl#OUf@>E>(UieMJDIc#D}7#Qqi_V;gjaxv}X;wN8j zi7+}pxNx=VX!7zeEGYqo3Ib~nOfhbEm?$v+B(u3yLCvSav>mghqd#-HFbg?u-M8xa zZEFGDcE+9O8e<$783KHIgg^P))pxD=^YGX*&7?Xu5eLBu57={mehcGV_xe%U#urbQ z!h*#`fD8<$HEtez)NA%LV24jPGBKzZ$qUEO1NrhibD;zRDs7DgE!hzj$cDC)La5 z!V#ooeyfD-S%d)dx%wO>h5|krli6o4)I};I+AEHpW#SWp6JfmmTT_Enp=m>_xGP~&wYUV+tehnnOyr1QhGyCZ237_J(>_}mqG-s?PsvQH rWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efq}u()z4*}Q$iB}6i#Gf literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gnome-stock-text-unindent.png b/Media/Themes/Umami/Icon/actions/gnome-stock-text-unindent.png new file mode 100644 index 0000000000000000000000000000000000000000..139ad7036d70a961e0e38effa660777b5e384ef3 GIT binary patch literal 840 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXUY;(FAs)xKhMdm3>>y%WCfB_rkc+F6 zQC;Y-%sz%|9T(Up2nd}p+0ePLYsHEcml}RB-BA8$@3%zf1(Rs23GYc6vCkXsTJ(xP zjGA`b_?zYTJH_b@|7E7h$<*5Xv6_AMT`rT!{PXqI|K1$^dn4uhU+X+AKKqiDg`20} z)L(YFL$8Tx!7hiUrUfyKEm4Y$r*;v-p<^4Yo*x&&BM*GtCtsWSc4 z{kY?6NGbSI1H9SwLc6ueH;d)5AOLrcq>RHm!5 z*kTe4cpm(gooeaW)p66ScTIekkmk!>Z<`)6?7QC?t`IaYV)Zi3i3aw92NM|n=N?~U zdn2bZa@G<|Lcl}u#efAHIG9Z#@c z+r6cxJ0F^TSoXI{w`$AjCHy|l3ic&;t!}NqrTx%%9}j<5$!~}6CY;;fCEdS$-0?dD z!-e;AU5u`(um0j>Ff+lk@#eo*?AQ15p8tGkl1u(t32nYbF09Y4Op@kfxD&0nXS!U% zmCUsZ#T7!k*DKz*w{PAI&!s`Gvo`2xf6L=2+Ii>u<9iqHhG@L@tede>?#-J!C#}rq zetLQS@}Vbx_IxNe(?0Y3^PwcgZ7mTwoClROy;O>(rN%}~Gu@V3opbx!d>=LAbI&$S zuCX)M%$<5{@x>R{Z{B?W(kt0a@;`%AFmJr^!}-$~7#LJbTq8sH%t8z;tc*>q49&C+46F1kvz3GG++_0|SGntDnm{r-UW|)v#V& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/go-bottom.png b/Media/Themes/Umami/Icon/actions/go-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..ecea1ee672ad6e5b4b07e8b0e716840f20eb5dd2 GIT binary patch literal 1111 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc zVDJEAx0Bg+3=E8S1AIbU85kI>idh&?fmJaJ99fsLSe3BYl(E>9vsjmckW~qbbqR=J zT?Ue}ui&z;Bdk+BZlaEL8B4|ttD@z0#jET}mb=uf41yY4 z!qT}XYU1v6t6~9=S;7%EPcVE1SHw!Lh*exsYq+BqN<^;^j9$+Z zvq&mtJx}af{@4vXu^V~fHu1!5=8fMdl(1GJaXVkqQstzbe96mHl6Uc^EK^NgrIfl? zAbo{a`a!{rLxPzrbuw4#W*!#ITBVnBLO6GgQT|$!{0)W$Yt0Ie%N1=gF4eaj>sQHXd z_bLC0XTv9*51(=}Y37N%IVTF{p3R+mwqV||@`X3E7oDtKe5!8o>AJ<2$`;?rS#r8= z$?5tfryG`>satZkZt2;&rRVCFo~vJWqjdR&`sEkvSAbB%ic1YEuQaT@Rk7+^$Es_M ztFJY#zTUXzV#k^rjcaZ;t-aZ__Eyu{M-}TX^lrQ~Y0H&qJFd;yePhAi8;keeT(s}j zlKr=q?!UF{;O!Ov|NmcjF!%`r1A|sckY6wZBNH~S4{nOq450nrYlf2zs=FQ)4>DfvZhS zfhL@5Z(d&RJJ)FE<|yviB)_Vhj{V)PqGg=sIzpR+lbmZ}eY_1-(o~PJ{Irl<;K9Kl zt88zqXmjDR)9w(t6M_w11t-tVu+FZEaoMnYUS6zkIvgeQ1-pq+%)6BM+P1||uPY*}*jaF0cw{K`}#O^PjwV_;hZh z!nwv*F@Bw&H1;<<;q&zS67XbN9#8K)mBYP~`}TAl74@poaB5nmuwdD|xr^7arEwi> zTD)Y*rhQBI?yi5-vTxqHZ_}!D(>7RihppVUt#9AL&YfF(x9;p*ShrS8I-<>UwFpO+ z)T~*zZ$-_XEtTc9HR9qT(eN*e7#ONv`|vD{{v61_z@S><8c~vxSdwa$T$GwvlFDFY zU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_LnA9A zb1Oq5h=%8pF-sU27$iY91m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BL&LIp00i_ I>zopr0QEP^t^fc4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/go-down.png b/Media/Themes/Umami/Icon/actions/go-down.png new file mode 100644 index 0000000000000000000000000000000000000000..43e99e1245cce419954698e0945a2ab263f72bca GIT binary patch literal 1072 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_owcPZ!4!kK=Er_4)EIG!nX{p)t9|jO&(%hVsNKe5S^C4;6LzG@Lka;J}3z)vp#ZqO;Fv+A1&eO01CNTlr}V!{U`%5gRr=Inu~&*>wBD z5~f=k52lcBz2)!b+&L6_@a&(%9?S|NE&YwR#de%Mz_ zUxxa=kKfwkUV3zS+KfoXsA$L2r_LNc*SIa2mAku0{JHK{w-oi3vucXc;%}XGR;_sW z^KqhXXy#?#BmZ8Q*4B#J&zSPmU;6dF-(PJ+^fg*PL~i)YbF|WW;^OCzJ)QsZGu;>7 z*|^^LWkHIBtzeJt%{O+mZ)v`Bz=@@J+k?EfZzJv$^0_*F%2n&_VPJSs zoy^8vwqo15b$wl*eA(abaS$-&e|PNIv18|2*RQO;`E5CK#Ec(yISh3S|MnS_>PEbO zaC!Q{+_!h-uR6SUh~44U%JAck&BJZCndBkHRg|f1bU%$!KOv z$x#u8w{}Z^`}};udPDBv%YR=Ys*XJ2DHLk>_D?Hh)~W~df_CeAY;C;rvqV%S*7)U- zJ#Qb$d3P4`PqFzR(h~E#{IPoQo*LcBsn2FHFfgc=xJHzuB$lLFB^RY8mZUNm85kMp z8d&NYn1vWxSQ(pI8JcMu7+4t?O#5tMh@v4kKP5A*lEKKp&`{UFOxMsn#L&pf$lS`% z2%_P6WXuu<1_nux4Z-| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tIpPZ!4!kK=Er#CC*+iX5;1{di7wdeI8D zRJD~oZqAcDJeqbI_ckr6?QvWduJz)ylF_MlYsWBt!6`w)F8W~|fp1Yq$QdKKwuIu!zIL zo4#wEy&S)H-kMde35)_!^X~kq`5N4^{rlSp3+@e08y~-7 z%{~9;-}CdlUrQEjwwJHlUwrL=(@8VUvyHQ-Z^^Iz^X_eFW63Y`#ct-zpl|RE0i4^R+iGS!gE9$ldC{s(4R*&zBeP_Jm0-HQ{nyB_3Dt{NOa5V>v9V9!LH@ zxpl4gwR=}1b7W+!k9|0zFOe%K$Tz2gf3dFHO)W>SOINq;>=O*-PW*Z4n{}AZ>oc-a zzozWhPL7a$a8&ux#|Rhp4zGZWDH$#;M~-jh6zRGhUOrn}Kif2Z-W_ixK{s{|xqkN7 z9ak;qbbCxP>g*3#v{B1nXYyD1P19R$gm=VBF4gL&DA90e;x)OYwIxu4^-*ir>_>B? z_j0)ZuXYx&d;k8kdYx5VkKS@}-Vt=qVSHGEcZdnpkK`{Z4;UB7>|l~{eD(Ji~6^Fh)<_2=tdIi@hqd@a}F zUbfrTyyU;>kHDXQuU{)&oBw9VvK4)OUl=d^es_9ex5}OtuJcP;qZQ_LJ1{>>ng72m zDI?2Urv6XZZ{66lvZvo|zsIRJso+8H65$m~;?Aw9iuzD2SaE>y-50~3rH}fbD2mJ0 zq^5j1)0@5f+Vjg2(+lVCN-5G;xv}MsrOUbVhF+@$4*2&8$lrRp?HIrOeJeY=D3(tL zLZrmguVtPW&}b{K{gCyI*K+E%R}BijW{)nqf8Q}T@Z*(oU+%BW2OS%68UvW zY>5}gB_$uL>uc65cYhT0!HesSzRl;IzUc>ejenhM^8a0*{GY*q)A?p$e#LnP1_sp< z*NBpo#FA92c8tNLD=^C1c7#dj_nOhkeK{Py%j9J3Kz#s{-Aviy+q&%@Gm7%=6TrV>(yEr+q aAXP8FD1G)j8z}|`1_n=8KbLh*2~7aZTJ*XA literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/go-home.png b/Media/Themes/Umami/Icon/actions/go-home.png new file mode 100644 index 0000000000000000000000000000000000000000..1d654650541eace316d850109a8f8ec79e084a20 GIT binary patch literal 1072 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_MxHK?As)w%PWI22c9l3*Z+!FamAsz2 z7LB_)ZaJ;Wa0zW(b-`nAK|{l;6G^ws;+-mHd~GVaf-JsJoj2q<{SKW)-tWePn`2(9XZc2+CTN(oP2kiPJ{5~4fkH}c_aSk zUONqq43YUq+>ip4t*h<#diGHhp$NYg{_ z=~cH>s~cB)vCi~pd9dF%Hs$SJ$(++kPd=sI@{(QUQqp*y>Hbq+;n3BUoX7hTqs6}R z-%J1eMSIVOKZSl*%OZA{_3p{s6sVW{CE$|pf=|mhd)eN+bu{YCjkGac|LJAJ4RJ%{tfmS$Ij%N`pX6RtK%AO11Ch zx`l<$h;;wm{<1gP{*g|NulHpM`TFLC3l(LKznrl)jQe<@gwOJsH6I#|{`|S(s$!ly z@4Gp+*55NKDsC!K~R-N%yqw&LIX3m5O5j-*1SsxVUa&O#xS8;FDTDcn* zfvid!&KU3ntrR(#BGh=~v0zVMU(ovNGiS}Z6~4W~rpB$*p>#9n{Y6KnzI2+JE@59& z@6G?_8V{sPOE)W!<}V^4l9^ALJ(pR|uWF`96HQ(#!hN|I%+*8BWdb zvlsn;{0I9h^)Lr1Q zhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efq}u( L)z4*}Q$iB}eRSDj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/go-jump.png b/Media/Themes/Umami/Icon/actions/go-jump.png new file mode 100644 index 0000000000000000000000000000000000000000..0e677738c6e7cf12c0e4b65af6c9c212d8c475dd GIT binary patch literal 1258 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tKio-U3d9>?EK_0ExYl{o%?^X_lE3Lgbn zb1tpiq8cQ}%ca;W^eBLll|>|IrK^*NAiJJ|V&1|IZgmyC4E+w_RS%k2SU6ccI2t`% zSFf8q?ZOe3M{2&En|aG*?31iN7R$-(+8EZCDlyBOraDbJ`Fn3|Ec>qAyF>eL zH(TxIo_R)Zk~QZVo%PSe>%Km>c$&|!V?p+m|H%h#R6bq%Y}qvP<8tzAtgl?@vf3#q zxvh8h?(l#Gy92uPwrJQ+*rXS;=TEYlh~ctzd%WXUu};ucmfyAd-rvCT`u5~X!yUzy zRc9lZt?wM()jtP4GVN~AMl%m$Q@Lce=0E;V6CC}(d+R3f3WPZOyY2_;0 z7a`Ko!8a==h}~SxP{Ppba_Dq#>AUOaZHoQo_SbY*WO293v`6PU$A3Qj<57EmaMS0< zyWGrIom+5Mo7dpjIq`~X$Gd7Gu4f$h@Nv(>$DYp5FQ0Y(dDX?H^4Gs=|6A7%F&Z43 zpt^A(U5im=v#n!_N<`qCtERKG{V$pR>fE^V)$JQQdi$F9F0E7E z*pl2{%_qRg9~!O1$#A7=B`;I{YpLE4ZxI>!7UhR`+1!Iy>QC)H^fHH`;bB%O7sG}{ z7g&$adD?oK!H&J)+ANvgyv~1*`KP?&)?sgtZGB+zY;K6l%(=y~2b{liK1jcLBK-T)tE@J^qK zLsuUZmE1M`FYrs{dL}!#@EFlFqL6aX52a?)Fi6yBFMg~R(x(1fI24*3K7FNcl zR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O4>2^dGBUR^G=gY&9vQQQfq_91 vWJ7R%T1k0gQ7S`udAVL@UUqSEVnM22eo^}DcQ#TC3=9mOu6{1-oD!M| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ow*PZ!4!kK=Er#%9QbiX5;1es1oYw5wd2 zIadU>25>!FsF9Jee1S$pfQxI=LjR@*$D0*4aYks?Ub@!KChy`jG01hxU6G}(sxw4Z zZCsPF@mN~!mL*qDWtneXyYSe%>vOAXZe$vznV;PE^N}Rq^qH35|D3b@Z_V>3UwcND zYR2V;pD{A|&)D9!dmm-_`%LE0+Kp$7ci#P`cA3jT=6mV#>)+V^UjD9-bDB3QljqU2 z=i76fS5}>MzBzX;!>+4g^J{CWf5*Ny+q=Rf+40z&4Iy_9c3%Hqdf(_k#^J*UuRVFj zTl-zh*Y3oOt-5ccO^z!$J%6O|G?4G8n!kwK⪼9`+prP`TpU?z5HgL=%VIto2M~y z%w2E$U61>g_g|suB}pq!$p{-SUh^_y{k+OW^;iE*w3TQ5D;|IL?Y7-f%naAA{`hp} zgHu)E0+u}j7sV8xe3>6V(eLiD;QqZ6tZKeAzs-73vVO-i^-YWdR^CVBde0tT$fNO8 zKvqf1<;bV%mm-^|ezy7K5dZ3R=g0Owf4S_c7t#!()l(0>@eesHq|}#U@zr@6*W>$Jfo| zI9+$rtMSsRck`U2Tc2ldS-!*a;^DWQy){-ry zo4e1i==&@8nSUSWTNeCydny0^^!S-_g^wL>2L*R9hvZ#Y$1LPvw2w`)Sf-Kpfdk6F7=M-+{+*R z@_^gaD@wK@PnZfGT(Ew6NdM@=_upEbA3b|0w!*DiK>hPCQ)Y_=n^w#g_@Me^_U50D zs(|ULn_~6WeOZ6u9Lg)IsJ}g@IWl_^Q$E?7@t1lvZHt%^E@u|{q zc818O_?z|@{`;5}Pcmg-U|>)!ag8WRNi0dVN-j!GEJ| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_owLPZ!4!kK=Er_-4d}iX5;1e)qSU{Ixny z&x1*^Kd6zrxJxMM3HoZl;R&USzCyPfY3{tr8zvbgbP zp6Qmv-5O$_-hDdDu*Z#g?$YGs+p+Q~yZ_ey=VD0sF1+3(e^>GAg|fe&TF;%^TUsB? zpjkWb&5f&@YA-K7AAfTNn{`~8>t5qk*Dl^$TX+1@wk1NUOxdNMe`+_sxv^<;=G89K zoBp3_7xTX{=bu~Me8`^hh>*kdqW14!?mQ?y_oyHuU2@h7*9V37f9YH{4*qr};Cy`4 z>-Nv?k1n<`vX}2aE^hx#{iG~k_eQqYI@dCLu1YN5x%{nT%#*@TmmhOKUGOF5ov-nQ z3p_nnTXy-ZIPIdQaD{OrXQ!{j5@sb~ftN=2|CP06r_D;2zg>KKRrK|*Tgz9jYh$=| zY|3My&E1z{bbXDC|7#aNwdW}5oWY>%w5DT&Qqr5OzRpLM^Xi_oUgOOz-!tv)H23MU zMh==YQa4oywy(aknElfC31JGgo^Gihrnp2jin1*~bV^Hrqp&*GA?L94q~E@BTEP>S zv&_5Fa4hQh-PN}v=kJ`}e{N31oZ0$v(wU~!ubD2X)$+frUZM8h>O?S;e??B*X5pPX zChco{-2J(jn|+^6*1fg1@!TI)&pxNiF3_;tg>?~25a&5R`Gs4Tw*Jnqo-^~%9P83u z>51Q-e>nR7*IR=Nv!3uY?hsqh(9=9~`)|JW(U&@fF7BHich=^BGNueqTPb#l1IrkNCj8v~C2fIbU~%dFdrRHc6y`+#<=Oc#=F8dE^>tFe z1K#fqd*H9Yd_!d=V@Xg!NI6?3_bEpCdNYCE{{H9Z=5JU(dqQjKq1?BkOJ5oVx;)J; zXZX9kdU3p-zwGW0``-E{J$4B!($fv*zHm}2NHiw@`jL09<=wb#lhxlAFl||x66(P- zrEx*jl}Yu1k3LV{{e801D%s8u_p6R!-5kO%Z>5}`=@ZxHv+`DK)rw_NAM5k#nRR*d zY}gLRs4*}wsFt`!l%ync8R!~V>Kd4Z7+P2vn_3x~X&V?=85m6a zY+;C^AvZrIGp&-r$iUE0*T78I&^*M@$jZpv%Fqa+;dx}t5(WkaNstY}`DrEPiAAXl l<>lpinR(g8$%zH2dih1^v)|cBF)%PNc)I$ztaD0e0sz-3;QRmp literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/go-previous.png b/Media/Themes/Umami/Icon/actions/go-previous.png new file mode 100644 index 0000000000000000000000000000000000000000..90ecc8b397791e29e3ed1c811a076983119527e5 GIT binary patch literal 1135 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovyPZ!4!kK=Er`ewwsO0>=YY5Cm5d}Y!t zuFkbHn%rDgG#z{Ltn8xOS`Xf9|AXE*9q|oc*4e$wKq1dXKx>!5-4NHei=Fe{-szpV_hF`HbS^x4vfU{ya!Mci_zLy8FM+&TRa@*t276 z-V5s$<(vl<_n+mdvF^&;7Pqd|#{7}&j?Cce>Om{sHpHEsca^h8Y4hP%Z*OnQss7t~ z&{$CKiECVr ziMniSJN)`bft%-w%Z8*S|V&~kK@R%l{J46jT^4bxV+ z$5|H7XN4%dbWxHKG!0fXQO$CCSfC+)K%vk>RbbP+)tmXk8z=283GJ5p*DN2kX!*1A z^Q}Ll7+WgCf+Q+pm%UY(2285O{)O9PJ(73i$tLfUW?bnqyF1i)d5cp=L`I!qx zk9sQ~_m|P#`aAl?+bWjxp9AK({1(!mP&#q{Nl~i_9;yWgF4ZVMKc!afVDNLAW!ZD% zrL7-d9R4nM;$7bDdtbMl(64Ko94dG3mr_*r6!pS$iM`53Uj-StFQ+s_^{_GW{xEF1 zEbnfAch2LD!fAj0{;Mv_J9BrRzrU{B@yLqLC$bYGR`P1WPoF9r#YcOzAmGk@UlCv6thZJ+UZ`Q4r!>wawBf3Nh6|IXxXZkDNm5|gJT@0N-A>neOQ zv&((%tNxCML61C{Iy)jg%hm>L4Ap8~Vl`W+V^Yum&p){B{XICvR$TnYz`&qd;u=ws zl30>zm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhX zLqlByGhIXT5JMv?BXcW5BZ!9Qkuggc7#Ji$HU#IVm6RtIr81P4m+NKbWfvzW7NqLs X7p2dBXCuYHz`)??>gTe~DWM4f`6c|1 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/go-top.png b/Media/Themes/Umami/Icon/actions/go-top.png new file mode 100644 index 0000000000000000000000000000000000000000..f350bff66fe5d73f7f4744555961af55249f484c GIT binary patch literal 1125 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ov)PZ!4!kKamj9aZ2^vPAR5CPadBCwQjkVoZOqL2xb}SA6hY9Sx-;dYsqBaJU89< zf9%_T_qJW@b9usatnP2+!zVZR2t|8`v-GpN!%=V zUjAFjSmtkN@8Yn=TY#t{Ca=?U&ZBLZEiDX*foZ+W!nmIdaG1!dH!KdlF4`7a8s41^K^GhyIy?1 zy!T3pMSa_RjK=P_QtI1TaO&QZrGQ! zgF$Kzv$*A=3xXm_F}B_ zuWehyw~HsvYDVBpj|jC#D}Jrt-SbVq(VW{!T_s^U0|SFRdP{kVo554 zk%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn3=MS+%ybRSLkx|q zjLfYJjUXDHN5(8+U|^60*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGn LtDnm{r-UW|| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovpPZ!4!kK=ErcxTKB6**r2+)iz#+D47s zoTVG1qO&=>GS;NHtx;O3k*k}r#4arA)>0Ei*KoZOb-MyZ4X(1shxD2rIqka8los%M znO)b7S(&plJgkzVZyOppsqSC#PjxyFMOx7^nCAU;X!a#qS&czuj-PbJBxq zzFXxE>!PE38SSQOtirJ{IvPGY8vJ#@_TpHetm7d z?QQ1m4SAdG|K8T$9&o_*?1EGv}ZGvthS(di!y= zN1uYE(q7KFEI7w@*Xw=D!`Y&fx75g_%UrAQ^OIdHH2uZtw{IL4pReLCI4jEd>-Wa4 z-zmSZ9p7ygzShv*x3<;Pu8>`+#`>FP?ptk@diVI{AK#sr`}>10vs&Jk{O7xVZ!61x z_0it1rct!JeBLx4w)uuD)+X=y^!0|p>+87%+w=CUw%&b7E^8IrPDk?{Puu1_mpk?T zWZnPQ&s~BJTOG6zSRV4o=!Qf#t53qGPa1n?%a=XZpR<4E-)-E9dj$6RygvIoV=r^r z@n5F1?P|)Ne~x@^|GEaRiV#48%U;xqg7&$4O1*;UEG+r_rxS~idT&j;s&D*tp& zy#AwFhKLC^HsBjb6ew`$gOACz!l2|XI6xGFpQ;nj?j(>CX8|@QYN%wLAJdXW3r=5nzE?V4CNA)L&hg>%vc@GuvxQ^ zeM;NCimaL%d_CgqTw>^b{ot}A(xsf5 z9&?&r>^b#E`kQ!|1h3-4y2DQx7#LJbTq8sH%t8z; ztc*>q49&C+46F1kvz3GG++_ z1A`>UhT#0PlJdl&REF~Ma=pyF?Be9af>gcyqV(DCY@`?%7#KWV{an^LB{Ts5v6$4& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gohome.png b/Media/Themes/Umami/Icon/actions/gohome.png new file mode 100644 index 0000000000000000000000000000000000000000..1d654650541eace316d850109a8f8ec79e084a20 GIT binary patch literal 1072 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_MxHK?As)w%PWI22c9l3*Z+!FamAsz2 z7LB_)ZaJ;Wa0zW(b-`nAK|{l;6G^ws;+-mHd~GVaf-JsJoj2q<{SKW)-tWePn`2(9XZc2+CTN(oP2kiPJ{5~4fkH}c_aSk zUONqq43YUq+>ip4t*h<#diGHhp$NYg{_ z=~cH>s~cB)vCi~pd9dF%Hs$SJ$(++kPd=sI@{(QUQqp*y>Hbq+;n3BUoX7hTqs6}R z-%J1eMSIVOKZSl*%OZA{_3p{s6sVW{CE$|pf=|mhd)eN+bu{YCjkGac|LJAJ4RJ%{tfmS$Ij%N`pX6RtK%AO11Ch zx`l<$h;;wm{<1gP{*g|NulHpM`TFLC3l(LKznrl)jQe<@gwOJsH6I#|{`|S(s$!ly z@4Gp+*55NKDsC!K~R-N%yqw&LIX3m5O5j-*1SsxVUa&O#xS8;FDTDcn* zfvid!&KU3ntrR(#BGh=~v0zVMU(ovNGiS}Z6~4W~rpB$*p>#9n{Y6KnzI2+JE@59& z@6G?_8V{sPOE)W!<}V^4l9^ALJ(pR|uWF`96HQ(#!hN|I%+*8BWdb zvlsn;{0I9h^)Lr1Q zhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efq}u( L)z4*}Q$iB}eRSDj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-add.png b/Media/Themes/Umami/Icon/actions/gtk-add.png new file mode 100644 index 0000000000000000000000000000000000000000..54f958c454c82562456ae6cb36327871ed06acbe GIT binary patch literal 506 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UssnsNTp5snN$L`l)FpXyF6Ga?R5%*nDf!mRnP{-JZJr_WXShmK=Pv^x&gaM;>oF^>p*;r<>0_-E!vX*3-|oo_V_U z%(Ja$o^LzzY}?sq+s{4Qec}1;i_iC5e7^7U%LA8RTz>HW|NsAHD>t2FU|?V^3GxeO zU}R!Gb6`!zBL)Tr#w2fd7md9ewr*lzV94}zaSYKopPV2e)6hC~D(h;N)jcBGS5;IZ zH{Rf82@*=+y2-jG>y(z(DxpVSU0j@#wU}&go jV5Vzm9%5)@Wn^w;Xav#lJThhpD9Als{an^LB{Ts51AWH* literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-bold.png b/Media/Themes/Umami/Icon/actions/gtk-bold.png new file mode 100644 index 0000000000000000000000000000000000000000..87bfdb2c7ca50dcd52f718f6bc29454679204007 GIT binary patch literal 1109 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ov$PZ!4!kK=Er_-Dkp${gQs{Qm7b@3PBp z_NPtWG2z-W(PZDVGXXdR{xU}j*_m^ui zf0%{3rnaQ{-q>|>Pwo1W$b;iF#d<(;Xi55jO+IqA29xV zU1_(fyV|}^Z5C~(j(2Y@y)s+9dGyZgjlYr0SGrxLbxxJ7=>p$<)hsOxL3TOfLO*^z zn^gAs`czGZ`TtkT_ME#H^xEy-pI3*4FE*Xskagul_&$~2kM6465_PCQ(q9~2ziG?8 zeMkPh;avY$>Gp|hUpF$J^jM&Nr?cm!!s_WCZoikDWPIwvTB|p^T>MQ$Hk8)pd=Ji8 z+~Aacukvd^!O;~9&#_E1UdH=ixBcd2XKfmhqO`D6x@>0kHXIcIZsw&msADxn_cjTtHoCtj+v_4vf}aX*}EV>f3>xsj+vDcj?^i4M7O zObjc|dh>UQ6-x7*nf!v!T~zbP$%&n(KdRq$oa`rSzpFpO%z0mkd)e6s6CNEqbSH(8 zLF}0tw@a7wvY!pc{tgX`j726b@?8FpbHmYPix+QRWqTpL?#n^xi*t@Hh%VL9)3t7O zGTc%7U|zwIm%euLPht+0nol^tY;D0ck2B}b=WTp5tv&2bfA8Ddx8Je{Zp;f6{IXi2 z{`J%a&w>R$XkPduGArKk_+gHJA3j_C+mX)P#TNSYch}#Ih78wlGljIC;o*PFue<*G zg%qK@#hjb(Fo+AyoA4l}iMzpmop;Bz*LDuveDh;l}BgU+(s@s@-1t zyG8P4^mPUm29329DO{Wl&&BKi?E8My+`iN+&3$#O;uOB^zfQ{P-Fmj}?Z%szih?`b zC+BL-e_6j|KjX~Zg;CwhS12$rFsPQeMwFx^mZVxG7o{eaq%s&87#ZjqSn3*>g&0~` z8Jk)enrRytSQ!{h`)px|q9HdwB{Qv(!N|bSP}jgr*U&t~(8$Wj+{(}hqTzXD%n}9$ y21$?&!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NHH)lFnGH9xvX{-7;?>@a*Y_~cxZRI)n=*jBwRr@~Mov*Gum)ZJbzx{h|!^Rme*!6A9 zE9VKg7q{*>zx)w*O?m(M^BP8vDo@z|(b7Em*shRi-X^08zxi#;w}{M}B&4z2&(X3@ zro5;)aN*Ue9p5k4s~$STbzWU<)swrwzc0=`E45{9RO_~>+KKV|WWFu+PK@5dVQ!v( zY_78V2iKA?8}kN=@vh{tw1p^ z?^ergOUo4)ow+mlzTKAG8w{7XWXB%sXfoSXaUog)11abF2>}@v7{FV7@zb?J&k^# zr#*o$aPFZn4@G0`i8srQlGTmhm0HM6Dn9F>9-CY}OGxN~MLOS^&FRS++T4{-KIsMo zEZF5Nn)q^)lxCRsLbs}Y>(}!)H#cW2J-kZw=bxV$N#APCV{RcKC zZ`hdfvhemKRjo53E0@jQwLbp1L%n@oV8R5^D;rCBi}Z}s9xTti93U^)s2vz6kSsF`rwa)xrQnDcLecY8vADj{t)?GN(b-H!8pZdP13HlW$S0C$l z&#&5*&zN~x@!R=jR~H$Yh%B2R5OP{LI*!kFZgJry6$!}*=NKMtXWQ>qda+KbuJseL zTNTL7%)(aoYjr$589*VF2!KtX!nWCiZ+mU}y_>uXe@8zvO zntyzj-R5fdw0!5kO#)}{{5G5DxuoJT^PkS14_v+~N*ydpQ!834dMlbwC|%myV)S`> z2dB%0`hVM>=x1383afB!eayhXpjzS@QIe8al4_M)l$uzQ%3x$*WT0zcscT>sVrXGy zY-(j_rfpzgWneJvvxOmwhTQy=%(O}dBLhQ2T>~>+L-PmdKI;Vst0Ch5E1ONa4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-clear.png b/Media/Themes/Umami/Icon/actions/gtk-clear.png new file mode 100644 index 0000000000000000000000000000000000000000..fa8cadb5726aacd5c9d48ee4062c1cd72e5d0145 GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq z7(Bq(?PRtc0|NtFlDE4H!+#K5uy^@n1_l-{2y8+#oC_ezDUhZJCbBuC;3#4!=B>!aTh|WSL(|+GHOEzePp8 zr*;;`FO|_Q2}zi;J2rE_-TRuy@@ZV$FJ{;Lubg-P{r8`-@10Nl|5z(`IA@Vnk>0fR zXKty_uopi)=T3k_n9k>uPxG;$LUD2g8Uwl$IQf=$}Y~zGG+jFPi-q(3}?V-Cr z6uny}ZRVRHE&RA@;`^9?g+f~eZ;MRbdp~96k0rXNKF1iY?Kr;3i1TaUJq_VcVW%Y3 zs$(0RI6vxGIKB(1dzmBizJ@dTYU7Gew|lDCr8Qz=3w;kZl-lMBmTnpT}Yuj8fK)27!oqv^~) zQ3YSsu7lIA8(eu(D!*Wb`QeDwcWV#Kxx>zV*m}Xsn{0cHMA$+lc!Vcj@L%p|`+@P3 zYEM}x!&#-x3w3T7T-!LAN#aX5_kx^TK8*Kfy!_hsu8c#>eUZV{Ubc<|YXFD5t zWjb5-%MVLeZ|g`C`15tS*ypUDi6>s`TnInvPkpo*%9WZ+mM+d(UijtO=K8R}RL0cB%xR+528EZ!KmTns zxMSOwS!wiY{g3;TmvQYfn%wa?t8wkhIV<;kd#hwP-EMR2Jc$bauKRNg?!0LH7r(~f z=1bT46U+^is-$EDJ z>$!KUto7HhUYYUXu`?Zt`$rxoHD~M z#>=R_x;Fn%&#HNQXGm4ab49Xb?fV*WQq;J(`p}8vSMtQOPyg)LA@To5+{V{OzkM{+ z+V*6DLi{JMbu-Lwhl*$JiQIWNV#c}a^Q_MNzIk)r9-sH~lXESiuN`me+CQzn_hG`C z!_$~2sx;*tw^_UFSAt3Bvh;T$dLiFpo*rWV`q%#dKZfM0fJHg6>)aR^7*tDKBT7;d zOH!?pi&7IyQW=a4j0|)QEOiacLJTdej7_Z!&9n^+tPBjMeYP+}(U6;;l9^V?U}Ruu zsB2)RYiJ%~Xk=w%Ze?f)(Qs{}nO>_%)r1c48n{Iv*t)JFfi46x;Tb-9N!x1>n|KAV*7pX%xxtX z-~Hm|GJgEupzX!6sh!@}brd+*9^GQuuwasgp~||uJ4#cXIHm}2IvsLfn;pZz?R})= z*RAqcp3k>3z0+sCxP2z&*`4BdJD;bq{W#ywu;5G9OTp~7e6cz%sZ~YK9xL>)GOW5- zFz@Uc{=0Wyo1gZRImX1G$iWb>`mdMIywgt|T{c>1^Bp*ICBr1;y77{rOao(n-GH_K zIwriAe`C9E-@jOv3yy9ITrF{W`d?=23SNBva^+2STc+gX#n0}2uid%v=TeK`C4Dn2 z>*R9Fri6(dPnKP=?2zyClG0G`Q~fb|^4AgCxH;3X7Qo+&6_;w4bLkDAFW_$?wDl3VU&=jarI5%1A*t%U*{ z4Ey4bzq`JP(Yh~r*V{4&m4rwkFU^d#)vQr#!;a_`mpq*zsjmJ|%(d`lj@Zu{IfeiY z5uR}Q#t9~Gx|EpujKvh$B%C}vG#74d6FB6vSo=vrvYVURnH3!z+j7fWy%e(Ydvk9q z2qmONOiOjrd!HjI$j$I3Cg2|Qs-^B%wr?Uz`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? cBXcW5Lx_fJ8{I4!7#J8lUHx3vIVCg!0A^KZu>b%7 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-cut.png b/Media/Themes/Umami/Icon/actions/gtk-cut.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf70b470b0eb97598c75e6d7c826bf0983de7aa GIT binary patch literal 1272 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc zkWm0(#(8si!ZL-0WzM`=Yk7Fqv9hj<2<_-<-ORx; zdFq69LV_J#tqV9f=5uf?S+)pdK0EswHnz3w>?_&W`X~0Rh&B zTD@ZO)Cmg~&RxsOI$=`ZW)6<6oSf@9I5u-~Ze(ZQ#L0O?P!QsziIe-MOqe_wL=lfB*i2dk-GmfAHYJLq)}h z4<9~KQhN00(PL%h$B!R9e*E~ks_KguFJ8TR`TF(i_nMmj|NnPj{OrWQz>r=Nmf5sqq0Z70eU-wcPo8mT7_YKF zE~EI+E;V(c)Qr@qeap@>D++E)e7eU%z*(XA>!p_yIXIvHC_TM;Z3EBrYp&X#rwRx$ zb$Uj=-z{w-p|EfiJzYvo!a$E@Mq80 zV)dzJXQKo<-?_eSaowyX_3WAFVsDNkdh;yTF1sgc9I}Ng%r9H#piqp|&QhMzol+T# zn$#YyG`@BER{D~**&Irp+P{2eY|e@FiafO`wOH+k#-XFBHtFnaUrREjGt0lSu%7!i zrO|W7+P4N*=EST#pb%~ud3i(fT1lTng~?mi{O8K|D>Hj9`ft-k>A4b$k9_u>PP!Gw z`ht_2^X0F#S>2J(P9J2Nl$3HYbLOq+Y(-T~Mb*^E+tyo;HnjJ0E@__Wd-PaXq>E2T zNK8z~)q8$(xfe07Xzy&DI(c?`dwc)<>D`m3&YZ~^e~OX8N;e^^Wrn6E0|SFRdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn m3=MS+%ybRSLkx|qjLfYJ4Ivt?ZFI8)l^&k1elF{r5}E)*C>8Ml literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-delete.png b/Media/Themes/Umami/Icon/actions/gtk-delete.png new file mode 100644 index 0000000000000000000000000000000000000000..7768ad96c11cee831a071ec4bb3befb966f5aa51 GIT binary patch literal 1389 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?3oVGw3ym^DX&fq^B&)5S5wz;4Xi< z^lnQK%aPnkx{J;@L~Pp0pLHd3j@x2+lP8)5)tB)GSlPO0v4^-O_z#VyFM}1&}mxn6cx_p z=jT*09;jk`Uwix>^M!pphAKjwN0K&{9=RDYNhQFmc*CMaN+~-w>2LKfk+++)cER7b z;rvM!E1YD13$0p}R8>{wT*M&2!q_5kBWIgvk0D!V=*JVu{tOJetoCKI7pN?Eovg^a z(m`fp1W%*GgZOBcgr!^zAAZ)%nA3TBq+a1=0Dm%ZODx6L>AfBO0dpQPpUbvEQL|Fr)EW5e7(OdPAExp~${?Fdv$tGfLA zU}y1K^GP$Bzca7)`}C2&|I=}PyUJWUp~87Tzm#OXzgNBV;KBHdSGLUl^|x;C)~#2K zN?w*Hrythy{(rP?@5gg)nHd=xS1(*h;B0?> z*tK4op3<4gj+%wK#~ycY{A9HKq(r#wJl$oPn>-3P=5$RGDV|;_wxz{P`?S#+li9_) z@7{U1!Cl7n9P4UR{q*xs&p3#v6hC;rPhKSQW_)yTcjrlmRf`^piS?e#F4{P!=Xhvz zWu;_vR8-Q_r>QLg0{K(JHFR~C1|Q^9J8iT%GB?QYl4YXr%qj_ zq35M3x!s!Ua?!>$mT&wnKQ274-PLVyZpP(@Cfrd$eqdyO8g{UYV+w_Kv{44-C~_Wjpi^{iyd6a^&qCl`E}t}E8fvU~3ZnY~t7)*n7B z4qf;%;NzP&J^NNVIC;0I20oIVo4$DE7Q1z;HfE$>x7=#5e?y_2k+~y>XU*@w=3l<$ ze!a0TS$dLZEdTjdXW>Re9-c3c7qau~97!@fzs#7yebu&o-;#nZHzhBA%+GR+Ic@3s zN5z36mHF}S|IR5ci>|$^dG6=#76FkPpY?zIt}Yjxa9^i#+L!S7`TKV-UAmRu;d2{P z&rG(_d6Y2%#g4(D&XnovS6>BcjH2W!h@%;S1+wy z%;m!H;rs8;*;!e$UGH`+nHTfVf>EJGz>AZE(Sm(iEz>zmjimxCf~?nSGQ6eU{#>a( z^Whez3!9l(7hX8?o8eyOuGN}O9628=WZDuNiuoJ`c4QXKI1?i$vrwR=p2a1w<>;jL zgaR!qW9z#Ty>9233z%n|kmHhOIR82KyzHuV-}cTho_1z`!du()?}D3(S`QcBl})$q z_w{96&%lw+%E7?Rz}jH^_%e?lgTWdT9+k(%3~6d&M*BDwI3Gwc@HRBg&aG!YEq1x< z@0r>r1_lQH64!_l=ltB<)Vvag%oK&3{Pg^`W92&;7#LJRQYncgsaDBFsfi`23`Pb< z2D%28x&~$;h89-FrdEb#+6D$z1_skUTNt8f$jwj5OsixtGB7mMH89gPG!HQ}vNAHa YGBku}xVF*F5>)hgy85}Sb4q9e0MXM-@Bjb+ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-find-and-replace.png b/Media/Themes/Umami/Icon/actions/gtk-find-and-replace.png new file mode 100644 index 0000000000000000000000000000000000000000..2644f6b6384caa62040fff2ba6c8025530e80d3a GIT binary patch literal 1244 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfr0s+r;B5V$ML&UqJ3gqB^vh6ERMXfRe{NL zt(%6Dh|}y9S27+ohj?V&VxRp(!BF#-`=zdk6clmG7>97ww<$jO}5;if<>UnHd^bD3sal zYM)UsIY=n__|9*SS#Msub?7j^srV(!hqcdF_U27c_fQe4N+@u+V){POD8#2YmR0Zc zk@DouOUL%sm|8R(f1LPw+S=9kr%ai`By!Iu<@%>f3q&?8ds(=yJ?2gQnptht@0YB) zbhdBRZVyR0v-dZ=|KI#~^>5Vrvop5GX65e=xfvmrcj2gL$lcgOUN(*vMco-X2j@4s z_Js7dZdt<)yszL7I-^OEvzj zWrE@B^_c_W7nW!vkX?(X-R4` z7VTNlq440lKf|oHHaCVI?e&tYKb&-(R`a~)ow3&%!8=`UJHK5vzq38t-rI2UB_-*@ zMx1R*BGoFNm7m|dyJ_~@+ph(k7HnPi-Ewl@y~JhvUq60zBi==AzY6#H)dv@fTdU8S zRTi}QZCzf>&pEqv^OiB0OU{gQ(>(j*jlJ5bQkP&~EFIM>lSkKCEnVNa%A&=$pQ4 z7ia6VmFw3>v!)C@!(BTgK+zzfZ4k&z~-j z)k`J?S-n*kuuR{iqs?qzH}hn-y5wxWO%`Q+>n>~NnSTmeveixV>6ah&%f+1*OiAl< z|52IIA#Ln9t>(GqhdPF(B3_zv_W9orV|Y7umfXX~?q*CxODYI{>7b#!zRZkq*p zJ^E0b5tAYK-6Pt32jU`+w zWdnFPtSbAhHvTeidb8`{nKVBgS%?)Fi6yBFMg~R(x(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OP jFw-?O4>2^dGBUR^G=yllw$aTJRML35`njxgN@xNA`eiEl literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-find.png b/Media/Themes/Umami/Icon/actions/gtk-find.png new file mode 100644 index 0000000000000000000000000000000000000000..3f3faf3aa094fe54c7f84894591a1cb73b93aa5b GIT binary patch literal 1254 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_FFaiwLp+XOotm8^5-M`M-q?C`zuw!R zH$esgQqjA;y)JTeJiIB;x}~FEptO1Ano!t5V|DW@Z`TpGZ^(@;~ zx94e2d3m^^!sK8P)+JMTdhYuKh@^i1l$vi-8NRKH|2miEQW2*+pC<;LDxE4?rsb16 zL7(xc!Mc0JoSQb)tenEQfbY_*u-f0J%iJ#q#b#t>?b5C=urRZ2N?|>i@S!hWcj=#e zF2DJ9wcbT90y@0UiVHd^EOEGOvdn+}&-Wrdvem(LpO>a>dw=8HqSkH={n_q!Hf>b3 zkmb7Gb9GQ ze>|L&>ODPpYvJGXtFNz_wd2v-smI@WIw}Y_cvY02)ta{Fi`ISlyr=6U#LiFed-N|+ zPRQxPm85|3MN>00&S-nb1+O*>Gh>)}az*rXd&JybWTJ$PJn4P~>!q%#v zTUJVZm(8AtS;q_JOK*R7KI$7^R=Et`5^i_j6_rh7YltGBd2Sm6_sHe)nz1xHQY7-O0WGki`B~B_%P2?mZHf5BgMJDZdB~Hd@!x-0pm4 z?gZ~>{TZB%Q@ETwlBW4Oc`S-Gyz`Igl-#$~^WXls(&1+PeVI}KLyVrdrKRPMzjbo6 zZCX844*d*vpAkIg=*4cf-_rU@BJ9_FJm0QQzj67-u|Gn+zijPK7*_tgw=Vncdi(7O z|4uM2xSkuEdbE67uDx-^%c!U*4IPc7cbmC?zWmNHech2x@2Tv6t&E#)=G@#6Wn=n2 z^XrL?$|YrG9ES~V&D~Xe?wRk^8hfWtVQF#|wLDz($a!=7%gJhf zpPoH`p8n=f(ewGw_5VD4V^nqRS>K0zO?~a>M^3t>`OMbbcjM>IU6sLGi*_6OGO&Fx zFW|F?+`sRkESPYtUyv)8!1`C)#)Zta@;9~f6T&(qY=saU>jS=#CimFvsGbvJvZ zKm7bN@4>R~?Jr-?yjAb-d1wMdx43@Y!O0JAU6YUAP#Ik6JL|{G+x8LCAB!4VwCfod z7*tDKBT7;dOH!?pi&7IyQW=a4j0|)QEOiacLJTdej7_Z!&9n^+tPBjMeYP+}(U6;; ul9^V?U}RuusB2)RYiJ%~Xk=w%Ze?f)(Qs{}n| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXb3I)gLp+XOo#N{e5-4)K{`r|HK2cW8 ziVxk{yf~azE9hM6Rj6%r&0Qp>%d=^Nn5Tell*D5mU2Y++D3;cQZo9LKGJ-FLO>z)? z+imn&Sv6he`PPc>dn=94Jz?4Q;y~^5d*$zc|37c}y;5@hTg<4OJoMhc+wxP>7JYIQ`Lf3)?Z4Ost-4E+W1V1?be)1mxNbwktzK0PCM`AY z)Z$9cgNv@pWUX-%2-$G?jKTjPrlTAzqAON&-CV=BGgU99m1gfmyw%vQfsCTi=WTALq+CCHosqU_q|DJ$xQ2lkR)cFK3~NpdJ=)##gFYf zd#gA!d|#!&jrPzf@7Ui<%%7G1%RQE$RgC}r1LV~1t?Ng=o-H8U@@h>Od) zC^fMpHASI3vm`?yBqLS9-P1Qr1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0e Pfq}u()z4*}Q$iB}3HOk8 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-go-back-ltr.png b/Media/Themes/Umami/Icon/actions/gtk-go-back-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..90ecc8b397791e29e3ed1c811a076983119527e5 GIT binary patch literal 1135 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovyPZ!4!kK=Er`ewwsO0>=YY5Cm5d}Y!t zuFkbHn%rDgG#z{Ltn8xOS`Xf9|AXE*9q|oc*4e$wKq1dXKx>!5-4NHei=Fe{-szpV_hF`HbS^x4vfU{ya!Mci_zLy8FM+&TRa@*t276 z-V5s$<(vl<_n+mdvF^&;7Pqd|#{7}&j?Cce>Om{sHpHEsca^h8Y4hP%Z*OnQss7t~ z&{$CKiECVr ziMniSJN)`bft%-w%Z8*S|V&~kK@R%l{J46jT^4bxV+ z$5|H7XN4%dbWxHKG!0fXQO$CCSfC+)K%vk>RbbP+)tmXk8z=283GJ5p*DN2kX!*1A z^Q}Ll7+WgCf+Q+pm%UY(2285O{)O9PJ(73i$tLfUW?bnqyF1i)d5cp=L`I!qx zk9sQ~_m|P#`aAl?+bWjxp9AK({1(!mP&#q{Nl~i_9;yWgF4ZVMKc!afVDNLAW!ZD% zrL7-d9R4nM;$7bDdtbMl(64Ko94dG3mr_*r6!pS$iM`53Uj-StFQ+s_^{_GW{xEF1 zEbnfAch2LD!fAj0{;Mv_J9BrRzrU{B@yLqLC$bYGR`P1WPoF9r#YcOzAmGk@UlCv6thZJ+UZ`Q4r!>wawBf3Nh6|IXxXZkDNm5|gJT@0N-A>neOQ zv&((%tNxCML61C{Iy)jg%hm>L4Ap8~Vl`W+V^Yum&p){B{XICvR$TnYz`&qd;u=ws zl30>zm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhX zLqlByGhIXT5JMv?BXcW5BZ!9Qkuggc7#Ji$HU#IVm6RtIr81P4m+NKbWfvzW7NqLs X7p2dBXCuYHz`)??>gTe~DWM4f`6c|1 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-go-back-rtl.png b/Media/Themes/Umami/Icon/actions/gtk-go-back-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..c26fe61e751a7e45a068cdaf5acb23914578d810 GIT binary patch literal 1100 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_owLPZ!4!kK=Er_-4d}iX5;1e)qSU{Ixny z&x1*^Kd6zrxJxMM3HoZl;R&USzCyPfY3{tr8zvbgbP zp6Qmv-5O$_-hDdDu*Z#g?$YGs+p+Q~yZ_ey=VD0sF1+3(e^>GAg|fe&TF;%^TUsB? zpjkWb&5f&@YA-K7AAfTNn{`~8>t5qk*Dl^$TX+1@wk1NUOxdNMe`+_sxv^<;=G89K zoBp3_7xTX{=bu~Me8`^hh>*kdqW14!?mQ?y_oyHuU2@h7*9V37f9YH{4*qr};Cy`4 z>-Nv?k1n<`vX}2aE^hx#{iG~k_eQqYI@dCLu1YN5x%{nT%#*@TmmhOKUGOF5ov-nQ z3p_nnTXy-ZIPIdQaD{OrXQ!{j5@sb~ftN=2|CP06r_D;2zg>KKRrK|*Tgz9jYh$=| zY|3My&E1z{bbXDC|7#aNwdW}5oWY>%w5DT&Qqr5OzRpLM^Xi_oUgOOz-!tv)H23MU zMh==YQa4oywy(aknElfC31JGgo^Gihrnp2jin1*~bV^Hrqp&*GA?L94q~E@BTEP>S zv&_5Fa4hQh-PN}v=kJ`}e{N31oZ0$v(wU~!ubD2X)$+frUZM8h>O?S;e??B*X5pPX zChco{-2J(jn|+^6*1fg1@!TI)&pxNiF3_;tg>?~25a&5R`Gs4Tw*Jnqo-^~%9P83u z>51Q-e>nR7*IR=Nv!3uY?hsqh(9=9~`)|JW(U&@fF7BHich=^BGNueqTPb#l1IrkNCj8v~C2fIbU~%dFdrRHc6y`+#<=Oc#=F8dE^>tFe z1K#fqd*H9Yd_!d=V@Xg!NI6?3_bEpCdNYCE{{H9Z=5JU(dqQjKq1?BkOJ5oVx;)J; zXZX9kdU3p-zwGW0``-E{J$4B!($fv*zHm}2NHiw@`jL09<=wb#lhxlAFl||x66(P- zrEx*jl}Yu1k3LV{{e801D%s8u_p6R!-5kO%Z>5}`=@ZxHv+`DK)rw_NAM5k#nRR*d zY}gLRs4*}wsFt`!l%ync8R!~V>Kd4Z7+P2vn_3x~X&V?=85m6a zY+;C^AvZrIGp&-r$iUE0*T78I&^*M@$jZpv%Fqa+;dx}t5(WkaNstY}`DrEPiAAXl l<>lpinR(g8$%zH2dih1^v)|cBF)%PNc)I$ztaD0e0sz-3;QRmp literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-go-down.png b/Media/Themes/Umami/Icon/actions/gtk-go-down.png new file mode 100644 index 0000000000000000000000000000000000000000..43e99e1245cce419954698e0945a2ab263f72bca GIT binary patch literal 1072 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-go-forward-rtl.png b/Media/Themes/Umami/Icon/actions/gtk-go-forward-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..90ecc8b397791e29e3ed1c811a076983119527e5 GIT binary patch literal 1135 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovyPZ!4!kK=Er`ewwsO0>=YY5Cm5d}Y!t zuFkbHn%rDgG#z{Ltn8xOS`Xf9|AXE*9q|oc*4e$wKq1dXKx>!5-4NHei=Fe{-szpV_hF`HbS^x4vfU{ya!Mci_zLy8FM+&TRa@*t276 z-V5s$<(vl<_n+mdvF^&;7Pqd|#{7}&j?Cce>Om{sHpHEsca^h8Y4hP%Z*OnQss7t~ z&{$CKiECVr ziMniSJN)`bft%-w%Z8*S|V&~kK@R%l{J46jT^4bxV+ z$5|H7XN4%dbWxHKG!0fXQO$CCSfC+)K%vk>RbbP+)tmXk8z=283GJ5p*DN2kX!*1A z^Q}Ll7+WgCf+Q+pm%UY(2285O{)O9PJ(73i$tLfUW?bnqyF1i)d5cp=L`I!qx zk9sQ~_m|P#`aAl?+bWjxp9AK({1(!mP&#q{Nl~i_9;yWgF4ZVMKc!afVDNLAW!ZD% zrL7-d9R4nM;$7bDdtbMl(64Ko94dG3mr_*r6!pS$iM`53Uj-StFQ+s_^{_GW{xEF1 zEbnfAch2LD!fAj0{;Mv_J9BrRzrU{B@yLqLC$bYGR`P1WPoF9r#YcOzAmGk@UlCv6thZJ+UZ`Q4r!>wawBf3Nh6|IXxXZkDNm5|gJT@0N-A>neOQ zv&((%tNxCML61C{Iy)jg%hm>L4Ap8~Vl`W+V^Yum&p){B{XICvR$TnYz`&qd;u=ws zl30>zm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhX zLqlByGhIXT5JMv?BXcW5BZ!9Qkuggc7#Ji$HU#IVm6RtIr81P4m+NKbWfvzW7NqLs X7p2dBXCuYHz`)??>gTe~DWM4f`6c|1 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-go-up.png b/Media/Themes/Umami/Icon/actions/gtk-go-up.png new file mode 100644 index 0000000000000000000000000000000000000000..dc7c2166d39657f634cd86a3a84adf5beae9b633 GIT binary patch literal 1063 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovpPZ!4!kK=ErcxTKB6**r2+)iz#+D47s zoTVG1qO&=>GS;NHtx;O3k*k}r#4arA)>0Ei*KoZOb-MyZ4X(1shxD2rIqka8los%M znO)b7S(&plJgkzVZyOppsqSC#PjxyFMOx7^nCAU;X!a#qS&czuj-PbJBxq zzFXxE>!PE38SSQOtirJ{IvPGY8vJ#@_TpHetm7d z?QQ1m4SAdG|K8T$9&o_*?1EGv}ZGvthS(di!y= zN1uYE(q7KFEI7w@*Xw=D!`Y&fx75g_%UrAQ^OIdHH2uZtw{IL4pReLCI4jEd>-Wa4 z-zmSZ9p7ygzShv*x3<;Pu8>`+#`>FP?ptk@diVI{AK#sr`}>10vs&Jk{O7xVZ!61x z_0it1rct!JeBLx4w)uuD)+X=y^!0|p>+87%+w=CUw%&b7E^8IrPDk?{Puu1_mpk?T zWZnPQ&s~BJTOG6zSRV4o=!Qf#t53qGPa1n?%a=XZpR<4E-)-E9dj$6RygvIoV=r^r z@n5F1?P|)Ne~x@^|GEaRiV#48%U;xqg7&$4O1*;UEG+r_rxS~idT&j;s&D*tp& zy#AwFhKLC^HsBjb6ew`$gOACz!l2|XI6xGFpQ;nj?j(>CX8|@QYN%wLAJdXW3r=5nzE?V4CNA)L&hg>%vc@GuvxQ^ zeM;NCimaL%d_CgqTw>^b{ot}A(xsf5 z9&?&r>^b#E`kQ!|1h3-4y2DQx7#LJbTq8sH%t8z; ztc*>q49&C+46F1kvz3GG++_ z1A`>UhT#0PlJdl&REF~Ma=pyF?Be9af>gcyqV(DCY@`?%7#KWV{an^LB{Ts5v6$4& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-goto-bottom.png b/Media/Themes/Umami/Icon/actions/gtk-goto-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..ecea1ee672ad6e5b4b07e8b0e716840f20eb5dd2 GIT binary patch literal 1111 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc zVDJEAx0Bg+3=E8S1AIbU85kI>idh&?fmJaJ99fsLSe3BYl(E>9vsjmckW~qbbqR=J zT?Ue}ui&z;Bdk+BZlaEL8B4|ttD@z0#jET}mb=uf41yY4 z!qT}XYU1v6t6~9=S;7%EPcVE1SHw!Lh*exsYq+BqN<^;^j9$+Z zvq&mtJx}af{@4vXu^V~fHu1!5=8fMdl(1GJaXVkqQstzbe96mHl6Uc^EK^NgrIfl? zAbo{a`a!{rLxPzrbuw4#W*!#ITBVnBLO6GgQT|$!{0)W$Yt0Ie%N1=gF4eaj>sQHXd z_bLC0XTv9*51(=}Y37N%IVTF{p3R+mwqV||@`X3E7oDtKe5!8o>AJ<2$`;?rS#r8= z$?5tfryG`>satZkZt2;&rRVCFo~vJWqjdR&`sEkvSAbB%ic1YEuQaT@Rk7+^$Es_M ztFJY#zTUXzV#k^rjcaZ;t-aZ__Eyu{M-}TX^lrQ~Y0H&qJFd;yePhAi8;keeT(s}j zlKr=q?!UF{;O!Ov|NmcjF!%`r1A|sckY6wZBNH~S4{nOq450nrYlf2zs=FQ)4>DfvZhS zfhL@5Z(d&RJJ)FE<|yviB)_Vhj{V)PqGg=sIzpR+lbmZ}eY_1-(o~PJ{Irl<;K9Kl zt88zqXmjDR)9w(t6M_w11t-tVu+FZEaoMnYUS6zkIvgeQ1-pq+%)6BM+P1||uPY*}*jaF0cw{K`}#O^PjwV_;hZh z!nwv*F@Bw&H1;<<;q&zS67XbN9#8K)mBYP~`}TAl74@poaB5nmuwdD|xr^7arEwi> zTD)Y*rhQBI?yi5-vTxqHZ_}!D(>7RihppVUt#9AL&YfF(x9;p*ShrS8I-<>UwFpO+ z)T~*zZ$-_XEtTc9HR9qT(eN*e7#ONv`|vD{{v61_z@S><8c~vxSdwa$T$GwvlFDFY zU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_LnA9A zb1Oq5h=%8pF-sU27$iY91m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BL&LIp00i_ I>zopr0QEP^t^fc4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-goto-first-ltr.png b/Media/Themes/Umami/Icon/actions/gtk-goto-first-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..1822571ee05a1649593d5f07a36501ff2040600e GIT binary patch literal 1140 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tIpPZ!4!kK=Er#CC*+iX5;1{di7wdeI8D zRJD~oZqAcDJeqbI_ckr6?QvWduJz)ylF_MlYsWBt!6`w)F8W~|fp1Yq$QdKKwuIu!zIL zo4#wEy&S)H-kMde35)_!^X~kq`5N4^{rlSp3+@e08y~-7 z%{~9;-}CdlUrQEjwwJHlUwrL=(@8VUvyHQ-Z^^Iz^X_eFW63Y`#ct-zpl|RE0i4^R+iGS!gE9$ldC{s(4R*&zBeP_Jm0-HQ{nyB_3Dt{NOa5V>v9V9!LH@ zxpl4gwR=}1b7W+!k9|0zFOe%K$Tz2gf3dFHO)W>SOINq;>=O*-PW*Z4n{}AZ>oc-a zzozWhPL7a$a8&ux#|Rhp4zGZWDH$#;M~-jh6zRGhUOrn}Kif2Z-W_ixK{s{|xqkN7 z9ak;qbbCxP>g*3#v{B1nXYyD1P19R$gm=VBF4gL&DA90e;x)OYwIxu4^-*ir>_>B? z_j0)ZuXYx&d;k8kdYx5VkKS@}-Vt=qVSHGEcZdnpkK`{Z4;UB7>|l~{eD(Ji~6^Fh)<_2=tdIi@hqd@a}F zUbfrTyyU;>kHDXQuU{)&oBw9VvK4)OUl=d^es_9ex5}OtuJcP;qZQ_LJ1{>>ng72m zDI?2Urv6XZZ{66lvZvo|zsIRJso+8H65$m~;?Aw9iuzD2SaE>y-50~3rH}fbD2mJ0 zq^5j1)0@5f+Vjg2(+lVCN-5G;xv}MsrOUbVhF+@$4*2&8$lrRp?HIrOeJeY=D3(tL zLZrmguVtPW&}b{K{gCyI*K+E%R}BijW{)nqf8Q}T@Z*(oU+%BW2OS%68UvW zY>5}gB_$uL>uc65cYhT0!HesSzRl;IzUc>ejenhM^8a0*{GY*q)A?p$e#LnP1_sp< z*NBpo#FA92c8tNLD=^C1c7#dj_nOhkeK{Py%j9J3Kz#s{-Aviy+q&%@Gm7%=6TrV>(yEr+q aAXP8FD1G)j8z}|`1_n=8KbLh*2~7aZTJ*XA literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-goto-first-rtl.png b/Media/Themes/Umami/Icon/actions/gtk-goto-first-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff989430954bddcfcfc0d8e1f0cd9f4f7299b3d GIT binary patch literal 1106 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ow*PZ!4!kK=Er#%9QbiX5;1es1oYw5wd2 zIadU>25>!FsF9Jee1S$pfQxI=LjR@*$D0*4aYks?Ub@!KChy`jG01hxU6G}(sxw4Z zZCsPF@mN~!mL*qDWtneXyYSe%>vOAXZe$vznV;PE^N}Rq^qH35|D3b@Z_V>3UwcND zYR2V;pD{A|&)D9!dmm-_`%LE0+Kp$7ci#P`cA3jT=6mV#>)+V^UjD9-bDB3QljqU2 z=i76fS5}>MzBzX;!>+4g^J{CWf5*Ny+q=Rf+40z&4Iy_9c3%Hqdf(_k#^J*UuRVFj zTl-zh*Y3oOt-5ccO^z!$J%6O|G?4G8n!kwK⪼9`+prP`TpU?z5HgL=%VIto2M~y z%w2E$U61>g_g|suB}pq!$p{-SUh^_y{k+OW^;iE*w3TQ5D;|IL?Y7-f%naAA{`hp} zgHu)E0+u}j7sV8xe3>6V(eLiD;QqZ6tZKeAzs-73vVO-i^-YWdR^CVBde0tT$fNO8 zKvqf1<;bV%mm-^|ezy7K5dZ3R=g0Owf4S_c7t#!()l(0>@eesHq|}#U@zr@6*W>$Jfo| zI9+$rtMSsRck`U2Tc2ldS-!*a;^DWQy){-ry zo4e1i==&@8nSUSWTNeCydny0^^!S-_g^wL>2L*R9hvZ#Y$1LPvw2w`)Sf-Kpfdk6F7=M-+{+*R z@_^gaD@wK@PnZfGT(Ew6NdM@=_upEbA3b|0w!*DiK>hPCQ)Y_=n^w#g_@Me^_U50D zs(|ULn_~6WeOZ6u9Lg)IsJ}g@IWl_^Q$E?7@t1lvZHt%^E@u|{q zc818O_?z|@{`;5}Pcmg-U|>)!ag8WRNi0dVN-j!GEJ| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ow*PZ!4!kK=Er#%9QbiX5;1es1oYw5wd2 zIadU>25>!FsF9Jee1S$pfQxI=LjR@*$D0*4aYks?Ub@!KChy`jG01hxU6G}(sxw4Z zZCsPF@mN~!mL*qDWtneXyYSe%>vOAXZe$vznV;PE^N}Rq^qH35|D3b@Z_V>3UwcND zYR2V;pD{A|&)D9!dmm-_`%LE0+Kp$7ci#P`cA3jT=6mV#>)+V^UjD9-bDB3QljqU2 z=i76fS5}>MzBzX;!>+4g^J{CWf5*Ny+q=Rf+40z&4Iy_9c3%Hqdf(_k#^J*UuRVFj zTl-zh*Y3oOt-5ccO^z!$J%6O|G?4G8n!kwK⪼9`+prP`TpU?z5HgL=%VIto2M~y z%w2E$U61>g_g|suB}pq!$p{-SUh^_y{k+OW^;iE*w3TQ5D;|IL?Y7-f%naAA{`hp} zgHu)E0+u}j7sV8xe3>6V(eLiD;QqZ6tZKeAzs-73vVO-i^-YWdR^CVBde0tT$fNO8 zKvqf1<;bV%mm-^|ezy7K5dZ3R=g0Owf4S_c7t#!()l(0>@eesHq|}#U@zr@6*W>$Jfo| zI9+$rtMSsRck`U2Tc2ldS-!*a;^DWQy){-ry zo4e1i==&@8nSUSWTNeCydny0^^!S-_g^wL>2L*R9hvZ#Y$1LPvw2w`)Sf-Kpfdk6F7=M-+{+*R z@_^gaD@wK@PnZfGT(Ew6NdM@=_upEbA3b|0w!*DiK>hPCQ)Y_=n^w#g_@Me^_U50D zs(|ULn_~6WeOZ6u9Lg)IsJ}g@IWl_^Q$E?7@t1lvZHt%^E@u|{q zc818O_?z|@{`;5}Pcmg-U|>)!ag8WRNi0dVN-j!GEJ| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tIpPZ!4!kK=Er#CC*+iX5;1{di7wdeI8D zRJD~oZqAcDJeqbI_ckr6?QvWduJz)ylF_MlYsWBt!6`w)F8W~|fp1Yq$QdKKwuIu!zIL zo4#wEy&S)H-kMde35)_!^X~kq`5N4^{rlSp3+@e08y~-7 z%{~9;-}CdlUrQEjwwJHlUwrL=(@8VUvyHQ-Z^^Iz^X_eFW63Y`#ct-zpl|RE0i4^R+iGS!gE9$ldC{s(4R*&zBeP_Jm0-HQ{nyB_3Dt{NOa5V>v9V9!LH@ zxpl4gwR=}1b7W+!k9|0zFOe%K$Tz2gf3dFHO)W>SOINq;>=O*-PW*Z4n{}AZ>oc-a zzozWhPL7a$a8&ux#|Rhp4zGZWDH$#;M~-jh6zRGhUOrn}Kif2Z-W_ixK{s{|xqkN7 z9ak;qbbCxP>g*3#v{B1nXYyD1P19R$gm=VBF4gL&DA90e;x)OYwIxu4^-*ir>_>B? z_j0)ZuXYx&d;k8kdYx5VkKS@}-Vt=qVSHGEcZdnpkK`{Z4;UB7>|l~{eD(Ji~6^Fh)<_2=tdIi@hqd@a}F zUbfrTyyU;>kHDXQuU{)&oBw9VvK4)OUl=d^es_9ex5}OtuJcP;qZQ_LJ1{>>ng72m zDI?2Urv6XZZ{66lvZvo|zsIRJso+8H65$m~;?Aw9iuzD2SaE>y-50~3rH}fbD2mJ0 zq^5j1)0@5f+Vjg2(+lVCN-5G;xv}MsrOUbVhF+@$4*2&8$lrRp?HIrOeJeY=D3(tL zLZrmguVtPW&}b{K{gCyI*K+E%R}BijW{)nqf8Q}T@Z*(oU+%BW2OS%68UvW zY>5}gB_$uL>uc65cYhT0!HesSzRl;IzUc>ejenhM^8a0*{GY*q)A?p$e#LnP1_sp< z*NBpo#FA92c8tNLD=^C1c7#dj_nOhkeK{Py%j9J3Kz#s{-Aviy+q&%@Gm7%=6TrV>(yEr+q aAXP8FD1G)j8z}|`1_n=8KbLh*2~7aZTJ*XA literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-goto-top.png b/Media/Themes/Umami/Icon/actions/gtk-goto-top.png new file mode 100644 index 0000000000000000000000000000000000000000..f350bff66fe5d73f7f4744555961af55249f484c GIT binary patch literal 1125 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ov)PZ!4!kKamj9aZ2^vPAR5CPadBCwQjkVoZOqL2xb}SA6hY9Sx-;dYsqBaJU89< zf9%_T_qJW@b9usatnP2+!zVZR2t|8`v-GpN!%=V zUjAFjSmtkN@8Yn=TY#t{Ca=?U&ZBLZEiDX*foZ+W!nmIdaG1!dH!KdlF4`7a8s41^K^GhyIy?1 zy!T3pMSa_RjK=P_QtI1TaO&QZrGQ! zgF$Kzv$*A=3xXm_F}B_ zuWehyw~HsvYDVBpj|jC#D}Jrt-SbVq(VW{!T_s^U0|SFRdP{kVo554 zk%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn3=MS+%ybRSLkx|q zjLfYJjUXDHN5(8+U|^60*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGn LtDnm{r-UW|| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_MxHK?As)w%PWI22c9l3*Z+!FamAsz2 z7LB_)ZaJ;Wa0zW(b-`nAK|{l;6G^ws;+-mHd~GVaf-JsJoj2q<{SKW)-tWePn`2(9XZc2+CTN(oP2kiPJ{5~4fkH}c_aSk zUONqq43YUq+>ip4t*h<#diGHhp$NYg{_ z=~cH>s~cB)vCi~pd9dF%Hs$SJ$(++kPd=sI@{(QUQqp*y>Hbq+;n3BUoX7hTqs6}R z-%J1eMSIVOKZSl*%OZA{_3p{s6sVW{CE$|pf=|mhd)eN+bu{YCjkGac|LJAJ4RJ%{tfmS$Ij%N`pX6RtK%AO11Ch zx`l<$h;;wm{<1gP{*g|NulHpM`TFLC3l(LKznrl)jQe<@gwOJsH6I#|{`|S(s$!ly z@4Gp+*55NKDsC!K~R-N%yqw&LIX3m5O5j-*1SsxVUa&O#xS8;FDTDcn* zfvid!&KU3ntrR(#BGh=~v0zVMU(ovNGiS}Z6~4W~rpB$*p>#9n{Y6KnzI2+JE@59& z@6G?_8V{sPOE)W!<}V^4l9^ALJ(pR|uWF`96HQ(#!hN|I%+*8BWdb zvlsn;{0I9h^)Lr1Q zhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efq}u( L)z4*}Q$iB}eRSDj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-indent-ltr.png b/Media/Themes/Umami/Icon/actions/gtk-indent-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..6da223e27f1c96b515f761fbc7cefb4ec9ee7011 GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GX5uPrNAs)xKhMdh43Y4%d{}HLsvdYBK zO{^?>{t@*Hp~=}BKdKup3;4!sk(s>MFl#OUf@>E>(UieMJDIc#D}7#Qqi_V;gjaxv}X;wN8j zi7+}pxNx=VX!7zeEGYqo3Ib~nOfhbEm?$v+B(u3yLCvSav>mghqd#-HFbg?u-M8xa zZEFGDcE+9O8e<$783KHIgg^P))pxD=^YGX*&7?Xu5eLBu57={mehcGV_xe%U#urbQ z!h*#`fD8<$HEtez)NA%LV24jPGBKzZ$qUEO1NrhibD;zRDs7DgE!hzj$cDC)La5 z!V#ooeyfD-S%d)dx%wO>h5|krli6o4)I};I+AEHpW#SWp6JfmmTT_Enp=m>_xGP~&wYUV+tehnnOyr1QhGyCZ237_J(>_}mqG-s?PsvQH rWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efq}u()z4*}Q$iB}6i#Gf literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-indent-rtl.png b/Media/Themes/Umami/Icon/actions/gtk-indent-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..139ad7036d70a961e0e38effa660777b5e384ef3 GIT binary patch literal 840 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXUY;(FAs)xKhMdm3>>y%WCfB_rkc+F6 zQC;Y-%sz%|9T(Up2nd}p+0ePLYsHEcml}RB-BA8$@3%zf1(Rs23GYc6vCkXsTJ(xP zjGA`b_?zYTJH_b@|7E7h$<*5Xv6_AMT`rT!{PXqI|K1$^dn4uhU+X+AKKqiDg`20} z)L(YFL$8Tx!7hiUrUfyKEm4Y$r*;v-p<^4Yo*x&&BM*GtCtsWSc4 z{kY?6NGbSI1H9SwLc6ueH;d)5AOLrcq>RHm!5 z*kTe4cpm(gooeaW)p66ScTIekkmk!>Z<`)6?7QC?t`IaYV)Zi3i3aw92NM|n=N?~U zdn2bZa@G<|Lcl}u#efAHIG9Z#@c z+r6cxJ0F^TSoXI{w`$AjCHy|l3ic&;t!}NqrTx%%9}j<5$!~}6CY;;fCEdS$-0?dD z!-e;AU5u`(um0j>Ff+lk@#eo*?AQ15p8tGkl1u(t32nYbF09Y4Op@kfxD&0nXS!U% zmCUsZ#T7!k*DKz*w{PAI&!s`Gvo`2xf6L=2+Ii>u<9iqHhG@L@tede>?#-J!C#}rq zetLQS@}Vbx_IxNe(?0Y3^PwcgZ7mTwoClROy;O>(rN%}~Gu@V3opbx!d>=LAbI&$S zuCX)M%$<5{@x>R{Z{B?W(kt0a@;`%AFmJr^!}-$~7#LJbTq8sH%t8z;tc*>q49&C+46F1kvz3GG++_0|SGntDnm{r-UW|)v#V& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-italic.png b/Media/Themes/Umami/Icon/actions/gtk-italic.png new file mode 100644 index 0000000000000000000000000000000000000000..cded0616b95a19998054647d36e725b66440a1cb GIT binary patch literal 952 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q|7o-U3d9>?EKx$PYiC~|CntzL1Ogt7k0 z=F}P6PncZ3D5E`rtC`99RL==^&a={X9D-liS!{o%Ojw{QWZ5~zscXp$zQAcqTM}nX zdA4-ZL8)|^(r0rvm-A;WIayJ?g55qM|9;&5t=Df=Ge-Zqt~A?nPE3ZGU|;_7DK8ls zo}WC@{poX?z3m~l$?{re?woUeEcwzDD894UdRbaZjP84msCSReCfTf9aZW+t-lTH1 zW2etYcSoHzNNHXBBG&xDiKoYMrTSi z%)V6zRD&;k-J-GafQ)iM#hhZRF!Q%*8MQx8s_wpPWpGPoelY7XjRP7IixpbV>`Ymf znw=XM6qw6#Ji`52XU1NQtPf=wT*v+{4DyPRP?^}Q@@aw#UlcF@+!KeF2E5(7d~t;E zgM@Rj@_h@9buI6txA)Jxllh|P)*HUR@4GZ(gKQUzw1__|b5+aIj7?<|R6RRM<$sRx zk9__?^Oz0u9vNZwJ1vs#$M!8)lg8r`s{-{@&cLvZA>nkA_y3u7jP)(5 zbDo%2YcVh|sFt`!l%ync8R!~V>Kd4Z7+P2vn_3x~X&V?=85m6a zY+;C^AvZrIGp&-r$iUE0*T78I&^*M@$jZpv%Fqa+;dx}t5(WkaNstY}`DrEPiAAXl l<>lpinR(g8$%zH2dih1^v)|cBF)%PNc)I$ztaD0e0sy41i=hAj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-jump-to-ltr.png b/Media/Themes/Umami/Icon/actions/gtk-jump-to-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..0e677738c6e7cf12c0e4b65af6c9c212d8c475dd GIT binary patch literal 1258 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 UN}v7C2ILF|Pgg&ebxsLQ0H3x3jQ{`u literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-justify-fill.png b/Media/Themes/Umami/Icon/actions/gtk-justify-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..b009ee3b3cb4edd08d8f5440e80ffa7236b4d18d GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s6sPZ!4!kKLiF_Uv2{WI0`V#dUp^-QVIFTqX&hVB9^arE{BB;Lez7$}7UOv!6zk zyjee4rg2#&V}iMWz+n}JGaT!xBkI^!35jyGeq}ksvo$I-Xwn18i7hTJCiR-TkZfhK&LeuZ8|^XA@-R-BG?$)}Ul}tZHY` zPUo4N99>5zFP&6T#A5ybG0W;$A-1*?pS_w&tk$aZ*PCx-X-nK=YqPEIU+X@F%K6XZ zCY_agG4t=4xc`gudEJ#?A1_?L+w$X@$=PeX zwHdRH8BF!Lxi{{8vB3{1=R5j&mp^ig?Yf=7@?Gd20|SFRdP{kVo554 zk%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn3=MS+%ybRSLkx|q zjLfYJjUXDHN5(8+U|^60*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGn LtDnm{r-UW|CRhRb literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-justify-left.png b/Media/Themes/Umami/Icon/actions/gtk-justify-left.png new file mode 100644 index 0000000000000000000000000000000000000000..224d70023345320156b7f57b56361d1cd02092be GIT binary patch literal 684 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s7XPZ!4!kKxye%Yt8=p+xlL(soX1_(z6=1HgdUd=gd@`Y8CYD zjPBN?LuVKmWU9A|T*%t1!W6Q4D#Ieq6<61p#GcnvVoJNf{(|$oQY1?z^CXuiyPjUy zYqlV0XN+WfiTr(U1_K^v!Fi%gNg_-RB?mgZmIf*8s?d{WIJ2fF)7Vq%pcm`u|i_Tee<#d z7haZZc{Jm`qx=D%0G+rsoh?dD(Ip$|ydE`mGTh7&E7NodndjV)8Y%C8{_N+uSDsHe zU!W`g^Uutg)@SE_*;jQg!J_0}&Hb4^YUfJ4G8bje>gb=Td6-8`sZa2tuv3LoNBm&} zo6AP*+j4o0UiMsnTekoA-}!<%vv1d4w@(q{O@E}6@REUnLAAs+q9i4;B-JXpC^fMp zmBGls$UxV?QrEyN#L&XZ*wo6| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s8do-U3d9>=$ap7uNBAhNeSqkE;mVZP~~ z%(GrF2_?0j(3cRlKiJ}-BDJ5Pxly&VbN&%0F}C2!kR8`qHA|v2WY?HyTFp&6xAXaz zGa?V>bMJM0z42yg>~|&3fWrn==GV7xGr75A|KlaAeqKo659i)=KJD^e>-02_<@`%5 zbN$x{7#K4!wBK_T+Hzap%jN2;rBaT2>$Wb={?F>LWQBrMMW*KjkC_ffmw7E+*toX(+sd#21r{&OkMm7C zG;Z$LbNmRmaA~^EPU?K6r;CYTW8|ddp{YO zVz1wyH!nK9-YI_ap7qD>EeNo<`04o1#Sf2PknvZ0*8h6e=bv|CbTpi|oDle^Xq-CJ z(fx>|l9dyOJIBYlUQ1e*kj)2?C{7#J8- zOI#yLQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=I zR>@#wU}&goV5Vzm9%5)@Wn^w;Xav#lJThhp0|SF3$cEtjw370~qEv?R@^Zb*yzJuS c#DY}4{G#;P?`)(P7#J8lUHx3vIVCg!0Oe{Bs{jB1 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-media-forward-ltr.png b/Media/Themes/Umami/Icon/actions/gtk-media-forward-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..6212e20ed5c18931b307941f1438e05df798a6f8 GIT binary patch literal 1229 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tI;o-U3d9>?EKzUv=dDsg=O{`;28ZEF)- z4{2NqKeI?^``5P(A_J_MXV3P25eLdeJ2p1=jI!9DUgvc}K72q|!O= z!&h`u{Qk4Facb#1YUrk_>c&?8Dmr(bn>$V6VC>8pw&wevKl*Jm|NUq0eFvI<-4_q9 zp3QiLc?H9YcZ=3CUkG~b{hfQmzCWkDlXZ2cJ^T5ywe=QL>FjMUUtGNLnqAKF!tB$} z(mwzEb9dIlde#h^HbmwK!38XWWWH3`Dh8_W`xdZz zsgb$${(#FG)l7dTtLpEdi;-ea|;+NbMvmT#YVlk-Ex-P(&DB754@FV2(5-+D{VZ|P+9T(i}RGkwlZ zKb`vM);MZI|Q!bD$JcVEKR=vuD8=kJ!h&zZGTe8JT$X@0q?J^Gh~ z54+iQC#~dIe)y!TvSDM<5oZp+h^X1ZU)3gyaJA`%Ze`jT(Qq(B#rC{=>o&9L+B+v% zla*q&6odVv-;Yy*Q+kSi<&ccu5JLs1Qkz4 z1}3JdD+5GWyMi2d#yC0Z9k`QlZ1wTJ*Nz?Y1h||uG?ogONO4HyLeWpuu{aQ($Y9NS7-Q@Ba85wzj5=uS#imQwY zJIZpM_I*_w2KD_3?ecD>H-_g_c;^wggD73sealn>gr^@v6^Q=GbzI^rDv*qIYfB*P9 zuR67%ZCg8~;9j{CND@_3P3S$#?W-)dmL#f9vez zR8RKV{QOexVVh*18_v#>$x+87cCLTQ|H^*7J>$Kq?5p=QkDg;-U{Eb_jVMV;EJ?LW zE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|WN@iLmgOP!up{{|M zuAzB|p^=r5xs{<2M8osQm?aDh43Z!lg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3 Skz!zAVDNPHb6Mw<&;$To85d>% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-media-forward-rtl.png b/Media/Themes/Umami/Icon/actions/gtk-media-forward-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..134fc02c9598f273f7f29b75789065e12647ea05 GIT binary patch literal 1184 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tI@PZ!4!kK=Er#QH>+N*tU2-%@w^bCIxH z#u_HNyAoNp@!3ZewDjamarEd&t$WD9$2528-L|Jr$+A9^&(55Y$97i9{GNpKo(Fw8 zyAxjZzLhGTJ70Ky=k@BixhL8i z^TZPmCKybSx4d*me|qG-wd?ESy4=L;SwDm_9%kHNVrnY4x@y;}MVBj27~0q0W_a+| zUGf9NH#2kjZ#U)_#pL8$J{e+S7FD*-}l_sW+d0 z=YJiaWwEAyMhv?{z0e)A4G}u3n{=#S@m-rYRrgt=!v~*>+~@b6SZ}|l|LPGgiN~Kf zC2Zcx<f2q(V~=%vpSkN79?GMmdDCC(B{EXN8<*RDNo$N7VKl8UE?nz@6^0}HuX%W~f_G~9k0 z_Waqi15f4Wq)gfMEj-+N-nBC3WS&{e8n3@R@L9&9uetB}K?(L_Gd`xA_uP0Tq$|X# zvqY^oM~^!+bU~(6#Jz)0i!`Ho9lX6y7r9rbzrTCGo|~WjZ|D2^A9~83ZXHb=^Ije( zmZ|7tKQ8g5>hGV{e!V-ptUlgs>(h6dnd9pDQO+aD&?WHJEsLFZ^S6lmMP7YDFGY@qKPq_^^Wk}hNfs~5pT>Q`d$q6U$M|b@Ijve1 zq%~E=_wtJM`@ZX*Nn>#fxyxC*R zSq+AFLKlCYJb8Y9U(C-h$*Z>>5|)w_<(hq}Y-fsqpnUgHFa7v^CQ~XlnB^JGuK)9? z`=q&K@^@|twgVPsVs=&PW$KGGRwciho&VkN*tGJ?`X)kYX=&f|b#-rcW}Np+ymsx{ znah_iZ*>XzcH>d2XQ#&r^*WK|>Wl9F+o}Fp{;Yi8_Be%E-U1v93=FCzt`Q|Ei6yC4 z$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP z(={{?F*LF=GPg1`f@pXi8MB0efk6^vLvVgtNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6 SHc|`>3=E#GelF{r5}E+CiUB47 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-media-next-ltr.png b/Media/Themes/Umami/Icon/actions/gtk-media-next-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..56e943d7d5cfd75cff894c5d7f2090f1fe7ea78c GIT binary patch literal 1318 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-media-pause.png b/Media/Themes/Umami/Icon/actions/gtk-media-pause.png new file mode 100644 index 0000000000000000000000000000000000000000..378ab5edb36c8fb6d2bcd0334c988c8d96239c6c GIT binary patch literal 798 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}ha3Z5>GAs)xyhTQHFb`-F^YCCsk$+KD2 z9f>EJxtrGiYt!le9_|?L@<+w-&?fy&KV<7#^c*8xj(AU!E1&sEapt|5Icn#XqWv$2 zE`K#=)vUY+$Np6>URx~h5YzmZ@qx?%35V5epJfkR-*i}0zD3~R!;61|HJ{Gi6z}!( z`Io=#yN}H%R&24WD)=$6qseI5%Gvkt?VWo!`B@dyT2pStW5+iOduXox|8;h_7LT*h zF^BB4eUDj=Z=T%sMO=TrdQ^6tj@Sy-jIB|XA8XD2vnVaNFP(d0cFZvY<7e@9%nWYL z(XRhYnKrr}C_SB(b@sO*%l+@4bMu!rD{$yEtk_jwA8f&Mcu&lhrjNDvyaikZg#|k{ z++&QNs&V45!4}sgQxf(uO-;6T7jYF7KeePpVab-cKO7G*2pr$|HeqMfqwkN@GY$vz zy;aHBep{@dvXC)(+JUwO3jULhtSVXJ;=I#rzszdo4GfALeT&!Z(&+iLi9>0@La6|+ zn}Vgg@BU@^TQ|S^uIAN-qL7OWx882ubub~}_=*tbzRMews`lRdC&=4=ScXCP+Nf8E}1;FIbUyE_iMu^v7?2Xye@ya)uCnHIx{+QTII1BUH404 zzuBA@xY#r^`j~|N=}lb6KHHSVmbc8tNLD j=^C1c7#dj_nOhkeK{Py%j9J3Kz`)??>gTe~DWM4f-uO+u literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-media-play-ltr.png b/Media/Themes/Umami/Icon/actions/gtk-media-play-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2cb57eefc8b561c927bd55ecbc0e6a026561c4 GIT binary patch literal 1157 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tINPZ!4!kKm0|zz{{5MmbNA+N zTYB={k!2@y%4SEbzi~)S({AaS+gFsHIAz_oUvR8lX|4WIcE=B58x(#enO;?Es&{$B zE4cC3HIby~OTB5n`f1y%XB!(^KR%o%{$|xFvSJ*glJlw(})aha& z^m2xjwCwX;7ZeTI)C>)dIk3!F)|j=m>)*cPODBGDTpFOGW^0$arPlqp>A6bB&`|f# zQ03WY^LSJypER4UwBO3i>RhYhff+2vB9uEhLT@|m3}O;Y%qZAzGeL$UHhSNzZ$J0^ z{QP4m2~cKwZw63og>f{Y>4W!X2qX*&M)XjYkM`m*yOMdjD_ z-@keDr(1sh|5S#fznN@pZNK%~|9!yFaHR6B{FU1-E(%E#QYD?lf4q3iuf6|IRiUX2 z*L*9h%0Je}BI+tCe#kFh$=PxIac|*)j#qo9D|iZ}=rJ=q6MxpLuU8ZI@#mlXePy4% zthxUB?D5ARdD)YNFWkL*mm%jio1o(~)g39~)9Ru(Enj|Lc#=x2#kWr%%Y#;4krJGG zQE3)~YoJv2F^QTu`=XyV=jQ!gFzM{SkDoW6xB2_)%9WF+8M<7yy!`NZt(oX__RYnc zr?##a&vUc3@|*iRB~8wuvE$5Hu6!noAJ1;HW5@$GBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6Tm7x(t!}G|PB@7G| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tKco-U3d9>?DX`})L$iu`*w`}@1!GZWKh zOlp5ub&8mA>}N>Qp(;%zOHmK|%=7EWHh z@!}~%Xw7P;`m1Md0Y^*uGNr&Os{XK>yOaNC)0K|=Z4b!_GHmOs1nqkQ>xm1hicH@2^TH{;orRmb-4 z{leE!$;gm0vskI9x2MOVglgV}{9idm|Ni^S`ML^o{SH4p!_4sJZv5}s=(nWcWS&VHjfThM?gthwT)zBx)uyWHzqf5XHEmi6M-zkNi5YrAoeOrqZgCfp zT{m@Vs(>I%JM+tuDrW_$-et>{Ei>Au&)**WjY~yuXIIxY&Ye{=6&ef^lV9nc)prOE zot`LV;KQ8#I@@FE8egV~9x79d8RSlLrldKj9$m`L#>QSJ`>*0ho65%}>gSnV!w&4^ zVX*l5Oj<%#dhbcsO4Wb>mj2t^zNL<#TYW`yIHt5Zi7|BCRJ?xu`uW-){|b)xzApaz zR(9>_@VcF!cCX6FJUi{dEqUYh^7TvqZvQO4Z{FicIlJam2Bd!FV`Mn+<;&Gc6~$+a ze48JgHO#L1mBlI8>GEXmoH;t#^)HW}-@VIPT4OG9j=$gD_#7Xwa2pT zZM(es|1CP%XV2YF46f#9Tq2QdB`8^1TDq5+nK{0+Y~MG}!;QyO8s0{J*A=)ZZftBU z-fsWv!H=EiM^x(GQGO!lp{+ppTS=-#!9ub$6&Z8!h^ts7>?c$AFV+uG`8&7FJq z|GNtb(=|G)i)PPxy1u`6-rtg>q(`SWZZx)Cq!D^^yQs?&#)8yjrU@xMYm>M;JeVGw ztJ66uv3qB0Il~EN1!fQ9W6$2IC@VE~NW5cI3hM0m&#W&vv0}Z=_mB4<=wEx3U{!wO z_F)DF2GtVRh?11Vl2ohYqSVBaR0bmhBLiInOI-uA5JL+qV^b?bGi?I{D+7aRpDheg zH00)|WTsUz7#SEE>Kd5o8k&a~8d({cTNxTbG(3-tS;D};APKS|I6tkVJh3R1p}f3Y hFEcN@I61K(RWH9NefB#WDFy}x22WQ%mvv4FO#rGpA^HFS literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-media-previous-rtl.png b/Media/Themes/Umami/Icon/actions/gtk-media-previous-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..56e943d7d5cfd75cff894c5d7f2090f1fe7ea78c GIT binary patch literal 1318 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_l;pPZ!4!kK=DcqJ3miC2a4bJurSoIw)yGVxUUHFN!?xRTi*MB0uq77+9JEYYr-k^M zWMwI>JjmYJ*||N*r>D_u$tAXJ8{WKmlUpbMO=!i8eG;`VD`!2a`8@ai|9z90?;QWn z`!D{TJHw8tEL;pH7#1-+(*CoAseqwl?SbVFx7^H$^PI%Rb9jPqr;CWg6n2Jo<=sol zj(^+E74vi3%9F1zGn6p6RdKimUYT|4mAObd-?Dt4^LLLjGrTX`U3+zFfBo*Xv#$f-gGvLJUex*{^xn}I}&d1&%gig(k6CxNlB(;wx;gS9It1seEIV* zYx=p8HFYJI+xW}h-ut;o{ z@9!<&^ZXb49R4Y5HZ^fHDKs=DniWX%wa>YJ^=58%Uf#XOn%}tV~Hf=f8Wo6E_wj3=LI&Bp;e8+eM1TFfM%O{?)Sd_yw zQKO5Yp{uKlg@J?NfmVs?p~PN6L7ub*<)#C(6O3jq%)E7I<@Wm~X?b@i-Lov6wK+ny zV-Lq>OYU9k*rVbP_~2-& zw$LQI>AfpgE@7^S>!|s4Q{7ludAdpY#NRhQw0eiPwYA-`|MSC^A)&17TigBrtC|~Y zFTSe(yXE}z+3W(_B6RW?9_)CsVAU!qNk)bU4!w@>{c?X7FW-LrQOUD?w`;dOU!-&T z^U5Cu>`aWs>EXwp{P^)B=H{KFx77I7r&Tt04a!)P`a!-J0^?M(;I*GuoS z`1AC%{@zQ$fq|CX4$4Yw49UsKin?ojeg0T|ER4_p-=N~@$gt3a|3JY`8%Nzgyt8KU zA4=Nlw|sF+(7*HEwXavMoc8QYkR4k>W5++SiXKC0hU`^+OJ994(KI-Aq~62R;MkcS zL+*Es$0Q7o?Wn$b_jrBxeg?)lg<)| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tKio-U3d9>?EK_0N!Y7df`yTst#$ZP>Q( zG8M~D_D7d!>K2NsT8La0Nt)A~QO#ldBw|vq$8DKe7lJP+w%x1B;C#Dv;nEA<-W--k zT7@_^&JH-5`Np}UcVd=zmyYGvtfg1il`UhBKJtIcF5BnL{AFzqzwbS6lhzpiOZ=kT zIS&RVhCK{>v=m-D$TsYJXv%QzKktXt4(GQYXct^0Y?lxrwCJ{CRTy*HKcPq4KOgYV zc93&;YR{_CCG<(fRMz0E_`2)Yb0rMqY#OX3TwXjm`JlD6)qB+{HuKMAEG$fn>yvK3XFq;C z_G&wSV^(SSjuqD#PcvnizL-3jgO7jr-)UbREo8oJOQepNlJux9s@w?EQgchTgkO7Asff zy|zlY{a~le0ST65g<}pbuf>>p3^^1P7z)lg%JJu17U5vI#;|2i%4v(ztaE3cr>s{WVSC1XjxYl{% zCimm1QLp6h8LwEN&PIxXfq}u()z4*}Q$iB}05Kte literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-media-rewind-ltr.png b/Media/Themes/Umami/Icon/actions/gtk-media-rewind-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..134fc02c9598f273f7f29b75789065e12647ea05 GIT binary patch literal 1184 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tI@PZ!4!kK=Er#QH>+N*tU2-%@w^bCIxH z#u_HNyAoNp@!3ZewDjamarEd&t$WD9$2528-L|Jr$+A9^&(55Y$97i9{GNpKo(Fw8 zyAxjZzLhGTJ70Ky=k@BixhL8i z^TZPmCKybSx4d*me|qG-wd?ESy4=L;SwDm_9%kHNVrnY4x@y;}MVBj27~0q0W_a+| zUGf9NH#2kjZ#U)_#pL8$J{e+S7FD*-}l_sW+d0 z=YJiaWwEAyMhv?{z0e)A4G}u3n{=#S@m-rYRrgt=!v~*>+~@b6SZ}|l|LPGgiN~Kf zC2Zcx<f2q(V~=%vpSkN79?GMmdDCC(B{EXN8<*RDNo$N7VKl8UE?nz@6^0}HuX%W~f_G~9k0 z_Waqi15f4Wq)gfMEj-+N-nBC3WS&{e8n3@R@L9&9uetB}K?(L_Gd`xA_uP0Tq$|X# zvqY^oM~^!+bU~(6#Jz)0i!`Ho9lX6y7r9rbzrTCGo|~WjZ|D2^A9~83ZXHb=^Ije( zmZ|7tKQ8g5>hGV{e!V-ptUlgs>(h6dnd9pDQO+aD&?WHJEsLFZ^S6lmMP7YDFGY@qKPq_^^Wk}hNfs~5pT>Q`d$q6U$M|b@Ijve1 zq%~E=_wtJM`@ZX*Nn>#fxyxC*R zSq+AFLKlCYJb8Y9U(C-h$*Z>>5|)w_<(hq}Y-fsqpnUgHFa7v^CQ~XlnB^JGuK)9? z`=q&K@^@|twgVPsVs=&PW$KGGRwciho&VkN*tGJ?`X)kYX=&f|b#-rcW}Np+ymsx{ znah_iZ*>XzcH>d2XQ#&r^*WK|>Wl9F+o}Fp{;Yi8_Be%E-U1v93=FCzt`Q|Ei6yC4 z$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP z(={{?F*LF=GPg1`f@pXi8MB0efk6^vLvVgtNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6 SHc|`>3=E#GelF{r5}E+CiUB47 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-media-rewind-rtl.png b/Media/Themes/Umami/Icon/actions/gtk-media-rewind-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..6212e20ed5c18931b307941f1438e05df798a6f8 GIT binary patch literal 1229 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tI;o-U3d9>?EKzUv=dDsg=O{`;28ZEF)- z4{2NqKeI?^``5P(A_J_MXV3P25eLdeJ2p1=jI!9DUgvc}K72q|!O= z!&h`u{Qk4Facb#1YUrk_>c&?8Dmr(bn>$V6VC>8pw&wevKl*Jm|NUq0eFvI<-4_q9 zp3QiLc?H9YcZ=3CUkG~b{hfQmzCWkDlXZ2cJ^T5ywe=QL>FjMUUtGNLnqAKF!tB$} z(mwzEb9dIlde#h^HbmwK!38XWWWH3`Dh8_W`xdZz zsgb$${(#FG)l7dTtLpEdi;-ea|;+NbMvmT#YVlk-Ex-P(&DB754@FV2(5-+D{VZ|P+9T(i}RGkwlZ zKb`vM);MZI|Q!bD$JcVEKR=vuD8=kJ!h&zZGTe8JT$X@0q?J^Gh~ z54+iQC#~dIe)y!TvSDM<5oZp+h^X1ZU)3gyaJA`%Ze`jT(Qq(B#rC{=>o&9L+B+v% zla*q&6odVv-;Yy*Q+kSi<&ccu5JLs1Qkz4 z1}3JdD+5GWyMi2d#yC0Z9k`QlZ1wTJ*Nz?Y1h||uG?ogONO4HyLeWpuu{aQ($Y9NS7-Q@Ba85wzj5=uS#imQwY zJIZpM_I*_w2KD_3?ecD>H-_g_c;^wggD73sealn>gr^@v6^Q=GbzI^rDv*qIYfB*P9 zuR67%ZCg8~;9j{CND@_3P3S$#?W-)dmL#f9vez zR8RKV{QOexVVh*18_v#>$x+87cCLTQ|H^*7J>$Kq?5p=QkDg;-U{Eb_jVMV;EJ?LW zE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|WN@iLmgOP!up{{|M zuAzB|p^=r5xs{<2M8osQm?aDh43Z!lg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3 Skz!zAVDNPHb6Mw<&;$To85d>% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-media-stop.png b/Media/Themes/Umami/Icon/actions/gtk-media-stop.png new file mode 100644 index 0000000000000000000000000000000000000000..b95ff2480f434e816ee681d819be331ee1710697 GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s79PZ!4!kK=EH?|Lx>3j9kuXZbp9*P`xv zm5CR+OT=Bu1uwpK{lX=>*Jq|nMY_j=w?5*lS3g_EuDGi(udJ->+i&aL2iE=DopCyS z|I}YiCX6B56eJj5==0^=3zKN8PJh1q`{Gp5_i$uwjhgl}`@dwT$E@dG3tm3hP|U)Ru{G+}>#t_QCQ`g76*?TA zl;10qIelL8x$d>srFVI@-}@QG9w_qic>;^l0SWGaO?wvX`e1u*w@u=Hp*{Tf7?gU{ zlWSDt14LK6`qH&VeCG0?wPAmiUX|@;Vqjr1K5TG!L#wISHH(PshijTQGctuo2t9kM z(D%4xV#5Jej~>RfRSUWOF4ZY2eN^H&9FWe}w4g!7)5u|FW4GV?=QHlL+jMg<%n1Iv zXv(V4My>^Onl_&aepg~u$LF;)Xqk$Z`-inj8(%zM5TmCpUAJ@BKAUf>>5t+z-;61o z@Vk4}E4zk6Zdb0(61aF=?ETwU{I8{p{x4FvmJ_GJz`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? zBXcW5BZ!9Qkuggc7#Ji$HU#IVm6RtIr81P4m+NKbWfvzW7NqLs7p2dBXCuYHz`)?? L>gTe~DWM4fwTTSX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-new.png b/Media/Themes/Umami/Icon/actions/gtk-new.png new file mode 100644 index 0000000000000000000000000000000000000000..f01576b5f17ce433947043de8819af206f7e4c21 GIT binary patch literal 851 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zFuY{&H@Uu%mw|zSv%n*=n1O-!ItVj5Y0R!*U|Ep<>6H z*YEs{t|#5A$uY{_v^q{A?U~X0Ipyan%OBWJ|HD0DZ7(aMm%|J8P-%~X{}1opKJduk zftKJ?Wmzp_T^rL~wzV}Mo&L^}54p|oukXEhe$4)z`30K=4*9#ho!%05Y(~Q8+t0Pz zzGr18KU^svvb*l$p{l)o&nst0Dm8iNnEdB)^OW*=!M*2_g;^Qr$7L2Kf2F$T#ftsj z$5V6VP=ZVVQ(9U=+swp?iEJBsy|^dpsa;+W+`z=%@Rsv|!Me@rj7%!Fq9Kk)lqWU2 zoKc8gEwHaKqd9JQ+l}+03B~?Qp}p^wIx^g}y1Lwt1X`WByjl1{^dbKFn}4P9DpoO> zbUFEPhM1maU_6T+aGQRUak*Q4seE?-@7=2>{J8sj z`|dIgq39_M&y6RjEcq*R=KS3BvNE&TjHQW-^%5KdLOw5Fbz@1Rq{-~F`;xutHcgzO zvA$#lkCEBg);A5wSJoWoV0rn@g!{%rwTbDMb0^JiRuo;bT;*r#1^I$CT@OWA95*a4 z{=L?&Nu%qXO-0H3Yxf!IVzXo37C-QR*K;CKd7bpyI%c~S(`@zM@8)D+U{Eb_jVMV; zEJ?LWE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|WN@iLmgOP!u mp{{|MuAzB|p^=r5xs{Zk7xT3=E#GelF{r5}E)})mlIR literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-open.png b/Media/Themes/Umami/Icon/actions/gtk-open.png new file mode 100644 index 0000000000000000000000000000000000000000..9e4a9780c66fb64eb859c69c33b27db420c41580 GIT binary patch literal 1093 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_N}eu`As)xKPV>!(2^BeB|9!8yv1iWW z1(7!zL{wP?V|Hk)bzRfM=z8adW?sb8S zt`5bG$9&F|T$*YA{_&mSm@_GpeqQRiz&yQN|NFfE@8?#Z+xz~YtXcUC*XQw8(=DDm z85f@`jrnGE)am2&vN?8Ip zE8hEt&h7Ye=zcaspvcBQKhrDTSD*8rTRThVbk)s}s|h)LE=9s8Ki-@C^f!Ybqj(c{ zWK7Mv_iy>_7O!ZDT#z2W)8^~bk6U}Zr*Gk(kZM_}wdrkTq`5DXEh63pnwlcK(onb z7QGA}#!q`DKd~r3b8d=3vxbe$f~g#rk514Lj&Z2vxNuX+f6l>)Go8{u3H*xdwfNc* zzO0*dQW@I@TP>zN-&HErb7#JoFhS~W@IA@&MJv9Bhb*3&lvUr`<>1;laLv3D| zR>~sfR=2!hsZFKYZXx-7JqqHApWXJ(+`RGfvDfw8a$D{?9q>~=dG_@+0fq|}U#D;> zZok#!qro@fncLo(X%^qVYcQO3+4=uoy&?_C2kt!B=9|IwhG{=D=bQV%d>p$Uwf_>7NWRwkr02(%dxF2&SJ=It7mmtT}V`<;yx0|Nttr>mdKI;Vst0PwNp=Kufz literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-paste.png b/Media/Themes/Umami/Icon/actions/gtk-paste.png new file mode 100644 index 0000000000000000000000000000000000000000..8a955039f03467324658ebd4042a8c4900a3b395 GIT binary patch literal 945 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXn>}3|Lp+Xeo$Buq5-4)4{`=Yao3;cV zmoyb*ay%J3gWEjuVvk4nnOiK|ip6)H6>FU0F*`?)^&yL6)9qUpyJxw2PS8^k;9@d# zPCr(1@3W=Z)R%tISDlOTf=wcM3dGyYma1-Aa;f-hOsz037IWRNtk+SlM zNes?%r*&Ivv{a`u?9bk{<<~X6i+5t;r`-KiG~;T%@v9%ddO{l145nUrXH&iXx0P)2 z+0=a>1MOb!zwn6T-Hx9*TQ=vuc~r71BQx{t2hT2#bsHtttlQSvwQTdWbHUse99GNH z_w_SZGm0_aSiL6Xc8=8M*Kc|5*SE-Bl$5VO^XHFKAZuvoR385Oi)@Y+dtrKNYw_ggshwK%cfe8d${VKZ-W;DppU zF_#tE7CtUBmyuae;CK0Qox{_uM_+$Ut4Y4BF*Dl9(aguo)4$)mf8&&s`<8z{wD7~j z=qb?}+g-J_?G4ZBF1o1UC7X7_l`+MuF)8yUdu{D?ENtLzb5wsE6o@wJc%D_&3B z^T_Y_wS%H2r}cYmWz?juYowdcvMW3!qAF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjt ghZq`J8JSxd8bUN&+vsM=z`(%Z>FVdQ&MBb@0B59%=Kufz literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-print-preview.png b/Media/Themes/Umami/Icon/actions/gtk-print-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..760d4c62798d9e72616d6b121c0b7289b059d187 GIT binary patch literal 1291 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2G1yq+$OAs)xCPL0l);wo~y{`1z`WxH>8 zFB9LT60;h`Ll@=CUgie%|7c^R8*8%p>I? zIp?iPcg=m2Wc@aFaZSmV{>^voyu7_K|9mqLoG5rB$IQg{clcUKd#kzT^&7;ee<=N} z5bl;#X{g@I?JOo$_bzqv-YNdy-Ywj|U0m_VUFL1m^Kb7eI{J8-{Q2*npGSzSUmJJe zPm1A*!Nj=x)~@wxOINJ9GqKXWVak*#t7~ijp7HNmw)*(llYMow>R&#)SShyXgOI3V z!S41GQM+=ocyFCPCEMy_`D=37l&RKSOG8#J_nV*M`%I?F)+%{d;}ov%YYk)CX5Q&> z+4tiULt$ZIPfyQ-j};6a{@%$Yv%GI#DT zcGIb%@0mXA+S?**FT4164ENF1&o>z*3$9O7FMP21?vmxpluaCca(FI=akuK{ro7$t z+;FDS4D)=(*Ym3x7o;5%;oTW)Vq%iO#h?BhIkW5--?Aet!=)wzy%xa@l07pH=1jwzjqrYr}5c_TO|e?$FuU zez*FzZd$ltLc4ra&;9qyH?Ex6tG~bLXcDV}nHt-E`-am`552#h&d#A2;I(n{rb!L& zjvJ^1dGQ=x@c5CaS{{?8>hEu%%>o+Eo6dgZYg06wefGsKdxkrC<}Y7np7HcMWc$R8 zIpo6?&7~YK81pJ^D)uhUNMurEaq3BrylkSR>~r~7f{?@YQW37zSDjKqRFadE7aW*S zWK(ol!R}w(lpu{vg{d;}+O1QBma^E**Wa?wNaRD|=kM;_^Qw&cmG7Gt>VG?MD8y>_ zx(A#QwI(_ zU>9bcedSu})4sb77j0YXrMHw{uMR!RqQ8IUJRimxjTH)l9*jwiFCI)dXe;!A;qL*{ z1cnbxZWoT{G+a<>WnA_^Ml{Bsp(kO=;)9V!hr7Scza8IDbNsI8`PG~Z3=FCzt`Q|E zi6yC4$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%? nG}JXP(={{?F*LF=GPg1`glM?7(an;9fq}u()z4*}Q$iB}Vbn`Q literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-print.png b/Media/Themes/Umami/Icon/actions/gtk-print.png new file mode 100644 index 0000000000000000000000000000000000000000..0c35a115626b7974612b3ef4eb2d47b3d15c8f1b GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?9G)(YAs)xCPCcI;6Do4t{`)o0v^NTw znUlXwbxWS3vuQU0t+{FJIz)KJ#uzSXkJKu+cjjiCF9UpZa1s?pa zdlVczSz~G0(OaQPOGU)>Vq7#`mlg>(e12~4lKt1hamRBWucwb9HaTX;Tt8YGYc!LG zolnN+z-6JO=ihh)Xo=f1y<2WvAj5vV(4z2BYFm5z#VGZ8n|^=1`EJ)y>2>}!za$xY z-Iy7&b&pA~vCn`0C>l!w8SUZ zy;!kmYgO;h-S)+wo~)L!Dw(l#sj8d1yWm8Z{A8a=QzIN-`kqu*-=CQCW@_I7YmR?0 zk*TGnQ)}$bA3DV3?5scG{CoCWqRL91nX@#!&UHpat(_3H)@`+Dsd|8yqEgJP845j7 z63OO{tSa+Zl+4`n(l1Vadr-n#Z@O|sMzE5FViH$ z%=U|2YY^AcTbDA|zI=N!N3)5qNux`krKZk)@6EWH`|OO#w*{kAF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjthZq`J8JSxd8bUN& S+vsKqvcl8V&t;ucLK6UG>cTq! literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-properties.png b/Media/Themes/Umami/Icon/actions/gtk-properties.png new file mode 100644 index 0000000000000000000000000000000000000000..a0043c70258ac8526af7073e2eff017c03246813 GIT binary patch literal 767 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9Uz6JP%xH6CkvU4)qJ6k%sTH89B0|NuY!ouR?P@OG_&%Dw>;{TU%Q@x>_eso;-j4`~?dZELyZ^&6+i9*REZ=e$Be|Yd37z zuyNzYZQHhO-@bkC-o1wo9XfaJ+=UAlu3fu!{rdHrH*em%ckllF`wt#Gc=+()qeqV( zKYsk=$&;r~pFVr`?D_NOFJ8QO`SRtfSFc{be*Nano40S@zI*rX{rmSHK79E2@#CjY zpFV&7{N>A+uV24@`}Xbo_wPS`{P_9v=l}oz#U{@5Wnf?sDGBlmW?*FD6_Ais(=s!6 zaCCNcOKNIr4(K?&fq{X6G0EHAC2&e+jTQp~!xK*z#}Elg)`Nk5!igem7e3$J$*Z67 zc1l)~LQdn~^@r5M6POnA87uTpxnB$kRE}r13<=ShZ{!&m_J>LRndzpa*z^8^!biOW zi4AO>`e&CaE^wR_-muf5`O1$pb_S_6%hyyqD){=DNlGSvn)0uW_ujLLoS2mR`>(|} zdHHl!E|r! zfv@}LIWWtVdt}{KyWpU6;BJkv1M{4qsa~l(7ZTVUxLA&_XJ{x@Ua(3lI4kDZ)6c~{ zj0_A7|BoED+1Ar1beMsGLAAs+q9i4;B-JXpC^fMpmBGls$UxV?QrEyN#L&XZ*wo6< zOxwV~%D`aSXA46V4Y~O#nQ4^_Mh1q4x&~&thUOuLMpj1VR)&TU4c9ihS%QMd)78&q Iol`;+0L3jp{{R30 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-redo-ltr.png b/Media/Themes/Umami/Icon/actions/gtk-redo-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..ab73631109595c31b33c4d71ca04bb3fe46740e7 GIT binary patch literal 960 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}hahdf;zLp+Y3o$Q@094K=9|MPRoYgewV zmC8QqCK$Mib+wb@nvf~myu_M19(bkLHGA)G;4Yos%l(%n@`r|q$dpHmZj>obyOpHt zdzr;}W2K4l%$?VL)%=c~*%HJRXK|+B{mlFC=T)C)`2V=$XsBTK>fhy)PM1Br*>m*j zH(TKtDQj+qn{QQiuS{?ky2U5dy*iQMJEP6lL+09pk^ogN!^6`_w)0~r2THEcI`Zx77b_ECHJVUg&B9tWd? zCOif+7cB2mU~^d<=q}`!k)|0S(7pONgHG&T!=5e;#l_3BZr%|}5OUOD>)F!~_+Y^+ z-(4zRPR6LKKu z{@am(hpSa#6(^IK*-xe`1`G8sy{~4kW74?7)0wiRbgR=%jl`^~jd_1h9jQFw%hAHz z_@8m%(zTM(GndSm6?cZwV(JASuM9QD2A5OYJ~%Y8ND5{;=+vCK$&jaR@_BXj-3{G* ze>&uCK6LO*+ z_1Xu%3sc>sKIK*Lr?4N-^wk*>bIkT!{-t{F+}~l*>~E~w+iq;1`rYPblU2e>u4ng>KXJWs@t$1s z(qYQH*_)OMI2_TCmrQZnF?-D&{=|aSY>#(?yfncfB&v+z3jz#{r7|4S}`ycJfFqD zz@S><8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$ vl+3hB1|tJQLtO(iT|@H_LnA9Ab1Oqbh=yw$-7Fax7#KWV{an^LB{Ts5+^CE* literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-refresh.png b/Media/Themes/Umami/Icon/actions/gtk-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..1af6789278d35af0a65ff002585889d85ea410b1 GIT binary patch literal 1495 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq z7(Bq(?PRtc0|NtFlDE4H!+#K5uy^@n1_qWbo-U3d9><@CW(S0%N?h|OG+MhSG2}@} zaOIzpnx4JX`GLpo9U!8yMjB$GU`QNtZtM8pI7Ss80KSofnYI?o!bM1?3 zJ`2AJzhgc@D7EU>=`Hp@-7|OpOuBYvapdatF1C6TGOd0HedU}tgY)r)m)-yB+T>T3 z9kyuhpHN#Rmle^WvYgdu?aRNDuU?i+ojW1+GPh-E?Sj2Gc$c5w=IoW$T3nOijQm9|HNEoRz2HX z@a~hsl&yDKHr*G{b)FD?o4L?F&fvG#Rbh{R#}5i${T}CgX66%jBY!Iu_tbydoHyNA z({|cw=CkoP&JW?OnYA@>Tkyk^KZWP7p1t;{M%}VZhAZOv4t37-e}BUHEUwd1R?F6|9c*H zM&#>w|NXWkX7aL23_CTZtk}VGw(Yin#M-^PJr~71-tjN!Y(zm$SpAoeZTgQcOFd>a zidAjDX7^g7%zH^uc0kX$ppg6A$GfZ*7+G&s9cQ#WBNMgv)Ix^7WcjrE7tF4&x!Et@ z4xd=bH!k4XP1EB0Q!~wa4vMP0-<8SYwPu^e-R4N6oqrmCertAKE%&_Z z2BVC-^tVHg)UQSq?9|yIE#}mBKIh(V(S9qN9`B;=MUk786YjceY|Q#xYJ&-M87tVvGy z&+hB{X7nb8;qS8iD=f>;l^)bz>wKY=$(mn$#>R8$mG3j=&9W9b)2(5rWmU8?>2`JH z;v;HIi?(j{W8Gn5e7T>AckbdBwtEW}=BAVx*#(+L{S@lu-2PKLPi6CL9U0X?E`x=$ z7TnOuPT10yvmrM+>70n@Nv`Lj5)!+)r><=-SewrjweCKftyJvOsfik{)jxVNXHBaO zPrUOp@nA~A6tV4L?D=&yZ8uo{1Qdu~$bH}PCS0d5?_$!mu)Ag~bwXd~|I0{--^BZD zSN36tp8g2NkMsBZ`WN|M(?y{DYW%Cl$xCGgWR@F$YMFWHr`sJ?^#k9E_T1Z{7b3N% zV&?AazY2aXWLSAh!Mf<*y^VkF=d$kDy2SkGi#12ur&w@sW`-JPbUZtoU#soTmn3*v zuv?Z>=V6D$=Ihxftv`G>?%-XL)xq#x_hF!2zWmxnE?#e%Pf1CwHcf6`t}$!oqj%og z-#^?IZY-R~VZ?DnO|D2~L&4>HTVgBXJ1Y+9ZIXNF%hnSis&pas<*Bu+_coR5$3B*H z)8YIm^r({M=ZQ6HokHt=*BZvYX*?}(B>c{sMRMPC?!NuMcEj-_uV>3=FCzt`Q|Ei6yC4$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}m zqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efk6^vLvVgtNqJ&XDnogB ixn5>oc5!lIL8@MUQTpt6Hc|`>3=E#GelF{r5}E*OW}Vgm literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-remove.png b/Media/Themes/Umami/Icon/actions/gtk-remove.png new file mode 100644 index 0000000000000000000000000000000000000000..51323d7f9ce43ce709794be4bee2429a564e0e29 GIT binary patch literal 394 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}gvJ)SO(As)xyUf9Tc$bqNz;eQn=vju6b zDJ;hpEKOxO!k{B?(TH7V0*|9__k@6?{URkV*6lEwWPh^vYsof#Cyvw8i_U&4c-^?{ z)7pjm-`)QIY?VNs-f`K*-7G!Jay)*8GWp%L-5rq0@P7Trn%W5mVs{*fnQ{0@f|{E6 zyA5~Obf-^c<9Yrr@UQFCp8|)H&RE15-hNp8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp1V`N}7FVF3!m-$ey~eFf=?kuQ?>IAiJVFCZ{nR#4X6K z>P^Y2j{*sHq?UJsROS_A*EHtl6=bJnq~x@gC)DN@bTy@CrbJg2k-8MfnZ?c1-P zzyAOKZ@F{#c?Jds^O7LHUw;w-#{_^$Puit(XUF$@)k3S5W;v|d@rX^`Z%xCB9YNu5?DHlSMYz<~zj(TD`QGtFj8>72ZL;px1^_vhTSSWwL+zDUVZHL|E%T_U@t zGj;ZQ4hGjrbMgcZ%*e3L>AbrBC`V=Dq310}OzfkRtmjlzEpTaa5Ns}y*)40Yu{fZ% z@6p<(tv_CFne$dnLu6l&bCye}bK=!?ZtDd1D|Ib8zSw2`x9$DqRz?p#OPB0k_nPy9 zud1ULTaRn7RO*EGI?d1Tzm0XmXSdz+MWME{V zYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv?BXcW5 YLx_fJ8{I4!7#J8lUHx3vIVCg!0CIEr)c^nh literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-save.png b/Media/Themes/Umami/Icon/actions/gtk-save.png new file mode 100644 index 0000000000000000000000000000000000000000..747686b650a599fcb879f9faa0468de8574a7100 GIT binary patch literal 1109 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U_XPNaxH2#>lr;O!T%40vkUe!_VQ6@8UUNuZL3TxVOip7sh+B|d z)ti!49|aQZNGXQEB+MEBaoUJWb!+BXDrYz*k!6xh8r zxMyofQFX+mz0uPS#!NpPH}hEBtm6rDP9@AeoizVk@`7{83ooQEzLe29IeY2lyn^ha z((IBIS4t~$N>^SjuPm)^tZQy<=6yi4%`N?N z<}O^fanshFdrw`ya`*1tCvQJ~{QTwXw_m^i{{8z83>M!Nddk4Sz?kIi?lSoy^ZjiM z42*%EE{-7@!L?^YgAY51v^_k!bjR-9zcUp@ZiqFpmzQ^mYKyc7Nj+h?5r5`Q+6>KK z&y=j6@BG2>bA3wm>4*CGvP2hF9mxqoEWIzM4}%sHXaUR1W} zm`PiQ!`Ug{7#`{N{p9SJaXC(+p+V2!psk-Y%M!V20mo_8XLYY6<+2~yEWvncG5g0$ zD&A)&MQ)nqCtzy$$XrRS&tck{ zb<@i(!_d;}>yHRJO*(%+bg!+&6Z`LnXB*GU-yHwwb=T>Y<*S|-SjgzfetWN${(O44 zxmme>&h)!ag8WRNi0dVN-j!GEJ8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc zVDJEAx0Bg+3=9mf0(?ST8Ni^UtCfL)p`)u6&VX>ik|;z^UuREWXWxYG-u|xc-j1%G z_O9;sj;_|u?l!pghH2{>r>}3Cv7vSL=8mq`mHV%+I&fq4!JBIi-CBG2_PQf?)*rpQ z;n=;6$M0`C@nG}Ghg(iPx^w5w-Me@1-Me@H{{06J9z1;b@X@13j~_pN^5n_Wr%#_f zd-nYK^OrAQzIyfQ&6_uG-@bkS{{4p!A3lEk`03N9&!0bk`SRuK*RS8cef$3X`;Q+# ze*XOV>({T}zkmPv^XKp1zyJRI`~Uwx*N)}@1_lP{k|4ie1~zsM4nBT<0Rc%V6+L~^ z-l?;f{P^|z&!4~l*0J6QWnf@nO!9Vj@omUZNM&GPxa8^L7$PCbdhnz#bD#k0fvU%C zhHe~Zl)5G6)XU77!yxXb^XQP-=h<2e3=EB#Obp2iH}cyV6!xzdS=XPNHS5}!%YPOt zoc}zlqv5t;pu&6QrU!f?9ju?rU*tMCsy|?25#i`~Ag3|GVc!PsfD4B1ZxkFFC6tmr zGiV5KKQJ;8DKS!4GRh2SP!#;M$+DrT&wfMRwX>lPjN3X@&G=-^GR?)+f1?>07#iv?zqXc_y==IL zfq_A_#5JNMC9x#cD!C{%u_Tqj$iT=z*T7QOz%0bj!phjx%Fs;Pz`)ADVA^L3Llh0U z`6-!cl?+A(hK9NZX1a#vA%;d)M&?$Ah7b+cHo93dFfd4hYzWRzD=AMbN@XZ7FW1Y= e%Pvk%EJ)SMFG`>N&PEE9#ynm9T-G@yGywqmeMx2j literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-stop.png b/Media/Themes/Umami/Icon/actions/gtk-stop.png new file mode 100644 index 0000000000000000000000000000000000000000..969d7e46b03cb6c0658412c95bb0bd6c4dc74e4a GIT binary patch literal 1375 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zxP?KOkzv*xkm+nm-tI08VDQs{-7;?>@a*Y_~cxZRI)n=*jBwRr@~Mov*Gum)ZJbzx{h|!^Rme*!6A9 zE9VKg7q{*>zx)w*O?m(M^BP8vDo@z|(b7Em*shRi-X^08zxi#;w}{M}B&4z2&(X3@ zro5;)aN*Ue9p5k4s~$STbzWU<)swrwzc0=`E45{9RO_~>+KKV|WWFu+PK@5dVQ!v( zY_78V2iKA?8}kN=@vh{tw1p^ z?^ergOUo4)ow+mlzTKAG8w{7XWXB%sXfoSXaUog)11abF2>}@v7{FV7@zb?J&k^# zr#*o$aPFZn4@G0`i8srQlGTmhm0HM6Dn9F>9-CY}OGxN~MLOS^&FRS++T4{-KIsMo zEZF5Nn)q^)lxCRsLbs}Y>(}!)H#cW2J-kZw=bxV$N#APCV{RcKC zZ`hdfvhemKRjo53E0@jQwLbp1L%n@oV8R5^D;rCBi}Z}s9xTti93U^)s2vz6kSsF`rwa)xrQnDcLecY8vADj{t)?GN(b-H!8pZdP13HlW$S0C$l z&#&5*&zN~x@!R=jR~H$Yh%B2R5OP{LI*!kFZgJry6$!}*=NKMtXWQ>qda+KbuJseL zTNTL7%)(aoYjr$589*VF2!KtX!nWCiZ+mU}y_>uXe@8zvO zntyzj-R5fdw0!5kO#)}{{5G5DxuoJT^PkS14_v+~N*ydpQ!834dMlbwC|%myV)S`> z2dB%0`hVM>=x1383afB!eayhXpjzS@QIe8al4_M)l$uzQ%3x$*WT0zcscT>sVrXGy zY-(j_rfpzgWneJvvxOmwhTQy=%(O}dBLhQ2T>~>+L-PmdKI;Vst0Ch5E1ONa4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-strikethrough.png b/Media/Themes/Umami/Icon/actions/gtk-strikethrough.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0c115e905091c0c354644c02469c261c1acf7e GIT binary patch literal 948 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{yo-U3d9>?EKj`s)-lsUft`Mu4%@8SlwH z|K{5hbI+bUyJf-JYy*}Dj_vstDFy`wvwLo)&P)5gi9zJZ?(FV_Z@fNAKWufPQ+KL~ zbe;IC>?rc&c?8FoDXo4QpN<{AzE5LST71{nCGCbiPj(lo=o_BAucF=cH=tCN!Qm=H z=;ehgtU^ND7yZqe+`DpB-@NO0KTq;zFlZ?G8~1v?wSr63m##-bW%JjZH(mX_j--9-DY;iCI6pqNZbR48p8niEr+2T9M2O7!`scuA@7|NIXSif;+d6O6+^5G9 zT%30u**t5V?RgQcXDO#wlr3a==^A+X$cqK+4nYTO*w_6HzauHRT5jj|{B3N@k~XBz zNLau!#ppo{oFhu!N|bKK-a)h*T5{q(89{t)XLCI+rYrez+l>E3quqQ zx%nxXX_X8{28M>Z24=d3<{^egRz~JlhDHz#&m&`&FfcGkf@}!RPb(=;EJ|f4FE7{2 g%*!rLPAo{(%P&fw{mw>;fq{X+)78&qol`;+0AZz=(EtDd literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-underline.png b/Media/Themes/Umami/Icon/actions/gtk-underline.png new file mode 100644 index 0000000000000000000000000000000000000000..fafd4fbe482ebdcf9817d499857b7ec8e8f72acd GIT binary patch literal 1038 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q|ro-U3d9>?!a_Vow}6gmF?`@Zib^YXpi zy@Q!#1qIh^e_`FdC}vAupo`(8B#$i|i#IHrHql9d?VyJqSNDtThs$DH6)uXWX)1?Y zlSnmtd?VuU8H>;F+_`n7WM^ODcy-|6yyADq-~W66km>)fiT5M7{Clv~cuuGA{bJXp zXZvld@7A*yt8`04k$D=wGbE`KSO@@h%i-7Y02 zrwe824qToI)1C^Sb&K7}FF%?Xv!&OC zi9fwLU8huH$M+|`5(nPCySH$|vQ&lB(`Ihp_Au*f6N6SqwR>n}*!u*5h5CZ0^CH(3 zSY++3lRxz7kSbfF&+QkHjA^yIgM(8-Jr_3Lskf1Md?)Met{CfsJFmWymFc@#((G|; z^_gE~&-XA$I_2Kkvnr(Wvtdv9VMZp?hcl;4{m{d9{6x#q2PaAcd@mfcWcCSfS5#fC zt*>`M?i+uhL&>+891bRj^GDkjh%7RGApi8HWu;_Ox7FpViD!Hpd#+5GE|Oq#%J9P_ z@#mb^CYhX#@IGKKG(Du%_quAzlC*Dj%d~<_rdm&z&UfF}6sZ&J@$t@`@`uN5rt`D} z%Jr)!oIkhyxY9#4hIt|BXMdc0Ht+LQOUrJn)!Xwn)bputIFs1CDj-P6cLmfh1>6MB}=iB!z{2s|K9JDNilc7amT71k(y>q%- z`q}U8WIV&5qG?b*x6~h5#D)YRv@K69P^@-W;# zxn=XIebL8jHftqJ3O^uJRen7-z)5(T*R2oSn?){)$;#VGasDi2uu{-w`0*h=GKl}$ zm2LG&F(PMv8+iTQJDp$W_s(fon7cPN{oTFIkx9U*iMxS&rqaAK%a7mXmpi*7MyP@5 zpSStDbJ2`TkNiKaJ}brH=gF&?>lh|5NHEx$F6;U~ua-IXj+eovXeUqxQ!R0gC`m~y zNwrEYN=+5@$GBB9-*}{;4fdQc*H$Npat&+jW zz|c_Fz)aWBJjBq*%E;Wx&h*rdD+Fui3O>8 Y`9| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_-JULvAs)w%PVvo=b`?4Pf3tj?y0mp+ zN9Xoqo^!00HWq12=h*7#)xpphp!^`HWz{OJAV1rt9Stp9GJ*;g0h*hNGDBNLSXQ-U z+&w1I#h<6`WsyUeN&9Tx z)p0IsXB{khWn^*Z!rr(?U-?CR*NV*kZtUETl3{#TRqe%|3p+s0yYU7>h)pHrf!@cHCy;e5PA6{W{*PA*ZMNl#`^rb}v#^(*wMQnp-_|g5fl`&q&$H#T?O5-%HW(h* zT^+`m#rh&vq~K?JL+>`zjGz3=`gP;a1l~{i^hdYl@WZoTo82AxeZDQvUlf1 zMV`wMp0d+%ru27Xm5Z^j?zlIK3k4Pw-rOm(tWNst)6M(eZm#!dd$IGp&7Pg}-ugL6 z1$N!q(KpBAcwWk{c%k2Z4Qj%CoUFN_7& zi`N+G`ik7uNUNW!<28+C23PV~hD*;_x|CNPo5P^6+^@{P+D0W{`Kw!}tUgcwyw#Y& ziZP_sLi}3M&533PR|~anK5i7cxp=>1U&y8SntcoIo%>LJ|DQlS^96>8LsAp!W6Jy< zJ}Z@E=yXx3eaC!XeV^QBiD-?R+1_u~mfN|;ELp1PH<#g($`hY5iRo5Ox~F(i8!5MOzPXaZLjx*DDF#7?pGAG8=8pzu$Qc7-Z!(Wfo=3(kVPIfj@O1TaS?83{1ORMk?g;<@ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-unindent-ltr.png b/Media/Themes/Umami/Icon/actions/gtk-unindent-ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..139ad7036d70a961e0e38effa660777b5e384ef3 GIT binary patch literal 840 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXUY;(FAs)xKhMdm3>>y%WCfB_rkc+F6 zQC;Y-%sz%|9T(Up2nd}p+0ePLYsHEcml}RB-BA8$@3%zf1(Rs23GYc6vCkXsTJ(xP zjGA`b_?zYTJH_b@|7E7h$<*5Xv6_AMT`rT!{PXqI|K1$^dn4uhU+X+AKKqiDg`20} z)L(YFL$8Tx!7hiUrUfyKEm4Y$r*;v-p<^4Yo*x&&BM*GtCtsWSc4 z{kY?6NGbSI1H9SwLc6ueH;d)5AOLrcq>RHm!5 z*kTe4cpm(gooeaW)p66ScTIekkmk!>Z<`)6?7QC?t`IaYV)Zi3i3aw92NM|n=N?~U zdn2bZa@G<|Lcl}u#efAHIG9Z#@c z+r6cxJ0F^TSoXI{w`$AjCHy|l3ic&;t!}NqrTx%%9}j<5$!~}6CY;;fCEdS$-0?dD z!-e;AU5u`(um0j>Ff+lk@#eo*?AQ15p8tGkl1u(t32nYbF09Y4Op@kfxD&0nXS!U% zmCUsZ#T7!k*DKz*w{PAI&!s`Gvo`2xf6L=2+Ii>u<9iqHhG@L@tede>?#-J!C#}rq zetLQS@}Vbx_IxNe(?0Y3^PwcgZ7mTwoClROy;O>(rN%}~Gu@V3opbx!d>=LAbI&$S zuCX)M%$<5{@x>R{Z{B?W(kt0a@;`%AFmJr^!}-$~7#LJbTq8sH%t8z;tc*>q49&C+46F1kvz3GG++_0|SGntDnm{r-UW|)v#V& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/gtk-unindent-rtl.png b/Media/Themes/Umami/Icon/actions/gtk-unindent-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..6da223e27f1c96b515f761fbc7cefb4ec9ee7011 GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GX5uPrNAs)xKhMdh43Y4%d{}HLsvdYBK zO{^?>{t@*Hp~=}BKdKup3;4!sk(s>MFl#OUf@>E>(UieMJDIc#D}7#Qqi_V;gjaxv}X;wN8j zi7+}pxNx=VX!7zeEGYqo3Ib~nOfhbEm?$v+B(u3yLCvSav>mghqd#-HFbg?u-M8xa zZEFGDcE+9O8e<$783KHIgg^P))pxD=^YGX*&7?Xu5eLBu57={mehcGV_xe%U#urbQ z!h*#`fD8<$HEtez)NA%LV24jPGBKzZ$qUEO1NrhibD;zRDs7DgE!hzj$cDC)La5 z!V#ooeyfD-S%d)dx%wO>h5|krli6o4)I};I+AEHpW#SWp6JfmmTT_Enp=m>_xGP~&wYUV+tehnnOyr1QhGyCZ237_J(>_}mqG-s?PsvQH rWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efq}u()z4*}Q$iB}6i#Gf literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/kfind.png b/Media/Themes/Umami/Icon/actions/kfind.png new file mode 100644 index 0000000000000000000000000000000000000000..d543502ad037a7c4d11cf1f6b0468f2ed08d6e12 GIT binary patch literal 1414 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h49iA?ZAs)x?PN~lc4i!0mzViLIR&EiCJOpG~jz}J~H!z&VsU-YF{?!y$B_=&3uOEl){}?KEALD%V zNdDi#fMZDie6lddql*oqr!~y_Var7QFKP z^>vY}^>uU(^(->%WxV?FgkpoH*xV{jsb1UsjWeddy?M3nmAvMSk72hDd8k~vzUgJC zP1!rQv;d{d#Tr~vtcMtbAAhVk70h%j)im|jU-oYoliUkqZ-0~hw@0+)aM1Z_;oFkF z&s<=n7hUpt+O(tI>7C}9$yq_yu6Q@D`1JU}lQ%c~lV_gQjsE(Zf6skxhG#PwYQA0g z_Dnj?KlkpZY@v(mR9)_NpMK`EBbQ0)>zuxz1ydTc#7eS)!u0t(w;Xbq+;uta2a&)h;*nDytqi))mSml_K~_!yj&rnIOw zDKMQEu8w1Hc@pZ&JWs%GQiw2{>~Th+$YhSNJ#{7yIxp+`DN1V!yj*)YL|^Ue$apM z#1m8W*Bjc_oq0Y#JoKfhWQWcFe_S7fr#B}mh$0Yw) zvOs7Jr_2qT{dDp)-`NMBe`Y-Y`P0tN ze?2`X$=Tfb`t?RngUkhPh7DyUB_*6nTs<2@A|r2lGFaSsb@yMSxA$qeCpTV8U(0XV zx6f|Dl&t6HzN;U8Snzb>`o4QVq8-i&6kM*GA$*vDVb<)~^MzdwyGviociDfRpRKv^ z>z7}b4n9bEdQtg)&mGPKzWsXhx6Ya+_4nT1>gSeo{mdCA1Zar7d-G<`or@O*nHg?f zxw2))mNS3fwtba06zgt0o7TL&{QaJfPsL-GZtr$uBbJ8rwTUHw_{pUn+xR$f+^ z_4fS#^uKKGkN#gcJmpad0|SFRdP{kVo554k%5tcu7Rblfmw*5g_W_X zm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn3=MS+%ybRSLkx|qjLfYJjUXDHN5(8+U|?YI MboFyt=akR{02)4tCIA2c literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/kfm_home.png b/Media/Themes/Umami/Icon/actions/kfm_home.png new file mode 100644 index 0000000000000000000000000000000000000000..1d654650541eace316d850109a8f8ec79e084a20 GIT binary patch literal 1072 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_MxHK?As)w%PWI22c9l3*Z+!FamAsz2 z7LB_)ZaJ;Wa0zW(b-`nAK|{l;6G^ws;+-mHd~GVaf-JsJoj2q<{SKW)-tWePn`2(9XZc2+CTN(oP2kiPJ{5~4fkH}c_aSk zUONqq43YUq+>ip4t*h<#diGHhp$NYg{_ z=~cH>s~cB)vCi~pd9dF%Hs$SJ$(++kPd=sI@{(QUQqp*y>Hbq+;n3BUoX7hTqs6}R z-%J1eMSIVOKZSl*%OZA{_3p{s6sVW{CE$|pf=|mhd)eN+bu{YCjkGac|LJAJ4RJ%{tfmS$Ij%N`pX6RtK%AO11Ch zx`l<$h;;wm{<1gP{*g|NulHpM`TFLC3l(LKznrl)jQe<@gwOJsH6I#|{`|S(s$!ly z@4Gp+*55NKDsC!K~R-N%yqw&LIX3m5O5j-*1SsxVUa&O#xS8;FDTDcn* zfvid!&KU3ntrR(#BGh=~v0zVMU(ovNGiS}Z6~4W~rpB$*p>#9n{Y6KnzI2+JE@59& z@6G?_8V{sPOE)W!<}V^4l9^ALJ(pR|uWF`96HQ(#!hN|I%+*8BWdb zvlsn;{0I9h^)Lr1Q zhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efq}u( L)z4*}Q$iB}eRSDj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/leftjust.png b/Media/Themes/Umami/Icon/actions/leftjust.png new file mode 100644 index 0000000000000000000000000000000000000000..224d70023345320156b7f57b56361d1cd02092be GIT binary patch literal 684 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s7XPZ!4!kKxye%Yt8=p+xlL(soX1_(z6=1HgdUd=gd@`Y8CYD zjPBN?LuVKmWU9A|T*%t1!W6Q4D#Ieq6<61p#GcnvVoJNf{(|$oQY1?z^CXuiyPjUy zYqlV0XN+WfiTr(U1_K^v!Fi%gNg_-RB?mgZmIf*8s?d{WIJ2fF)7Vq%pcm`u|i_Tee<#d z7haZZc{Jm`qx=D%0G+rsoh?dD(Ip$|ydE`mGTh7&E7NodndjV)8Y%C8{_N+uSDsHe zU!W`g^Uutg)@SE_*;jQg!J_0}&Hb4^YUfJ4G8bje>gb=Td6-8`sZa2tuv3LoNBm&} zo6AP*+j4o0UiMsnTekoA-}!<%vv1d4w@(q{O@E}6@REUnLAAs+q9i4;B-JXpC^fMp zmBGls$UxV?QrEyN#L&XZ*wo68NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UssnsNTp5snN$L`l)FpXyF6Ga?R5%*nDf!mRnP{-JZJr_WXShmK=Pv^x&gaM;>oF^>p*;r<>0_-E!vX*3-|oo_V_U z%(Ja$o^LzzY}?sq+s{4Qec}1;i_iC5e7^7U%LA8RTz>HW|NsAHD>t2FU|?V^3GxeO zU}R!Gb6`!zBL)Tr#w2fd7md9ewr*lzV94}zaSYKopPV2e)6hC~D(h;N)jcBGS5;IZ zH{Rf82@*=+y2-jG>y(z(DxpVSU0j@#wU}&go jV5Vzm9%5)@Wn^w;Xav#lJThhpD9Als{an^LB{Ts51AWH* literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/list-remove.png b/Media/Themes/Umami/Icon/actions/list-remove.png new file mode 100644 index 0000000000000000000000000000000000000000..51323d7f9ce43ce709794be4bee2429a564e0e29 GIT binary patch literal 394 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}gvJ)SO(As)xyUf9Tc$bqNz;eQn=vju6b zDJ;hpEKOxO!k{B?(TH7V0*|9__k@6?{URkV*6lEwWPh^vYsof#Cyvw8i_U&4c-^?{ z)7pjm-`)QIY?VNs-f`K*-7G!Jay)*8GWp%L-5rq0@P7Trn%W5mVs{*fnQ{0@f|{E6 zyA5~Obf-^c<9Yrr@UQFCp8|)H&RE15-hNpO>_%)r2V9fTR3G-g*YFfdQ{ba4#vIDU1icScO8M8kgT@8^`y zFJlYlozb+lD=8@`V9ktef+8*j1}TZLoK0pC;a(gecQPDfIP^r6oy4^47TjWdsTOi6 z?6TOAS!WJ8B(rN~daAEaOMADs`26E?!^-_???S3(l)gR6l$6?CLMC8Ft=L{q<|t#;^@x0vjW;r+>c| z<&x5Rj>*7k*3-M+s~9EZ<@cL1EQsKl*4yDx8ar{N)O1tbV=o9=^J&Es>m&b?e-{<@26A(AF=0bE98k z?RKUcuWoPV$+{VMdf)QhGk;Zg3ETG<TU zG9EAVRI!mct~md^GRMY<9v7Ry(tm0WOO&GDN6vNCj&5CYIrCSQ{erDu>*l=jJYHC_ z?zOmFwspI+>hrCQ9?enKp{{OHIyJw(9hZrF?pW<^eY5k8R_yWabjuG>eCBBmT^+g! zJ`JXJZof0$E-n=e)myZP>F6UKdtUzUhuIpw_kUCR6tr}Iz{=K_6W^<68@RNg$%6}c|OQV@h_;~gem&JeoXZ3I4(jp56&BncaX`HLqC7)sqiBQpEpK_Yf z>v-q&A0g3KjzzK@X?$|#%+~u{txKCdxji`2xUN(NOun({pqtcUp0MmSh7pS|o?3AA z&$CuG35WJXi*HxWFcUXLbnb6=U+K+w*ErZ$5Z`f z&-?2c(;mnxDy}Q`U|?WSEpd$~Nl7e8wMs5ZO)N=eFfuSQ&^55sH82Y?w6HQZwK6o* zHZZUzopr0NfY#u>b%7 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/mail-forward.png b/Media/Themes/Umami/Icon/actions/mail-forward.png new file mode 100644 index 0000000000000000000000000000000000000000..33d884326cc95c6dc1ddcd46c470080420356fd0 GIT binary patch literal 985 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&j9Muu5)Bp4VNdjfnyTp5tSf_$Te`G(8#wbIj)Cr|9n%t)OzW75G!^)>nOKlbGO zI#l!fXxs0T6GFp-lTs2=qJ2`*lF~9#vU4-@3UW%ziz}l&(?TN^sMT34@LxoOje z?Q7=m%4XQtXn3fQ;qc*uM-Cl4TEcMR#EG+K&z_56ICt*cxr^5>UcGdsp5a;}!>y$O z_phD4|M32UPKF29&pfz)=UFeqv%BY?J$v?Q0>i6UuU@}?{pQTfH*em&ef##^ySMLm zroMl2@%`IZ@87@waPRPk4<9~${P^k0@=u>Weg6FMGYEYBGM(Ye;m$8#zI=WC;Op0~ z-@bkO{`~6q@85sSVfpdn$In>|KSAL4uh|U0e*OCO`{(c9zyHi(`19x2pFh9<{Q2{D zF2lcnfBw&7_`iVt|3a?+iv|8K75%?l_Ww%d|7-OAuQmL?-t7Nom;YPb|8MpAzs>*u z_Q3x;!vF6{{J%f@|Dn?VhsysSsri4R^Z&{2|EGHYpPT;w%JTo$*8IP@@&C=u|8H&i ze{awKd;9)BKKlRh@&Et-cWE^QGcYg+mIV0)Gcd7p8M|cGH#W6SpZoB|tJjHQ;d>bv z7#Neh-CdghY&n04fq_xm)5S4F<9u?$0<8y=9NFgxaL!CCQDB}pA*{cPo0pG|k7dyT zhyMoRrI{TqA)BjW5*Ez24=}iJU)>;VTO^l~;!T+qV$Yv5v&hNG9W*S`J3C2$voptW#iF9UYP`V{S|of9-3qeab?3;nu*Lfv4|6Cg-pWZ7SULH9>WU@N;ZeL( zGR0awI!tD}&Ul&jOjIOnipccq84{-54k|4U3m43oBqb{(G=I*t(4`l3SSCIYU|~vZ zy|duOj~_oKsO0lHmQ^qq8yS9HAtw4vwQV_f#)d_$cH7(9-2B+&+blRTrhH5mO~3Hq zsNT5+3lFy0PBM+)SkA(*NhTAF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjthZq`J8JSxd8bLHX SkBnIY%2A%KelF{r5}E)MIM+h} literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/mail-mark-junk.png b/Media/Themes/Umami/Icon/actions/mail-mark-junk.png new file mode 100644 index 0000000000000000000000000000000000000000..053accd65874295c38044b79f6abca37193956b5 GIT binary patch literal 1488 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?3oVGw3ym^DX&fq`YBr;B5V$MLIEqjN+;C63oWe{-f}dusXa z3(|X?IZaikct1^Iz0&ZD;loB6nz`KFme2fy09C#QYR)qMUx_ka1m$;|)1EB-s{ z|Nh<0tqMZDYbH9?vxzV(&r`Q5dw=Wm=QlBr6J7b`>)xweSg=(ta9x&&ll%6(%7rWT z?3q*(7g}@kbEf%)PZw6dd2_3J_vY;U_4@z9jb>g5U-#wpxpjYkmQ*?Q_w~I9(ONnA zWXri*+kPiLzjtPDiQE&1J>OngpJ&)xxzygG?9Jrkg7;p9$JJ#o&Asj8w~S%M%FG43 zcY8B5^Rrr1WZX|uEZu(X4C5N{?R)qAJU+kf#-5VQ+0yfbr#*h0tTEM{qcJ!AqfP&w zQwtSKKU~-+rLed9`n;3YRYlW&)M$P+KX3Q<51S$fmm)`Nm+S9j|Bkj_Zp>T0*odz+ z-8OgW5|uM+qp#omcWJiM0V&N=nS;gOOBGo18A@GUr*W`3Yb*`$n&{EGnsMjrT_U2Qg&!YTUR!_PBlBfURn;y@xqXZQp(`vGyBzrR=F5}~I^Dl^vHoG+ zyC-mb2q%QAz4FE<2rl~ge; z6>;E9U^H9so{7Qd@RW-gJjV-Py#C!cZCV)5;RBnRB-#$%+*}_J7kBc`&eWdX-bo&J z)TVkVEj`#Jy4s@lm&o70;rtAV3j8Z}Gbp-jS+hpz!spQKr_z=)>*}s`^75?x>m+mB zQM2{htXsFLUcHj~VAJoT=4>=`!Nx+tjS)SoKb}7F__|w-_+(>-dCz^zYPZBcE6R%U z3Jfw^ze;36a`NI9C&hDfezt!5rhYQT=t(G_^=#FtUYm-ZMk!4Uva|bS*ZgsI?f(B| z&)W90f6B}J)0wnDXhm)H^S-%PuTJ$}8+TQ1?YecsU%&S9@bd2R_3fS*#J1(ylh1s8 zj|<*(D>KZoC|vdV_q~1bjVc1{ZH<|M8`#AJJ}N%#x7)R6XX;61?OC(M^Gtn}pIPh- zylmpls~n)iRaN}p(}V5q{dNDg-Zu?Cpiv+z!9M4Zvtq5s4ffW?1@`Gb^jhaX|JgK8 zo`LHGL-GL@1Ku5**ZVx|p6M`AUruAi$}h!tnsz)s#$4oZt$tU-zUy;sZco+Vc+1ZE zzUbO_>v#WVe>B%^fA9G^P@1t?Ng=o- zH8U@@h>Od)C^fMpHASI3vm`?yBqLS9-P1Qr1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1` Xf@pXi8MB0efq}u()z4*}Q$iB}mD`IA literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/mail-mark-not-junk.png b/Media/Themes/Umami/Icon/actions/mail-mark-not-junk.png new file mode 100644 index 0000000000000000000000000000000000000000..3f89d1960476094884730e0e793c4e3a3a43cbed GIT binary patch literal 1395 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&j9Muu5)Bp4W&OagpDTp0*~?w%&N5(pbYLIi8;N+1kmL1Z>WmVtqxySJ&kx2dPM z#l*y*r?+Vd1H%LchTh)hxcG?03=Fw>seS#8ef>>6eT@?*w)XTjPMFZr+t&y|6DPL9 z8O<#ft!>r4eT}VcRlR+UJ-rPO60E(kyQjXrqo%j7vAv_Fqq7#GtE;;X!szR7`t<3; z<0lV$`x^WDn-?sccKOPM-oD1`*RQ;I@$A*Bm%o1f>g{X1diBzS2Y0{!_|ew{~+VrmJ)4LZgoW6vCVa1Ah zt5z*svu4qT4a+udTD5ues?D2MZ{NOt=gy70c5T|XZ`=O;+YcVvb?n&w(Oid-LACTlbyh?%%)t;K7}T5AQyD zbno%w`%j)ceERh9vu979KY#N4`O_CKp1pke?B&bnuV24>^XAptx3Ay5d-MMN+YcY! zef;?T6K)Y??5A=Bjm@ zHy=27^yJxd7cO7D_TbT@$IqUo;%TzW?<3%lGd;e*FCP`}gnPe?Z{x-@kwV zLBTe+i>eF^42((M?k)@+tg;>q42*4_E{-7@=aUl_@N{TZyWT#%pj#?R()x#QlyqjN z&Wkn26ZWNreONa2^|d3F%HBIzUaZWTxhB@K_*owdcgu#B#`njzJh^ZqQdqq_uh(4Y zNn6+F*-Mw@-!dtGd}rm~xtr70@^J?>dac;)e=2hKrqW|aICZC9t(?jFbXx%D)F%u_x7&cS$X^2z8bd$ER&OueB)KUd~4dasZY<}+a}Gi?d#Lc45~B!mba>0 zI}^2a#Y&a>GGmWLJN4%?YaD#^B0b zah{c?xz_U8{w+`6D5M(}e(3V_Jgudn_0<1;b3;wq26u@_%gP@tEiJAliE>vGTPo&G zoH%i2>(t(c8tNLD=^C1c e7#dj_nOhkeK{Py%j9CIIj67ZaT-G@yGywoKa-h2a literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/mail-message-new.png b/Media/Themes/Umami/Icon/actions/mail-message-new.png new file mode 100644 index 0000000000000000000000000000000000000000..f810f7c44a7954fdb654d30952cc9743cf6fffc6 GIT binary patch literal 1102 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_0iG_7As)xiPW8`_36(fdzu9=EWbEsA zX|sKVIkIM}ZB{uPzqzYZ+DvIsQ`LmhJsf z-#060_OX=Rk&AB5O(`o&yZ8CR-O~R(*$NzX741LwRqnt4eXn_cOA>T{QKLt|K3bpyx#PQpWj>t3A=x3ue=wqelW?7%8NEIwEQRZ z;pK}H60cvsX5dg1a8g)$WRuP^zgma*{AV{V_v`I!;EQ2hmv!w+Sn$CkPkx*}pq^SG zDZ}D8^~mCE|9RQ>=P!HxZyj&wT~!mq@?gQ2{Gv_9vrOMIWhj1lXk;_{tXac*o8K$` zoO637{jE&?NO*k5!nf1*m7lxPm3}Ya$^7t!`O+*)ng7<5r1bcx33KfiE)G<-oWQzA zp)G3*W0%s>bxsB50@}t~t$v(&aYEu{$u7Q#`;88PK1SP|a<22cTs6BgjlIxJ|E2V{ z6Wi4z^ox~4dC&Cp^-TPw*ZThVkA3~mD=X%OSH|txc;L?;ne3Z7eun3m+3zV$tLce( zmTk6KUU>iYN2_oC?qksAl?`E>-Nn*UNddaUoI&jam2)T$&{(NMX}>d?j=dWeGBr5Y{++YCVA{NQax%wPK3O_NAyIdC+jCLN zKSu(58E=cd(6#zo+h6drs7rdku9=PrPjh(xzI!6~LKK#!nC@i~Y)#JJ-z>1`*=OI_ zok!jr{VY>gvtp%!keYzghs*l*Nwd_>+g7*4=(XqGw&-)-7~$e|^1wpJsOZUa{(s9! zJ-f|nLQqj{;=IOxj$Exw+j6hV6nu63{?6XvpsqprUn$$Wdwp4DpEf+Nw)qnv|FgzU zBxY|fLtEa4`gs1li)){i1?@VU+8BGXq=ZSJ*X`!P6IaUzm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhX oLqlByGhIXT5JMv?BXcW5BZ!9Qkuggc7#J8lUHx3vIVCg!07t0VF#rGn literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/mail-reply-all.png b/Media/Themes/Umami/Icon/actions/mail-reply-all.png new file mode 100644 index 0000000000000000000000000000000000000000..a0d26a418198f0e03e3e9b1d1cff61d92a989805 GIT binary patch literal 1409 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq|vj)5S5wd2NYM$St)wurE`NQyN!od{!NbKB^& zwV_Gm7Mswt#PmbAtNUcR=5930yj*v3_HWhCbD!^ge#d&Jl+^!J&P_&1!jqCd`X7F} zBQ{i9!Tz7Lt3?*;^`y!d@7^6db&5-bi*?$xX&ZLz*fFiOwUu|T(dW;f&%EJUwtV@^ zszZU=9gkcuSSvWYEMPfv_H5vZss*2{tgXGPTa#Fw5(Q)ZEwWf23N9>Z(3#+&65{lL zWs_ae&KlhmbFQOCM;;aJVh(Cq93~(m<-z{s)AWFuK5b8*rk*)-CWnJ@;)I!3Ls?U7 zYbE66k6*bW66!bhGQNWb>(F%FoPP zl#u!_Xu>(m)_*R_HV~q+0Kp$WD)%}) z*umYrQ!GO?=E&bOn^*K+cCI~}~DsGoG8SR{HSe z*(!0B4Q7s72@CDMs$?0jy&(5fF3NJY;k4t2_Ly*fs{Z$5=?%gD^)DVjZ|98&J+o-Z zCP7EdMW&9KzU;r^|E!7=I9$bj*8HBk?;5^$YEp|YW^*6weyjMuul?gMg&xuQ$DjO7 zu<^HUbAPxi&9ew!;~Hu%K~yQGCJc-<~|W!slkUN_d{X84)7Nc!_1UHE>%^{>1- zTR$6I6ll?uluuqdP2!|+irg+{ubl0{71t-ve=+q>dB+2u>HStG8UEOd=8DXSkg~3j zweOPPmJK=nVzEw<{j3;M!@CcequJ zu^)@%ZnQi}W}d^j=P&<(qq)|L^bGgjOe>Jto@8>KOW0I~=i~PTmHQH*kuh8%TX~hX zy0lrnG?uuL?(jQ?spp1yqFjM=;?1)bIg|G|Hca4P{?YQzA?6mR6#u(87Ku$0@~WFG z#j<(0<_64t>;LfTr1TR)_D-M7gH*&zjsGTp_;gE9FT+_tc>9!Ui+_Q8Ry7E3_^Ns* zSzm@nPx}dIb)etl?2hd}<-9)pqr3 z)D4$#hubaRL)JF590=x8wRjTPqzth`Mk#+Fl3RykF@)hsnI-KV%J+bzkWBh-PGfk}_Mb0+G`~K{;H)<6*Z|zT?pBu&3d}qn0E}>2%mj@-jKCEtGE6X8anUv=T9vpVj@=WbB48G%D&9=GsRdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x u^HVa@DjAFn3=MS+%ybRSLkx|qjLfYJjUXDHN5(7xm3*GAelF{r5}E+%-dZ34 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/mail-reply-sender.png b/Media/Themes/Umami/Icon/actions/mail-reply-sender.png new file mode 100644 index 0000000000000000000000000000000000000000..e769da498258b2f43528fcb2c0aa1c6212963bb1 GIT binary patch literal 1181 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq{9xr;B5V$MLsQVtr&nCEDiSoXHq-gGqPk z1YMJ+X;T=EZOshYtC+RQFmA?{OS2*_M=Xw$oUG<{%R@@a=kgNYHN8Uht6sG3_r0PO z#P2E_LbD{o1Zc9znhHxMI~V$-OvM@bbkH*y>j(x z=RlDb0gst$T)jFMX`HNkwPV$*BagjXoD_9Vd+qzYMudZfiKW?*LFTxlSEm5e@xn

+6Fier*l8xAV$YtX!!m!K3CHmff{z!qlaLe^ig0oBLfQ*So-oMM$xwRiLS>i;Ino z?Znx$z8jr|ekq^YxLxnj*Jl^5UOjpurRR0q=2x9w!Un#^XQLZVo${)C^HNP;zyD8- zd~z`No4SY2``-SY``*f0^Y)wc1dB6w9vSVO{@>?u3Wv%9PHvskhYWbS{;HPzFX-ey zSNh>Y@%xW2SN=VtJLAr_tzEvVs$Y101?C#>yddrMcunTSDMFg6!Vf)b?BuuS-D}#m zZi@1Io=e|8JwDR2f3MzWaYK_Y($gmN_~;r5&O4uwdZ+mamsqdsw%oOcOdfstV{_); z;`k4zCbHFW`37%Z+R)p&^Ul8$l7Ei=6cMYC?=sM zIo0^=^PX#4rhojvbV!URZtl|u_o{c6*|tfRZ)liVIa%ha-{Uo!0Z~!2&Xn6G4>P|={VuyN{_MBfn?KGt zPki65O4F1je&|L(+R_H!~; z0ruX0bq`NoJ1?1=e}{2~o`I?UPAAFl3R_RG@NBmbll-%!IP=wYb^m?U8x3qsZC_qH z-r%}j@7*;$l?UdxnUDTuFx|TDPvf)YwyWx*ZhiX@aol@r12c#D`dt&VTT9gSmajP> z^MBdP(1hKKGT-k`z83Z2zsf(R)HHoN=_4$83=9maC9V-ADTyViR>?)Fi6yBFMg~R( zx(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O4>2^dGBUR^ XG=gY&9vQO)R8)An`njxgN@xNAkUJEY literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/mail-send-receive.png b/Media/Themes/Umami/Icon/actions/mail-send-receive.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd0d8df90c56714632db94b37d690f3b5d69e04 GIT binary patch literal 1111 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UcLw-`xH8ZTD0sEYxi^9w>eVi060hLZE@_=3VVNPQ?jfM&CTb8V zq93l{)h_SRqTtn@nUSL4)vn;);+4OmVg9l1Wv5e`*H2q}I;4Ef%#9b*TDQ#Fd_JRd zvjSMLqI0{VPlu9Yhmv!vvQvk$bGNczm#SZvntPvl^emUmWo{K4+zZ#Zmu+;fSnpZB z(X(Q+SMf^!+O09BX_@_dbF3iYsRwt*$DqsVb{!>aJaI zvZ1cBVbSr%`l{x}nwCY!+FI({TN^ssn>v=A?&)gn@9pUC?VPas?378p3$|Zfv}o?q z#S2!gShnuat&KeEjIq)0gj^z54LNjmMWSoVt4X z^3^Msuikla>-xo8H?QBnclYU&C$C>T`taf1r%#_gfByXC)2Adu|NsAuLTA$$7#OTdg8YIR7@3$^SlQS)IJvm_1q4Mz z#l$5frDPSARn)X~^bL%Rja^(qBcfu`Gc&Vm>!;s*`0&N6SFc~c|MD&TtGyBf0|R4{ zx4X-vX)Ny*7#J9XJzX3_G|nd{EHDe$wyp1+hqtF!M=uvQFCW*H*6!#h(bs*MnmYgf zt=%hJwK?HYS{>ujYoWGxZEf$~jlDa$Ytw>9Zgvg<39&bC-n@D7rtQilnzAbEQga_Y z=A5Ltd0j?!ZvO0$8#iY2h=gx3>*?(L_>ob_FroUBRCLwjMj@+T*RGv2w2L$J^SgHK z-@l!fybhfnD^|}*+H?2uoI4E%_V3)aXWLS98P`LH4<5U|f9KA9Teg|A1TPZj$jaK_ z(bB+p=DDAs1H(iIUM=-#?FE-@WZv5TX>{QCbh~)}z~RG(FA928{5Y+6L{f6=-(K0b zGK~ti5@$GBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6Tm7x(t!}G|PC7}H5>FVdQ I&MBb@0E2GFTmS$7 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/mail_forward.png b/Media/Themes/Umami/Icon/actions/mail_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..33d884326cc95c6dc1ddcd46c470080420356fd0 GIT binary patch literal 985 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&j9Muu5)Bp4VNdjfnyTp5tSf_$Te`G(8#wbIj)Cr|9n%t)OzW75G!^)>nOKlbGO zI#l!fXxs0T6GFp-lTs2=qJ2`*lF~9#vU4-@3UW%ziz}l&(?TN^sMT34@LxoOje z?Q7=m%4XQtXn3fQ;qc*uM-Cl4TEcMR#EG+K&z_56ICt*cxr^5>UcGdsp5a;}!>y$O z_phD4|M32UPKF29&pfz)=UFeqv%BY?J$v?Q0>i6UuU@}?{pQTfH*em&ef##^ySMLm zroMl2@%`IZ@87@waPRPk4<9~${P^k0@=u>Weg6FMGYEYBGM(Ye;m$8#zI=WC;Op0~ z-@bkO{`~6q@85sSVfpdn$In>|KSAL4uh|U0e*OCO`{(c9zyHi(`19x2pFh9<{Q2{D zF2lcnfBw&7_`iVt|3a?+iv|8K75%?l_Ww%d|7-OAuQmL?-t7Nom;YPb|8MpAzs>*u z_Q3x;!vF6{{J%f@|Dn?VhsysSsri4R^Z&{2|EGHYpPT;w%JTo$*8IP@@&C=u|8H&i ze{awKd;9)BKKlRh@&Et-cWE^QGcYg+mIV0)Gcd7p8M|cGH#W6SpZoB|tJjHQ;d>bv z7#Neh-CdghY&n04fq_xm)5S4F<9u?$0<8y=9NFgxaL!CCQDB}pA*{cPo0pG|k7dyT zhyMoRrI{TqA)BjW5*Ez24=}iJU)>;VTO^l~;!T+qV$Yv5v&hNG9W*S`J3C2$voptW#iF9UYP`V{S|of9-3qeab?3;nu*Lfv4|6Cg-pWZ7SULH9>WU@N;ZeL( zGR0awI!tD}&Ul&jOjIOnipccq84{-54k|4U3m43oBqb{(G=I*t(4`l3SSCIYU|~vZ zy|duOj~_oKsO0lHmQ^qq8yS9HAtw4vwQV_f#)d_$cH7(9-2B+&+blRTrhH5mO~3Hq zsNT5+3lFy0PBM+)SkA(*NhTAF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjthZq`J8JSxd8bLHX SkBnIY%2A%KelF{r5}E)MIM+h} literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/mail_new.png b/Media/Themes/Umami/Icon/actions/mail_new.png new file mode 100644 index 0000000000000000000000000000000000000000..f810f7c44a7954fdb654d30952cc9743cf6fffc6 GIT binary patch literal 1102 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_0iG_7As)xiPW8`_36(fdzu9=EWbEsA zX|sKVIkIM}ZB{uPzqzYZ+DvIsQ`LmhJsf z-#060_OX=Rk&AB5O(`o&yZ8CR-O~R(*$NzX741LwRqnt4eXn_cOA>T{QKLt|K3bpyx#PQpWj>t3A=x3ue=wqelW?7%8NEIwEQRZ z;pK}H60cvsX5dg1a8g)$WRuP^zgma*{AV{V_v`I!;EQ2hmv!w+Sn$CkPkx*}pq^SG zDZ}D8^~mCE|9RQ>=P!HxZyj&wT~!mq@?gQ2{Gv_9vrOMIWhj1lXk;_{tXac*o8K$` zoO637{jE&?NO*k5!nf1*m7lxPm3}Ya$^7t!`O+*)ng7<5r1bcx33KfiE)G<-oWQzA zp)G3*W0%s>bxsB50@}t~t$v(&aYEu{$u7Q#`;88PK1SP|a<22cTs6BgjlIxJ|E2V{ z6Wi4z^ox~4dC&Cp^-TPw*ZThVkA3~mD=X%OSH|txc;L?;ne3Z7eun3m+3zV$tLce( zmTk6KUU>iYN2_oC?qksAl?`E>-Nn*UNddaUoI&jam2)T$&{(NMX}>d?j=dWeGBr5Y{++YCVA{NQax%wPK3O_NAyIdC+jCLN zKSu(58E=cd(6#zo+h6drs7rdku9=PrPjh(xzI!6~LKK#!nC@i~Y)#JJ-z>1`*=OI_ zok!jr{VY>gvtp%!keYzghs*l*Nwd_>+g7*4=(XqGw&-)-7~$e|^1wpJsOZUa{(s9! zJ-f|nLQqj{;=IOxj$Exw+j6hV6nu63{?6XvpsqprUn$$Wdwp4DpEf+Nw)qnv|FgzU zBxY|fLtEa4`gs1li)){i1?@VU+8BGXq=ZSJ*X`!P6IaUzm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhX oLqlByGhIXT5JMv?BXcW5BZ!9Qkuggc7#J8lUHx3vIVCg!07t0VF#rGn literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/mail_reply.png b/Media/Themes/Umami/Icon/actions/mail_reply.png new file mode 100644 index 0000000000000000000000000000000000000000..e769da498258b2f43528fcb2c0aa1c6212963bb1 GIT binary patch literal 1181 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq{9xr;B5V$MLsQVtr&nCEDiSoXHq-gGqPk z1YMJ+X;T=EZOshYtC+RQFmA?{OS2*_M=Xw$oUG<{%R@@a=kgNYHN8Uht6sG3_r0PO z#P2E_LbD{o1Zc9znhHxMI~V$-OvM@bbkH*y>j(x z=RlDb0gst$T)jFMX`HNkwPV$*BagjXoD_9Vd+qzYMudZfiKW?*LFTxlSEm5e@xn

+6Fier*l8xAV$YtX!!m!K3CHmff{z!qlaLe^ig0oBLfQ*So-oMM$xwRiLS>i;Ino z?Znx$z8jr|ekq^YxLxnj*Jl^5UOjpurRR0q=2x9w!Un#^XQLZVo${)C^HNP;zyD8- zd~z`No4SY2``-SY``*f0^Y)wc1dB6w9vSVO{@>?u3Wv%9PHvskhYWbS{;HPzFX-ey zSNh>Y@%xW2SN=VtJLAr_tzEvVs$Y101?C#>yddrMcunTSDMFg6!Vf)b?BuuS-D}#m zZi@1Io=e|8JwDR2f3MzWaYK_Y($gmN_~;r5&O4uwdZ+mamsqdsw%oOcOdfstV{_); z;`k4zCbHFW`37%Z+R)p&^Ul8$l7Ei=6cMYC?=sM zIo0^=^PX#4rhojvbV!URZtl|u_o{c6*|tfRZ)liVIa%ha-{Uo!0Z~!2&Xn6G4>P|={VuyN{_MBfn?KGt zPki65O4F1je&|L(+R_H!~; z0ruX0bq`NoJ1?1=e}{2~o`I?UPAAFl3R_RG@NBmbll-%!IP=wYb^m?U8x3qsZC_qH z-r%}j@7*;$l?UdxnUDTuFx|TDPvf)YwyWx*ZhiX@aol@r12c#D`dt&VTT9gSmajP> z^MBdP(1hKKGT-k`z83Z2zsf(R)HHoN=_4$83=9maC9V-ADTyViR>?)Fi6yBFMg~R( zx(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O4>2^dGBUR^ XG=gY&9vQO)R8)An`njxgN@xNAkUJEY literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/mail_replyall.png b/Media/Themes/Umami/Icon/actions/mail_replyall.png new file mode 100644 index 0000000000000000000000000000000000000000..a0d26a418198f0e03e3e9b1d1cff61d92a989805 GIT binary patch literal 1409 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq|vj)5S5wd2NYM$St)wurE`NQyN!od{!NbKB^& zwV_Gm7Mswt#PmbAtNUcR=5930yj*v3_HWhCbD!^ge#d&Jl+^!J&P_&1!jqCd`X7F} zBQ{i9!Tz7Lt3?*;^`y!d@7^6db&5-bi*?$xX&ZLz*fFiOwUu|T(dW;f&%EJUwtV@^ zszZU=9gkcuSSvWYEMPfv_H5vZss*2{tgXGPTa#Fw5(Q)ZEwWf23N9>Z(3#+&65{lL zWs_ae&KlhmbFQOCM;;aJVh(Cq93~(m<-z{s)AWFuK5b8*rk*)-CWnJ@;)I!3Ls?U7 zYbE66k6*bW66!bhGQNWb>(F%FoPP zl#u!_Xu>(m)_*R_HV~q+0Kp$WD)%}) z*umYrQ!GO?=E&bOn^*K+cCI~}~DsGoG8SR{HSe z*(!0B4Q7s72@CDMs$?0jy&(5fF3NJY;k4t2_Ly*fs{Z$5=?%gD^)DVjZ|98&J+o-Z zCP7EdMW&9KzU;r^|E!7=I9$bj*8HBk?;5^$YEp|YW^*6weyjMuul?gMg&xuQ$DjO7 zu<^HUbAPxi&9ew!;~Hu%K~yQGCJc-<~|W!slkUN_d{X84)7Nc!_1UHE>%^{>1- zTR$6I6ll?uluuqdP2!|+irg+{ubl0{71t-ve=+q>dB+2u>HStG8UEOd=8DXSkg~3j zweOPPmJK=nVzEw<{j3;M!@CcequJ zu^)@%ZnQi}W}d^j=P&<(qq)|L^bGgjOe>Jto@8>KOW0I~=i~PTmHQH*kuh8%TX~hX zy0lrnG?uuL?(jQ?spp1yqFjM=;?1)bIg|G|Hca4P{?YQzA?6mR6#u(87Ku$0@~WFG z#j<(0<_64t>;LfTr1TR)_D-M7gH*&zjsGTp_;gE9FT+_tc>9!Ui+_Q8Ry7E3_^Ns* zSzm@nPx}dIb)etl?2hd}<-9)pqr3 z)D4$#hubaRL)JF590=x8wRjTPqzth`Mk#+Fl3RykF@)hsnI-KV%J+bzkWBh-PGfk}_Mb0+G`~K{;H)<6*Z|zT?pBu&3d}qn0E}>2%mj@-jKCEtGE6X8anUv=T9vpVj@=WbB48G%D&9=GsRdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x u^HVa@DjAFn3=MS+%ybRSLkx|qjLfYJjUXDHN5(7xm3*GAelF{r5}E+%-dZ34 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/mail_spam.png b/Media/Themes/Umami/Icon/actions/mail_spam.png new file mode 100644 index 0000000000000000000000000000000000000000..053accd65874295c38044b79f6abca37193956b5 GIT binary patch literal 1488 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?3oVGw3ym^DX&fq`YBr;B5V$MLIEqjN+;C63oWe{-f}dusXa z3(|X?IZaikct1^Iz0&ZD;loB6nz`KFme2fy09C#QYR)qMUx_ka1m$;|)1EB-s{ z|Nh<0tqMZDYbH9?vxzV(&r`Q5dw=Wm=QlBr6J7b`>)xweSg=(ta9x&&ll%6(%7rWT z?3q*(7g}@kbEf%)PZw6dd2_3J_vY;U_4@z9jb>g5U-#wpxpjYkmQ*?Q_w~I9(ONnA zWXri*+kPiLzjtPDiQE&1J>OngpJ&)xxzygG?9Jrkg7;p9$JJ#o&Asj8w~S%M%FG43 zcY8B5^Rrr1WZX|uEZu(X4C5N{?R)qAJU+kf#-5VQ+0yfbr#*h0tTEM{qcJ!AqfP&w zQwtSKKU~-+rLed9`n;3YRYlW&)M$P+KX3Q<51S$fmm)`Nm+S9j|Bkj_Zp>T0*odz+ z-8OgW5|uM+qp#omcWJiM0V&N=nS;gOOBGo18A@GUr*W`3Yb*`$n&{EGnsMjrT_U2Qg&!YTUR!_PBlBfURn;y@xqXZQp(`vGyBzrR=F5}~I^Dl^vHoG+ zyC-mb2q%QAz4FE<2rl~ge; z6>;E9U^H9so{7Qd@RW-gJjV-Py#C!cZCV)5;RBnRB-#$%+*}_J7kBc`&eWdX-bo&J z)TVkVEj`#Jy4s@lm&o70;rtAV3j8Z}Gbp-jS+hpz!spQKr_z=)>*}s`^75?x>m+mB zQM2{htXsFLUcHj~VAJoT=4>=`!Nx+tjS)SoKb}7F__|w-_+(>-dCz^zYPZBcE6R%U z3Jfw^ze;36a`NI9C&hDfezt!5rhYQT=t(G_^=#FtUYm-ZMk!4Uva|bS*ZgsI?f(B| z&)W90f6B}J)0wnDXhm)H^S-%PuTJ$}8+TQ1?YecsU%&S9@bd2R_3fS*#J1(ylh1s8 zj|<*(D>KZoC|vdV_q~1bjVc1{ZH<|M8`#AJJ}N%#x7)R6XX;61?OC(M^Gtn}pIPh- zylmpls~n)iRaN}p(}V5q{dNDg-Zu?Cpiv+z!9M4Zvtq5s4ffW?1@`Gb^jhaX|JgK8 zo`LHGL-GL@1Ku5**ZVx|p6M`AUruAi$}h!tnsz)s#$4oZt$tU-zUy;sZco+Vc+1ZE zzUbO_>v#WVe>B%^fA9G^P@1t?Ng=o- zH8U@@h>Od)C^fMpHASI3vm`?yBqLS9-P1Qr1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1` Xf@pXi8MB0efq}u()z4*}Q$iB}mD`IA literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/media-eject.png b/Media/Themes/Umami/Icon/actions/media-eject.png new file mode 100644 index 0000000000000000000000000000000000000000..ef600d13af75c3606a4ecb5c0346fa0dc247c73f GIT binary patch literal 901 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q`iPZ!4!kK=Er_-6<^iX7X2_szMypj&G) zH9c=kk&v34rL(oSN!|29z><)QX4kF+{c+wBccjbw=SU~7 zH+9|6cu6IDR*q4j@w}E>N6Qv}y>|cO**)*8Kg)e?kliN9$&jgX@Y;dca0{6}EwA8e zz2%tVjBor@+~f9FTK|81^YijA zUrwydWRPXp@it@P?;j5iT)naJM(4tVlT~g=Zqe1*^I6#Q$FHZKFR3#;tzUUhvR6)G z*OXlgE=#3GZ9H(z%XM2=RPtltlR*|jc3cNOZhzzwdiC9t8!xu!l+6rXB^q|2Xw8DB z5=*Bnz5M?5$>Mae&`{pIYn}G81+lTQuNEF=f3J34t$Nq@^3OZ}aAlctMJ>LtI<@4- zpBTr>vohCSQWC7Rn|)SHSNh1~k7es$$=$mwIcHB%<)jy)vP}vON=7P5%^fT}JhgiR z6U)lV<~#i0e^+)sNNw`UoXiPcOJ!`%fA`q*o8rF`a9JZ+@f@?)Fi6yBFMg~R(x(1fI24*3K7FNclR)%KU1_o9J2Gc%U z7@}y%%}>cpt7I@TFf`OPFw-?O4>2^dGBUR^G=gY&9vQQQfq_91WJ7R%T1k0gQ7S`u jdAVL@UUqSEVnM22eo^}DcQ#TC3=9mOu6{1-oD!M| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}ha3Z5>GAs)xyhTQHFb`-F^YCCsk$+KD2 z9f>EJxtrGiYt!le9_|?L@<+w-&?fy&KV<7#^c*8xj(AU!E1&sEapt|5Icn#XqWv$2 zE`K#=)vUY+$Np6>URx~h5YzmZ@qx?%35V5epJfkR-*i}0zD3~R!;61|HJ{Gi6z}!( z`Io=#yN}H%R&24WD)=$6qseI5%Gvkt?VWo!`B@dyT2pStW5+iOduXox|8;h_7LT*h zF^BB4eUDj=Z=T%sMO=TrdQ^6tj@Sy-jIB|XA8XD2vnVaNFP(d0cFZvY<7e@9%nWYL z(XRhYnKrr}C_SB(b@sO*%l+@4bMu!rD{$yEtk_jwA8f&Mcu&lhrjNDvyaikZg#|k{ z++&QNs&V45!4}sgQxf(uO-;6T7jYF7KeePpVab-cKO7G*2pr$|HeqMfqwkN@GY$vz zy;aHBep{@dvXC)(+JUwO3jULhtSVXJ;=I#rzszdo4GfALeT&!Z(&+iLi9>0@La6|+ zn}Vgg@BU@^TQ|S^uIAN-qL7OWx882ubub~}_=*tbzRMews`lRdC&=4=ScXCP+Nf8E}1;FIbUyE_iMu^v7?2Xye@ya)uCnHIx{+QTII1BUH404 zzuBA@xY#r^`j~|N=}lb6KHHSVmbc8tNLD j=^C1c7#dj_nOhkeK{Py%j9J3Kz`)??>gTe~DWM4f-uO+u literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/media-playback-start.png b/Media/Themes/Umami/Icon/actions/media-playback-start.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2cb57eefc8b561c927bd55ecbc0e6a026561c4 GIT binary patch literal 1157 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tINPZ!4!kKm0|zz{{5MmbNA+N zTYB={k!2@y%4SEbzi~)S({AaS+gFsHIAz_oUvR8lX|4WIcE=B58x(#enO;?Es&{$B zE4cC3HIby~OTB5n`f1y%XB!(^KR%o%{$|xFvSJ*glJlw(})aha& z^m2xjwCwX;7ZeTI)C>)dIk3!F)|j=m>)*cPODBGDTpFOGW^0$arPlqp>A6bB&`|f# zQ03WY^LSJypER4UwBO3i>RhYhff+2vB9uEhLT@|m3}O;Y%qZAzGeL$UHhSNzZ$J0^ z{QP4m2~cKwZw63og>f{Y>4W!X2qX*&M)XjYkM`m*yOMdjD_ z-@keDr(1sh|5S#fznN@pZNK%~|9!yFaHR6B{FU1-E(%E#QYD?lf4q3iuf6|IRiUX2 z*L*9h%0Je}BI+tCe#kFh$=PxIac|*)j#qo9D|iZ}=rJ=q6MxpLuU8ZI@#mlXePy4% zthxUB?D5ARdD)YNFWkL*mm%jio1o(~)g39~)9Ru(Enj|Lc#=x2#kWr%%Y#;4krJGG zQE3)~YoJv2F^QTu`=XyV=jQ!gFzM{SkDoW6xB2_)%9WF+8M<7yy!`NZt(oX__RYnc zr?##a&vUc3@|*iRB~8wuvE$5Hu6!noAJ1;HW5@$GBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6Tm7x(t!}G|PB@7G| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s79PZ!4!kK=EH?|Lx>3j9kuXZbp9*P`xv zm5CR+OT=Bu1uwpK{lX=>*Jq|nMY_j=w?5*lS3g_EuDGi(udJ->+i&aL2iE=DopCyS z|I}YiCX6B56eJj5==0^=3zKN8PJh1q`{Gp5_i$uwjhgl}`@dwT$E@dG3tm3hP|U)Ru{G+}>#t_QCQ`g76*?TA zl;10qIelL8x$d>srFVI@-}@QG9w_qic>;^l0SWGaO?wvX`e1u*w@u=Hp*{Tf7?gU{ zlWSDt14LK6`qH&VeCG0?wPAmiUX|@;Vqjr1K5TG!L#wISHH(PshijTQGctuo2t9kM z(D%4xV#5Jej~>RfRSUWOF4ZY2eN^H&9FWe}w4g!7)5u|FW4GV?=QHlL+jMg<%n1Iv zXv(V4My>^Onl_&aepg~u$LF;)Xqk$Z`-inj8(%zM5TmCpUAJ@BKAUf>>5t+z-;61o z@Vk4}E4zk6Zdb0(61aF=?ETwU{I8{p{x4FvmJ_GJz`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? zBXcW5BZ!9Qkuggc7#Ji$HU#IVm6RtIr81P4m+NKbWfvzW7NqLs7p2dBXCuYHz`)?? L>gTe~DWM4fwTTSX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/media-record.png b/Media/Themes/Umami/Icon/actions/media-record.png new file mode 100644 index 0000000000000000000000000000000000000000..d13d3ef8b8002b4faa73d1b26db642568e6aefe2 GIT binary patch literal 1258 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tKio-U3d9>?EK_0N!Y7df`yTst#$ZP>Q( zG8M~D_D7d!>K2NsT8La0Nt)A~QO#ldBw|vq$8DKe7lJP+w%x1B;C#Dv;nEA<-W--k zT7@_^&JH-5`Np}UcVd=zmyYGvtfg1il`UhBKJtIcF5BnL{AFzqzwbS6lhzpiOZ=kT zIS&RVhCK{>v=m-D$TsYJXv%QzKktXt4(GQYXct^0Y?lxrwCJ{CRTy*HKcPq4KOgYV zc93&;YR{_CCG<(fRMz0E_`2)Yb0rMqY#OX3TwXjm`JlD6)qB+{HuKMAEG$fn>yvK3XFq;C z_G&wSV^(SSjuqD#PcvnizL-3jgO7jr-)UbREo8oJOQepNlJux9s@w?EQgchTgkO7Asff zy|zlY{a~le0ST65g<}pbuf>>p3^^1P7z)lg%JJu17U5vI#;|2i%4v(ztaE3cr>s{WVSC1XjxYl{% zCimm1QLp6h8LwEN&PIxXfq}u()z4*}Q$iB}05Kte literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/media-seek-backward.png b/Media/Themes/Umami/Icon/actions/media-seek-backward.png new file mode 100644 index 0000000000000000000000000000000000000000..134fc02c9598f273f7f29b75789065e12647ea05 GIT binary patch literal 1184 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tI@PZ!4!kK=Er#QH>+N*tU2-%@w^bCIxH z#u_HNyAoNp@!3ZewDjamarEd&t$WD9$2528-L|Jr$+A9^&(55Y$97i9{GNpKo(Fw8 zyAxjZzLhGTJ70Ky=k@BixhL8i z^TZPmCKybSx4d*me|qG-wd?ESy4=L;SwDm_9%kHNVrnY4x@y;}MVBj27~0q0W_a+| zUGf9NH#2kjZ#U)_#pL8$J{e+S7FD*-}l_sW+d0 z=YJiaWwEAyMhv?{z0e)A4G}u3n{=#S@m-rYRrgt=!v~*>+~@b6SZ}|l|LPGgiN~Kf zC2Zcx<f2q(V~=%vpSkN79?GMmdDCC(B{EXN8<*RDNo$N7VKl8UE?nz@6^0}HuX%W~f_G~9k0 z_Waqi15f4Wq)gfMEj-+N-nBC3WS&{e8n3@R@L9&9uetB}K?(L_Gd`xA_uP0Tq$|X# zvqY^oM~^!+bU~(6#Jz)0i!`Ho9lX6y7r9rbzrTCGo|~WjZ|D2^A9~83ZXHb=^Ije( zmZ|7tKQ8g5>hGV{e!V-ptUlgs>(h6dnd9pDQO+aD&?WHJEsLFZ^S6lmMP7YDFGY@qKPq_^^Wk}hNfs~5pT>Q`d$q6U$M|b@Ijve1 zq%~E=_wtJM`@ZX*Nn>#fxyxC*R zSq+AFLKlCYJb8Y9U(C-h$*Z>>5|)w_<(hq}Y-fsqpnUgHFa7v^CQ~XlnB^JGuK)9? z`=q&K@^@|twgVPsVs=&PW$KGGRwciho&VkN*tGJ?`X)kYX=&f|b#-rcW}Np+ymsx{ znah_iZ*>XzcH>d2XQ#&r^*WK|>Wl9F+o}Fp{;Yi8_Be%E-U1v93=FCzt`Q|Ei6yC4 z$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP z(={{?F*LF=GPg1`f@pXi8MB0efk6^vLvVgtNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6 SHc|`>3=E#GelF{r5}E+CiUB47 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/media-seek-forward.png b/Media/Themes/Umami/Icon/actions/media-seek-forward.png new file mode 100644 index 0000000000000000000000000000000000000000..6212e20ed5c18931b307941f1438e05df798a6f8 GIT binary patch literal 1229 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tI;o-U3d9>?EKzUv=dDsg=O{`;28ZEF)- z4{2NqKeI?^``5P(A_J_MXV3P25eLdeJ2p1=jI!9DUgvc}K72q|!O= z!&h`u{Qk4Facb#1YUrk_>c&?8Dmr(bn>$V6VC>8pw&wevKl*Jm|NUq0eFvI<-4_q9 zp3QiLc?H9YcZ=3CUkG~b{hfQmzCWkDlXZ2cJ^T5ywe=QL>FjMUUtGNLnqAKF!tB$} z(mwzEb9dIlde#h^HbmwK!38XWWWH3`Dh8_W`xdZz zsgb$${(#FG)l7dTtLpEdi;-ea|;+NbMvmT#YVlk-Ex-P(&DB754@FV2(5-+D{VZ|P+9T(i}RGkwlZ zKb`vM);MZI|Q!bD$JcVEKR=vuD8=kJ!h&zZGTe8JT$X@0q?J^Gh~ z54+iQC#~dIe)y!TvSDM<5oZp+h^X1ZU)3gyaJA`%Ze`jT(Qq(B#rC{=>o&9L+B+v% zla*q&6odVv-;Yy*Q+kSi<&ccu5JLs1Qkz4 z1}3JdD+5GWyMi2d#yC0Z9k`QlZ1wTJ*Nz?Y1h||uG?ogONO4HyLeWpuu{aQ($Y9NS7-Q@Ba85wzj5=uS#imQwY zJIZpM_I*_w2KD_3?ecD>H-_g_c;^wggD73sealn>gr^@v6^Q=GbzI^rDv*qIYfB*P9 zuR67%ZCg8~;9j{CND@_3P3S$#?W-)dmL#f9vez zR8RKV{QOexVVh*18_v#>$x+87cCLTQ|H^*7J>$Kq?5p=QkDg;-U{Eb_jVMV;EJ?LW zE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|WN@iLmgOP!up{{|M zuAzB|p^=r5xs{<2M8osQm?aDh43Z!lg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3 Skz!zAVDNPHb6Mw<&;$To85d>% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/media-skip-backward.png b/Media/Themes/Umami/Icon/actions/media-skip-backward.png new file mode 100644 index 0000000000000000000000000000000000000000..070ce76f4b8a0ec02ff44a520bcfffe63f4eb3d8 GIT binary patch literal 1246 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tKco-U3d9>?DX`})L$iu`*w`}@1!GZWKh zOlp5ub&8mA>}N>Qp(;%zOHmK|%=7EWHh z@!}~%Xw7P;`m1Md0Y^*uGNr&Os{XK>yOaNC)0K|=Z4b!_GHmOs1nqkQ>xm1hicH@2^TH{;orRmb-4 z{leE!$;gm0vskI9x2MOVglgV}{9idm|Ni^S`ML^o{SH4p!_4sJZv5}s=(nWcWS&VHjfThM?gthwT)zBx)uyWHzqf5XHEmi6M-zkNi5YrAoeOrqZgCfp zT{m@Vs(>I%JM+tuDrW_$-et>{Ei>Au&)**WjY~yuXIIxY&Ye{=6&ef^lV9nc)prOE zot`LV;KQ8#I@@FE8egV~9x79d8RSlLrldKj9$m`L#>QSJ`>*0ho65%}>gSnV!w&4^ zVX*l5Oj<%#dhbcsO4Wb>mj2t^zNL<#TYW`yIHt5Zi7|BCRJ?xu`uW-){|b)xzApaz zR(9>_@VcF!cCX6FJUi{dEqUYh^7TvqZvQO4Z{FicIlJam2Bd!FV`Mn+<;&Gc6~$+a ze48JgHO#L1mBlI8>GEXmoH;t#^)HW}-@VIPT4OG9j=$gD_#7Xwa2pT zZM(es|1CP%XV2YF46f#9Tq2QdB`8^1TDq5+nK{0+Y~MG}!;QyO8s0{J*A=)ZZftBU z-fsWv!H=EiM^x(GQGO!lp{+ppTS=-#!9ub$6&Z8!h^ts7>?c$AFV+uG`8&7FJq z|GNtb(=|G)i)PPxy1u`6-rtg>q(`SWZZx)Cq!D^^yQs?&#)8yjrU@xMYm>M;JeVGw ztJ66uv3qB0Il~EN1!fQ9W6$2IC@VE~NW5cI3hM0m&#W&vv0}Z=_mB4<=wEx3U{!wO z_F)DF2GtVRh?11Vl2ohYqSVBaR0bmhBLiInOI-uA5JL+qV^b?bGi?I{D+7aRpDheg zH00)|WTsUz7#SEE>Kd5o8k&a~8d({cTNxTbG(3-tS;D};APKS|I6tkVJh3R1p}f3Y hFEcN@I61K(RWH9NefB#WDFy}x22WQ%mvv4FO#rGpA^HFS literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/media-skip-forward.png b/Media/Themes/Umami/Icon/actions/media-skip-forward.png new file mode 100644 index 0000000000000000000000000000000000000000..56e943d7d5cfd75cff894c5d7f2090f1fe7ea78c GIT binary patch literal 1318 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/player_eject.png b/Media/Themes/Umami/Icon/actions/player_eject.png new file mode 100644 index 0000000000000000000000000000000000000000..ef600d13af75c3606a4ecb5c0346fa0dc247c73f GIT binary patch literal 901 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 Skz!zAVDNPHb6Mw<&;$To85d>% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/player_pause.png b/Media/Themes/Umami/Icon/actions/player_pause.png new file mode 100644 index 0000000000000000000000000000000000000000..378ab5edb36c8fb6d2bcd0334c988c8d96239c6c GIT binary patch literal 798 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}ha3Z5>GAs)xyhTQHFb`-F^YCCsk$+KD2 z9f>EJxtrGiYt!le9_|?L@<+w-&?fy&KV<7#^c*8xj(AU!E1&sEapt|5Icn#XqWv$2 zE`K#=)vUY+$Np6>URx~h5YzmZ@qx?%35V5epJfkR-*i}0zD3~R!;61|HJ{Gi6z}!( z`Io=#yN}H%R&24WD)=$6qseI5%Gvkt?VWo!`B@dyT2pStW5+iOduXox|8;h_7LT*h zF^BB4eUDj=Z=T%sMO=TrdQ^6tj@Sy-jIB|XA8XD2vnVaNFP(d0cFZvY<7e@9%nWYL z(XRhYnKrr}C_SB(b@sO*%l+@4bMu!rD{$yEtk_jwA8f&Mcu&lhrjNDvyaikZg#|k{ z++&QNs&V45!4}sgQxf(uO-;6T7jYF7KeePpVab-cKO7G*2pr$|HeqMfqwkN@GY$vz zy;aHBep{@dvXC)(+JUwO3jULhtSVXJ;=I#rzszdo4GfALeT&!Z(&+iLi9>0@La6|+ zn}Vgg@BU@^TQ|S^uIAN-qL7OWx882ubub~}_=*tbzRMews`lRdC&=4=ScXCP+Nf8E}1;FIbUyE_iMu^v7?2Xye@ya)uCnHIx{+QTII1BUH404 zzuBA@xY#r^`j~|N=}lb6KHHSVmbc8tNLD j=^C1c7#dj_nOhkeK{Py%j9J3Kz`)??>gTe~DWM4f-uO+u literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/player_play.png b/Media/Themes/Umami/Icon/actions/player_play.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2cb57eefc8b561c927bd55ecbc0e6a026561c4 GIT binary patch literal 1157 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tINPZ!4!kKm0|zz{{5MmbNA+N zTYB={k!2@y%4SEbzi~)S({AaS+gFsHIAz_oUvR8lX|4WIcE=B58x(#enO;?Es&{$B zE4cC3HIby~OTB5n`f1y%XB!(^KR%o%{$|xFvSJ*glJlw(})aha& z^m2xjwCwX;7ZeTI)C>)dIk3!F)|j=m>)*cPODBGDTpFOGW^0$arPlqp>A6bB&`|f# zQ03WY^LSJypER4UwBO3i>RhYhff+2vB9uEhLT@|m3}O;Y%qZAzGeL$UHhSNzZ$J0^ z{QP4m2~cKwZw63og>f{Y>4W!X2qX*&M)XjYkM`m*yOMdjD_ z-@keDr(1sh|5S#fznN@pZNK%~|9!yFaHR6B{FU1-E(%E#QYD?lf4q3iuf6|IRiUX2 z*L*9h%0Je}BI+tCe#kFh$=PxIac|*)j#qo9D|iZ}=rJ=q6MxpLuU8ZI@#mlXePy4% zthxUB?D5ARdD)YNFWkL*mm%jio1o(~)g39~)9Ru(Enj|Lc#=x2#kWr%%Y#;4krJGG zQE3)~YoJv2F^QTu`=XyV=jQ!gFzM{SkDoW6xB2_)%9WF+8M<7yy!`NZt(oX__RYnc zr?##a&vUc3@|*iRB~8wuvE$5Hu6!noAJ1;HW5@$GBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6Tm7x(t!}G|PB@7G| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tKio-U3d9>?EK_0N!Y7df`yTst#$ZP>Q( zG8M~D_D7d!>K2NsT8La0Nt)A~QO#ldBw|vq$8DKe7lJP+w%x1B;C#Dv;nEA<-W--k zT7@_^&JH-5`Np}UcVd=zmyYGvtfg1il`UhBKJtIcF5BnL{AFzqzwbS6lhzpiOZ=kT zIS&RVhCK{>v=m-D$TsYJXv%QzKktXt4(GQYXct^0Y?lxrwCJ{CRTy*HKcPq4KOgYV zc93&;YR{_CCG<(fRMz0E_`2)Yb0rMqY#OX3TwXjm`JlD6)qB+{HuKMAEG$fn>yvK3XFq;C z_G&wSV^(SSjuqD#PcvnizL-3jgO7jr-)UbREo8oJOQepNlJux9s@w?EQgchTgkO7Asff zy|zlY{a~le0ST65g<}pbuf>>p3^^1P7z)lg%JJu17U5vI#;|2i%4v(ztaE3cr>s{WVSC1XjxYl{% zCimm1QLp6h8LwEN&PIxXfq}u()z4*}Q$iB}05Kte literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/player_rew.png b/Media/Themes/Umami/Icon/actions/player_rew.png new file mode 100644 index 0000000000000000000000000000000000000000..134fc02c9598f273f7f29b75789065e12647ea05 GIT binary patch literal 1184 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tI@PZ!4!kK=Er#QH>+N*tU2-%@w^bCIxH z#u_HNyAoNp@!3ZewDjamarEd&t$WD9$2528-L|Jr$+A9^&(55Y$97i9{GNpKo(Fw8 zyAxjZzLhGTJ70Ky=k@BixhL8i z^TZPmCKybSx4d*me|qG-wd?ESy4=L;SwDm_9%kHNVrnY4x@y;}MVBj27~0q0W_a+| zUGf9NH#2kjZ#U)_#pL8$J{e+S7FD*-}l_sW+d0 z=YJiaWwEAyMhv?{z0e)A4G}u3n{=#S@m-rYRrgt=!v~*>+~@b6SZ}|l|LPGgiN~Kf zC2Zcx<f2q(V~=%vpSkN79?GMmdDCC(B{EXN8<*RDNo$N7VKl8UE?nz@6^0}HuX%W~f_G~9k0 z_Waqi15f4Wq)gfMEj-+N-nBC3WS&{e8n3@R@L9&9uetB}K?(L_Gd`xA_uP0Tq$|X# zvqY^oM~^!+bU~(6#Jz)0i!`Ho9lX6y7r9rbzrTCGo|~WjZ|D2^A9~83ZXHb=^Ije( zmZ|7tKQ8g5>hGV{e!V-ptUlgs>(h6dnd9pDQO+aD&?WHJEsLFZ^S6lmMP7YDFGY@qKPq_^^Wk}hNfs~5pT>Q`d$q6U$M|b@Ijve1 zq%~E=_wtJM`@ZX*Nn>#fxyxC*R zSq+AFLKlCYJb8Y9U(C-h$*Z>>5|)w_<(hq}Y-fsqpnUgHFa7v^CQ~XlnB^JGuK)9? z`=q&K@^@|twgVPsVs=&PW$KGGRwciho&VkN*tGJ?`X)kYX=&f|b#-rcW}Np+ymsx{ znah_iZ*>XzcH>d2XQ#&r^*WK|>Wl9F+o}Fp{;Yi8_Be%E-U1v93=FCzt`Q|Ei6yC4 z$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP z(={{?F*LF=GPg1`f@pXi8MB0efk6^vLvVgtNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6 SHc|`>3=E#GelF{r5}E+CiUB47 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/player_start.png b/Media/Themes/Umami/Icon/actions/player_start.png new file mode 100644 index 0000000000000000000000000000000000000000..070ce76f4b8a0ec02ff44a520bcfffe63f4eb3d8 GIT binary patch literal 1246 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tKco-U3d9>?DX`})L$iu`*w`}@1!GZWKh zOlp5ub&8mA>}N>Qp(;%zOHmK|%=7EWHh z@!}~%Xw7P;`m1Md0Y^*uGNr&Os{XK>yOaNC)0K|=Z4b!_GHmOs1nqkQ>xm1hicH@2^TH{;orRmb-4 z{leE!$;gm0vskI9x2MOVglgV}{9idm|Ni^S`ML^o{SH4p!_4sJZv5}s=(nWcWS&VHjfThM?gthwT)zBx)uyWHzqf5XHEmi6M-zkNi5YrAoeOrqZgCfp zT{m@Vs(>I%JM+tuDrW_$-et>{Ei>Au&)**WjY~yuXIIxY&Ye{=6&ef^lV9nc)prOE zot`LV;KQ8#I@@FE8egV~9x79d8RSlLrldKj9$m`L#>QSJ`>*0ho65%}>gSnV!w&4^ zVX*l5Oj<%#dhbcsO4Wb>mj2t^zNL<#TYW`yIHt5Zi7|BCRJ?xu`uW-){|b)xzApaz zR(9>_@VcF!cCX6FJUi{dEqUYh^7TvqZvQO4Z{FicIlJam2Bd!FV`Mn+<;&Gc6~$+a ze48JgHO#L1mBlI8>GEXmoH;t#^)HW}-@VIPT4OG9j=$gD_#7Xwa2pT zZM(es|1CP%XV2YF46f#9Tq2QdB`8^1TDq5+nK{0+Y~MG}!;QyO8s0{J*A=)ZZftBU z-fsWv!H=EiM^x(GQGO!lp{+ppTS=-#!9ub$6&Z8!h^ts7>?c$AFV+uG`8&7FJq z|GNtb(=|G)i)PPxy1u`6-rtg>q(`SWZZx)Cq!D^^yQs?&#)8yjrU@xMYm>M;JeVGw ztJ66uv3qB0Il~EN1!fQ9W6$2IC@VE~NW5cI3hM0m&#W&vv0}Z=_mB4<=wEx3U{!wO z_F)DF2GtVRh?11Vl2ohYqSVBaR0bmhBLiInOI-uA5JL+qV^b?bGi?I{D+7aRpDheg zH00)|WTsUz7#SEE>Kd5o8k&a~8d({cTNxTbG(3-tS;D};APKS|I6tkVJh3R1p}f3Y hFEcN@I61K(RWH9NefB#WDFy}x22WQ%mvv4FO#rGpA^HFS literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/player_stop.png b/Media/Themes/Umami/Icon/actions/player_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..b95ff2480f434e816ee681d819be331ee1710697 GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s79PZ!4!kK=EH?|Lx>3j9kuXZbp9*P`xv zm5CR+OT=Bu1uwpK{lX=>*Jq|nMY_j=w?5*lS3g_EuDGi(udJ->+i&aL2iE=DopCyS z|I}YiCX6B56eJj5==0^=3zKN8PJh1q`{Gp5_i$uwjhgl}`@dwT$E@dG3tm3hP|U)Ru{G+}>#t_QCQ`g76*?TA zl;10qIelL8x$d>srFVI@-}@QG9w_qic>;^l0SWGaO?wvX`e1u*w@u=Hp*{Tf7?gU{ zlWSDt14LK6`qH&VeCG0?wPAmiUX|@;Vqjr1K5TG!L#wISHH(PshijTQGctuo2t9kM z(D%4xV#5Jej~>RfRSUWOF4ZY2eN^H&9FWe}w4g!7)5u|FW4GV?=QHlL+jMg<%n1Iv zXv(V4My>^Onl_&aepg~u$LF;)Xqk$Z`-inj8(%zM5TmCpUAJ@BKAUf>>5t+z-;61o z@Vk4}E4zk6Zdb0(61aF=?ETwU{I8{p{x4FvmJ_GJz`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? zBXcW5BZ!9Qkuggc7#Ji$HU#IVm6RtIr81P4m+NKbWfvzW7NqLs7p2dBXCuYHz`)?? L>gTe~DWM4fwTTSX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/previous.png b/Media/Themes/Umami/Icon/actions/previous.png new file mode 100644 index 0000000000000000000000000000000000000000..90ecc8b397791e29e3ed1c811a076983119527e5 GIT binary patch literal 1135 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovyPZ!4!kK=Er`ewwsO0>=YY5Cm5d}Y!t zuFkbHn%rDgG#z{Ltn8xOS`Xf9|AXE*9q|oc*4e$wKq1dXKx>!5-4NHei=Fe{-szpV_hF`HbS^x4vfU{ya!Mci_zLy8FM+&TRa@*t276 z-V5s$<(vl<_n+mdvF^&;7Pqd|#{7}&j?Cce>Om{sHpHEsca^h8Y4hP%Z*OnQss7t~ z&{$CKiECVr ziMniSJN)`bft%-w%Z8*S|V&~kK@R%l{J46jT^4bxV+ z$5|H7XN4%dbWxHKG!0fXQO$CCSfC+)K%vk>RbbP+)tmXk8z=283GJ5p*DN2kX!*1A z^Q}Ll7+WgCf+Q+pm%UY(2285O{)O9PJ(73i$tLfUW?bnqyF1i)d5cp=L`I!qx zk9sQ~_m|P#`aAl?+bWjxp9AK({1(!mP&#q{Nl~i_9;yWgF4ZVMKc!afVDNLAW!ZD% zrL7-d9R4nM;$7bDdtbMl(64Ko94dG3mr_*r6!pS$iM`53Uj-StFQ+s_^{_GW{xEF1 zEbnfAch2LD!fAj0{;Mv_J9BrRzrU{B@yLqLC$bYGR`P1WPoF9r#YcOzAmGk@UlCv6thZJ+UZ`Q4r!>wawBf3Nh6|IXxXZkDNm5|gJT@0N-A>neOQ zv&((%tNxCML61C{Iy)jg%hm>L4Ap8~Vl`W+V^Yum&p){B{XICvR$TnYz`&qd;u=ws zl30>zm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhX zLqlByGhIXT5JMv?BXcW5BZ!9Qkuggc7#Ji$HU#IVm6RtIr81P4m+NKbWfvzW7NqLs X7p2dBXCuYHz`)??>gTe~DWM4f`6c|1 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/process-stop.png b/Media/Themes/Umami/Icon/actions/process-stop.png new file mode 100644 index 0000000000000000000000000000000000000000..969d7e46b03cb6c0658412c95bb0bd6c4dc74e4a GIT binary patch literal 1375 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zxP?KOkzv*xkm+nm-tI08VDQs{-7;?>@a*Y_~cxZRI)n=*jBwRr@~Mov*Gum)ZJbzx{h|!^Rme*!6A9 zE9VKg7q{*>zx)w*O?m(M^BP8vDo@z|(b7Em*shRi-X^08zxi#;w}{M}B&4z2&(X3@ zro5;)aN*Ue9p5k4s~$STbzWU<)swrwzc0=`E45{9RO_~>+KKV|WWFu+PK@5dVQ!v( zY_78V2iKA?8}kN=@vh{tw1p^ z?^ergOUo4)ow+mlzTKAG8w{7XWXB%sXfoSXaUog)11abF2>}@v7{FV7@zb?J&k^# zr#*o$aPFZn4@G0`i8srQlGTmhm0HM6Dn9F>9-CY}OGxN~MLOS^&FRS++T4{-KIsMo zEZF5Nn)q^)lxCRsLbs}Y>(}!)H#cW2J-kZw=bxV$N#APCV{RcKC zZ`hdfvhemKRjo53E0@jQwLbp1L%n@oV8R5^D;rCBi}Z}s9xTti93U^)s2vz6kSsF`rwa)xrQnDcLecY8vADj{t)?GN(b-H!8pZdP13HlW$S0C$l z&#&5*&zN~x@!R=jR~H$Yh%B2R5OP{LI*!kFZgJry6$!}*=NKMtXWQ>qda+KbuJseL zTNTL7%)(aoYjr$589*VF2!KtX!nWCiZ+mU}y_>uXe@8zvO zntyzj-R5fdw0!5kO#)}{{5G5DxuoJT^PkS14_v+~N*ydpQ!834dMlbwC|%myV)S`> z2dB%0`hVM>=x1383afB!eayhXpjzS@QIe8al4_M)l$uzQ%3x$*WT0zcscT>sVrXGy zY-(j_rfpzgWneJvvxOmwhTQy=%(O}dBLhQ2T>~>+L-PmdKI;Vst0Ch5E1ONa4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/redhat-home.png b/Media/Themes/Umami/Icon/actions/redhat-home.png new file mode 100644 index 0000000000000000000000000000000000000000..1d654650541eace316d850109a8f8ec79e084a20 GIT binary patch literal 1072 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_MxHK?As)w%PWI22c9l3*Z+!FamAsz2 z7LB_)ZaJ;Wa0zW(b-`nAK|{l;6G^ws;+-mHd~GVaf-JsJoj2q<{SKW)-tWePn`2(9XZc2+CTN(oP2kiPJ{5~4fkH}c_aSk zUONqq43YUq+>ip4t*h<#diGHhp$NYg{_ z=~cH>s~cB)vCi~pd9dF%Hs$SJ$(++kPd=sI@{(QUQqp*y>Hbq+;n3BUoX7hTqs6}R z-%J1eMSIVOKZSl*%OZA{_3p{s6sVW{CE$|pf=|mhd)eN+bu{YCjkGac|LJAJ4RJ%{tfmS$Ij%N`pX6RtK%AO11Ch zx`l<$h;;wm{<1gP{*g|NulHpM`TFLC3l(LKznrl)jQe<@gwOJsH6I#|{`|S(s$!ly z@4Gp+*55NKDsC!K~R-N%yqw&LIX3m5O5j-*1SsxVUa&O#xS8;FDTDcn* zfvid!&KU3ntrR(#BGh=~v0zVMU(ovNGiS}Z6~4W~rpB$*p>#9n{Y6KnzI2+JE@59& z@6G?_8V{sPOE)W!<}V^4l9^ALJ(pR|uWF`96HQ(#!hN|I%+*8BWdb zvlsn;{0I9h^)Lr1Q zhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efq}u( L)z4*}Q$iB}eRSDj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/redo.png b/Media/Themes/Umami/Icon/actions/redo.png new file mode 100644 index 0000000000000000000000000000000000000000..ab73631109595c31b33c4d71ca04bb3fe46740e7 GIT binary patch literal 960 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}hahdf;zLp+Y3o$Q@094K=9|MPRoYgewV zmC8QqCK$Mib+wb@nvf~myu_M19(bkLHGA)G;4Yos%l(%n@`r|q$dpHmZj>obyOpHt zdzr;}W2K4l%$?VL)%=c~*%HJRXK|+B{mlFC=T)C)`2V=$XsBTK>fhy)PM1Br*>m*j zH(TKtDQj+qn{QQiuS{?ky2U5dy*iQMJEP6lL+09pk^ogN!^6`_w)0~r2THEcI`Zx77b_ECHJVUg&B9tWd? zCOif+7cB2mU~^d<=q}`!k)|0S(7pONgHG&T!=5e;#l_3BZr%|}5OUOD>)F!~_+Y^+ z-(4zRPR6LKKu z{@am(hpSa#6(^IK*-xe`1`G8sy{~4kW74?7)0wiRbgR=%jl`^~jd_1h9jQFw%hAHz z_@8m%(zTM(GndSm6?cZwV(JASuM9QD2A5OYJ~%Y8ND5{;=+vCK$&jaR@_BXj-3{G* ze>&uCK6LO*+ z_1Xu%3sc>sKIK*Lr?4N-^wk*>bIkT!{-t{F+}~l*>~E~w+iq;1`rYPblU2e>u4ng>KXJWs@t$1s z(qYQH*_)OMI2_TCmrQZnF?-D&{=|aSY>#(?yfncfB&v+z3jz#{r7|4S}`ycJfFqD zz@S><8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$ vl+3hB1|tJQLtO(iT|@H_LnA9Ab1Oqbh=yw$-7Fax7#KWV{an^LB{Ts5+^CE* literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/reload.png b/Media/Themes/Umami/Icon/actions/reload.png new file mode 100644 index 0000000000000000000000000000000000000000..1af6789278d35af0a65ff002585889d85ea410b1 GIT binary patch literal 1495 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq z7(Bq(?PRtc0|NtFlDE4H!+#K5uy^@n1_qWbo-U3d9><@CW(S0%N?h|OG+MhSG2}@} zaOIzpnx4JX`GLpo9U!8yMjB$GU`QNtZtM8pI7Ss80KSofnYI?o!bM1?3 zJ`2AJzhgc@D7EU>=`Hp@-7|OpOuBYvapdatF1C6TGOd0HedU}tgY)r)m)-yB+T>T3 z9kyuhpHN#Rmle^WvYgdu?aRNDuU?i+ojW1+GPh-E?Sj2Gc$c5w=IoW$T3nOijQm9|HNEoRz2HX z@a~hsl&yDKHr*G{b)FD?o4L?F&fvG#Rbh{R#}5i${T}CgX66%jBY!Iu_tbydoHyNA z({|cw=CkoP&JW?OnYA@>Tkyk^KZWP7p1t;{M%}VZhAZOv4t37-e}BUHEUwd1R?F6|9c*H zM&#>w|NXWkX7aL23_CTZtk}VGw(Yin#M-^PJr~71-tjN!Y(zm$SpAoeZTgQcOFd>a zidAjDX7^g7%zH^uc0kX$ppg6A$GfZ*7+G&s9cQ#WBNMgv)Ix^7WcjrE7tF4&x!Et@ z4xd=bH!k4XP1EB0Q!~wa4vMP0-<8SYwPu^e-R4N6oqrmCertAKE%&_Z z2BVC-^tVHg)UQSq?9|yIE#}mBKIh(V(S9qN9`B;=MUk786YjceY|Q#xYJ&-M87tVvGy z&+hB{X7nb8;qS8iD=f>;l^)bz>wKY=$(mn$#>R8$mG3j=&9W9b)2(5rWmU8?>2`JH z;v;HIi?(j{W8Gn5e7T>AckbdBwtEW}=BAVx*#(+L{S@lu-2PKLPi6CL9U0X?E`x=$ z7TnOuPT10yvmrM+>70n@Nv`Lj5)!+)r><=-SewrjweCKftyJvOsfik{)jxVNXHBaO zPrUOp@nA~A6tV4L?D=&yZ8uo{1Qdu~$bH}PCS0d5?_$!mu)Ag~bwXd~|I0{--^BZD zSN36tp8g2NkMsBZ`WN|M(?y{DYW%Cl$xCGgWR@F$YMFWHr`sJ?^#k9E_T1Z{7b3N% zV&?AazY2aXWLSAh!Mf<*y^VkF=d$kDy2SkGi#12ur&w@sW`-JPbUZtoU#soTmn3*v zuv?Z>=V6D$=Ihxftv`G>?%-XL)xq#x_hF!2zWmxnE?#e%Pf1CwHcf6`t}$!oqj%og z-#^?IZY-R~VZ?DnO|D2~L&4>HTVgBXJ1Y+9ZIXNF%hnSis&pas<*Bu+_coR5$3B*H z)8YIm^r({M=ZQ6HokHt=*BZvYX*?}(B>c{sMRMPC?!NuMcEj-_uV>3=FCzt`Q|Ei6yC4$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}m zqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efk6^vLvVgtNqJ&XDnogB ixn5>oc5!lIL8@MUQTpt6Hc|`>3=E#GelF{r5}E*OW}Vgm literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/reload3.png b/Media/Themes/Umami/Icon/actions/reload3.png new file mode 100644 index 0000000000000000000000000000000000000000..1af6789278d35af0a65ff002585889d85ea410b1 GIT binary patch literal 1495 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq z7(Bq(?PRtc0|NtFlDE4H!+#K5uy^@n1_qWbo-U3d9><@CW(S0%N?h|OG+MhSG2}@} zaOIzpnx4JX`GLpo9U!8yMjB$GU`QNtZtM8pI7Ss80KSofnYI?o!bM1?3 zJ`2AJzhgc@D7EU>=`Hp@-7|OpOuBYvapdatF1C6TGOd0HedU}tgY)r)m)-yB+T>T3 z9kyuhpHN#Rmle^WvYgdu?aRNDuU?i+ojW1+GPh-E?Sj2Gc$c5w=IoW$T3nOijQm9|HNEoRz2HX z@a~hsl&yDKHr*G{b)FD?o4L?F&fvG#Rbh{R#}5i${T}CgX66%jBY!Iu_tbydoHyNA z({|cw=CkoP&JW?OnYA@>Tkyk^KZWP7p1t;{M%}VZhAZOv4t37-e}BUHEUwd1R?F6|9c*H zM&#>w|NXWkX7aL23_CTZtk}VGw(Yin#M-^PJr~71-tjN!Y(zm$SpAoeZTgQcOFd>a zidAjDX7^g7%zH^uc0kX$ppg6A$GfZ*7+G&s9cQ#WBNMgv)Ix^7WcjrE7tF4&x!Et@ z4xd=bH!k4XP1EB0Q!~wa4vMP0-<8SYwPu^e-R4N6oqrmCertAKE%&_Z z2BVC-^tVHg)UQSq?9|yIE#}mBKIh(V(S9qN9`B;=MUk786YjceY|Q#xYJ&-M87tVvGy z&+hB{X7nb8;qS8iD=f>;l^)bz>wKY=$(mn$#>R8$mG3j=&9W9b)2(5rWmU8?>2`JH z;v;HIi?(j{W8Gn5e7T>AckbdBwtEW}=BAVx*#(+L{S@lu-2PKLPi6CL9U0X?E`x=$ z7TnOuPT10yvmrM+>70n@Nv`Lj5)!+)r><=-SewrjweCKftyJvOsfik{)jxVNXHBaO zPrUOp@nA~A6tV4L?D=&yZ8uo{1Qdu~$bH}PCS0d5?_$!mu)Ag~bwXd~|I0{--^BZD zSN36tp8g2NkMsBZ`WN|M(?y{DYW%Cl$xCGgWR@F$YMFWHr`sJ?^#k9E_T1Z{7b3N% zV&?AazY2aXWLSAh!Mf<*y^VkF=d$kDy2SkGi#12ur&w@sW`-JPbUZtoU#soTmn3*v zuv?Z>=V6D$=Ihxftv`G>?%-XL)xq#x_hF!2zWmxnE?#e%Pf1CwHcf6`t}$!oqj%og z-#^?IZY-R~VZ?DnO|D2~L&4>HTVgBXJ1Y+9ZIXNF%hnSis&pas<*Bu+_coR5$3B*H z)8YIm^r({M=ZQ6HokHt=*BZvYX*?}(B>c{sMRMPC?!NuMcEj-_uV>3=FCzt`Q|Ei6yC4$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}m zqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efk6^vLvVgtNqJ&XDnogB ixn5>oc5!lIL8@MUQTpt6Hc|`>3=E#GelF{r5}E*OW}Vgm literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/reload_all_tabs.png b/Media/Themes/Umami/Icon/actions/reload_all_tabs.png new file mode 100644 index 0000000000000000000000000000000000000000..1af6789278d35af0a65ff002585889d85ea410b1 GIT binary patch literal 1495 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq z7(Bq(?PRtc0|NtFlDE4H!+#K5uy^@n1_qWbo-U3d9><@CW(S0%N?h|OG+MhSG2}@} zaOIzpnx4JX`GLpo9U!8yMjB$GU`QNtZtM8pI7Ss80KSofnYI?o!bM1?3 zJ`2AJzhgc@D7EU>=`Hp@-7|OpOuBYvapdatF1C6TGOd0HedU}tgY)r)m)-yB+T>T3 z9kyuhpHN#Rmle^WvYgdu?aRNDuU?i+ojW1+GPh-E?Sj2Gc$c5w=IoW$T3nOijQm9|HNEoRz2HX z@a~hsl&yDKHr*G{b)FD?o4L?F&fvG#Rbh{R#}5i${T}CgX66%jBY!Iu_tbydoHyNA z({|cw=CkoP&JW?OnYA@>Tkyk^KZWP7p1t;{M%}VZhAZOv4t37-e}BUHEUwd1R?F6|9c*H zM&#>w|NXWkX7aL23_CTZtk}VGw(Yin#M-^PJr~71-tjN!Y(zm$SpAoeZTgQcOFd>a zidAjDX7^g7%zH^uc0kX$ppg6A$GfZ*7+G&s9cQ#WBNMgv)Ix^7WcjrE7tF4&x!Et@ z4xd=bH!k4XP1EB0Q!~wa4vMP0-<8SYwPu^e-R4N6oqrmCertAKE%&_Z z2BVC-^tVHg)UQSq?9|yIE#}mBKIh(V(S9qN9`B;=MUk786YjceY|Q#xYJ&-M87tVvGy z&+hB{X7nb8;qS8iD=f>;l^)bz>wKY=$(mn$#>R8$mG3j=&9W9b)2(5rWmU8?>2`JH z;v;HIi?(j{W8Gn5e7T>AckbdBwtEW}=BAVx*#(+L{S@lu-2PKLPi6CL9U0X?E`x=$ z7TnOuPT10yvmrM+>70n@Nv`Lj5)!+)r><=-SewrjweCKftyJvOsfik{)jxVNXHBaO zPrUOp@nA~A6tV4L?D=&yZ8uo{1Qdu~$bH}PCS0d5?_$!mu)Ag~bwXd~|I0{--^BZD zSN36tp8g2NkMsBZ`WN|M(?y{DYW%Cl$xCGgWR@F$YMFWHr`sJ?^#k9E_T1Z{7b3N% zV&?AazY2aXWLSAh!Mf<*y^VkF=d$kDy2SkGi#12ur&w@sW`-JPbUZtoU#soTmn3*v zuv?Z>=V6D$=Ihxftv`G>?%-XL)xq#x_hF!2zWmxnE?#e%Pf1CwHcf6`t}$!oqj%og z-#^?IZY-R~VZ?DnO|D2~L&4>HTVgBXJ1Y+9ZIXNF%hnSis&pas<*Bu+_coR5$3B*H z)8YIm^r({M=ZQ6HokHt=*BZvYX*?}(B>c{sMRMPC?!NuMcEj-_uV>3=FCzt`Q|Ei6yC4$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}m zqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efk6^vLvVgtNqJ&XDnogB ixn5>oc5!lIL8@MUQTpt6Hc|`>3=E#GelF{r5}E*OW}Vgm literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/reload_page.png b/Media/Themes/Umami/Icon/actions/reload_page.png new file mode 100644 index 0000000000000000000000000000000000000000..1af6789278d35af0a65ff002585889d85ea410b1 GIT binary patch literal 1495 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq z7(Bq(?PRtc0|NtFlDE4H!+#K5uy^@n1_qWbo-U3d9><@CW(S0%N?h|OG+MhSG2}@} zaOIzpnx4JX`GLpo9U!8yMjB$GU`QNtZtM8pI7Ss80KSofnYI?o!bM1?3 zJ`2AJzhgc@D7EU>=`Hp@-7|OpOuBYvapdatF1C6TGOd0HedU}tgY)r)m)-yB+T>T3 z9kyuhpHN#Rmle^WvYgdu?aRNDuU?i+ojW1+GPh-E?Sj2Gc$c5w=IoW$T3nOijQm9|HNEoRz2HX z@a~hsl&yDKHr*G{b)FD?o4L?F&fvG#Rbh{R#}5i${T}CgX66%jBY!Iu_tbydoHyNA z({|cw=CkoP&JW?OnYA@>Tkyk^KZWP7p1t;{M%}VZhAZOv4t37-e}BUHEUwd1R?F6|9c*H zM&#>w|NXWkX7aL23_CTZtk}VGw(Yin#M-^PJr~71-tjN!Y(zm$SpAoeZTgQcOFd>a zidAjDX7^g7%zH^uc0kX$ppg6A$GfZ*7+G&s9cQ#WBNMgv)Ix^7WcjrE7tF4&x!Et@ z4xd=bH!k4XP1EB0Q!~wa4vMP0-<8SYwPu^e-R4N6oqrmCertAKE%&_Z z2BVC-^tVHg)UQSq?9|yIE#}mBKIh(V(S9qN9`B;=MUk786YjceY|Q#xYJ&-M87tVvGy z&+hB{X7nb8;qS8iD=f>;l^)bz>wKY=$(mn$#>R8$mG3j=&9W9b)2(5rWmU8?>2`JH z;v;HIi?(j{W8Gn5e7T>AckbdBwtEW}=BAVx*#(+L{S@lu-2PKLPi6CL9U0X?E`x=$ z7TnOuPT10yvmrM+>70n@Nv`Lj5)!+)r><=-SewrjweCKftyJvOsfik{)jxVNXHBaO zPrUOp@nA~A6tV4L?D=&yZ8uo{1Qdu~$bH}PCS0d5?_$!mu)Ag~bwXd~|I0{--^BZD zSN36tp8g2NkMsBZ`WN|M(?y{DYW%Cl$xCGgWR@F$YMFWHr`sJ?^#k9E_T1Z{7b3N% zV&?AazY2aXWLSAh!Mf<*y^VkF=d$kDy2SkGi#12ur&w@sW`-JPbUZtoU#soTmn3*v zuv?Z>=V6D$=Ihxftv`G>?%-XL)xq#x_hF!2zWmxnE?#e%Pf1CwHcf6`t}$!oqj%og z-#^?IZY-R~VZ?DnO|D2~L&4>HTVgBXJ1Y+9ZIXNF%hnSis&pas<*Bu+_coR5$3B*H z)8YIm^r({M=ZQ6HokHt=*BZvYX*?}(B>c{sMRMPC?!NuMcEj-_uV>3=FCzt`Q|Ei6yC4$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}m zqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efk6^vLvVgtNqJ&XDnogB ixn5>oc5!lIL8@MUQTpt6Hc|`>3=E#GelF{r5}E*OW}Vgm literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/remove.png b/Media/Themes/Umami/Icon/actions/remove.png new file mode 100644 index 0000000000000000000000000000000000000000..51323d7f9ce43ce709794be4bee2429a564e0e29 GIT binary patch literal 394 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}gvJ)SO(As)xyUf9Tc$bqNz;eQn=vju6b zDJ;hpEKOxO!k{B?(TH7V0*|9__k@6?{URkV*6lEwWPh^vYsof#Cyvw8i_U&4c-^?{ z)7pjm-`)QIY?VNs-f`K*-7G!Jay)*8GWp%L-5rq0@P7Trn%W5mVs{*fnQ{0@f|{E6 zyA5~Obf-^c<9Yrr@UQFCp8|)H&RE15-hNp| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s8do-U3d9>=$ap7uNBAhNeSqkE;mVZP~~ z%(GrF2_?0j(3cRlKiJ}-BDJ5Pxly&VbN&%0F}C2!kR8`qHA|v2WY?HyTFp&6xAXaz zGa?V>bMJM0z42yg>~|&3fWrn==GV7xGr75A|KlaAeqKo659i)=KJD^e>-02_<@`%5 zbN$x{7#K4!wBK_T+Hzap%jN2;rBaT2>$Wb={?F>LWQBrMMW*KjkC_ffmw7E+*toX(+sd#21r{&OkMm7C zG;Z$LbNmRmaA~^EPU?K6r;CYTW8|ddp{YO zVz1wyH!nK9-YI_ap7qD>EeNo<`04o1#Sf2PknvZ0*8h6e=bv|CbTpi|oDle^Xq-CJ z(fx>|l9dyOJIBYlUQ1e*kj)2?C{7#J8- zOI#yLQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=I zR>@#wU}&goV5Vzm9%5)@Wn^w;Xav#lJThhp0|SF3$cEtjw370~qEv?R@^Zb*yzJuS c#DY}4{G#;P?`)(P7#J8lUHx3vIVCg!0Oe{Bs{jB1 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/search.png b/Media/Themes/Umami/Icon/actions/search.png new file mode 100644 index 0000000000000000000000000000000000000000..d543502ad037a7c4d11cf1f6b0468f2ed08d6e12 GIT binary patch literal 1414 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h49iA?ZAs)x?PN~lc4i!0mzViLIR&EiCJOpG~jz}J~H!z&VsU-YF{?!y$B_=&3uOEl){}?KEALD%V zNdDi#fMZDie6lddql*oqr!~y_Var7QFKP z^>vY}^>uU(^(->%WxV?FgkpoH*xV{jsb1UsjWeddy?M3nmAvMSk72hDd8k~vzUgJC zP1!rQv;d{d#Tr~vtcMtbAAhVk70h%j)im|jU-oYoliUkqZ-0~hw@0+)aM1Z_;oFkF z&s<=n7hUpt+O(tI>7C}9$yq_yu6Q@D`1JU}lQ%c~lV_gQjsE(Zf6skxhG#PwYQA0g z_Dnj?KlkpZY@v(mR9)_NpMK`EBbQ0)>zuxz1ydTc#7eS)!u0t(w;Xbq+;uta2a&)h;*nDytqi))mSml_K~_!yj&rnIOw zDKMQEu8w1Hc@pZ&JWs%GQiw2{>~Th+$YhSNJ#{7yIxp+`DN1V!yj*)YL|^Ue$apM z#1m8W*Bjc_oq0Y#JoKfhWQWcFe_S7fr#B}mh$0Yw) zvOs7Jr_2qT{dDp)-`NMBe`Y-Y`P0tN ze?2`X$=Tfb`t?RngUkhPh7DyUB_*6nTs<2@A|r2lGFaSsb@yMSxA$qeCpTV8U(0XV zx6f|Dl&t6HzN;U8Snzb>`o4QVq8-i&6kM*GA$*vDVb<)~^MzdwyGviociDfRpRKv^ z>z7}b4n9bEdQtg)&mGPKzWsXhx6Ya+_4nT1>gSeo{mdCA1Zar7d-G<`or@O*nHg?f zxw2))mNS3fwtba06zgt0o7TL&{QaJfPsL-GZtr$uBbJ8rwTUHw_{pUn+xR$f+^ z_4fS#^uKKGkN#gcJmpad0|SFRdP{kVo554k%5tcu7Rblfmw*5g_W_X zm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn3=MS+%ybRSLkx|qjLfYJjUXDHN5(8+U|?YI MboFyt=akR{02)4tCIA2c literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/start.png b/Media/Themes/Umami/Icon/actions/start.png new file mode 100644 index 0000000000000000000000000000000000000000..1822571ee05a1649593d5f07a36501ff2040600e GIT binary patch literal 1140 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tIpPZ!4!kK=Er#CC*+iX5;1{di7wdeI8D zRJD~oZqAcDJeqbI_ckr6?QvWduJz)ylF_MlYsWBt!6`w)F8W~|fp1Yq$QdKKwuIu!zIL zo4#wEy&S)H-kMde35)_!^X~kq`5N4^{rlSp3+@e08y~-7 z%{~9;-}CdlUrQEjwwJHlUwrL=(@8VUvyHQ-Z^^Iz^X_eFW63Y`#ct-zpl|RE0i4^R+iGS!gE9$ldC{s(4R*&zBeP_Jm0-HQ{nyB_3Dt{NOa5V>v9V9!LH@ zxpl4gwR=}1b7W+!k9|0zFOe%K$Tz2gf3dFHO)W>SOINq;>=O*-PW*Z4n{}AZ>oc-a zzozWhPL7a$a8&ux#|Rhp4zGZWDH$#;M~-jh6zRGhUOrn}Kif2Z-W_ixK{s{|xqkN7 z9ak;qbbCxP>g*3#v{B1nXYyD1P19R$gm=VBF4gL&DA90e;x)OYwIxu4^-*ir>_>B? z_j0)ZuXYx&d;k8kdYx5VkKS@}-Vt=qVSHGEcZdnpkK`{Z4;UB7>|l~{eD(Ji~6^Fh)<_2=tdIi@hqd@a}F zUbfrTyyU;>kHDXQuU{)&oBw9VvK4)OUl=d^es_9ex5}OtuJcP;qZQ_LJ1{>>ng72m zDI?2Urv6XZZ{66lvZvo|zsIRJso+8H65$m~;?Aw9iuzD2SaE>y-50~3rH}fbD2mJ0 zq^5j1)0@5f+Vjg2(+lVCN-5G;xv}MsrOUbVhF+@$4*2&8$lrRp?HIrOeJeY=D3(tL zLZrmguVtPW&}b{K{gCyI*K+E%R}BijW{)nqf8Q}T@Z*(oU+%BW2OS%68UvW zY>5}gB_$uL>uc65cYhT0!HesSzRl;IzUc>ejenhM^8a0*{GY*q)A?p$e#LnP1_sp< z*NBpo#FA92c8tNLD=^C1c7#dj_nOhkeK{Py%j9J3Kz#s{-Aviy+q&%@Gm7%=6TrV>(yEr+q aAXP8FD1G)j8z}|`1_n=8KbLh*2~7aZTJ*XA literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_add-bookmark.png b/Media/Themes/Umami/Icon/actions/stock_add-bookmark.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e8d311022d678d82efff324ceb848479779b1c GIT binary patch literal 1101 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_{+=$5As)x~PClD29V&9P{{7jWTw1F!Z3fu&9zqS@0rxCBLA6&)fMDJgDztlz<~(IIxxg-2cj zi=vkLP2Tcv#pKSFNyp=p&nG|RU%KwDnS#Zo7cci#zMoh9Zm0Oa`QMo z&VK#q({`7(%{~4-#YzFsmfqaWV_z(l*|%Z(&MkGHI_>W@R0Z*`HTkmciI`o*e`kh$ zzyGmM+y86k{r^6b@7;YLBf-bUQ1SUp^qKSL7q1Er*ecEOJ5->q%`Zz(>v~-Kuj>x` zW-~OLJ?krz&c8h@Nxy!2Oy2s*`{KW^xPHo_&slBqL4j1c%`rW0oC`g(o{HFMehV~V zs1o8(ys+d*srQvtsjH?o_a){XUGy&O#;sdPxw*WWug)Bu$5P69c!S6NxYVR0d$~m9 zJQS8XcnKdiFsM;u@M>Hp?ctkVQZgmOgv;S*_Jgou9@*8x@#ZrnGXGpN+qs{~chPU1 zlFP@otkPX9+IHW`T*u7JOhQJ6MM124;S+-&eg(&Wa@uYQ$~^wc`$EV<#U(D6d;Qd3 z?&4qhvZuG#(AxU;S3mca)zQ(XU|c;Yl=U< z2sroKb30hgJ+?`QVcD`}zqBU&<@i%)AH=b4z530QRxvSFr~R%ybbF-6@UUQphsvQZ zUrd5d?c=Jt%v85u-e0q96JNaEyhHg6BV5{J(cPWOeAIlPW)JrJE%T`V|K14T?4ZaLklZoQ!7I=Z36=<1A}RwEeugK?UF+SC95 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_bottom.png b/Media/Themes/Umami/Icon/actions/stock_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..ecea1ee672ad6e5b4b07e8b0e716840f20eb5dd2 GIT binary patch literal 1111 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc zVDJEAx0Bg+3=E8S1AIbU85kI>idh&?fmJaJ99fsLSe3BYl(E>9vsjmckW~qbbqR=J zT?Ue}ui&z;Bdk+BZlaEL8B4|ttD@z0#jET}mb=uf41yY4 z!qT}XYU1v6t6~9=S;7%EPcVE1SHw!Lh*exsYq+BqN<^;^j9$+Z zvq&mtJx}af{@4vXu^V~fHu1!5=8fMdl(1GJaXVkqQstzbe96mHl6Uc^EK^NgrIfl? zAbo{a`a!{rLxPzrbuw4#W*!#ITBVnBLO6GgQT|$!{0)W$Yt0Ie%N1=gF4eaj>sQHXd z_bLC0XTv9*51(=}Y37N%IVTF{p3R+mwqV||@`X3E7oDtKe5!8o>AJ<2$`;?rS#r8= z$?5tfryG`>satZkZt2;&rRVCFo~vJWqjdR&`sEkvSAbB%ic1YEuQaT@Rk7+^$Es_M ztFJY#zTUXzV#k^rjcaZ;t-aZ__Eyu{M-}TX^lrQ~Y0H&qJFd;yePhAi8;keeT(s}j zlKr=q?!UF{;O!Ov|NmcjF!%`r1A|sckY6wZBNH~S4{nOq450nrYlf2zs=FQ)4>DfvZhS zfhL@5Z(d&RJJ)FE<|yviB)_Vhj{V)PqGg=sIzpR+lbmZ}eY_1-(o~PJ{Irl<;K9Kl zt88zqXmjDR)9w(t6M_w11t-tVu+FZEaoMnYUS6zkIvgeQ1-pq+%)6BM+P1||uPY*}*jaF0cw{K`}#O^PjwV_;hZh z!nwv*F@Bw&H1;<<;q&zS67XbN9#8K)mBYP~`}TAl74@poaB5nmuwdD|xr^7arEwi> zTD)Y*rhQBI?yi5-vTxqHZ_}!D(>7RihppVUt#9AL&YfF(x9;p*ShrS8I-<>UwFpO+ z)T~*zZ$-_XEtTc9HR9qT(eN*e7#ONv`|vD{{v61_z@S><8c~vxSdwa$T$GwvlFDFY zU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_LnA9A zb1Oq5h=%8pF-sU27$iY91m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BL&LIp00i_ I>zopr0QEP^t^fc4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_copy.png b/Media/Themes/Umami/Icon/actions/stock_copy.png new file mode 100644 index 0000000000000000000000000000000000000000..94c72fec54fb6c3bb50fd7a13d797816e8ab31a2 GIT binary patch literal 891 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CYO>_%)r1c48n{Iv*t)JFfi46x;Tb-9N!x1>n|KAV*7pX%xxtX z-~Hm|GJgEupzX!6sh!@}brd+*9^GQuuwasgp~||uJ4#cXIHm}2IvsLfn;pZz?R})= z*RAqcp3k>3z0+sCxP2z&*`4BdJD;bq{W#ywu;5G9OTp~7e6cz%sZ~YK9xL>)GOW5- zFz@Uc{=0Wyo1gZRImX1G$iWb>`mdMIywgt|T{c>1^Bp*ICBr1;y77{rOao(n-GH_K zIwriAe`C9E-@jOv3yy9ITrF{W`d?=23SNBva^+2STc+gX#n0}2uid%v=TeK`C4Dn2 z>*R9Fri6(dPnKP=?2zyClG0G`Q~fb|^4AgCxH;3X7Qo+&6_;w4bLkDAFW_$?wDl3VU&=jarI5%1A*t%U*{ z4Ey4bzq`JP(Yh~r*V{4&m4rwkFU^d#)vQr#!;a_`mpq*zsjmJ|%(d`lj@Zu{IfeiY z5uR}Q#t9~Gx|EpujKvh$B%C}vG#74d6FB6vSo=vrvYVURnH3!z+j7fWy%e(Ydvk9q z2qmONOiOjrd!HjI$j$I3Cg2|Qs-^B%wr?Uz`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? cBXcW5Lx_fJ8{I4!7#J8lUHx3vIVCg!0A^KZu>b%7 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_cut.png b/Media/Themes/Umami/Icon/actions/stock_cut.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf70b470b0eb97598c75e6d7c826bf0983de7aa GIT binary patch literal 1272 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc zkWm0(#(8si!ZL-0WzM`=Yk7Fqv9hj<2<_-<-ORx; zdFq69LV_J#tqV9f=5uf?S+)pdK0EswHnz3w>?_&W`X~0Rh&B zTD@ZO)Cmg~&RxsOI$=`ZW)6<6oSf@9I5u-~Ze(ZQ#L0O?P!QsziIe-MOqe_wL=lfB*i2dk-GmfAHYJLq)}h z4<9~KQhN00(PL%h$B!R9e*E~ks_KguFJ8TR`TF(i_nMmj|NnPj{OrWQz>r=Nmf5sqq0Z70eU-wcPo8mT7_YKF zE~EI+E;V(c)Qr@qeap@>D++E)e7eU%z*(XA>!p_yIXIvHC_TM;Z3EBrYp&X#rwRx$ zb$Uj=-z{w-p|EfiJzYvo!a$E@Mq80 zV)dzJXQKo<-?_eSaowyX_3WAFVsDNkdh;yTF1sgc9I}Ng%r9H#piqp|&QhMzol+T# zn$#YyG`@BER{D~**&Irp+P{2eY|e@FiafO`wOH+k#-XFBHtFnaUrREjGt0lSu%7!i zrO|W7+P4N*=EST#pb%~ud3i(fT1lTng~?mi{O8K|D>Hj9`ft-k>A4b$k9_u>PP!Gw z`ht_2^X0F#S>2J(P9J2Nl$3HYbLOq+Y(-T~Mb*^E+tyo;HnjJ0E@__Wd-PaXq>E2T zNK8z~)q8$(xfe07Xzy&DI(c?`dwc)<>D`m3&YZ~^e~OX8N;e^^Wrn6E0|SFRdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn m3=MS+%ybRSLkx|qjLfYJ4Ivt?ZFI8)l^&k1elF{r5}E)*C>8Ml literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_delete.png b/Media/Themes/Umami/Icon/actions/stock_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..7768ad96c11cee831a071ec4bb3befb966f5aa51 GIT binary patch literal 1389 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?3oVGw3ym^DX&fq^B&)5S5wz;4Xi< z^lnQK%aPnkx{J;@L~Pp0pLHd3j@x2+lP8)5)tB)GSlPO0v4^-O_z#VyFM}1&}mxn6cx_p z=jT*09;jk`Uwix>^M!pphAKjwN0K&{9=RDYNhQFmc*CMaN+~-w>2LKfk+++)cER7b z;rvM!E1YD13$0p}R8>{wT*M&2!q_5kBWIgvk0D!V=*JVu{tOJetoCKI7pN?Eovg^a z(m`fp1W%*GgZOBcgr!^zAAZ)%nA3TBq+a1=0Dm%ZODx6L>AfBO0dpQPpUbvEQL|Fr)EW5e7(OdPAExp~${?Fdv$tGfLA zU}y1K^GP$Bzca7)`}C2&|I=}PyUJWUp~87Tzm#OXzgNBV;KBHdSGLUl^|x;C)~#2K zN?w*Hrythy{(rP?@5gg)nHd=xS1(*h;B0?> z*tK4op3<4gj+%wK#~ycY{A9HKq(r#wJl$oPn>-3P=5$RGDV|;_wxz{P`?S#+li9_) z@7{U1!Cl7n9P4UR{q*xs&p3#v6hC;rPhKSQW_)yTcjrlmRf`^piS?e#F4{P!=Xhvz zWu;_vR8-Q_r>QLg0{K(JHFR~C1|Q^9J8iT%GB?QYl4YXr%qj_ zq35M3x!s!Ua?!>$mT&wnKQ274-PLVyZpP(@Cfrd$eqdyO8g{UYV+w_Kv{44-C~_Wjpi^{iyd6a^&qCl`E}t}E8fvU~3ZnY~t7)*n7B z4qf;%;NzP&J^NNVIC;0I20oIVo4$DE7Q1z;HfE$>x7=#5e?y_2k+~y>XU*@w=3l<$ ze!a0TS$dLZEdTjdXW>Re9-c3c7qau~97!@fzs#7yebu&o-;#nZHzhBA%+GR+Ic@3s zN5z36mHF}S|IR5ci>|$^dG6=#76FkPpY?zIt}Yjxa9^i#+L!S7`TKV-UAmRu;d2{P z&rG(_d6Y2%#g4(D&XnovS6>BcjH2W!h@%;S1+wy z%;m!H;rs8;*;!e$UGH`+nHTfVf>EJGz>AZE(Sm(iEz>zmjimxCf~?nSGQ6eU{#>a( z^Whez3!9l(7hX8?o8eyOuGN}O9628=WZDuNiuoJ`c4QXKI1?i$vrwR=p2a1w<>;jL zgaR!qW9z#Ty>9233z%n|kmHhOIR82KyzHuV-}cTho_1z`!du()?}D3(S`QcBl})$q z_w{96&%lw+%E7?Rz}jH^_%e?lgTWdT9+k(%3~6d&M*BDwI3Gwc@HRBg&aG!YEq1x< z@0r>r1_lQH64!_l=ltB<)Vvag%oK&3{Pg^`W92&;7#LJRQYncgsaDBFsfi`23`Pb< z2D%28x&~$;h89-FrdEb#+6D$z1_skUTNt8f$jwj5OsixtGB7mMH89gPG!HQ}vNAHa YGBku}xVF*F5>)hgy85}Sb4q9e0MXM-@Bjb+ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_down.png b/Media/Themes/Umami/Icon/actions/stock_down.png new file mode 100644 index 0000000000000000000000000000000000000000..43e99e1245cce419954698e0945a2ab263f72bca GIT binary patch literal 1072 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_owcPZ!4!kK=Er_4)EIG!nX{p)t9|jO&(%hVsNKe5S^C4;6LzG@Lka;J}3z)vp#ZqO;Fv+A1&eO01CNTlr}V!{U`%5gRr=Inu~&*>wBD z5~f=k52lcBz2)!b+&L6_@a&(%9?S|NE&YwR#de%Mz_ zUxxa=kKfwkUV3zS+KfoXsA$L2r_LNc*SIa2mAku0{JHK{w-oi3vucXc;%}XGR;_sW z^KqhXXy#?#BmZ8Q*4B#J&zSPmU;6dF-(PJ+^fg*PL~i)YbF|WW;^OCzJ)QsZGu;>7 z*|^^LWkHIBtzeJt%{O+mZ)v`Bz=@@J+k?EfZzJv$^0_*F%2n&_VPJSs zoy^8vwqo15b$wl*eA(abaS$-&e|PNIv18|2*RQO;`E5CK#Ec(yISh3S|MnS_>PEbO zaC!Q{+_!h-uR6SUh~44U%JAck&BJZCndBkHRg|f1bU%$!KOv z$x#u8w{}Z^`}};udPDBv%YR=Ys*XJ2DHLk>_D?Hh)~W~df_CeAY;C;rvqV%S*7)U- zJ#Qb$d3P4`PqFzR(h~E#{IPoQo*LcBsn2FHFfgc=xJHzuB$lLFB^RY8mZUNm85kMp z8d&NYn1vWxSQ(pI8JcMu7+4t?O#5tMh@v4kKP5A*lEKKp&`{UFOxMsn#L&pf$lS`% z2%_P6WXuu<1_nux4Z-8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9Uz6JP%xH6CkvU4)qJ6k%sTH89B0|NuY!ouR?P@OG_&%Dw>;{TU%Q@x>_eso;-j4`~?dZELyZ^&6+i9*REZ=e$Be|Yd37z zuyNzYZQHhO-@bkC-o1wo9XfaJ+=UAlu3fu!{rdHrH*em%ckllF`wt#Gc=+()qeqV( zKYsk=$&;r~pFVr`?D_NOFJ8QO`SRtfSFc{be*Nano40S@zI*rX{rmSHK79E2@#CjY zpFV&7{N>A+uV24@`}Xbo_wPS`{P_9v=l}oz#U{@5Wnf?sDGBlmW?*FD6_Ais(=s!6 zaCCNcOKNIr4(K?&fq{X6G0EHAC2&e+jTQp~!xK*z#}Elg)`Nk5!igem7e3$J$*Z67 zc1l)~LQdn~^@r5M6POnA87uTpxnB$kRE}r13<=ShZ{!&m_J>LRndzpa*z^8^!biOW zi4AO>`e&CaE^wR_-muf5`O1$pb_S_6%hyyqD){=DNlGSvn)0uW_ujLLoS2mR`>(|} zdHHl!E|r! zfv@}LIWWtVdt}{KyWpU6;BJkv1M{4qsa~l(7ZTVUxLA&_XJ{x@Ua(3lI4kDZ)6c~{ zj0_A7|BoED+1Ar1beMsGLAAs+q9i4;B-JXpC^fMpmBGls$UxV?QrEyN#L&XZ*wo6< zOxwV~%D`aSXA46V4Y~O#nQ4^_Mh1q4x&~&thUOuLMpj1VR)&TU4c9ihS%QMd)78&q Iol`;+0L3jp{{R30 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_first.png b/Media/Themes/Umami/Icon/actions/stock_first.png new file mode 100644 index 0000000000000000000000000000000000000000..1822571ee05a1649593d5f07a36501ff2040600e GIT binary patch literal 1140 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tIpPZ!4!kK=Er#CC*+iX5;1{di7wdeI8D zRJD~oZqAcDJeqbI_ckr6?QvWduJz)ylF_MlYsWBt!6`w)F8W~|fp1Yq$QdKKwuIu!zIL zo4#wEy&S)H-kMde35)_!^X~kq`5N4^{rlSp3+@e08y~-7 z%{~9;-}CdlUrQEjwwJHlUwrL=(@8VUvyHQ-Z^^Iz^X_eFW63Y`#ct-zpl|RE0i4^R+iGS!gE9$ldC{s(4R*&zBeP_Jm0-HQ{nyB_3Dt{NOa5V>v9V9!LH@ zxpl4gwR=}1b7W+!k9|0zFOe%K$Tz2gf3dFHO)W>SOINq;>=O*-PW*Z4n{}AZ>oc-a zzozWhPL7a$a8&ux#|Rhp4zGZWDH$#;M~-jh6zRGhUOrn}Kif2Z-W_ixK{s{|xqkN7 z9ak;qbbCxP>g*3#v{B1nXYyD1P19R$gm=VBF4gL&DA90e;x)OYwIxu4^-*ir>_>B? z_j0)ZuXYx&d;k8kdYx5VkKS@}-Vt=qVSHGEcZdnpkK`{Z4;UB7>|l~{eD(Ji~6^Fh)<_2=tdIi@hqd@a}F zUbfrTyyU;>kHDXQuU{)&oBw9VvK4)OUl=d^es_9ex5}OtuJcP;qZQ_LJ1{>>ng72m zDI?2Urv6XZZ{66lvZvo|zsIRJso+8H65$m~;?Aw9iuzD2SaE>y-50~3rH}fbD2mJ0 zq^5j1)0@5f+Vjg2(+lVCN-5G;xv}MsrOUbVhF+@$4*2&8$lrRp?HIrOeJeY=D3(tL zLZrmguVtPW&}b{K{gCyI*K+E%R}BijW{)nqf8Q}T@Z*(oU+%BW2OS%68UvW zY>5}gB_$uL>uc65cYhT0!HesSzRl;IzUc>ejenhM^8a0*{GY*q)A?p$e#LnP1_sp< z*NBpo#FA92c8tNLD=^C1c7#dj_nOhkeK{Py%j9J3Kz#s{-Aviy+q&%@Gm7%=6TrV>(yEr+q aAXP8FD1G)j8z}|`1_n=8KbLh*2~7aZTJ*XA literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_fullscreen.png b/Media/Themes/Umami/Icon/actions/stock_fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..db5035a681d82248ef14d1106372d4e1fddaf2d0 GIT binary patch literal 988 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXb3I)gLp+XOo#N{e5-4)K{`r|HK2cW8 ziVxk{yf~azE9hM6Rj6%r&0Qp>%d=^Nn5Tell*D5mU2Y++D3;cQZo9LKGJ-FLO>z)? z+imn&Sv6he`PPc>dn=94Jz?4Q;y~^5d*$zc|37c}y;5@hTg<4OJoMhc+wxP>7JYIQ`Lf3)?Z4Ost-4E+W1V1?be)1mxNbwktzK0PCM`AY z)Z$9cgNv@pWUX-%2-$G?jKTjPrlTAzqAON&-CV=BGgU99m1gfmyw%vQfsCTi=WTALq+CCHosqU_q|DJ$xQ2lkR)cFK3~NpdJ=)##gFYf zd#gA!d|#!&jrPzf@7Ui<%%7G1%RQE$RgC}r1LV~1t?Ng=o-H8U@@h>Od) zC^fMpHASI3vm`?yBqLS9-P1Qr1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0e Pfq}u()z4*}Q$iB}3HOk8 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_help-add-bookmark.png b/Media/Themes/Umami/Icon/actions/stock_help-add-bookmark.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e8d311022d678d82efff324ceb848479779b1c GIT binary patch literal 1101 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_{+=$5As)x~PClD29V&9P{{7jWTw1F!Z3fu&9zqS@0rxCBLA6&)fMDJgDztlz<~(IIxxg-2cj zi=vkLP2Tcv#pKSFNyp=p&nG|RU%KwDnS#Zo7cci#zMoh9Zm0Oa`QMo z&VK#q({`7(%{~4-#YzFsmfqaWV_z(l*|%Z(&MkGHI_>W@R0Z*`HTkmciI`o*e`kh$ zzyGmM+y86k{r^6b@7;YLBf-bUQ1SUp^qKSL7q1Er*ecEOJ5->q%`Zz(>v~-Kuj>x` zW-~OLJ?krz&c8h@Nxy!2Oy2s*`{KW^xPHo_&slBqL4j1c%`rW0oC`g(o{HFMehV~V zs1o8(ys+d*srQvtsjH?o_a){XUGy&O#;sdPxw*WWug)Bu$5P69c!S6NxYVR0d$~m9 zJQS8XcnKdiFsM;u@M>Hp?ctkVQZgmOgv;S*_Jgou9@*8x@#ZrnGXGpN+qs{~chPU1 zlFP@otkPX9+IHW`T*u7JOhQJ6MM124;S+-&eg(&Wa@uYQ$~^wc`$EV<#U(D6d;Qd3 z?&4qhvZuG#(AxU;S3mca)zQ(XU|c;Yl=U< z2sroKb30hgJ+?`QVcD`}zqBU&<@i%)AH=b4z530QRxvSFr~R%ybbF-6@UUQphsvQZ zUrd5d?c=Jt%v85u-e0q96JNaEyhHg6BV5{J(cPWOeAIlPW)JrJE%T`V|K14T?4ZaLklZoQ!7I=Z36=<1A}RwEeugK?UF+SC95 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_home.png b/Media/Themes/Umami/Icon/actions/stock_home.png new file mode 100644 index 0000000000000000000000000000000000000000..1d654650541eace316d850109a8f8ec79e084a20 GIT binary patch literal 1072 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_MxHK?As)w%PWI22c9l3*Z+!FamAsz2 z7LB_)ZaJ;Wa0zW(b-`nAK|{l;6G^ws;+-mHd~GVaf-JsJoj2q<{SKW)-tWePn`2(9XZc2+CTN(oP2kiPJ{5~4fkH}c_aSk zUONqq43YUq+>ip4t*h<#diGHhp$NYg{_ z=~cH>s~cB)vCi~pd9dF%Hs$SJ$(++kPd=sI@{(QUQqp*y>Hbq+;n3BUoX7hTqs6}R z-%J1eMSIVOKZSl*%OZA{_3p{s6sVW{CE$|pf=|mhd)eN+bu{YCjkGac|LJAJ4RJ%{tfmS$Ij%N`pX6RtK%AO11Ch zx`l<$h;;wm{<1gP{*g|NulHpM`TFLC3l(LKznrl)jQe<@gwOJsH6I#|{`|S(s$!ly z@4Gp+*55NKDsC!K~R-N%yqw&LIX3m5O5j-*1SsxVUa&O#xS8;FDTDcn* zfvid!&KU3ntrR(#BGh=~v0zVMU(ovNGiS}Z6~4W~rpB$*p>#9n{Y6KnzI2+JE@59& z@6G?_8V{sPOE)W!<}V^4l9^ALJ(pR|uWF`96HQ(#!hN|I%+*8BWdb zvlsn;{0I9h^)Lr1Q zhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efq}u( L)z4*}Q$iB}eRSDj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_last.png b/Media/Themes/Umami/Icon/actions/stock_last.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff989430954bddcfcfc0d8e1f0cd9f4f7299b3d GIT binary patch literal 1106 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ow*PZ!4!kK=Er#%9QbiX5;1es1oYw5wd2 zIadU>25>!FsF9Jee1S$pfQxI=LjR@*$D0*4aYks?Ub@!KChy`jG01hxU6G}(sxw4Z zZCsPF@mN~!mL*qDWtneXyYSe%>vOAXZe$vznV;PE^N}Rq^qH35|D3b@Z_V>3UwcND zYR2V;pD{A|&)D9!dmm-_`%LE0+Kp$7ci#P`cA3jT=6mV#>)+V^UjD9-bDB3QljqU2 z=i76fS5}>MzBzX;!>+4g^J{CWf5*Ny+q=Rf+40z&4Iy_9c3%Hqdf(_k#^J*UuRVFj zTl-zh*Y3oOt-5ccO^z!$J%6O|G?4G8n!kwK⪼9`+prP`TpU?z5HgL=%VIto2M~y z%w2E$U61>g_g|suB}pq!$p{-SUh^_y{k+OW^;iE*w3TQ5D;|IL?Y7-f%naAA{`hp} zgHu)E0+u}j7sV8xe3>6V(eLiD;QqZ6tZKeAzs-73vVO-i^-YWdR^CVBde0tT$fNO8 zKvqf1<;bV%mm-^|ezy7K5dZ3R=g0Owf4S_c7t#!()l(0>@eesHq|}#U@zr@6*W>$Jfo| zI9+$rtMSsRck`U2Tc2ldS-!*a;^DWQy){-ry zo4e1i==&@8nSUSWTNeCydny0^^!S-_g^wL>2L*R9hvZ#Y$1LPvw2w`)Sf-Kpfdk6F7=M-+{+*R z@_^gaD@wK@PnZfGT(Ew6NdM@=_upEbA3b|0w!*DiK>hPCQ)Y_=n^w#g_@Me^_U50D zs(|ULn_~6WeOZ6u9Lg)IsJ}g@IWl_^Q$E?7@t1lvZHt%^E@u|{q zc818O_?z|@{`;5}Pcmg-U|>)!ag8WRNi0dVN-j!GEJ| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovyPZ!4!kK=Er`ewwsO0>=YY5Cm5d}Y!t zuFkbHn%rDgG#z{Ltn8xOS`Xf9|AXE*9q|oc*4e$wKq1dXKx>!5-4NHei=Fe{-szpV_hF`HbS^x4vfU{ya!Mci_zLy8FM+&TRa@*t276 z-V5s$<(vl<_n+mdvF^&;7Pqd|#{7}&j?Cce>Om{sHpHEsca^h8Y4hP%Z*OnQss7t~ z&{$CKiECVr ziMniSJN)`bft%-w%Z8*S|V&~kK@R%l{J46jT^4bxV+ z$5|H7XN4%dbWxHKG!0fXQO$CCSfC+)K%vk>RbbP+)tmXk8z=283GJ5p*DN2kX!*1A z^Q}Ll7+WgCf+Q+pm%UY(2285O{)O9PJ(73i$tLfUW?bnqyF1i)d5cp=L`I!qx zk9sQ~_m|P#`aAl?+bWjxp9AK({1(!mP&#q{Nl~i_9;yWgF4ZVMKc!afVDNLAW!ZD% zrL7-d9R4nM;$7bDdtbMl(64Ko94dG3mr_*r6!pS$iM`53Uj-StFQ+s_^{_GW{xEF1 zEbnfAch2LD!fAj0{;Mv_J9BrRzrU{B@yLqLC$bYGR`P1WPoF9r#YcOzAmGk@UlCv6thZJ+UZ`Q4r!>wawBf3Nh6|IXxXZkDNm5|gJT@0N-A>neOQ zv&((%tNxCML61C{Iy)jg%hm>L4Ap8~Vl`W+V^Yum&p){B{XICvR$TnYz`&qd;u=ws zl30>zm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhX zLqlByGhIXT5JMv?BXcW5BZ!9Qkuggc7#Ji$HU#IVm6RtIr81P4m+NKbWfvzW7NqLs X7p2dBXCuYHz`)??>gTe~DWM4f`6c|1 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_mail-compose.png b/Media/Themes/Umami/Icon/actions/stock_mail-compose.png new file mode 100644 index 0000000000000000000000000000000000000000..f810f7c44a7954fdb654d30952cc9743cf6fffc6 GIT binary patch literal 1102 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_0iG_7As)xiPW8`_36(fdzu9=EWbEsA zX|sKVIkIM}ZB{uPzqzYZ+DvIsQ`LmhJsf z-#060_OX=Rk&AB5O(`o&yZ8CR-O~R(*$NzX741LwRqnt4eXn_cOA>T{QKLt|K3bpyx#PQpWj>t3A=x3ue=wqelW?7%8NEIwEQRZ z;pK}H60cvsX5dg1a8g)$WRuP^zgma*{AV{V_v`I!;EQ2hmv!w+Sn$CkPkx*}pq^SG zDZ}D8^~mCE|9RQ>=P!HxZyj&wT~!mq@?gQ2{Gv_9vrOMIWhj1lXk;_{tXac*o8K$` zoO637{jE&?NO*k5!nf1*m7lxPm3}Ya$^7t!`O+*)ng7<5r1bcx33KfiE)G<-oWQzA zp)G3*W0%s>bxsB50@}t~t$v(&aYEu{$u7Q#`;88PK1SP|a<22cTs6BgjlIxJ|E2V{ z6Wi4z^ox~4dC&Cp^-TPw*ZThVkA3~mD=X%OSH|txc;L?;ne3Z7eun3m+3zV$tLce( zmTk6KUU>iYN2_oC?qksAl?`E>-Nn*UNddaUoI&jam2)T$&{(NMX}>d?j=dWeGBr5Y{++YCVA{NQax%wPK3O_NAyIdC+jCLN zKSu(58E=cd(6#zo+h6drs7rdku9=PrPjh(xzI!6~LKK#!nC@i~Y)#JJ-z>1`*=OI_ zok!jr{VY>gvtp%!keYzghs*l*Nwd_>+g7*4=(XqGw&-)-7~$e|^1wpJsOZUa{(s9! zJ-f|nLQqj{;=IOxj$Exw+j6hV6nu63{?6XvpsqprUn$$Wdwp4DpEf+Nw)qnv|FgzU zBxY|fLtEa4`gs1li)){i1?@VU+8BGXq=ZSJ*X`!P6IaUzm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhX oLqlByGhIXT5JMv?BXcW5BZ!9Qkuggc7#J8lUHx3vIVCg!07t0VF#rGn literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_mail-forward.png b/Media/Themes/Umami/Icon/actions/stock_mail-forward.png new file mode 100644 index 0000000000000000000000000000000000000000..33d884326cc95c6dc1ddcd46c470080420356fd0 GIT binary patch literal 985 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&j9Muu5)Bp4VNdjfnyTp5tSf_$Te`G(8#wbIj)Cr|9n%t)OzW75G!^)>nOKlbGO zI#l!fXxs0T6GFp-lTs2=qJ2`*lF~9#vU4-@3UW%ziz}l&(?TN^sMT34@LxoOje z?Q7=m%4XQtXn3fQ;qc*uM-Cl4TEcMR#EG+K&z_56ICt*cxr^5>UcGdsp5a;}!>y$O z_phD4|M32UPKF29&pfz)=UFeqv%BY?J$v?Q0>i6UuU@}?{pQTfH*em&ef##^ySMLm zroMl2@%`IZ@87@waPRPk4<9~${P^k0@=u>Weg6FMGYEYBGM(Ye;m$8#zI=WC;Op0~ z-@bkO{`~6q@85sSVfpdn$In>|KSAL4uh|U0e*OCO`{(c9zyHi(`19x2pFh9<{Q2{D zF2lcnfBw&7_`iVt|3a?+iv|8K75%?l_Ww%d|7-OAuQmL?-t7Nom;YPb|8MpAzs>*u z_Q3x;!vF6{{J%f@|Dn?VhsysSsri4R^Z&{2|EGHYpPT;w%JTo$*8IP@@&C=u|8H&i ze{awKd;9)BKKlRh@&Et-cWE^QGcYg+mIV0)Gcd7p8M|cGH#W6SpZoB|tJjHQ;d>bv z7#Neh-CdghY&n04fq_xm)5S4F<9u?$0<8y=9NFgxaL!CCQDB}pA*{cPo0pG|k7dyT zhyMoRrI{TqA)BjW5*Ez24=}iJU)>;VTO^l~;!T+qV$Yv5v&hNG9W*S`J3C2$voptW#iF9UYP`V{S|of9-3qeab?3;nu*Lfv4|6Cg-pWZ7SULH9>WU@N;ZeL( zGR0awI!tD}&Ul&jOjIOnipccq84{-54k|4U3m43oBqb{(G=I*t(4`l3SSCIYU|~vZ zy|duOj~_oKsO0lHmQ^qq8yS9HAtw4vwQV_f#)d_$cH7(9-2B+&+blRTrhH5mO~3Hq zsNT5+3lFy0PBM+)SkA(*NhTAF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjthZq`J8JSxd8bLHX SkBnIY%2A%KelF{r5}E)MIM+h} literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_mail-reply-to-all.png b/Media/Themes/Umami/Icon/actions/stock_mail-reply-to-all.png new file mode 100644 index 0000000000000000000000000000000000000000..a0d26a418198f0e03e3e9b1d1cff61d92a989805 GIT binary patch literal 1409 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq|vj)5S5wd2NYM$St)wurE`NQyN!od{!NbKB^& zwV_Gm7Mswt#PmbAtNUcR=5930yj*v3_HWhCbD!^ge#d&Jl+^!J&P_&1!jqCd`X7F} zBQ{i9!Tz7Lt3?*;^`y!d@7^6db&5-bi*?$xX&ZLz*fFiOwUu|T(dW;f&%EJUwtV@^ zszZU=9gkcuSSvWYEMPfv_H5vZss*2{tgXGPTa#Fw5(Q)ZEwWf23N9>Z(3#+&65{lL zWs_ae&KlhmbFQOCM;;aJVh(Cq93~(m<-z{s)AWFuK5b8*rk*)-CWnJ@;)I!3Ls?U7 zYbE66k6*bW66!bhGQNWb>(F%FoPP zl#u!_Xu>(m)_*R_HV~q+0Kp$WD)%}) z*umYrQ!GO?=E&bOn^*K+cCI~}~DsGoG8SR{HSe z*(!0B4Q7s72@CDMs$?0jy&(5fF3NJY;k4t2_Ly*fs{Z$5=?%gD^)DVjZ|98&J+o-Z zCP7EdMW&9KzU;r^|E!7=I9$bj*8HBk?;5^$YEp|YW^*6weyjMuul?gMg&xuQ$DjO7 zu<^HUbAPxi&9ew!;~Hu%K~yQGCJc-<~|W!slkUN_d{X84)7Nc!_1UHE>%^{>1- zTR$6I6ll?uluuqdP2!|+irg+{ubl0{71t-ve=+q>dB+2u>HStG8UEOd=8DXSkg~3j zweOPPmJK=nVzEw<{j3;M!@CcequJ zu^)@%ZnQi}W}d^j=P&<(qq)|L^bGgjOe>Jto@8>KOW0I~=i~PTmHQH*kuh8%TX~hX zy0lrnG?uuL?(jQ?spp1yqFjM=;?1)bIg|G|Hca4P{?YQzA?6mR6#u(87Ku$0@~WFG z#j<(0<_64t>;LfTr1TR)_D-M7gH*&zjsGTp_;gE9FT+_tc>9!Ui+_Q8Ry7E3_^Ns* zSzm@nPx}dIb)etl?2hd}<-9)pqr3 z)D4$#hubaRL)JF590=x8wRjTPqzth`Mk#+Fl3RykF@)hsnI-KV%J+bzkWBh-PGfk}_Mb0+G`~K{;H)<6*Z|zT?pBu&3d}qn0E}>2%mj@-jKCEtGE6X8anUv=T9vpVj@=WbB48G%D&9=GsRdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x u^HVa@DjAFn3=MS+%ybRSLkx|qjLfYJjUXDHN5(7xm3*GAelF{r5}E+%-dZ34 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_mail-reply.png b/Media/Themes/Umami/Icon/actions/stock_mail-reply.png new file mode 100644 index 0000000000000000000000000000000000000000..e769da498258b2f43528fcb2c0aa1c6212963bb1 GIT binary patch literal 1181 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq{9xr;B5V$MLsQVtr&nCEDiSoXHq-gGqPk z1YMJ+X;T=EZOshYtC+RQFmA?{OS2*_M=Xw$oUG<{%R@@a=kgNYHN8Uht6sG3_r0PO z#P2E_LbD{o1Zc9znhHxMI~V$-OvM@bbkH*y>j(x z=RlDb0gst$T)jFMX`HNkwPV$*BagjXoD_9Vd+qzYMudZfiKW?*LFTxlSEm5e@xn

+6Fier*l8xAV$YtX!!m!K3CHmff{z!qlaLe^ig0oBLfQ*So-oMM$xwRiLS>i;Ino z?Znx$z8jr|ekq^YxLxnj*Jl^5UOjpurRR0q=2x9w!Un#^XQLZVo${)C^HNP;zyD8- zd~z`No4SY2``-SY``*f0^Y)wc1dB6w9vSVO{@>?u3Wv%9PHvskhYWbS{;HPzFX-ey zSNh>Y@%xW2SN=VtJLAr_tzEvVs$Y101?C#>yddrMcunTSDMFg6!Vf)b?BuuS-D}#m zZi@1Io=e|8JwDR2f3MzWaYK_Y($gmN_~;r5&O4uwdZ+mamsqdsw%oOcOdfstV{_); z;`k4zCbHFW`37%Z+R)p&^Ul8$l7Ei=6cMYC?=sM zIo0^=^PX#4rhojvbV!URZtl|u_o{c6*|tfRZ)liVIa%ha-{Uo!0Z~!2&Xn6G4>P|={VuyN{_MBfn?KGt zPki65O4F1je&|L(+R_H!~; z0ruX0bq`NoJ1?1=e}{2~o`I?UPAAFl3R_RG@NBmbll-%!IP=wYb^m?U8x3qsZC_qH z-r%}j@7*;$l?UdxnUDTuFx|TDPvf)YwyWx*ZhiX@aol@r12c#D`dt&VTT9gSmajP> z^MBdP(1hKKGT-k`z83Z2zsf(R)HHoN=_4$83=9maC9V-ADTyViR>?)Fi6yBFMg~R( zx(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O4>2^dGBUR^ XG=gY&9vQO)R8)An`njxgN@xNAkUJEY literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_mail-send-receive.png b/Media/Themes/Umami/Icon/actions/stock_mail-send-receive.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd0d8df90c56714632db94b37d690f3b5d69e04 GIT binary patch literal 1111 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UcLw-`xH8ZTD0sEYxi^9w>eVi060hLZE@_=3VVNPQ?jfM&CTb8V zq93l{)h_SRqTtn@nUSL4)vn;);+4OmVg9l1Wv5e`*H2q}I;4Ef%#9b*TDQ#Fd_JRd zvjSMLqI0{VPlu9Yhmv!vvQvk$bGNczm#SZvntPvl^emUmWo{K4+zZ#Zmu+;fSnpZB z(X(Q+SMf^!+O09BX_@_dbF3iYsRwt*$DqsVb{!>aJaI zvZ1cBVbSr%`l{x}nwCY!+FI({TN^ssn>v=A?&)gn@9pUC?VPas?378p3$|Zfv}o?q z#S2!gShnuat&KeEjIq)0gj^z54LNjmMWSoVt4X z^3^Msuikla>-xo8H?QBnclYU&C$C>T`taf1r%#_gfByXC)2Adu|NsAuLTA$$7#OTdg8YIR7@3$^SlQS)IJvm_1q4Mz z#l$5frDPSARn)X~^bL%Rja^(qBcfu`Gc&Vm>!;s*`0&N6SFc~c|MD&TtGyBf0|R4{ zx4X-vX)Ny*7#J9XJzX3_G|nd{EHDe$wyp1+hqtF!M=uvQFCW*H*6!#h(bs*MnmYgf zt=%hJwK?HYS{>ujYoWGxZEf$~jlDa$Ytw>9Zgvg<39&bC-n@D7rtQilnzAbEQga_Y z=A5Ltd0j?!ZvO0$8#iY2h=gx3>*?(L_>ob_FroUBRCLwjMj@+T*RGv2w2L$J^SgHK z-@l!fybhfnD^|}*+H?2uoI4E%_V3)aXWLS98P`LH4<5U|f9KA9Teg|A1TPZj$jaK_ z(bB+p=DDAs1H(iIUM=-#?FE-@WZv5TX>{QCbh~)}z~RG(FA928{5Y+6L{f6=-(K0b zGK~ti5@$GBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6Tm7x(t!}G|PC7}H5>FVdQ I&MBb@0E2GFTmS$7 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_media-fwd.png b/Media/Themes/Umami/Icon/actions/stock_media-fwd.png new file mode 100644 index 0000000000000000000000000000000000000000..6212e20ed5c18931b307941f1438e05df798a6f8 GIT binary patch literal 1229 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tI;o-U3d9>?EKzUv=dDsg=O{`;28ZEF)- z4{2NqKeI?^``5P(A_J_MXV3P25eLdeJ2p1=jI!9DUgvc}K72q|!O= z!&h`u{Qk4Facb#1YUrk_>c&?8Dmr(bn>$V6VC>8pw&wevKl*Jm|NUq0eFvI<-4_q9 zp3QiLc?H9YcZ=3CUkG~b{hfQmzCWkDlXZ2cJ^T5ywe=QL>FjMUUtGNLnqAKF!tB$} z(mwzEb9dIlde#h^HbmwK!38XWWWH3`Dh8_W`xdZz zsgb$${(#FG)l7dTtLpEdi;-ea|;+NbMvmT#YVlk-Ex-P(&DB754@FV2(5-+D{VZ|P+9T(i}RGkwlZ zKb`vM);MZI|Q!bD$JcVEKR=vuD8=kJ!h&zZGTe8JT$X@0q?J^Gh~ z54+iQC#~dIe)y!TvSDM<5oZp+h^X1ZU)3gyaJA`%Ze`jT(Qq(B#rC{=>o&9L+B+v% zla*q&6odVv-;Yy*Q+kSi<&ccu5JLs1Qkz4 z1}3JdD+5GWyMi2d#yC0Z9k`QlZ1wTJ*Nz?Y1h||uG?ogONO4HyLeWpuu{aQ($Y9NS7-Q@Ba85wzj5=uS#imQwY zJIZpM_I*_w2KD_3?ecD>H-_g_c;^wggD73sealn>gr^@v6^Q=GbzI^rDv*qIYfB*P9 zuR67%ZCg8~;9j{CND@_3P3S$#?W-)dmL#f9vez zR8RKV{QOexVVh*18_v#>$x+87cCLTQ|H^*7J>$Kq?5p=QkDg;-U{Eb_jVMV;EJ?LW zE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|WN@iLmgOP!up{{|M zuAzB|p^=r5xs{<2M8osQm?aDh43Z!lg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3 Skz!zAVDNPHb6Mw<&;$To85d>% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_media-next.png b/Media/Themes/Umami/Icon/actions/stock_media-next.png new file mode 100644 index 0000000000000000000000000000000000000000..56e943d7d5cfd75cff894c5d7f2090f1fe7ea78c GIT binary patch literal 1318 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_l;pPZ!4!kK=DcqJ3miC2a4bJurSoIw)yGVxUUHFN!?xRTi*MB0uq77+9JEYYr-k^M zWMwI>JjmYJ*||N*r>D_u$tAXJ8{WKmlUpbMO=!i8eG;`VD`!2a`8@ai|9z90?;QWn z`!D{TJHw8tEL;pH7#1-+(*CoAseqwl?SbVFx7^H$^PI%Rb9jPqr;CWg6n2Jo<=sol zj(^+E74vi3%9F1zGn6p6RdKimUYT|4mAObd-?Dt4^LLLjGrTX`U3+zFfBo*Xv#$f-gGvLJUex*{^xn}I}&d1&%gig(k6CxNlB(;wx;gS9It1seEIV* zYx=p8HFYJI+xW}h-ut;o{ z@9!<&^ZXb49R4Y5HZ^fHDKs=DniWX%wa>YJ^=58%Uf#XOn%}tV~Hf=f8Wo6E_wj3=LI&Bp;e8+eM1TFfM%O{?)Sd_yw zQKO5Yp{uKlg@J?NfmVs?p~PN6L7ub*<)#C(6O3jq%)E7I<@Wm~X?b@i-Lov6wK+ny zV-Lq>OYU9k*rVbP_~2-& zw$LQI>AfpgE@7^S>!|s4Q{7ludAdpY#NRhQw0eiPwYA-`|MSC^A)&17TigBrtC|~Y zFTSe(yXE}z+3W(_B6RW?9_)CsVAU!qNk)bU4!w@>{c?X7FW-LrQOUD?w`;dOU!-&T z^U5Cu>`aWs>EXwp{P^)B=H{KFx77I7r&Tt04a!)P`a!-J0^?M(;I*GuoS z`1AC%{@zQ$fq|CX4$4Yw49UsKin?ojeg0T|ER4_p-=N~@$gt3a|3JY`8%Nzgyt8KU zA4=Nlw|sF+(7*HEwXavMoc8QYkR4k>W5++SiXKC0hU`^+OJ994(KI-Aq~62R;MkcS zL+*Es$0Q7o?Wn$b_jrBxeg?)lg<)| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}ha3Z5>GAs)xyhTQHFb`-F^YCCsk$+KD2 z9f>EJxtrGiYt!le9_|?L@<+w-&?fy&KV<7#^c*8xj(AU!E1&sEapt|5Icn#XqWv$2 zE`K#=)vUY+$Np6>URx~h5YzmZ@qx?%35V5epJfkR-*i}0zD3~R!;61|HJ{Gi6z}!( z`Io=#yN}H%R&24WD)=$6qseI5%Gvkt?VWo!`B@dyT2pStW5+iOduXox|8;h_7LT*h zF^BB4eUDj=Z=T%sMO=TrdQ^6tj@Sy-jIB|XA8XD2vnVaNFP(d0cFZvY<7e@9%nWYL z(XRhYnKrr}C_SB(b@sO*%l+@4bMu!rD{$yEtk_jwA8f&Mcu&lhrjNDvyaikZg#|k{ z++&QNs&V45!4}sgQxf(uO-;6T7jYF7KeePpVab-cKO7G*2pr$|HeqMfqwkN@GY$vz zy;aHBep{@dvXC)(+JUwO3jULhtSVXJ;=I#rzszdo4GfALeT&!Z(&+iLi9>0@La6|+ zn}Vgg@BU@^TQ|S^uIAN-qL7OWx882ubub~}_=*tbzRMews`lRdC&=4=ScXCP+Nf8E}1;FIbUyE_iMu^v7?2Xye@ya)uCnHIx{+QTII1BUH404 zzuBA@xY#r^`j~|N=}lb6KHHSVmbc8tNLD j=^C1c7#dj_nOhkeK{Py%j9J3Kz`)??>gTe~DWM4f-uO+u literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_media-play.png b/Media/Themes/Umami/Icon/actions/stock_media-play.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2cb57eefc8b561c927bd55ecbc0e6a026561c4 GIT binary patch literal 1157 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tINPZ!4!kKm0|zz{{5MmbNA+N zTYB={k!2@y%4SEbzi~)S({AaS+gFsHIAz_oUvR8lX|4WIcE=B58x(#enO;?Es&{$B zE4cC3HIby~OTB5n`f1y%XB!(^KR%o%{$|xFvSJ*glJlw(})aha& z^m2xjwCwX;7ZeTI)C>)dIk3!F)|j=m>)*cPODBGDTpFOGW^0$arPlqp>A6bB&`|f# zQ03WY^LSJypER4UwBO3i>RhYhff+2vB9uEhLT@|m3}O;Y%qZAzGeL$UHhSNzZ$J0^ z{QP4m2~cKwZw63og>f{Y>4W!X2qX*&M)XjYkM`m*yOMdjD_ z-@keDr(1sh|5S#fznN@pZNK%~|9!yFaHR6B{FU1-E(%E#QYD?lf4q3iuf6|IRiUX2 z*L*9h%0Je}BI+tCe#kFh$=PxIac|*)j#qo9D|iZ}=rJ=q6MxpLuU8ZI@#mlXePy4% zthxUB?D5ARdD)YNFWkL*mm%jio1o(~)g39~)9Ru(Enj|Lc#=x2#kWr%%Y#;4krJGG zQE3)~YoJv2F^QTu`=XyV=jQ!gFzM{SkDoW6xB2_)%9WF+8M<7yy!`NZt(oX__RYnc zr?##a&vUc3@|*iRB~8wuvE$5Hu6!noAJ1;HW5@$GBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6Tm7x(t!}G|PB@7G| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tKco-U3d9>?DX`})L$iu`*w`}@1!GZWKh zOlp5ub&8mA>}N>Qp(;%zOHmK|%=7EWHh z@!}~%Xw7P;`m1Md0Y^*uGNr&Os{XK>yOaNC)0K|=Z4b!_GHmOs1nqkQ>xm1hicH@2^TH{;orRmb-4 z{leE!$;gm0vskI9x2MOVglgV}{9idm|Ni^S`ML^o{SH4p!_4sJZv5}s=(nWcWS&VHjfThM?gthwT)zBx)uyWHzqf5XHEmi6M-zkNi5YrAoeOrqZgCfp zT{m@Vs(>I%JM+tuDrW_$-et>{Ei>Au&)**WjY~yuXIIxY&Ye{=6&ef^lV9nc)prOE zot`LV;KQ8#I@@FE8egV~9x79d8RSlLrldKj9$m`L#>QSJ`>*0ho65%}>gSnV!w&4^ zVX*l5Oj<%#dhbcsO4Wb>mj2t^zNL<#TYW`yIHt5Zi7|BCRJ?xu`uW-){|b)xzApaz zR(9>_@VcF!cCX6FJUi{dEqUYh^7TvqZvQO4Z{FicIlJam2Bd!FV`Mn+<;&Gc6~$+a ze48JgHO#L1mBlI8>GEXmoH;t#^)HW}-@VIPT4OG9j=$gD_#7Xwa2pT zZM(es|1CP%XV2YF46f#9Tq2QdB`8^1TDq5+nK{0+Y~MG}!;QyO8s0{J*A=)ZZftBU z-fsWv!H=EiM^x(GQGO!lp{+ppTS=-#!9ub$6&Z8!h^ts7>?c$AFV+uG`8&7FJq z|GNtb(=|G)i)PPxy1u`6-rtg>q(`SWZZx)Cq!D^^yQs?&#)8yjrU@xMYm>M;JeVGw ztJ66uv3qB0Il~EN1!fQ9W6$2IC@VE~NW5cI3hM0m&#W&vv0}Z=_mB4<=wEx3U{!wO z_F)DF2GtVRh?11Vl2ohYqSVBaR0bmhBLiInOI-uA5JL+qV^b?bGi?I{D+7aRpDheg zH00)|WTsUz7#SEE>Kd5o8k&a~8d({cTNxTbG(3-tS;D};APKS|I6tkVJh3R1p}f3Y hFEcN@I61K(RWH9NefB#WDFy}x22WQ%mvv4FO#rGpA^HFS literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_media-rec.png b/Media/Themes/Umami/Icon/actions/stock_media-rec.png new file mode 100644 index 0000000000000000000000000000000000000000..d13d3ef8b8002b4faa73d1b26db642568e6aefe2 GIT binary patch literal 1258 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tKio-U3d9>?EK_0N!Y7df`yTst#$ZP>Q( zG8M~D_D7d!>K2NsT8La0Nt)A~QO#ldBw|vq$8DKe7lJP+w%x1B;C#Dv;nEA<-W--k zT7@_^&JH-5`Np}UcVd=zmyYGvtfg1il`UhBKJtIcF5BnL{AFzqzwbS6lhzpiOZ=kT zIS&RVhCK{>v=m-D$TsYJXv%QzKktXt4(GQYXct^0Y?lxrwCJ{CRTy*HKcPq4KOgYV zc93&;YR{_CCG<(fRMz0E_`2)Yb0rMqY#OX3TwXjm`JlD6)qB+{HuKMAEG$fn>yvK3XFq;C z_G&wSV^(SSjuqD#PcvnizL-3jgO7jr-)UbREo8oJOQepNlJux9s@w?EQgchTgkO7Asff zy|zlY{a~le0ST65g<}pbuf>>p3^^1P7z)lg%JJu17U5vI#;|2i%4v(ztaE3cr>s{WVSC1XjxYl{% zCimm1QLp6h8LwEN&PIxXfq}u()z4*}Q$iB}05Kte literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_media-rew.png b/Media/Themes/Umami/Icon/actions/stock_media-rew.png new file mode 100644 index 0000000000000000000000000000000000000000..134fc02c9598f273f7f29b75789065e12647ea05 GIT binary patch literal 1184 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tI@PZ!4!kK=Er#QH>+N*tU2-%@w^bCIxH z#u_HNyAoNp@!3ZewDjamarEd&t$WD9$2528-L|Jr$+A9^&(55Y$97i9{GNpKo(Fw8 zyAxjZzLhGTJ70Ky=k@BixhL8i z^TZPmCKybSx4d*me|qG-wd?ESy4=L;SwDm_9%kHNVrnY4x@y;}MVBj27~0q0W_a+| zUGf9NH#2kjZ#U)_#pL8$J{e+S7FD*-}l_sW+d0 z=YJiaWwEAyMhv?{z0e)A4G}u3n{=#S@m-rYRrgt=!v~*>+~@b6SZ}|l|LPGgiN~Kf zC2Zcx<f2q(V~=%vpSkN79?GMmdDCC(B{EXN8<*RDNo$N7VKl8UE?nz@6^0}HuX%W~f_G~9k0 z_Waqi15f4Wq)gfMEj-+N-nBC3WS&{e8n3@R@L9&9uetB}K?(L_Gd`xA_uP0Tq$|X# zvqY^oM~^!+bU~(6#Jz)0i!`Ho9lX6y7r9rbzrTCGo|~WjZ|D2^A9~83ZXHb=^Ije( zmZ|7tKQ8g5>hGV{e!V-ptUlgs>(h6dnd9pDQO+aD&?WHJEsLFZ^S6lmMP7YDFGY@qKPq_^^Wk}hNfs~5pT>Q`d$q6U$M|b@Ijve1 zq%~E=_wtJM`@ZX*Nn>#fxyxC*R zSq+AFLKlCYJb8Y9U(C-h$*Z>>5|)w_<(hq}Y-fsqpnUgHFa7v^CQ~XlnB^JGuK)9? z`=q&K@^@|twgVPsVs=&PW$KGGRwciho&VkN*tGJ?`X)kYX=&f|b#-rcW}Np+ymsx{ znah_iZ*>XzcH>d2XQ#&r^*WK|>Wl9F+o}Fp{;Yi8_Be%E-U1v93=FCzt`Q|Ei6yC4 z$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP z(={{?F*LF=GPg1`f@pXi8MB0efk6^vLvVgtNqJ&XDnogBxn5>oc5!lIL8@MUQTpt6 SHc|`>3=E#GelF{r5}E+CiUB47 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_media-stop.png b/Media/Themes/Umami/Icon/actions/stock_media-stop.png new file mode 100644 index 0000000000000000000000000000000000000000..b95ff2480f434e816ee681d819be331ee1710697 GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s79PZ!4!kK=EH?|Lx>3j9kuXZbp9*P`xv zm5CR+OT=Bu1uwpK{lX=>*Jq|nMY_j=w?5*lS3g_EuDGi(udJ->+i&aL2iE=DopCyS z|I}YiCX6B56eJj5==0^=3zKN8PJh1q`{Gp5_i$uwjhgl}`@dwT$E@dG3tm3hP|U)Ru{G+}>#t_QCQ`g76*?TA zl;10qIelL8x$d>srFVI@-}@QG9w_qic>;^l0SWGaO?wvX`e1u*w@u=Hp*{Tf7?gU{ zlWSDt14LK6`qH&VeCG0?wPAmiUX|@;Vqjr1K5TG!L#wISHH(PshijTQGctuo2t9kM z(D%4xV#5Jej~>RfRSUWOF4ZY2eN^H&9FWe}w4g!7)5u|FW4GV?=QHlL+jMg<%n1Iv zXv(V4My>^Onl_&aepg~u$LF;)Xqk$Z`-inj8(%zM5TmCpUAJ@BKAUf>>5t+z-;61o z@Vk4}E4zk6Zdb0(61aF=?ETwU{I8{p{x4FvmJ_GJz`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? zBXcW5BZ!9Qkuggc7#Ji$HU#IVm6RtIr81P4m+NKbWfvzW7NqLs7p2dBXCuYHz`)?? L>gTe~DWM4fwTTSX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_new-address-book.png b/Media/Themes/Umami/Icon/actions/stock_new-address-book.png new file mode 100644 index 0000000000000000000000000000000000000000..1cdd0b6b73d4d00e6e426964218b6554a4b2f2b5 GIT binary patch literal 1083 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zFuY{&H@Uu%mw|zSv%n*=n1O-!ItVj5Y0R!*U|_cOba4#vIKFl2*?ehNiDUJf<-cD4 zW$ee>+37JmOl4x!60cU~|BMUd1cLZPAFrf#LD44W`%^m{RtX&H zeX2HP!jZy9JNjOKUHACz&8H9e-yB&N%PE&>vba2LUi!1zdvja=OEMj>-La6_+y0qe zO~L!~>3Mn6maT|p{PXS0kqMV#|NeQr{XSF70rm@4#na9BpS_QX-Z!uI>C^~-H#)6~AlEzLepw|k2IQ`=ST zQTxrtZQ~!8#&zr-{s*r=TVZ-RWG!>hi@mOm$&-&gwG`s-p0W8dhi2y#xr;thN6PrB zUN1W4ocA|IpbOHFJ~Yr@hG{F?q3@hFW|^+)Mmy)feY0qqpjt`H@iR+2o^Sss+W5gn>9^>s zn=en=yeQ&-c)X^p>q@iitId~X;&yhdUp2!xy;HwN_UTufn7bQ(q|7)_P*rf)aTRxD z&t9XAa}Ss4EC`OAl`gX-@nFD*J2Phpa|Z6UF`rhjhMlRy&B@=_Hz%Yw@+P8?JG^cgg5 z|J~C4z4rP&;qCSNt7UiChdkJwU;lLJQI0O7pY;xbB6)uU+5-0MKDl^(6dOxUc+!ze zDd|SaoUInx{~k44?H8?%FWjtbq@l2Mca&y$_`Z1az22XvEy}L_*Z(mgPt9><#eMyW zLR+}qd2X-T`}1G=>MDgV$Bz7zY`QIfcMsc>mwU>Vb2~C8Ifz+&zw+kol`D<84^pl? zy~?-K$TFYbPN7k3@x0dmQvVs!e;C&AOy2UBfq_A_#5JNMC9x#cD!C{%u_Tqj$iT=z z*T7QOz%0bj!phjx%Fs;Pz`)ADVA^L3Llh0U`6-!cl?+A(hK9NZX1a#vA%;d)M&?$A Yh7b+cHo93dFfcH9y85}Sb4q9e0DS({mjD0& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_new-appointment.png b/Media/Themes/Umami/Icon/actions/stock_new-appointment.png new file mode 100644 index 0000000000000000000000000000000000000000..1c55f86f3fb5bdd09fc211bf84a9623574f81cfb GIT binary patch literal 1477 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE$30yfLp+Wj4bAqM94;Z2WOnw>mDowS zdd{1VK1>oTPxLP9j5eCvozlpp%_lx5C(=yCC*$Il2N7a(z5l!yoBTI$iX)5b&W;EL zg{J78VP2Vt zEaF+}Hf3uD5vAE2CMnLUxp_ zluXyo`gnVNXvT^?ZRfn-ZoG9lepk)5Cu%N}LO9ez6*hg$PWb#P^(4QSi0>T9^r*kp z!pDyL?y!|^yd1zd`<=|2Us`9*xIFy00%S#PZnE0Wx4jzN3Yz!?l84c*p#faO;f5jVZrjC4ue&zS07Q@eOJ$7 zZrP@iDM@UGYj$q;PuZgQUvGn+Uc$y17w-h|cVAW6)#`fap+e+Cktb1W!}eHK%N1Lw zEqM3VF+E&*P1x)Q6ZDlQ1WYPT>C?TGm#tJ-{^Y=*0)JaAc z>m-{mKNQ*>qo%oc?-o~kZT?S6@$X*<9^~29(3)d*n#r>N=*gSatFQ7*KIt*_M&??d zM;w+j7S4!K3Q!0wDVlw6$0c8t$xRIhyCu}0=gTEWTNJCA&pw`LB9(Ejb6dCUqncCG zr-bMU{z&Toqgt7EGxlBv^Iqqs9#4zY$BtEfO#2`aeq`H`lYi^v+kUkjy{URyW3KY) z>w49EPt)bHdgMigw{cF?oLsn!hq<)-WRA#@H+4< zOLN(WRy}UNyQ9%s)8PG9)?C@^3*PPaTojfVs_>xw-L$wrrw#8fJ1KKy^VAPVikSF? z&D8eq(A^xcisyKLcI@fW0(({*U(mXQ!X|`}(@wOkbIN zfqAih3KKUpey|Fiv`ybM-alJt_x)DqdB-=|-?5)FW5x{cjnMG{5~PDODXeaOkUQ$Xzg0%A-Fq ztyRxa+~a%W>x)^X)hBnozhC|Ov9adud;e8m?mT;{rKM%BiMrw&g(U*>6xaM&A8s6e zMECobn$+lL9}n%B+kbxj-RA0lOw#)Tmm65_@M2(KP%UwdC`m~yNwrEYN=+5@$GBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6T Zm7yU-!?lfWmJAFG44$rjF6*2UngB$| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_T%InDAs)xyPW8_b36(i+pP#ntZr;>$ z)21l-{-4pIvZ(auD;%H9H(?Xv7Jtl{ll17Q zv+$~=-QMQ6%{;nKUrK6!cjisCJ%8)M+j=rme6xP|#?|THKUrh{xi0@1@1N-^>>H+4 zy=r7RZ~M#SM4FCgQpiN9*WsbFcmHr;FuFd`X`}Q**9oN>rL0eE`f5F{K2wuvNWL#; zXKY)Vd)AdNgIa@eSzuuUv&k!FVIw7Z0X1|5^ z9>vBM#*d-dhQ}`4z3UquF0RyM$R@aO{rdOc{#d%OoR9w?ym5D>Xv4qD?~P34A7}mN zw`fd^i~RG_?%2uT_ZyzCZGKX;^To?v!}9o0!K956zP`Q}zpiR1e!g#EYOQSj=(@k=2eNj6m(REbG zQNZP)Qd3Y@ic#dnUDZrg@%8g#*UKiH({_ogO){O9s;snQU3W)Fi|)K|=8zip$&)7^ zd0Z;8{`};U>xFv@x@+oW1QT;|c$SL%tdUzPvMtxx#)##>i5IL}uJ!!;`1@}(ivSDb zwA6)L)5^-sKG~jMy@FeJSFHHm^;`GZGjy04PxW$*OHWUCWqon$4-Z3h(B0EbtC_5< ztPGANM4tAWu SZk7xT3=E#GelF{r5}E)GjI_o8 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_new-dir.png b/Media/Themes/Umami/Icon/actions/stock_new-dir.png new file mode 100644 index 0000000000000000000000000000000000000000..02cb4c962d07e203c588e54990020e5bc13152b4 GIT binary patch literal 1014 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfr06Vr;B5V$MLsQ&Sr;%OSI1~em8T*OskKp z(>hqST?8JbTy&ejb?G1bJC_%ywyo=mxZd=@J|QeE`^+~6FOC)cb*TEiZT$Ps|Lzr^YyJP$R&7!Le7(3GLa!ct zy2d&0IpYH7+GoeU#viwnD)@J(|Jm=&&v*I#`8hp%%IT-c=Ew7FZ&`_n_;V^S{?Ibc z+r_lcs; zv4Q^*OH0{M&cSd#~lj^qm#IKP4>tz%k?Q5{22a&tCn_)T{k&x=#LI za)sxCj*t`gP8;o6DH6_FdqujJ?lGGO{#}suzg| z=}ah7^HAv%_|ab(_#*L%z|%6NYcbbVXUpF6%gt$2$v*q{j9&i)ec2^jK27kd>@iaSA;g?fs@E<0;NO@0O$|qQgLXJ_ zHO%d7n6_SQ(Qk#v!S*2s@8A4YB`TS7<=&%YvA2$!p1+MXNYEF}NWLJo#VjM2V=cR3 z{tn$GoX;134eWG@aTLgkYGe~;bVx8bWM&}YQXL>+z|@?WzCNik_w4k<#d(vj&t|y! z#z1-J{fT``p1v;Aab(|Os_;$H^X}|vBH?B&CEolwpW;|N7|xt|`r`Io|Am(hZRJ|D zL)PO@=8KdGep*rcmW8Zr%lgWn@qfBigNVcX0|N7x%NBW;vMhKkeevhEr6Qv=NShmGp)SyVCb^<}mmQMnAaG8(8L_qSI*MkW-m$y{u8;*)6C4kH3ktPR;&u zG5ohZ0|SFRdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7 yhA0|x^HVa@DjAFn3=MS+%ybRSLkx|qjLfYJjUXDHN5(7xK z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq_ZV)5S5wdhhCR-Ga(UcL)=bOh+Q#vHZku;Oa664|mjKx1p;f|cKt zPoA!QzwdRxlxur#Bt5$Jzv8^*_wsZ9?{G)oa#$oeeaEAJVIii??ygIofAVGB@oAs1 zLcj3Nyp{;Z51jFK;=9vUG5k8;^zhCF_6Il8^z1Ke|B#Ya_UpkspMBxgcW(u^sy?jy zGLehdAkz5Y-aB_!e*4y^obEUOZh=uU&!xS~RKN1*U+li1&e?o^;qi#Z6-MX2edrU2 zf3u5I=G}{*#o`e$F)4L*b$dn6U3IusR+lTtbiLfxX zIx()zb}}`{zP*BNuF9m~i2DjZ+!DG@uUt~Ce`#}|jsr(yP*yPaw`S)lTHGAVJS*e{ zH?<}ie%_Xz|L^JgIS~i$?~2zy8}w78u0TR}|KdG*YVmuktM>k1mMN4FI`Q?v8*)aw zjeq=`ExxAG=08hEv_*q>@bwUfJNvIPEdK5;Cy~6Vm#HO!mFIa|jM2;*i-NaqVayWA zoBoEgcP!#~e&_v>s#W6V#|mCPN}UqaK#A1T)z4*}Q$iB}$i74u literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_new-text.png b/Media/Themes/Umami/Icon/actions/stock_new-text.png new file mode 100644 index 0000000000000000000000000000000000000000..f01576b5f17ce433947043de8819af206f7e4c21 GIT binary patch literal 851 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zFuY{&H@Uu%mw|zSv%n*=n1O-!ItVj5Y0R!*U|Ep<>6H z*YEs{t|#5A$uY{_v^q{A?U~X0Ipyan%OBWJ|HD0DZ7(aMm%|J8P-%~X{}1opKJduk zftKJ?Wmzp_T^rL~wzV}Mo&L^}54p|oukXEhe$4)z`30K=4*9#ho!%05Y(~Q8+t0Pz zzGr18KU^svvb*l$p{l)o&nst0Dm8iNnEdB)^OW*=!M*2_g;^Qr$7L2Kf2F$T#ftsj z$5V6VP=ZVVQ(9U=+swp?iEJBsy|^dpsa;+W+`z=%@Rsv|!Me@rj7%!Fq9Kk)lqWU2 zoKc8gEwHaKqd9JQ+l}+03B~?Qp}p^wIx^g}y1Lwt1X`WByjl1{^dbKFn}4P9DpoO> zbUFEPhM1maU_6T+aGQRUak*Q4seE?-@7=2>{J8sj z`|dIgq39_M&y6RjEcq*R=KS3BvNE&TjHQW-^%5KdLOw5Fbz@1Rq{-~F`;xutHcgzO zvA$#lkCEBg);A5wSJoWoV0rn@g!{%rwTbDMb0^JiRuo;bT;*r#1^I$CT@OWA95*a4 z{=L?&Nu%qXO-0H3Yxf!IVzXo37C-QR*K;CKd7bpyI%c~S(`@zM@8)D+U{Eb_jVMV; zEJ?LWE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|WN@iLmgOP!u mp{{|MuAzB|p^=r5xs{Zk7xT3=E#GelF{r5}E)})mlIR literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_new-window.png b/Media/Themes/Umami/Icon/actions/stock_new-window.png new file mode 100644 index 0000000000000000000000000000000000000000..0890e6034ea0874de8327e4c916d08cc7ccd39dd GIT binary patch literal 875 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXE}kxqAs)w{PCoA)QYdoN{(JA@a~931 zc}l@uJS`pD1Vvf&nm87@&R$f%y!3XMqV6sC?hB#Z%!(~_K`&GicNzrxu%$n{d->7c z_j@kR{BZEXs@*^TRlKi0xA*xS?*A5R;u+rZ#Wg(=xxtaaKPx*dSEv0w^WVnlX&WD& zHn3p6sPTi(#4dBYLEhD0HR1_Oq&y|Mxk6lVBJWD(~zvpOT& z&rhPGPvuQ+jmZu0(ag{|ZK$f!ra1e^3?HFQO7FPY_r6jqxMMq6+xgvuz_%$I-mJc& zo8v$E=_!W|S43F39c1k^-{{CUswDLr8}QiN_L5{&6FH%y&Nxp(m&aIDQp)1wy<5w; zXC?~GTW6_SWaAs0wYc?@kn0PJ@-?4qL_4;fY=3@`=MtZtz(afWa@Kjjq;45*J!I_l z+TnY_sbI$$%>GY3d3cHw?@raMOrEycS2a*;D&N%moHOr5%$R&(d)xO5?-?9d->lm4 zrR<~T-=ocT_y6aAWYKd5o8k&a~8d({cTNxTbG(3-tS;D};z~JfX=d#Wzp$PyI CZ(8&K literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_not-spam.png b/Media/Themes/Umami/Icon/actions/stock_not-spam.png new file mode 100644 index 0000000000000000000000000000000000000000..3f89d1960476094884730e0e793c4e3a3a43cbed GIT binary patch literal 1395 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&j9Muu5)Bp4W&OagpDTp0*~?w%&N5(pbYLIi8;N+1kmL1Z>WmVtqxySJ&kx2dPM z#l*y*r?+Vd1H%LchTh)hxcG?03=Fw>seS#8ef>>6eT@?*w)XTjPMFZr+t&y|6DPL9 z8O<#ft!>r4eT}VcRlR+UJ-rPO60E(kyQjXrqo%j7vAv_Fqq7#GtE;;X!szR7`t<3; z<0lV$`x^WDn-?sccKOPM-oD1`*RQ;I@$A*Bm%o1f>g{X1diBzS2Y0{!_|ew{~+VrmJ)4LZgoW6vCVa1Ah zt5z*svu4qT4a+udTD5ues?D2MZ{NOt=gy70c5T|XZ`=O;+YcVvb?n&w(Oid-LACTlbyh?%%)t;K7}T5AQyD zbno%w`%j)ceERh9vu979KY#N4`O_CKp1pke?B&bnuV24>^XAptx3Ay5d-MMN+YcY! zef;?T6K)Y??5A=Bjm@ zHy=27^yJxd7cO7D_TbT@$IqUo;%TzW?<3%lGd;e*FCP`}gnPe?Z{x-@kwV zLBTe+i>eF^42((M?k)@+tg;>q42*4_E{-7@=aUl_@N{TZyWT#%pj#?R()x#QlyqjN z&Wkn26ZWNreONa2^|d3F%HBIzUaZWTxhB@K_*owdcgu#B#`njzJh^ZqQdqq_uh(4Y zNn6+F*-Mw@-!dtGd}rm~xtr70@^J?>dac;)e=2hKrqW|aICZC9t(?jFbXx%D)F%u_x7&cS$X^2z8bd$ER&OueB)KUd~4dasZY<}+a}Gi?d#Lc45~B!mba>0 zI}^2a#Y&a>GGmWLJN4%?YaD#^B0b zah{c?xz_U8{w+`6D5M(}e(3V_Jgudn_0<1;b3;wq26u@_%gP@tEiJAliE>vGTPo&G zoH%i2>(t(c8tNLD=^C1c e7#dj_nOhkeK{Py%j9CIIj67ZaT-G@yGywoKa-h2a literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_paste.png b/Media/Themes/Umami/Icon/actions/stock_paste.png new file mode 100644 index 0000000000000000000000000000000000000000..8a955039f03467324658ebd4042a8c4900a3b395 GIT binary patch literal 945 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXn>}3|Lp+Xeo$Buq5-4)4{`=Yao3;cV zmoyb*ay%J3gWEjuVvk4nnOiK|ip6)H6>FU0F*`?)^&yL6)9qUpyJxw2PS8^k;9@d# zPCr(1@3W=Z)R%tISDlOTf=wcM3dGyYma1-Aa;f-hOsz037IWRNtk+SlM zNes?%r*&Ivv{a`u?9bk{<<~X6i+5t;r`-KiG~;T%@v9%ddO{l145nUrXH&iXx0P)2 z+0=a>1MOb!zwn6T-Hx9*TQ=vuc~r71BQx{t2hT2#bsHtttlQSvwQTdWbHUse99GNH z_w_SZGm0_aSiL6Xc8=8M*Kc|5*SE-Bl$5VO^XHFKAZuvoR385Oi)@Y+dtrKNYw_ggshwK%cfe8d${VKZ-W;DppU zF_#tE7CtUBmyuae;CK0Qox{_uM_+$Ut4Y4BF*Dl9(aguo)4$)mf8&&s`<8z{wD7~j z=qb?}+g-J_?G4ZBF1o1UC7X7_l`+MuF)8yUdu{D?ENtLzb5wsE6o@wJc%D_&3B z^T_Y_wS%H2r}cYmWz?juYowdcvMW3!qAF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjt ghZq`J8JSxd8bUN&+vsM=z`(%Z>FVdQ&MBb@0B59%=Kufz literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_print-preview.png b/Media/Themes/Umami/Icon/actions/stock_print-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..760d4c62798d9e72616d6b121c0b7289b059d187 GIT binary patch literal 1291 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2G1yq+$OAs)xCPL0l);wo~y{`1z`WxH>8 zFB9LT60;h`Ll@=CUgie%|7c^R8*8%p>I? zIp?iPcg=m2Wc@aFaZSmV{>^voyu7_K|9mqLoG5rB$IQg{clcUKd#kzT^&7;ee<=N} z5bl;#X{g@I?JOo$_bzqv-YNdy-Ywj|U0m_VUFL1m^Kb7eI{J8-{Q2*npGSzSUmJJe zPm1A*!Nj=x)~@wxOINJ9GqKXWVak*#t7~ijp7HNmw)*(llYMow>R&#)SShyXgOI3V z!S41GQM+=ocyFCPCEMy_`D=37l&RKSOG8#J_nV*M`%I?F)+%{d;}ov%YYk)CX5Q&> z+4tiULt$ZIPfyQ-j};6a{@%$Yv%GI#DT zcGIb%@0mXA+S?**FT4164ENF1&o>z*3$9O7FMP21?vmxpluaCca(FI=akuK{ro7$t z+;FDS4D)=(*Ym3x7o;5%;oTW)Vq%iO#h?BhIkW5--?Aet!=)wzy%xa@l07pH=1jwzjqrYr}5c_TO|e?$FuU zez*FzZd$ltLc4ra&;9qyH?Ex6tG~bLXcDV}nHt-E`-am`552#h&d#A2;I(n{rb!L& zjvJ^1dGQ=x@c5CaS{{?8>hEu%%>o+Eo6dgZYg06wefGsKdxkrC<}Y7np7HcMWc$R8 zIpo6?&7~YK81pJ^D)uhUNMurEaq3BrylkSR>~r~7f{?@YQW37zSDjKqRFadE7aW*S zWK(ol!R}w(lpu{vg{d;}+O1QBma^E**Wa?wNaRD|=kM;_^Qw&cmG7Gt>VG?MD8y>_ zx(A#QwI(_ zU>9bcedSu})4sb77j0YXrMHw{uMR!RqQ8IUJRimxjTH)l9*jwiFCI)dXe;!A;qL*{ z1cnbxZWoT{G+a<>WnA_^Ml{Bsp(kO=;)9V!hr7Scza8IDbNsI8`PG~Z3=FCzt`Q|E zi6yC4$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%? nG}JXP(={{?F*LF=GPg1`glM?7(an;9fq}u()z4*}Q$iB}Vbn`Q literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_print.png b/Media/Themes/Umami/Icon/actions/stock_print.png new file mode 100644 index 0000000000000000000000000000000000000000..0c35a115626b7974612b3ef4eb2d47b3d15c8f1b GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?9G)(YAs)xCPCcI;6Do4t{`)o0v^NTw znUlXwbxWS3vuQU0t+{FJIz)KJ#uzSXkJKu+cjjiCF9UpZa1s?pa zdlVczSz~G0(OaQPOGU)>Vq7#`mlg>(e12~4lKt1hamRBWucwb9HaTX;Tt8YGYc!LG zolnN+z-6JO=ihh)Xo=f1y<2WvAj5vV(4z2BYFm5z#VGZ8n|^=1`EJ)y>2>}!za$xY z-Iy7&b&pA~vCn`0C>l!w8SUZ zy;!kmYgO;h-S)+wo~)L!Dw(l#sj8d1yWm8Z{A8a=QzIN-`kqu*-=CQCW@_I7YmR?0 zk*TGnQ)}$bA3DV3?5scG{CoCWqRL91nX@#!&UHpat(_3H)@`+Dsd|8yqEgJP845j7 z63OO{tSa+Zl+4`n(l1Vadr-n#Z@O|sMzE5FViH$ z%=U|2YY^AcTbDA|zI=N!N3)5qNux`krKZk)@6EWH`|OO#w*{kAF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjthZq`J8JSxd8bUN& S+vsKqvcl8V&t;ucLK6UG>cTq! literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_properties.png b/Media/Themes/Umami/Icon/actions/stock_properties.png new file mode 100644 index 0000000000000000000000000000000000000000..a0043c70258ac8526af7073e2eff017c03246813 GIT binary patch literal 767 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9Uz6JP%xH6CkvU4)qJ6k%sTH89B0|NuY!ouR?P@OG_&%Dw>;{TU%Q@x>_eso;-j4`~?dZELyZ^&6+i9*REZ=e$Be|Yd37z zuyNzYZQHhO-@bkC-o1wo9XfaJ+=UAlu3fu!{rdHrH*em%ckllF`wt#Gc=+()qeqV( zKYsk=$&;r~pFVr`?D_NOFJ8QO`SRtfSFc{be*Nano40S@zI*rX{rmSHK79E2@#CjY zpFV&7{N>A+uV24@`}Xbo_wPS`{P_9v=l}oz#U{@5Wnf?sDGBlmW?*FD6_Ais(=s!6 zaCCNcOKNIr4(K?&fq{X6G0EHAC2&e+jTQp~!xK*z#}Elg)`Nk5!igem7e3$J$*Z67 zc1l)~LQdn~^@r5M6POnA87uTpxnB$kRE}r13<=ShZ{!&m_J>LRndzpa*z^8^!biOW zi4AO>`e&CaE^wR_-muf5`O1$pb_S_6%hyyqD){=DNlGSvn)0uW_ujLLoS2mR`>(|} zdHHl!E|r! zfv@}LIWWtVdt}{KyWpU6;BJkv1M{4qsa~l(7ZTVUxLA&_XJ{x@Ua(3lI4kDZ)6c~{ zj0_A7|BoED+1Ar1beMsGLAAs+q9i4;B-JXpC^fMpmBGls$UxV?QrEyN#L&XZ*wo6< zOxwV~%D`aSXA46V4Y~O#nQ4^_Mh1q4x&~&thUOuLMpj1VR)&TU4c9ihS%QMd)78&q Iol`;+0L3jp{{R30 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_redo.png b/Media/Themes/Umami/Icon/actions/stock_redo.png new file mode 100644 index 0000000000000000000000000000000000000000..ab73631109595c31b33c4d71ca04bb3fe46740e7 GIT binary patch literal 960 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}hahdf;zLp+Y3o$Q@094K=9|MPRoYgewV zmC8QqCK$Mib+wb@nvf~myu_M19(bkLHGA)G;4Yos%l(%n@`r|q$dpHmZj>obyOpHt zdzr;}W2K4l%$?VL)%=c~*%HJRXK|+B{mlFC=T)C)`2V=$XsBTK>fhy)PM1Br*>m*j zH(TKtDQj+qn{QQiuS{?ky2U5dy*iQMJEP6lL+09pk^ogN!^6`_w)0~r2THEcI`Zx77b_ECHJVUg&B9tWd? zCOif+7cB2mU~^d<=q}`!k)|0S(7pONgHG&T!=5e;#l_3BZr%|}5OUOD>)F!~_+Y^+ z-(4zRPR6LKKu z{@am(hpSa#6(^IK*-xe`1`G8sy{~4kW74?7)0wiRbgR=%jl`^~jd_1h9jQFw%hAHz z_@8m%(zTM(GndSm6?cZwV(JASuM9QD2A5OYJ~%Y8ND5{;=+vCK$&jaR@_BXj-3{G* ze>&uCK6LO*+ z_1Xu%3sc>sKIK*Lr?4N-^wk*>bIkT!{-t{F+}~l*>~E~w+iq;1`rYPblU2e>u4ng>KXJWs@t$1s z(qYQH*_)OMI2_TCmrQZnF?-D&{=|aSY>#(?yfncfB&v+z3jz#{r7|4S}`ycJfFqD zz@S><8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$ vl+3hB1|tJQLtO(iT|@H_LnA9Ab1Oqbh=yw$-7Fax7#KWV{an^LB{Ts5+^CE* literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_refresh.png b/Media/Themes/Umami/Icon/actions/stock_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..1af6789278d35af0a65ff002585889d85ea410b1 GIT binary patch literal 1495 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq z7(Bq(?PRtc0|NtFlDE4H!+#K5uy^@n1_qWbo-U3d9><@CW(S0%N?h|OG+MhSG2}@} zaOIzpnx4JX`GLpo9U!8yMjB$GU`QNtZtM8pI7Ss80KSofnYI?o!bM1?3 zJ`2AJzhgc@D7EU>=`Hp@-7|OpOuBYvapdatF1C6TGOd0HedU}tgY)r)m)-yB+T>T3 z9kyuhpHN#Rmle^WvYgdu?aRNDuU?i+ojW1+GPh-E?Sj2Gc$c5w=IoW$T3nOijQm9|HNEoRz2HX z@a~hsl&yDKHr*G{b)FD?o4L?F&fvG#Rbh{R#}5i${T}CgX66%jBY!Iu_tbydoHyNA z({|cw=CkoP&JW?OnYA@>Tkyk^KZWP7p1t;{M%}VZhAZOv4t37-e}BUHEUwd1R?F6|9c*H zM&#>w|NXWkX7aL23_CTZtk}VGw(Yin#M-^PJr~71-tjN!Y(zm$SpAoeZTgQcOFd>a zidAjDX7^g7%zH^uc0kX$ppg6A$GfZ*7+G&s9cQ#WBNMgv)Ix^7WcjrE7tF4&x!Et@ z4xd=bH!k4XP1EB0Q!~wa4vMP0-<8SYwPu^e-R4N6oqrmCertAKE%&_Z z2BVC-^tVHg)UQSq?9|yIE#}mBKIh(V(S9qN9`B;=MUk786YjceY|Q#xYJ&-M87tVvGy z&+hB{X7nb8;qS8iD=f>;l^)bz>wKY=$(mn$#>R8$mG3j=&9W9b)2(5rWmU8?>2`JH z;v;HIi?(j{W8Gn5e7T>AckbdBwtEW}=BAVx*#(+L{S@lu-2PKLPi6CL9U0X?E`x=$ z7TnOuPT10yvmrM+>70n@Nv`Lj5)!+)r><=-SewrjweCKftyJvOsfik{)jxVNXHBaO zPrUOp@nA~A6tV4L?D=&yZ8uo{1Qdu~$bH}PCS0d5?_$!mu)Ag~bwXd~|I0{--^BZD zSN36tp8g2NkMsBZ`WN|M(?y{DYW%Cl$xCGgWR@F$YMFWHr`sJ?^#k9E_T1Z{7b3N% zV&?AazY2aXWLSAh!Mf<*y^VkF=d$kDy2SkGi#12ur&w@sW`-JPbUZtoU#soTmn3*v zuv?Z>=V6D$=Ihxftv`G>?%-XL)xq#x_hF!2zWmxnE?#e%Pf1CwHcf6`t}$!oqj%og z-#^?IZY-R~VZ?DnO|D2~L&4>HTVgBXJ1Y+9ZIXNF%hnSis&pas<*Bu+_coR5$3B*H z)8YIm^r({M=ZQ6HokHt=*BZvYX*?}(B>c{sMRMPC?!NuMcEj-_uV>3=FCzt`Q|Ei6yC4$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}m zqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efk6^vLvVgtNqJ&XDnogB ixn5>oc5!lIL8@MUQTpt6Hc|`>3=E#GelF{r5}E*OW}Vgm literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_right.png b/Media/Themes/Umami/Icon/actions/stock_right.png new file mode 100644 index 0000000000000000000000000000000000000000..c26fe61e751a7e45a068cdaf5acb23914578d810 GIT binary patch literal 1100 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_owLPZ!4!kK=Er_-4d}iX5;1e)qSU{Ixny z&x1*^Kd6zrxJxMM3HoZl;R&USzCyPfY3{tr8zvbgbP zp6Qmv-5O$_-hDdDu*Z#g?$YGs+p+Q~yZ_ey=VD0sF1+3(e^>GAg|fe&TF;%^TUsB? zpjkWb&5f&@YA-K7AAfTNn{`~8>t5qk*Dl^$TX+1@wk1NUOxdNMe`+_sxv^<;=G89K zoBp3_7xTX{=bu~Me8`^hh>*kdqW14!?mQ?y_oyHuU2@h7*9V37f9YH{4*qr};Cy`4 z>-Nv?k1n<`vX}2aE^hx#{iG~k_eQqYI@dCLu1YN5x%{nT%#*@TmmhOKUGOF5ov-nQ z3p_nnTXy-ZIPIdQaD{OrXQ!{j5@sb~ftN=2|CP06r_D;2zg>KKRrK|*Tgz9jYh$=| zY|3My&E1z{bbXDC|7#aNwdW}5oWY>%w5DT&Qqr5OzRpLM^Xi_oUgOOz-!tv)H23MU zMh==YQa4oywy(aknElfC31JGgo^Gihrnp2jin1*~bV^Hrqp&*GA?L94q~E@BTEP>S zv&_5Fa4hQh-PN}v=kJ`}e{N31oZ0$v(wU~!ubD2X)$+frUZM8h>O?S;e??B*X5pPX zChco{-2J(jn|+^6*1fg1@!TI)&pxNiF3_;tg>?~25a&5R`Gs4Tw*Jnqo-^~%9P83u z>51Q-e>nR7*IR=Nv!3uY?hsqh(9=9~`)|JW(U&@fF7BHich=^BGNueqTPb#l1IrkNCj8v~C2fIbU~%dFdrRHc6y`+#<=Oc#=F8dE^>tFe z1K#fqd*H9Yd_!d=V@Xg!NI6?3_bEpCdNYCE{{H9Z=5JU(dqQjKq1?BkOJ5oVx;)J; zXZX9kdU3p-zwGW0``-E{J$4B!($fv*zHm}2NHiw@`jL09<=wb#lhxlAFl||x66(P- zrEx*jl}Yu1k3LV{{e801D%s8u_p6R!-5kO%Z>5}`=@ZxHv+`DK)rw_NAM5k#nRR*d zY}gLRs4*}wsFt`!l%ync8R!~V>Kd4Z7+P2vn_3x~X&V?=85m6a zY+;C^AvZrIGp&-r$iUE0*T78I&^*M@$jZpv%Fqa+;dx}t5(WkaNstY}`DrEPiAAXl l<>lpinR(g8$%zH2dih1^v)|cBF)%PNc)I$ztaD0e0sz-3;QRmp literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_save-as.png b/Media/Themes/Umami/Icon/actions/stock_save-as.png new file mode 100644 index 0000000000000000000000000000000000000000..00fdfe01ae117e41de48a02b22b1b34a738613b5 GIT binary patch literal 1048 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp1V`N}7FVF3!m-$ey~eFf=?kuQ?>IAiJVFCZ{nR#4X6K z>P^Y2j{*sHq?UJsROS_A*EHtl6=bJnq~x@gC)DN@bTy@CrbJg2k-8MfnZ?c1-P zzyAOKZ@F{#c?Jds^O7LHUw;w-#{_^$Puit(XUF$@)k3S5W;v|d@rX^`Z%xCB9YNu5?DHlSMYz<~zj(TD`QGtFj8>72ZL;px1^_vhTSSWwL+zDUVZHL|E%T_U@t zGj;ZQ4hGjrbMgcZ%*e3L>AbrBC`V=Dq310}OzfkRtmjlzEpTaa5Ns}y*)40Yu{fZ% z@6p<(tv_CFne$dnLu6l&bCye}bK=!?ZtDd1D|Ib8zSw2`x9$DqRz?p#OPB0k_nPy9 zud1ULTaRn7RO*EGI?d1Tzm0XmXSdz+MWME{V zYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv?BXcW5 YLx_fJ8{I4!7#J8lUHx3vIVCg!0CIEr)c^nh literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_save.png b/Media/Themes/Umami/Icon/actions/stock_save.png new file mode 100644 index 0000000000000000000000000000000000000000..747686b650a599fcb879f9faa0468de8574a7100 GIT binary patch literal 1109 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U_XPNaxH2#>lr;O!T%40vkUe!_VQ6@8UUNuZL3TxVOip7sh+B|d z)ti!49|aQZNGXQEB+MEBaoUJWb!+BXDrYz*k!6xh8r zxMyofQFX+mz0uPS#!NpPH}hEBtm6rDP9@AeoizVk@`7{83ooQEzLe29IeY2lyn^ha z((IBIS4t~$N>^SjuPm)^tZQy<=6yi4%`N?N z<}O^fanshFdrw`ya`*1tCvQJ~{QTwXw_m^i{{8z83>M!Nddk4Sz?kIi?lSoy^ZjiM z42*%EE{-7@!L?^YgAY51v^_k!bjR-9zcUp@ZiqFpmzQ^mYKyc7Nj+h?5r5`Q+6>KK z&y=j6@BG2>bA3wm>4*CGvP2hF9mxqoEWIzM4}%sHXaUR1W} zm`PiQ!`Ug{7#`{N{p9SJaXC(+p+V2!psk-Y%M!V20mo_8XLYY6<+2~yEWvncG5g0$ zD&A)&MQ)nqCtzy$$XrRS&tck{ zb<@i(!_d;}>yHRJO*(%+bg!+&6Z`LnXB*GU-yHwwb=T>Y<*S|-SjgzfetWN${(O44 zxmme>&h)!ag8WRNi0dVN-j!GEJK z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfr0s+r;B5V$ML&UqJ3gqB^vh6ERMXfRe{NL zt(%6Dh|}y9S27+ohj?V&VxRp(!BF#-`=zdk6clmG7>97ww<$jO}5;if<>UnHd^bD3sal zYM)UsIY=n__|9*SS#Msub?7j^srV(!hqcdF_U27c_fQe4N+@u+V){POD8#2YmR0Zc zk@DouOUL%sm|8R(f1LPw+S=9kr%ai`By!Iu<@%>f3q&?8ds(=yJ?2gQnptht@0YB) zbhdBRZVyR0v-dZ=|KI#~^>5Vrvop5GX65e=xfvmrcj2gL$lcgOUN(*vMco-X2j@4s z_Js7dZdt<)yszL7I-^OEvzj zWrE@B^_c_W7nW!vkX?(X-R4` z7VTNlq440lKf|oHHaCVI?e&tYKb&-(R`a~)ow3&%!8=`UJHK5vzq38t-rI2UB_-*@ zMx1R*BGoFNm7m|dyJ_~@+ph(k7HnPi-Ewl@y~JhvUq60zBi==AzY6#H)dv@fTdU8S zRTi}QZCzf>&pEqv^OiB0OU{gQ(>(j*jlJ5bQkP&~EFIM>lSkKCEnVNa%A&=$pQ4 z7ia6VmFw3>v!)C@!(BTgK+zzfZ4k&z~-j z)k`J?S-n*kuuR{iqs?qzH}hn-y5wxWO%`Q+>n>~NnSTmeveixV>6ah&%f+1*OiAl< z|52IIA#Ln9t>(GqhdPF(B3_zv_W9orV|Y7umfXX~?q*CxODYI{>7b#!zRZkq*p zJ^E0b5tAYK-6Pt32jU`+w zWdnFPtSbAhHvTeidb8`{nKVBgS%?)Fi6yBFMg~R(x(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OP jFw-?O4>2^dGBUR^G=yllw$aTJRML35`njxgN@xNA`eiEl literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_search.png b/Media/Themes/Umami/Icon/actions/stock_search.png new file mode 100644 index 0000000000000000000000000000000000000000..3f3faf3aa094fe54c7f84894591a1cb73b93aa5b GIT binary patch literal 1254 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_spam.png b/Media/Themes/Umami/Icon/actions/stock_spam.png new file mode 100644 index 0000000000000000000000000000000000000000..053accd65874295c38044b79f6abca37193956b5 GIT binary patch literal 1488 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?3oVGw3ym^DX&fq`YBr;B5V$MLIEqjN+;C63oWe{-f}dusXa z3(|X?IZaikct1^Iz0&ZD;loB6nz`KFme2fy09C#QYR)qMUx_ka1m$;|)1EB-s{ z|Nh<0tqMZDYbH9?vxzV(&r`Q5dw=Wm=QlBr6J7b`>)xweSg=(ta9x&&ll%6(%7rWT z?3q*(7g}@kbEf%)PZw6dd2_3J_vY;U_4@z9jb>g5U-#wpxpjYkmQ*?Q_w~I9(ONnA zWXri*+kPiLzjtPDiQE&1J>OngpJ&)xxzygG?9Jrkg7;p9$JJ#o&Asj8w~S%M%FG43 zcY8B5^Rrr1WZX|uEZu(X4C5N{?R)qAJU+kf#-5VQ+0yfbr#*h0tTEM{qcJ!AqfP&w zQwtSKKU~-+rLed9`n;3YRYlW&)M$P+KX3Q<51S$fmm)`Nm+S9j|Bkj_Zp>T0*odz+ z-8OgW5|uM+qp#omcWJiM0V&N=nS;gOOBGo18A@GUr*W`3Yb*`$n&{EGnsMjrT_U2Qg&!YTUR!_PBlBfURn;y@xqXZQp(`vGyBzrR=F5}~I^Dl^vHoG+ zyC-mb2q%QAz4FE<2rl~ge; z6>;E9U^H9so{7Qd@RW-gJjV-Py#C!cZCV)5;RBnRB-#$%+*}_J7kBc`&eWdX-bo&J z)TVkVEj`#Jy4s@lm&o70;rtAV3j8Z}Gbp-jS+hpz!spQKr_z=)>*}s`^75?x>m+mB zQM2{htXsFLUcHj~VAJoT=4>=`!Nx+tjS)SoKb}7F__|w-_+(>-dCz^zYPZBcE6R%U z3Jfw^ze;36a`NI9C&hDfezt!5rhYQT=t(G_^=#FtUYm-ZMk!4Uva|bS*ZgsI?f(B| z&)W90f6B}J)0wnDXhm)H^S-%PuTJ$}8+TQ1?YecsU%&S9@bd2R_3fS*#J1(ylh1s8 zj|<*(D>KZoC|vdV_q~1bjVc1{ZH<|M8`#AJJ}N%#x7)R6XX;61?OC(M^Gtn}pIPh- zylmpls~n)iRaN}p(}V5q{dNDg-Zu?Cpiv+z!9M4Zvtq5s4ffW?1@`Gb^jhaX|JgK8 zo`LHGL-GL@1Ku5**ZVx|p6M`AUruAi$}h!tnsz)s#$4oZt$tU-zUy;sZco+Vc+1ZE zzUbO_>v#WVe>B%^fA9G^P@1t?Ng=o- zH8U@@h>Od)C^fMpHASI3vm`?yBqLS9-P1Qr1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1` Xf@pXi8MB0efq}u()z4*}Q$iB}mD`IA literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_stop.png b/Media/Themes/Umami/Icon/actions/stock_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..969d7e46b03cb6c0658412c95bb0bd6c4dc74e4a GIT binary patch literal 1375 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zxP?KOkzv*xkm+nm-tI08VDQs{-7;?>@a*Y_~cxZRI)n=*jBwRr@~Mov*Gum)ZJbzx{h|!^Rme*!6A9 zE9VKg7q{*>zx)w*O?m(M^BP8vDo@z|(b7Em*shRi-X^08zxi#;w}{M}B&4z2&(X3@ zro5;)aN*Ue9p5k4s~$STbzWU<)swrwzc0=`E45{9RO_~>+KKV|WWFu+PK@5dVQ!v( zY_78V2iKA?8}kN=@vh{tw1p^ z?^ergOUo4)ow+mlzTKAG8w{7XWXB%sXfoSXaUog)11abF2>}@v7{FV7@zb?J&k^# zr#*o$aPFZn4@G0`i8srQlGTmhm0HM6Dn9F>9-CY}OGxN~MLOS^&FRS++T4{-KIsMo zEZF5Nn)q^)lxCRsLbs}Y>(}!)H#cW2J-kZw=bxV$N#APCV{RcKC zZ`hdfvhemKRjo53E0@jQwLbp1L%n@oV8R5^D;rCBi}Z}s9xTti93U^)s2vz6kSsF`rwa)xrQnDcLecY8vADj{t)?GN(b-H!8pZdP13HlW$S0C$l z&#&5*&zN~x@!R=jR~H$Yh%B2R5OP{LI*!kFZgJry6$!}*=NKMtXWQ>qda+KbuJseL zTNTL7%)(aoYjr$589*VF2!KtX!nWCiZ+mU}y_>uXe@8zvO zntyzj-R5fdw0!5kO#)}{{5G5DxuoJT^PkS14_v+~N*ydpQ!834dMlbwC|%myV)S`> z2dB%0`hVM>=x1383afB!eayhXpjzS@QIe8al4_M)l$uzQ%3x$*WT0zcscT>sVrXGy zY-(j_rfpzgWneJvvxOmwhTQy=%(O}dBLhQ2T>~>+L-PmdKI;Vst0Ch5E1ONa4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_text-strikethrough.png b/Media/Themes/Umami/Icon/actions/stock_text-strikethrough.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0c115e905091c0c354644c02469c261c1acf7e GIT binary patch literal 948 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{yo-U3d9>?EKj`s)-lsUft`Mu4%@8SlwH z|K{5hbI+bUyJf-JYy*}Dj_vstDFy`wvwLo)&P)5gi9zJZ?(FV_Z@fNAKWufPQ+KL~ zbe;IC>?rc&c?8FoDXo4QpN<{AzE5LST71{nCGCbiPj(lo=o_BAucF=cH=tCN!Qm=H z=;ehgtU^ND7yZqe+`DpB-@NO0KTq;zFlZ?G8~1v?wSr63m##-bW%JjZH(mX_j--9-DY;iCI6pqNZbR48p8niEr+2T9M2O7!`scuA@7|NIXSif;+d6O6+^5G9 zT%30u**t5V?RgQcXDO#wlr3a==^A+X$cqK+4nYTO*w_6HzauHRT5jj|{B3N@k~XBz zNLau!#ppo{oFhu!N|bKK-a)h*T5{q(89{t)XLCI+rYrez+l>E3quqQ zx%nxXX_X8{28M>Z24=d3<{^egRz~JlhDHz#&m&`&FfcGkf@}!RPb(=;EJ|f4FE7{2 g%*!rLPAo{(%P&fw{mw>;fq{X+)78&qol`;+0AZz=(EtDd literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_text_bold.png b/Media/Themes/Umami/Icon/actions/stock_text_bold.png new file mode 100644 index 0000000000000000000000000000000000000000..87bfdb2c7ca50dcd52f718f6bc29454679204007 GIT binary patch literal 1109 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ov$PZ!4!kK=Er_-Dkp${gQs{Qm7b@3PBp z_NPtWG2z-W(PZDVGXXdR{xU}j*_m^ui zf0%{3rnaQ{-q>|>Pwo1W$b;iF#d<(;Xi55jO+IqA29xV zU1_(fyV|}^Z5C~(j(2Y@y)s+9dGyZgjlYr0SGrxLbxxJ7=>p$<)hsOxL3TOfLO*^z zn^gAs`czGZ`TtkT_ME#H^xEy-pI3*4FE*Xskagul_&$~2kM6465_PCQ(q9~2ziG?8 zeMkPh;avY$>Gp|hUpF$J^jM&Nr?cm!!s_WCZoikDWPIwvTB|p^T>MQ$Hk8)pd=Ji8 z+~Aacukvd^!O;~9&#_E1UdH=ixBcd2XKfmhqO`D6x@>0kHXIcIZsw&msADxn_cjTtHoCtj+v_4vf}aX*}EV>f3>xsj+vDcj?^i4M7O zObjc|dh>UQ6-x7*nf!v!T~zbP$%&n(KdRq$oa`rSzpFpO%z0mkd)e6s6CNEqbSH(8 zLF}0tw@a7wvY!pc{tgX`j726b@?8FpbHmYPix+QRWqTpL?#n^xi*t@Hh%VL9)3t7O zGTc%7U|zwIm%euLPht+0nol^tY;D0ck2B}b=WTp5tv&2bfA8Ddx8Je{Zp;f6{IXi2 z{`J%a&w>R$XkPduGArKk_+gHJA3j_C+mX)P#TNSYch}#Ih78wlGljIC;o*PFue<*G zg%qK@#hjb(Fo+AyoA4l}iMzpmop;Bz*LDuveDh;l}BgU+(s@s@-1t zyG8P4^mPUm29329DO{Wl&&BKi?E8My+`iN+&3$#O;uOB^zfQ{P-Fmj}?Z%szih?`b zC+BL-e_6j|KjX~Zg;CwhS12$rFsPQeMwFx^mZVxG7o{eaq%s&87#ZjqSn3*>g&0~` z8Jk)enrRytSQ!{h`)px|q9HdwB{Qv(!N|bSP}jgr*U&t~(8$Wj+{(}hqTzXD%n}9$ y21$?&!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NHH)lFnGH9xvX| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s8-o-U3d9>=#%KJ9nNL8R@xx%5qAScq0VFK0X#brQy(dBoX~nOL{IeD4u!q`iBTU^Ci^}ARR8>s zG4qG>jd{zzUy!xxOO|sAxx8ij>(#T}GBy;Kd$)JJt8I^oRrQM36Q60Uu5{vgzf-c8 z+u9ihf(#5tp9wLZKd--1VcJ!uMIsGlzk`&r_ZRxTWZ2zmKF!5(CBr7OnagJKCPeBk zlywmhP*Hevlc8th0X3E*8Y~SQw*QwhzH?G)s{3EM+O{o`<(!h;`i>*bYj5Uo=y>K? zGtMdY571%jJQT!GemKFP#Uya`RfkuqyG1416jvx|R{z(IWlVl?chcEo8yJ+_j_iCR z*|J%>*DZSO$}oMW^-+tMPxAHBojmYy7_4tXcQps&8M^+Am*ciCe^rTP#mjic?_{6`bCY zVSFs-*bRTZ>6=AEXJ*c_(iZFbR$=pRmfwDHg2D?NY%?P UN}v7C2ILF|Pgg&ebxsLQ0H3x3jQ{`u literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_text_indent.png b/Media/Themes/Umami/Icon/actions/stock_text_indent.png new file mode 100644 index 0000000000000000000000000000000000000000..6da223e27f1c96b515f761fbc7cefb4ec9ee7011 GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GX5uPrNAs)xKhMdh43Y4%d{}HLsvdYBK zO{^?>{t@*Hp~=}BKdKup3;4!sk(s>MFl#OUf@>E>(UieMJDIc#D}7#Qqi_V;gjaxv}X;wN8j zi7+}pxNx=VX!7zeEGYqo3Ib~nOfhbEm?$v+B(u3yLCvSav>mghqd#-HFbg?u-M8xa zZEFGDcE+9O8e<$783KHIgg^P))pxD=^YGX*&7?Xu5eLBu57={mehcGV_xe%U#urbQ z!h*#`fD8<$HEtez)NA%LV24jPGBKzZ$qUEO1NrhibD;zRDs7DgE!hzj$cDC)La5 z!V#ooeyfD-S%d)dx%wO>h5|krli6o4)I};I+AEHpW#SWp6JfmmTT_Enp=m>_xGP~&wYUV+tehnnOyr1QhGyCZ237_J(>_}mqG-s?PsvQH rWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efq}u()z4*}Q$iB}6i#Gf literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_text_italic.png b/Media/Themes/Umami/Icon/actions/stock_text_italic.png new file mode 100644 index 0000000000000000000000000000000000000000..cded0616b95a19998054647d36e725b66440a1cb GIT binary patch literal 952 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q|7o-U3d9>?EKx$PYiC~|CntzL1Ogt7k0 z=F}P6PncZ3D5E`rtC`99RL==^&a={X9D-liS!{o%Ojw{QWZ5~zscXp$zQAcqTM}nX zdA4-ZL8)|^(r0rvm-A;WIayJ?g55qM|9;&5t=Df=Ge-Zqt~A?nPE3ZGU|;_7DK8ls zo}WC@{poX?z3m~l$?{re?woUeEcwzDD894UdRbaZjP84msCSReCfTf9aZW+t-lTH1 zW2etYcSoHzNNHXBBG&xDiKoYMrTSi z%)V6zRD&;k-J-GafQ)iM#hhZRF!Q%*8MQx8s_wpPWpGPoelY7XjRP7IixpbV>`Ymf znw=XM6qw6#Ji`52XU1NQtPf=wT*v+{4DyPRP?^}Q@@aw#UlcF@+!KeF2E5(7d~t;E zgM@Rj@_h@9buI6txA)Jxllh|P)*HUR@4GZ(gKQUzw1__|b5+aIj7?<|R6RRM<$sRx zk9__?^Oz0u9vNZwJ1vs#$M!8)lg8r`s{-{@&cLvZA>nkA_y3u7jP)(5 zbDo%2YcVh|sFt`!l%ync8R!~V>Kd4Z7+P2vn_3x~X&V?=85m6a zY+;C^AvZrIGp&-r$iUE0*T78I&^*M@$jZpv%Fqa+;dx}t5(WkaNstY}`DrEPiAAXl l<>lpinR(g8$%zH2dih1^v)|cBF)%PNc)I$ztaD0e0sy41i=hAj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_text_justify.png b/Media/Themes/Umami/Icon/actions/stock_text_justify.png new file mode 100644 index 0000000000000000000000000000000000000000..b009ee3b3cb4edd08d8f5440e80ffa7236b4d18d GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s6sPZ!4!kKLiF_Uv2{WI0`V#dUp^-QVIFTqX&hVB9^arE{BB;Lez7$}7UOv!6zk zyjee4rg2#&V}iMWz+n}JGaT!xBkI^!35jyGeq}ksvo$I-Xwn18i7hTJCiR-TkZfhK&LeuZ8|^XA@-R-BG?$)}Ul}tZHY` zPUo4N99>5zFP&6T#A5ybG0W;$A-1*?pS_w&tk$aZ*PCx-X-nK=YqPEIU+X@F%K6XZ zCY_agG4t=4xc`gudEJ#?A1_?L+w$X@$=PeX zwHdRH8BF!Lxi{{8vB3{1=R5j&mp^ig?Yf=7@?Gd20|SFRdP{kVo554 zk%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn3=MS+%ybRSLkx|q zjLfYJjUXDHN5(8+U|^60*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGn LtDnm{r-UW|CRhRb literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_text_left.png b/Media/Themes/Umami/Icon/actions/stock_text_left.png new file mode 100644 index 0000000000000000000000000000000000000000..224d70023345320156b7f57b56361d1cd02092be GIT binary patch literal 684 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s7XPZ!4!kKxye%Yt8=p+xlL(soX1_(z6=1HgdUd=gd@`Y8CYD zjPBN?LuVKmWU9A|T*%t1!W6Q4D#Ieq6<61p#GcnvVoJNf{(|$oQY1?z^CXuiyPjUy zYqlV0XN+WfiTr(U1_K^v!Fi%gNg_-RB?mgZmIf*8s?d{WIJ2fF)7Vq%pcm`u|i_Tee<#d z7haZZc{Jm`qx=D%0G+rsoh?dD(Ip$|ydE`mGTh7&E7NodndjV)8Y%C8{_N+uSDsHe zU!W`g^Uutg)@SE_*;jQg!J_0}&Hb4^YUfJ4G8bje>gb=Td6-8`sZa2tuv3LoNBm&} zo6AP*+j4o0UiMsnTekoA-}!<%vv1d4w@(q{O@E}6@REUnLAAs+q9i4;B-JXpC^fMp zmBGls$UxV?QrEyN#L&XZ*wo6| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s8do-U3d9>=$ap7uNBAhNeSqkE;mVZP~~ z%(GrF2_?0j(3cRlKiJ}-BDJ5Pxly&VbN&%0F}C2!kR8`qHA|v2WY?HyTFp&6xAXaz zGa?V>bMJM0z42yg>~|&3fWrn==GV7xGr75A|KlaAeqKo659i)=KJD^e>-02_<@`%5 zbN$x{7#K4!wBK_T+Hzap%jN2;rBaT2>$Wb={?F>LWQBrMMW*KjkC_ffmw7E+*toX(+sd#21r{&OkMm7C zG;Z$LbNmRmaA~^EPU?K6r;CYTW8|ddp{YO zVz1wyH!nK9-YI_ap7qD>EeNo<`04o1#Sf2PknvZ0*8h6e=bv|CbTpi|oDle^Xq-CJ z(fx>|l9dyOJIBYlUQ1e*kj)2?C{7#J8- zOI#yLQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=I zR>@#wU}&goV5Vzm9%5)@Wn^w;Xav#lJThhp0|SF3$cEtjw370~qEv?R@^Zb*yzJuS c#DY}4{G#;P?`)(P7#J8lUHx3vIVCg!0Oe{Bs{jB1 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_text_underlined.png b/Media/Themes/Umami/Icon/actions/stock_text_underlined.png new file mode 100644 index 0000000000000000000000000000000000000000..fafd4fbe482ebdcf9817d499857b7ec8e8f72acd GIT binary patch literal 1038 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q|ro-U3d9>?!a_Vow}6gmF?`@Zib^YXpi zy@Q!#1qIh^e_`FdC}vAupo`(8B#$i|i#IHrHql9d?VyJqSNDtThs$DH6)uXWX)1?Y zlSnmtd?VuU8H>;F+_`n7WM^ODcy-|6yyADq-~W66km>)fiT5M7{Clv~cuuGA{bJXp zXZvld@7A*yt8`04k$D=wGbE`KSO@@h%i-7Y02 zrwe824qToI)1C^Sb&K7}FF%?Xv!&OC zi9fwLU8huH$M+|`5(nPCySH$|vQ&lB(`Ihp_Au*f6N6SqwR>n}*!u*5h5CZ0^CH(3 zSY++3lRxz7kSbfF&+QkHjA^yIgM(8-Jr_3Lskf1Md?)Met{CfsJFmWymFc@#((G|; z^_gE~&-XA$I_2Kkvnr(Wvtdv9VMZp?hcl;4{m{d9{6x#q2PaAcd@mfcWcCSfS5#fC zt*>`M?i+uhL&>+891bRj^GDkjh%7RGApi8HWu;_Ox7FpViD!Hpd#+5GE|Oq#%J9P_ z@#mb^CYhX#@IGKKG(Du%_quAzlC*Dj%d~<_rdm&z&UfF}6sZ&J@$t@`@`uN5rt`D} z%Jr)!oIkhyxY9#4hIt|BXMdc0Ht+LQOUrJn)!Xwn)bputIFs1CDj-P6cLmfh1>6MB}=iB!z{2s|K9JDNilc7amT71k(y>q%- z`q}U8WIV&5qG?b*x6~h5#D)YRv@K69P^@-W;# zxn=XIebL8jHftqJ3O^uJRen7-z)5(T*R2oSn?){)$;#VGasDi2uu{-w`0*h=GKl}$ zm2LG&F(PMv8+iTQJDp$W_s(fon7cPN{oTFIkx9U*iMxS&rqaAK%a7mXmpi*7MyP@5 zpSStDbJ2`TkNiKaJ}brH=gF&?>lh|5NHEx$F6;U~ua-IXj+eovXeUqxQ!R0gC`m~y zNwrEYN=+5@$GBB9-*}{;4fdQc*H$Npat&+jW zz|c_Fz)aWBJjBq*%E;Wx&h*rdD+Fui3O>8 Y`9| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXUY;(FAs)xKhMdm3>>y%WCfB_rkc+F6 zQC;Y-%sz%|9T(Up2nd}p+0ePLYsHEcml}RB-BA8$@3%zf1(Rs23GYc6vCkXsTJ(xP zjGA`b_?zYTJH_b@|7E7h$<*5Xv6_AMT`rT!{PXqI|K1$^dn4uhU+X+AKKqiDg`20} z)L(YFL$8Tx!7hiUrUfyKEm4Y$r*;v-p<^4Yo*x&&BM*GtCtsWSc4 z{kY?6NGbSI1H9SwLc6ueH;d)5AOLrcq>RHm!5 z*kTe4cpm(gooeaW)p66ScTIekkmk!>Z<`)6?7QC?t`IaYV)Zi3i3aw92NM|n=N?~U zdn2bZa@G<|Lcl}u#efAHIG9Z#@c z+r6cxJ0F^TSoXI{w`$AjCHy|l3ic&;t!}NqrTx%%9}j<5$!~}6CY;;fCEdS$-0?dD z!-e;AU5u`(um0j>Ff+lk@#eo*?AQ15p8tGkl1u(t32nYbF09Y4Op@kfxD&0nXS!U% zmCUsZ#T7!k*DKz*w{PAI&!s`Gvo`2xf6L=2+Ii>u<9iqHhG@L@tede>?#-J!C#}rq zetLQS@}Vbx_IxNe(?0Y3^PwcgZ7mTwoClROy;O>(rN%}~Gu@V3opbx!d>=LAbI&$S zuCX)M%$<5{@x>R{Z{B?W(kt0a@;`%AFmJr^!}-$~7#LJbTq8sH%t8z;tc*>q49&C+46F1kvz3GG++_0|SGntDnm{r-UW|)v#V& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_top.png b/Media/Themes/Umami/Icon/actions/stock_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f350bff66fe5d73f7f4744555961af55249f484c GIT binary patch literal 1125 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ov)PZ!4!kKamj9aZ2^vPAR5CPadBCwQjkVoZOqL2xb}SA6hY9Sx-;dYsqBaJU89< zf9%_T_qJW@b9usatnP2+!zVZR2t|8`v-GpN!%=V zUjAFjSmtkN@8Yn=TY#t{Ca=?U&ZBLZEiDX*foZ+W!nmIdaG1!dH!KdlF4`7a8s41^K^GhyIy?1 zy!T3pMSa_RjK=P_QtI1TaO&QZrGQ! zgF$Kzv$*A=3xXm_F}B_ zuWehyw~HsvYDVBpj|jC#D}Jrt-SbVq(VW{!T_s^U0|SFRdP{kVo554 zk%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn3=MS+%ybRSLkx|q zjLfYJjUXDHN5(8+U|^60*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGn LtDnm{r-UW|| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_-JULvAs)w%PVvo=b`?4Pf3tj?y0mp+ zN9Xoqo^!00HWq12=h*7#)xpphp!^`HWz{OJAV1rt9Stp9GJ*;g0h*hNGDBNLSXQ-U z+&w1I#h<6`WsyUeN&9Tx z)p0IsXB{khWn^*Z!rr(?U-?CR*NV*kZtUETl3{#TRqe%|3p+s0yYU7>h)pHrf!@cHCy;e5PA6{W{*PA*ZMNl#`^rb}v#^(*wMQnp-_|g5fl`&q&$H#T?O5-%HW(h* zT^+`m#rh&vq~K?JL+>`zjGz3=`gP;a1l~{i^hdYl@WZoTo82AxeZDQvUlf1 zMV`wMp0d+%ru27Xm5Z^j?zlIK3k4Pw-rOm(tWNst)6M(eZm#!dd$IGp&7Pg}-ugL6 z1$N!q(KpBAcwWk{c%k2Z4Qj%CoUFN_7& zi`N+G`ik7uNUNW!<28+C23PV~hD*;_x|CNPo5P^6+^@{P+D0W{`Kw!}tUgcwyw#Y& ziZP_sLi}3M&533PR|~anK5i7cxp=>1U&y8SntcoIo%>LJ|DQlS^96>8LsAp!W6Jy< zJ}Z@E=yXx3eaC!XeV^QBiD-?R+1_u~mfN|;ELp1PH<#g($`hY5iRo5Ox~F(i8!5MOzPXaZLjx*DDF#7?pGAG8=8pzu$Qc7-Z!(Wfo=3(kVPIfj@O1TaS?83{1ORMk?g;<@ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stock_up.png b/Media/Themes/Umami/Icon/actions/stock_up.png new file mode 100644 index 0000000000000000000000000000000000000000..dc7c2166d39657f634cd86a3a84adf5beae9b633 GIT binary patch literal 1063 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovpPZ!4!kK=ErcxTKB6**r2+)iz#+D47s zoTVG1qO&=>GS;NHtx;O3k*k}r#4arA)>0Ei*KoZOb-MyZ4X(1shxD2rIqka8los%M znO)b7S(&plJgkzVZyOppsqSC#PjxyFMOx7^nCAU;X!a#qS&czuj-PbJBxq zzFXxE>!PE38SSQOtirJ{IvPGY8vJ#@_TpHetm7d z?QQ1m4SAdG|K8T$9&o_*?1EGv}ZGvthS(di!y= zN1uYE(q7KFEI7w@*Xw=D!`Y&fx75g_%UrAQ^OIdHH2uZtw{IL4pReLCI4jEd>-Wa4 z-zmSZ9p7ygzShv*x3<;Pu8>`+#`>FP?ptk@diVI{AK#sr`}>10vs&Jk{O7xVZ!61x z_0it1rct!JeBLx4w)uuD)+X=y^!0|p>+87%+w=CUw%&b7E^8IrPDk?{Puu1_mpk?T zWZnPQ&s~BJTOG6zSRV4o=!Qf#t53qGPa1n?%a=XZpR<4E-)-E9dj$6RygvIoV=r^r z@n5F1?P|)Ne~x@^|GEaRiV#48%U;xqg7&$4O1*;UEG+r_rxS~idT&j;s&D*tp& zy#AwFhKLC^HsBjb6ew`$gOACz!l2|XI6xGFpQ;nj?j(>CX8|@QYN%wLAJdXW3r=5nzE?V4CNA)L&hg>%vc@GuvxQ^ zeM;NCimaL%d_CgqTw>^b{ot}A(xsf5 z9&?&r>^b#E`kQ!|1h3-4y2DQx7#LJbTq8sH%t8z; ztc*>q49&C+46F1kvz3GG++_ z1A`>UhT#0PlJdl&REF~Ma=pyF?Be9af>gcyqV(DCY@`?%7#KWV{an^LB{Ts5v6$4& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/stop.png b/Media/Themes/Umami/Icon/actions/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..969d7e46b03cb6c0658412c95bb0bd6c4dc74e4a GIT binary patch literal 1375 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zxP?KOkzv*xkm+nm-tI08VDQs{-7;?>@a*Y_~cxZRI)n=*jBwRr@~Mov*Gum)ZJbzx{h|!^Rme*!6A9 zE9VKg7q{*>zx)w*O?m(M^BP8vDo@z|(b7Em*shRi-X^08zxi#;w}{M}B&4z2&(X3@ zro5;)aN*Ue9p5k4s~$STbzWU<)swrwzc0=`E45{9RO_~>+KKV|WWFu+PK@5dVQ!v( zY_78V2iKA?8}kN=@vh{tw1p^ z?^ergOUo4)ow+mlzTKAG8w{7XWXB%sXfoSXaUog)11abF2>}@v7{FV7@zb?J&k^# zr#*o$aPFZn4@G0`i8srQlGTmhm0HM6Dn9F>9-CY}OGxN~MLOS^&FRS++T4{-KIsMo zEZF5Nn)q^)lxCRsLbs}Y>(}!)H#cW2J-kZw=bxV$N#APCV{RcKC zZ`hdfvhemKRjo53E0@jQwLbp1L%n@oV8R5^D;rCBi}Z}s9xTti93U^)s2vz6kSsF`rwa)xrQnDcLecY8vADj{t)?GN(b-H!8pZdP13HlW$S0C$l z&#&5*&zN~x@!R=jR~H$Yh%B2R5OP{LI*!kFZgJry6$!}*=NKMtXWQ>qda+KbuJseL zTNTL7%)(aoYjr$589*VF2!KtX!nWCiZ+mU}y_>uXe@8zvO zntyzj-R5fdw0!5kO#)}{{5G5DxuoJT^PkS14_v+~N*ydpQ!834dMlbwC|%myV)S`> z2dB%0`hVM>=x1383afB!eayhXpjzS@QIe8al4_M)l$uzQ%3x$*WT0zcscT>sVrXGy zY-(j_rfpzgWneJvvxOmwhTQy=%(O}dBLhQ2T>~>+L-PmdKI;Vst0Ch5E1ONa4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/system-lock-screen.png b/Media/Themes/Umami/Icon/actions/system-lock-screen.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ff34715ad12a2f26f514b67a62c1a44af5846c GIT binary patch literal 1169 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CYO>_%)r2V9fTR3G-g*YFfdQ{ba4#vIDU1icScO8M8kgT@8^`y zFJlYlozb+lD=8@`V9ktef+8*j1}TZLoK0pC;a(gecQPDfIP^r6oy4^47TjWdsTOi6 z?6TOAS!WJ8B(rN~daAEaOMADs`26E?!^-_???S3(l)gR6l$6?CLMC8Ft=L{q<|t#;^@x0vjW;r+>c| z<&x5Rj>*7k*3-M+s~9EZ<@cL1EQsKl*4yDx8ar{N)O1tbV=o9=^J&Es>m&b?e-{<@26A(AF=0bE98k z?RKUcuWoPV$+{VMdf)QhGk;Zg3ETG<TU zG9EAVRI!mct~md^GRMY<9v7Ry(tm0WOO&GDN6vNCj&5CYIrCSQ{erDu>*l=jJYHC_ z?zOmFwspI+>hrCQ9?enKp{{OHIyJw(9hZrF?pW<^eY5k8R_yWabjuG>eCBBmT^+g! zJ`JXJZof0$E-n=e)myZP>F6UKdtUzUhuIpw_kUCR6tr}Iz{=K_6W^<68@RNg$%6}c|OQV@h_;~gem&JeoXZ3I4(jp56&BncaX`HLqC7)sqiBQpEpK_Yf z>v-q&A0g3KjzzK@X?$|#%+~u{txKCdxji`2xUN(NOun({pqtcUp0MmSh7pS|o?3AA z&$CuG35WJXi*HxWFcUXLbnb6=U+K+w*ErZ$5Z`f z&-?2c(;mnxDy}Q`U|?WSEpd$~Nl7e8wMs5ZO)N=eFfuSQ&^55sH82Y?w6HQZwK6o* zHZZUzopr0NfY#u>b%7 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/system-log-out.png b/Media/Themes/Umami/Icon/actions/system-log-out.png new file mode 100644 index 0000000000000000000000000000000000000000..b757c74afcb372ea4afba5223af7936d5034dc88 GIT binary patch literal 1264 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 MboFyt=akR{02)4tCIA2c literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/system-shutdown.png b/Media/Themes/Umami/Icon/actions/system-shutdown.png new file mode 100644 index 0000000000000000000000000000000000000000..9833d9573a989b1ed072a8fe8e9498d812feeccc GIT binary patch literal 883 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UO#^&FTp36N9bK&u9S{bbgfL`fW##1LR8&;d)zvjLG_Po6w;=FFLMXD(g3bmhvG8#iv;yLa#Y{re9dJb3u<;iE^79zTBk zt5>gHzkdDZ&6~Gx-@beI?*04sA3l8e`0?YXPoF-2 z{`}?3m#<&He*5(vNFV z^#A|+3!Zz${_I>Nvh~-Qp6;mMS{2iai;8Bl{OfEud2;^4qs%EY=A1iqY|s01`6mmE zs<{>}m1Qxk-ml8cdU;1yrOmu(5d~(C$5J1QFMi`*)3DNHojmJHi-~i#HWpj5pDJO` zOlVOSj+TF?C@pbzlns280r;Jzczw2y|U_2BU z{z0X`m#;j;de^U+?F>7U`}1p_7F^#Y^Qr0X>+9>cyuEZ`!7E+abGkDx@$Fxr-+Sxi zF{9I5{c;`~UZ|O>8(+23IvMorSx#faUS+f5(&Oh32e_r3JQMwSU-=K#6H|27xPHFc z|95i!-36HuziyX{F)%QwmbgZgq$HN4S|t~yCYGc!7#SED=o(n+8kmI`T38vIS{a&Y z8yHv_7)<+YVTht3H$Npat&+jWz|c_Fz)aWBJjBq*%E;Wx&bP0 Hl+XkK3f^zp literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/tab-new.png b/Media/Themes/Umami/Icon/actions/tab-new.png new file mode 100644 index 0000000000000000000000000000000000000000..41f9ae0334dc2f8d25fe8397924ed57e897e04f4 GIT binary patch literal 791 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq_ZV)5S5wdhhCR-Ga(UcL)=bOh+Q#vHZku;Oa664|mjKx1p;f|cKt zPoA!QzwdRxlxur#Bt5$Jzv8^*_wsZ9?{G)oa#$oeeaEAJVIii??ygIofAVGB@oAs1 zLcj3Nyp{;Z51jFK;=9vUG5k8;^zhCF_6Il8^z1Ke|B#Ya_UpkspMBxgcW(u^sy?jy zGLehdAkz5Y-aB_!e*4y^obEUOZh=uU&!xS~RKN1*U+li1&e?o^;qi#Z6-MX2edrU2 zf3u5I=G}{*#o`e$F)4L*b$dn6U3IusR+lTtbiLfxX zIx()zb}}`{zP*BNuF9m~i2DjZ+!DG@uUt~Ce`#}|jsr(yP*yPaw`S)lTHGAVJS*e{ zH?<}ie%_Xz|L^JgIS~i$?~2zy8}w78u0TR}|KdG*YVmuktM>k1mMN4FI`Q?v8*)aw zjeq=`ExxAG=08hEv_*q>@bwUfJNvIPEdK5;Cy~6Vm#HO!mFIa|jM2;*i-NaqVayWA zoBoEgcP!#~e&_v>s#W6V#|mCPN}UqaK#A1T)z4*}Q$iB}$i74u literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/tab_new.png b/Media/Themes/Umami/Icon/actions/tab_new.png new file mode 100644 index 0000000000000000000000000000000000000000..41f9ae0334dc2f8d25fe8397924ed57e897e04f4 GIT binary patch literal 791 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq_ZV)5S5wdhhCR-Ga(UcL)=bOh+Q#vHZku;Oa664|mjKx1p;f|cKt zPoA!QzwdRxlxur#Bt5$Jzv8^*_wsZ9?{G)oa#$oeeaEAJVIii??ygIofAVGB@oAs1 zLcj3Nyp{;Z51jFK;=9vUG5k8;^zhCF_6Il8^z1Ke|B#Ya_UpkspMBxgcW(u^sy?jy zGLehdAkz5Y-aB_!e*4y^obEUOZh=uU&!xS~RKN1*U+li1&e?o^;qi#Z6-MX2edrU2 zf3u5I=G}{*#o`e$F)4L*b$dn6U3IusR+lTtbiLfxX zIx()zb}}`{zP*BNuF9m~i2DjZ+!DG@uUt~Ce`#}|jsr(yP*yPaw`S)lTHGAVJS*e{ zH?<}ie%_Xz|L^JgIS~i$?~2zy8}w78u0TR}|KdG*YVmuktM>k1mMN4FI`Q?v8*)aw zjeq=`ExxAG=08hEv_*q>@bwUfJNvIPEdK5;Cy~6Vm#HO!mFIa|jM2;*i-NaqVayWA zoBoEgcP!#~e&_v>s#W6V#|mCPN}UqaK#A1T)z4*}Q$iB}$i74u literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/text_bold.png b/Media/Themes/Umami/Icon/actions/text_bold.png new file mode 100644 index 0000000000000000000000000000000000000000..87bfdb2c7ca50dcd52f718f6bc29454679204007 GIT binary patch literal 1109 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ov$PZ!4!kK=Er_-Dkp${gQs{Qm7b@3PBp z_NPtWG2z-W(PZDVGXXdR{xU}j*_m^ui zf0%{3rnaQ{-q>|>Pwo1W$b;iF#d<(;Xi55jO+IqA29xV zU1_(fyV|}^Z5C~(j(2Y@y)s+9dGyZgjlYr0SGrxLbxxJ7=>p$<)hsOxL3TOfLO*^z zn^gAs`czGZ`TtkT_ME#H^xEy-pI3*4FE*Xskagul_&$~2kM6465_PCQ(q9~2ziG?8 zeMkPh;avY$>Gp|hUpF$J^jM&Nr?cm!!s_WCZoikDWPIwvTB|p^T>MQ$Hk8)pd=Ji8 z+~Aacukvd^!O;~9&#_E1UdH=ixBcd2XKfmhqO`D6x@>0kHXIcIZsw&msADxn_cjTtHoCtj+v_4vf}aX*}EV>f3>xsj+vDcj?^i4M7O zObjc|dh>UQ6-x7*nf!v!T~zbP$%&n(KdRq$oa`rSzpFpO%z0mkd)e6s6CNEqbSH(8 zLF}0tw@a7wvY!pc{tgX`j726b@?8FpbHmYPix+QRWqTpL?#n^xi*t@Hh%VL9)3t7O zGTc%7U|zwIm%euLPht+0nol^tY;D0ck2B}b=WTp5tv&2bfA8Ddx8Je{Zp;f6{IXi2 z{`J%a&w>R$XkPduGArKk_+gHJA3j_C+mX)P#TNSYch}#Ih78wlGljIC;o*PFue<*G zg%qK@#hjb(Fo+AyoA4l}iMzpmop;Bz*LDuveDh;l}BgU+(s@s@-1t zyG8P4^mPUm29329DO{Wl&&BKi?E8My+`iN+&3$#O;uOB^zfQ{P-Fmj}?Z%szih?`b zC+BL-e_6j|KjX~Zg;CwhS12$rFsPQeMwFx^mZVxG7o{eaq%s&87#ZjqSn3*>g&0~` z8Jk)enrRytSQ!{h`)px|q9HdwB{Qv(!N|bSP}jgr*U&t~(8$Wj+{(}hqTzXD%n}9$ y21$?&!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NHH)lFnGH9xvX| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q|7o-U3d9>?EKx$PYiC~|CntzL1Ogt7k0 z=F}P6PncZ3D5E`rtC`99RL==^&a={X9D-liS!{o%Ojw{QWZ5~zscXp$zQAcqTM}nX zdA4-ZL8)|^(r0rvm-A;WIayJ?g55qM|9;&5t=Df=Ge-Zqt~A?nPE3ZGU|;_7DK8ls zo}WC@{poX?z3m~l$?{re?woUeEcwzDD894UdRbaZjP84msCSReCfTf9aZW+t-lTH1 zW2etYcSoHzNNHXBBG&xDiKoYMrTSi z%)V6zRD&;k-J-GafQ)iM#hhZRF!Q%*8MQx8s_wpPWpGPoelY7XjRP7IixpbV>`Ymf znw=XM6qw6#Ji`52XU1NQtPf=wT*v+{4DyPRP?^}Q@@aw#UlcF@+!KeF2E5(7d~t;E zgM@Rj@_h@9buI6txA)Jxllh|P)*HUR@4GZ(gKQUzw1__|b5+aIj7?<|R6RRM<$sRx zk9__?^Oz0u9vNZwJ1vs#$M!8)lg8r`s{-{@&cLvZA>nkA_y3u7jP)(5 zbDo%2YcVh|sFt`!l%ync8R!~V>Kd4Z7+P2vn_3x~X&V?=85m6a zY+;C^AvZrIGp&-r$iUE0*T78I&^*M@$jZpv%Fqa+;dx}t5(WkaNstY}`DrEPiAAXl l<>lpinR(g8$%zH2dih1^v)|cBF)%PNc)I$ztaD0e0sy41i=hAj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/text_strike.png b/Media/Themes/Umami/Icon/actions/text_strike.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0c115e905091c0c354644c02469c261c1acf7e GIT binary patch literal 948 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{yo-U3d9>?EKj`s)-lsUft`Mu4%@8SlwH z|K{5hbI+bUyJf-JYy*}Dj_vstDFy`wvwLo)&P)5gi9zJZ?(FV_Z@fNAKWufPQ+KL~ zbe;IC>?rc&c?8FoDXo4QpN<{AzE5LST71{nCGCbiPj(lo=o_BAucF=cH=tCN!Qm=H z=;ehgtU^ND7yZqe+`DpB-@NO0KTq;zFlZ?G8~1v?wSr63m##-bW%JjZH(mX_j--9-DY;iCI6pqNZbR48p8niEr+2T9M2O7!`scuA@7|NIXSif;+d6O6+^5G9 zT%30u**t5V?RgQcXDO#wlr3a==^A+X$cqK+4nYTO*w_6HzauHRT5jj|{B3N@k~XBz zNLau!#ppo{oFhu!N|bKK-a)h*T5{q(89{t)XLCI+rYrez+l>E3quqQ zx%nxXX_X8{28M>Z24=d3<{^egRz~JlhDHz#&m&`&FfcGkf@}!RPb(=;EJ|f4FE7{2 g%*!rLPAo{(%P&fw{mw>;fq{X+)78&qol`;+0AZz=(EtDd literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/text_under.png b/Media/Themes/Umami/Icon/actions/text_under.png new file mode 100644 index 0000000000000000000000000000000000000000..fafd4fbe482ebdcf9817d499857b7ec8e8f72acd GIT binary patch literal 1038 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q|ro-U3d9>?!a_Vow}6gmF?`@Zib^YXpi zy@Q!#1qIh^e_`FdC}vAupo`(8B#$i|i#IHrHql9d?VyJqSNDtThs$DH6)uXWX)1?Y zlSnmtd?VuU8H>;F+_`n7WM^ODcy-|6yyADq-~W66km>)fiT5M7{Clv~cuuGA{bJXp zXZvld@7A*yt8`04k$D=wGbE`KSO@@h%i-7Y02 zrwe824qToI)1C^Sb&K7}FF%?Xv!&OC zi9fwLU8huH$M+|`5(nPCySH$|vQ&lB(`Ihp_Au*f6N6SqwR>n}*!u*5h5CZ0^CH(3 zSY++3lRxz7kSbfF&+QkHjA^yIgM(8-Jr_3Lskf1Md?)Met{CfsJFmWymFc@#((G|; z^_gE~&-XA$I_2Kkvnr(Wvtdv9VMZp?hcl;4{m{d9{6x#q2PaAcd@mfcWcCSfS5#fC zt*>`M?i+uhL&>+891bRj^GDkjh%7RGApi8HWu;_Ox7FpViD!Hpd#+5GE|Oq#%J9P_ z@#mb^CYhX#@IGKKG(Du%_quAzlC*Dj%d~<_rdm&z&UfF}6sZ&J@$t@`@`uN5rt`D} z%Jr)!oIkhyxY9#4hIt|BXMdc0Ht+LQOUrJn)!Xwn)bputIFs1CDj-P6cLmfh1>6MB}=iB!z{2s|K9JDNilc7amT71k(y>q%- z`q}U8WIV&5qG?b*x6~h5#D)YRv@K69P^@-W;# zxn=XIebL8jHftqJ3O^uJRen7-z)5(T*R2oSn?){)$;#VGasDi2uu{-w`0*h=GKl}$ zm2LG&F(PMv8+iTQJDp$W_s(fon7cPN{oTFIkx9U*iMxS&rqaAK%a7mXmpi*7MyP@5 zpSStDbJ2`TkNiKaJ}brH=gF&?>lh|5NHEx$F6;U~ua-IXj+eovXeUqxQ!R0gC`m~y zNwrEYN=+5@$GBB9-*}{;4fdQc*H$Npat&+jW zz|c_Fz)aWBJjBq*%E;Wx&h*rdD+Fui3O>8 Y`9| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ov)PZ!4!kKamj9aZ2^vPAR5CPadBCwQjkVoZOqL2xb}SA6hY9Sx-;dYsqBaJU89< zf9%_T_qJW@b9usatnP2+!zVZR2t|8`v-GpN!%=V zUjAFjSmtkN@8Yn=TY#t{Ca=?U&ZBLZEiDX*foZ+W!nmIdaG1!dH!KdlF4`7a8s41^K^GhyIy?1 zy!T3pMSa_RjK=P_QtI1TaO&QZrGQ! zgF$Kzv$*A=3xXm_F}B_ zuWehyw~HsvYDVBpj|jC#D}Jrt-SbVq(VW{!T_s^U0|SFRdP{kVo554 zk%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn3=MS+%ybRSLkx|q zjLfYJjUXDHN5(8+U|^60*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGn LtDnm{r-UW|| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_-JULvAs)w%PVvo=b`?4Pf3tj?y0mp+ zN9Xoqo^!00HWq12=h*7#)xpphp!^`HWz{OJAV1rt9Stp9GJ*;g0h*hNGDBNLSXQ-U z+&w1I#h<6`WsyUeN&9Tx z)p0IsXB{khWn^*Z!rr(?U-?CR*NV*kZtUETl3{#TRqe%|3p+s0yYU7>h)pHrf!@cHCy;e5PA6{W{*PA*ZMNl#`^rb}v#^(*wMQnp-_|g5fl`&q&$H#T?O5-%HW(h* zT^+`m#rh&vq~K?JL+>`zjGz3=`gP;a1l~{i^hdYl@WZoTo82AxeZDQvUlf1 zMV`wMp0d+%ru27Xm5Z^j?zlIK3k4Pw-rOm(tWNst)6M(eZm#!dd$IGp&7Pg}-ugL6 z1$N!q(KpBAcwWk{c%k2Z4Qj%CoUFN_7& zi`N+G`ik7uNUNW!<28+C23PV~hD*;_x|CNPo5P^6+^@{P+D0W{`Kw!}tUgcwyw#Y& ziZP_sLi}3M&533PR|~anK5i7cxp=>1U&y8SntcoIo%>LJ|DQlS^96>8LsAp!W6Jy< zJ}Z@E=yXx3eaC!XeV^QBiD-?R+1_u~mfN|;ELp1PH<#g($`hY5iRo5Ox~F(i8!5MOzPXaZLjx*DDF#7?pGAG8=8pzu$Qc7-Z!(Wfo=3(kVPIfj@O1TaS?83{1ORMk?g;<@ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/up.png b/Media/Themes/Umami/Icon/actions/up.png new file mode 100644 index 0000000000000000000000000000000000000000..dc7c2166d39657f634cd86a3a84adf5beae9b633 GIT binary patch literal 1063 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovpPZ!4!kK=ErcxTKB6**r2+)iz#+D47s zoTVG1qO&=>GS;NHtx;O3k*k}r#4arA)>0Ei*KoZOb-MyZ4X(1shxD2rIqka8los%M znO)b7S(&plJgkzVZyOppsqSC#PjxyFMOx7^nCAU;X!a#qS&czuj-PbJBxq zzFXxE>!PE38SSQOtirJ{IvPGY8vJ#@_TpHetm7d z?QQ1m4SAdG|K8T$9&o_*?1EGv}ZGvthS(di!y= zN1uYE(q7KFEI7w@*Xw=D!`Y&fx75g_%UrAQ^OIdHH2uZtw{IL4pReLCI4jEd>-Wa4 z-zmSZ9p7ygzShv*x3<;Pu8>`+#`>FP?ptk@diVI{AK#sr`}>10vs&Jk{O7xVZ!61x z_0it1rct!JeBLx4w)uuD)+X=y^!0|p>+87%+w=CUw%&b7E^8IrPDk?{Puu1_mpk?T zWZnPQ&s~BJTOG6zSRV4o=!Qf#t53qGPa1n?%a=XZpR<4E-)-E9dj$6RygvIoV=r^r z@n5F1?P|)Ne~x@^|GEaRiV#48%U;xqg7&$4O1*;UEG+r_rxS~idT&j;s&D*tp& zy#AwFhKLC^HsBjb6ew`$gOACz!l2|XI6xGFpQ;nj?j(>CX8|@QYN%wLAJdXW3r=5nzE?V4CNA)L&hg>%vc@GuvxQ^ zeM;NCimaL%d_CgqTw>^b{ot}A(xsf5 z9&?&r>^b#E`kQ!|1h3-4y2DQx7#LJbTq8sH%t8z; ztc*>q49&C+46F1kvz3GG++_ z1A`>UhT#0PlJdl&REF~Ma=pyF?Be9af>gcyqV(DCY@`?%7#KWV{an^LB{Ts5v6$4& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/view-fullscreen.png b/Media/Themes/Umami/Icon/actions/view-fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..db5035a681d82248ef14d1106372d4e1fddaf2d0 GIT binary patch literal 988 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXb3I)gLp+XOo#N{e5-4)K{`r|HK2cW8 ziVxk{yf~azE9hM6Rj6%r&0Qp>%d=^Nn5Tell*D5mU2Y++D3;cQZo9LKGJ-FLO>z)? z+imn&Sv6he`PPc>dn=94Jz?4Q;y~^5d*$zc|37c}y;5@hTg<4OJoMhc+wxP>7JYIQ`Lf3)?Z4Ost-4E+W1V1?be)1mxNbwktzK0PCM`AY z)Z$9cgNv@pWUX-%2-$G?jKTjPrlTAzqAON&-CV=BGgU99m1gfmyw%vQfsCTi=WTALq+CCHosqU_q|DJ$xQ2lkR)cFK3~NpdJ=)##gFYf zd#gA!d|#!&jrPzf@7Ui<%%7G1%RQE$RgC}r1LV~1t?Ng=o-H8U@@h>Od) zC^fMpHASI3vm`?yBqLS9-P1Qr1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0e Pfq}u()z4*}Q$iB}3HOk8 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/view-refresh.png b/Media/Themes/Umami/Icon/actions/view-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..1af6789278d35af0a65ff002585889d85ea410b1 GIT binary patch literal 1495 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq z7(Bq(?PRtc0|NtFlDE4H!+#K5uy^@n1_qWbo-U3d9><@CW(S0%N?h|OG+MhSG2}@} zaOIzpnx4JX`GLpo9U!8yMjB$GU`QNtZtM8pI7Ss80KSofnYI?o!bM1?3 zJ`2AJzhgc@D7EU>=`Hp@-7|OpOuBYvapdatF1C6TGOd0HedU}tgY)r)m)-yB+T>T3 z9kyuhpHN#Rmle^WvYgdu?aRNDuU?i+ojW1+GPh-E?Sj2Gc$c5w=IoW$T3nOijQm9|HNEoRz2HX z@a~hsl&yDKHr*G{b)FD?o4L?F&fvG#Rbh{R#}5i${T}CgX66%jBY!Iu_tbydoHyNA z({|cw=CkoP&JW?OnYA@>Tkyk^KZWP7p1t;{M%}VZhAZOv4t37-e}BUHEUwd1R?F6|9c*H zM&#>w|NXWkX7aL23_CTZtk}VGw(Yin#M-^PJr~71-tjN!Y(zm$SpAoeZTgQcOFd>a zidAjDX7^g7%zH^uc0kX$ppg6A$GfZ*7+G&s9cQ#WBNMgv)Ix^7WcjrE7tF4&x!Et@ z4xd=bH!k4XP1EB0Q!~wa4vMP0-<8SYwPu^e-R4N6oqrmCertAKE%&_Z z2BVC-^tVHg)UQSq?9|yIE#}mBKIh(V(S9qN9`B;=MUk786YjceY|Q#xYJ&-M87tVvGy z&+hB{X7nb8;qS8iD=f>;l^)bz>wKY=$(mn$#>R8$mG3j=&9W9b)2(5rWmU8?>2`JH z;v;HIi?(j{W8Gn5e7T>AckbdBwtEW}=BAVx*#(+L{S@lu-2PKLPi6CL9U0X?E`x=$ z7TnOuPT10yvmrM+>70n@Nv`Lj5)!+)r><=-SewrjweCKftyJvOsfik{)jxVNXHBaO zPrUOp@nA~A6tV4L?D=&yZ8uo{1Qdu~$bH}PCS0d5?_$!mu)Ag~bwXd~|I0{--^BZD zSN36tp8g2NkMsBZ`WN|M(?y{DYW%Cl$xCGgWR@F$YMFWHr`sJ?^#k9E_T1Z{7b3N% zV&?AazY2aXWLSAh!Mf<*y^VkF=d$kDy2SkGi#12ur&w@sW`-JPbUZtoU#soTmn3*v zuv?Z>=V6D$=Ihxftv`G>?%-XL)xq#x_hF!2zWmxnE?#e%Pf1CwHcf6`t}$!oqj%og z-#^?IZY-R~VZ?DnO|D2~L&4>HTVgBXJ1Y+9ZIXNF%hnSis&pas<*Bu+_coR5$3B*H z)8YIm^r({M=ZQ6HokHt=*BZvYX*?}(B>c{sMRMPC?!NuMcEj-_uV>3=FCzt`Q|Ei6yC4$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}m zqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0efk6^vLvVgtNqJ&XDnogB ixn5>oc5!lIL8@MUQTpt6Hc|`>3=E#GelF{r5}E*OW}Vgm literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/window-new.png b/Media/Themes/Umami/Icon/actions/window-new.png new file mode 100644 index 0000000000000000000000000000000000000000..0890e6034ea0874de8327e4c916d08cc7ccd39dd GIT binary patch literal 875 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXE}kxqAs)w{PCoA)QYdoN{(JA@a~931 zc}l@uJS`pD1Vvf&nm87@&R$f%y!3XMqV6sC?hB#Z%!(~_K`&GicNzrxu%$n{d->7c z_j@kR{BZEXs@*^TRlKi0xA*xS?*A5R;u+rZ#Wg(=xxtaaKPx*dSEv0w^WVnlX&WD& zHn3p6sPTi(#4dBYLEhD0HR1_Oq&y|Mxk6lVBJWD(~zvpOT& z&rhPGPvuQ+jmZu0(ag{|ZK$f!ra1e^3?HFQO7FPY_r6jqxMMq6+xgvuz_%$I-mJc& zo8v$E=_!W|S43F39c1k^-{{CUswDLr8}QiN_L5{&6FH%y&Nxp(m&aIDQp)1wy<5w; zXC?~GTW6_SWaAs0wYc?@kn0PJ@-?4qL_4;fY=3@`=MtZtz(afWa@Kjjq;45*J!I_l z+TnY_sbI$$%>GY3d3cHw?@raMOrEycS2a*;D&N%moHOr5%$R&(d)xO5?-?9d->lm4 zrR<~T-=ocT_y6aAWYKd5o8k&a~8d({cTNxTbG(3-tS;D};z~JfX=d#Wzp$PyI CZ(8&K literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/window_fullscreen.png b/Media/Themes/Umami/Icon/actions/window_fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..db5035a681d82248ef14d1106372d4e1fddaf2d0 GIT binary patch literal 988 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXb3I)gLp+XOo#N{e5-4)K{`r|HK2cW8 ziVxk{yf~azE9hM6Rj6%r&0Qp>%d=^Nn5Tell*D5mU2Y++D3;cQZo9LKGJ-FLO>z)? z+imn&Sv6he`PPc>dn=94Jz?4Q;y~^5d*$zc|37c}y;5@hTg<4OJoMhc+wxP>7JYIQ`Lf3)?Z4Ost-4E+W1V1?be)1mxNbwktzK0PCM`AY z)Z$9cgNv@pWUX-%2-$G?jKTjPrlTAzqAON&-CV=BGgU99m1gfmyw%vQfsCTi=WTALq+CCHosqU_q|DJ$xQ2lkR)cFK3~NpdJ=)##gFYf zd#gA!d|#!&jrPzf@7Ui<%%7G1%RQE$RgC}r1LV~1t?Ng=o-H8U@@h>Od) zC^fMpHASI3vm`?yBqLS9-P1Qr1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`f@pXi8MB0e Pfq}u()z4*}Q$iB}3HOk8 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/window_new.png b/Media/Themes/Umami/Icon/actions/window_new.png new file mode 100644 index 0000000000000000000000000000000000000000..0890e6034ea0874de8327e4c916d08cc7ccd39dd GIT binary patch literal 875 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXE}kxqAs)w{PCoA)QYdoN{(JA@a~931 zc}l@uJS`pD1Vvf&nm87@&R$f%y!3XMqV6sC?hB#Z%!(~_K`&GicNzrxu%$n{d->7c z_j@kR{BZEXs@*^TRlKi0xA*xS?*A5R;u+rZ#Wg(=xxtaaKPx*dSEv0w^WVnlX&WD& zHn3p6sPTi(#4dBYLEhD0HR1_Oq&y|Mxk6lVBJWD(~zvpOT& z&rhPGPvuQ+jmZu0(ag{|ZK$f!ra1e^3?HFQO7FPY_r6jqxMMq6+xgvuz_%$I-mJc& zo8v$E=_!W|S43F39c1k^-{{CUswDLr8}QiN_L5{&6FH%y&Nxp(m&aIDQp)1wy<5w; zXC?~GTW6_SWaAs0wYc?@kn0PJ@-?4qL_4;fY=3@`=MtZtz(afWa@Kjjq;45*J!I_l z+TnY_sbI$$%>GY3d3cHw?@raMOrEycS2a*;D&N%moHOr5%$R&(d)xO5?-?9d->lm4 zrR<~T-=ocT_y6aAWYKd5o8k&a~8d({cTNxTbG(3-tS;D};z~JfX=d#Wzp$PyI CZ(8&K literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/actions/xfce-system-lock.png b/Media/Themes/Umami/Icon/actions/xfce-system-lock.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ff34715ad12a2f26f514b67a62c1a44af5846c GIT binary patch literal 1169 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CYO>_%)r2V9fTR3G-g*YFfdQ{ba4#vIDU1icScO8M8kgT@8^`y zFJlYlozb+lD=8@`V9ktef+8*j1}TZLoK0pC;a(gecQPDfIP^r6oy4^47TjWdsTOi6 z?6TOAS!WJ8B(rN~daAEaOMADs`26E?!^-_???S3(l)gR6l$6?CLMC8Ft=L{q<|t#;^@x0vjW;r+>c| z<&x5Rj>*7k*3-M+s~9EZ<@cL1EQsKl*4yDx8ar{N)O1tbV=o9=^J&Es>m&b?e-{<@26A(AF=0bE98k z?RKUcuWoPV$+{VMdf)QhGk;Zg3ETG<TU zG9EAVRI!mct~md^GRMY<9v7Ry(tm0WOO&GDN6vNCj&5CYIrCSQ{erDu>*l=jJYHC_ z?zOmFwspI+>hrCQ9?enKp{{OHIyJw(9hZrF?pW<^eY5k8R_yWabjuG>eCBBmT^+g! zJ`JXJZof0$E-n=e)myZP>F6UKdtUzUhuIpw_kUCR6tr}Iz{=K_6W^<68@RNg$%6}c|OQV@h_;~gem&JeoXZ3I4(jp56&BncaX`HLqC7)sqiBQpEpK_Yf z>v-q&A0g3KjzzK@X?$|#%+~u{txKCdxji`2xUN(NOun({pqtcUp0MmSh7pS|o?3AA z&$CuG35WJXi*HxWFcUXLbnb6=U+K+w*ErZ$5Z`f z&-?2c(;mnxDy}Q`U|?WSEpd$~Nl7e8wMs5ZO)N=eFfuSQ&^55sH82Y?w6HQZwK6o* zHZZUzopr0NfY#u>b%7 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/access.png b/Media/Themes/Umami/Icon/apps/access.png new file mode 100644 index 0000000000000000000000000000000000000000..29cd13746bbf9c46313920008e7cc6c72a060ca4 GIT binary patch literal 1171 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_Q$1ZALp+Xeof@4H6DrcSzt-0H@|{kz zZE;>l7KL?-?Aepi)FslD+Z?fiWxj}hg{O8{>o1{I2~(T+!=mMNoRnLxY`5bO;tl%Z zXmWItm`{@TR+Yk{OsTnN<`jSX_V5gkXWAO)CERA|^Y`-q-+z7owSW9Ej|IHr%idUS zQkOp+zG>%|wyO*8P4nAllQ=2m>Yyf@miy0G!Qot>+md=N+Snn2U^3s(!R-|zckaem+B|0)Ful8$E6 z?-e}0m3GhO5AWogm5XjHoZ@ook^qO|saaJAs{4!Op37`3=Hco4aO7}#QR2S3Vplfr z!<7bZi>GQ$;`sKiuHox-(}Jp!Nsr^_GS{u#!WZkM9Q5L2RZVR_+2|xK{nE1pXO32Ny(X=9dk_Kb{lIV+*Jx_Fr zDjK+{AI@5HRV3+rwmk2o)9qj6e$P7~#kAU!l`Wh1TGpD2p`5F{mx$ha@nogQ%L4+| z{TI8M^-F{#To%>UVmQ5+fhb*)x+@V9@(v$eb3rV@=NdgzkhBY(2->K;(uq1 zqSoo;wQ5}~i4vD1(*Ms^n7m2n*vZV^i+gr_mSbykGrT3>+V}fiM)GA{-8H!pyeR82QenL>tbh8rsO%wkuG?cr$X`b=^)ETq>cKZli zx!}sNM8rdNqLz9on}Ow{A72@A%w{<^tIZ= z4TV)Tvx@hhPwsW%=;Y-II`PP{OI|tbUbDys1#J$Nlr=iDCGSnoU(3Ek$R%*fkAD9@ zC#ok*{j_A7=j9wd|Cl**va8?RD{DKxiNn$Gt%Q=hgm{OTu=vsHIqdIk{HA zb|Lr7xpN!zW=O@K4BNgr`}exFw#WZ}=U<*3KmYxky59-`;gfbv@eDp5{QJH^Z?6A& zSKsTKyLKG(n>T;{Tv>@%)*s{y*j>D*UUt1EG9j|i{mcFYH|=Nj%-si^GS{osubTKE zEBm_MKgKzSZ^qp8IN!;@z@S><8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9? zXr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_LnA9Ab1Oq*hz3W!Z~+De1_n=8 KKbLh*2~7a)iv6|# literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/accessibility-directory.png b/Media/Themes/Umami/Icon/apps/accessibility-directory.png new file mode 100644 index 0000000000000000000000000000000000000000..29cd13746bbf9c46313920008e7cc6c72a060ca4 GIT binary patch literal 1171 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_Q$1ZALp+Xeof@4H6DrcSzt-0H@|{kz zZE;>l7KL?-?Aepi)FslD+Z?fiWxj}hg{O8{>o1{I2~(T+!=mMNoRnLxY`5bO;tl%Z zXmWItm`{@TR+Yk{OsTnN<`jSX_V5gkXWAO)CERA|^Y`-q-+z7owSW9Ej|IHr%idUS zQkOp+zG>%|wyO*8P4nAllQ=2m>Yyf@miy0G!Qot>+md=N+Snn2U^3s(!R-|zckaem+B|0)Ful8$E6 z?-e}0m3GhO5AWogm5XjHoZ@ook^qO|saaJAs{4!Op37`3=Hco4aO7}#QR2S3Vplfr z!<7bZi>GQ$;`sKiuHox-(}Jp!Nsr^_GS{u#!WZkM9Q5L2RZVR_+2|xK{nE1pXO32Ny(X=9dk_Kb{lIV+*Jx_Fr zDjK+{AI@5HRV3+rwmk2o)9qj6e$P7~#kAU!l`Wh1TGpD2p`5F{mx$ha@nogQ%L4+| z{TI8M^-F{#To%>UVmQ5+fhb*)x+@V9@(v$eb3rV@=NdgzkhBY(2->K;(uq1 zqSoo;wQ5}~i4vD1(*Ms^n7m2n*vZV^i+gr_mSbykGrT3>+V}fiM)GA{-8H!pyeR82QenL>tbh8rsO%wkuG?cr$X`b=^)ETq>cKZli zx!}sNM8rdNqLz9on}Ow{A72@A%w{<^tIZ= z4TV)Tvx@hhPwsW%=;Y-II`PP{OI|tbUbDys1#J$Nlr=iDCGSnoU(3Ek$R%*fkAD9@ zC#ok*{j_A7=j9wd|Cl**va8?RD{DKxiNn$Gt%Q=hgm{OTu=vsHIqdIk{HA zb|Lr7xpN!zW=O@K4BNgr`}exFw#WZ}=U<*3KmYxky59-`;gfbv@eDp5{QJH^Z?6A& zSKsTKyLKG(n>T;{Tv>@%)*s{y*j>D*UUt1EG9j|i{mcFYH|=Nj%-si^GS{osubTKE zEBm_MKgKzSZ^qp8IN!;@z@S><8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9? zXr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_LnA9Ab1Oq*hz3W!Z~+De1_n=8 KKbLh*2~7a)iv6|# literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/accessories-calculator.png b/Media/Themes/Umami/Icon/apps/accessories-calculator.png new file mode 100644 index 0000000000000000000000000000000000000000..92afcdbb4bc70475d13c9092981c6a8bfc307157 GIT binary patch literal 977 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9Un*)48Tp93!;LyOJkN|fNS2qtAJrgs1Q*#4Ta|1IA3tM|jYh5dQ zM`sUDXHQRePYeHmfPjF&fPkQYz@UJj;DDfzz`(%3prF9ukf5NTpkN3H2@VMj4h;`UZYpAKI zsjaQ8ZOp2xtE;cCZvcTt5NK^`YHDf*ftKd>{FauM*4Eb6&cfEt*7o-Hj*gDb&d#o` zuHN3>{{9KmW_3)T-8o~%j2UyfX3d&4d-m*kATWQ$>SY@?ZrZVX^Z)<_=fx3J90tE!HOc<;!-z`&T~?e5Z$x_4d%0|TSJr;B5VMsRY10&~IZ zh0J;#Epf52wni&fUvBoia_xDOV@jBhQ(mp^CKn3{iHJ___C;PH4UU>5z$~r=?-2y5`jz z8oLc{%PA^Op0Z-zj1|%oQ`St4pYT3_X?nr*DSQDFKTn+g`Rk^FZTxN?C)Cte9$mg_ zd3tulGjS0MC6y(cA3vQ`%wt@{qubThEo1ah$nTZZKd-iXzuM%)Tti*Iad58PVR86H z#n}}VvXei(Dw@HvIBsr8SzC%%pKDFuM%O@94|ZjbCeQWf&Rn<K=8c;gdJi!&uskc`+r%7o zl7WFiwZt`|BqgyV)hf9tHL)a>!N|bKK-a)h*T5{q(89{t)XLCI+rYrez+l>E3quqQ vx%nxXX_X8{28M>Z24=d3<{^egRz~JlhQ<&Lj(Xt&pq%9C>gTe~DWM4f`D9!% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/accessories-character-map.png b/Media/Themes/Umami/Icon/apps/accessories-character-map.png new file mode 100644 index 0000000000000000000000000000000000000000..f99d513846ff8b4a2329cf58e937c523ce1a2832 GIT binary patch literal 1001 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXuRUEHLp+XOoqRt3N|?ZLd*k!j*0WPK zbFxG*25Mh4Uc_>7&cpnUu9jQQ{UNUwP6^RfUrGGZnckHvSDG>`-~Dn&O=-oO=JozP{nba43d3`n4J4|J%)k4t4g1T!V;Adz zD9iGsnme1#7Tx<{t(#{0t>cV!a=YD=8^@3D&DvV_j<><0&#mVE@{K{uW2DqFwgwnR zys@?sOOoDLUShwswelNJztHiECzcskwp-0LTjZ3!cl*UU-H(fZWH`l>)bN;!`Xw+8F%#c2R0ktEV<-!?QL1R z@#OSO6Df)00@?iETwJY8Sw4rtSrh{&_Qt9gtJc(0&t~p95&Ga~+@b}u*RTAs zdYi)yzM21%=Y2hA<;FYjeXjh12Rl}1%}VZ1=CP0YKT)G==G?u<%kS6quUhzE$L;ML z4xz%;E`grcmK@&q_p|Q2|NrJ(O6c?!*H7;Gmi1YTAyB|`%8F$UhaNo=n(sI7;fsxn zdwONnIG9|jn7`Z;bacHC(irG^^}~mQ&V4l{Ei-4%pD|;G$H_1M?pAAgoSCpzRM2m( z-O;V9um61W<~a`!-=4|odJe`Bi}%+zDC8vWp5EJ;yds3}!<+5Pb#!%$K3s4-7jNOe zF=C12y1k+albcp4@-YAEW`1+KSmFDH3kq-KeZPIRmWl(_DAbZ zKb7Mm9U}fOMLkeTCs?mH#oJDxWajQ`o20fmJ7ln)l{ID0D0g~fu}G99;TP{&;VF<%+Ss@7XKcuUdb8v*hNvEBE97aC8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&j9Muu5)Bp4VN)dGA%Tp36N9bK)}H5Ch+Lm3zte4NxmLPD~`&2n>d^YZcvqAg2G zN=i#h%gf6vD=Vw3tLy6OI=Wi>Bbg>mnlxp~l-YHGbLPyM-xxB#DP;cq`3n{-SkxN2 zs5NYHYv|&|iaNyADt|JQ=jvP61Vt&f0Q>RWZOg(-2^qDhf&aTcsw=CoQ zs?76i3ol;0cxg@6<;$0^T)A@l_U&iSo;`p5{N>A+uU@@+{rdHrH*elPJ@WS1(RVM7 zy?b@+-Me@1UmySc`SX{n)4x30^Y`!H|NsBXP5gF)%QSdb&7FUQfqwP_w_s{aP3(mV9(EhP@?go9;tPA;58&4_CcyB-LKnI86{oVJOcT4$~Jp5ZG zol|W-EkjQ?=KbN9skPeE9A?aH_ImmwM_EM6-z0xoV%ge@6+5GsuM+T__hOe`68pus zG8dQJ$aDMk;QkTLvnoFxZT_-YsxeL2W}?;wjn*kUT)dxu+GVGB;cJcF+Sc=zI20c< zIdv@4QvS(W#2>OvX2Tjy1_p+fs*s2h=ltB<)VvY~29BA&J&s(53}T3BbJSD)6)oZzEVyr`$6T?QC2liM@A|LlQ-WgF7nW## z&+l^8F$;@eOJQJOP%UwdC`m~yNwrEYN=+5@$ zGBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6Tm7y_2gQH%!04Se%y85}Sb4q9e E07{Ce4FCWD literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/background.png b/Media/Themes/Umami/Icon/apps/background.png new file mode 100644 index 0000000000000000000000000000000000000000..fe80dcee3060418d8fc581705cefc75733b16e85 GIT binary patch literal 1170 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/calc.png b/Media/Themes/Umami/Icon/apps/calc.png new file mode 100644 index 0000000000000000000000000000000000000000..92afcdbb4bc70475d13c9092981c6a8bfc307157 GIT binary patch literal 977 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9Un*)48Tp93!;LyOJkN|fNS2qtAJrgs1Q*#4Ta|1IA3tM|jYh5dQ zM`sUDXHQRePYeHmfPjF&fPkQYz@UJj;DDfzz`(%3prF9ukf5NTpkN3H2@VMj4h;`UZYpAKI zsjaQ8ZOp2xtE;cCZvcTt5NK^`YHDf*ftKd>{FauM*4Eb6&cfEt*7o-Hj*gDb&d#o` zuHN3>{{9KmW_3)T-8o~%j2UyfX3d&4d-m*kATWQ$>SY@?ZrZVX^Z)<_=fx3J90tE!HOc<;!-z`&T~?e5Z$x_4d%0|TSJr;B5VMsRY10&~IZ zh0J;#Epf52wni&fUvBoia_xDOV@jBhQ(mp^CKn3{iHJ___C;PH4UU>5z$~r=?-2y5`jz z8oLc{%PA^Op0Z-zj1|%oQ`St4pYT3_X?nr*DSQDFKTn+g`Rk^FZTxN?C)Cte9$mg_ zd3tulGjS0MC6y(cA3vQ`%wt@{qubThEo1ah$nTZZKd-iXzuM%)Tti*Iad58PVR86H z#n}}VvXei(Dw@HvIBsr8SzC%%pKDFuM%O@94|ZjbCeQWf&Rn<K=8c;gdJi!&uskc`+r%7o zl7WFiwZt`|BqgyV)hf9tHL)a>!N|bKK-a)h*T5{q(89{t)XLCI+rYrez+l>E3quqQ vx%nxXX_X8{28M>Z24=d3<{^egRz~JlhQ<&Lj(Xt&pq%9C>gTe~DWM4f`D9!% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/config-language.png b/Media/Themes/Umami/Icon/apps/config-language.png new file mode 100644 index 0000000000000000000000000000000000000000..0bf99d0cefec6b3847c26c26a629db93ae9c543e GIT binary patch literal 1124 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_j-D=#As)xCPC1(=<0{g+Kl-li-FX{r zKc&c|Z|MCmLSL$$|=?nD#x%&N2B`~D9turc3re>M{p4)F zZRh@5aP0=)Rl;1F8*Ejli@lmUeZ8*|N92`-!lfr3>s8)KeLbChreWFwmv0|^Wsa;! zbUmrJklR&?oAJAfbN$Om^$D zcXVcLI$`PuFguhv2OC~rfGRa6W&jl zv~PmT{}w}uwS|v0o$Qy-eEVcw(c51q)|~0Ro3bMAsbhBU-4E$Zd)*fX=`aeGnl+jD z-_hR}>B+kFqU9y~WefiuE=xVNc7^K3vvVF-JasEITi@?n@%5s%myGZ6mXu7787#|% zT-;{+Zwv2Uf89<$=)mja0uPwp-Kbe^_W9hg*IR$ipLVKr=RzGxK}BXyR}Yqt)kgFA zT=R`?ec83@3V-`OmecGmj`@rJeg7f+sx*7savjCb3=9maC9V-ADTyViR>?)Fi6yBF zMg~R(x(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O4>2^d zGBUR^G=^w!)C(72U|^60*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGn LtDnm{r-UW|p%v+C literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/config-users.png b/Media/Themes/Umami/Icon/apps/config-users.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4b59b80c778e5a3056f6c3a7825c054d819099 GIT binary patch literal 1402 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoEHJ&bxAs)w%PT>v+36(jf$npJCN5JMx z33jgKA#R)za(s^tXmkmk2))Yn-7eCZ#i6xo3El|l9V@+aE6;v{QZ2M$G z-+CuUr9>B}9F9k?@1z!*H6?9XY5e)@&fUN5@4x@Ezxds%m4D?A-;bPqw0v3B2^(MU zpJ#rBpZR(2*8F4dmeyrXT{CBAWrX~es3ZF4RjQ5DI9@#Y{I*8?XkY1axqDrv4&HyF ze;D<4wy6}GxJW;)nj#mpMMf>Fx!OC(G`baLQ%l6^SCvR(a#I zA9t9t`CIip3d}Z9n{~Lr`fACl?$y&auj$yQ#2zJ_*itpAHn^=2|FP-I9Hfujz9U!|)%GRdTCiDD}W;erQw~7t!O*Us=@yW4%pCsF=9gkyW zww`o7+qqFScV6u!=7}GVJ=h@mVE4vp|(vLbntuB`o4nIk8T7W7P*(e|2E zLg#kpzdO7y)~EdSv8vc3!r;E??y`H{X08D&tzUB7RZ{pL0!Q_^ zJWkxl=ci5+SJJK7Sq zM@#)Nl3LiZPpM^pePQzk(b~pYZG0zAML&2i z)$dZrrqv}CSoKXhf_3^~r-EmiPy8En{m#Tl3CV3u4O80MsBy+eap4si8S80Dg2pR& zt{p1=v1g(9qQ~Nj`%N3Fn-3=}H&xpCfNMshYQ^pMB5#g_erDheZEHMRb~@N3W#NmY z`(Hk95E0Q-2s$MTS~lArw#-_!0s!@8>BD);%Q*qdU!mz5U%?~7mD{ay9i zVe5r*)vWUq&p(W^XbC;9x#!o*&71S}WKO0pe{oBdv750p#%J&6Ddx#Hi*9fEzqnOU z*VJT6>-rTg?ytYH&iY@sc2ijTL&g8W>Yp!Wu5wwSb@jf8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wDhK$4xH1q8`~rMK!-GS^gM&f>PnTwGjAN=kWoc|}DRa#K4Zp= zdGqGYpFe-`;>AmrELpmA>C)wkmn~bieEISfD^{#rxpMXD)w_1>+O>Pf!Gi}6A3l8i z`0-PxPMtY(=E8*wmo8npeEIU#t5>gGyLRKoja#>F-M)SM&Ye4V@7}$4@813U_a8iX z@bKZoM~@yoe*E~!lP6D~K7ID=+4JYmU%q_#>eZ{)uV24;^XBc_x9{G)d;k9ZhYue< ze*F09)2Gj$KY#i1@)aE`bfTh!YgV5nevDFsr;D~52;9+RkEjabzSr&$v{uL{P z8D2OXy~5nUq_s?*;Y1|6*57v}qMj}}=iV)FaB*^B3YpO1qQssoqgq;%L-qNS&M3ZeXH3czGPZrGuJos*PHHE?f>=Z&iT{z z^Z&0%sGd5ZJaqm2JN306JzKZ9gf5ctzayu&e&wOfrrk#smqyq3AOHBRQNx;{;b+>? zq}}}*f-`sTKQ6fH8!y8JTa%VcQ(YV`-`cf?W0JsyjJ1pm3=RKc8tNLD=^C1c7#dj_nOhkeLo_(*g$sb9z|+;wWt~$( F69ALPcg+9* literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/email.png b/Media/Themes/Umami/Icon/apps/email.png new file mode 100644 index 0000000000000000000000000000000000000000..1187e8dca1ada3fa9b77cd88bed9cb18eb5dc192 GIT binary patch literal 930 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U-2;3=Tp0*~j;>Z@l#`cPP?X!$Qs2?l+CQ;p+47|;S1n(;X2q&C zD^{&tv3kwQ)$3NRS-WcOy44#ttlzM4{l+aDHf`FtY4gS{TQ+asxoyYJ?YnpH+Ou!> zfdl&w9Nd54(EcOG4j(;w)2Gj#K701;`Sa&5 zUc7km^2N)SFJHZS_4@VeH*em&ef##^yLa#3zyI*z!^e*wKYjZ2`Sa&5U%q_(`t{ql zZ{NRv|MBC;uV24@|Ni~w&!4}4|Nj5~KkZ^aD8htGg8YIRm{{021f*p(bo6|D0|J94 zEqb5*{ShdB7?Zr+U2@Ja8dx(hFq(V1IEHAPZ@u&~xXFQ`J@G(5=exK2^4FeObbHa| zEt^af6j(x-I@kRDZ@=APTdVQc-&;Q08NWHh$MW%h#Do5~FZNEp5a0fVF=N)QWo}F5 zOJgS=_4>K}3xmXy_S>)j_$M-65t-tB^tAE3<4wDiIG+X?)}NbyrdOt(yTLj!E;7Qp zBKw@5^M$s*K8Aa@?E3xd;wPJY>+Xk!a|`c9&wFhq`}?WekqdivaLu~9;(AfL8r$ut zeeP@1q^jO+S(UtD&GVJYeUGNcLWEOEv4?DEA2mHE0?ElM!(O-?>jD%ECWujhS9 zJm7`xm#? z7n&6|Eo^)cEHc-_$fvxTXR^< z8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB p1|tJQLtO(iT|@H_LnA9Ab1Oq*hz3W!Z~;)(@O1TaS?83{1OPvs&z1lH literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/file-manager.png b/Media/Themes/Umami/Icon/apps/file-manager.png new file mode 100644 index 0000000000000000000000000000000000000000..3597ca1e1642608a57b12124375aa8640f659374 GIT binary patch literal 559 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U@&kNATp5S}=}BtA0V+ZM${EROIqBNPX-ajO3I}TiFKlnRw5#>% zo{sDLdv0wly}hmM?$K%Yk4?LOeA=V^O^**WJw846@tJu~KxqEUi_8B1|L?o{wIc%q z1Aj@7UoZm`3oARHgru~Rs(S2#m5c9gsbXMYU`+CMcTw5G_H!l!1H%GO7sn8d;JJNo z`I-!PT(_U=^x4w!Iw0i3-ZkyKFN^;2cqTj6AG@!-_z~lz zTbt0^cV6|*0hMzuF4NX*ou+d!Qz+>D206}|e}8y2=y@e?Gd?z@wJmcR%hD@ZZknt? zH4k|!8zg_59#x#jz`&qd;u=wsl30>zm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{t zU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv?BXcW5V~7Svy>J0gJbAkMxvX8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp93!j;_{@uGX%e_TK*PfIz>%Ab($fpN_89@`{q;(gFqs z21Z6k78Vv(R#rAPHaPMkP>`t-$17cXDFeEs_Mn>TOXx^?UJ?b~A+uV24@`}Xbo z_wPS`{P_9v=dWMCe*gac|Ns9Lh0YTh7#KuKg8YIRSU7kDL?o2dw2V!xT*AU57wEak7A<261tXD{)1jB>pwdc)`&ll9{IMX7yv2#V3 z<8O|pj>Ly$-8OReTzj@Z&DMR*Fv#2DYJP$_swHxU~ovd@`#4F{j1IKnu{;>7a1)*5cK`+o9%Dco+>C< zxtojg=34)}?x!C=eY)Lz{WBxim#5d?EGm>=IyYACUunRC(>Le-ycm)pXuX!i4Es%QWEkncl?#l~VFQ&3E zO0B)>Dl8zdz>%4Oq2a&e=8RKi?$)5Jqgvt`QIe8al4_M)l$uzQ%3x$*WT0zcscT>s zVrXGyY-(j_rfpzgWneJvvxOl80|P=sZhlH;S|x*#fuW(UftjwMd5EErm65rXp)o{* Tqh7cGDEoQ3`njxgN@xNAbvWOs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/gnome-calculator.png b/Media/Themes/Umami/Icon/apps/gnome-calculator.png new file mode 100644 index 0000000000000000000000000000000000000000..92afcdbb4bc70475d13c9092981c6a8bfc307157 GIT binary patch literal 977 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9Un*)48Tp93!;LyOJkN|fNS2qtAJrgs1Q*#4Ta|1IA3tM|jYh5dQ zM`sUDXHQRePYeHmfPjF&fPkQYz@UJj;DDfzz`(%3prF9ukf5NTpkN3H2@VMj4h;`UZYpAKI zsjaQ8ZOp2xtE;cCZvcTt5NK^`YHDf*ftKd>{FauM*4Eb6&cfEt*7o-Hj*gDb&d#o` zuHN3>{{9KmW_3)T-8o~%j2UyfX3d&4d-m*kATWQ$>SY@?ZrZVX^Z)<_=fx3J90tE!HOc<;!-z`&T~?e5Z$x_4d%0|TSJr;B5VMsRY10&~IZ zh0J;#Epf52wni&fUvBoia_xDOV@jBhQ(mp^CKn3{iHJ___C;PH4UU>5z$~r=?-2y5`jz z8oLc{%PA^Op0Z-zj1|%oQ`St4pYT3_X?nr*DSQDFKTn+g`Rk^FZTxN?C)Cte9$mg_ zd3tulGjS0MC6y(cA3vQ`%wt@{qubThEo1ah$nTZZKd-iXzuM%)Tti*Iad58PVR86H z#n}}VvXei(Dw@HvIBsr8SzC%%pKDFuM%O@94|ZjbCeQWf&Rn<K=8c;gdJi!&uskc`+r%7o zl7WFiwZt`|BqgyV)hf9tHL)a>!N|bKK-a)h*T5{q(89{t)XLCI+rYrez+l>E3quqQ vx%nxXX_X8{28M>Z24=d3<{^egRz~JlhQ<&Lj(Xt&pq%9C>gTe~DWM4f`D9!% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/gnome-character-map.png b/Media/Themes/Umami/Icon/apps/gnome-character-map.png new file mode 100644 index 0000000000000000000000000000000000000000..f99d513846ff8b4a2329cf58e937c523ce1a2832 GIT binary patch literal 1001 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 Zdih1^v)|cBF)%PNc)I$ztaD0e0swZMm?Z!J literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/gnome-monitor.png b/Media/Themes/Umami/Icon/apps/gnome-monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..84a05628a6c814140ad983bc7c682f10eeea4ecc GIT binary patch literal 1160 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CYO>_%)r1c48n{Iv*t)JFfey{x;Tb-9N#)6-(zm5%yIkYHqU=f zmh_&xQetzZ{*^7?PUVPOM62Vg)(s~QjgGDbixLc?Re7cbX0H+7yU8*` zf5|g3tBm3W*>TUmgx#7o`DN()&o6GiqXvvCy&oPe7ZsTzRW#?vX_r8%)6Uwo_c-#{)_XxmR~+QcfOoN z7=!n-AdY9xo^vqC-~S$NdMQenjj>LGVZoF|Ilh+f_kT}(xvy`pb3?#R&f=Ak^J<@K zbRKz9f2*=~&8+^otR-vK)L2eq=Qz~hk~C?#lrhI?HxB8QI#RDx4^P)ATE}A`A=}t_ zAu74#M0s=Yl4q|!EvRf*nmqB8^D3PMih3(oGkQnz_^(jSKd_+pn2Xd(;{=_AiLI@z zHVrxDg_5ouD-tbg?kqD^nTEdw^v=9FI;b(9+PSvkz|4!DDMf9vvzH6_uAd-b?OE(9 z{PJj>+0k_$FDS zZN>Uel?BP%`+44_RKE`A_-J%YqUV}~?8WMJ9bB)@&bIjzvBSpRdSlzem2Y~P&GY@9;*RJx`tzy|K;NCT?hSXIQkk6lr{3JrS$RdKQC^^h@#u*{nI%&^H2-t% zs7g(Hy{~WY-s-aLfjhT#o!T1eI&$h%S>OAtoY{$j=z2b2-|2o@_{oeI|`sdQp za{0S;kJ|S=cCgxhu-ZX%1Dgi(ojIoEtor}+A4@)v`oKQn+**b3xQT|-e7ZXBTK#2x zIlFP(X85kH;OI#yLQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd z45odyFhtRio1c=IR>@#wU}&goV5Vzm9%5)@Wn^w;XbjQds2484z`(%Z>FVdQ&MBb@ E0J>EEs{jB1 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/gnome-remote-desktop.png b/Media/Themes/Umami/Icon/apps/gnome-remote-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..67e018c0970054671f3860d41e6e2a7398381e92 GIT binary patch literal 1387 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 WXbjQds245(%Ilu4elF{r5}E+&Stir~ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/gnome-settings-accessibility-technologies.png b/Media/Themes/Umami/Icon/apps/gnome-settings-accessibility-technologies.png new file mode 100644 index 0000000000000000000000000000000000000000..29cd13746bbf9c46313920008e7cc6c72a060ca4 GIT binary patch literal 1171 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_Q$1ZALp+Xeof@4H6DrcSzt-0H@|{kz zZE;>l7KL?-?Aepi)FslD+Z?fiWxj}hg{O8{>o1{I2~(T+!=mMNoRnLxY`5bO;tl%Z zXmWItm`{@TR+Yk{OsTnN<`jSX_V5gkXWAO)CERA|^Y`-q-+z7owSW9Ej|IHr%idUS zQkOp+zG>%|wyO*8P4nAllQ=2m>Yyf@miy0G!Qot>+md=N+Snn2U^3s(!R-|zckaem+B|0)Ful8$E6 z?-e}0m3GhO5AWogm5XjHoZ@ook^qO|saaJAs{4!Op37`3=Hco4aO7}#QR2S3Vplfr z!<7bZi>GQ$;`sKiuHox-(}Jp!Nsr^_GS{u#!WZkM9Q5L2RZVR_+2|xK{nE1pXO32Ny(X=9dk_Kb{lIV+*Jx_Fr zDjK+{AI@5HRV3+rwmk2o)9qj6e$P7~#kAU!l`Wh1TGpD2p`5F{mx$ha@nogQ%L4+| z{TI8M^-F{#To%>UVmQ5+fhb*)x+@V9@(v$eb3rV@=NdgzkhBY(2->K;(uq1 zqSoo;wQ5}~i4vD1(*Ms^n7m2n*vZV^i+gr_mSbykGrT3>+V}fiM)GA{-8H!pyeR82QenL>tbh8rsO%wkuG?cr$X`b=^)ETq>cKZli zx!}sNM8rdNqLz9on}Ow{A72@A%w{<^tIZ= z4TV)Tvx@hhPwsW%=;Y-II`PP{OI|tbUbDys1#J$Nlr=iDCGSnoU(3Ek$R%*fkAD9@ zC#ok*{j_A7=j9wd|Cl**va8?RD{DKxiNn$Gt%Q=hgm{OTu=vsHIqdIk{HA zb|Lr7xpN!zW=O@K4BNgr`}exFw#WZ}=U<*3KmYxky59-`;gfbv@eDp5{QJH^Z?6A& zSKsTKyLKG(n>T;{Tv>@%)*s{y*j>D*UUt1EG9j|i{mcFYH|=Nj%-si^GS{osubTKE zEBm_MKgKzSZ^qp8IN!;@z@S><8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9? zXr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_LnA9Ab1Oq*hz3W!Z~+De1_n=8 KKbLh*2~7a)iv6|# literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/gnome-settings-background.png b/Media/Themes/Umami/Icon/apps/gnome-settings-background.png new file mode 100644 index 0000000000000000000000000000000000000000..fe80dcee3060418d8fc581705cefc75733b16e85 GIT binary patch literal 1170 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_Q#@T9Lp+XOo#LAj6Do4NzFci)<;h|- z-?TFsXJ?o=CHv&&n(DD^ZBp$>aPV?;R9p}yzD`T=kyoHV`MVx&^J}f!F7Zv<_3~K1 zNv^5cL=&^iTYQbCmMxp>^Zaw|{?|!yPASV~2HdH5@Zp~I_j#Xp|1Yi(|My-kEZ*+# zo5|Z7KK@_v?%>9Y{QFokqQqt7<>cG~qj)cy%)KSkIi+EWhsq_^&eumBygJ|B2nuA% zQkp2ip2ff*^YdGV!Q_(+1!|E>>pAnD@h+KC+Ao!zopgVl!N-a@8R^y&J)XqBHf``x zJAC2<$GX=+mPKt2o99p7ucn#p7VB`W-G3to(;Lu*Gn_QXK&Ey4(RS*+yCw3=Z}S#9@a+Olzy?!NprT+ z^xbClewZw z_e9pDDMfFsYyWE9m;arY`~HE0z~N6H(}SYBb6-oRlr0Pq|KO@Lv0}E{v-j){rT-Sq z+3)Ac{9?hIqv_&aH@5w~`l_t3-ALD=qU6oqlj-y7!uIZ}u*{NZJ8yC}%UY#nX8H#~ zM!VMgX{PsT{}-4~_+Il^k@>8H!Q68`BHgXw-`>@p+rDX&)53@YCcK9h3W%RSds$HW zfKk^0p$4Xmdka&Q8<=nGS~vgSui1xp{`=P+|E@~m-o@LyeP3quccc{EV_{mGB@&$( z%^K0LZ{H6$U8W4yTMZXxv){LPV&NCC>yzF7`|{glf4h~R>2*K+iL+t8njVj=ZQ(z0 zf5zFYYu2&b{OmH9-oHF1r+&rfd8fP0H}@&?`ZqpYX<*L1BHhvd?kep#Z_@>jcq8|B z?$7w7%1`8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp93!j;_{@uGX%e_TK*PfIz>%Ab($fpN_89@`{q;(gFqs z21Z6k78Vv(R#rAPHaPMkP>`t-$17cXDFeEs_Mn>TOXx^?UJ?b~A+uV24@`}Xbo z_wPS`{P_9v=dWMCe*gac|Ns9Lh0YTh7#KuKg8YIRSU7kDL?o2dw2V!xT*AU57wEak7A<261tXD{)1jB>pwdc)`&ll9{IMX7yv2#V3 z<8O|pj>Ly$-8OReTzj@Z&DMR*Fv#2DYJP$_swHxU~ovd@`#4F{j1IKnu{;>7a1)*5cK`+o9%Dco+>C< zxtojg=34)}?x!C=eY)Lz{WBxim#5d?EGm>=IyYACUunRC(>Le-ycm)pXuX!i4Es%QWEkncl?#l~VFQ&3E zO0B)>Dl8zdz>%4Oq2a&e=8RKi?$)5Jqgvt`QIe8al4_M)l$uzQ%3x$*WT0zcscT>s zVrXGyY-(j_rfpzgWneJvvxOl80|P=sZhlH;S|x*#fuW(UftjwMd5EErm65rXp)o{* Tqh7cGDEoQ3`njxgN@xNAbvWOs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/gnome-settings-keybindings.png b/Media/Themes/Umami/Icon/apps/gnome-settings-keybindings.png new file mode 100644 index 0000000000000000000000000000000000000000..017ef9bbb7ad331c276d8804e6ee5a488b5edcd5 GIT binary patch literal 1163 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tH~PZ!4!kKRK&F`_H4xIH#u{+yiR?0&^agf-oe%K*CoCGX3RC%V8ryo zS%6X6qGw}=$9{INd#5$Km>M?e1d2o#--z9{=JM@}y^LK-i^belXk3eO;ZbT@l@xN~ z^P2UiIkN?`M3Qxm@w`-Wo|nGjm4(9TqDK~L`o?S4=CyOIk~?zoY*lTno6ONC`!4aW z3jNx_`QqEI1%IdUGJC}fxf>pfShF$WImaC34UCBr6TdUMMhYAaTxuwmu03~ipT#_- z(^VS6S^=RhJe%8JC(n<&<>hwn)x#4kvCD7ES?<2u^z?POI)4wxak+W-E#v>!Rjw~g ztb6yv!og*diD%lge%npyNt0BLm|ooa)#csN+gW8NitO1cKA)N%elPgy%)LUcDz#hm z;`dbjTP^-MDSz(fNs-FpiH8=*S3h(*afG$teMDr`i*KLxna?wxU$3JZQ|5f^yqoFg zK>hE#28va|zQODmQw=jZuk{Ghk-rw40u$74;OtPRH! za!i+AyOkxYpwabRHHeEfA+&Rm=B!MsjkRe)4o4J@eG#8|^i~${4uu!YchA))o$+Ix zoV14NxlA$t+3@PP8#ljStzH@S>4B^U7nfte?{tRH9lQSUUb|IW>zW!_RI;s)FVBF} zK=hXUwERCmpIlxpci>I2fXI%*;^sXX*TbiYNeMH)jr)1)(ee9rH%|UJ`S)hH;MFs0 zr1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`hG=lq3m0Hu yV2}ja5S*V@Ql40p%1~Zju9umYU7Va)kgAtols@~NjT8d|1B0ilpUXO@geCy?>H0|k literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/gnome-settings-theme.png b/Media/Themes/Umami/Icon/apps/gnome-settings-theme.png new file mode 100644 index 0000000000000000000000000000000000000000..019da41feb07d80bba9a883f8625275f4297ac05 GIT binary patch literal 1132 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_d7dtgAs)xiPKnKkPL()b|J?TZlf|BC zr&nq(jSOCuYP{Aa*SJDdULy(HX}V{&7>8-%sX5myO-{YKbZe34(8$vn!}b{&cnO=@87>|0!&Lq8g~6ib(%0wQRtnE zv+~q)6MiWobn&WeWwop+ugn)cQ;?a+{U1LM~wY#-SfBbE3(+y+Inaf z%CxUrr#Ef-^iH>Ao8MnPyEI=nyxh&f*mnNF{z+*+&N04e+RGY{J~2@uV%pJ5mxMM( z^h}&6xMa$b%bDw9em35V4UD9enS zoOix#!kV#Je6p!z{=8HEt5h9?nJyblnAg5;^)l0qjT#N#-qv(oIrGuI;eJE*f%*R{ zm=#&t5*Jho#h%dpIe)#r4dWc96QY+VAGq38z^B2S#eKklXV>oChCORzPH+0~v*xPl z-#?e!-xqa$H$N6ASjr&2;$2v%r>1H7uQMx|XB!Bges!c&_F9qmoSAjSmlMzbW{FtM zku81q8dvz*yo&3MvIouytE-C(#h<^uFyMqt7r%tQOm(6D2kQ-7BC|S8=cXF}W)%Lw zyl>XIQw}RHHc2y@Jj>Dz_;de}zRKPaqR7+eVN>UO_QmvAUQWHy38H@~! z40H`Fbq&ly3@xmTO|1;gv<(cb3=F1ywlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP- ZWoQi1;HVcaz`(%3;OXk;vd$@?2>@w~_e%f( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/gnome-terminal.png b/Media/Themes/Umami/Icon/apps/gnome-terminal.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d852c2d56c96836241a570f297291499862d71 GIT binary patch literal 1203 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 Zdih1^v)|cBF)%PNc)I$ztaD0e0swZMm?Z!J literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/internet-group-chat.png b/Media/Themes/Umami/Icon/apps/internet-group-chat.png new file mode 100644 index 0000000000000000000000000000000000000000..92f0f30f659d169809e465b2f1f44c5765d3fb25 GIT binary patch literal 642 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U<^=eJxH1p|CMG5f3=9xbS67#Tfk8`43$7_4At5b2xvadTt)r#2 zt*N@EqOz*2ufMmWtF@u2cJAD{9bK)>tqt$rzwhX3J$>fX%a<=-y?XWf_3Jlp-n@PL z_T9U8@87@w@ZrP9j~_pM`ty!q;j9W8zE}5C`VB_Z+xFGJ`pFsJE!QO8R4w#)}U|>)!ag8WRNi0dV zN-j!GEJ8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U-2;3=Tp0*~j;>Z@l#`cPP?X!$Qs2?l+CQ;p+47|;S1n(;X2q&C zD^{&tv3kwQ)$3NRS-WcOy44#ttlzM4{l+aDHf`FtY4gS{TQ+asxoyYJ?YnpH+Ou!> zfdl&w9Nd54(EcOG4j(;w)2Gj#K701;`Sa&5 zUc7km^2N)SFJHZS_4@VeH*em&ef##^yLa#3zyI*z!^e*wKYjZ2`Sa&5U%q_(`t{ql zZ{NRv|MBC;uV24@|Ni~w&!4}4|Nj5~KkZ^aD8htGg8YIRm{{021f*p(bo6|D0|J94 zEqb5*{ShdB7?Zr+U2@Ja8dx(hFq(V1IEHAPZ@u&~xXFQ`J@G(5=exK2^4FeObbHa| zEt^af6j(x-I@kRDZ@=APTdVQc-&;Q08NWHh$MW%h#Do5~FZNEp5a0fVF=N)QWo}F5 zOJgS=_4>K}3xmXy_S>)j_$M-65t-tB^tAE3<4wDiIG+X?)}NbyrdOt(yTLj!E;7Qp zBKw@5^M$s*K8Aa@?E3xd;wPJY>+Xk!a|`c9&wFhq`}?WekqdivaLu~9;(AfL8r$ut zeeP@1q^jO+S(UtD&GVJYeUGNcLWEOEv4?DEA2mHE0?ElM!(O-?>jD%ECWujhS9 zJm7`xm#? z7n&6|Eo^)cEHc-_$fvxTXR^< z8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB p1|tJQLtO(iT|@H_LnA9Ab1Oq*hz3W!Z~;)(@O1TaS?83{1OPvs&z1lH literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/internet-news-reader.png b/Media/Themes/Umami/Icon/apps/internet-news-reader.png new file mode 100644 index 0000000000000000000000000000000000000000..1b11937663f13eb04560798642b9565175b8f0eb GIT binary patch literal 706 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wEDi7pab+M5l$V#+)z#J4*EcpcHZ?W1w6t_|wf6V-PntAo>eQ(- zX3Ur~XU_cj^A{{wuw==SrAwDCU%q_h%9UHUZr!$R+xG3-_w3no@ZiD2hYz1VefrFq zGnX%4xqRgc9N)Qf=kDEmj~+dG`SRu4w{Jgu`0(-L$FE<%{`~p#_wV0-{`~o~Fx0c6VXuV3qY?U|`tl>EaloaenTl+hR@* z5^af7M0{6f`YWZbT4^%r_x>&a3{!;Jzs^gr-S;%Xc8tNLD=^C1c7#dj_nOhkeLo_(*g$sa^j;E`i%Q~loCIEhX3T^-Z literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/internet-web-browser.png b/Media/Themes/Umami/Icon/apps/internet-web-browser.png new file mode 100644 index 0000000000000000000000000000000000000000..05c92d7b5216c3a2ab8a9fc0ecc0f31cc9efda88 GIT binary patch literal 1393 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE#hxyXAs)x?PRsU*PL(*Ge&vX_PfzEh z6`XZ53}+rYGGj)q;jGF?F@454%*!gg?+D#35!Yd!nX&kRgpm2RO?f@Pb6KOK7F^)o z^7PuJpj%As)2)o6G~Xv(x=5Yu+ezW`a``m6Z^@YXr=d3%nbC#aRR%L@5HWCHD7Np)0$ZVS! zev$E;<;*|-@)!4cdTDQdGHrEYnU8ym?imiJg#s!;mQTd=S?)g0xYE1mtO;Y@L?IEL z-)@HGVwTI#929?*u+iTsd5h!CWXJ6XnKlM-@4f54DDOm%o`u`-L<8d&k`m5wq3K6b zqCcwmY5w<_DRu6o8%uZHXxeC*8Z5-M*7ZpAZL5S*_J_0B?;PoPujV6s{o%}SNtKnBo6=HKS%ZV+ zJgQ_oBG;dM*82ZLgrNQYUBboPuccdcwR+Ao3LmU5_~Crvo3Vh2R^a*<&U-_6=hw5v ztr!1$*soyywvB9ee0lAxLZ1niM|_-qoj-9h)3TGZC6t+`ebg{}uf=omitlBst>>ED zwhG$K=Vx~2S?AHS=HRof9w*oEl=ANgSSHmR@!oBEv1C}h#A3#TDMw_DvtN||I2gC) zpl-}$xfQ#=t`O-^42Zs&#GW6{{6h1;QmX!|s=XPqJWh`zoaSe@o`IV zN5t~x8qAnG*LD3t4!<(RtXmQ)^H)XO*yFli`|DLL_KDgl3G$_D^ZCv!TynJKQ=g~E z>KKhFy^nHSt#=&tD*4WvR9GmOw_W=0Uo{n(=Z)${8}b+2zM}B(gleGQO0GR=Y0fP< zr@5BI{_xFl_Oor4Uv<`FZx+M)FvkAl%&V_xNW53%@p%I|yn`oq(oekmVjDL<;(D|aVGPD_->?%bL~)0jUr=j&}x z4-`4NmZz#$jD@N3#Pna@iL(11mAbdspACNKuubOpr*)32uPzEzbFP~zl_?&j@&767 zZQpKoA%8LbKT+!%H{9j9-68wDJFCFJy>E#O>$m?phkr)~z44v?VC|LcjI3#kT$UW` z55KkHzr}z5TmQe5vH9Elel)v~-B0B137shm{gM}-m?iN4@~#)sbJ+IOE#j*V&My4X z!}4^KV}Zt}AB)BJ8gAS@DdRu)k>+SA0e!*u?|$pto;NAd*V(7jDNugZ6ceQ@$}1)q zYy5ETKjZz$oNOmMx>`;Et4LS7gYYDg6-ZS1dT zt(ddpd7j_7-yQ9p$2-(JBOa|>@j&^=-~T`D+xIi>KDoKV<$3-R1_lPz64!{5l*E!$ ztK_28#FA77BLgD?T?0#91G5lA3oBz&D?>AF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivt knCTjthZq`J8JSxd8bdTV>V*q1FfcH9y85}Sb4q9e08-Io<^TWy literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/kcalc.png b/Media/Themes/Umami/Icon/apps/kcalc.png new file mode 100644 index 0000000000000000000000000000000000000000..92afcdbb4bc70475d13c9092981c6a8bfc307157 GIT binary patch literal 977 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9Un*)48Tp93!;LyOJkN|fNS2qtAJrgs1Q*#4Ta|1IA3tM|jYh5dQ zM`sUDXHQRePYeHmfPjF&fPkQYz@UJj;DDfzz`(%3prF9ukf5NTpkN3H2@VMj4h;`UZYpAKI zsjaQ8ZOp2xtE;cCZvcTt5NK^`YHDf*ftKd>{FauM*4Eb6&cfEt*7o-Hj*gDb&d#o` zuHN3>{{9KmW_3)T-8o~%j2UyfX3d&4d-m*kATWQ$>SY@?ZrZVX^Z)<_=fx3J90tE!HOc<;!-z`&T~?e5Z$x_4d%0|TSJr;B5VMsRY10&~IZ zh0J;#Epf52wni&fUvBoia_xDOV@jBhQ(mp^CKn3{iHJ___C;PH4UU>5z$~r=?-2y5`jz z8oLc{%PA^Op0Z-zj1|%oQ`St4pYT3_X?nr*DSQDFKTn+g`Rk^FZTxN?C)Cte9$mg_ zd3tulGjS0MC6y(cA3vQ`%wt@{qubThEo1ah$nTZZKd-iXzuM%)Tti*Iad58PVR86H z#n}}VvXei(Dw@HvIBsr8SzC%%pKDFuM%O@94|ZjbCeQWf&Rn<K=8c;gdJi!&uskc`+r%7o zl7WFiwZt`|BqgyV)hf9tHL)a>!N|bKK-a)h*T5{q(89{t)XLCI+rYrez+l>E3quqQ vx%nxXX_X8{28M>Z24=d3<{^egRz~JlhQ<&Lj(Xt&pq%9C>gTe~DWM4f`D9!% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/kcharselect.png b/Media/Themes/Umami/Icon/apps/kcharselect.png new file mode 100644 index 0000000000000000000000000000000000000000..f99d513846ff8b4a2329cf58e937c523ce1a2832 GIT binary patch literal 1001 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 E07{Ce4FCWD literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/key_bindings.png b/Media/Themes/Umami/Icon/apps/key_bindings.png new file mode 100644 index 0000000000000000000000000000000000000000..017ef9bbb7ad331c276d8804e6ee5a488b5edcd5 GIT binary patch literal 1163 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tH~PZ!4!kKRK&F`_H4xIH#u{+yiR?0&^agf-oe%K*CoCGX3RC%V8ryo zS%6X6qGw}=$9{INd#5$Km>M?e1d2o#--z9{=JM@}y^LK-i^belXk3eO;ZbT@l@xN~ z^P2UiIkN?`M3Qxm@w`-Wo|nGjm4(9TqDK~L`o?S4=CyOIk~?zoY*lTno6ONC`!4aW z3jNx_`QqEI1%IdUGJC}fxf>pfShF$WImaC34UCBr6TdUMMhYAaTxuwmu03~ipT#_- z(^VS6S^=RhJe%8JC(n<&<>hwn)x#4kvCD7ES?<2u^z?POI)4wxak+W-E#v>!Rjw~g ztb6yv!og*diD%lge%npyNt0BLm|ooa)#csN+gW8NitO1cKA)N%elPgy%)LUcDz#hm z;`dbjTP^-MDSz(fNs-FpiH8=*S3h(*afG$teMDr`i*KLxna?wxU$3JZQ|5f^yqoFg zK>hE#28va|zQODmQw=jZuk{Ghk-rw40u$74;OtPRH! za!i+AyOkxYpwabRHHeEfA+&Rm=B!MsjkRe)4o4J@eG#8|^i~${4uu!YchA))o$+Ix zoV14NxlA$t+3@PP8#ljStzH@S>4B^U7nfte?{tRH9lQSUUb|IW>zW!_RI;s)FVBF} zK=hXUwERCmpIlxpci>I2fXI%*;^sXX*TbiYNeMH)jr)1)(ee9rH%|UJ`S)hH;MFs0 zr1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`hG=lq3m0Hu yV2}ja5S*V@Ql40p%1~Zju9umYU7Va)kgAtols@~NjT8d|1B0ilpUXO@geCy?>H0|k literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/kfm.png b/Media/Themes/Umami/Icon/apps/kfm.png new file mode 100644 index 0000000000000000000000000000000000000000..3597ca1e1642608a57b12124375aa8640f659374 GIT binary patch literal 559 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U@&kNATp5S}=}BtA0V+ZM${EROIqBNPX-ajO3I}TiFKlnRw5#>% zo{sDLdv0wly}hmM?$K%Yk4?LOeA=V^O^**WJw846@tJu~KxqEUi_8B1|L?o{wIc%q z1Aj@7UoZm`3oARHgru~Rs(S2#m5c9gsbXMYU`+CMcTw5G_H!l!1H%GO7sn8d;JJNo z`I-!PT(_U=^x4w!Iw0i3-ZkyKFN^;2cqTj6AG@!-_z~lz zTbt0^cV6|*0hMzuF4NX*ou+d!Qz+>D206}|e}8y2=y@e?Gd?z@wJmcR%hD@ZZknt? zH4k|!8zg_59#x#jz`&qd;u=wsl30>zm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{t zU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv?BXcW5V~7Svy>J0gJbAkMxvX>p4s|>i3Dsg<_%f4for&i`H z+wm`P$*eOXt7k5{IO#MakD`-T!JY(-0}Q2sEse2md=tITJ&j0EUK*>{h#iAd&+;4jhz?N zP5$d%TM_ussCr|%HKR%(CeVCmuu;RKI)BAeaR^2{BgJ0ilw!Q5>-0oNS z(AD z4V-g&-O(~51G_mq|Bq-H%}kiO;h%*4s)eh*EK2J*J!Q_1wDt_WuJ+iQqOu0X=MS8F zeaC>y88Upf4Mit2lPxkeK@Om);2~Nn_xEeeN&?QPi7xEdd%*{Ebdw1r|YXSN@lqk z^2)#OKhAeOBtquwBfn#v?9&%)%=XZ&tF7R=S7`tE_X({XEhl%BzMtVG^*Zxf`_8Fs z(l>ogeTs7{LypY7*W#D|b~1DIekP00-GM7!gm%YE&vR>7A!w5*TO%a$p<`W}_YR&t zKcski&pBN8G1zzM0cX;}Nv9rP^gXi4eEFN3FJ+lkVtB5*FT28aGWD)Ninid4t4#a1 zu$^lORnp08-?LP{O6=g&)uxe>s$myaY`s{sJVE?u^6THi-&n;Sa=0FNWHC3a|G}KF zmZ#+ki#7-^{37L|wlAbJeT_`fQ{E%buH9GF-G7xw=}lkizk^05<>G~GWhoCtRF;0y zzEJm-ukBcf#LOAZ8y;~9rPNxezid))@0`5y>jPCy13O#(+43%0mu~Hxb&xGdZT~Ct zC*kFGD->SDu__B|mAW`Z@~fZI;uN~SdcnG4j#ksVr$zi9JIg=c^5Dn0c?F`g)%Le! ztz*9*z|Yq@B{Ahs
Ib=RdTAH#kuHFr>Xz36MC#5=xJ^O@(A=ewIE8ClOi<7&nm zG)rc=1LvH~e~~`(42xvELk^fPXjUkZvRc1+kaH(0Gq?WAl!HHXK)@^;!tr>DM zN6=RD=1H%t^$PEtwEfg#ogAWcFP+}4kiYw6s$S?99qC&wXV-cD(Vu=T`!?UrS2Ngp zEk7Lj+{x;Dy7Vox#Ozs*SG?cRxrE!deE+AD5f@B9zK>a+zh~~ZJqN$7b^W92)PLjC z74Fx%@n&1PYVN*pnEI{naq}&;MsF*%f8F^~)qHF2r^N5{J8u!?>^%AJtlES7>g(?p zXB$>ds+d?Y^@936Wjn<)9NbNFZ*<)7*yFmVC_dt|{eSCE>X{o>$u&IQ+{eJcpjzS@ zQIe8al4_M)l$uzQ%3x$*WT0zcscT>sVrXGyY-(j_rfpzgWneJvvxOmwhTQy=%(O}d zBLhQ2T>~>+L-PlpinR(g8$%zH2 Zdih1^v)|cBF)%PNc)I$ztaD0e0swZMm?Z!J literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/konsole.png b/Media/Themes/Umami/Icon/apps/konsole.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d852c2d56c96836241a570f297291499862d71 GIT binary patch literal 1203 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 E0J>EEs{jB1 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/kuser.png b/Media/Themes/Umami/Icon/apps/kuser.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4b59b80c778e5a3056f6c3a7825c054d819099 GIT binary patch literal 1402 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoEHJ&bxAs)w%PT>v+36(jf$npJCN5JMx z33jgKA#R)za(s^tXmkmk2))Yn-7eCZ#i6xo3El|l9V@+aE6;v{QZ2M$G z-+CuUr9>B}9F9k?@1z!*H6?9XY5e)@&fUN5@4x@Ezxds%m4D?A-;bPqw0v3B2^(MU zpJ#rBpZR(2*8F4dmeyrXT{CBAWrX~es3ZF4RjQ5DI9@#Y{I*8?XkY1axqDrv4&HyF ze;D<4wy6}GxJW;)nj#mpMMf>Fx!OC(G`baLQ%l6^SCvR(a#I zA9t9t`CIip3d}Z9n{~Lr`fACl?$y&auj$yQ#2zJ_*itpAHn^=2|FP-I9Hfujz9U!|)%GRdTCiDD}W;erQw~7t!O*Us=@yW4%pCsF=9gkyW zww`o7+qqFScV6u!=7}GVJ=h@mVE4vp|(vLbntuB`o4nIk8T7W7P*(e|2E zLg#kpzdO7y)~EdSv8vc3!r;E??y`H{X08D&tzUB7RZ{pL0!Q_^ zJWkxl=ci5+SJJK7Sq zM@#)Nl3LiZPpM^pePQzk(b~pYZG0zAML&2i z)$dZrrqv}CSoKXhf_3^~r-EmiPy8En{m#Tl3CV3u4O80MsBy+eap4si8S80Dg2pR& zt{p1=v1g(9qQ~Nj`%N3Fn-3=}H&xpCfNMshYQ^pMB5#g_erDheZEHMRb~@N3W#NmY z`(Hk95E0Q-2s$MTS~lArw#-_!0s!@8>BD);%Q*qdU!mz5U%?~7mD{ay9i zVe5r*)vWUq&p(W^XbC;9x#!o*&71S}WKO0pe{oBdv750p#%J&6Ddx#Hi*9fEzqnOU z*VJT6>-rTg?ytYH&iY@sc2ijTL&g8W>Yp!Wu5wwSb@jf| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2HCi#=T&Lp+YZoxImiI#9sv{2QxQU+?xy zPXZkj8Z$1pmUk#k)bJO$=lL?n`=-%+K%~eHR$<6RCMsDAHzn1p)s4HJs8BEXcupeP;{B2(zbH7K5+oWQ} zlj|}wUilopZmw*0eS37NbkWDZe^^#9pWz8T%z9)stFG#PJ_Fsd_X2T~Q=hOq$XSK* zep=QY5-gUC=!z#h-Olw=+xS$#G_m2T!NQsBkho@V)04 zw##Fwf`!M4eyJ5|g6f}55AUk+?N`| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_j-D=#As)xCPC1(=<0{g+Kl-li-FX{r zKc&c|Z|MCmLSL$$|=?nD#x%&N2B`~D9turc3re>M{p4)F zZRh@5aP0=)Rl;1F8*Ejli@lmUeZ8*|N92`-!lfr3>s8)KeLbChreWFwmv0|^Wsa;! zbUmrJklR&?oAJAfbN$Om^$D zcXVcLI$`PuFguhv2OC~rfGRa6W&jl zv~PmT{}w}uwS|v0o$Qy-eEVcw(c51q)|~0Ro3bMAsbhBU-4E$Zd)*fX=`aeGnl+jD z-_hR}>B+kFqU9y~WefiuE=xVNc7^K3vvVF-JasEITi@?n@%5s%myGZ6mXu7787#|% zT-;{+Zwv2Uf89<$=)mja0uPwp-Kbe^_W9hg*IR$ipLVKr=RzGxK}BXyR}Yqt)kgFA zT=R`?ec83@3V-`OmecGmj`@rJeg7f+sx*7savjCb3=9maC9V-ADTyViR>?)Fi6yBF zMg~R(x(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O4>2^d zGBUR^G=^w!)C(72U|^60*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGn LtDnm{r-UW|p%v+C literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/mail_generic.png b/Media/Themes/Umami/Icon/apps/mail_generic.png new file mode 100644 index 0000000000000000000000000000000000000000..1187e8dca1ada3fa9b77cd88bed9cb18eb5dc192 GIT binary patch literal 930 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U-2;3=Tp0*~j;>Z@l#`cPP?X!$Qs2?l+CQ;p+47|;S1n(;X2q&C zD^{&tv3kwQ)$3NRS-WcOy44#ttlzM4{l+aDHf`FtY4gS{TQ+asxoyYJ?YnpH+Ou!> zfdl&w9Nd54(EcOG4j(;w)2Gj#K701;`Sa&5 zUc7km^2N)SFJHZS_4@VeH*em&ef##^yLa#3zyI*z!^e*wKYjZ2`Sa&5U%q_(`t{ql zZ{NRv|MBC;uV24@|Ni~w&!4}4|Nj5~KkZ^aD8htGg8YIRm{{021f*p(bo6|D0|J94 zEqb5*{ShdB7?Zr+U2@Ja8dx(hFq(V1IEHAPZ@u&~xXFQ`J@G(5=exK2^4FeObbHa| zEt^af6j(x-I@kRDZ@=APTdVQc-&;Q08NWHh$MW%h#Do5~FZNEp5a0fVF=N)QWo}F5 zOJgS=_4>K}3xmXy_S>)j_$M-65t-tB^tAE3<4wDiIG+X?)}NbyrdOt(yTLj!E;7Qp zBKw@5^M$s*K8Aa@?E3xd;wPJY>+Xk!a|`c9&wFhq`}?WekqdivaLu~9;(AfL8r$ut zeeP@1q^jO+S(UtD&GVJYeUGNcLWEOEv4?DEA2mHE0?ElM!(O-?>jD%ECWujhS9 zJm7`xm#? z7n&6|Eo^)cEHc-_$fvxTXR^< z8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB p1|tJQLtO(iT|@H_LnA9Ab1Oq*hz3W!Z~;)(@O1TaS?83{1OPvs&z1lH literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/office-calendar.png b/Media/Themes/Umami/Icon/apps/office-calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..fc012d70718ad3d2ec600feed780d388afa1ae27 GIT binary patch literal 915 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wDhK$4xH1q8`~rMK!-GS^gM&f>PnTwGjAN=kWoc|}DRa#K4Zp= zdGqGYpFe-`;>AmrELpmA>C)wkmn~bieEISfD^{#rxpMXD)w_1>+O>Pf!Gi}6A3l8i z`0-PxPMtY(=E8*wmo8npeEIU#t5>gGyLRKoja#>F-M)SM&Ye4V@7}$4@813U_a8iX z@bKZoM~@yoe*E~!lP6D~K7ID=+4JYmU%q_#>eZ{)uV24;^XBc_x9{G)d;k9ZhYue< ze*F09)2Gj$KY#i1@)aE`bfTh!YgV5nevDFsr;D~52;9+RkEjabzSr&$v{uL{P z8D2OXy~5nUq_s?*;Y1|6*57v}qMj}}=iV)FaB*^B3YpO1qQssoqgq;%L-qNS&M3ZeXH3czGPZrGuJos*PHHE?f>=Z&iT{z z^Z&0%sGd5ZJaqm2JN306JzKZ9gf5ctzayu&e&wOfrrk#smqyq3AOHBRQNx;{;b+>? zq}}}*f-`sTKQ6fH8!y8JTa%VcQ(YV`-`cf?W0JsyjJ1pm3=RKc8tNLD=^C1c7#dj_nOhkeLo_(*g$sb9z|+;wWt~$( F69ALPcg+9* literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/openterm.png b/Media/Themes/Umami/Icon/apps/openterm.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d852c2d56c96836241a570f297291499862d71 GIT binary patch literal 1203 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 KKbLh*2~7a)iv6|# literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/preferences-desktop-assistive-technology.png b/Media/Themes/Umami/Icon/apps/preferences-desktop-assistive-technology.png new file mode 100644 index 0000000000000000000000000000000000000000..5f137b3392ae6ee0f9ca88196aaf7ff83d6fcd18 GIT binary patch literal 1233 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;OAGAJU2Ofj*rrW!6*JCa~-IsUo-n@JF_WkGYA3p#1@a4zXAHTl+`1SqA?_a1Go5|8TI0kE##wBa4)IL#&|jPVK6ZD>%PFV6UD5QO-lUr- zdS7lX^OcKimkcwD>LS%c*jJzEiu}sk>#HlPx;Oi|&zwtJQ!>|UXrIu~W6f|;+}S0W zV!3*Ogo@Y1KL!C8<`)MX8A;sSHL2Mh3bDmbwOJA%+%K#->(=X4(b@Rt5&sK3fH9fYOJjtDnm{r-UW|Nl-La literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/preferences-desktop-font.png b/Media/Themes/Umami/Icon/apps/preferences-desktop-font.png new file mode 100644 index 0000000000000000000000000000000000000000..d4d8c50ad221c2536cc88eb7cdfbbde3e5dd4b21 GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp93!j;_{@uGX%e_TK*PfIz>%Ab($fpN_89@`{q;(gFqs z21Z6k78Vv(R#rAPHaPMkP>`t-$17cXDFeEs_Mn>TOXx^?UJ?b~A+uV24@`}Xbo z_wPS`{P_9v=dWMCe*gac|Ns9Lh0YTh7#KuKg8YIRSU7kDL?o2dw2V!xT*AU57wEak7A<261tXD{)1jB>pwdc)`&ll9{IMX7yv2#V3 z<8O|pj>Ly$-8OReTzj@Z&DMR*Fv#2DYJP$_swHxU~ovd@`#4F{j1IKnu{;>7a1)*5cK`+o9%Dco+>C< zxtojg=34)}?x!C=eY)Lz{WBxim#5d?EGm>=IyYACUunRC(>Le-ycm)pXuX!i4Es%QWEkncl?#l~VFQ&3E zO0B)>Dl8zdz>%4Oq2a&e=8RKi?$)5Jqgvt`QIe8al4_M)l$uzQ%3x$*WT0zcscT>s zVrXGyY-(j_rfpzgWneJvvxOl80|P=sZhlH;S|x*#fuW(UftjwMd5EErm65rXp)o{* Tqh7cGDEoQ3`njxgN@xNAbvWOs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/preferences-desktop-keyboard-shortcuts.png b/Media/Themes/Umami/Icon/apps/preferences-desktop-keyboard-shortcuts.png new file mode 100644 index 0000000000000000000000000000000000000000..017ef9bbb7ad331c276d8804e6ee5a488b5edcd5 GIT binary patch literal 1163 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tH~PZ!4!kKRK&F`_H4xIH#u{+yiR?0&^agf-oe%K*CoCGX3RC%V8ryo zS%6X6qGw}=$9{INd#5$Km>M?e1d2o#--z9{=JM@}y^LK-i^belXk3eO;ZbT@l@xN~ z^P2UiIkN?`M3Qxm@w`-Wo|nGjm4(9TqDK~L`o?S4=CyOIk~?zoY*lTno6ONC`!4aW z3jNx_`QqEI1%IdUGJC}fxf>pfShF$WImaC34UCBr6TdUMMhYAaTxuwmu03~ipT#_- z(^VS6S^=RhJe%8JC(n<&<>hwn)x#4kvCD7ES?<2u^z?POI)4wxak+W-E#v>!Rjw~g ztb6yv!og*diD%lge%npyNt0BLm|ooa)#csN+gW8NitO1cKA)N%elPgy%)LUcDz#hm z;`dbjTP^-MDSz(fNs-FpiH8=*S3h(*afG$teMDr`i*KLxna?wxU$3JZQ|5f^yqoFg zK>hE#28va|zQODmQw=jZuk{Ghk-rw40u$74;OtPRH! za!i+AyOkxYpwabRHHeEfA+&Rm=B!MsjkRe)4o4J@eG#8|^i~${4uu!YchA))o$+Ix zoV14NxlA$t+3@PP8#ljStzH@S>4B^U7nfte?{tRH9lQSUUb|IW>zW!_RI;s)FVBF} zK=hXUwERCmpIlxpci>I2fXI%*;^sXX*TbiYNeMH)jr)1)(ee9rH%|UJ`S)hH;MFs0 zr1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg1`hG=lq3m0Hu yV2}ja5S*V@Ql40p%1~Zju9umYU7Va)kgAtols@~NjT8d|1B0ilpUXO@geCy?>H0|k literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/preferences-desktop-locale.png b/Media/Themes/Umami/Icon/apps/preferences-desktop-locale.png new file mode 100644 index 0000000000000000000000000000000000000000..0bf99d0cefec6b3847c26c26a629db93ae9c543e GIT binary patch literal 1124 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_j-D=#As)xCPC1(=<0{g+Kl-li-FX{r zKc&c|Z|MCmLSL$$|=?nD#x%&N2B`~D9turc3re>M{p4)F zZRh@5aP0=)Rl;1F8*Ejli@lmUeZ8*|N92`-!lfr3>s8)KeLbChreWFwmv0|^Wsa;! zbUmrJklR&?oAJAfbN$Om^$D zcXVcLI$`PuFguhv2OC~rfGRa6W&jl zv~PmT{}w}uwS|v0o$Qy-eEVcw(c51q)|~0Ro3bMAsbhBU-4E$Zd)*fX=`aeGnl+jD z-_hR}>B+kFqU9y~WefiuE=xVNc7^K3vvVF-JasEITi@?n@%5s%myGZ6mXu7787#|% zT-;{+Zwv2Uf89<$=)mja0uPwp-Kbe^_W9hg*IR$ipLVKr=RzGxK}BXyR}Yqt)kgFA zT=R`?ec83@3V-`OmecGmj`@rJeg7f+sx*7savjCb3=9maC9V-ADTyViR>?)Fi6yBF zMg~R(x(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O4>2^d zGBUR^G=^w!)C(72U|^60*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGn LtDnm{r-UW|p%v+C literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/preferences-desktop-multimedia.png b/Media/Themes/Umami/Icon/apps/preferences-desktop-multimedia.png new file mode 100644 index 0000000000000000000000000000000000000000..27f73ff114b4c23002162ce84a684b0fc0b68215 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_qMj~}As)xCPW8;J5?;e>d7Sj>XRjQmj_nZz-+Zs37%SUxpgfs>U{g@}{9gIF|Mlnp-zk@`d9U_I?DEVj z^#|^qSLNg5;oNua(#$Dy=G5ri-!pUiw%AGAl23arRm#0Rtu-ldnX%@|ZBoXTxef{r1`f%4Oa*4&UZw|i8y?Z1{n{mUxzsncS z>8yLLW5B1*>BxopssMqjvNBd2*YXlY_A>@xslUCr_LdzI}aNWOV3*^X54b_SWByzvzi$DRBI` z+VrH^Z_gG1Z{HG`_IvZ|72{_x{|Mwg@3*n$NU@ht1H0EYxd&VI8H+UEUtHXtb8E-M ztE;aSd^y43#1V6SY1rz*cYo$r9V^hAEfc)p`;}Yk=lwTqj3~=FesJy83^SgvE!%^2 z&I$J)f9-!^MwqA5&;5+-HPs&)U3I=XaV)fGeKp~|=PO3OC!0=kKK(!Sw3_aJt_Ba4 zO+3FADxFl%6I(Cj-PphR%f^S^0eaIpTb+(rB}wgLU|A-)C`9XLqkqQvx4(8*b)LJk zqq4cRl~w7YM(#tiC}%~bi5zW-0({#)7QJFUP`dAe4HF~Fs;jT=w>r&Retw?9M3=>Z zhtj0iy`H51WM}brvGRBK4wc@$thN1Nua?Ooh6^=semvmc*w=S)*|TN$em%(ATD31| zWsH=p+-{~T4c}K;ZW449PGHcz#j(VAWjMpK%pkq#k}?ue>^e-T3!>aF1t=}-h-wH^ z;J9%8_VIJF)_Z@1DXdA__oDsrT&4AAzGsDZH&kr@@b1yp*Vn(j&|+Ly^*=Jx?kcnM zM6;`c+_`bVDtXG4B~1Q{8lEj~3^LEZaVJ0RKQn`|+%JJ$j-aflTH+c}l9E`GYL#4+ znpl#`U}Ruqple{MYhV^)Xkle+YGr7qZD3$!U@+~og&_k2142V?eoAIqC4-THp`osU jnXaLEh@p{{k-3$jF+_u-Ubp}Q0|SGntDnm{r-UW|CX&V$ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/preferences-desktop-remote-desktop.png b/Media/Themes/Umami/Icon/apps/preferences-desktop-remote-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..67e018c0970054671f3860d41e6e2a7398381e92 GIT binary patch literal 1387 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 II;Vst02)m48vp| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_d7dtgAs)xiPKnKkPL()b|J?TZlf|BC zr&nq(jSOCuYP{Aa*SJDdULy(HX}V{&7>8-%sX5myO-{YKbZe34(8$vn!}b{&cnO=@87>|0!&Lq8g~6ib(%0wQRtnE zv+~q)6MiWobn&WeWwop+ugn)cQ;?a+{U1LM~wY#-SfBbE3(+y+Inaf z%CxUrr#Ef-^iH>Ao8MnPyEI=nyxh&f*mnNF{z+*+&N04e+RGY{J~2@uV%pJ5mxMM( z^h}&6xMa$b%bDw9em35V4UD9enS zoOix#!kV#Je6p!z{=8HEt5h9?nJyblnAg5;^)l0qjT#N#-qv(oIrGuI;eJE*f%*R{ zm=#&t5*Jho#h%dpIe)#r4dWc96QY+VAGq38z^B2S#eKklXV>oChCORzPH+0~v*xPl z-#?e!-xqa$H$N6ASjr&2;$2v%r>1H7uQMx|XB!Bges!c&_F9qmoSAjSmlMzbW{FtM zku81q8dvz*yo&3MvIouytE-C(#h<^uFyMqt7r%tQOm(6D2kQ-7BC|S8=cXF}W)%Lw zyl>XIQw}RHHc2y@Jj>Dz_;de}zRKPaqR7+eVN>UO_QmvAUQWHy38H@~! z40H`Fbq&ly3@xmTO|1;gv<(cb3=F1ywlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP- ZWoQi1;HVcaz`(%3;OXk;vd$@?2>@w~_e%f( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/preferences-desktop-wallpaper.png b/Media/Themes/Umami/Icon/apps/preferences-desktop-wallpaper.png new file mode 100644 index 0000000000000000000000000000000000000000..fe80dcee3060418d8fc581705cefc75733b16e85 GIT binary patch literal 1170 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 WXbjQds245(%Ilu4elF{r5}E+&Stir~ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/preferences-system-windows.png b/Media/Themes/Umami/Icon/apps/preferences-system-windows.png new file mode 100644 index 0000000000000000000000000000000000000000..2a02a2e16c9052ee769755512ecc4154a6191bd2 GIT binary patch literal 714 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/redhat-filemanager.png b/Media/Themes/Umami/Icon/apps/redhat-filemanager.png new file mode 100644 index 0000000000000000000000000000000000000000..3597ca1e1642608a57b12124375aa8640f659374 GIT binary patch literal 559 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U@&kNATp5S}=}BtA0V+ZM${EROIqBNPX-ajO3I}TiFKlnRw5#>% zo{sDLdv0wly}hmM?$K%Yk4?LOeA=V^O^**WJw846@tJu~KxqEUi_8B1|L?o{wIc%q z1Aj@7UoZm`3oARHgru~Rs(S2#m5c9gsbXMYU`+CMcTw5G_H!l!1H%GO7sn8d;JJNo z`I-!PT(_U=^x4w!Iw0i3-ZkyKFN^;2cqTj6AG@!-_z~lz zTbt0^cV6|*0hMzuF4NX*ou+d!Qz+>D206}|e}8y2=y@e?Gd?z@wJmcR%hD@ZZknt? zH4k|!8zg_59#x#jz`&qd;u=wsl30>zm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{t zU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv?BXcW5V~7Svy>J0gJbAkMxvX)o6G~Xv(x=5Yu+ezW`a``m6Z^@YXr=d3%nbC#aRR%L@5HWCHD7Np)0$ZVS! zev$E;<;*|-@)!4cdTDQdGHrEYnU8ym?imiJg#s!;mQTd=S?)g0xYE1mtO;Y@L?IEL z-)@HGVwTI#929?*u+iTsd5h!CWXJ6XnKlM-@4f54DDOm%o`u`-L<8d&k`m5wq3K6b zqCcwmY5w<_DRu6o8%uZHXxeC*8Z5-M*7ZpAZL5S*_J_0B?;PoPujV6s{o%}SNtKnBo6=HKS%ZV+ zJgQ_oBG;dM*82ZLgrNQYUBboPuccdcwR+Ao3LmU5_~Crvo3Vh2R^a*<&U-_6=hw5v ztr!1$*soyywvB9ee0lAxLZ1niM|_-qoj-9h)3TGZC6t+`ebg{}uf=omitlBst>>ED zwhG$K=Vx~2S?AHS=HRof9w*oEl=ANgSSHmR@!oBEv1C}h#A3#TDMw_DvtN||I2gC) zpl-}$xfQ#=t`O-^42Zs&#GW6{{6h1;QmX!|s=XPqJWh`zoaSe@o`IV zN5t~x8qAnG*LD3t4!<(RtXmQ)^H)XO*yFli`|DLL_KDgl3G$_D^ZCv!TynJKQ=g~E z>KKhFy^nHSt#=&tD*4WvR9GmOw_W=0Uo{n(=Z)${8}b+2zM}B(gleGQO0GR=Y0fP< zr@5BI{_xFl_Oor4Uv<`FZx+M)FvkAl%&V_xNW53%@p%I|yn`oq(oekmVjDL<;(D|aVGPD_->?%bL~)0jUr=j&}x z4-`4NmZz#$jD@N3#Pna@iL(11mAbdspACNKuubOpr*)32uPzEzbFP~zl_?&j@&767 zZQpKoA%8LbKT+!%H{9j9-68wDJFCFJy>E#O>$m?phkr)~z44v?VC|LcjI3#kT$UW` z55KkHzr}z5TmQe5vH9Elel)v~-B0B137shm{gM}-m?iN4@~#)sbJ+IOE#j*V&My4X z!}4^KV}Zt}AB)BJ8gAS@DdRu)k>+SA0e!*u?|$pto;NAd*V(7jDNugZ6ceQ@$}1)q zYy5ETKjZz$oNOmMx>`;Et4LS7gYYDg6-ZS1dT zt(ddpd7j_7-yQ9p$2-(JBOa|>@j&^=-~T`D+xIi>KDoKV<$3-R1_lPz64!{5l*E!$ ztK_28#FA77BLgD?T?0#91G5lA3oBz&D?>AF0|P4qgK3{F3{f=X=BH$)RWcYE7#ivt knCTjthZq`J8JSxd8bdTV>V*q1FfcH9y85}Sb4q9e08-Io<^TWy literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/screensaver.png b/Media/Themes/Umami/Icon/apps/screensaver.png new file mode 100644 index 0000000000000000000000000000000000000000..0543d365d00e941b596f815a7383ddb0391411a3 GIT binary patch literal 1116 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_ah@)YAs)x?PKnKsNfl|EfAj1)KcTa; z?ye08(wH&$AvZ!LAnZP4oQ?~yc)0_ld_6qb&amxMb7PZ+t zihJ6ZLt+bOZ*c3Kec^70;%pP&O?UVIJb9)j?u?3x%I&-Z(zXRN4*xt?e((F9^dArQ z=UvJw__a8AJ+t%wp!<)R|Gux|4A`b;dF9@{zC|G~+7csXzvpOSXmL;wFyqKEXLsW8 zIW5wq6z--pQ87W7fuVM9`k#|2Oby$%{f*ge7AEv`+BCI!_Pb^WXlzm3re=fc&} zj<&W~nVLuXd@?W6l9U>Axo`C!*;%oZQITa^?&nk8^`HKF@NWJr+SAkX`5yaRh9gNE zx7N*Dd*jMAyF-)DdX~MnJyz`RTwBZA+H}l(V(f}leXFEatUCC9GXI6|pI8nah-FxG zQRDLE%hFZ3oCaoM&zHZp-ud;mrIP&$m&KDaW_2!$e6h>bYOeZ3kHTlGUA0c>&buYg zzF_Otsk?UVs`h3{kPutExR7UYV?>USBFp>zcMn-N?>8{s>|iyQQALi+;wyV}+oLZuB@2#A)|*Ae9GHh>+=~KE*92b+`sw+OVhr6o1c8vYD;|d^_Ru>+>Y~p=L#38 z?_Ov&{d>W`B#8(e*$3z5$~ZNsR8D+qq~iJL{mr6#zXF~uUFRD0&GJlgeMr&6ONY-a znevwLM@^l|$%|KidU;Gba%RqhDF?Ud?FhQkpK#`a?;m^GnX`Ut(#qp543}p%oO&7xI;V zPvzs8&bd=hzKl+cy>8o<$e_T&(tOp#)NUESd)srnpFb{(H|&1BXNSwWpA7&1{CPWn z^G%=c4-cQOnl^3Pi4DMeE+@; zcW&(1{`umpTMy>he)Za5rQ+-BD>=P>&!T6WcFtLq72YU%ee2h=?^OjISOpm5YTo`> zt*&$W6L<8RFI9U(m!+QboTNTEF0QY(Jo5+F1Xi&-oEoADUt`Kt1Mb|dU=TKlImT-K zZ~iU&>MJc%Hz~c$W?*1YEpd$~Nl7e8wMs5ZO)N=eFfuSQ&^55sH82Y?w6HQZwK6o* zHZZUmdK II;Vst02)m48vp| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h40iG_7As)xCPRh;+PL()b|9sB8b+5OT zZO-XgyR@~;z+CTeYwuD1J7S$Jo;`-IjC$u^Ss^H_)am^v?U?xDN39)dZ4X*zNZb{7 zR2SgkV>S0Yp>sGl&*A2a)adJ{Z@zr`ejKd-r1IYK{Osr7|K0!2|G%8G zJbPPtS#`tnhOpS{uN#FFlsKBiE%;=t?p!tew4UMoo}WkUZYu1(7O{PbRJi5SR8^4^ zY>%>2uO--s!L?KVe4q;>r6tnm+t^xQ_4tp~^>xrJHI}Dnb*uN^=j_C zYij%pUrLtMU)rDW`$aCZ-=52D8eJ}rv%IU*zyIc5pMB4 z<+u6}GF`EY$=3eQl;TS(S7xq@`)K%Zw#p0sh38ZmX7sukN~pY9s${zEXi9Lo^?{5@ zx9@y&UE$R;Z?SsBwqFnL92atptNW^2wk7v?-uB>-n!^Wg+UqHEFtzoZn)E5C;o2UC ziwdDSTDps_OFOSxp*rtE(PK3Zl}TFSd#4K=t>3iq+GdvbA1uW8C`ag~mBg+;&3(bh zW7EY3SMCW{dXG$T;X9CHR=nuD$m`kC#SGhwwC(wDSa^7m{$htSY0nWtao$vXKiaZsOj-%-m}ct%%&ZSLZ8nTsp$@-Fw) z^<_vglKkWuD3aotqO!tRIMCt1Z1D+mf`1>YQS9PA@Oabt{0&iSKa0&>w^U>nS24rJ zh@Q#m=YroB7)o*|b2#P4IjGI7x@~RMc{=UUkC*>`3hU4NJJIx$asXc#C2)q*2x=JGd4JH|F(2?_rk{H$)>!w&6XMI2zTc!SzOomjeUiGjq^s%JI}Ir zoW1_zRmp^6=KY&XKfC$ys%Av$8D&Qtir=Ss=-~}__iuK;Q~iF4#jJd}^6q^0YimoV zuh|g&(#q(>-Y=)htfxCmHQ$?fasB=3Lg5LM`7#gwW1sY~!v5K+xt_6;=HG~F_YCkj zotCn=XQPALG*&Mz)>kq|ZFVjdd;h~E?tQ_6_0JF6e!Q8$(!uo7+HwWMs>WCD^WRsM zPrMttxh9i!>eHnWUR)D-*@RA-Jj{@(H#oCH|HP3O4-TAEuC`}emzvFS;T_8a2KE5X z5UcRKj570_yP3M{qtdjr%#^wot;>`&m76tGuysh z63=@`Wf=nlgKCLuL`h0wNvc(HQEFmIDua=Mk%6v(rLKWlh@pj*v8k1znYMv}m4U&u z&lZL#8glbfGSey| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_d7dtgAs)xiPKnKkPL()b|J?TZlf|BC zr&nq(jSOCuYP{Aa*SJDdULy(HX}V{&7>8-%sX5myO-{YKbZe34(8$vn!}b{&cnO=@87>|0!&Lq8g~6ib(%0wQRtnE zv+~q)6MiWobn&WeWwop+ugn)cQ;?a+{U1LM~wY#-SfBbE3(+y+Inaf z%CxUrr#Ef-^iH>Ao8MnPyEI=nyxh&f*mnNF{z+*+&N04e+RGY{J~2@uV%pJ5mxMM( z^h}&6xMa$b%bDw9em35V4UD9enS zoOix#!kV#Je6p!z{=8HEt5h9?nJyblnAg5;^)l0qjT#N#-qv(oIrGuI;eJE*f%*R{ zm=#&t5*Jho#h%dpIe)#r4dWc96QY+VAGq38z^B2S#eKklXV>oChCORzPH+0~v*xPl z-#?e!-xqa$H$N6ASjr&2;$2v%r>1H7uQMx|XB!Bges!c&_F9qmoSAjSmlMzbW{FtM zku81q8dvz*yo&3MvIouytE-C(#h<^uFyMqt7r%tQOm(6D2kQ-7BC|S8=cXF}W)%Lw zyl>XIQw}RHHc2y@Jj>Dz_;de}zRKPaqR7+eVN>UO_QmvAUQWHy38H@~! z40H`Fbq&ly3@xmTO|1;gv<(cb3=F1ywlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP- ZWoQi1;HVcaz`(%3;OXk;vd$@?2>@w~_e%f( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/susehelpcenter.png b/Media/Themes/Umami/Icon/apps/susehelpcenter.png new file mode 100644 index 0000000000000000000000000000000000000000..45c3c9318833af07f9fc5e8c651365ccbe6c849f GIT binary patch literal 1484 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq z7(Bq(?PRtc0|NtFlDE4H!+#K5uy^@n1_qXuo-U3d9>>p4s|>i3Dsg<_%f4for&i`H z+wm`P$*eOXt7k5{IO#MakD`-T!JY(-0}Q2sEse2md=tITJ&j0EUK*>{h#iAd&+;4jhz?N zP5$d%TM_ussCr|%HKR%(CeVCmuu;RKI)BAeaR^2{BgJ0ilw!Q5>-0oNS z(AD z4V-g&-O(~51G_mq|Bq-H%}kiO;h%*4s)eh*EK2J*J!Q_1wDt_WuJ+iQqOu0X=MS8F zeaC>y88Upf4Mit2lPxkeK@Om);2~Nn_xEeeN&?QPi7xEdd%*{Ebdw1r|YXSN@lqk z^2)#OKhAeOBtquwBfn#v?9&%)%=XZ&tF7R=S7`tE_X({XEhl%BzMtVG^*Zxf`_8Fs z(l>ogeTs7{LypY7*W#D|b~1DIekP00-GM7!gm%YE&vR>7A!w5*TO%a$p<`W}_YR&t zKcski&pBN8G1zzM0cX;}Nv9rP^gXi4eEFN3FJ+lkVtB5*FT28aGWD)Ninid4t4#a1 zu$^lORnp08-?LP{O6=g&)uxe>s$myaY`s{sJVE?u^6THi-&n;Sa=0FNWHC3a|G}KF zmZ#+ki#7-^{37L|wlAbJeT_`fQ{E%buH9GF-G7xw=}lkizk^05<>G~GWhoCtRF;0y zzEJm-ukBcf#LOAZ8y;~9rPNxezid))@0`5y>jPCy13O#(+43%0mu~Hxb&xGdZT~Ct zC*kFGD->SDu__B|mAW`Z@~fZI;uN~SdcnG4j#ksVr$zi9JIg=c^5Dn0c?F`g)%Le! ztz*9*z|Yq@B{Ahs
Ib=RdTAH#kuHFr>Xz36MC#5=xJ^O@(A=ewIE8ClOi<7&nm zG)rc=1LvH~e~~`(42xvELk^fPXjUkZvRc1+kaH(0Gq?WAl!HHXK)@^;!tr>DM zN6=RD=1H%t^$PEtwEfg#ogAWcFP+}4kiYw6s$S?99qC&wXV-cD(Vu=T`!?UrS2Ngp zEk7Lj+{x;Dy7Vox#Ozs*SG?cRxrE!deE+AD5f@B9zK>a+zh~~ZJqN$7b^W92)PLjC z74Fx%@n&1PYVN*pnEI{naq}&;MsF*%f8F^~)qHF2r^N5{J8u!?>^%AJtlES7>g(?p zXB$>ds+d?Y^@936Wjn<)9NbNFZ*<)7*yFmVC_dt|{eSCE>X{o>$u&IQ+{eJcpjzS@ zQIe8al4_M)l$uzQ%3x$*WT0zcscT>sVrXGyY-(j_rfpzgWneJvvxOmwhTQy=%(O}d zBLhQ2T>~>+L-PlpinR(g8$%zH2 Zdih1^v)|cBF)%PNc)I$ztaD0e0swZMm?Z!J literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/system-config-users.png b/Media/Themes/Umami/Icon/apps/system-config-users.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4b59b80c778e5a3056f6c3a7825c054d819099 GIT binary patch literal 1402 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 L>gTe~DWM4f6F*{I literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/system-software-update.png b/Media/Themes/Umami/Icon/apps/system-software-update.png new file mode 100644 index 0000000000000000000000000000000000000000..bf5abd6137349a72e133e088120642c0eb28b374 GIT binary patch literal 1518 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoEA3R+gLp+Y}otEnp94>Ku_M6{-Hs#EW z+>~0F9Jxs~IJqa%Xl`=eDYK`p<`Xg(ZEDFmC3EoPE0$*oO2vL2)(bxAX=nt*an&x? zb&8Ji(hP{oSW&<|H+P|!phVEG`^DNhQr*=*ANbatwEceX^Z&V@?-cv%wSQjH=PO?$ z?U-Pi6s&z^{#>2;YD_Ktxx$i1cKz3_RDag~@4SELqwA~qI!v4|M9+O8UFe)#w!qJ{ zW6r0t4c|SB9@=}C$?ZCjGF|gx_HI!gvzhG=zW=_cFv%gQXyLA6k=`ilC&vs^I8qiw zZZxiX7vK8c?}_!N?5zg8{m!WyoR*m_49;%~Sk{<#!+9ZJ2QN>~x4;+GX9K?9bvgG` z+R@XzUHD`FQ_JX8M^5}u+4U=jgM}$TdTl}tV~>yCAsa*fshJ|Vuj003_s-a7-2C!o zW(NDQf?W<>Z$4BcdT_EX-~8}*uy&K`$KTVN9&);yj>3*!-6*JF7nf>jv zRT3m)kG+a&soPny{e|VyYb|a|8S}PF*D|Mxm`Ma|_*l!%xk^s(&Cf~OuiQMoAf!;( zX)d#@^5+dZm^V~2TDRU-n|>krbAxTfL9R19gira&YOQKr5f*iz*K3z_kib-xhQ3$v z>aU%Ar*p6UYquh2^NTdG3+5Xcn2p={nx8H#n0E7KWXP3mPHN!`)+Nt~^<@-#Am|vA zbu>wO?dwf#WmmL&E=aHiES7NCe6o94oPG-%|0>buh?p<-Dl=xya+-dxVTzC4swZg$ z%9EctajvrSI`K7j;#cL}*Lo7Ii}!E-Zq^muqmeD|KCy{0KIiz(Pi841CokN*+dp%r zq=gLMmoE~6KTY}fSlRyOJLb%_?X7L{Nv*(!>p689EpH~R6)Sy^zECvs`k5d5Hi@5{ z{^ddJ#6vGj4kc|=P+!jxKUe%=$Uc$Y^ZRWCyaYC?Hboy;mprkIMQEzt4%0OrTCbNr zm?k|j=uU6)&nTIl70fI5JWJT&x7^vyj9)a!_*=1lGp~AxqW!iNi&=A*XNtJ4O)HV~ z`B1g@p#E3)I$oj5xd$IGTXMZQJ4HeBxt56(Z`9GGIs4Zf>D(hWhqpgJMr=v@9ldM& zt96R*o4c0RX$3FbwpRSw!o(Pn5JfZZCjZS#I_#8>9bfKxqi_@B!;|3`ujn`x&K1gR zEvnhBeQ>8tU+DKG=J)JmzMq=?{_VZ$7=z?a3jvF|+bP$lU8ayj*c{CzGtYGwN+wpnH${>J>R_aXcHqi?!h8yBz` z{(iJU@y`MI_PG0>55@$GBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6Tm7y_2gQH%!00RR9gQu&X J%Q~loCIC?hp(p?V literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/system-users.png b/Media/Themes/Umami/Icon/apps/system-users.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4b59b80c778e5a3056f6c3a7825c054d819099 GIT binary patch literal 1402 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 E07{Ce4FCWD literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/update-manager.png b/Media/Themes/Umami/Icon/apps/update-manager.png new file mode 100644 index 0000000000000000000000000000000000000000..bf5abd6137349a72e133e088120642c0eb28b374 GIT binary patch literal 1518 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoEA3R+gLp+Y}otEnp94>Ku_M6{-Hs#EW z+>~0F9Jxs~IJqa%Xl`=eDYK`p<`Xg(ZEDFmC3EoPE0$*oO2vL2)(bxAX=nt*an&x? zb&8Ji(hP{oSW&<|H+P|!phVEG`^DNhQr*=*ANbatwEceX^Z&V@?-cv%wSQjH=PO?$ z?U-Pi6s&z^{#>2;YD_Ktxx$i1cKz3_RDag~@4SELqwA~qI!v4|M9+O8UFe)#w!qJ{ zW6r0t4c|SB9@=}C$?ZCjGF|gx_HI!gvzhG=zW=_cFv%gQXyLA6k=`ilC&vs^I8qiw zZZxiX7vK8c?}_!N?5zg8{m!WyoR*m_49;%~Sk{<#!+9ZJ2QN>~x4;+GX9K?9bvgG` z+R@XzUHD`FQ_JX8M^5}u+4U=jgM}$TdTl}tV~>yCAsa*fshJ|Vuj003_s-a7-2C!o zW(NDQf?W<>Z$4BcdT_EX-~8}*uy&K`$KTVN9&);yj>3*!-6*JF7nf>jv zRT3m)kG+a&soPny{e|VyYb|a|8S}PF*D|Mxm`Ma|_*l!%xk^s(&Cf~OuiQMoAf!;( zX)d#@^5+dZm^V~2TDRU-n|>krbAxTfL9R19gira&YOQKr5f*iz*K3z_kib-xhQ3$v z>aU%Ar*p6UYquh2^NTdG3+5Xcn2p={nx8H#n0E7KWXP3mPHN!`)+Nt~^<@-#Am|vA zbu>wO?dwf#WmmL&E=aHiES7NCe6o94oPG-%|0>buh?p<-Dl=xya+-dxVTzC4swZg$ z%9EctajvrSI`K7j;#cL}*Lo7Ii}!E-Zq^muqmeD|KCy{0KIiz(Pi841CokN*+dp%r zq=gLMmoE~6KTY}fSlRyOJLb%_?X7L{Nv*(!>p689EpH~R6)Sy^zECvs`k5d5Hi@5{ z{^ddJ#6vGj4kc|=P+!jxKUe%=$Uc$Y^ZRWCyaYC?Hboy;mprkIMQEzt4%0OrTCbNr zm?k|j=uU6)&nTIl70fI5JWJT&x7^vyj9)a!_*=1lGp~AxqW!iNi&=A*XNtJ4O)HV~ z`B1g@p#E3)I$oj5xd$IGTXMZQJ4HeBxt56(Z`9GGIs4Zf>D(hWhqpgJMr=v@9ldM& zt96R*o4c0RX$3FbwpRSw!o(Pn5JfZZCjZS#I_#8>9bfKxqi_@B!;|3`ujn`x&K1gR zEvnhBeQ>8tU+DKG=J)JmzMq=?{_VZ$7=z?a3jvF|+bP$lU8ayj*c{CzGtYGwN+wpnH${>J>R_aXcHqi?!h8yBz` z{(iJU@y`MI_PG0>55@$GBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6Tm7y_2gQH%!00RR9gQu&X J%Q~loCIC?hp(p?V literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/utilities-system-monitor.png b/Media/Themes/Umami/Icon/apps/utilities-system-monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..84a05628a6c814140ad983bc7c682f10eeea4ecc GIT binary patch literal 1160 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CYO>_%)r1c48n{Iv*t)JFfey{x;Tb-9N#)6-(zm5%yIkYHqU=f zmh_&xQetzZ{*^7?PUVPOM62Vg)(s~QjgGDbixLc?Re7cbX0H+7yU8*` zf5|g3tBm3W*>TUmgx#7o`DN()&o6GiqXvvCy&oPe7ZsTzRW#?vX_r8%)6Uwo_c-#{)_XxmR~+QcfOoN z7=!n-AdY9xo^vqC-~S$NdMQenjj>LGVZoF|Ilh+f_kT}(xvy`pb3?#R&f=Ak^J<@K zbRKz9f2*=~&8+^otR-vK)L2eq=Qz~hk~C?#lrhI?HxB8QI#RDx4^P)ATE}A`A=}t_ zAu74#M0s=Yl4q|!EvRf*nmqB8^D3PMih3(oGkQnz_^(jSKd_+pn2Xd(;{=_AiLI@z zHVrxDg_5ouD-tbg?kqD^nTEdw^v=9FI;b(9+PSvkz|4!DDMf9vvzH6_uAd-b?OE(9 z{PJj>+0k_$FDS zZN>Uel?BP%`+44_RKE`A_-J%YqUV}~?8WMJ9bB)@&bIjzvBSpRdSlzem2Y~P&GY@9;*RJx`tzy|K;NCT?hSXIQkk6lr{3JrS$RdKQC^^h@#u*{nI%&^H2-t% zs7g(Hy{~WY-s-aLfjhT#o!T1eI&$h%S>OAtoY{$j=z2b2-|2o@_{oeI|`sdQp za{0S;kJ|S=cCgxhu-ZX%1Dgi(ojIoEtor}+A4@)v`oKQn+**b3xQT|-e7ZXBTK#2x zIlFP(X85kH;OI#yLQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd z45odyFhtRio1c=IR>@#wU}&goV5Vzm9%5)@Wn^w;XbjQds2484z`(%Z>FVdQ&MBb@ E0J>EEs{jB1 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/utilities-terminal.png b/Media/Themes/Umami/Icon/apps/utilities-terminal.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d852c2d56c96836241a570f297291499862d71 GIT binary patch literal 1203 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/xfcalendar.png b/Media/Themes/Umami/Icon/apps/xfcalendar.png new file mode 100644 index 0000000000000000000000000000000000000000..fc012d70718ad3d2ec600feed780d388afa1ae27 GIT binary patch literal 915 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wDhK$4xH1q8`~rMK!-GS^gM&f>PnTwGjAN=kWoc|}DRa#K4Zp= zdGqGYpFe-`;>AmrELpmA>C)wkmn~bieEISfD^{#rxpMXD)w_1>+O>Pf!Gi}6A3l8i z`0-PxPMtY(=E8*wmo8npeEIU#t5>gGyLRKoja#>F-M)SM&Ye4V@7}$4@813U_a8iX z@bKZoM~@yoe*E~!lP6D~K7ID=+4JYmU%q_#>eZ{)uV24;^XBc_x9{G)d;k9ZhYue< ze*F09)2Gj$KY#i1@)aE`bfTh!YgV5nevDFsr;D~52;9+RkEjabzSr&$v{uL{P z8D2OXy~5nUq_s?*;Y1|6*57v}qMj}}=iV)FaB*^B3YpO1qQssoqgq;%L-qNS&M3ZeXH3czGPZrGuJos*PHHE?f>=Z&iT{z z^Z&0%sGd5ZJaqm2JN306JzKZ9gf5ctzayu&e&wOfrrk#smqyq3AOHBRQNx;{;b+>? zq}}}*f-`sTKQ6fH8!y8JTa%VcQ(YV`-`cf?W0JsyjJ1pm3=RKc8tNLD=^C1c7#dj_nOhkeLo_(*g$sb9z|+;wWt~$( F69ALPcg+9* literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/xfce-edit.png b/Media/Themes/Umami/Icon/apps/xfce-edit.png new file mode 100644 index 0000000000000000000000000000000000000000..7ed1d9916ba77df7b761d6aed37575395a693140 GIT binary patch literal 1007 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&j9Muu5)Bp4VN)dGA%Tp36N9bK)}H5Ch+Lm3zte4NxmLPD~`&2n>d^YZcvqAg2G zN=i#h%gf6vD=Vw3tLy6OI=Wi>Bbg>mnlxp~l-YHGbLPyM-xxB#DP;cq`3n{-SkxN2 zs5NYHYv|&|iaNyADt|JQ=jvP61Vt&f0Q>RWZOg(-2^qDhf&aTcsw=CoQ zs?76i3ol;0cxg@6<;$0^T)A@l_U&iSo;`p5{N>A+uU@@+{rdHrH*elPJ@WS1(RVM7 zy?b@+-Me@1UmySc`SX{n)4x30^Y`!H|NsBXP5gF)%QSdb&7FUQfqwP_w_s{aP3(mV9(EhP@?go9;tPA;58&4_CcyB-LKnI86{oVJOcT4$~Jp5ZG zol|W-EkjQ?=KbN9skPeE9A?aH_ImmwM_EM6-z0xoV%ge@6+5GsuM+T__hOe`68pus zG8dQJ$aDMk;QkTLvnoFxZT_-YsxeL2W}?;wjn*kUT)dxu+GVGB;cJcF+Sc=zI20c< zIdv@4QvS(W#2>OvX2Tjy1_p+fs*s2h=ltB<)VvY~29BA&J&s(53}T3BbJSD)6)oZzEVyr`$6T?QC2liM@A|LlQ-WgF7nW## z&+l^8F$;@eOJQJOP%UwdC`m~yNwrEYN=+5@$ zGBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6Tm7y_2gQH%!04Se%y85}Sb4q9e E07{Ce4FCWD literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/xfce-filemanager.png b/Media/Themes/Umami/Icon/apps/xfce-filemanager.png new file mode 100644 index 0000000000000000000000000000000000000000..3597ca1e1642608a57b12124375aa8640f659374 GIT binary patch literal 559 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U@&kNATp5S}=}BtA0V+ZM${EROIqBNPX-ajO3I}TiFKlnRw5#>% zo{sDLdv0wly}hmM?$K%Yk4?LOeA=V^O^**WJw846@tJu~KxqEUi_8B1|L?o{wIc%q z1Aj@7UoZm`3oARHgru~Rs(S2#m5c9gsbXMYU`+CMcTw5G_H!l!1H%GO7sn8d;JJNo z`I-!PT(_U=^x4w!Iw0i3-ZkyKFN^;2cqTj6AG@!-_z~lz zTbt0^cV6|*0hMzuF4NX*ou+d!Qz+>D206}|e}8y2=y@e?Gd?z@wJmcR%hD@ZZknt? zH4k|!8zg_59#x#jz`&qd;u=wsl30>zm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{t zU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv?BXcW5V~7Svy>J0gJbAkMxvX8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U-2;3=Tp0*~j;>Z@l#`cPP?X!$Qs2?l+CQ;p+47|;S1n(;X2q&C zD^{&tv3kwQ)$3NRS-WcOy44#ttlzM4{l+aDHf`FtY4gS{TQ+asxoyYJ?YnpH+Ou!> zfdl&w9Nd54(EcOG4j(;w)2Gj#K701;`Sa&5 zUc7km^2N)SFJHZS_4@VeH*em&ef##^yLa#3zyI*z!^e*wKYjZ2`Sa&5U%q_(`t{ql zZ{NRv|MBC;uV24@|Ni~w&!4}4|Nj5~KkZ^aD8htGg8YIRm{{021f*p(bo6|D0|J94 zEqb5*{ShdB7?Zr+U2@Ja8dx(hFq(V1IEHAPZ@u&~xXFQ`J@G(5=exK2^4FeObbHa| zEt^af6j(x-I@kRDZ@=APTdVQc-&;Q08NWHh$MW%h#Do5~FZNEp5a0fVF=N)QWo}F5 zOJgS=_4>K}3xmXy_S>)j_$M-65t-tB^tAE3<4wDiIG+X?)}NbyrdOt(yTLj!E;7Qp zBKw@5^M$s*K8Aa@?E3xd;wPJY>+Xk!a|`c9&wFhq`}?WekqdivaLu~9;(AfL8r$ut zeeP@1q^jO+S(UtD&GVJYeUGNcLWEOEv4?DEA2mHE0?ElM!(O-?>jD%ECWujhS9 zJm7`xm#? z7n&6|Eo^)cEHc-_$fvxTXR^< z8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB p1|tJQLtO(iT|@H_LnA9Ab1Oq*hz3W!Z~;)(@O1TaS?83{1OPvs&z1lH literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/xfce-man.png b/Media/Themes/Umami/Icon/apps/xfce-man.png new file mode 100644 index 0000000000000000000000000000000000000000..45c3c9318833af07f9fc5e8c651365ccbe6c849f GIT binary patch literal 1484 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq z7(Bq(?PRtc0|NtFlDE4H!+#K5uy^@n1_qXuo-U3d9>>p4s|>i3Dsg<_%f4for&i`H z+wm`P$*eOXt7k5{IO#MakD`-T!JY(-0}Q2sEse2md=tITJ&j0EUK*>{h#iAd&+;4jhz?N zP5$d%TM_ussCr|%HKR%(CeVCmuu;RKI)BAeaR^2{BgJ0ilw!Q5>-0oNS z(AD z4V-g&-O(~51G_mq|Bq-H%}kiO;h%*4s)eh*EK2J*J!Q_1wDt_WuJ+iQqOu0X=MS8F zeaC>y88Upf4Mit2lPxkeK@Om);2~Nn_xEeeN&?QPi7xEdd%*{Ebdw1r|YXSN@lqk z^2)#OKhAeOBtquwBfn#v?9&%)%=XZ&tF7R=S7`tE_X({XEhl%BzMtVG^*Zxf`_8Fs z(l>ogeTs7{LypY7*W#D|b~1DIekP00-GM7!gm%YE&vR>7A!w5*TO%a$p<`W}_YR&t zKcski&pBN8G1zzM0cX;}Nv9rP^gXi4eEFN3FJ+lkVtB5*FT28aGWD)Ninid4t4#a1 zu$^lORnp08-?LP{O6=g&)uxe>s$myaY`s{sJVE?u^6THi-&n;Sa=0FNWHC3a|G}KF zmZ#+ki#7-^{37L|wlAbJeT_`fQ{E%buH9GF-G7xw=}lkizk^05<>G~GWhoCtRF;0y zzEJm-ukBcf#LOAZ8y;~9rPNxezid))@0`5y>jPCy13O#(+43%0mu~Hxb&xGdZT~Ct zC*kFGD->SDu__B|mAW`Z@~fZI;uN~SdcnG4j#ksVr$zi9JIg=c^5Dn0c?F`g)%Le! ztz*9*z|Yq@B{Ahs
Ib=RdTAH#kuHFr>Xz36MC#5=xJ^O@(A=ewIE8ClOi<7&nm zG)rc=1LvH~e~~`(42xvELk^fPXjUkZvRc1+kaH(0Gq?WAl!HHXK)@^;!tr>DM zN6=RD=1H%t^$PEtwEfg#ogAWcFP+}4kiYw6s$S?99qC&wXV-cD(Vu=T`!?UrS2Ngp zEk7Lj+{x;Dy7Vox#Ozs*SG?cRxrE!deE+AD5f@B9zK>a+zh~~ZJqN$7b^W92)PLjC z74Fx%@n&1PYVN*pnEI{naq}&;MsF*%f8F^~)qHF2r^N5{J8u!?>^%AJtlES7>g(?p zXB$>ds+d?Y^@936Wjn<)9NbNFZ*<)7*yFmVC_dt|{eSCE>X{o>$u&IQ+{eJcpjzS@ zQIe8al4_M)l$uzQ%3x$*WT0zcscT>sVrXGyY-(j_rfpzgWneJvvxOmwhTQy=%(O}d zBLhQ2T>~>+L-PlpinR(g8$%zH2 Zdih1^v)|cBF)%PNc)I$ztaD0e0swZMm?Z!J literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/xfce-terminal.png b/Media/Themes/Umami/Icon/apps/xfce-terminal.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d852c2d56c96836241a570f297291499862d71 GIT binary patch literal 1203 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?TRmMILp+Xeof?@D8!FPazxeyU;5^?0 z9j=QNx~8tOxF{|d-Q{srX%W9zmgtd5b`}jykCI)wI#?&ZnEb_8^M?TYm!nn>t_WFQ zQ1Rssn-r4ud(xe>9Xr$SWdAHUXS?&e+6Bg#f^+lu{_p=+zrNP&&-sUpJiNS9tA1z8 zckPgU6w}|KuxQCzXV(Iy4z5Qkv)Kh5Ri(3UEqcY>BNFp*>cfW*FED-i8s5&vmRD7H z+Btgl)U47{sa<7dtD3S_hlWgD_C9?7-*>NLlP4$hJ}BiDaQ`^3UH(pxtzliy$B&)U z3~cm;Up7uZ8@sChciZh7|Bg(adU5gM-Nj8BWwy3kr6w=;D}K;@{(}vFNcg01Rul0> zt7I=-TB!8u#^&Fq?{=pPPufw+Aa+2Nli`>|NXzznvS(DacO^0EY8$-|yfF1^|F^n6 z!!`qsf=4Gfg{BKdWUss~Zt>;xMzeymj*Kjd#`|(*=XB4UJ@2NFj+5kKYr1}^OwI!KS=Tk+;HsydtDsI$|jYm$!k*oJyLS#^M5jP zxtw)~!^wtbw$uNF9xVxFW-ytq)U)wNo$>woJqqV^jHawsZM%2x_`&;bKdPUFaA~bn z?R}=i-D|aU(c&6k|J$Bk)=M|}ike&xTF|v|+S1n4b93h>UN>I<>3!?wJ^SCwE;~P0 zkz;nIl4XLp-G!LG4cnG3=vC-To+G@*P{g~f|NH*-t*&hI>zn=UEe~vy{T{Shq%o;o z^(`~M#x$N|QbNy*s*PDW3ny*T*E6~C^NT`%&b@ONh1+lZ`k|KgT0GM_NOr;7$&K>K zy{hLBsag$V$K4ztKDJ zmzD(o`OgJ@yL7!c4hyV*(0J(Q%Bp{k=XV)RmySE=&A+gCE{l?r(D5^8=A=GZJ@HF= zx#+@GKK|zewk`EznvzhKx9w6))U)UEb-Qv7u*Vt6+| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_Q#@T9Lp+XOo#LAj6Do4NzFci)<;h|- z-?TFsXJ?o=CHv&&n(DD^ZBp$>aPV?;R9p}yzD`T=kyoHV`MVx&^J}f!F7Zv<_3~K1 zNv^5cL=&^iTYQbCmMxp>^Zaw|{?|!yPASV~2HdH5@Zp~I_j#Xp|1Yi(|My-kEZ*+# zo5|Z7KK@_v?%>9Y{QFokqQqt7<>cG~qj)cy%)KSkIi+EWhsq_^&eumBygJ|B2nuA% zQkp2ip2ff*^YdGV!Q_(+1!|E>>pAnD@h+KC+Ao!zopgVl!N-a@8R^y&J)XqBHf``x zJAC2<$GX=+mPKt2o99p7ucn#p7VB`W-G3to(;Lu*Gn_QXK&Ey4(RS*+yCw3=Z}S#9@a+Olzy?!NprT+ z^xbClewZw z_e9pDDMfFsYyWE9m;arY`~HE0z~N6H(}SYBb6-oRlr0Pq|KO@Lv0}E{v-j){rT-Sq z+3)Ac{9?hIqv_&aH@5w~`l_t3-ALD=qU6oqlj-y7!uIZ}u*{NZJ8yC}%UY#nX8H#~ zM!VMgX{PsT{}-4~_+Il^k@>8H!Q68`BHgXw-`>@p+rDX&)53@YCcK9h3W%RSds$HW zfKk^0p$4Xmdka&Q8<=nGS~vgSui1xp{`=P+|E@~m-o@LyeP3quccc{EV_{mGB@&$( z%^K0LZ{H6$U8W4yTMZXxv){LPV&NCC>yzF7`|{glf4h~R>2*K+iL+t8njVj=ZQ(z0 zf5zFYYu2&b{OmH9-oHF1r+&rfd8fP0H}@&?`ZqpYX<*L1BHhvd?kep#Z_@>jcq8|B z?$7w7%1`8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9Ue+2l1xH6!Ej;_}9%v5>LHhGU0d5`9RAitoHfW+kZz##vCK)<+z znDEHZdGqG3UAHDVH6bQ0Dj_L$$&$tM=FOcqZ|?m0^VY6iqu|wUlDfn+b+K9cQj4@j z7MaVevR7E=tgy*gXqUg*A#a64!D{E?buKw`-OD!yH*OCN4~~cmi)h#q866%K6A|6A zEha81wrqNA_kp;CnE3XciOKPa>FJ66hm*SYBv(yJO;1j(o0HnLD|Pa*w7z|reS0#e zpUf(*$eMT{d&0h)i92$q9L~$n$;;2pE6B;~-;y``O#b8p`BQcm)^`-nI94?MaB*p2 zN$cd&*~crUZK;@Xuwve+%Bu3pzLhn#l{Jgb*49?nExpj#Sl`%G-?ZXlOG|V6nk$`M zojtRbO_VKIQ zx^>IeZJW1k+qQlC_8mKR?A*C?*REZA_UzfackjOadk!8vc(W56%o;-c}^u>!8 zFJ8WW`SRtfSFc{be*O0C+qduDzkB!Y{rmUtKYaY~;lsy|A3uHi^ce)ceEIU_>({T} zzJ2@t{rk_KKY#!J{pZi0zkmPz|Nnn|(cU8r3=GmGL4Lsuj7-cdnt@Fdrp(`X{^FIJ zw;#Uy@bU8(km7R-@@6qGFfb;0ySpquuw9#(fq~KA)5S4FBe?Y9bL*x+iQ^yDtKZ)> z++^vYqFnuc?{_`zevM6B6Q^zx_GJFQ?Dd?>#htHTeg5|Q)xLU>r<3@9+s6ytxL)-0 z=ej?yW`8_d*7B)of7{Fn(({{C)dWO+PWUrRsCPDp8ZYGFnJ{Ti*Hz<%A~y^t%xm0g zypU^#;RM$b2Yt^ z?`@pN#axwC`5sS=V6NF15uH^Wb~MS5GuYIHy=B8@`~GPjDk^8TSU%3ZXySW_$*?_N zTQ2ZKijmA7+1(%Cf3=$1SG^!;W#6@j?+@wR+Y_~M^WH@#wU}&goV5Vzm9%5)@Wn^w; WXbjQds245(%Ilu4elF{r5}E+&Stir~ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/xfce4-ui.png b/Media/Themes/Umami/Icon/apps/xfce4-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..019da41feb07d80bba9a883f8625275f4297ac05 GIT binary patch literal 1132 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_d7dtgAs)xiPKnKkPL()b|J?TZlf|BC zr&nq(jSOCuYP{Aa*SJDdULy(HX}V{&7>8-%sX5myO-{YKbZe34(8$vn!}b{&cnO=@87>|0!&Lq8g~6ib(%0wQRtnE zv+~q)6MiWobn&WeWwop+ugn)cQ;?a+{U1LM~wY#-SfBbE3(+y+Inaf z%CxUrr#Ef-^iH>Ao8MnPyEI=nyxh&f*mnNF{z+*+&N04e+RGY{J~2@uV%pJ5mxMM( z^h}&6xMa$b%bDw9em35V4UD9enS zoOix#!kV#Je6p!z{=8HEt5h9?nJyblnAg5;^)l0qjT#N#-qv(oIrGuI;eJE*f%*R{ zm=#&t5*Jho#h%dpIe)#r4dWc96QY+VAGq38z^B2S#eKklXV>oChCORzPH+0~v*xPl z-#?e!-xqa$H$N6ASjr&2;$2v%r>1H7uQMx|XB!Bges!c&_F9qmoSAjSmlMzbW{FtM zku81q8dvz*yo&3MvIouytE-C(#h<^uFyMqt7r%tQOm(6D2kQ-7BC|S8=cXF}W)%Lw zyl>XIQw}RHHc2y@Jj>Dz_;de}zRKPaqR7+eVN>UO_QmvAUQWHy38H@~! z40H`Fbq&ly3@xmTO|1;gv<(cb3=F1ywlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP- ZWoQi1;HVcaz`(%3;OXk;vd$@?2>@w~_e%f( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/xfwm4.png b/Media/Themes/Umami/Icon/apps/xfwm4.png new file mode 100644 index 0000000000000000000000000000000000000000..2a02a2e16c9052ee769755512ecc4154a6191bd2 GIT binary patch literal 714 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2HCi#=T&Lp+YZoxImiI#9sv{2QxQU+?xy zPXZkj8Z$1pmUk#k)bJO$=lL?n`=-%+K%~eHR$<6RCMsDAHzn1p)s4HJs8BEXcupeP;{B2(zbH7K5+oWQ} zlj|}wUilopZmw*0eS37NbkWDZe^^#9pWz8T%z9)stFG#PJ_Fsd_X2T~Q=hOq$XSK* zep=QY5-gUC=!z#h-Olw=+xS$#G_m2T!NQsBkho@V)04 zw##Fwf`!M4eyJ5|g6f}55AUk+?N`8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wDhK$4xH1q8`~rMK!-GS^gM&f>PnTwGjAN=kWoc|}DRa#K4Zp= zdGqGYpFe-`;>AmrELpmA>C)wkmn~bieEISfD^{#rxpMXD)w_1>+O>Pf!Gi}6A3l8i z`0-PxPMtY(=E8*wmo8npeEIU#t5>gGyLRKoja#>F-M)SM&Ye4V@7}$4@813U_a8iX z@bKZoM~@yoe*E~!lP6D~K7ID=+4JYmU%q_#>eZ{)uV24;^XBc_x9{G)d;k9ZhYue< ze*F09)2Gj$KY#i1@)aE`bfTh!YgV5nevDFsr;D~52;9+RkEjabzSr&$v{uL{P z8D2OXy~5nUq_s?*;Y1|6*57v}qMj}}=iV)FaB*^B3YpO1qQssoqgq;%L-qNS&M3ZeXH3czGPZrGuJos*PHHE?f>=Z&iT{z z^Z&0%sGd5ZJaqm2JN306JzKZ9gf5ctzayu&e&wOfrrk#smqyq3AOHBRQNx;{;b+>? zq}}}*f-`sTKQ6fH8!y8JTa%VcQ(YV`-`cf?W0JsyjJ1pm3=RKc8tNLD=^C1c7#dj_nOhkeLo_(*g$sb9z|+;wWt~$( F69ALPcg+9* literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/apps/xscreensaver.png b/Media/Themes/Umami/Icon/apps/xscreensaver.png new file mode 100644 index 0000000000000000000000000000000000000000..0543d365d00e941b596f815a7383ddb0391411a3 GIT binary patch literal 1116 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_ah@)YAs)x?PKnKsNfl|EfAj1)KcTa; z?ye08(wH&$AvZ!LAnZP4oQ?~yc)0_ld_6qb&amxMb7PZ+t zihJ6ZLt+bOZ*c3Kec^70;%pP&O?UVIJb9)j?u?3x%I&-Z(zXRN4*xt?e((F9^dArQ z=UvJw__a8AJ+t%wp!<)R|Gux|4A`b;dF9@{zC|G~+7csXzvpOSXmL;wFyqKEXLsW8 zIW5wq6z--pQ87W7fuVM9`k#|2Oby$%{f*ge7AEv`+BCI!_Pb^WXlzm3re=fc&} zj<&W~nVLuXd@?W6l9U>Axo`C!*;%oZQITa^?&nk8^`HKF@NWJr+SAkX`5yaRh9gNE zx7N*Dd*jMAyF-)DdX~MnJyz`RTwBZA+H}l(V(f}leXFEatUCC9GXI6|pI8nah-FxG zQRDLE%hFZ3oCaoM&zHZp-ud;mrIP&$m&KDaW_2!$e6h>bYOeZ3kHTlGUA0c>&buYg zzF_Otsk?UVs`h3{kPutExR7UYV?>USBFp>zcMn-N?>8{s>|iyQQALi+;wyV}+oLZuB@2#A)|*Ae9GHh>+=~KE*92b+`sw+OVhr6o1c8vYD;|d^_Ru>+>Y~p=L#38 z?_Ov&{d>W`B#8(e*$3z5$~ZNsR8D+qq~iJL{mr6#zXF~uUFRD0&GJlgeMr&6ONY-a znevwLM@^l|$%|KidU;Gba%RqhDF?Ud?FhQkpK#`a?;m^GnX`Ut(#qp543}p%oO&7xI;V zPvzs8&bd=hzKl+cy>8o<$e_T&(tOp#)NUESd)srnpFb{(H|&1BXNSwWpA7&1{CPWn z^G%=c4-cQOnl^3Pi4DMeE+@; zcW&(1{`umpTMy>he)Za5rQ+-BD>=P>&!T6WcFtLq72YU%ee2h=?^OjISOpm5YTo`> zt*&$W6L<8RFI9U(m!+QboTNTEF0QY(Jo5+F1Xi&-oEoADUt`Kt1Mb|dU=TKlImT-K zZ~iU&>MJc%Hz~c$W?*1YEpd$~Nl7e8wMs5ZO)N=eFfuSQ&^55sH82Y?w6HQZwK6o* zHZZUmdK II;Vst02)m48vpKu_M6{-Hs#EW z+>~0F9Jxs~IJqa%Xl`=eDYK`p<`Xg(ZEDFmC3EoPE0$*oO2vL2)(bxAX=nt*an&x? zb&8Ji(hP{oSW&<|H+P|!phVEG`^DNhQr*=*ANbatwEceX^Z&V@?-cv%wSQjH=PO?$ z?U-Pi6s&z^{#>2;YD_Ktxx$i1cKz3_RDag~@4SELqwA~qI!v4|M9+O8UFe)#w!qJ{ zW6r0t4c|SB9@=}C$?ZCjGF|gx_HI!gvzhG=zW=_cFv%gQXyLA6k=`ilC&vs^I8qiw zZZxiX7vK8c?}_!N?5zg8{m!WyoR*m_49;%~Sk{<#!+9ZJ2QN>~x4;+GX9K?9bvgG` z+R@XzUHD`FQ_JX8M^5}u+4U=jgM}$TdTl}tV~>yCAsa*fshJ|Vuj003_s-a7-2C!o zW(NDQf?W<>Z$4BcdT_EX-~8}*uy&K`$KTVN9&);yj>3*!-6*JF7nf>jv zRT3m)kG+a&soPny{e|VyYb|a|8S}PF*D|Mxm`Ma|_*l!%xk^s(&Cf~OuiQMoAf!;( zX)d#@^5+dZm^V~2TDRU-n|>krbAxTfL9R19gira&YOQKr5f*iz*K3z_kib-xhQ3$v z>aU%Ar*p6UYquh2^NTdG3+5Xcn2p={nx8H#n0E7KWXP3mPHN!`)+Nt~^<@-#Am|vA zbu>wO?dwf#WmmL&E=aHiES7NCe6o94oPG-%|0>buh?p<-Dl=xya+-dxVTzC4swZg$ z%9EctajvrSI`K7j;#cL}*Lo7Ii}!E-Zq^muqmeD|KCy{0KIiz(Pi841CokN*+dp%r zq=gLMmoE~6KTY}fSlRyOJLb%_?X7L{Nv*(!>p689EpH~R6)Sy^zECvs`k5d5Hi@5{ z{^ddJ#6vGj4kc|=P+!jxKUe%=$Uc$Y^ZRWCyaYC?Hboy;mprkIMQEzt4%0OrTCbNr zm?k|j=uU6)&nTIl70fI5JWJT&x7^vyj9)a!_*=1lGp~AxqW!iNi&=A*XNtJ4O)HV~ z`B1g@p#E3)I$oj5xd$IGTXMZQJ4HeBxt56(Z`9GGIs4Zf>D(hWhqpgJMr=v@9ldM& zt96R*o4c0RX$3FbwpRSw!o(Pn5JfZZCjZS#I_#8>9bfKxqi_@B!;|3`ujn`x&K1gR zEvnhBeQ>8tU+DKG=J)JmzMq=?{_VZ$7=z?a3jvF|+bP$lU8ayj*c{CzGtYGwN+wpnH${>J>R_aXcHqi?!h8yBz` z{(iJU@y`MI_PG0>55@$GBB9-*}@P-LvDUbW?ChKk%6J1u7R1Zp?Qd*k(H6Tm7y_2gQH%!00RR9gQu&X J%Q~loCIC?hp(p?V literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/applications-accessories.png b/Media/Themes/Umami/Icon/categories/applications-accessories.png new file mode 100644 index 0000000000000000000000000000000000000000..6725141da6261718453ef85be8568e8050e83ffb GIT binary patch literal 1471 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/applications-games.png b/Media/Themes/Umami/Icon/categories/applications-games.png new file mode 100644 index 0000000000000000000000000000000000000000..0266dbce481d486a9e305411753caba6d75b5c2d GIT binary patch literal 1261 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/applications-internet.png b/Media/Themes/Umami/Icon/categories/applications-internet.png new file mode 100644 index 0000000000000000000000000000000000000000..29c229031fc60d79d15d41b4fcfbbf636bd55870 GIT binary patch literal 1532 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE|2$nBLp+Y(oto`4Ib7oS-ZT8ghBsAj zZ(4X@j&a(#mdM^+mQFi5773*}Ejzd>Cyy&+?gAd&S0db@Y#pH**S#8zT=yu5PK{z* z>KetWS)#kbbqUk8ZNgDi_5ZEc{*IVw_3I0-f(HY%My#vbBt*epb$em2CyymOVUm+>atnzj?S_ zRDUeRT(NxP#^l7Tbp=zZH_C3!Wq$GU`s2=fOp|+?x|`Hvo*d07UEp}H-8XaVysIt~ zuAb?&`t@c$!@`;BtzMq#_Ft64EMoO|?2MBuj(9RKxbB@Wnc*16gOvwaLg(|{Wa50( zZ?32@uRroM|NJ^lhg-{T?SEdeck!cDOi4ePSIA2n<}iIpOE|-4vz=janE00SJ`*Ot zT`BT?k;{$Fu%pQ(_vD#&|B_2{-<11LP||oWQ$?un_3bHFlH9+Eid? z@lJZ7X~fBE77OGTFR0#WoA4u; z<4%y*neGh<$&5^rq9<&1k21z_^UYfmUdimUWbNst=eF21U45oBR)Yi_ zZoKh3UnsNrR$=Tq$A?$tKFnqhs9G%lGhAM2=@#BjR-rXs>(n+sS5i>pU-?sM!;kF( z^Pe+H?0NQJbH|r&lTP0?=()Av%8L)|mQDTb^OgVSNSDpYaJl9xYILqFdH(|D-CijR zmd87$OkxP!&5|JedH#*9^SabMr&X|?iK(-&T)gDsr8}k_!lva19+@gyJuUw-DQWUb zwu5%79gO_@WLejG=wuyr{Ff`EnSE>~8*A2)yB?2X7T?KjW#Fr1oxr&NP}a%IbBgD# zd%sy)P$Il->60le$3Gs>*~gi>UvSYk#y5{o+pOAovsrNS)F)>gvlhzl54*SYS~{PZ&^&APbs;^Ni*{M?3R?Y|u| zN|i&xj_Nw!Nb{R&J^yiO4}Y5L63x4NQ;WaxW<6ZS#G)RS%=%gA(Dy4!DnFT$F6mG9 zk~^~ECfoAMtn7jJ8}i<`xH?-;KG~xnm*2-dHf6$MGj08QwY8FFJa8|IN7P z@4lB@GK^%h4AQ<8s8iJtyVPinx3E>XQP-Djp`wtJYnrlU_?|QLy8Z6@WBxUCee3p4 zyZO&{XXFN)S?F!-^zGY^*5xz*hAjzx_x#I)Df9TnkA>}h?%)0OJahEz5yLxFq*ebiukY{wvC(xw3j+g#YKdz^NlIc#s#S7PYGO$$ zgOP!efv$n2u7O#Ip@o&PsgOxAp)4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/applications-multimedia.png b/Media/Themes/Umami/Icon/categories/applications-multimedia.png new file mode 100644 index 0000000000000000000000000000000000000000..41374e91b5385e8351e78ac3f9680bbdf132d544 GIT binary patch literal 1428 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4(>z@qLp+Y}of_*Sk}lFV|K`lOGgHG4 zII+eE*Ig0KR_Nt$^f5`fI92|l##-NRPDzW*_h$I$-!jR)G%IdPX3)+IlbFb@tXZo} zH%!gwH1rMbHEqjDN(yKRlWb&tv+Kma^Vhk{I5m=jF3)>%W={S-!WP@i*Y z^`4lxz@7e+mXxpU3Ys-_>PoREPj8-a`SZB1uP^z3*MdEZK4trcUQbC+ot7~x?!kuJ zZ+NZCwM#2u_ z+e1S`KUUcE^!FEkeHCiryLj6+vDoXHk=yMAXUz)uTeqJf;2Gn)K#`wo&!ouuY|$M^j*`hI4n@ue3pH0I8oyJh?K%QtR#)YjTMJ3IfVv6GYPe_{2z zS(3wti}CPDmq$TLGk<7Ga{hny{de;Dc}M0jom4Wkwbk8uH;?D=gL8AOP0YtC-+UY+Bg$&2TIcV9ele)^$@?nf5g|Mj=-b86{qWscTm|M^;-*0VP|dU<<)tgz{P z+q*kOL9fMw!N1Y;Ks7_eR{c|2TH+;4x^)rRBYX=D=Q;nW9M2~TApm< zm7e0DprGP8Dc5ZFp2Ej&*?xX~5^{3e?(8lc#I{Gh^AwcXxMB zp0%v=yZxUG{tXitHptji1iXFw)-_N>M~vHVdGM?E@2Bg>>^N|3ZS+&^@O1(_Y?|8I zhYfhDs;i&2wXxOM$-jO3w#7;D>64R_Pi#`P=ha%?yl3h;{%_mgTn-7HdTzeGzlF@P z*I$bs9AKPhQ|V+NaU^g1|vm&NdTG=C>Ud`+rvY z5)*6kF^}|nUeA}mzP9e@y6hCa;tP9LcXm27tm}I}vBfhXho`!YclTMh)A#mDDD$7( z@N&=HONUN0v!}eUV%6rJwD>XO=^2KfVt5$}EZ+FIrWIJoY}vL=spWu)FBdnrrj}Mx zMn;BS__WkXC!eg*GF*Kqal8J#WtqXDqN}fZm6n=bUmt(`_1B`;*L1tOy9;;5n3$R} z8WEXk~M;|TxmQOx($Z1{dZZ{h_caFw&nVqVlH%jKF7@h2swYI4JWsK z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq})w)5S5w)@GyhV}eR=Ztm6^}DCtXTB(fVXsy`8S)Xkzo^NRxSG& zQ?T^e+S1D9Dc$yaZv2sNa25Q%WA5MZD)+6s-oBo5bhUBYs@dnJ>RjJb`~TMCue`ly z_3id+Zu-*0$S}|O{LRn%*S(dVCG|>nhRfM)N!w1$FHHA#Uj97rneXnOy47(j^H1un zE6D0H`Rw4}e*0cHDu*Wbr3 z7vyWrvk_omXc1^pZ?RF-;|gx_YFA@(4z8tIx}%>Vi{UU8jotWZhdkv06Cz zq_Fq<8)EsVxNF>#Ux9 zpOrbzG+9ID@SGJT{Em#_vf^!WxB9u?%X{2j)VFQ#^h&9{o;9^9#1}e-|d%P)zq1ccjPWUUYov)dm3v5%gyaweNS@u zR8kA8=IolQlgH~j@#{gIYp1Kf>aTmHyOecLdX*nb<)cz|#U5kX1K$>;xZl2aTHUX< zW!kaYbtfYOE&rbl*PA`}fJFOViD{|PsTbaTELya2>6Z(;-7O-gO)ZHtvxza8@O1C* zbGO;em#v(2Bx&P%TefAR2HWA<4#cS^J6-*&St)gPIjA`Ia6(^$*v2R z+!;9-^d<`II`r_vhRj)0_00DlHZoC?7JKk5c$z?3TH3KSYxN#xulBYu)GV4bWf$*( ztv%D486sE{UT=K-wz#>uxoO?&Wy`dtEn8_a)hlw6O61CrQ&fKfw;waa zF&xle+q8tSfZ-E^h+L-aAH(;L%`Ig3?qBL&wTkOwh0>Rs%hUatUN9SQIn;_IDCW=C zzsY^Tc7NK3@AnfKGCnKnaphX-{__7SensIGn>_op9SjT%swJ)wB`Jv|saDBFsfi`2 z3`Pb<2D%28x&~$;h89-FrdEb#+6D$z1_skUTNt8f$jwj5OsixtGB7mMH89gPG!HQ} cvNAHaGBkl`Xz9$H2P(%rUHx3vIVCg!0G--L%K!iX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/applications-other.png b/Media/Themes/Umami/Icon/categories/applications-other.png new file mode 100644 index 0000000000000000000000000000000000000000..e976f2f671287f746530b368f8977ecfc8b6b0d6 GIT binary patch literal 1130 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^;4)5S5w z(PwSiF4MOmCCN#*OJgU8PFFMEX=(T6TIlS5C%Y>iJl@U!{7>Ee?{ljk{NFN(Q)&{Y zl$NEk=mG1-z=SPAC%aheKKR@=KECXB{LeiRohgxx{8G8~|BlQLXZs!Y|KCNv*M0Yt ze@^vEQT=e^@_WDMo2M%$wFaCrsI02ru=M+jE|pC(dvdQYJacvP`!#0oOeSt~- zRI>Xk!L^!xe>(!4*p)lBaopX;sw=khqvP_gEB9>@+RE_n$-k0kf7ngctUHAqT{ukb zn?!S;{+hYnQIpB{`=Z089!ofznH~rJN#3;Txb?+GW{f{B?x zw{XJV^Lq>z{hYhyon4T|vhz2;&9YD{7cE>>*nUr0!hb-NtLCCPWkqCX zkcaPXPhH0NkO$t!>Q8RSd-7s41LHD$BNb&l~q;*qoxT6=mONp2JY_ zn*E!M_3_9AwiCY$|66aL!f@cz!(t}(0=YQ%;gLK>X zJ?tX26TAOg{rmh?+~j3i)z*D8wlXjc8R!~V>Kd4Z z7+P2vn_3x~X&V?=85m6aY+;C^AvZrIGp&-r$iUE0*T78I&^*M@$jZpv%FqO&p`|l( Q9w^^?y85}Sb4q9e0B>&Q`v3p{ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/applications-system.png b/Media/Themes/Umami/Icon/categories/applications-system.png new file mode 100644 index 0000000000000000000000000000000000000000..7640af1f20b33940d3dca638daa68a0bba8f4f32 GIT binary patch literal 1532 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE|2$nBLp+Y3omTBLIb7nH?5iueGjH49 zj@gtNxOvABSM^khyH_k)&$tSi?sCa1GR|Y}?Fwhv#-KI5F`GN+RCv|m)_WP=-i_1x zow!*uHKQ6AdE7W7mOATbYP8J8+OmDid>0&w`F4Dh{?Dhcch;OQzW3es`4VoiKk@T? z*}dOwHd->{;NE&&H@m(Rj@Qnd`(=OT*q)0GWA!=otorc&nb9_}lTLU&`}yr@M$MDv zDL2{HdRXZ?lr7W|VO5q9EnV@<@l&Ru@&AYSXKlFT5@;xS$NsDtzsAngG^>JTtGGiJ z%YIbXh|$P^t*=nfcdivhbF}-RJHJ-uTs~m|65-w-vXL ze~`y1F@?8lIG%f%oY)o6y@yM;?};|tyzSwTOh0N-LaH z_0B`4sr%C(m_=FH25jB2Ah*<6Z}o5o_a4y!yT1`p%8o8$WEf%r^M^ zGw1xp9eZ!`{*!VP&w9O!d9`$jf0MK12J5wF>J7S^jkZY%3kT1b^GDL_D8m&m^;N5Q zJN(vt`!jj>3T0*grGSBbhi4xAgCj) zW8nGzmiY;0cU;;FCEmK3pRzdXleNrzNkE|gOoMYzHdQO-z4=$&++kUn(P<9GsC|wyX>PEcrU!dyd)s zsB-3;mZtvKMhKg@a5>bn{(CE&fKw` z{9^fg7LPMmlb?P&6J#W}`J2Payll4f+spDNPS_GI6sKk*pSNMc2c^WLvv&Ns{Ce^# z_7m^dw#@C}OgmdKI;Vst0Ij99r~m)} literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/gnome-applications.png b/Media/Themes/Umami/Icon/categories/gnome-applications.png new file mode 100644 index 0000000000000000000000000000000000000000..26be59e36f3521bf938a4abe476d63187a6ee643 GIT binary patch literal 1338 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq})w)5S5w)@GyhV}eR=Ztm6^}DCtXTB(fVXsy`8S)Xkzo^NRxSG& zQ?T^e+S1D9Dc$yaZv2sNa25Q%WA5MZD)+6s-oBo5bhUBYs@dnJ>RjJb`~TMCue`ly z_3id+Zu-*0$S}|O{LRn%*S(dVCG|>nhRfM)N!w1$FHHA#Uj97rneXnOy47(j^H1un zE6D0H`Rw4}e*0cHDu*Wbr3 z7vyWrvk_omXc1^pZ?RF-;|gx_YFA@(4z8tIx}%>Vi{UU8jotWZhdkv06Cz zq_Fq<8)EsVxNF>#Ux9 zpOrbzG+9ID@SGJT{Em#_vf^!WxB9u?%X{2j)VFQ#^h&9{o;9^9#1}e-|d%P)zq1ccjPWUUYov)dm3v5%gyaweNS@u zR8kA8=IolQlgH~j@#{gIYp1Kf>aTmHyOecLdX*nb<)cz|#U5kX1K$>;xZl2aTHUX< zW!kaYbtfYOE&rbl*PA`}fJFOViD{|PsTbaTELya2>6Z(;-7O-gO)ZHtvxza8@O1C* zbGO;em#v(2Bx&P%TefAR2HWA<4#cS^J6-*&St)gPIjA`Ia6(^$*v2R z+!;9-^d<`II`r_vhRj)0_00DlHZoC?7JKk5c$z?3TH3KSYxN#xulBYu)GV4bWf$*( ztv%D486sE{UT=K-wz#>uxoO?&Wy`dtEn8_a)hlw6O61CrQ&fKfw;waa zF&xle+q8tSfZ-E^h+L-aAH(;L%`Ig3?qBL&wTkOwh0>Rs%hUatUN9SQIn;_IDCW=C zzsY^Tc7NK3@AnfKGCnKnaphX-{__7SensIGn>_op9SjT%swJ)wB`Jv|saDBFsfi`2 z3`Pb<2D%28x&~$;h89-FrdEb#+6D$z1_skUTNt8f$jwj5OsixtGB7mMH89gPG!HQ} cvNAHaGBkl`Xz9$H2P(%rUHx3vIVCg!0G--L%K!iX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/gnome-control-center.png b/Media/Themes/Umami/Icon/categories/gnome-control-center.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a892cc54ab9bfa4c826ba99f6dd2f1e2d91908 GIT binary patch literal 708 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s83o-U3d9>?EK-I%9jDA2awkZ-{PYXPB> zJ&s+~4K^$t|5(Hq?KX<-veqnJ@@0Ak?~-K;o>W#alz4UOZSX7HZP#3WGi|AfWM;}~ z<9X*l-=6gF@V(nC33l`C-<9poc93WdTCC-{^N_~iI3LjroM<@^yul+{^1;p$cgN|GMq*4ZEm3>r82aX~ z-D-F??ex*Lz0G>XjK9{*((LD-;g>$sXxW5` zOJ2OrbSZ4D0|NttYKdz^NlIc#s#S7PYGO$$gOP!efv$n2u7O#Ip@o&Psg;fq{X+)78&qol`;+0L4%lE&u=k literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/gnome-devel.png b/Media/Themes/Umami/Icon/categories/gnome-devel.png new file mode 100644 index 0000000000000000000000000000000000000000..2a9e81c49464468f85ad6e1f551f6fc3c894df15 GIT binary patch literal 1489 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4mpxq^Lp+Y}of_Q{`&9IJ{p;Jm?>swm zX66~6qGN?dx4cZ^3?z=IUA^U9Bk;Oc#L@Mj`bWnj+)epex7&lfT)CFE+VvRSnr62o z;Br`&X6m^k(Zb$Wr4}tTiBo$#(=xqiUG@9-n`&kl8?E(>;wnAZboQUw|NC**`Tw0) zOSfKQTmNoy%Le}~u|kPaJ~4dvmT4_DU9_+`p#H}!Yx_U1{`;&y8{Ypt`ajRxtJ_W9 z?ptjZeQC}9HJSCUv%TxD9sT+6=`EROIa291HYW4ylU~2MzAs}@MA0*jM{%yd>m4pP zr@U=e$=;v->QMFenL8rZpAG!GJ~(8yav!(y@$SRo=koUdNj$b}y|RkFvQkIGDp%+J zV<#U^QU8`WS+4&7W8WDT-Qi z?YCULp7z|`zQ--~)vsvr`Mvup!wx($eijwFGwZu9_X63NUwQ{k9Zs=?)@-Oq=e)N_ zF~O%LYr2NGVdXvEB%g=Vw^}|jX7ZWx|0ip8eM-pnf}5NnvIo~LTE#M7u*T~H=e@6; zpDUaE1tgD^@dwM@KD2YXZJ1bcT}70`+nX2P_nf^GAv^O<=UaKzA9D9f3vRkw+&-|I z?_lZ2ecflHo^Vy}dHvYg>5`>S`cq4{ZEugvIP`Yw&yCXl!j5Kv_cm#7I$2$D{n%~O zJ-H8ZnWxuvl>5$!J$yTu<+fUj-o5XhyYrJS_ZQscQj$HkEPsYVi+=u!x>@>y#m9fV z@hy2}f6zs>M^j0y-NWRE(t=k3zJb@>O;vx0-P_x|`SgnO9=FyT)cwm%``Uc}-ESTS z3Db!W-fA5bH(ciMLH5AISYZ|y$E(dzbFvp5RfZK%>q}_BwP^L?`Ai|UtrKMzG-{U#?JpD& zXO1c6zxk*}@5s-U8ZTv>T^y8Lc=m3c{&Jn}pW8lK3sPntj&w9#ASKXwVZy_`#Rnud zYzlmm#If&s?!H4uzOi#0!wEi zd6v4JcgDZd`TI&zj)&f#_UzK-1$>6CM?|h~UZ*Lglc8`fypubWrFqeUzE9I$PsnIf z-hVH5|JMzFz4o3oT(DEnkv(Ic#lK^R3ZDMVUanu+QMcOdR;BR73IpNE9hwSi{T_9- zb}jwf(`(SGrEE$gKgpI8^|Xz46!cu?zApt*cn+@etXC9Bo>(%9opy{pcecb`#LA@=^~ z`FjgkPVg_1{P$0J>F(9SpL%O#mMJ@*l=xKWa>f5;`R^cc<<(!?{=M9|{MUX4Ki+@0 z_>O!nX*j!p;{@Z;M)3xr2aP!jQ+VcWKKPqA@#*JH{tWl$cD`zR)YZ$tz@S><8c~vx zSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQ mLtO(iT|@H_LnA9Ab1Op=h=!KV%y|q93=E#GelF{r5}E**!nLme literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/gnome-globe.png b/Media/Themes/Umami/Icon/categories/gnome-globe.png new file mode 100644 index 0000000000000000000000000000000000000000..29c229031fc60d79d15d41b4fcfbbf636bd55870 GIT binary patch literal 1532 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE|2$nBLp+Y(oto`4Ib7oS-ZT8ghBsAj zZ(4X@j&a(#mdM^+mQFi5773*}Ejzd>Cyy&+?gAd&S0db@Y#pH**S#8zT=yu5PK{z* z>KetWS)#kbbqUk8ZNgDi_5ZEc{*IVw_3I0-f(HY%My#vbBt*epb$em2CyymOVUm+>atnzj?S_ zRDUeRT(NxP#^l7Tbp=zZH_C3!Wq$GU`s2=fOp|+?x|`Hvo*d07UEp}H-8XaVysIt~ zuAb?&`t@c$!@`;BtzMq#_Ft64EMoO|?2MBuj(9RKxbB@Wnc*16gOvwaLg(|{Wa50( zZ?32@uRroM|NJ^lhg-{T?SEdeck!cDOi4ePSIA2n<}iIpOE|-4vz=janE00SJ`*Ot zT`BT?k;{$Fu%pQ(_vD#&|B_2{-<11LP||oWQ$?un_3bHFlH9+Eid? z@lJZ7X~fBE77OGTFR0#WoA4u; z<4%y*neGh<$&5^rq9<&1k21z_^UYfmUdimUWbNst=eF21U45oBR)Yi_ zZoKh3UnsNrR$=Tq$A?$tKFnqhs9G%lGhAM2=@#BjR-rXs>(n+sS5i>pU-?sM!;kF( z^Pe+H?0NQJbH|r&lTP0?=()Av%8L)|mQDTb^OgVSNSDpYaJl9xYILqFdH(|D-CijR zmd87$OkxP!&5|JedH#*9^SabMr&X|?iK(-&T)gDsr8}k_!lva19+@gyJuUw-DQWUb zwu5%79gO_@WLejG=wuyr{Ff`EnSE>~8*A2)yB?2X7T?KjW#Fr1oxr&NP}a%IbBgD# zd%sy)P$Il->60le$3Gs>*~gi>UvSYk#y5{o+pOAovsrNS)F)>gvlhzl54*SYS~{PZ&^&APbs;^Ni*{M?3R?Y|u| zN|i&xj_Nw!Nb{R&J^yiO4}Y5L63x4NQ;WaxW<6ZS#G)RS%=%gA(Dy4!DnFT$F6mG9 zk~^~ECfoAMtn7jJ8}i<`xH?-;KG~xnm*2-dHf6$MGj08QwY8FFJa8|IN7P z@4lB@GK^%h4AQ<8s8iJtyVPinx3E>XQP-Djp`wtJYnrlU_?|QLy8Z6@WBxUCee3p4 zyZO&{XXFN)S?F!-^zGY^*5xz*hAjzx_x#I)Df9TnkA>}h?%)0OJahEz5yLxFq*ebiukY{wvC(xw3j+g#YKdz^NlIc#s#S7PYGO$$ zgOP!efv$n2u7O#Ip@o&PsgOxAp)4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/gnome-graphics.png b/Media/Themes/Umami/Icon/categories/gnome-graphics.png new file mode 100644 index 0000000000000000000000000000000000000000..7310646200b3a8e415947c46b7b05cbd179b0344 GIT binary patch literal 1055 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q`-o-U3d9>@1iiO&cQmpN|#-M_keeWvs6 zD_5r~L`6kwZ@j(bOOw8pgi@11&BT3gPAa^T;8>c+ao1%-j(&0gN6v=csfNdv=-a(@ zthum&-^;7Sth1ZT%y;taC7hX6`Io9|GZ#+T(z&JT!GWFotM|=6Z~MH6Z_i`3HzFt2 zYj-i+?_xUkr1tagt-E$O7ffd;kDk?{-E?5**Z13WKfLy`{!mb`KmEemuBTmR=Uc0N zc-dl#2qS;a zn0@=Q<(HZ3oi){zU8dP9O!v}h{_CueA+}xh!|PKmtCzm*x%d96-5Q(cANRQ23p=^w zS?=wJ$FpYcVy%naxn#wQHN zme*_+^p=?N?xV)O6FHgY)wWCz)lb$OeYX4TCe!s@A3qib7Mt#UXMN#*mMmnQw) zD7t4|y~2r0*PY$l?(*{T9(i0iZJO7ccW;W0+?%{@>!I+ipQ5?c)Yg4}Y|&o3@34vx z=cJP=lXR@wCZ6l^`t07gAaa%JjjHY^ZQ9Q6?b5D+DpI|Z&Zg!Z_DGf8y{11_w*Oia zvqxz6q$_W}Rxz)9a!7pQ&5o2vv6Ww%=0=}Mk=boyV^yUa#$RLXSnck9e7~}?@^Usd zww3^mBVWFl88%h5~;%m%NlGhaBX4Gb6}MUx8zI67g=MU@x1ZCt>$H! z8ME3_BcFW!$x^@=ac|M|2Bi%_z8_Qzl1uk|Q~i8E`vK<%?u2!1r&r&NGS|yz*}wf8 zTOW@aC)>4oZ43+yswJ)wB`Jv|saDBFsfi`23`Pb<2D%28x&~$;h89-FrdEb#+6D$z z1_skUTNt8f$jwj5OsixtGB7mMH89gPG!HQ}vNAHaGBkl`Xz9$H$H2fK39=zLKdq!Z ou_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_lNOPgg&ebxsLQ02R;DLI3~& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/gnome-joystick.png b/Media/Themes/Umami/Icon/categories/gnome-joystick.png new file mode 100644 index 0000000000000000000000000000000000000000..0266dbce481d486a9e305411753caba6d75b5c2d GIT binary patch literal 1261 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 Q9w^^?y85}Sb4q9e0B>&Q`v3p{ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/gnome-settings.png b/Media/Themes/Umami/Icon/categories/gnome-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a892cc54ab9bfa4c826ba99f6dd2f1e2d91908 GIT binary patch literal 708 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s83o-U3d9>?EK-I%9jDA2awkZ-{PYXPB> zJ&s+~4K^$t|5(Hq?KX<-veqnJ@@0Ak?~-K;o>W#alz4UOZSX7HZP#3WGi|AfWM;}~ z<9X*l-=6gF@V(nC33l`C-<9poc93WdTCC-{^N_~iI3LjroM<@^yul+{^1;p$cgN|GMq*4ZEm3>r82aX~ z-D-F??ex*Lz0G>XjK9{*((LD-;g>$sXxW5` zOJ2OrbSZ4D0|NttYKdz^NlIc#s#S7PYGO$$gOP!efv$n2u7O#Ip@o&Psg;fq{X+)78&qol`;+0L4%lE&u=k literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/gnome-system.png b/Media/Themes/Umami/Icon/categories/gnome-system.png new file mode 100644 index 0000000000000000000000000000000000000000..7640af1f20b33940d3dca638daa68a0bba8f4f32 GIT binary patch literal 1532 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE|2$nBLp+Y3omTBLIb7nH?5iueGjH49 zj@gtNxOvABSM^khyH_k)&$tSi?sCa1GR|Y}?Fwhv#-KI5F`GN+RCv|m)_WP=-i_1x zow!*uHKQ6AdE7W7mOATbYP8J8+OmDid>0&w`F4Dh{?Dhcch;OQzW3es`4VoiKk@T? z*}dOwHd->{;NE&&H@m(Rj@Qnd`(=OT*q)0GWA!=otorc&nb9_}lTLU&`}yr@M$MDv zDL2{HdRXZ?lr7W|VO5q9EnV@<@l&Ru@&AYSXKlFT5@;xS$NsDtzsAngG^>JTtGGiJ z%YIbXh|$P^t*=nfcdivhbF}-RJHJ-uTs~m|65-w-vXL ze~`y1F@?8lIG%f%oY)o6y@yM;?};|tyzSwTOh0N-LaH z_0B`4sr%C(m_=FH25jB2Ah*<6Z}o5o_a4y!yT1`p%8o8$WEf%r^M^ zGw1xp9eZ!`{*!VP&w9O!d9`$jf0MK12J5wF>J7S^jkZY%3kT1b^GDL_D8m&m^;N5Q zJN(vt`!jj>3T0*grGSBbhi4xAgCj) zW8nGzmiY;0cU;;FCEmK3pRzdXleNrzNkE|gOoMYzHdQO-z4=$&++kUn(P<9GsC|wyX>PEcrU!dyd)s zsB-3;mZtvKMhKg@a5>bn{(CE&fKw` z{9^fg7LPMmlb?P&6J#W}`J2Payll4f+spDNPS_GI6sKk*pSNMc2c^WLvv&Ns{Ce^# z_7m^dw#@C}OgmdKI;Vst0Ij99r~m)} literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/gnome-util.png b/Media/Themes/Umami/Icon/categories/gnome-util.png new file mode 100644 index 0000000000000000000000000000000000000000..6725141da6261718453ef85be8568e8050e83ffb GIT binary patch literal 1471 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zxP?KOkzv*xkm+nm-tI08|3PrU-sO`S7+4N^x;Tb-9N!z3?K3%Dq%BUvRf;t%&&Y9x z-U}mx+nW+^9L?C2V*h7r_sq`IG1GEBCI5+7Rv2j%DbuG|9~{8@DSr-ZDmYk0Z%rqr3Uc%Rr@^=<5$ zw;}cXqKg?%SWKdLg(Ef>df$IB<9^2-hP`q8UmK)OUKjE?|LBxVoXh*W=F>%u7;_@8 z%$zxOo1LLyIQ=`X1(Y_n3^*>yTBm7G8e2!)@JiRpahMYwy-yn6*8=_&PZboJ0+Y=^E6`TIsozFyyxBb#4p$&=Awf}cMU%z1K*5ySr)cp_J)JvPC zZ*Y9DdBqD4A79_1l-k-_4UJRI$;HZTZEYvy-qtrSeRn^5uWF>x*(XV*Mm*Zd@(1^9 zXl@8yvM?fU%ekDSC90|A0pandIpe&avPpYA2@2(VfAWq8i_b9*pYLr6j@3LluCq7) zwC4J8N%vaGuS6a`KBu)|i}x%Nx%z$8&0pVyI`_U(+kf)HzmKb4dUA=G9KRU%pylVn z?;DLK@BPfXMrq>9jr)t4Q<=WZ&ZbkF~;D7$$0GUJT~HA1zaacb9o_WX*~ zk-j|Nf5DN14}&h1C$3nspS>*2zf6x`;7-QL(x@cuoeQj)onI&3lDWqtJfr4^*>=~i z|C=?gpF6ky&c(oQ%Om!vh;!*SyEk1dGGS@0vHPBqzB8cVlN zKF8sE^bGTuh0-?!7WC~`eDqN+KR=_U)^Jn3J-gC&1IBMP-};V5#!X#*qv-pR1vhsE zO8o!L@r-AGp6G<%Z)^i~L|&Qv{^t1bk&$nbF~5z?1-+?Fd7_&3Up=!5C&V&aZ~p!? zFG(Z5jP7}u9I^Ei99$ZX3K%%9w_+WX&QX7&rup1Fx}1h2Rq|EsnpKugH5(SPNO zjIWlBopWziAC1)1^8au>(r&f($J?=oIae?l+LjzV#;bBpc5`Fnipd^lT!GUWHJrt0_aI@-Dq9o=>JTtaDT`&I zx!%WKFx%I(u&Vx-`*G#jW|1ZSN;}t-l(x=dyZ-d$$rF;7M2voae%t!aJD6EKL1ssX z=2!k5^}l%a&V7ooTm71=n*D!CeecF~>k}$Iw7%6{#B1fR9Tlu5boIi7{i*we&vfNf zuS-zQ+P5T>S8S2i4aTkWxwju#dq3mP^S`!wIT>4=Tds4g7y82y#}a-> zujxVS-;kf;$s5Ze=RXc| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s83o-U3d9>?EK-I%9jDA2awkZ-{PYXPB> zJ&s+~4K^$t|5(Hq?KX<-veqnJ@@0Ak?~-K;o>W#alz4UOZSX7HZP#3WGi|AfWM;}~ z<9X*l-=6gF@V(nC33l`C-<9poc93WdTCC-{^N_~iI3LjroM<@^yul+{^1;p$cgN|GMq*4ZEm3>r82aX~ z-D-F??ex*Lz0G>XjK9{*((LD-;g>$sXxW5` zOJ2OrbSZ4D0|NttYKdz^NlIc#s#S7PYGO$$gOP!efv$n2u7O#Ip@o&Psg;fq{X+)78&qol`;+0L4%lE&u=k literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/input_devices_settings.png b/Media/Themes/Umami/Icon/categories/input_devices_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..db3f26200dbadcb2297617a1b5ab0f70c7747008 GIT binary patch literal 1397 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2G1W}YsNAs)x~PKnN$;wo~y{{ETmzu&IC zDONV|RnQ054$g%!TGzvQS@x)?Wq3@P(ZShuse>&!>ByR->?X~QOeYhY#$y2-7unZ; z6k_`5lo1%swZTXs8l_wBr!>+hfW5wPvjre23d&oiH$ne%z}&-s?j|ChgAannYZ=7z=4~93M)$cUjf>G3@?-hWYhhRpsB^PhaM>Zi>?6 zlOO&RM_0c8dv{-kiB%AnLEg?Bzax(f_m-WtO5AeXIa{73*`UFYEwk$548LM;7D*0pVB%cr=omt9l6&+x%UmC>84^YyML?w_8t6+QV}>DH#VaNWE| z%j4^o{4C)v4-4D$@FVY=o3{^KQZ>C}oi7*URml9{YIxjlo*$Lzv7eMRTh4FGUA^Pl z&6_7%&*{0X>$~tZy|3@|=FD8{!)sico}LaX`tZ0}CvHc_&CRPn{AT7boL2RTw`&6P zyl>ZTA7bMDkWhuIV<6_i$ zM}u{h_5T@~cj`3Xblh~)QE$24#(x)&TNHgU@Sc7pAWm@Uc75knyQQy}YVK>Bk$Css>Noy_@tp_;#E(gDPp52-G^*Vz zV^_nG%wxBoKht~Fs#O{yF?#~1@B3GG>X2ZKo&2^f>RurQv8%UlpI%w~oN0pB(qsON z6JEVj6YFN2aPrH2h1IGm69ZA-VH3Q*N>WuF3_L6P=E5m zHEVhzJ6YD|=9i$D7^u23Gxh zHS>Y=sb>rpzg}KUy31hGb5c4vsPFL>>Ev_SYooW>?Ec!#+2EmKqt?nQCUz`i%C(He z7rhp4NqZ)1%y{F=m$dHLTawi0Upcm*$0@rtNX|=p%e9Q97jGqO(K|M0&&?;-nQu)A z@=*L}(;LL~G`9I=_Swh9U53l^*gw=(|CUsm$Z;@%!JA{sH4RfWe+wD4D7mFuzm_-j zMKg+Ie>j=He_Kw8O#0P1mgT~oF30S&jlZQzCck*K>%dfP&4$0*nI%eNzn>I7-oLlx z(T|O;2Q~>+?{1iS;K5pkf5pG03-7(S^Y8YdWef}qrX{WsCC>S|xv6<23>wLr3PuJ7 zCJJ7O*`-Me!6m7gd8tKQT+T(Qi6yBi3gww4844j8sS56%z5x?%cIPuNFsOnINJ%V7 zwMqu7VlXl=GSD@!)HN^*F|@EUHnlP|(>5@$GBB9-*}@P-LvDUbW?ChKk%6J1u7R1Z hp?Qd*k(H6Tm7xhlLrZ7oJO%~^22WQ%mvv4FO#sM~Y?A;0 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/kcontrol.png b/Media/Themes/Umami/Icon/categories/kcontrol.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a892cc54ab9bfa4c826ba99f6dd2f1e2d91908 GIT binary patch literal 708 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s83o-U3d9>?EK-I%9jDA2awkZ-{PYXPB> zJ&s+~4K^$t|5(Hq?KX<-veqnJ@@0Ak?~-K;o>W#alz4UOZSX7HZP#3WGi|AfWM;}~ z<9X*l-=6gF@V(nC33l`C-<9poc93WdTCC-{^N_~iI3LjroM<@^yul+{^1;p$cgN|GMq*4ZEm3>r82aX~ z-D-F??ex*Lz0G>XjK9{*((LD-;g>$sXxW5` zOJ2OrbSZ4D0|NttYKdz^NlIc#s#S7PYGO$$gOP!efv$n2u7O#Ip@o&Psg;fq{X+)78&qol`;+0L4%lE&u=k literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/package_development.png b/Media/Themes/Umami/Icon/categories/package_development.png new file mode 100644 index 0000000000000000000000000000000000000000..2a9e81c49464468f85ad6e1f551f6fc3c894df15 GIT binary patch literal 1489 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4mpxq^Lp+Y}of_Q{`&9IJ{p;Jm?>swm zX66~6qGN?dx4cZ^3?z=IUA^U9Bk;Oc#L@Mj`bWnj+)epex7&lfT)CFE+VvRSnr62o z;Br`&X6m^k(Zb$Wr4}tTiBo$#(=xqiUG@9-n`&kl8?E(>;wnAZboQUw|NC**`Tw0) zOSfKQTmNoy%Le}~u|kPaJ~4dvmT4_DU9_+`p#H}!Yx_U1{`;&y8{Ypt`ajRxtJ_W9 z?ptjZeQC}9HJSCUv%TxD9sT+6=`EROIa291HYW4ylU~2MzAs}@MA0*jM{%yd>m4pP zr@U=e$=;v->QMFenL8rZpAG!GJ~(8yav!(y@$SRo=koUdNj$b}y|RkFvQkIGDp%+J zV<#U^QU8`WS+4&7W8WDT-Qi z?YCULp7z|`zQ--~)vsvr`Mvup!wx($eijwFGwZu9_X63NUwQ{k9Zs=?)@-Oq=e)N_ zF~O%LYr2NGVdXvEB%g=Vw^}|jX7ZWx|0ip8eM-pnf}5NnvIo~LTE#M7u*T~H=e@6; zpDUaE1tgD^@dwM@KD2YXZJ1bcT}70`+nX2P_nf^GAv^O<=UaKzA9D9f3vRkw+&-|I z?_lZ2ecflHo^Vy}dHvYg>5`>S`cq4{ZEugvIP`Yw&yCXl!j5Kv_cm#7I$2$D{n%~O zJ-H8ZnWxuvl>5$!J$yTu<+fUj-o5XhyYrJS_ZQscQj$HkEPsYVi+=u!x>@>y#m9fV z@hy2}f6zs>M^j0y-NWRE(t=k3zJb@>O;vx0-P_x|`SgnO9=FyT)cwm%``Uc}-ESTS z3Db!W-fA5bH(ciMLH5AISYZ|y$E(dzbFvp5RfZK%>q}_BwP^L?`Ai|UtrKMzG-{U#?JpD& zXO1c6zxk*}@5s-U8ZTv>T^y8Lc=m3c{&Jn}pW8lK3sPntj&w9#ASKXwVZy_`#Rnud zYzlmm#If&s?!H4uzOi#0!wEi zd6v4JcgDZd`TI&zj)&f#_UzK-1$>6CM?|h~UZ*Lglc8`fypubWrFqeUzE9I$PsnIf z-hVH5|JMzFz4o3oT(DEnkv(Ic#lK^R3ZDMVUanu+QMcOdR;BR73IpNE9hwSi{T_9- zb}jwf(`(SGrEE$gKgpI8^|Xz46!cu?zApt*cn+@etXC9Bo>(%9opy{pcecb`#LA@=^~ z`FjgkPVg_1{P$0J>F(9SpL%O#mMJ@*l=xKWa>f5;`R^cc<<(!?{=M9|{MUX4Ki+@0 z_>O!nX*j!p;{@Z;M)3xr2aP!jQ+VcWKKPqA@#*JH{tWl$cD`zR)YZ$tz@S><8c~vx zSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQ mLtO(iT|@H_LnA9Ab1Op=h=!KV%y|q93=E#GelF{r5}E**!nLme literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/package_games.png b/Media/Themes/Umami/Icon/categories/package_games.png new file mode 100644 index 0000000000000000000000000000000000000000..0266dbce481d486a9e305411753caba6d75b5c2d GIT binary patch literal 1261 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/package_multimedia.png b/Media/Themes/Umami/Icon/categories/package_multimedia.png new file mode 100644 index 0000000000000000000000000000000000000000..41374e91b5385e8351e78ac3f9680bbdf132d544 GIT binary patch literal 1428 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/package_office.png b/Media/Themes/Umami/Icon/categories/package_office.png new file mode 100644 index 0000000000000000000000000000000000000000..26be59e36f3521bf938a4abe476d63187a6ee643 GIT binary patch literal 1338 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq})w)5S5w)@GyhV}eR=Ztm6^}DCtXTB(fVXsy`8S)Xkzo^NRxSG& zQ?T^e+S1D9Dc$yaZv2sNa25Q%WA5MZD)+6s-oBo5bhUBYs@dnJ>RjJb`~TMCue`ly z_3id+Zu-*0$S}|O{LRn%*S(dVCG|>nhRfM)N!w1$FHHA#Uj97rneXnOy47(j^H1un zE6D0H`Rw4}e*0cHDu*Wbr3 z7vyWrvk_omXc1^pZ?RF-;|gx_YFA@(4z8tIx}%>Vi{UU8jotWZhdkv06Cz zq_Fq<8)EsVxNF>#Ux9 zpOrbzG+9ID@SGJT{Em#_vf^!WxB9u?%X{2j)VFQ#^h&9{o;9^9#1}e-|d%P)zq1ccjPWUUYov)dm3v5%gyaweNS@u zR8kA8=IolQlgH~j@#{gIYp1Kf>aTmHyOecLdX*nb<)cz|#U5kX1K$>;xZl2aTHUX< zW!kaYbtfYOE&rbl*PA`}fJFOViD{|PsTbaTELya2>6Z(;-7O-gO)ZHtvxza8@O1C* zbGO;em#v(2Bx&P%TefAR2HWA<4#cS^J6-*&St)gPIjA`Ia6(^$*v2R z+!;9-^d<`II`r_vhRj)0_00DlHZoC?7JKk5c$z?3TH3KSYxN#xulBYu)GV4bWf$*( ztv%D486sE{UT=K-wz#>uxoO?&Wy`dtEn8_a)hlw6O61CrQ&fKfw;waa zF&xle+q8tSfZ-E^h+L-aAH(;L%`Ig3?qBL&wTkOwh0>Rs%hUatUN9SQIn;_IDCW=C zzsY^Tc7NK3@AnfKGCnKnaphX-{__7SensIGn>_op9SjT%swJ)wB`Jv|saDBFsfi`2 z3`Pb<2D%28x&~$;h89-FrdEb#+6D$z1_skUTNt8f$jwj5OsixtGB7mMH89gPG!HQ} cvNAHaGBkl`Xz9$H2P(%rUHx3vIVCg!0G--L%K!iX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/package_settings.png b/Media/Themes/Umami/Icon/categories/package_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..a04819c3106cd61aefbbcc7aa566fddb5babb335 GIT binary patch literal 1143 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&d7#`=`_i3|*kdjfnyTp36KCaFv6>+1^(3mF&~bi#WfT2+9Xz-0H!g zrlzL8zTPBtiAm}bzmg@D6(zN`we#l9n>ll4dwctg($pyQVfyUfDE#Q_GxfZEbD6 zGnP(Rwr}FZi4&LYo4$10%(aK-Za6h}+qtg}g*?>>L~@ZrOUFW*0X zeE<2=$IqWXefjd`+qbVjzJL4ivKYsrB{`2SepFe;6`t|eIuV24^|Ni&y-~a#r z&lj|4GB7YWl?3?(GcYnSv#_$Ub8++V3ki!zO3KK}%B!fTscUFy>*^U87#J8D8W|ax zSy|iLySR9H2ZV)})i*US*|X=w$upPV|M>NL!inuW7#J8Blf2zsCO>4pzm0)`F~ifv zF+?M{c4B()AqRoBW+xF=A?-5Zjo#WR9o!L-X#6b*o|(z^*1~Z862>9w|w{W z%JRJQ{zd=RW*u2IX+KMxmz>V!pLx3s_9uLNda-#*+Kh=-@eScU8j4HREI(ZiSpP|C z&C(UU*_>Nte%_3f4&gJIxBcO(&L1~VWb?9Tw*)Hdit~prQs5BU#PwgP<@4SbitK57=jrcJdv%JOHvi>1A7*rdQB#pd??_}h1k4+6!Qd6+M|pUe9mpnv4aD%<2) z4-@`fySe^@OL7R~spYkswwV>&^yYm}ugwp0>HGM4pFeSK)tn>C zib_)oc5IK?J0X9ontJr)NkU1!6SrvPJSe!aP~&KdQM684x8^O6_U!rD%ncUJaqG<` zGOU`GeNA-q=3E)y6dL)sc*)<*3=9maC9V-ADTyViR>?)Fi6yBFMg~R(x(1fI24*3K z7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O4>2^dGBUR^G=XSn>CBu5 O%9)<7elF{r5}E+d0&w`F4Dh{?Dhcch;OQzW3es`4VoiKk@T? z*}dOwHd->{;NE&&H@m(Rj@Qnd`(=OT*q)0GWA!=otorc&nb9_}lTLU&`}yr@M$MDv zDL2{HdRXZ?lr7W|VO5q9EnV@<@l&Ru@&AYSXKlFT5@;xS$NsDtzsAngG^>JTtGGiJ z%YIbXh|$P^t*=nfcdivhbF}-RJHJ-uTs~m|65-w-vXL ze~`y1F@?8lIG%f%oY)o6y@yM;?};|tyzSwTOh0N-LaH z_0B`4sr%C(m_=FH25jB2Ah*<6Z}o5o_a4y!yT1`p%8o8$WEf%r^M^ zGw1xp9eZ!`{*!VP&w9O!d9`$jf0MK12J5wF>J7S^jkZY%3kT1b^GDL_D8m&m^;N5Q zJN(vt`!jj>3T0*grGSBbhi4xAgCj) zW8nGzmiY;0cU;;FCEmK3pRzdXleNrzNkE|gOoMYzHdQO-z4=$&++kUn(P<9GsC|wyX>PEcrU!dyd)s zsB-3;mZtvKMhKg@a5>bn{(CE&fKw` z{9^fg7LPMmlb?P&6J#W}`J2Payll4f+spDNPS_GI6sKk*pSNMc2c^WLvv&Ns{Ce^# z_7m^dw#@C}OgmdKI;Vst0Ij99r~m)} literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/package_utilities.png b/Media/Themes/Umami/Icon/categories/package_utilities.png new file mode 100644 index 0000000000000000000000000000000000000000..6725141da6261718453ef85be8568e8050e83ffb GIT binary patch literal 1471 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/preferences-desktop.png b/Media/Themes/Umami/Icon/categories/preferences-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a892cc54ab9bfa4c826ba99f6dd2f1e2d91908 GIT binary patch literal 708 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s83o-U3d9>?EK-I%9jDA2awkZ-{PYXPB> zJ&s+~4K^$t|5(Hq?KX<-veqnJ@@0Ak?~-K;o>W#alz4UOZSX7HZP#3WGi|AfWM;}~ z<9X*l-=6gF@V(nC33l`C-<9poc93WdTCC-{^N_~iI3LjroM<@^yul+{^1;p$cgN|GMq*4ZEm3>r82aX~ z-D-F??ex*Lz0G>XjK9{*((LD-;g>$sXxW5` zOJ2OrbSZ4D0|NttYKdz^NlIc#s#S7PYGO$$gOP!efv$n2u7O#Ip@o&Psg;fq{X+)78&qol`;+0L4%lE&u=k literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/preferences-system.png b/Media/Themes/Umami/Icon/categories/preferences-system.png new file mode 100644 index 0000000000000000000000000000000000000000..a04819c3106cd61aefbbcc7aa566fddb5babb335 GIT binary patch literal 1143 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/redhat-internet.png b/Media/Themes/Umami/Icon/categories/redhat-internet.png new file mode 100644 index 0000000000000000000000000000000000000000..29c229031fc60d79d15d41b4fcfbbf636bd55870 GIT binary patch literal 1532 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE|2$nBLp+Y(oto`4Ib7oS-ZT8ghBsAj zZ(4X@j&a(#mdM^+mQFi5773*}Ejzd>Cyy&+?gAd&S0db@Y#pH**S#8zT=yu5PK{z* z>KetWS)#kbbqUk8ZNgDi_5ZEc{*IVw_3I0-f(HY%My#vbBt*epb$em2CyymOVUm+>atnzj?S_ zRDUeRT(NxP#^l7Tbp=zZH_C3!Wq$GU`s2=fOp|+?x|`Hvo*d07UEp}H-8XaVysIt~ zuAb?&`t@c$!@`;BtzMq#_Ft64EMoO|?2MBuj(9RKxbB@Wnc*16gOvwaLg(|{Wa50( zZ?32@uRroM|NJ^lhg-{T?SEdeck!cDOi4ePSIA2n<}iIpOE|-4vz=janE00SJ`*Ot zT`BT?k;{$Fu%pQ(_vD#&|B_2{-<11LP||oWQ$?un_3bHFlH9+Eid? z@lJZ7X~fBE77OGTFR0#WoA4u; z<4%y*neGh<$&5^rq9<&1k21z_^UYfmUdimUWbNst=eF21U45oBR)Yi_ zZoKh3UnsNrR$=Tq$A?$tKFnqhs9G%lGhAM2=@#BjR-rXs>(n+sS5i>pU-?sM!;kF( z^Pe+H?0NQJbH|r&lTP0?=()Av%8L)|mQDTb^OgVSNSDpYaJl9xYILqFdH(|D-CijR zmd87$OkxP!&5|JedH#*9^SabMr&X|?iK(-&T)gDsr8}k_!lva19+@gyJuUw-DQWUb zwu5%79gO_@WLejG=wuyr{Ff`EnSE>~8*A2)yB?2X7T?KjW#Fr1oxr&NP}a%IbBgD# zd%sy)P$Il->60le$3Gs>*~gi>UvSYk#y5{o+pOAovsrNS)F)>gvlhzl54*SYS~{PZ&^&APbs;^Ni*{M?3R?Y|u| zN|i&xj_Nw!Nb{R&J^yiO4}Y5L63x4NQ;WaxW<6ZS#G)RS%=%gA(Dy4!DnFT$F6mG9 zk~^~ECfoAMtn7jJ8}i<`xH?-;KG~xnm*2-dHf6$MGj08QwY8FFJa8|IN7P z@4lB@GK^%h4AQ<8s8iJtyVPinx3E>XQP-Djp`wtJYnrlU_?|QLy8Z6@WBxUCee3p4 zyZO&{XXFN)S?F!-^zGY^*5xz*hAjzx_x#I)Df9TnkA>}h?%)0OJahEz5yLxFq*ebiukY{wvC(xw3j+g#YKdz^NlIc#s#S7PYGO$$ zgOP!efv$n2u7O#Ip@o&PsgOxAp)4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/redhat-office.png b/Media/Themes/Umami/Icon/categories/redhat-office.png new file mode 100644 index 0000000000000000000000000000000000000000..26be59e36f3521bf938a4abe476d63187a6ee643 GIT binary patch literal 1338 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq})w)5S5w)@GyhV}eR=Ztm6^}DCtXTB(fVXsy`8S)Xkzo^NRxSG& zQ?T^e+S1D9Dc$yaZv2sNa25Q%WA5MZD)+6s-oBo5bhUBYs@dnJ>RjJb`~TMCue`ly z_3id+Zu-*0$S}|O{LRn%*S(dVCG|>nhRfM)N!w1$FHHA#Uj97rneXnOy47(j^H1un zE6D0H`Rw4}e*0cHDu*Wbr3 z7vyWrvk_omXc1^pZ?RF-;|gx_YFA@(4z8tIx}%>Vi{UU8jotWZhdkv06Cz zq_Fq<8)EsVxNF>#Ux9 zpOrbzG+9ID@SGJT{Em#_vf^!WxB9u?%X{2j)VFQ#^h&9{o;9^9#1}e-|d%P)zq1ccjPWUUYov)dm3v5%gyaweNS@u zR8kA8=IolQlgH~j@#{gIYp1Kf>aTmHyOecLdX*nb<)cz|#U5kX1K$>;xZl2aTHUX< zW!kaYbtfYOE&rbl*PA`}fJFOViD{|PsTbaTELya2>6Z(;-7O-gO)ZHtvxza8@O1C* zbGO;em#v(2Bx&P%TefAR2HWA<4#cS^J6-*&St)gPIjA`Ia6(^$*v2R z+!;9-^d<`II`r_vhRj)0_00DlHZoC?7JKk5c$z?3TH3KSYxN#xulBYu)GV4bWf$*( ztv%D486sE{UT=K-wz#>uxoO?&Wy`dtEn8_a)hlw6O61CrQ&fKfw;waa zF&xle+q8tSfZ-E^h+L-aAH(;L%`Ig3?qBL&wTkOwh0>Rs%hUatUN9SQIn;_IDCW=C zzsY^Tc7NK3@AnfKGCnKnaphX-{__7SensIGn>_op9SjT%swJ)wB`Jv|saDBFsfi`2 z3`Pb<2D%28x&~$;h89-FrdEb#+6D$z1_skUTNt8f$jwj5OsixtGB7mMH89gPG!HQ} cvNAHaGBkl`Xz9$H2P(%rUHx3vIVCg!0G--L%K!iX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/redhat-preferences.png b/Media/Themes/Umami/Icon/categories/redhat-preferences.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a892cc54ab9bfa4c826ba99f6dd2f1e2d91908 GIT binary patch literal 708 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s83o-U3d9>?EK-I%9jDA2awkZ-{PYXPB> zJ&s+~4K^$t|5(Hq?KX<-veqnJ@@0Ak?~-K;o>W#alz4UOZSX7HZP#3WGi|AfWM;}~ z<9X*l-=6gF@V(nC33l`C-<9poc93WdTCC-{^N_~iI3LjroM<@^yul+{^1;p$cgN|GMq*4ZEm3>r82aX~ z-D-F??ex*Lz0G>XjK9{*((LD-;g>$sXxW5` zOJ2OrbSZ4D0|NttYKdz^NlIc#s#S7PYGO$$gOP!efv$n2u7O#Ip@o&Psg;fq{X+)78&qol`;+0L4%lE&u=k literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/redhat-programming.png b/Media/Themes/Umami/Icon/categories/redhat-programming.png new file mode 100644 index 0000000000000000000000000000000000000000..2a9e81c49464468f85ad6e1f551f6fc3c894df15 GIT binary patch literal 1489 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4mpxq^Lp+Y}of_Q{`&9IJ{p;Jm?>swm zX66~6qGN?dx4cZ^3?z=IUA^U9Bk;Oc#L@Mj`bWnj+)epex7&lfT)CFE+VvRSnr62o z;Br`&X6m^k(Zb$Wr4}tTiBo$#(=xqiUG@9-n`&kl8?E(>;wnAZboQUw|NC**`Tw0) zOSfKQTmNoy%Le}~u|kPaJ~4dvmT4_DU9_+`p#H}!Yx_U1{`;&y8{Ypt`ajRxtJ_W9 z?ptjZeQC}9HJSCUv%TxD9sT+6=`EROIa291HYW4ylU~2MzAs}@MA0*jM{%yd>m4pP zr@U=e$=;v->QMFenL8rZpAG!GJ~(8yav!(y@$SRo=koUdNj$b}y|RkFvQkIGDp%+J zV<#U^QU8`WS+4&7W8WDT-Qi z?YCULp7z|`zQ--~)vsvr`Mvup!wx($eijwFGwZu9_X63NUwQ{k9Zs=?)@-Oq=e)N_ zF~O%LYr2NGVdXvEB%g=Vw^}|jX7ZWx|0ip8eM-pnf}5NnvIo~LTE#M7u*T~H=e@6; zpDUaE1tgD^@dwM@KD2YXZJ1bcT}70`+nX2P_nf^GAv^O<=UaKzA9D9f3vRkw+&-|I z?_lZ2ecflHo^Vy}dHvYg>5`>S`cq4{ZEugvIP`Yw&yCXl!j5Kv_cm#7I$2$D{n%~O zJ-H8ZnWxuvl>5$!J$yTu<+fUj-o5XhyYrJS_ZQscQj$HkEPsYVi+=u!x>@>y#m9fV z@hy2}f6zs>M^j0y-NWRE(t=k3zJb@>O;vx0-P_x|`SgnO9=FyT)cwm%``Uc}-ESTS z3Db!W-fA5bH(ciMLH5AISYZ|y$E(dzbFvp5RfZK%>q}_BwP^L?`Ai|UtrKMzG-{U#?JpD& zXO1c6zxk*}@5s-U8ZTv>T^y8Lc=m3c{&Jn}pW8lK3sPntj&w9#ASKXwVZy_`#Rnud zYzlmm#If&s?!H4uzOi#0!wEi zd6v4JcgDZd`TI&zj)&f#_UzK-1$>6CM?|h~UZ*Lglc8`fypubWrFqeUzE9I$PsnIf z-hVH5|JMzFz4o3oT(DEnkv(Ic#lK^R3ZDMVUanu+QMcOdR;BR73IpNE9hwSi{T_9- zb}jwf(`(SGrEE$gKgpI8^|Xz46!cu?zApt*cn+@etXC9Bo>(%9opy{pcecb`#LA@=^~ z`FjgkPVg_1{P$0J>F(9SpL%O#mMJ@*l=xKWa>f5;`R^cc<<(!?{=M9|{MUX4Ki+@0 z_>O!nX*j!p;{@Z;M)3xr2aP!jQ+VcWKKPqA@#*JH{tWl$cD`zR)YZ$tz@S><8c~vx zSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQ mLtO(iT|@H_LnA9Ab1Op=h=!KV%y|q93=E#GelF{r5}E**!nLme literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/redhat-sound_video.png b/Media/Themes/Umami/Icon/categories/redhat-sound_video.png new file mode 100644 index 0000000000000000000000000000000000000000..41374e91b5385e8351e78ac3f9680bbdf132d544 GIT binary patch literal 1428 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/stock_internet.png b/Media/Themes/Umami/Icon/categories/stock_internet.png new file mode 100644 index 0000000000000000000000000000000000000000..29c229031fc60d79d15d41b4fcfbbf636bd55870 GIT binary patch literal 1532 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE|2$nBLp+Y(oto`4Ib7oS-ZT8ghBsAj zZ(4X@j&a(#mdM^+mQFi5773*}Ejzd>Cyy&+?gAd&S0db@Y#pH**S#8zT=yu5PK{z* z>KetWS)#kbbqUk8ZNgDi_5ZEc{*IVw_3I0-f(HY%My#vbBt*epb$em2CyymOVUm+>atnzj?S_ zRDUeRT(NxP#^l7Tbp=zZH_C3!Wq$GU`s2=fOp|+?x|`Hvo*d07UEp}H-8XaVysIt~ zuAb?&`t@c$!@`;BtzMq#_Ft64EMoO|?2MBuj(9RKxbB@Wnc*16gOvwaLg(|{Wa50( zZ?32@uRroM|NJ^lhg-{T?SEdeck!cDOi4ePSIA2n<}iIpOE|-4vz=janE00SJ`*Ot zT`BT?k;{$Fu%pQ(_vD#&|B_2{-<11LP||oWQ$?un_3bHFlH9+Eid? z@lJZ7X~fBE77OGTFR0#WoA4u; z<4%y*neGh<$&5^rq9<&1k21z_^UYfmUdimUWbNst=eF21U45oBR)Yi_ zZoKh3UnsNrR$=Tq$A?$tKFnqhs9G%lGhAM2=@#BjR-rXs>(n+sS5i>pU-?sM!;kF( z^Pe+H?0NQJbH|r&lTP0?=()Av%8L)|mQDTb^OgVSNSDpYaJl9xYILqFdH(|D-CijR zmd87$OkxP!&5|JedH#*9^SabMr&X|?iK(-&T)gDsr8}k_!lva19+@gyJuUw-DQWUb zwu5%79gO_@WLejG=wuyr{Ff`EnSE>~8*A2)yB?2X7T?KjW#Fr1oxr&NP}a%IbBgD# zd%sy)P$Il->60le$3Gs>*~gi>UvSYk#y5{o+pOAovsrNS)F)>gvlhzl54*SYS~{PZ&^&APbs;^Ni*{M?3R?Y|u| zN|i&xj_Nw!Nb{R&J^yiO4}Y5L63x4NQ;WaxW<6ZS#G)RS%=%gA(Dy4!DnFT$F6mG9 zk~^~ECfoAMtn7jJ8}i<`xH?-;KG~xnm*2-dHf6$MGj08QwY8FFJa8|IN7P z@4lB@GK^%h4AQ<8s8iJtyVPinx3E>XQP-Djp`wtJYnrlU_?|QLy8Z6@WBxUCee3p4 zyZO&{XXFN)S?F!-^zGY^*5xz*hAjzx_x#I)Df9TnkA>}h?%)0OJahEz5yLxFq*ebiukY{wvC(xw3j+g#YKdz^NlIc#s#S7PYGO$$ zgOP!efv$n2u7O#Ip@o&PsgOxAp)4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/xfce-devel.png b/Media/Themes/Umami/Icon/categories/xfce-devel.png new file mode 100644 index 0000000000000000000000000000000000000000..2a9e81c49464468f85ad6e1f551f6fc3c894df15 GIT binary patch literal 1489 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4mpxq^Lp+Y}of_Q{`&9IJ{p;Jm?>swm zX66~6qGN?dx4cZ^3?z=IUA^U9Bk;Oc#L@Mj`bWnj+)epex7&lfT)CFE+VvRSnr62o z;Br`&X6m^k(Zb$Wr4}tTiBo$#(=xqiUG@9-n`&kl8?E(>;wnAZboQUw|NC**`Tw0) zOSfKQTmNoy%Le}~u|kPaJ~4dvmT4_DU9_+`p#H}!Yx_U1{`;&y8{Ypt`ajRxtJ_W9 z?ptjZeQC}9HJSCUv%TxD9sT+6=`EROIa291HYW4ylU~2MzAs}@MA0*jM{%yd>m4pP zr@U=e$=;v->QMFenL8rZpAG!GJ~(8yav!(y@$SRo=koUdNj$b}y|RkFvQkIGDp%+J zV<#U^QU8`WS+4&7W8WDT-Qi z?YCULp7z|`zQ--~)vsvr`Mvup!wx($eijwFGwZu9_X63NUwQ{k9Zs=?)@-Oq=e)N_ zF~O%LYr2NGVdXvEB%g=Vw^}|jX7ZWx|0ip8eM-pnf}5NnvIo~LTE#M7u*T~H=e@6; zpDUaE1tgD^@dwM@KD2YXZJ1bcT}70`+nX2P_nf^GAv^O<=UaKzA9D9f3vRkw+&-|I z?_lZ2ecflHo^Vy}dHvYg>5`>S`cq4{ZEugvIP`Yw&yCXl!j5Kv_cm#7I$2$D{n%~O zJ-H8ZnWxuvl>5$!J$yTu<+fUj-o5XhyYrJS_ZQscQj$HkEPsYVi+=u!x>@>y#m9fV z@hy2}f6zs>M^j0y-NWRE(t=k3zJb@>O;vx0-P_x|`SgnO9=FyT)cwm%``Uc}-ESTS z3Db!W-fA5bH(ciMLH5AISYZ|y$E(dzbFvp5RfZK%>q}_BwP^L?`Ai|UtrKMzG-{U#?JpD& zXO1c6zxk*}@5s-U8ZTv>T^y8Lc=m3c{&Jn}pW8lK3sPntj&w9#ASKXwVZy_`#Rnud zYzlmm#If&s?!H4uzOi#0!wEi zd6v4JcgDZd`TI&zj)&f#_UzK-1$>6CM?|h~UZ*Lglc8`fypubWrFqeUzE9I$PsnIf z-hVH5|JMzFz4o3oT(DEnkv(Ic#lK^R3ZDMVUanu+QMcOdR;BR73IpNE9hwSi{T_9- zb}jwf(`(SGrEE$gKgpI8^|Xz46!cu?zApt*cn+@etXC9Bo>(%9opy{pcecb`#LA@=^~ z`FjgkPVg_1{P$0J>F(9SpL%O#mMJ@*l=xKWa>f5;`R^cc<<(!?{=M9|{MUX4Ki+@0 z_>O!nX*j!p;{@Z;M)3xr2aP!jQ+VcWKKPqA@#*JH{tWl$cD`zR)YZ$tz@S><8c~vx zSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQ mLtO(iT|@H_LnA9Ab1Op=h=!KV%y|q93=E#GelF{r5}E**!nLme literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/xfce-games.png b/Media/Themes/Umami/Icon/categories/xfce-games.png new file mode 100644 index 0000000000000000000000000000000000000000..0266dbce481d486a9e305411753caba6d75b5c2d GIT binary patch literal 1261 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/xfce-internet.png b/Media/Themes/Umami/Icon/categories/xfce-internet.png new file mode 100644 index 0000000000000000000000000000000000000000..29c229031fc60d79d15d41b4fcfbbf636bd55870 GIT binary patch literal 1532 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE|2$nBLp+Y(oto`4Ib7oS-ZT8ghBsAj zZ(4X@j&a(#mdM^+mQFi5773*}Ejzd>Cyy&+?gAd&S0db@Y#pH**S#8zT=yu5PK{z* z>KetWS)#kbbqUk8ZNgDi_5ZEc{*IVw_3I0-f(HY%My#vbBt*epb$em2CyymOVUm+>atnzj?S_ zRDUeRT(NxP#^l7Tbp=zZH_C3!Wq$GU`s2=fOp|+?x|`Hvo*d07UEp}H-8XaVysIt~ zuAb?&`t@c$!@`;BtzMq#_Ft64EMoO|?2MBuj(9RKxbB@Wnc*16gOvwaLg(|{Wa50( zZ?32@uRroM|NJ^lhg-{T?SEdeck!cDOi4ePSIA2n<}iIpOE|-4vz=janE00SJ`*Ot zT`BT?k;{$Fu%pQ(_vD#&|B_2{-<11LP||oWQ$?un_3bHFlH9+Eid? z@lJZ7X~fBE77OGTFR0#WoA4u; z<4%y*neGh<$&5^rq9<&1k21z_^UYfmUdimUWbNst=eF21U45oBR)Yi_ zZoKh3UnsNrR$=Tq$A?$tKFnqhs9G%lGhAM2=@#BjR-rXs>(n+sS5i>pU-?sM!;kF( z^Pe+H?0NQJbH|r&lTP0?=()Av%8L)|mQDTb^OgVSNSDpYaJl9xYILqFdH(|D-CijR zmd87$OkxP!&5|JedH#*9^SabMr&X|?iK(-&T)gDsr8}k_!lva19+@gyJuUw-DQWUb zwu5%79gO_@WLejG=wuyr{Ff`EnSE>~8*A2)yB?2X7T?KjW#Fr1oxr&NP}a%IbBgD# zd%sy)P$Il->60le$3Gs>*~gi>UvSYk#y5{o+pOAovsrNS)F)>gvlhzl54*SYS~{PZ&^&APbs;^Ni*{M?3R?Y|u| zN|i&xj_Nw!Nb{R&J^yiO4}Y5L63x4NQ;WaxW<6ZS#G)RS%=%gA(Dy4!DnFT$F6mG9 zk~^~ECfoAMtn7jJ8}i<`xH?-;KG~xnm*2-dHf6$MGj08QwY8FFJa8|IN7P z@4lB@GK^%h4AQ<8s8iJtyVPinx3E>XQP-Djp`wtJYnrlU_?|QLy8Z6@WBxUCee3p4 zyZO&{XXFN)S?F!-^zGY^*5xz*hAjzx_x#I)Df9TnkA>}h?%)0OJahEz5yLxFq*ebiukY{wvC(xw3j+g#YKdz^NlIc#s#S7PYGO$$ zgOP!efv$n2u7O#Ip@o&PsgOxAp)4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/xfce-multimedia.png b/Media/Themes/Umami/Icon/categories/xfce-multimedia.png new file mode 100644 index 0000000000000000000000000000000000000000..41374e91b5385e8351e78ac3f9680bbdf132d544 GIT binary patch literal 1428 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/xfce-system-settings.png b/Media/Themes/Umami/Icon/categories/xfce-system-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..a04819c3106cd61aefbbcc7aa566fddb5babb335 GIT binary patch literal 1143 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&d7#`=`_i3|*kdjfnyTp36KCaFv6>+1^(3mF&~bi#WfT2+9Xz-0H!g zrlzL8zTPBtiAm}bzmg@D6(zN`we#l9n>ll4dwctg($pyQVfyUfDE#Q_GxfZEbD6 zGnP(Rwr}FZi4&LYo4$10%(aK-Za6h}+qtg}g*?>>L~@ZrOUFW*0X zeE<2=$IqWXefjd`+qbVjzJL4ivKYsrB{`2SepFe;6`t|eIuV24^|Ni&y-~a#r z&lj|4GB7YWl?3?(GcYnSv#_$Ub8++V3ki!zO3KK}%B!fTscUFy>*^U87#J8D8W|ax zSy|iLySR9H2ZV)})i*US*|X=w$upPV|M>NL!inuW7#J8Blf2zsCO>4pzm0)`F~ifv zF+?M{c4B()AqRoBW+xF=A?-5Zjo#WR9o!L-X#6b*o|(z^*1~Z862>9w|w{W z%JRJQ{zd=RW*u2IX+KMxmz>V!pLx3s_9uLNda-#*+Kh=-@eScU8j4HREI(ZiSpP|C z&C(UU*_>Nte%_3f4&gJIxBcO(&L1~VWb?9Tw*)Hdit~prQs5BU#PwgP<@4SbitK57=jrcJdv%JOHvi>1A7*rdQB#pd??_}h1k4+6!Qd6+M|pUe9mpnv4aD%<2) z4-@`fySe^@OL7R~spYkswwV>&^yYm}ugwp0>HGM4pFeSK)tn>C zib_)oc5IK?J0X9ontJr)NkU1!6SrvPJSe!aP~&KdQM684x8^O6_U!rD%ncUJaqG<` zGOU`GeNA-q=3E)y6dL)sc*)<*3=9maC9V-ADTyViR>?)Fi6yBFMg~R(x(1fI24*3K z7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O4>2^dGBUR^G=XSn>CBu5 O%9)<7elF{r5}E+d0&w`F4Dh{?Dhcch;OQzW3es`4VoiKk@T? z*}dOwHd->{;NE&&H@m(Rj@Qnd`(=OT*q)0GWA!=otorc&nb9_}lTLU&`}yr@M$MDv zDL2{HdRXZ?lr7W|VO5q9EnV@<@l&Ru@&AYSXKlFT5@;xS$NsDtzsAngG^>JTtGGiJ z%YIbXh|$P^t*=nfcdivhbF}-RJHJ-uTs~m|65-w-vXL ze~`y1F@?8lIG%f%oY)o6y@yM;?};|tyzSwTOh0N-LaH z_0B`4sr%C(m_=FH25jB2Ah*<6Z}o5o_a4y!yT1`p%8o8$WEf%r^M^ zGw1xp9eZ!`{*!VP&w9O!d9`$jf0MK12J5wF>J7S^jkZY%3kT1b^GDL_D8m&m^;N5Q zJN(vt`!jj>3T0*grGSBbhi4xAgCj) zW8nGzmiY;0cU;;FCEmK3pRzdXleNrzNkE|gOoMYzHdQO-z4=$&++kUn(P<9GsC|wyX>PEcrU!dyd)s zsB-3;mZtvKMhKg@a5>bn{(CE&fKw` z{9^fg7LPMmlb?P&6J#W}`J2Payll4f+spDNPS_GI6sKk*pSNMc2c^WLvv&Ns{Ce^# z_7m^dw#@C}OgmdKI;Vst0Ij99r~m)} literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/categories/xfce-utils.png b/Media/Themes/Umami/Icon/categories/xfce-utils.png new file mode 100644 index 0000000000000000000000000000000000000000..6725141da6261718453ef85be8568e8050e83ffb GIT binary patch literal 1471 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zxP?KOkzv*xkm+nm-tI08|3PrU-sO`S7+4N^x;Tb-9N!z3?K3%Dq%BUvRf;t%&&Y9x z-U}mx+nW+^9L?C2V*h7r_sq`IG1GEBCI5+7Rv2j%DbuG|9~{8@DSr-ZDmYk0Z%rqr3Uc%Rr@^=<5$ zw;}cXqKg?%SWKdLg(Ef>df$IB<9^2-hP`q8UmK)OUKjE?|LBxVoXh*W=F>%u7;_@8 z%$zxOo1LLyIQ=`X1(Y_n3^*>yTBm7G8e2!)@JiRpahMYwy-yn6*8=_&PZboJ0+Y=^E6`TIsozFyyxBb#4p$&=Awf}cMU%z1K*5ySr)cp_J)JvPC zZ*Y9DdBqD4A79_1l-k-_4UJRI$;HZTZEYvy-qtrSeRn^5uWF>x*(XV*Mm*Zd@(1^9 zXl@8yvM?fU%ekDSC90|A0pandIpe&avPpYA2@2(VfAWq8i_b9*pYLr6j@3LluCq7) zwC4J8N%vaGuS6a`KBu)|i}x%Nx%z$8&0pVyI`_U(+kf)HzmKb4dUA=G9KRU%pylVn z?;DLK@BPfXMrq>9jr)t4Q<=WZ&ZbkF~;D7$$0GUJT~HA1zaacb9o_WX*~ zk-j|Nf5DN14}&h1C$3nspS>*2zf6x`;7-QL(x@cuoeQj)onI&3lDWqtJfr4^*>=~i z|C=?gpF6ky&c(oQ%Om!vh;!*SyEk1dGGS@0vHPBqzB8cVlN zKF8sE^bGTuh0-?!7WC~`eDqN+KR=_U)^Jn3J-gC&1IBMP-};V5#!X#*qv-pR1vhsE zO8o!L@r-AGp6G<%Z)^i~L|&Qv{^t1bk&$nbF~5z?1-+?Fd7_&3Up=!5C&V&aZ~p!? zFG(Z5jP7}u9I^Ei99$ZX3K%%9w_+WX&QX7&rup1Fx}1h2Rq|EsnpKugH5(SPNO zjIWlBopWziAC1)1^8au>(r&f($J?=oIae?l+LjzV#;bBpc5`Fnipd^lT!GUWHJrt0_aI@-Dq9o=>JTtaDT`&I zx!%WKFx%I(u&Vx-`*G#jW|1ZSN;}t-l(x=dyZ-d$$rF;7M2voae%t!aJD6EKL1ssX z=2!k5^}l%a&V7ooTm71=n*D!CeecF~>k}$Iw7%6{#B1fR9Tlu5boIi7{i*we&vfNf zuS-zQ+P5T>S8S2i4aTkWxwju#dq3mP^S`!wIT>4=Tds4g7y82y#}a-> zujxVS-;kf;$s5Ze=RXc| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_s83o-U3d9>?EK-I%9jDA2awkZ-{PYXPB> zJ&s+~4K^$t|5(Hq?KX<-veqnJ@@0Ak?~-K;o>W#alz4UOZSX7HZP#3WGi|AfWM;}~ z<9X*l-=6gF@V(nC33l`C-<9poc93WdTCC-{^N_~iI3LjroM<@^yul+{^1;p$cgN|GMq*4ZEm3>r82aX~ z-D-F??ex*Lz0G>XjK9{*((LD-;g>$sXxW5` zOJ2OrbSZ4D0|NttYKdz^NlIc#s#S7PYGO$$gOP!efv$n2u7O#Ip@o&Psg;fq{X+)78&qol`;+0L4%lE&u=k literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/clipboard.png b/Media/Themes/Umami/Icon/clipboard.png new file mode 100644 index 0000000000000000000000000000000000000000..317b3cd31564cfe38d2d39a9654fbdec81acf078 GIT binary patch literal 1196 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81Fdz1GaSZV|J~!m9e~hb)ZTb7V{$)2$)j3>HIwU2&+tkA|m#IpYSW?(e8=u-wwL0He}nX>z1^oQETP4&Lb|~Q40)pQ{Nx2`E%yX z-s;Ghh>4zQ>F@5&EUtS#=l;4@+rH%Wd+X9_Y92)#G5L7*`etKe`TCM9{qJk`%2<`G zFtW7z_T}QliR#6#ZkFC%94;olFDC9^?Y(VpcmGzKQTKD|_hoUj>;g4J);v^po>^j* zE5&B;^-+rZ#)uh_(b13NYwG?T{ye|-*SmV5HFK)=6r0BHJh18RQxB82Stf;>lNrwY z?_)S;nRDDRw>WryZ&X;xqnTOlsgW9YrrZ8~cICp$5Elm{{)^Vy`$ex$Keqe4&YfFs z1-~6K)#^6H)M=D6mCc83C zWLeU%r&{`D_jnmhbM3ja1w)(HKiFzKwMho^$3!@S-K zovu^Le=VxN$-HCTXU_X+`nGK zehUBds`8R(n71;8>Et$%j_QLGV?`Vcd>IZ-^j&`8-n1`{sRaw`Ha1T9QqHo@j`i~I zyP^e*J4`1$Q9N-}UN8Tr^quRtw1la5aQU8aQYtFsd!I`ZFWGa__5Oa*d&L ze!kav8GXfynbSaA#U4!kpt$TkN z6s-LGQQEO>+uIcmtHjnu%S0?`c&?}K`1gN6^ZVY&9$7up3BS4zWhoU%v@c)tP)J2{ zO_t7v1#x>{NpV?sD{P&+FLs?m@4^kUII{Gb)m1DeKlu89q2~W*QxDCpT^GGP-*0D? z+p_-D*@r>N8f(&6<(iMH#`x`vWxOEFT+1lnSimUxY{OEI-j1LHp2-?()R=B3Me$nYWf6f{7un1aC%bc}$S*BgVqsgn^ z@BcgJ#jMz!hA+4d-{N literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/default.png b/Media/Themes/Umami/Icon/default.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9f7ec7d71b2861c694dfe0ac1ecfb88987ea82 GIT binary patch literal 535 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUNSs54@ z6p}rHd>I(3)EF2VS{N99F)%PRykKA`HDF+PmB7GYHG_dcykO3*KpO@I2KEw9Usv`g zoNPh{2L0~)Z!j=0R0sHkxc>kDp8*VHT6gi5tdMEl#a^|AqiPFB^%l>zAGNgIQM4Oxi_;fyjyqU)BXqFuU@-$ z?b_9A*RS8Z|KR?;d(WP~c>e79+jsBYzkB=T%h&H;zyALH`~TlR|NsAwnD{QAfq{Xo zB*-tALB)8(!CNN}{5sFTz`&T~?e3zncf;0A3=9lOo-U3d65*+Rfm{s+JkFE1DIEIn z@AwyI7FKD&lDt{__e@ed;QnRNwRM5VQob6w6g_udV(9#ZEns5s_u{@IO1on>r7*;0 z&v9V*_ASoA_JaH$CBA*$jONbj$vl-N-+N;jE^uD-R7~31v-k}I1A}UbYeY#(Vo9o1 za#3nxNh*Vpfsui(fw``cafqR%m8pf5k-4^kft7)Q%en92C>nC}Q!>*kaceN0?Ejj9 xfk6^vLvVgtNqJ&XDuZK6ep0G}XKrG8YEWuoN@d~6R8VX&c)I$ztaD0e0st%l(4PPR literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/3floppy_unmount.png b/Media/Themes/Umami/Icon/devices/3floppy_unmount.png new file mode 100644 index 0000000000000000000000000000000000000000..dc1d789207c3f881b2511423e3260557db9e2bea GIT binary patch literal 980 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{$o-U3d9>@1i-J2~EC~~wuzg+FaD#7F} z9SdAGd|do#u~`JC(?15$92ad}<&GwWhz^CM#E>;jTN9RQWF-qpOB^T>r)EHPMkS&rc2dG((rY3%Ii}LqSpSK>!Oy_vsdV7#*ECP4SQMK z-W+(Tu}RU`FSdT_Y>}eri|%Y#D|RJH|Cwg2uH#Y5O*-EMcC1mI$n)p9xrx0^{I$O8 zIo2*ldv+gHd~#=ft%9)H#XmoqK7K4@V`ulgJVnLRYh#&JH+zJD(Db!vx%^0I9= zv$jfQ&MG^3F~fvIQNZaywLix~4KX9d1xcsY&z+wg(BPfhbnY?Rh7B7ou*L~Ikqnv8 z!Wj8xvg0(#3ud<;JxV&xSMUDdQ}51e_6ILk&$jwu6`j9E{$@z>wts6`KHvK;P|`I0 zwUJ7=+}j_;Y)yyr@6}grOaDFXYqa_L$Fc_Y_Wj@IZQN)$ZQ8UC_bz9c?BYmTy~DYg z*&>{^h4WBQ&cSW}55BQC-Fp6@@WHm+c)76K+IJO8ci(+D<7S0O%+}Ut3{M`s`f~TN zcpalNt4E{hfvAL7ckT-;V%GECJ1{8yx2|J2@c;Q{4ReP{3=9maC9V-ADTyViR>?)F zi6yBFMg~R(x(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O z4>2^dGBUR^G=*qT`j@1|z`!60vLQG>t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~yqm P1_lOCS3j3^P6| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4nw~C>As)xCPQ9Nm5-M`s{`?k;+WoXFU_0>r?`o%xQ>)$MR!{d@x@p}Dj~e9*)>rjwhp&6$wKOQNsAy7&m91sZ@~>Ba z+n(MOcW2Yvi><9(L0K=VxR#1|X`1+YUpu_fZ@Kg8tA{qNNl1J+%ckVTgHQA8&*(Fq zP!V0~x9`)ZiOk(oxmJd7#a<8eTKL*(*Sg7GOXUg=8%$cCdwb2AH7k(Fq}4wE%{Py1S|eoe%YxTs{dMn#ZJbkro)lRc z&EyFbdHCCIZ(P3uM}QZvfJ9s4lpw98MV-qycL_vo+`)d>fZa$#gzL%YN~4)PZHX#h z-?QJ{?|+A^UcF}R-Q`!a9`4|C6j0G!HRX_j z&$p?kBBmYv^XHG->brMJ|J`Zzd|-D$@|*(m6Gof!-BP`6H#RRnac}QZmm3NkA8hz9 zn@kLP^xJN0RPW83ku4&(gBLQCH0mn6QV(d5>)xx_BC+~v){lMjcO**eSaL93{#>_u>rW=@2nm;~e#?u0 zKRPPEkL8tvDI0(Jt3|n&8`CQ-wiFdI&)Ddv#P)$f{oOQEIlIN@3@!-Yf1-FXs6nv# zw}ZagOIy}s_38haW_&t0Y0HdryBQc5R7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly z3@xmTO|1;gv<(cb3=F1ywlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E Ri-CcG!PC{xWt~$(69BbmVnYA` literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/audio-input-microphone.png b/Media/Themes/Umami/Icon/devices/audio-input-microphone.png new file mode 100644 index 0000000000000000000000000000000000000000..58f1a80c27f384d1cbb6ca6fce0de39e9feda719 GIT binary patch literal 1088 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U&jt8|xH4dX(D2~U@L&c8hO)9UxTLqQmy4TILQ)(91H+LcM~)pk z#=yWJCnpyg9_-=i=IrX^xTqti=m;BIYlyK9 zj`m(Y9--mEVd0@(KAxfB!2tpO@rkkCKAt|l-U&%@LBWBc;lX8<#S_86$=S)-*?Hya zrB+r}PEL+aPEKxauI}z`?jCNQo*v%b-rhc*ety0Ifqp?DAdO)WArVnwNy$mcDM@MR zsc9K0X&I^MAe5GonVy-Ik(r&AnVp`Mm6em5omY@uSe#!}Tv%FGTwYOHQBhu9T~$+C zRa;kEUtibQ*wEP6*wj+r+S=OQ)!N)6-#>BU#2GWD&z?79-h$cl7tdR` zaN(jQ^A|5(ymaZ(r7IRMTefWZie)QTu3Wi#>FU+1R(_7Cuwm2I_1m^> z+p%NE;UkBSpE!2v^r_RQPn|h)=Ipt%=gyzIaN)v*i|4Oiy?X1`tvh$_+`oVS!Gi~n z9zA;e`0%-Qpo zFWFfcGMCV9KNOn%6Ge;We>qo${eV~EE24b&08Yd8s_jIMkKLIWuejLwdIdm-hDe}a-GB7 z*hF@6u}*{4o!m8BC#tIX%)NBYI5VhzYqxFJTfMcySy@`zr@De;ngUe!%>G@qYq!;_ zyD^UfReNF+6l6mW9dSL*q0^){@tsh>B!+8(+>;X0n}6Q1x7FI9b@H&e&b6Zx0zt|qxl?Z^NxTt%^jP$j=vyVFgTe~DWM4fEE~CV literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/battery.png b/Media/Themes/Umami/Icon/devices/battery.png new file mode 100644 index 0000000000000000000000000000000000000000..9db15e1b19e3393c4745fde72d7992ee448043fe GIT binary patch literal 1214 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_2RvOILp+Y}o#LAzlPYn%-gxtF&+p2! zOJ* z`_=D_-w@pWTyPm&0kvol%#Ce`TueA zp3Map|2^3nXKA*C$K>k48xx9r0;jx>|DVD5CH|nE!S}FFc!pSkS;vesR z%@+2BLA~Amz}kjbhv@&U>hXWMTm$27tr5SqZ1qI;Z{^LxO+`!h?O2|zzx-TJUiM0! z<1cghnR%F&moq(Bb9V7D>%d)d?u9%nQnIdAUA@J&mencn&a^z8@Tc$IT82$e-`<+f z?XasN+|H%?N$!+wzZI{AOHcn&(0au1^o*svU$WyjRV7c_lz6G|#m{GqZcDv{4s4$I z^STqS%Ev^d;EmJrYBfkFXXgQp+MPyp?Lo2<$f)inzr>qe=nkDEwr9mj@l!G#p zMFabZ3(NAN7?+56Xr6p&wRY`V4#gXqEi0H8HE`Z&kY)&3z?!vrYQq$v%bOe)YC1Tx z7v5LeUU(vL{+(y<*PT_Gzc@nYjmAFC31998NHfmL_g_-DIWugQ5P#0s#l|yIl^vEo zJTBgQ%*8~C`M{<%vPUPMRH?SQ<#mob zI22!H&QjZ!d->iy$Mg5(f@D1_Gqa-R&YxSWKV3V9byEXt2g8CNDQjcQyjW{%wH*z=6l18De ztE0BNe*Jr&Rpn3Oa=EG>A2#k=_v3Qz+~4zVoRg~k`psYa^|3pT);`UAz_)=c8tNLD=^C1c7#dj_nOhl}LNqA-OVVOsU|{fc^>bP0 Hl+XkK`5+uG literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/camera-photo.png b/Media/Themes/Umami/Icon/devices/camera-photo.png new file mode 100644 index 0000000000000000000000000000000000000000..597cfa06fb33f9a96b923b356371e7b540ea60b8 GIT binary patch literal 1410 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoEEuJopAs)xKhI;!*hl|+GlkB(MR(Rls zgmukk4wr>lM;CPlb^1=|nw1;9lzYOa48fO8q2_0IWtpE{wYtko)Hhm0bJZ1(rMXUv zwrDNuaC1;ptWxl_^@2s+E+x7*F$=}~u>56f?N1W$BuxU+lN=k~dz>4~#Kep%P zhRqrex=3%}kASOSa@I+r2R~gBSih9bk#j6BFH9*j-fv=NwyR!7_N%|2U!3BE-TsUxD$FJS9(r2Ds=vQ@rgi;4 z87V2Lgv}oXTm>ILRuoZ{bamBQA1%SA!+H3f>g8|O)Rr`H)YsbP?3u9NsvtD|*taQ* z=Fa_*zJ1^Bt54PyDNaBAaJ95~fY#K4S0UPqZU=tZZ_Z%bp=`eY;ElP~1v~CMsF1GE z=AM@v@cesnW~C&*yx-$Pt=DBtf_~Q2*|Qyqz4~5Qv1qI8>=NlmQU@P+_Vo27*$N%J za6v$Zk8z`mjO_ZdgNip4#kp?Wx^<{br*G~NC9WrqP2WmS{nI@W)yTKxQsyTGf7YkR zzkD${v^r5%re62V;+;!Hb(dRD@IJQD=s!!)MvfIyDWQ$mU%RI0HdWYgPJAQ7bb)zQ zU{H2RLSo{=JsWq=*8J@MZkpqpbHWui=H4>VAD`c`S@h&(=PRi#+qWkc7IO0T>UyXP zU6}V)=vLjVEcfU8-FE$q5qmA|FAx{msMC2O#mGZYb!Lgs!DVS{*0m~H%vmyBJ3b

T$}#JM#hq|vPIjsi`&iT_ggM}MNi?h>)iawa{nS3qOM!o-+9n6 zuV$UicHsaE89ns_@80R%$um!l7BIbfwR%akgvb#l5!X~7{s`q0^6|UAu+3JT=Q~Sf zWkdTSvMMuuk_rk0KKIK7>Rxf4*zILBZ-dI@PWMF` zwVr85id2LDzwljp>H7NE-xn6IP@S5W)OoaQ#>| z^t}ojxjA{+$CJ7Ke31{1Qk>pB`Q4t=PyeXQKKs}0bI;B09k-(V`L}kzcI$k-ewt6$ z{K=1m&d%L+gZ1HM^ZQk^ufKL(cp%8Qb?T+EH_zukShwzHmF=EY-{)IS;_&oRKNK`^ zb5CM~0k2f?J%+26TZ_V8Z?`$WdyPp*=+!5Sbb@}^O*nFh>uvsoBVT5}KIZ8)jrn}K z>IBU_iF1s<`PiQQah)f5*^8Nr?DNIAynO(M5e`tv+%-Xo_U-`{_4?gl= zR}|1vKD)?_fq_A_#5JNMC9x#cD!C{%u_Tqj$iT=z*T7QOz%0bj!phjx%Fs;Pz`)AD zVA^L3Llh0U`6-!cl?+A(hK9NZX1a#vA%;d)M&?$ArVtHE|B|#A7#J8lUHx3vIVCg! E0PwVL8~^|S literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/camera-video.png b/Media/Themes/Umami/Icon/devices/camera-video.png new file mode 100644 index 0000000000000000000000000000000000000000..6f3d18770c586b199d5d006dc9f1053506c68d7b GIT binary patch literal 1169 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq{9lr;B5V$MLsQPWvZ^${e?U{_Pv%lur>4 zR;XC?NZy*Yx>JMYyQ0bcWH0srw0!%9C&@;#a#v|an0DIjS{63t6sg9z7X~K>h;O% z8IChHJ2PKz6l|Ej{>#OC_xe&JcdYX^kZ|$pOqAgG7=EZNae_z9@wf8fkKS_~J#uiy2eat<#$|YnH*;;FCoklcb-Y->%g1U~c*G zPM25z#TXh=Bk%0_sd@MA-Il|NYHDgT=FeZgcyV)ne(m9J-^|(qFPg;`&1!373!7v= z<+9~acm!#I3dSy;2 zI{(hmXs1(reBrKX)2DN`A8v6{)H$s*`RCMg&*$lL?Qmt(42|^Bc3l{tkbYZ)i}k_8 z%MCGl$N&AaTUTwFMpO!`CmIqBQ-qAV=GU*5;)B zQyg{*G2Gs^@iSjWYonEPK(w@?SnuK~$DV%{>^|D*X8N;6ZmsF;*|Tk~{4%g`ZO~Qy zx##gzkE9IND8&Gabr!rUOipil@#f8uZMm0TntY#M-SFfU*H+%|6Yt(X7_6(O;TFrt z!FpyhV|BGykk_W0IukvX%-EG192@IwAmL)!zQ^)|2}9lGBVT@ZD=qUp@cy^~&#G0c z3YHejJm6=UF>kM{w|8M(dRp3wl`9oRxF()WW6a3OdGh;c<&>a|wStE(+}rQT!5DNZ zIn?8f?mTVgB~zv^U$#t*k?+67la=cFQ(IdFu3Wu(@y;EeExK+75-bYy&vP>zFD#I0 zZ*FG3Rv(pIm8Z$~=Fh%#*~ag>cE4^swo_oa5>vIvws^g=rR{bRR=zz`{q^)t1o4X` zFu(h9C+J8s>z;DE^RKyd-?A>(Iw#J+`DAbQ_BoByTP+kbLMm#R3Z_j>&~qp%e30go-sCe*n^>bP0 Hl+XkKlN0+G literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/camera.png b/Media/Themes/Umami/Icon/devices/camera.png new file mode 100644 index 0000000000000000000000000000000000000000..597cfa06fb33f9a96b923b356371e7b540ea60b8 GIT binary patch literal 1410 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoEEuJopAs)xKhI;!*hl|+GlkB(MR(Rls zgmukk4wr>lM;CPlb^1=|nw1;9lzYOa48fO8q2_0IWtpE{wYtko)Hhm0bJZ1(rMXUv zwrDNuaC1;ptWxl_^@2s+E+x7*F$=}~u>56f?N1W$BuxU+lN=k~dz>4~#Kep%P zhRqrex=3%}kASOSa@I+r2R~gBSih9bk#j6BFH9*j-fv=NwyR!7_N%|2U!3BE-TsUxD$FJS9(r2Ds=vQ@rgi;4 z87V2Lgv}oXTm>ILRuoZ{bamBQA1%SA!+H3f>g8|O)Rr`H)YsbP?3u9NsvtD|*taQ* z=Fa_*zJ1^Bt54PyDNaBAaJ95~fY#K4S0UPqZU=tZZ_Z%bp=`eY;ElP~1v~CMsF1GE z=AM@v@cesnW~C&*yx-$Pt=DBtf_~Q2*|Qyqz4~5Qv1qI8>=NlmQU@P+_Vo27*$N%J za6v$Zk8z`mjO_ZdgNip4#kp?Wx^<{br*G~NC9WrqP2WmS{nI@W)yTKxQsyTGf7YkR zzkD${v^r5%re62V;+;!Hb(dRD@IJQD=s!!)MvfIyDWQ$mU%RI0HdWYgPJAQ7bb)zQ zU{H2RLSo{=JsWq=*8J@MZkpqpbHWui=H4>VAD`c`S@h&(=PRi#+qWkc7IO0T>UyXP zU6}V)=vLjVEcfU8-FE$q5qmA|FAx{msMC2O#mGZYb!Lgs!DVS{*0m~H%vmyBJ3b

T$}#JM#hq|vPIjsi`&iT_ggM}MNi?h>)iawa{nS3qOM!o-+9n6 zuV$UicHsaE89ns_@80R%$um!l7BIbfwR%akgvb#l5!X~7{s`q0^6|UAu+3JT=Q~Sf zWkdTSvMMuuk_rk0KKIK7>Rxf4*zILBZ-dI@PWMF` zwVr85id2LDzwljp>H7NE-xn6IP@S5W)OoaQ#>| z^t}ojxjA{+$CJ7Ke31{1Qk>pB`Q4t=PyeXQKKs}0bI;B09k-(V`L}kzcI$k-ewt6$ z{K=1m&d%L+gZ1HM^ZQk^ufKL(cp%8Qb?T+EH_zukShwzHmF=EY-{)IS;_&oRKNK`^ zb5CM~0k2f?J%+26TZ_V8Z?`$WdyPp*=+!5Sbb@}^O*nFh>uvsoBVT5}KIZ8)jrn}K z>IBU_iF1s<`PiQQah)f5*^8Nr?DNIAynO(M5e`tv+%-Xo_U-`{_4?gl= zR}|1vKD)?_fq_A_#5JNMC9x#cD!C{%u_Tqj$iT=z*T7QOz%0bj!phjx%Fs;Pz`)AD zVA^L3Llh0U`6-!cl?+A(hK9NZX1a#vA%;d)M&?$ArVtHE|B|#A7#J8lUHx3vIVCg! E0PwVL8~^|S literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/camera_unmount.png b/Media/Themes/Umami/Icon/devices/camera_unmount.png new file mode 100644 index 0000000000000000000000000000000000000000..597cfa06fb33f9a96b923b356371e7b540ea60b8 GIT binary patch literal 1410 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 ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-battery.png b/Media/Themes/Umami/Icon/devices/gnome-dev-battery.png new file mode 100644 index 0000000000000000000000000000000000000000..9db15e1b19e3393c4745fde72d7992ee448043fe GIT binary patch literal 1214 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_2RvOILp+Y}o#LAzlPYn%-gxtF&+p2! zOJ* z`_=D_-w@pWTyPm&0kvol%#Ce`TueA zp3Map|2^3nXKA*C$K>k48xx9r0;jx>|DVD5CH|nE!S}FFc!pSkS;vesR z%@+2BLA~Amz}kjbhv@&U>hXWMTm$27tr5SqZ1qI;Z{^LxO+`!h?O2|zzx-TJUiM0! z<1cghnR%F&moq(Bb9V7D>%d)d?u9%nQnIdAUA@J&mencn&a^z8@Tc$IT82$e-`<+f z?XasN+|H%?N$!+wzZI{AOHcn&(0au1^o*svU$WyjRV7c_lz6G|#m{GqZcDv{4s4$I z^STqS%Ev^d;EmJrYBfkFXXgQp+MPyp?Lo2<$f)inzr>qe=nkDEwr9mj@l!G#p zMFabZ3(NAN7?+56Xr6p&wRY`V4#gXqEi0H8HE`Z&kY)&3z?!vrYQq$v%bOe)YC1Tx z7v5LeUU(vL{+(y<*PT_Gzc@nYjmAFC31998NHfmL_g_-DIWugQ5P#0s#l|yIl^vEo zJTBgQ%*8~C`M{<%vPUPMRH?SQ<#mob zI22!H&QjZ!d->iy$Mg5(f@D1_Gqa-R&YxSWKV3V9byEXt2g8CNDQjcQyjW{%wH*z=6l18De ztE0BNe*Jr&Rpn3Oa=EG>A2#k=_v3Qz+~4zVoRg~k`psYa^|3pT);`UAz_)=c8tNLD=^C1c7#dj_nOhl}LNqA-OVVOsU|{fc^>bP0 Hl+XkK`5+uG literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-cdrom-audio.png b/Media/Themes/Umami/Icon/devices/gnome-dev-cdrom-audio.png new file mode 100644 index 0000000000000000000000000000000000000000..8965f76c2ff13fe81320244853f0eddd315824d3 GIT binary patch literal 1507 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq~_zr;B5V$ML(UA?O`YEn4_4E<8qMtHK6AMz49y#`1Yx%cPfR!ic zk&D&bl}j#3eu!gq+bqgy5i!v_Bcf?|I?)*T7d6D|BbePdAZ>5KFKU7F@SeV>2W z+6@tsKK3&YPL^bSviWnxsw)gj+5sO9;$lysJ6f|_d(9*51XT0ShSZg zv^Vs-TTMOED}CK;R`jf>ZJZ{i@-z9|4=oUOmb;y3CY@lCVZPCNZiS6*yU(>wzDVnL zclWYR40lRMQ@9aY5V`e1j9G`H{n42huU>t5U(F%z1=?8Xf<#@SV0v zo9~yH@F3>tudlBUot z{l%fH<-udwgteOuR=+!xJkzDRn%m9IZCTv9y){2Sg>PENw?@^)LRad?UY#cII33-e z6TFr>xfPCTjwB@X=r+3;ry1*R48XNrD|s+;Z*nsumno3bj}s z@Ze8tV{aq(b1$#2F{)CJ59|yzn7ze7;){V)?}JLYJoE10yXxWFIk#*vk(I7Dh|?6~ zo_$=`Pbuhz|Lr)I!$k=;j0X2O-Z+WqDR!{BvCsZ08JgP`x4zwP`QqQ2O&2fDzgWL6 zf88^kEw$I9)>O?n|9s*?YqfoQcqEXz55Y#%FR!rRv^_?~nA$n15CW7Yjm{F1Yq<*+c|$g3*3&JeLA6Gm39dZ6%Ud>XjDGRXZsro1_X7EQXH}?w)ceTzQPR}Y?$6;5 z%UpNXFm9YG@MnKW@$S%57mW5(R644$k$wC7JL}{;OHNt6yMFcR+vPj< zM!UXSx3ya~TE9F$^kZgi?caNw)2nyRn|Jx>Dv7(_S2*o2eCG4rExvxfN9cZ^KZ1e& zd;acvvh~QSH%j+zZ_mH~yq!<>*8LkdDjqyI*vwn~?aj}E)7N&bEw%nXd41b`#%M-~ z5~laOM;RCxR7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1y zwlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E3skmxy85}Sb4q9e0G3yw ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-cdrom.png b/Media/Themes/Umami/Icon/devices/gnome-dev-cdrom.png new file mode 100644 index 0000000000000000000000000000000000000000..cbf6f96e655c00cc6c637ced7e3cc5d784d7ed0d GIT binary patch literal 1176 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 ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-disc-cdrw.png b/Media/Themes/Umami/Icon/devices/gnome-dev-disc-cdrw.png new file mode 100644 index 0000000000000000000000000000000000000000..8965f76c2ff13fe81320244853f0eddd315824d3 GIT binary patch literal 1507 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq~_zr;B5V$ML(UA?O`YEn4_4E<8qMtHK6AMz49y#`1Yx%cPfR!ic zk&D&bl}j#3eu!gq+bqgy5i!v_Bcf?|I?)*T7d6D|BbePdAZ>5KFKU7F@SeV>2W z+6@tsKK3&YPL^bSviWnxsw)gj+5sO9;$lysJ6f|_d(9*51XT0ShSZg zv^Vs-TTMOED}CK;R`jf>ZJZ{i@-z9|4=oUOmb;y3CY@lCVZPCNZiS6*yU(>wzDVnL zclWYR40lRMQ@9aY5V`e1j9G`H{n42huU>t5U(F%z1=?8Xf<#@SV0v zo9~yH@F3>tudlBUot z{l%fH<-udwgteOuR=+!xJkzDRn%m9IZCTv9y){2Sg>PENw?@^)LRad?UY#cII33-e z6TFr>xfPCTjwB@X=r+3;ry1*R48XNrD|s+;Z*nsumno3bj}s z@Ze8tV{aq(b1$#2F{)CJ59|yzn7ze7;){V)?}JLYJoE10yXxWFIk#*vk(I7Dh|?6~ zo_$=`Pbuhz|Lr)I!$k=;j0X2O-Z+WqDR!{BvCsZ08JgP`x4zwP`QqQ2O&2fDzgWL6 zf88^kEw$I9)>O?n|9s*?YqfoQcqEXz55Y#%FR!rRv^_?~nA$n15CW7Yjm{F1Yq<*+c|$g3*3&JeLA6Gm39dZ6%Ud>XjDGRXZsro1_X7EQXH}?w)ceTzQPR}Y?$6;5 z%UpNXFm9YG@MnKW@$S%57mW5(R644$k$wC7JL}{;OHNt6yMFcR+vPj< zM!UXSx3ya~TE9F$^kZgi?caNw)2nyRn|Jx>Dv7(_S2*o2eCG4rExvxfN9cZ^KZ1e& zd;acvvh~QSH%j+zZ_mH~yq!<>*8LkdDjqyI*vwn~?aj}E)7N&bEw%nXd41b`#%M-~ z5~laOM;RCxR7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1y zwlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E3skmxy85}Sb4q9e0G3yw ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdr-plus.png b/Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdr-plus.png new file mode 100644 index 0000000000000000000000000000000000000000..8965f76c2ff13fe81320244853f0eddd315824d3 GIT binary patch literal 1507 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq~_zr;B5V$ML(UA?O`YEn4_4E<8qMtHK6AMz49y#`1Yx%cPfR!ic zk&D&bl}j#3eu!gq+bqgy5i!v_Bcf?|I?)*T7d6D|BbePdAZ>5KFKU7F@SeV>2W z+6@tsKK3&YPL^bSviWnxsw)gj+5sO9;$lysJ6f|_d(9*51XT0ShSZg zv^Vs-TTMOED}CK;R`jf>ZJZ{i@-z9|4=oUOmb;y3CY@lCVZPCNZiS6*yU(>wzDVnL zclWYR40lRMQ@9aY5V`e1j9G`H{n42huU>t5U(F%z1=?8Xf<#@SV0v zo9~yH@F3>tudlBUot z{l%fH<-udwgteOuR=+!xJkzDRn%m9IZCTv9y){2Sg>PENw?@^)LRad?UY#cII33-e z6TFr>xfPCTjwB@X=r+3;ry1*R48XNrD|s+;Z*nsumno3bj}s z@Ze8tV{aq(b1$#2F{)CJ59|yzn7ze7;){V)?}JLYJoE10yXxWFIk#*vk(I7Dh|?6~ zo_$=`Pbuhz|Lr)I!$k=;j0X2O-Z+WqDR!{BvCsZ08JgP`x4zwP`QqQ2O&2fDzgWL6 zf88^kEw$I9)>O?n|9s*?YqfoQcqEXz55Y#%FR!rRv^_?~nA$n15CW7Yjm{F1Yq<*+c|$g3*3&JeLA6Gm39dZ6%Ud>XjDGRXZsro1_X7EQXH}?w)ceTzQPR}Y?$6;5 z%UpNXFm9YG@MnKW@$S%57mW5(R644$k$wC7JL}{;OHNt6yMFcR+vPj< zM!UXSx3ya~TE9F$^kZgi?caNw)2nyRn|Jx>Dv7(_S2*o2eCG4rExvxfN9cZ^KZ1e& zd;acvvh~QSH%j+zZ_mH~yq!<>*8LkdDjqyI*vwn~?aj}E)7N&bEw%nXd41b`#%M-~ z5~laOM;RCxR7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1y zwlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E3skmxy85}Sb4q9e0G3yw ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdr.png b/Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdr.png new file mode 100644 index 0000000000000000000000000000000000000000..8965f76c2ff13fe81320244853f0eddd315824d3 GIT binary patch literal 1507 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq~_zr;B5V$ML(UA?O`YEn4_4E<8qMtHK6AMz49y#`1Yx%cPfR!ic zk&D&bl}j#3eu!gq+bqgy5i!v_Bcf?|I?)*T7d6D|BbePdAZ>5KFKU7F@SeV>2W z+6@tsKK3&YPL^bSviWnxsw)gj+5sO9;$lysJ6f|_d(9*51XT0ShSZg zv^Vs-TTMOED}CK;R`jf>ZJZ{i@-z9|4=oUOmb;y3CY@lCVZPCNZiS6*yU(>wzDVnL zclWYR40lRMQ@9aY5V`e1j9G`H{n42huU>t5U(F%z1=?8Xf<#@SV0v zo9~yH@F3>tudlBUot z{l%fH<-udwgteOuR=+!xJkzDRn%m9IZCTv9y){2Sg>PENw?@^)LRad?UY#cII33-e z6TFr>xfPCTjwB@X=r+3;ry1*R48XNrD|s+;Z*nsumno3bj}s z@Ze8tV{aq(b1$#2F{)CJ59|yzn7ze7;){V)?}JLYJoE10yXxWFIk#*vk(I7Dh|?6~ zo_$=`Pbuhz|Lr)I!$k=;j0X2O-Z+WqDR!{BvCsZ08JgP`x4zwP`QqQ2O&2fDzgWL6 zf88^kEw$I9)>O?n|9s*?YqfoQcqEXz55Y#%FR!rRv^_?~nA$n15CW7Yjm{F1Yq<*+c|$g3*3&JeLA6Gm39dZ6%Ud>XjDGRXZsro1_X7EQXH}?w)ceTzQPR}Y?$6;5 z%UpNXFm9YG@MnKW@$S%57mW5(R644$k$wC7JL}{;OHNt6yMFcR+vPj< zM!UXSx3ya~TE9F$^kZgi?caNw)2nyRn|Jx>Dv7(_S2*o2eCG4rExvxfN9cZ^KZ1e& zd;acvvh~QSH%j+zZ_mH~yq!<>*8LkdDjqyI*vwn~?aj}E)7N&bEw%nXd41b`#%M-~ z5~laOM;RCxR7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1y zwlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E3skmxy85}Sb4q9e0G3yw ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdram.png b/Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdram.png new file mode 100644 index 0000000000000000000000000000000000000000..8965f76c2ff13fe81320244853f0eddd315824d3 GIT binary patch literal 1507 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq~_zr;B5V$ML(UA?O`YEn4_4E<8qMtHK6AMz49y#`1Yx%cPfR!ic zk&D&bl}j#3eu!gq+bqgy5i!v_Bcf?|I?)*T7d6D|BbePdAZ>5KFKU7F@SeV>2W z+6@tsKK3&YPL^bSviWnxsw)gj+5sO9;$lysJ6f|_d(9*51XT0ShSZg zv^Vs-TTMOED}CK;R`jf>ZJZ{i@-z9|4=oUOmb;y3CY@lCVZPCNZiS6*yU(>wzDVnL zclWYR40lRMQ@9aY5V`e1j9G`H{n42huU>t5U(F%z1=?8Xf<#@SV0v zo9~yH@F3>tudlBUot z{l%fH<-udwgteOuR=+!xJkzDRn%m9IZCTv9y){2Sg>PENw?@^)LRad?UY#cII33-e z6TFr>xfPCTjwB@X=r+3;ry1*R48XNrD|s+;Z*nsumno3bj}s z@Ze8tV{aq(b1$#2F{)CJ59|yzn7ze7;){V)?}JLYJoE10yXxWFIk#*vk(I7Dh|?6~ zo_$=`Pbuhz|Lr)I!$k=;j0X2O-Z+WqDR!{BvCsZ08JgP`x4zwP`QqQ2O&2fDzgWL6 zf88^kEw$I9)>O?n|9s*?YqfoQcqEXz55Y#%FR!rRv^_?~nA$n15CW7Yjm{F1Yq<*+c|$g3*3&JeLA6Gm39dZ6%Ud>XjDGRXZsro1_X7EQXH}?w)ceTzQPR}Y?$6;5 z%UpNXFm9YG@MnKW@$S%57mW5(R644$k$wC7JL}{;OHNt6yMFcR+vPj< zM!UXSx3ya~TE9F$^kZgi?caNw)2nyRn|Jx>Dv7(_S2*o2eCG4rExvxfN9cZ^KZ1e& zd;acvvh~QSH%j+zZ_mH~yq!<>*8LkdDjqyI*vwn~?aj}E)7N&bEw%nXd41b`#%M-~ z5~laOM;RCxR7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1y zwlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E3skmxy85}Sb4q9e0G3yw ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdrom.png b/Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdrom.png new file mode 100644 index 0000000000000000000000000000000000000000..8965f76c2ff13fe81320244853f0eddd315824d3 GIT binary patch literal 1507 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq~_zr;B5V$ML(UA?O`YEn4_4E<8qMtHK6AMz49y#`1Yx%cPfR!ic zk&D&bl}j#3eu!gq+bqgy5i!v_Bcf?|I?)*T7d6D|BbePdAZ>5KFKU7F@SeV>2W z+6@tsKK3&YPL^bSviWnxsw)gj+5sO9;$lysJ6f|_d(9*51XT0ShSZg zv^Vs-TTMOED}CK;R`jf>ZJZ{i@-z9|4=oUOmb;y3CY@lCVZPCNZiS6*yU(>wzDVnL zclWYR40lRMQ@9aY5V`e1j9G`H{n42huU>t5U(F%z1=?8Xf<#@SV0v zo9~yH@F3>tudlBUot z{l%fH<-udwgteOuR=+!xJkzDRn%m9IZCTv9y){2Sg>PENw?@^)LRad?UY#cII33-e z6TFr>xfPCTjwB@X=r+3;ry1*R48XNrD|s+;Z*nsumno3bj}s z@Ze8tV{aq(b1$#2F{)CJ59|yzn7ze7;){V)?}JLYJoE10yXxWFIk#*vk(I7Dh|?6~ zo_$=`Pbuhz|Lr)I!$k=;j0X2O-Z+WqDR!{BvCsZ08JgP`x4zwP`QqQ2O&2fDzgWL6 zf88^kEw$I9)>O?n|9s*?YqfoQcqEXz55Y#%FR!rRv^_?~nA$n15CW7Yjm{F1Yq<*+c|$g3*3&JeLA6Gm39dZ6%Ud>XjDGRXZsro1_X7EQXH}?w)ceTzQPR}Y?$6;5 z%UpNXFm9YG@MnKW@$S%57mW5(R644$k$wC7JL}{;OHNt6yMFcR+vPj< zM!UXSx3ya~TE9F$^kZgi?caNw)2nyRn|Jx>Dv7(_S2*o2eCG4rExvxfN9cZ^KZ1e& zd;acvvh~QSH%j+zZ_mH~yq!<>*8LkdDjqyI*vwn~?aj}E)7N&bEw%nXd41b`#%M-~ z5~laOM;RCxR7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1y zwlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E3skmxy85}Sb4q9e0G3yw ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdrw.png b/Media/Themes/Umami/Icon/devices/gnome-dev-disc-dvdrw.png new file mode 100644 index 0000000000000000000000000000000000000000..8965f76c2ff13fe81320244853f0eddd315824d3 GIT binary patch literal 1507 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq~_zr;B5V$ML(UA?O`YEn4_4E<8qMtHK6AMz49y#`1Yx%cPfR!ic zk&D&bl}j#3eu!gq+bqgy5i!v_Bcf?|I?)*T7d6D|BbePdAZ>5KFKU7F@SeV>2W z+6@tsKK3&YPL^bSviWnxsw)gj+5sO9;$lysJ6f|_d(9*51XT0ShSZg zv^Vs-TTMOED}CK;R`jf>ZJZ{i@-z9|4=oUOmb;y3CY@lCVZPCNZiS6*yU(>wzDVnL zclWYR40lRMQ@9aY5V`e1j9G`H{n42huU>t5U(F%z1=?8Xf<#@SV0v zo9~yH@F3>tudlBUot z{l%fH<-udwgteOuR=+!xJkzDRn%m9IZCTv9y){2Sg>PENw?@^)LRad?UY#cII33-e z6TFr>xfPCTjwB@X=r+3;ry1*R48XNrD|s+;Z*nsumno3bj}s z@Ze8tV{aq(b1$#2F{)CJ59|yzn7ze7;){V)?}JLYJoE10yXxWFIk#*vk(I7Dh|?6~ zo_$=`Pbuhz|Lr)I!$k=;j0X2O-Z+WqDR!{BvCsZ08JgP`x4zwP`QqQ2O&2fDzgWL6 zf88^kEw$I9)>O?n|9s*?YqfoQcqEXz55Y#%FR!rRv^_?~nA$n15CW7Yjm{F1Yq<*+c|$g3*3&JeLA6Gm39dZ6%Ud>XjDGRXZsro1_X7EQXH}?w)ceTzQPR}Y?$6;5 z%UpNXFm9YG@MnKW@$S%57mW5(R644$k$wC7JL}{;OHNt6yMFcR+vPj< zM!UXSx3ya~TE9F$^kZgi?caNw)2nyRn|Jx>Dv7(_S2*o2eCG4rExvxfN9cZ^KZ1e& zd;acvvh~QSH%j+zZ_mH~yq!<>*8LkdDjqyI*vwn~?aj}E)7N&bEw%nXd41b`#%M-~ z5~laOM;RCxR7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1y zwlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E3skmxy85}Sb4q9e0G3yw ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-dvd.png b/Media/Themes/Umami/Icon/devices/gnome-dev-dvd.png new file mode 100644 index 0000000000000000000000000000000000000000..cbf6f96e655c00cc6c637ced7e3cc5d784d7ed0d GIT binary patch literal 1176 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 Ofx*+&&t;ucLK6Ut$VKM> literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-floppy.png b/Media/Themes/Umami/Icon/devices/gnome-dev-floppy.png new file mode 100644 index 0000000000000000000000000000000000000000..dc1d789207c3f881b2511423e3260557db9e2bea GIT binary patch literal 980 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{$o-U3d9>@1i-J2~EC~~wuzg+FaD#7F} z9SdAGd|do#u~`JC(?15$92ad}<&GwWhz^CM#E>;jTN9RQWF-qpOB^T>r)EHPMkS&rc2dG((rY3%Ii}LqSpSK>!Oy_vsdV7#*ECP4SQMK z-W+(Tu}RU`FSdT_Y>}eri|%Y#D|RJH|Cwg2uH#Y5O*-EMcC1mI$n)p9xrx0^{I$O8 zIo2*ldv+gHd~#=ft%9)H#XmoqK7K4@V`ulgJVnLRYh#&JH+zJD(Db!vx%^0I9= zv$jfQ&MG^3F~fvIQNZaywLix~4KX9d1xcsY&z+wg(BPfhbnY?Rh7B7ou*L~Ikqnv8 z!Wj8xvg0(#3ud<;JxV&xSMUDdQ}51e_6ILk&$jwu6`j9E{$@z>wts6`KHvK;P|`I0 zwUJ7=+}j_;Y)yyr@6}grOaDFXYqa_L$Fc_Y_Wj@IZQN)$ZQ8UC_bz9c?BYmTy~DYg z*&>{^h4WBQ&cSW}55BQC-Fp6@@WHm+c)76K+IJO8ci(+D<7S0O%+}Ut3{M`s`f~TN zcpalNt4E{hfvAL7ckT-;V%GECJ1{8yx2|J2@c;Q{4ReP{3=9maC9V-ADTyViR>?)F zi6yBFMg~R(x(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O z4>2^dGBUR^G=*qT`j@1|z`!60vLQG>t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~yqm P1_lOCS3j3^P68NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UZU^{;xH2#>7cW_~bm`KSD_5>r zvu4AF4I4LZ*tBWWjvYI8?b@|__wGG=_Uzre=fHsj2M-=Ra^%R-qeqV)KYrrGi8E(T zpE+~p?Af#D&Ye4d{_KSd7cO4BcTOXzJ2@g) z^s?suIUBeB`}gnPS2?jP1_lPkByV>Yh7ML)4+aK?U7jwEAsXlRo{JQ3bYN(E*m5FI zo|L-)1h72kq{ z@7o@=STO5B%bQP6{yyls;8wz9@w)k`-(}dYg6E zf3Ah0FP6WVaC6^+{?eLPnY(zz3l%vE1Q9VLAAs+q9i4;B-JXpC^fMpmBGls z$UxV?QrEyN#L&XZ*wo68NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UZU^{;xH2#>7cW_~bm`KSD_5>r zvu4AF4I4LZ*tBWWjvYI8?b@|__wGG=_Uzre=fHsj2M-=Ra^%R-qeqV)KYrrGi8E(T zpE+~p?Af#D&Ye4d{_KSd7cO4BcTOXzJ2@g) z^s?suIUBeB`}gnPS2?jP1_lPkByV>Yh7ML)4+aK?U7jwEAsXlRo{JQ3bYN(E*m5FI zo|L-)1h72kq{ z@7o@=STO5B%bQP6{yyls;8wz9@w)k`-(}dYg6E zf3Ah0FP6WVaC6^+{?eLPnY(zz3l%vE1Q9VLAAs+q9i4;B-JXpC^fMpmBGls z$UxV?QrEyN#L&XZ*wo68NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UZU^{;xH2#>7cW_~bm`KSD_5>r zvu4AF4I4LZ*tBWWjvYI8?b@|__wGG=_Uzre=fHsj2M-=Ra^%R-qeqV)KYrrGi8E(T zpE+~p?Af#D&Ye4d{_KSd7cO4BcTOXzJ2@g) z^s?suIUBeB`}gnPS2?jP1_lPkByV>Yh7ML)4+aK?U7jwEAsXlRo{JQ3bYN(E*m5FI zo|L-)1h72kq{ z@7o@=STO5B%bQP6{yyls;8wz9@w)k`-(}dYg6E zf3Ah0FP6WVaC6^+{?eLPnY(zz3l%vE1Q9VLAAs+q9i4;B-JXpC^fMpmBGls z$UxV?QrEyN#L&XZ*wo6| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_w>@1PLp+XOopd`pCRF5D{qHkh&!pse z&N2}WKKSfpQtsplK7l!|BJm=ctiOX;XR95J`oq0Mi{sJc?YFwcmrQgB77cXyuvGNb zlECcdHm=DM#fEc_d0tvF*?9V#;&0y)Cpk|#xyAM4LDuTc5!r9QzRh3D|L?sT!?$?T@~o+EX8(rA|72yVf6hoRQQEuxjj?v$ z`RB?)oC{w!X!A$$ZDHzA>X7kDop|TSw9g{bE=l~f7mQ+5R4_JXJ}_l*pE~(n>-2wHJuH|~;ViTNyuY`%ba8R< zo4SneZIj9*I1(DW5j_?I!mUAbhA#Gq_dv=u)(jm`o~+Z8L@e3rFZ^6vZP4lnuVF! zKiPn-Vh$&xnQm-5`{s>ITVg__Sl;&82?id%zNUK9yG6Nntt)3^`t`DiZIu!8=}j|c z?P|-Mm7T=R&HbdvQcC*qx!cE%SvZs(mi5r|EP0buRMXY>jb-uv{zX%g($d&2n|!RW zDJd^4e)PlBZ%_H8!?Ep*8e-jltV~>Tb9Ei~4MHY5#^1MedZ<-ZWw%fy3jT`Mf)P7g~K3guY$-H9y{hpw%Wy^Gz9x$7; zv#;NOiqrQzXO4ph`k7TGi)ZHLEnB^L_7#t=d-vi#{j|Bd@y6%X$6vFZc>Y=b>({xp z@5;P>zI_#1wr$%)pSUHfH%m8MmY>6hwT@9ec+D+M+cLk0>h72 zuV0(JuTuD!r6ABDZ&lH8>y~fL-?QNiJbeF*%;tF6R{mVBt?W?ucR9;;bH| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}ha;hrvzAs)xyPCoA)5-4(f|MNN3_s>*6 zUeU^Zu})!DqFak(u2a{Nroz?U^#)(qMV|cHnt9pJV?{u-S>Uq2vZ-uGGa3a%MR@zp z&%9D;RempfVbhZtzS{)<9C)brZs+so-rEY& znv1%kj*GdvO!kcuFFmvA=^E8vK^$9{GuRd|NXfnMzo)bM@4|%(Pn`04Hz%mZDRN?z zYS41s)oz+o6BE=pQcivU%Repk=#*vphU(#WFBfb7kAJrNpXOB-#_X1UO#iBFW#6u@wQh= zK#S)LMI{9>1K}BxXLyp@3>X)1shKUB;@`3$GCtTmaUVPM>3&|t`ROeDZSEy$#G#{OByzubPgn?a7jK(+kBjfyq8QoTl+hoTZi zE9)h_Pe-N{bDyZlTw;9xWAZ=gXX2Mm{QENDtZq`?J7ot46`_MQR>|s<_vS{cZ{Er* z6c|2h)~wRA52HkS51z^4n&=^NghwgLT)<~z!?kIb85qugesDuHA??c5>l=dw_wzg` zJ;}1|vC1A-e>JsZjxHc6#lI(EHU1=9m z%6q_;;o&yfE7#>S-|x7==p9`j;@=_g(9MWx;nt@-3X3GT%J{P>=)Wo#=#85kH;OI#yL zQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=IR>@#w zU}&goV5Vzm9%5)@Wn^w;XbRDw^e;(^fq_91WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22 Xeo^}DcQ#TC3=9mOu6{1-oD!M| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haJ3L(+Lp+XeopLu@BwXTH{qr-|`&Lf$ zP09^snHaR9gJqRkYeI&;S3dW>ANm!q_lkURs|w%y>VDv#UD|J5W0Ed3WNfGk_B^=d zS#tUFGjncQ=IfUUmzhsKt8zg+?VQXx%k!V@-WT6%{BIfZ|H+}Fr@1=%8iLp8n10&C zYI|VW71_0=w?CJ>Ht4^mHFKxU_s@-7X?kb#^v;~0`(aB`NXLnUU#-cNPhD4E^{cDA z7O}^$D{v77(Orp$Ad9y`YkCm~^&I{ZzVeQxFXP)&}et30Sb_R!r`ioQT7q%aH zJm2{mL*}H?tccYo&ai*-YdNc!xqjkvx#Y*sIS%is-k|bL$RaU4`<-9nTla|Ujn^hE zH9VFxVWyhvMqiPmEsf46k1PUh1;+ehgsEYIxy<=Oh8=houDwtG}!*zeQ0!K~L z0`50QLe&LWl6BsOb$QO}&}iw15(!+L`RBlbNcAs$f^PE{T-hh8rRd<1d*Ju}y5yWk z*@u24HyIqe%(s?jpZvp0DSy?B{cfNCDjj3%uy*N`)0_Xey3$X^v|-_H8<9-8PcL3p z9$6ouq<(0AcJQ6(=!ShuS{CyBUe4t=f8DFbV&)=urtjB8UkRudZOZ;qw}AP`rO*d+ zwC_f|I{0p?HAlsZ7*~Fo|2bPYnFD(My?pC(Tyt5hDnCm&$J|8^j%TN9H!|O;{g7YE zx?6Vfp1-@(Ev6i@)YM&R|3P;}6H~)X`Ml7u3p?v&U;bJ)D|)uz-D?x;nD~E$2pl<> ze);mA%FR(q>tZfGNtt`dlI6?&_xI*9nl0go-0|SF3$cEtjw370~qEv?R@^Zb*yzJuS#DY}4 Y{G#;P?`)(P7#J8lUHx3vIVCg!0PIt*c>n+a literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-media-ms.png b/Media/Themes/Umami/Icon/devices/gnome-dev-media-ms.png new file mode 100644 index 0000000000000000000000000000000000000000..90e5edbcf718e6ae3d41d0a3e279ddb8cf24d3ae GIT binary patch literal 987 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haJ3L(+Lp+XeopLu@BwXTH{qr-|`&Lf$ zP09^snHaR9gJqRkYeI&;S3dW>ANm!q_lkURs|w%y>VDv#UD|J5W0Ed3WNfGk_B^=d zS#tUFGjncQ=IfUUmzhsKt8zg+?VQXx%k!V@-WT6%{BIfZ|H+}Fr@1=%8iLp8n10&C zYI|VW71_0=w?CJ>Ht4^mHFKxU_s@-7X?kb#^v;~0`(aB`NXLnUU#-cNPhD4E^{cDA z7O}^$D{v77(Orp$Ad9y`YkCm~^&I{ZzVeQxFXP)&}et30Sb_R!r`ioQT7q%aH zJm2{mL*}H?tccYo&ai*-YdNc!xqjkvx#Y*sIS%is-k|bL$RaU4`<-9nTla|Ujn^hE zH9VFxVWyhvMqiPmEsf46k1PUh1;+ehgsEYIxy<=Oh8=houDwtG}!*zeQ0!K~L z0`50QLe&LWl6BsOb$QO}&}iw15(!+L`RBlbNcAs$f^PE{T-hh8rRd<1d*Ju}y5yWk z*@u24HyIqe%(s?jpZvp0DSy?B{cfNCDjj3%uy*N`)0_Xey3$X^v|-_H8<9-8PcL3p z9$6ouq<(0AcJQ6(=!ShuS{CyBUe4t=f8DFbV&)=urtjB8UkRudZOZ;qw}AP`rO*d+ zwC_f|I{0p?HAlsZ7*~Fo|2bPYnFD(My?pC(Tyt5hDnCm&$J|8^j%TN9H!|O;{g7YE zx?6Vfp1-@(Ev6i@)YM&R|3P;}6H~)X`Ml7u3p?v&U;bJ)D|)uz-D?x;nD~E$2pl<> ze);mA%FR(q>tZfGNtt`dlI6?&_xI*9nl0go-0|SF3$cEtjw370~qEv?R@^Zb*yzJuS#DY}4 Y{G#;P?`)(P7#J8lUHx3vIVCg!0PIt*c>n+a literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-media-sdmmc.png b/Media/Themes/Umami/Icon/devices/gnome-dev-media-sdmmc.png new file mode 100644 index 0000000000000000000000000000000000000000..90e5edbcf718e6ae3d41d0a3e279ddb8cf24d3ae GIT binary patch literal 987 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haJ3L(+Lp+XeopLu@BwXTH{qr-|`&Lf$ zP09^snHaR9gJqRkYeI&;S3dW>ANm!q_lkURs|w%y>VDv#UD|J5W0Ed3WNfGk_B^=d zS#tUFGjncQ=IfUUmzhsKt8zg+?VQXx%k!V@-WT6%{BIfZ|H+}Fr@1=%8iLp8n10&C zYI|VW71_0=w?CJ>Ht4^mHFKxU_s@-7X?kb#^v;~0`(aB`NXLnUU#-cNPhD4E^{cDA z7O}^$D{v77(Orp$Ad9y`YkCm~^&I{ZzVeQxFXP)&}et30Sb_R!r`ioQT7q%aH zJm2{mL*}H?tccYo&ai*-YdNc!xqjkvx#Y*sIS%is-k|bL$RaU4`<-9nTla|Ujn^hE zH9VFxVWyhvMqiPmEsf46k1PUh1;+ehgsEYIxy<=Oh8=houDwtG}!*zeQ0!K~L z0`50QLe&LWl6BsOb$QO}&}iw15(!+L`RBlbNcAs$f^PE{T-hh8rRd<1d*Ju}y5yWk z*@u24HyIqe%(s?jpZvp0DSy?B{cfNCDjj3%uy*N`)0_Xey3$X^v|-_H8<9-8PcL3p z9$6ouq<(0AcJQ6(=!ShuS{CyBUe4t=f8DFbV&)=urtjB8UkRudZOZ;qw}AP`rO*d+ zwC_f|I{0p?HAlsZ7*~Fo|2bPYnFD(My?pC(Tyt5hDnCm&$J|8^j%TN9H!|O;{g7YE zx?6Vfp1-@(Ev6i@)YM&R|3P;}6H~)X`Ml7u3p?v&U;bJ)D|)uz-D?x;nD~E$2pl<> ze);mA%FR(q>tZfGNtt`dlI6?&_xI*9nl0go-0|SF3$cEtjw370~qEv?R@^Zb*yzJuS#DY}4 Y{G#;P?`)(P7#J8lUHx3vIVCg!0PIt*c>n+a literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-media-sm.png b/Media/Themes/Umami/Icon/devices/gnome-dev-media-sm.png new file mode 100644 index 0000000000000000000000000000000000000000..90e5edbcf718e6ae3d41d0a3e279ddb8cf24d3ae GIT binary patch literal 987 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haJ3L(+Lp+XeopLu@BwXTH{qr-|`&Lf$ zP09^snHaR9gJqRkYeI&;S3dW>ANm!q_lkURs|w%y>VDv#UD|J5W0Ed3WNfGk_B^=d zS#tUFGjncQ=IfUUmzhsKt8zg+?VQXx%k!V@-WT6%{BIfZ|H+}Fr@1=%8iLp8n10&C zYI|VW71_0=w?CJ>Ht4^mHFKxU_s@-7X?kb#^v;~0`(aB`NXLnUU#-cNPhD4E^{cDA z7O}^$D{v77(Orp$Ad9y`YkCm~^&I{ZzVeQxFXP)&}et30Sb_R!r`ioQT7q%aH zJm2{mL*}H?tccYo&ai*-YdNc!xqjkvx#Y*sIS%is-k|bL$RaU4`<-9nTla|Ujn^hE zH9VFxVWyhvMqiPmEsf46k1PUh1;+ehgsEYIxy<=Oh8=houDwtG}!*zeQ0!K~L z0`50QLe&LWl6BsOb$QO}&}iw15(!+L`RBlbNcAs$f^PE{T-hh8rRd<1d*Ju}y5yWk z*@u24HyIqe%(s?jpZvp0DSy?B{cfNCDjj3%uy*N`)0_Xey3$X^v|-_H8<9-8PcL3p z9$6ouq<(0AcJQ6(=!ShuS{CyBUe4t=f8DFbV&)=urtjB8UkRudZOZ;qw}AP`rO*d+ zwC_f|I{0p?HAlsZ7*~Fo|2bPYnFD(My?pC(Tyt5hDnCm&$J|8^j%TN9H!|O;{g7YE zx?6Vfp1-@(Ev6i@)YM&R|3P;}6H~)X`Ml7u3p?v&U;bJ)D|)uz-D?x;nD~E$2pl<> ze);mA%FR(q>tZfGNtt`dlI6?&_xI*9nl0go-0|SF3$cEtjw370~qEv?R@^Zb*yzJuS#DY}4 Y{G#;P?`)(P7#J8lUHx3vIVCg!0PIt*c>n+a literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-mouse-ball.png b/Media/Themes/Umami/Icon/devices/gnome-dev-mouse-ball.png new file mode 100644 index 0000000000000000000000000000000000000000..0c72f7754a621ce1ed3907a602a2d99470834cac GIT binary patch literal 1288 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4T%InDAs)xCPW_*KCq?G?{qvKbtn-}p zq-yiqySE~%-%iN2atW|{DRR_TW|O>%=#;bT%-cIMTo-OQcwyJUf~1WKT+G$e6#o?+ z6%{@BQ{0E$YKoEC+hbL0&%F+v{Ck#-zg+!|cRRLSU;9t#N8@>Z&v|>|=db7dP`|me zvvd3F^(WopeU@L2X4vy`*Sk7J7jA~cSWrH?@@} zas-O7CMPFPP~kkgi!*Z4$6KopYfSa}@v)s-Ieh)Oy+ZxRCvVI3XS4`fe^p?@i+6TE ze@w0}iM_7a(y&N_f#Lk;2fytso+tDiER-oxuktY2b@Gc%zRZCuS-QJ^9ozk0#=gS8 z-08Xr@0?-|MTHgy1|1!p1wkv({RhJ9c#Z{8ja8AQNufc2smCzq{x;hsnYT`_{u*ZT^T)-B?6cOsxUz8J!j{Jt zA8O^-u3g*Vw%B~}!YyK@0xTz<7M(~jS}?`wdTGtapEoV{2i1K$vhuRM=^2Hp@Z0z1 z&6`)T_1eb@nXW}wyh26U7>-FCdT5Zev8+RZL6JpPcCK#E#@N?pk&~X*=DvMvv{Yo( zDy7+HohGU5SQmYoiJ?W{#M7b=HvD~$9j=$Q98O#@YuWS9Kj*$?>T3OyJkdktM2gXb zRLMyyj+0aboF44T^R?kzWp$1pd$Fp85JZo7RSQ^$dPU&WinC2RLJyy|$ zgHbVscLCQ&8~&+YtjjVFUD!I8VM<%WDu<;(jsh$bR5+(xYHLv7I3Usd{`UtP{&~+8 zrFxr+_buA4%`m4}go|~`=~RPb3a5=UmYRC}Ww|SO$hY6%SfvSFP%Od++aybuRhq17p{fGCbOT+L(nwFZNgE z=^yU%&s?|Pe^)=)i%+g*Uvlvuop%ZKcXoWdGt=LG_A33eZVaK^_Mg85cLr!&DYczk zIBV9GZAB}mTs2vHL1<&w^L@Xbc_}~qf940go-0|Nttr>mdKI;Vst0LfuF#Q*>R literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-mouse-optical.png b/Media/Themes/Umami/Icon/devices/gnome-dev-mouse-optical.png new file mode 100644 index 0000000000000000000000000000000000000000..0c72f7754a621ce1ed3907a602a2d99470834cac GIT binary patch literal 1288 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4T%InDAs)xCPW_*KCq?G?{qvKbtn-}p zq-yiqySE~%-%iN2atW|{DRR_TW|O>%=#;bT%-cIMTo-OQcwyJUf~1WKT+G$e6#o?+ z6%{@BQ{0E$YKoEC+hbL0&%F+v{Ck#-zg+!|cRRLSU;9t#N8@>Z&v|>|=db7dP`|me zvvd3F^(WopeU@L2X4vy`*Sk7J7jA~cSWrH?@@} zas-O7CMPFPP~kkgi!*Z4$6KopYfSa}@v)s-Ieh)Oy+ZxRCvVI3XS4`fe^p?@i+6TE ze@w0}iM_7a(y&N_f#Lk;2fytso+tDiER-oxuktY2b@Gc%zRZCuS-QJ^9ozk0#=gS8 z-08Xr@0?-|MTHgy1|1!p1wkv({RhJ9c#Z{8ja8AQNufc2smCzq{x;hsnYT`_{u*ZT^T)-B?6cOsxUz8J!j{Jt zA8O^-u3g*Vw%B~}!YyK@0xTz<7M(~jS}?`wdTGtapEoV{2i1K$vhuRM=^2Hp@Z0z1 z&6`)T_1eb@nXW}wyh26U7>-FCdT5Zev8+RZL6JpPcCK#E#@N?pk&~X*=DvMvv{Yo( zDy7+HohGU5SQmYoiJ?W{#M7b=HvD~$9j=$Q98O#@YuWS9Kj*$?>T3OyJkdktM2gXb zRLMyyj+0aboF44T^R?kzWp$1pd$Fp85JZo7RSQ^$dPU&WinC2RLJyy|$ zgHbVscLCQ&8~&+YtjjVFUD!I8VM<%WDu<;(jsh$bR5+(xYHLv7I3Usd{`UtP{&~+8 zrFxr+_buA4%`m4}go|~`=~RPb3a5=UmYRC}Ww|SO$hY6%SfvSFP%Od++aybuRhq17p{fGCbOT+L(nwFZNgE z=^yU%&s?|Pe^)=)i%+g*Uvlvuop%ZKcXoWdGt=LG_A33eZVaK^_Mg85cLr!&DYczk zIBV9GZAB}mTs2vHL1<&w^L@Xbc_}~qf940go-0|Nttr>mdKI;Vst0LfuF#Q*>R literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-printer.png b/Media/Themes/Umami/Icon/devices/gnome-dev-printer.png new file mode 100644 index 0000000000000000000000000000000000000000..bee3c98ac44f4401ebaa346e8b681aa9d1fafbc4 GIT binary patch literal 979 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXS3O-ELp+XOow`3?BwXOQ{d>v(O~EOO z8_wQx?J3f`V|7SDMM+CQRKRM|y+6Fmtu@OQwKUB#apVYU%C!{Y>Pq4%df0SM)n2Jl zcF*%i=l1>hmREj%w#fE-w~v3eKoU@&1#+nd=8 z3-<4qUn&yyIyRe0%79(z#*G^enp00PBve%Vc+5E^h=-4FnUeoIVUDPqufya&x8A8( zv%qxS>qoovUcY{wu{L^|M&@R9$9)rivsKJHbD&U0=6GU8hDO;QWlo#^oY3edkB9%R zl;39#SQ)~w;aXCUA_r5={pDe+A6ClUzI}V+xePPz0{i$AvHrh8*Urh$ofZ)h^W@|q zrfcu4wu`jMwC9+eercRu`Tbq~v-;WWKgz0Jwa4Gr?|pONv&~KYnCqg~OH)%*T|c$P z+~Hpty(Lm_RXQ9AVHiiqQj z#81tEr}fpDMs!u-o0EFwz{!lV{gY=!!KWDU0npSH(WXq z;IiSG(xMgDU!N4);Mp|)f6R~MPmfx?|NQ$Q$bRtTME#1dzgWLk{k^EiWY6)gq_oU0 zFL&zCS9gAfT^34qnzdGWr5tC|gsiKNzsBopikasL_Pz^=e$Kt~_JJpjhw_E~e!ARm zo-e?=Kg@p_Q&pqg1B(KtA3PQ^oxLSG0gN#Zcmr5gnYeB9waRAaEn%2@@s{x0atFB P0|SGntDnm{r-UW|yNI6O literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-dev-removable-1394.png b/Media/Themes/Umami/Icon/devices/gnome-dev-removable-1394.png new file mode 100644 index 0000000000000000000000000000000000000000..96ac2d822a19a50ce36cb98b2a4862dd18509211 GIT binary patch literal 775 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 GLK6UMeB3qw literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gnome-fs-client.png b/Media/Themes/Umami/Icon/devices/gnome-fs-client.png new file mode 100644 index 0000000000000000000000000000000000000000..2b73dada771072f676d2003ff47a1a52b327addb GIT binary patch literal 1215 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_b39!fLp+Xeof?}F<0^8zKKCCT9lyHF{NvJIBGkcv|SFWw>BxTdWv?vINY@~Kwd{l(5bt_f6>;jx{LI4 z<(F=0dUDu&>aL~oh1qBBRhPeiBP(CVn`!n^O@yDvxcuFjpL2iC|Jm^WX3ExcCr_T# z=zDy~O~&$hmV3XPuN9M;nwno!_HkF0`w9+QuF1<-7CkxgsV@JiL-yNfcK*E?mqKRz z*M9q=;G+Y%4|Oq z({FZndl{6NI4%ioiR9+^Q<6FF=1j|9zpBDZFS7{iry!4T)H;#Hvdboq<%4eJX zbCzh|#?(RQ6@ZIgUN#Kz|BLYIfL1Oy9% z3=ZloHC1}To2~ET>l>@TfN6*#6;IN7dF%-vgA z+L3j&==%1vI!`~%=i%Xb^xJNG{yFj2k$;1ezcgN*q!U$ro}bq?X_x$~g^9Yxn=k*U zYgm!Wz;gSgH!+LXo$;VrTFEQT9!mfsJij@xR@lHCP=597970!6X0JE~jwguhZA#=iW89wT;cc z?P}t`ZH?jejdiy#RM*9S)0f&^;3{#VX)Xf;gKCLuL`h0wNvc(HQEFmIDua=Mk%6v( zrLKWlh@pj*v8k1znYMv}m4U&u&lZL#8glbfGSey8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U&jt8|xH4dX(D2~U@L&c8hO)9UxTLqQmy4TILQ)(91H+LcM~)pk z#=yWJCnpyg9_-=i=IrX^xTqti=m;BIYlyK9 zj`m(Y9--mEVd0@(KAxfB!2tpO@rkkCKAt|l-U&%@LBWBc;lX8<#S_86$=S)-*?Hya zrB+r}PEL+aPEKxauI}z`?jCNQo*v%b-rhc*ety0Ifqp?DAdO)WArVnwNy$mcDM@MR zsc9K0X&I^MAe5GonVy-Ik(r&AnVp`Mm6em5omY@uSe#!}Tv%FGTwYOHQBhu9T~$+C zRa;kEUtibQ*wEP6*wj+r+S=OQ)!N)6-#>BU#2GWD&z?79-h$cl7tdR` zaN(jQ^A|5(ymaZ(r7IRMTefWZie)QTu3Wi#>FU+1R(_7Cuwm2I_1m^> z+p%NE;UkBSpE!2v^r_RQPn|h)=Ipt%=gyzIaN)v*i|4Oiy?X1`tvh$_+`oVS!Gi~n z9zA;e`0%-Qpo zFWFfcGMCV9KNOn%6Ge;We>qo${eV~EE24b&08Yd8s_jIMkKLIWuejLwdIdm-hDe}a-GB7 z*hF@6u}*{4o!m8BC#tIX%)NBYI5VhzYqxFJTfMcySy@`zr@De;ngUe!%>G@qYq!;_ zyD^UfReNF+6l6mW9dSL*q0^){@tsh>B!+8(+>;X0n}6Q1x7FI9b@H&e&b6Zx0zt|qxl?Z^NxTt%^jP$j=vyVFgTe~DWM4fEE~CV literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gtk-cdrom.png b/Media/Themes/Umami/Icon/devices/gtk-cdrom.png new file mode 100644 index 0000000000000000000000000000000000000000..8965f76c2ff13fe81320244853f0eddd315824d3 GIT binary patch literal 1507 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq~_zr;B5V$ML(UA?O`YEn4_4E<8qMtHK6AMz49y#`1Yx%cPfR!ic zk&D&bl}j#3eu!gq+bqgy5i!v_Bcf?|I?)*T7d6D|BbePdAZ>5KFKU7F@SeV>2W z+6@tsKK3&YPL^bSviWnxsw)gj+5sO9;$lysJ6f|_d(9*51XT0ShSZg zv^Vs-TTMOED}CK;R`jf>ZJZ{i@-z9|4=oUOmb;y3CY@lCVZPCNZiS6*yU(>wzDVnL zclWYR40lRMQ@9aY5V`e1j9G`H{n42huU>t5U(F%z1=?8Xf<#@SV0v zo9~yH@F3>tudlBUot z{l%fH<-udwgteOuR=+!xJkzDRn%m9IZCTv9y){2Sg>PENw?@^)LRad?UY#cII33-e z6TFr>xfPCTjwB@X=r+3;ry1*R48XNrD|s+;Z*nsumno3bj}s z@Ze8tV{aq(b1$#2F{)CJ59|yzn7ze7;){V)?}JLYJoE10yXxWFIk#*vk(I7Dh|?6~ zo_$=`Pbuhz|Lr)I!$k=;j0X2O-Z+WqDR!{BvCsZ08JgP`x4zwP`QqQ2O&2fDzgWL6 zf88^kEw$I9)>O?n|9s*?YqfoQcqEXz55Y#%FR!rRv^_?~nA$n15CW7Yjm{F1Yq<*+c|$g3*3&JeLA6Gm39dZ6%Ud>XjDGRXZsro1_X7EQXH}?w)ceTzQPR}Y?$6;5 z%UpNXFm9YG@MnKW@$S%57mW5(R644$k$wC7JL}{;OHNt6yMFcR+vPj< zM!UXSx3ya~TE9F$^kZgi?caNw)2nyRn|Jx>Dv7(_S2*o2eCG4rExvxfN9cZ^KZ1e& zd;acvvh~QSH%j+zZ_mH~yq!<>*8LkdDjqyI*vwn~?aj}E)7N&bEw%nXd41b`#%M-~ z5~laOM;RCxR7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1y zwlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E3skmxy85}Sb4q9e0G3yw ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/gtk-floppy.png b/Media/Themes/Umami/Icon/devices/gtk-floppy.png new file mode 100644 index 0000000000000000000000000000000000000000..dc1d789207c3f881b2511423e3260557db9e2bea GIT binary patch literal 980 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{$o-U3d9>@1i-J2~EC~~wuzg+FaD#7F} z9SdAGd|do#u~`JC(?15$92ad}<&GwWhz^CM#E>;jTN9RQWF-qpOB^T>r)EHPMkS&rc2dG((rY3%Ii}LqSpSK>!Oy_vsdV7#*ECP4SQMK z-W+(Tu}RU`FSdT_Y>}eri|%Y#D|RJH|Cwg2uH#Y5O*-EMcC1mI$n)p9xrx0^{I$O8 zIo2*ldv+gHd~#=ft%9)H#XmoqK7K4@V`ulgJVnLRYh#&JH+zJD(Db!vx%^0I9= zv$jfQ&MG^3F~fvIQNZaywLix~4KX9d1xcsY&z+wg(BPfhbnY?Rh7B7ou*L~Ikqnv8 z!Wj8xvg0(#3ud<;JxV&xSMUDdQ}51e_6ILk&$jwu6`j9E{$@z>wts6`KHvK;P|`I0 zwUJ7=+}j_;Y)yyr@6}grOaDFXYqa_L$Fc_Y_Wj@IZQN)$ZQ8UC_bz9c?BYmTy~DYg z*&>{^h4WBQ&cSW}55BQC-Fp6@@WHm+c)76K+IJO8ci(+D<7S0O%+}Ut3{M`s`f~TN zcpalNt4E{hfvAL7ckT-;V%GECJ1{8yx2|J2@c;Q{4ReP{3=9maC9V-ADTyViR>?)F zi6yBFMg~R(x(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O z4>2^dGBUR^G=*qT`j@1|z`!60vLQG>t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~yqm P1_lOCS3j3^P68NU`coMb!1@J*w6hZk(Ggg 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 BwtxTt literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/input-keyboard.png b/Media/Themes/Umami/Icon/devices/input-keyboard.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b6326b04d5d58ee3c879722fa249bef8eb3c78 GIT binary patch literal 890 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}ha;hrvzAs)xyPCoA)5-4(f|MNN3_s>*6 zUeU^Zu})!DqFak(u2a{Nroz?U^#)(qMV|cHnt9pJV?{u-S>Uq2vZ-uGGa3a%MR@zp z&%9D;RempfVbhZtzS{)<9C)brZs+so-rEY& znv1%kj*GdvO!kcuFFmvA=^E8vK^$9{GuRd|NXfnMzo)bM@4|%(Pn`04Hz%mZDRN?z zYS41s)oz+o6BE=pQcivU%Repk=#*vphU(#WFBfb7kAJrNpXOB-#_X1UO#iBFW#6u@wQh= zK#S)LMI{9>1K}BxXLyp@3>X)1shKUB;@`3$GCtTmaUVPM>3&|t`ROeDZSEy$#G#{OByzubPgn?a7jK(+kBjfyq8QoTl+hoTZi zE9)h_Pe-N{bDyZlTw;9xWAZ=gXX2Mm{QENDtZq`?J7ot46`_MQR>|s<_vS{cZ{Er* z6c|2h)~wRA52HkS51z^4n&=^NghwgLT)<~z!?kIb85qugesDuHA??c5>l=dw_wzg` zJ;}1|vC1A-e>JsZjxHc6#lI(EHU1=9m z%6q_;;o&yfE7#>S-|x7==p9`j;@=_g(9MWx;nt@-3X3GT%J{P>=)Wo#=#85kH;OI#yL zQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=IR>@#w zU}&goV5Vzm9%5)@Wn^w;XbRDw^e;(^fq_91WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22 Xeo^}DcQ#TC3=9mOu6{1-oD!M| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4T%InDAs)xCPW_*KCq?G?{qvKbtn-}p zq-yiqySE~%-%iN2atW|{DRR_TW|O>%=#;bT%-cIMTo-OQcwyJUf~1WKT+G$e6#o?+ z6%{@BQ{0E$YKoEC+hbL0&%F+v{Ck#-zg+!|cRRLSU;9t#N8@>Z&v|>|=db7dP`|me zvvd3F^(WopeU@L2X4vy`*Sk7J7jA~cSWrH?@@} zas-O7CMPFPP~kkgi!*Z4$6KopYfSa}@v)s-Ieh)Oy+ZxRCvVI3XS4`fe^p?@i+6TE ze@w0}iM_7a(y&N_f#Lk;2fytso+tDiER-oxuktY2b@Gc%zRZCuS-QJ^9ozk0#=gS8 z-08Xr@0?-|MTHgy1|1!p1wkv({RhJ9c#Z{8ja8AQNufc2smCzq{x;hsnYT`_{u*ZT^T)-B?6cOsxUz8J!j{Jt zA8O^-u3g*Vw%B~}!YyK@0xTz<7M(~jS}?`wdTGtapEoV{2i1K$vhuRM=^2Hp@Z0z1 z&6`)T_1eb@nXW}wyh26U7>-FCdT5Zev8+RZL6JpPcCK#E#@N?pk&~X*=DvMvv{Yo( zDy7+HohGU5SQmYoiJ?W{#M7b=HvD~$9j=$Q98O#@YuWS9Kj*$?>T3OyJkdktM2gXb zRLMyyj+0aboF44T^R?kzWp$1pd$Fp85JZo7RSQ^$dPU&WinC2RLJyy|$ zgHbVscLCQ&8~&+YtjjVFUD!I8VM<%WDu<;(jsh$bR5+(xYHLv7I3Usd{`UtP{&~+8 zrFxr+_buA4%`m4}go|~`=~RPb3a5=UmYRC}Ww|SO$hY6%SfvSFP%Od++aybuRhq17p{fGCbOT+L(nwFZNgE z=^yU%&s?|Pe^)=)i%+g*Uvlvuop%ZKcXoWdGt=LG_A33eZVaK^_Mg85cLr!&DYczk zIBV9GZAB}mTs2vHL1<&w^L@Xbc_}~qf940go-0|Nttr>mdKI;Vst0LfuF#Q*>R literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/ipod_mount.png b/Media/Themes/Umami/Icon/devices/ipod_mount.png new file mode 100644 index 0000000000000000000000000000000000000000..24de71f407ad25bce662c3e169a2a7d81010a713 GIT binary patch literal 1241 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_w>@1PLp+XOopd`pCRF5D{qHkh&!pse z&N2}WKKSfpQtsplK7l!|BJm=ctiOX;XR95J`oq0Mi{sJc?YFwcmrQgB77cXyuvGNb zlECcdHm=DM#fEc_d0tvF*?9V#;&0y)Cpk|#xyAM4LDuTc5!r9QzRh3D|L?sT!?$?T@~o+EX8(rA|72yVf6hoRQQEuxjj?v$ z`RB?)oC{w!X!A$$ZDHzA>X7kDop|TSw9g{bE=l~f7mQ+5R4_JXJ}_l*pE~(n>-2wHJuH|~;ViTNyuY`%ba8R< zo4SneZIj9*I1(DW5j_?I!mUAbhA#Gq_dv=u)(jm`o~+Z8L@e3rFZ^6vZP4lnuVF! zKiPn-Vh$&xnQm-5`{s>ITVg__Sl;&82?id%zNUK9yG6Nntt)3^`t`DiZIu!8=}j|c z?P|-Mm7T=R&HbdvQcC*qx!cE%SvZs(mi5r|EP0buRMXY>jb-uv{zX%g($d&2n|!RW zDJd^4e)PlBZ%_H8!?Ep*8e-jltV~>Tb9Ei~4MHY5#^1MedZ<-ZWw%fy3jT`Mf)P7g~K3guY$-H9y{hpw%Wy^Gz9x$7; zv#;NOiqrQzXO4ph`k7TGi)ZHLEnB^L_7#t=d-vi#{j|Bd@y6%X$6vFZc>Y=b>({xp z@5;P>zI_#1wr$%)pSUHfH%m8MmY>6hwT@9ec+D+M+cLk0>h72 zuV0(JuTuD!r6ABDZ&lH8>y~fL-?QNiJbeF*%;tF6R{mVBt?W?ucR9;;bH| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_+MX_sAs)w%PL0eEP82x)|NeB_$#NS% zx@>d{5t#UZ(T;PG(hs$;qtYrNzZCXyJYrn5NU5pc$?=P;VE?hlN6i;1WZ7zTuzPLv zcrAK)joI#-Z$7^L{&Uiiwk2+zj}90desk_m*|XXGtp7GnxL>)l-dad4^VK!iL`{ZY zy)O5?Ikv6c^=0q+M2G)nDohvLC#U&eQ;ltYAXB%m;miedJFlqe>vvA6{js_xivNIP z-|<_?R=qD077FytX}4KC!z`bRwP0ghT`WUGXi*RVeOnXr!EfrYo+p`qHu#qlmvTO3c~m)GTIW|#_YGvs1> zS$9~L!6J*NF48d7vD#$c3eibg%HJzl=Ew8SlsdAn%{rn+@;u|39mmWn-^=kn$bFxE zXKQ#-x5-*PyKJ6-CXpp++I8QUU)*CqVRrtgXzl6K_fM{sy4V?fe46K^kmpRCR@Hvh z|GvzeEP8Qy|L^6?gI4-KX7ZbFxs$~qK7G^bRZn{7txmPSC3W-|@9gY`-S&EMlOoD~ zT$rdHs;nhee{JR)C%x&-nX?Rhg&7`H$|+4;RwNl2Ccwhjq|lH#OF~l8QEjqg`X+8g z%`ZD5UaKz%vDukz{%8Ak#ru)m=^OYbdaz6hT9OyLUS@*8j*G>-Edniv6E(V+JSQbc zuyx(F*LL&}RIr*HDj)t|-WeoyM=PY$j zHwiGUdwpnIuDM+Q>gW0;j}QDiyyOv2O60X$e1B~2KYW{UoLXH=%;=gI)dn9S&EbGUWac3K_>& zo8X~R!%%coOwj4ne>O#zoBvL&U&=7SZ+T=W`?S=L)24}8i3R*x_3_WgDTZ!Z42}YC z-n@NltFgMo?q5^NrM9bA7QNS8ugOqSQX+8dhSTkBTb&jzuovUME}Lk}@QIhimYe!kPxe~+hRZ=#F#l>Q}YF)%PNc)I$ztaD0e0stY! BwtxTt literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/keyboard.png b/Media/Themes/Umami/Icon/devices/keyboard.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b6326b04d5d58ee3c879722fa249bef8eb3c78 GIT binary patch literal 890 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}ha;hrvzAs)xyPCoA)5-4(f|MNN3_s>*6 zUeU^Zu})!DqFak(u2a{Nroz?U^#)(qMV|cHnt9pJV?{u-S>Uq2vZ-uGGa3a%MR@zp z&%9D;RempfVbhZtzS{)<9C)brZs+so-rEY& znv1%kj*GdvO!kcuFFmvA=^E8vK^$9{GuRd|NXfnMzo)bM@4|%(Pn`04Hz%mZDRN?z zYS41s)oz+o6BE=pQcivU%Repk=#*vphU(#WFBfb7kAJrNpXOB-#_X1UO#iBFW#6u@wQh= zK#S)LMI{9>1K}BxXLyp@3>X)1shKUB;@`3$GCtTmaUVPM>3&|t`ROeDZSEy$#G#{OByzubPgn?a7jK(+kBjfyq8QoTl+hoTZi zE9)h_Pe-N{bDyZlTw;9xWAZ=gXX2Mm{QENDtZq`?J7ot46`_MQR>|s<_vS{cZ{Er* z6c|2h)~wRA52HkS51z^4n&=^NghwgLT)<~z!?kIb85qugesDuHA??c5>l=dw_wzg` zJ;}1|vC1A-e>JsZjxHc6#lI(EHU1=9m z%6q_;;o&yfE7#>S-|x7==p9`j;@=_g(9MWx;nt@-3X3GT%J{P>=)Wo#=#85kH;OI#yL zQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=IR>@#w zU}&goV5Vzm9%5)@Wn^w;XbRDw^e;(^fq_91WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22 Xeo^}DcQ#TC3=9mOu6{1-oD!M| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXS3O-ELp+XOow`3?BwXOQ{d>v(O~EOO z8_wQx?J3f`V|7SDMM+CQRKRM|y+6Fmtu@OQwKUB#apVYU%C!{Y>Pq4%df0SM)n2Jl zcF*%i=l1>hmREj%w#fE-w~v3eKoU@&1#+nd=8 z3-<4qUn&yyIyRe0%79(z#*G^enp00PBve%Vc+5E^h=-4FnUeoIVUDPqufya&x8A8( zv%qxS>qoovUcY{wu{L^|M&@R9$9)rivsKJHbD&U0=6GU8hDO;QWlo#^oY3edkB9%R zl;39#SQ)~w;aXCUA_r5={pDe+A6ClUzI}V+xePPz0{i$AvHrh8*Urh$ofZ)h^W@|q zrfcu4wu`jMwC9+eercRu`Tbq~v-;WWKgz0Jwa4Gr?|pONv&~KYnCqg~OH)%*T|c$P z+~Hpty(Lm_RXQ9AVHiiqQj z#81tEr}fpDMs!u-o0EFwz{!lV{gY=!!KWDU0npSH(WXq z;IiSG(xMgDU!N4);Mp|)f6R~MPmfx?|NQ$Q$bRtTME#1dzgWLk{k^EiWY6)gq_oU0 zFL&zCS9gAfT^34qnzdGWr5tC|gsiKNzsBopikasL_Pz^=e$Kt~_JJpjhw_E~e!ARm zo-e?=Kg@p_Q&pqg1B(KtA3PQ^oxLSG0gN#Zcmr5gnYeB9waRAaEn%2@@s{x0atFB P0|SGntDnm{r-UW|yNI6O literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/kxkb.png b/Media/Themes/Umami/Icon/devices/kxkb.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b6326b04d5d58ee3c879722fa249bef8eb3c78 GIT binary patch literal 890 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}ha;hrvzAs)xyPCoA)5-4(f|MNN3_s>*6 zUeU^Zu})!DqFak(u2a{Nroz?U^#)(qMV|cHnt9pJV?{u-S>Uq2vZ-uGGa3a%MR@zp z&%9D;RempfVbhZtzS{)<9C)brZs+so-rEY& znv1%kj*GdvO!kcuFFmvA=^E8vK^$9{GuRd|NXfnMzo)bM@4|%(Pn`04Hz%mZDRN?z zYS41s)oz+o6BE=pQcivU%Repk=#*vphU(#WFBfb7kAJrNpXOB-#_X1UO#iBFW#6u@wQh= zK#S)LMI{9>1K}BxXLyp@3>X)1shKUB;@`3$GCtTmaUVPM>3&|t`ROeDZSEy$#G#{OByzubPgn?a7jK(+kBjfyq8QoTl+hoTZi zE9)h_Pe-N{bDyZlTw;9xWAZ=gXX2Mm{QENDtZq`?J7ot46`_MQR>|s<_vS{cZ{Er* z6c|2h)~wRA52HkS51z^4n&=^NghwgLT)<~z!?kIb85qugesDuHA??c5>l=dw_wzg` zJ;}1|vC1A-e>JsZjxHc6#lI(EHU1=9m z%6q_;;o&yfE7#>S-|x7==p9`j;@=_g(9MWx;nt@-3X3GT%J{P>=)Wo#=#85kH;OI#yL zQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=IR>@#w zU}&goV5Vzm9%5)@Wn^w;XbRDw^e;(^fq_91WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22 Xeo^}DcQ#TC3=9mOu6{1-oD!MAbt1fq~_zr;B5V$ML(UA?O`YEn4_4E<8qMtHK6AMz49y#`1Yx%cPfR!ic zk&D&bl}j#3eu!gq+bqgy5i!v_Bcf?|I?)*T7d6D|BbePdAZ>5KFKU7F@SeV>2W z+6@tsKK3&YPL^bSviWnxsw)gj+5sO9;$lysJ6f|_d(9*51XT0ShSZg zv^Vs-TTMOED}CK;R`jf>ZJZ{i@-z9|4=oUOmb;y3CY@lCVZPCNZiS6*yU(>wzDVnL zclWYR40lRMQ@9aY5V`e1j9G`H{n42huU>t5U(F%z1=?8Xf<#@SV0v zo9~yH@F3>tudlBUot z{l%fH<-udwgteOuR=+!xJkzDRn%m9IZCTv9y){2Sg>PENw?@^)LRad?UY#cII33-e z6TFr>xfPCTjwB@X=r+3;ry1*R48XNrD|s+;Z*nsumno3bj}s z@Ze8tV{aq(b1$#2F{)CJ59|yzn7ze7;){V)?}JLYJoE10yXxWFIk#*vk(I7Dh|?6~ zo_$=`Pbuhz|Lr)I!$k=;j0X2O-Z+WqDR!{BvCsZ08JgP`x4zwP`QqQ2O&2fDzgWL6 zf88^kEw$I9)>O?n|9s*?YqfoQcqEXz55Y#%FR!rRv^_?~nA$n15CW7Yjm{F1Yq<*+c|$g3*3&JeLA6Gm39dZ6%Ud>XjDGRXZsro1_X7EQXH}?w)ceTzQPR}Y?$6;5 z%UpNXFm9YG@MnKW@$S%57mW5(R644$k$wC7JL}{;OHNt6yMFcR+vPj< zM!UXSx3ya~TE9F$^kZgi?caNw)2nyRn|Jx>Dv7(_S2*o2eCG4rExvxfN9cZ^KZ1e& zd;acvvh~QSH%j+zZ_mH~yq!<>*8LkdDjqyI*vwn~?aj}E)7N&bEw%nXd41b`#%M-~ z5~laOM;RCxR7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1y zwlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E3skmxy85}Sb4q9e0G3yw ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/media-flash.png b/Media/Themes/Umami/Icon/devices/media-flash.png new file mode 100644 index 0000000000000000000000000000000000000000..90e5edbcf718e6ae3d41d0a3e279ddb8cf24d3ae GIT binary patch literal 987 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haJ3L(+Lp+XeopLu@BwXTH{qr-|`&Lf$ zP09^snHaR9gJqRkYeI&;S3dW>ANm!q_lkURs|w%y>VDv#UD|J5W0Ed3WNfGk_B^=d zS#tUFGjncQ=IfUUmzhsKt8zg+?VQXx%k!V@-WT6%{BIfZ|H+}Fr@1=%8iLp8n10&C zYI|VW71_0=w?CJ>Ht4^mHFKxU_s@-7X?kb#^v;~0`(aB`NXLnUU#-cNPhD4E^{cDA z7O}^$D{v77(Orp$Ad9y`YkCm~^&I{ZzVeQxFXP)&}et30Sb_R!r`ioQT7q%aH zJm2{mL*}H?tccYo&ai*-YdNc!xqjkvx#Y*sIS%is-k|bL$RaU4`<-9nTla|Ujn^hE zH9VFxVWyhvMqiPmEsf46k1PUh1;+ehgsEYIxy<=Oh8=houDwtG}!*zeQ0!K~L z0`50QLe&LWl6BsOb$QO}&}iw15(!+L`RBlbNcAs$f^PE{T-hh8rRd<1d*Ju}y5yWk z*@u24HyIqe%(s?jpZvp0DSy?B{cfNCDjj3%uy*N`)0_Xey3$X^v|-_H8<9-8PcL3p z9$6ouq<(0AcJQ6(=!ShuS{CyBUe4t=f8DFbV&)=urtjB8UkRudZOZ;qw}AP`rO*d+ zwC_f|I{0p?HAlsZ7*~Fo|2bPYnFD(My?pC(Tyt5hDnCm&$J|8^j%TN9H!|O;{g7YE zx?6Vfp1-@(Ev6i@)YM&R|3P;}6H~)X`Ml7u3p?v&U;bJ)D|)uz-D?x;nD~E$2pl<> ze);mA%FR(q>tZfGNtt`dlI6?&_xI*9nl0go-0|SF3$cEtjw370~qEv?R@^Zb*yzJuS#DY}4 Y{G#;P?`)(P7#J8lUHx3vIVCg!0PIt*c>n+a literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/media-floppy.png b/Media/Themes/Umami/Icon/devices/media-floppy.png new file mode 100644 index 0000000000000000000000000000000000000000..dc1d789207c3f881b2511423e3260557db9e2bea GIT binary patch literal 980 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{$o-U3d9>@1i-J2~EC~~wuzg+FaD#7F} z9SdAGd|do#u~`JC(?15$92ad}<&GwWhz^CM#E>;jTN9RQWF-qpOB^T>r)EHPMkS&rc2dG((rY3%Ii}LqSpSK>!Oy_vsdV7#*ECP4SQMK z-W+(Tu}RU`FSdT_Y>}eri|%Y#D|RJH|Cwg2uH#Y5O*-EMcC1mI$n)p9xrx0^{I$O8 zIo2*ldv+gHd~#=ft%9)H#XmoqK7K4@V`ulgJVnLRYh#&JH+zJD(Db!vx%^0I9= zv$jfQ&MG^3F~fvIQNZaywLix~4KX9d1xcsY&z+wg(BPfhbnY?Rh7B7ou*L~Ikqnv8 z!Wj8xvg0(#3ud<;JxV&xSMUDdQ}51e_6ILk&$jwu6`j9E{$@z>wts6`KHvK;P|`I0 zwUJ7=+}j_;Y)yyr@6}grOaDFXYqa_L$Fc_Y_Wj@IZQN)$ZQ8UC_bz9c?BYmTy~DYg z*&>{^h4WBQ&cSW}55BQC-Fp6@@WHm+c)76K+IJO8ci(+D<7S0O%+}Ut3{M`s`f~TN zcpalNt4E{hfvAL7ckT-;V%GECJ1{8yx2|J2@c;Q{4ReP{3=9maC9V-ADTyViR>?)F zi6yBFMg~R(x(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O z4>2^dGBUR^G=*qT`j@1|z`!60vLQG>t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~yqm P1_lOCS3j3^P6Abt1fq~_zr;B5V$ML(UA?O`YEn4_4E<8qMtHK6AMz49y#`1Yx%cPfR!ic zk&D&bl}j#3eu!gq+bqgy5i!v_Bcf?|I?)*T7d6D|BbePdAZ>5KFKU7F@SeV>2W z+6@tsKK3&YPL^bSviWnxsw)gj+5sO9;$lysJ6f|_d(9*51XT0ShSZg zv^Vs-TTMOED}CK;R`jf>ZJZ{i@-z9|4=oUOmb;y3CY@lCVZPCNZiS6*yU(>wzDVnL zclWYR40lRMQ@9aY5V`e1j9G`H{n42huU>t5U(F%z1=?8Xf<#@SV0v zo9~yH@F3>tudlBUot z{l%fH<-udwgteOuR=+!xJkzDRn%m9IZCTv9y){2Sg>PENw?@^)LRad?UY#cII33-e z6TFr>xfPCTjwB@X=r+3;ry1*R48XNrD|s+;Z*nsumno3bj}s z@Ze8tV{aq(b1$#2F{)CJ59|yzn7ze7;){V)?}JLYJoE10yXxWFIk#*vk(I7Dh|?6~ zo_$=`Pbuhz|Lr)I!$k=;j0X2O-Z+WqDR!{BvCsZ08JgP`x4zwP`QqQ2O&2fDzgWL6 zf88^kEw$I9)>O?n|9s*?YqfoQcqEXz55Y#%FR!rRv^_?~nA$n15CW7Yjm{F1Yq<*+c|$g3*3&JeLA6Gm39dZ6%Ud>XjDGRXZsro1_X7EQXH}?w)ceTzQPR}Y?$6;5 z%UpNXFm9YG@MnKW@$S%57mW5(R644$k$wC7JL}{;OHNt6yMFcR+vPj< zM!UXSx3ya~TE9F$^kZgi?caNw)2nyRn|Jx>Dv7(_S2*o2eCG4rExvxfN9cZ^KZ1e& zd;acvvh~QSH%j+zZ_mH~yq!<>*8LkdDjqyI*vwn~?aj}E)7N&bEw%nXd41b`#%M-~ z5~laOM;RCxR7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1y zwlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E3skmxy85}Sb4q9e0G3yw ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/mouse.png b/Media/Themes/Umami/Icon/devices/mouse.png new file mode 100644 index 0000000000000000000000000000000000000000..0c72f7754a621ce1ed3907a602a2d99470834cac GIT binary patch literal 1288 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4T%InDAs)xCPW_*KCq?G?{qvKbtn-}p zq-yiqySE~%-%iN2atW|{DRR_TW|O>%=#;bT%-cIMTo-OQcwyJUf~1WKT+G$e6#o?+ z6%{@BQ{0E$YKoEC+hbL0&%F+v{Ck#-zg+!|cRRLSU;9t#N8@>Z&v|>|=db7dP`|me zvvd3F^(WopeU@L2X4vy`*Sk7J7jA~cSWrH?@@} zas-O7CMPFPP~kkgi!*Z4$6KopYfSa}@v)s-Ieh)Oy+ZxRCvVI3XS4`fe^p?@i+6TE ze@w0}iM_7a(y&N_f#Lk;2fytso+tDiER-oxuktY2b@Gc%zRZCuS-QJ^9ozk0#=gS8 z-08Xr@0?-|MTHgy1|1!p1wkv({RhJ9c#Z{8ja8AQNufc2smCzq{x;hsnYT`_{u*ZT^T)-B?6cOsxUz8J!j{Jt zA8O^-u3g*Vw%B~}!YyK@0xTz<7M(~jS}?`wdTGtapEoV{2i1K$vhuRM=^2Hp@Z0z1 z&6`)T_1eb@nXW}wyh26U7>-FCdT5Zev8+RZL6JpPcCK#E#@N?pk&~X*=DvMvv{Yo( zDy7+HohGU5SQmYoiJ?W{#M7b=HvD~$9j=$Q98O#@YuWS9Kj*$?>T3OyJkdktM2gXb zRLMyyj+0aboF44T^R?kzWp$1pd$Fp85JZo7RSQ^$dPU&WinC2RLJyy|$ zgHbVscLCQ&8~&+YtjjVFUD!I8VM<%WDu<;(jsh$bR5+(xYHLv7I3Usd{`UtP{&~+8 zrFxr+_buA4%`m4}go|~`=~RPb3a5=UmYRC}Ww|SO$hY6%SfvSFP%Od++aybuRhq17p{fGCbOT+L(nwFZNgE z=^yU%&s?|Pe^)=)i%+g*Uvlvuop%ZKcXoWdGt=LG_A33eZVaK^_Mg85cLr!&DYczk zIBV9GZAB}mTs2vHL1<&w^L@Xbc_}~qf940go-0|Nttr>mdKI;Vst0LfuF#Q*>R literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/multimedia-player.png b/Media/Themes/Umami/Icon/devices/multimedia-player.png new file mode 100644 index 0000000000000000000000000000000000000000..24de71f407ad25bce662c3e169a2a7d81010a713 GIT binary patch literal 1241 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 Ofx*+&&t;ucLK6Ut$VKM> literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/network-wireless.png b/Media/Themes/Umami/Icon/devices/network-wireless.png new file mode 100644 index 0000000000000000000000000000000000000000..63c46e7b297ca2a9b82e11d70ef0f181edc0cd71 GIT binary patch literal 1119 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_iJmTwAs)x~PCf4(6E1Sx{`sBC#gBW0 zdxb=f8CV+@ihrIguqmU<>0dKft3>C#q&98zDHLwI;HxuJ za!L0Lma~2{XZjusFy2;}cJJ*Y+xC_FMQ<^Szq9?m@AJ<4zxTbj`_b>5#lARM+4exX z!+*oqXIH%HFW>hktM2%j7dKAqJhFcOjTpV`e(9Yt*X$~OOqSjM{jPg-DYI$M`Sagn z4wUMyUcGvrjo|v!%`=v&etGI$QYpE8v+(yfky>}}-guU_W-CKP_RGIJ`r9w_+p$h! zh+=+`pPhZYG}eVB)YV&cPRgVQS45uOGZf?m-qR{x!~TntMBt%dSQFM=J#(&uG^;H<`fWQ zx$rbKBma2Zt`>>MJ0IS)UJ`I%o>i-hQo&QMcQcJ&Oje&^o?l>X&Cj+%YuC0msphvY z9hn&`{>%BQJv_>-AtI2xVY+^D{=Fk+=7+DYesM`?+v3L)xV%(5j$aJmIF+h0*R7{9 zdb@&HbNKoRJ1w8Q49z2XZC_`74tCq90^ud6Lgo>S#N5( z#U9Mf{l~!2F;=DNm)eEJOy8Q825GXfv!6^c^6~fIykSFt?vC(}wW2xa&z?JHWNCTw z)G4mw;$oG_Cu_Oizg+Y-acydHa`UxoVQua0C(|~o2yu#ui))H-u{1lrdi|Q8b;il( z#eXlp;5_y8)BY#y&5mttZ8z@RS+aUHcQOw%GqXis^J9yvucZ{`pJzPthV6&lT+grb z-|yT|`c%&H(@&X~K3!f*jRI}&-C|vwto(e<*7%MS>c<&Fw5HD2o_cEU?)duI_e2AP zkA;Wxn=te`+>p0!;QqtAhPj?e`arzH&H0ZN7%KRL<)8gG-FUj1^ODS!68e*XXd z4|dV7K}-uGxXT$B7*tDKBT7;dOH!?pi&7IyQW=a4j0|)QEOiacLJTdej7_Z!&9n^+ ztPBjMeYP+}(U6;;l9^V?U}RuusB2)RYiJ%~Xk=w%Ze?f+(V+A%NsEDjfx*+&&t;uc GLK6UMeB3qw literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/nm-adhoc.png b/Media/Themes/Umami/Icon/devices/nm-adhoc.png new file mode 100644 index 0000000000000000000000000000000000000000..63c46e7b297ca2a9b82e11d70ef0f181edc0cd71 GIT binary patch literal 1119 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_iJmTwAs)x~PCf4(6E1Sx{`sBC#gBW0 zdxb=f8CV+@ihrIguqmU<>0dKft3>C#q&98zDHLwI;HxuJ za!L0Lma~2{XZjusFy2;}cJJ*Y+xC_FMQ<^Szq9?m@AJ<4zxTbj`_b>5#lARM+4exX z!+*oqXIH%HFW>hktM2%j7dKAqJhFcOjTpV`e(9Yt*X$~OOqSjM{jPg-DYI$M`Sagn z4wUMyUcGvrjo|v!%`=v&etGI$QYpE8v+(yfky>}}-guU_W-CKP_RGIJ`r9w_+p$h! zh+=+`pPhZYG}eVB)YV&cPRgVQS45uOGZf?m-qR{x!~TntMBt%dSQFM=J#(&uG^;H<`fWQ zx$rbKBma2Zt`>>MJ0IS)UJ`I%o>i-hQo&QMcQcJ&Oje&^o?l>X&Cj+%YuC0msphvY z9hn&`{>%BQJv_>-AtI2xVY+^D{=Fk+=7+DYesM`?+v3L)xV%(5j$aJmIF+h0*R7{9 zdb@&HbNKoRJ1w8Q49z2XZC_`74tCq90^ud6Lgo>S#N5( z#U9Mf{l~!2F;=DNm)eEJOy8Q825GXfv!6^c^6~fIykSFt?vC(}wW2xa&z?JHWNCTw z)G4mw;$oG_Cu_Oizg+Y-acydHa`UxoVQua0C(|~o2yu#ui))H-u{1lrdi|Q8b;il( z#eXlp;5_y8)BY#y&5mttZ8z@RS+aUHcQOw%GqXis^J9yvucZ{`pJzPthV6&lT+grb z-|yT|`c%&H(@&X~K3!f*jRI}&-C|vwto(e<*7%MS>c<&Fw5HD2o_cEU?)duI_e2AP zkA;Wxn=te`+>p0!;QqtAhPj?e`arzH&H0ZN7%KRL<)8gG-FUj1^ODS!68e*XXd z4|dV7K}-uGxXT$B7*tDKBT7;dOH!?pi&7IyQW=a4j0|)QEOiacLJTdej7_Z!&9n^+ ztPBjMeYP+}(U6;;l9^V?U}RuusB2)RYiJ%~Xk=w%Ze?f+(V+A%NsEDjfx*+&&t;uc GLK6UMeB3qw literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/nm-device-wired.png b/Media/Themes/Umami/Icon/devices/nm-device-wired.png new file mode 100644 index 0000000000000000000000000000000000000000..111fe960f132fe01f6d1d0a52b569d9fdbc1f240 GIT binary patch literal 1324 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_l;APZ!4!kKb5^8=as0>>g_mzE9m5+ z+{;^6m!-{`tK#dlsc&w{C+nF$as0D2Z%)g5TlI;Xf6pF+^UrJdz5jiV`_KK;B}Ga? zoii9~SQGdTJdp&;#CyySzU?-5yZ`UUHQn^{m-nq+q;XG1QZmt^@3x@p z#*arDJX9XBe)#)4KW6W@S8pudEG;dVe*fUs*Tp6c;*UT6`19h$ik-}t^mravylbB= zzsK(HDN(5l-WP6~JFcj^kz?lLE@eind4V2`hNS09Q_u_ zu-PzU`|Z%s(2sZhD@{61&tP^9eDS_~;oUsvX{j4@x?5XWb@cT3S`RrXk)u@Z z0Lz0FF?!9*GS{qK`|!mJj>IAW{^~z{+O&>knFUsJBjV%T)h09gUj9&V$3sO(W2#qy)m#o1CJP%I7oBa)P8#)-7e1-oq%ZnodLxs%&9 z&`#Vnuu_MCVXlwbuuZef#zT4X%$B zGB)~Gx{qE`Z#rOpo;iZ?#-^KZ;>EgCjpv`=f5gDY-$0^ek%q_8AORM}CWVCTZ0;rn zhe;|+E@z%fF{%~eYAu;}zk43*hEj$w2D8X%-CwKz`t6L_cPYnA_F;j-wzkhSE zFx|L&w{_Jjg_efYy$KT5v1`N9j~{b7-_zR~R$2F6q~X;h(T1%NI%Zt0PFwEg*)P}d z`v2sKibmI=XV26^wtDD@b)S4%bntCia>fb%{^QLxcK>Y@kDU7ar+>L#RQjKetgTVn z(@)=Bm}#ZqIZ1!6pR>r(SkGPmTTfrLk6nE=W7^jPufHC8{<(3{npe&2mC+g||J2XF zPuv3Zfk%--H!{nW^FPm6Yn_8)f^?LJz#`)=G~ja7bu zR|2<2b%w4sRTYu?-TeHgyU-TD8O#if4jhVAYLjo;T3FmrYcXNmBGv2WJL%p3Gn;b! z0!6G38?^7bXT{)Cv#{XD=~Jh?zNK_CIJ}-AH@p1OOWDlWET#)VE3eq@uRjsAHY{lE zw13q*V}6xYRz@1|_}f~poAj@!f;@V=49aVDSti#cW z7m*Cf_A~T~nG;_AI_HtDlJ)3e{^K8sRWb{tQVGA$Hn25x3P} z^c;RS)&1Z5kCE}ms~-yzIocQ)7*tDKBT7;dOH!?pi&7IyQW=a4j0|)QEOiacLJTde zj7_Z!&9n^+tPBjMeYP+}(U6;;l9^V?U}RuusB2)RYiJ%~Xk=w%Ze?f+(V+A%NsEDj Ofx*+&&t;ucLK6Ut$VKM> literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/nm-device-wireless.png b/Media/Themes/Umami/Icon/devices/nm-device-wireless.png new file mode 100644 index 0000000000000000000000000000000000000000..63c46e7b297ca2a9b82e11d70ef0f181edc0cd71 GIT binary patch literal 1119 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_iJmTwAs)x~PCf4(6E1Sx{`sBC#gBW0 zdxb=f8CV+@ihrIguqmU<>0dKft3>C#q&98zDHLwI;HxuJ za!L0Lma~2{XZjusFy2;}cJJ*Y+xC_FMQ<^Szq9?m@AJ<4zxTbj`_b>5#lARM+4exX z!+*oqXIH%HFW>hktM2%j7dKAqJhFcOjTpV`e(9Yt*X$~OOqSjM{jPg-DYI$M`Sagn z4wUMyUcGvrjo|v!%`=v&etGI$QYpE8v+(yfky>}}-guU_W-CKP_RGIJ`r9w_+p$h! zh+=+`pPhZYG}eVB)YV&cPRgVQS45uOGZf?m-qR{x!~TntMBt%dSQFM=J#(&uG^;H<`fWQ zx$rbKBma2Zt`>>MJ0IS)UJ`I%o>i-hQo&QMcQcJ&Oje&^o?l>X&Cj+%YuC0msphvY z9hn&`{>%BQJv_>-AtI2xVY+^D{=Fk+=7+DYesM`?+v3L)xV%(5j$aJmIF+h0*R7{9 zdb@&HbNKoRJ1w8Q49z2XZC_`74tCq90^ud6Lgo>S#N5( z#U9Mf{l~!2F;=DNm)eEJOy8Q825GXfv!6^c^6~fIykSFt?vC(}wW2xa&z?JHWNCTw z)G4mw;$oG_Cu_Oizg+Y-acydHa`UxoVQua0C(|~o2yu#ui))H-u{1lrdi|Q8b;il( z#eXlp;5_y8)BY#y&5mttZ8z@RS+aUHcQOw%GqXis^J9yvucZ{`pJzPthV6&lT+grb z-|yT|`c%&H(@&X~K3!f*jRI}&-C|vwto(e<*7%MS>c<&Fw5HD2o_cEU?)duI_e2AP zkA;Wxn=te`+>p0!;QqtAhPj?e`arzH&H0ZN7%KRL<)8gG-FUj1^ODS!68e*XXd z4|dV7K}-uGxXT$B7*tDKBT7;dOH!?pi&7IyQW=a4j0|)QEOiacLJTdej7_Z!&9n^+ ztPBjMeYP+}(U6;;l9^V?U}RuusB2)RYiJ%~Xk=w%Ze?f+(V+A%NsEDjfx*+&&t;uc GLK6UMeB3qw literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/printer-remote.png b/Media/Themes/Umami/Icon/devices/printer-remote.png new file mode 100644 index 0000000000000000000000000000000000000000..bee3c98ac44f4401ebaa346e8b681aa9d1fafbc4 GIT binary patch literal 979 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXS3O-ELp+XOow`3?BwXOQ{d>v(O~EOO z8_wQx?J3f`V|7SDMM+CQRKRM|y+6Fmtu@OQwKUB#apVYU%C!{Y>Pq4%df0SM)n2Jl zcF*%i=l1>hmREj%w#fE-w~v3eKoU@&1#+nd=8 z3-<4qUn&yyIyRe0%79(z#*G^enp00PBve%Vc+5E^h=-4FnUeoIVUDPqufya&x8A8( zv%qxS>qoovUcY{wu{L^|M&@R9$9)rivsKJHbD&U0=6GU8hDO;QWlo#^oY3edkB9%R zl;39#SQ)~w;aXCUA_r5={pDe+A6ClUzI}V+xePPz0{i$AvHrh8*Urh$ofZ)h^W@|q zrfcu4wu`jMwC9+eercRu`Tbq~v-;WWKgz0Jwa4Gr?|pONv&~KYnCqg~OH)%*T|c$P z+~Hpty(Lm_RXQ9AVHiiqQj z#81tEr}fpDMs!u-o0EFwz{!lV{gY=!!KWDU0npSH(WXq z;IiSG(xMgDU!N4);Mp|)f6R~MPmfx?|NQ$Q$bRtTME#1dzgWLk{k^EiWY6)gq_oU0 zFL&zCS9gAfT^34qnzdGWr5tC|gsiKNzsBopikasL_Pz^=e$Kt~_JJpjhw_E~e!ARm zo-e?=Kg@p_Q&pqg1B(KtA3PQ^oxLSG0gN#Zcmr5gnYeB9waRAaEn%2@@s{x0atFB P0|SGntDnm{r-UW|yNI6O literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/printer.png b/Media/Themes/Umami/Icon/devices/printer.png new file mode 100644 index 0000000000000000000000000000000000000000..bee3c98ac44f4401ebaa346e8b681aa9d1fafbc4 GIT binary patch literal 979 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXS3O-ELp+XOow`3?BwXOQ{d>v(O~EOO z8_wQx?J3f`V|7SDMM+CQRKRM|y+6Fmtu@OQwKUB#apVYU%C!{Y>Pq4%df0SM)n2Jl zcF*%i=l1>hmREj%w#fE-w~v3eKoU@&1#+nd=8 z3-<4qUn&yyIyRe0%79(z#*G^enp00PBve%Vc+5E^h=-4FnUeoIVUDPqufya&x8A8( zv%qxS>qoovUcY{wu{L^|M&@R9$9)rivsKJHbD&U0=6GU8hDO;QWlo#^oY3edkB9%R zl;39#SQ)~w;aXCUA_r5={pDe+A6ClUzI}V+xePPz0{i$AvHrh8*Urh$ofZ)h^W@|q zrfcu4wu`jMwC9+eercRu`Tbq~v-;WWKgz0Jwa4Gr?|pONv&~KYnCqg~OH)%*T|c$P z+~Hpty(Lm_RXQ9AVHiiqQj z#81tEr}fpDMs!u-o0EFwz{!lV{gY=!!KWDU0npSH(WXq z;IiSG(xMgDU!N4);Mp|)f6R~MPmfx?|NQ$Q$bRtTME#1dzgWLk{k^EiWY6)gq_oU0 zFL&zCS9gAfT^34qnzdGWr5tC|gsiKNzsBopikasL_Pz^=e$Kt~_JJpjhw_E~e!ARm zo-e?=Kg@p_Q&pqg1B(KtA3PQ^oxLSG0gN#Zcmr5gnYeB9waRAaEn%2@@s{x0atFB P0|SGntDnm{r-UW|yNI6O literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/printer1.png b/Media/Themes/Umami/Icon/devices/printer1.png new file mode 100644 index 0000000000000000000000000000000000000000..bee3c98ac44f4401ebaa346e8b681aa9d1fafbc4 GIT binary patch literal 979 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXS3O-ELp+XOow`3?BwXOQ{d>v(O~EOO z8_wQx?J3f`V|7SDMM+CQRKRM|y+6Fmtu@OQwKUB#apVYU%C!{Y>Pq4%df0SM)n2Jl zcF*%i=l1>hmREj%w#fE-w~v3eKoU@&1#+nd=8 z3-<4qUn&yyIyRe0%79(z#*G^enp00PBve%Vc+5E^h=-4FnUeoIVUDPqufya&x8A8( zv%qxS>qoovUcY{wu{L^|M&@R9$9)rivsKJHbD&U0=6GU8hDO;QWlo#^oY3edkB9%R zl;39#SQ)~w;aXCUA_r5={pDe+A6ClUzI}V+xePPz0{i$AvHrh8*Urh$ofZ)h^W@|q zrfcu4wu`jMwC9+eercRu`Tbq~v-;WWKgz0Jwa4Gr?|pONv&~KYnCqg~OH)%*T|c$P z+~Hpty(Lm_RXQ9AVHiiqQj z#81tEr}fpDMs!u-o0EFwz{!lV{gY=!!KWDU0npSH(WXq z;IiSG(xMgDU!N4);Mp|)f6R~MPmfx?|NQ$Q$bRtTME#1dzgWLk{k^EiWY6)gq_oU0 zFL&zCS9gAfT^34qnzdGWr5tC|gsiKNzsBopikasL_Pz^=e$Kt~_JJpjhw_E~e!ARm zo-e?=Kg@p_Q&pqg1B(KtA3PQ^oxLSG0gN#Zcmr5gnYeB9waRAaEn%2@@s{x0atFB P0|SGntDnm{r-UW|yNI6O literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/printmgr.png b/Media/Themes/Umami/Icon/devices/printmgr.png new file mode 100644 index 0000000000000000000000000000000000000000..bee3c98ac44f4401ebaa346e8b681aa9d1fafbc4 GIT binary patch literal 979 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXS3O-ELp+XOow`3?BwXOQ{d>v(O~EOO z8_wQx?J3f`V|7SDMM+CQRKRM|y+6Fmtu@OQwKUB#apVYU%C!{Y>Pq4%df0SM)n2Jl zcF*%i=l1>hmREj%w#fE-w~v3eKoU@&1#+nd=8 z3-<4qUn&yyIyRe0%79(z#*G^enp00PBve%Vc+5E^h=-4FnUeoIVUDPqufya&x8A8( zv%qxS>qoovUcY{wu{L^|M&@R9$9)rivsKJHbD&U0=6GU8hDO;QWlo#^oY3edkB9%R zl;39#SQ)~w;aXCUA_r5={pDe+A6ClUzI}V+xePPz0{i$AvHrh8*Urh$ofZ)h^W@|q zrfcu4wu`jMwC9+eercRu`Tbq~v-;WWKgz0Jwa4Gr?|pONv&~KYnCqg~OH)%*T|c$P z+~Hpty(Lm_RXQ9AVHiiqQj z#81tEr}fpDMs!u-o0EFwz{!lV{gY=!!KWDU0npSH(WXq z;IiSG(xMgDU!N4);Mp|)f6R~MPmfx?|NQ$Q$bRtTME#1dzgWLk{k^EiWY6)gq_oU0 zFL&zCS9gAfT^34qnzdGWr5tC|gsiKNzsBopikasL_Pz^=e$Kt~_JJpjhw_E~e!ARm zo-e?=Kg@p_Q&pqg1B(KtA3PQ^oxLSG0gN#Zcmr5gnYeB9waRAaEn%2@@s{x0atFB P0|SGntDnm{r-UW|yNI6O literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/stock_mic.png b/Media/Themes/Umami/Icon/devices/stock_mic.png new file mode 100644 index 0000000000000000000000000000000000000000..58f1a80c27f384d1cbb6ca6fce0de39e9feda719 GIT binary patch literal 1088 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9U&jt8|xH4dX(D2~U@L&c8hO)9UxTLqQmy4TILQ)(91H+LcM~)pk z#=yWJCnpyg9_-=i=IrX^xTqti=m;BIYlyK9 zj`m(Y9--mEVd0@(KAxfB!2tpO@rkkCKAt|l-U&%@LBWBc;lX8<#S_86$=S)-*?Hya zrB+r}PEL+aPEKxauI}z`?jCNQo*v%b-rhc*ety0Ifqp?DAdO)WArVnwNy$mcDM@MR zsc9K0X&I^MAe5GonVy-Ik(r&AnVp`Mm6em5omY@uSe#!}Tv%FGTwYOHQBhu9T~$+C zRa;kEUtibQ*wEP6*wj+r+S=OQ)!N)6-#>BU#2GWD&z?79-h$cl7tdR` zaN(jQ^A|5(ymaZ(r7IRMTefWZie)QTu3Wi#>FU+1R(_7Cuwm2I_1m^> z+p%NE;UkBSpE!2v^r_RQPn|h)=Ipt%=gyzIaN)v*i|4Oiy?X1`tvh$_+`oVS!Gi~n z9zA;e`0%-Qpo zFWFfcGMCV9KNOn%6Ge;We>qo${eV~EE24b&08Yd8s_jIMkKLIWuejLwdIdm-hDe}a-GB7 z*hF@6u}*{4o!m8BC#tIX%)NBYI5VhzYqxFJTfMcySy@`zr@De;ngUe!%>G@qYq!;_ zyD^UfReNF+6l6mW9dSL*q0^){@tsh>B!+8(+>;X0n}6Q1x7FI9b@H&e&b6Zx0zt|qxl?Z^NxTt%^jP$j=vyVFgTe~DWM4fEE~CV literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/stock_printers.png b/Media/Themes/Umami/Icon/devices/stock_printers.png new file mode 100644 index 0000000000000000000000000000000000000000..bee3c98ac44f4401ebaa346e8b681aa9d1fafbc4 GIT binary patch literal 979 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXS3O-ELp+XOow`3?BwXOQ{d>v(O~EOO z8_wQx?J3f`V|7SDMM+CQRKRM|y+6Fmtu@OQwKUB#apVYU%C!{Y>Pq4%df0SM)n2Jl zcF*%i=l1>hmREj%w#fE-w~v3eKoU@&1#+nd=8 z3-<4qUn&yyIyRe0%79(z#*G^enp00PBve%Vc+5E^h=-4FnUeoIVUDPqufya&x8A8( zv%qxS>qoovUcY{wu{L^|M&@R9$9)rivsKJHbD&U0=6GU8hDO;QWlo#^oY3edkB9%R zl;39#SQ)~w;aXCUA_r5={pDe+A6ClUzI}V+xePPz0{i$AvHrh8*Urh$ofZ)h^W@|q zrfcu4wu`jMwC9+eercRu`Tbq~v-;WWKgz0Jwa4Gr?|pONv&~KYnCqg~OH)%*T|c$P z+~Hpty(Lm_RXQ9AVHiiqQj z#81tEr}fpDMs!u-o0EFwz{!lV{gY=!!KWDU0npSH(WXq z;IiSG(xMgDU!N4);Mp|)f6R~MPmfx?|NQ$Q$bRtTME#1dzgWLk{k^EiWY6)gq_oU0 zFL&zCS9gAfT^34qnzdGWr5tC|gsiKNzsBopikasL_Pz^=e$Kt~_JJpjhw_E~e!ARm zo-e?=Kg@p_Q&pqg1B(KtA3PQ^oxLSG0gN#Zcmr5gnYeB9waRAaEn%2@@s{x0atFB P0|SGntDnm{r-UW|yNI6O literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/system-floppy.png b/Media/Themes/Umami/Icon/devices/system-floppy.png new file mode 100644 index 0000000000000000000000000000000000000000..dc1d789207c3f881b2511423e3260557db9e2bea GIT binary patch literal 980 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{$o-U3d9>@1i-J2~EC~~wuzg+FaD#7F} z9SdAGd|do#u~`JC(?15$92ad}<&GwWhz^CM#E>;jTN9RQWF-qpOB^T>r)EHPMkS&rc2dG((rY3%Ii}LqSpSK>!Oy_vsdV7#*ECP4SQMK z-W+(Tu}RU`FSdT_Y>}eri|%Y#D|RJH|Cwg2uH#Y5O*-EMcC1mI$n)p9xrx0^{I$O8 zIo2*ldv+gHd~#=ft%9)H#XmoqK7K4@V`ulgJVnLRYh#&JH+zJD(Db!vx%^0I9= zv$jfQ&MG^3F~fvIQNZaywLix~4KX9d1xcsY&z+wg(BPfhbnY?Rh7B7ou*L~Ikqnv8 z!Wj8xvg0(#3ud<;JxV&xSMUDdQ}51e_6ILk&$jwu6`j9E{$@z>wts6`KHvK;P|`I0 zwUJ7=+}j_;Y)yyr@6}grOaDFXYqa_L$Fc_Y_Wj@IZQN)$ZQ8UC_bz9c?BYmTy~DYg z*&>{^h4WBQ&cSW}55BQC-Fp6@@WHm+c)76K+IJO8ci(+D<7S0O%+}Ut3{M`s`f~TN zcpalNt4E{hfvAL7ckT-;V%GECJ1{8yx2|J2@c;Q{4ReP{3=9maC9V-ADTyViR>?)F zi6yBFMg~R(x(1fI24*3K7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O z4>2^dGBUR^G=*qT`j@1|z`!60vLQG>t)x7$D3zhSyj(9cFS|H7u^?41zbJk7I~yqm P1_lOCS3j3^P6| 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 GLK6TX>Ew3+ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/xfce-printer.png b/Media/Themes/Umami/Icon/devices/xfce-printer.png new file mode 100644 index 0000000000000000000000000000000000000000..bee3c98ac44f4401ebaa346e8b681aa9d1fafbc4 GIT binary patch literal 979 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXS3O-ELp+XOow`3?BwXOQ{d>v(O~EOO z8_wQx?J3f`V|7SDMM+CQRKRM|y+6Fmtu@OQwKUB#apVYU%C!{Y>Pq4%df0SM)n2Jl zcF*%i=l1>hmREj%w#fE-w~v3eKoU@&1#+nd=8 z3-<4qUn&yyIyRe0%79(z#*G^enp00PBve%Vc+5E^h=-4FnUeoIVUDPqufya&x8A8( zv%qxS>qoovUcY{wu{L^|M&@R9$9)rivsKJHbD&U0=6GU8hDO;QWlo#^oY3edkB9%R zl;39#SQ)~w;aXCUA_r5={pDe+A6ClUzI}V+xePPz0{i$AvHrh8*Urh$ofZ)h^W@|q zrfcu4wu`jMwC9+eercRu`Tbq~v-;WWKgz0Jwa4Gr?|pONv&~KYnCqg~OH)%*T|c$P z+~Hpty(Lm_RXQ9AVHiiqQj z#81tEr}fpDMs!u-o0EFwz{!lV{gY=!!KWDU0npSH(WXq z;IiSG(xMgDU!N4);Mp|)f6R~MPmfx?|NQ$Q$bRtTME#1dzgWLk{k^EiWY6)gq_oU0 zFL&zCS9gAfT^34qnzdGWr5tC|gsiKNzsBopikasL_Pz^=e$Kt~_JJpjhw_E~e!ARm zo-e?=Kg@p_Q&pqg1B(KtA3PQ^oxLSG0gN#Zcmr5gnYeB9waRAaEn%2@@s{x0atFB P0|SGntDnm{r-UW|yNI6O literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/xfce4-display.png b/Media/Themes/Umami/Icon/devices/xfce4-display.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5ac83f7b903118b6234c0178f0bcd99c66c03a GIT binary patch literal 1119 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_Hl8kyAs)xCPC1*c5-M`E{{3FBS`{_h znVdTWeAI-MULEV@cqij1Q7Y*8!JmWedXx3RR_*Yc9G}@&Xr#>E+GK4yb7Ek6Qb7}2 z)3VDmORk4suf6UXUj9p2*~8(3)5m*zLrc%uK980AbN}!c^Vzd!zwbWbzDg>N>w*O5 z;SZO4dwahhaxCptj&Die$IT@eg2*zk8Yw!QqRZCS#1X_4=OCN}sc>I7HV`g8!8sw}4>XuJ7EZPoI8L={IXxGD~FJ zD)y}KGo+(&RSQO9UF`0YIL30^oEHwGA#P7##O$W)kiL`J-{M( z@X494cExfNyV$?;@7TD>X;zs=SJ4y&-^=$>qTQz}%FD9!)%Tnd?Who2Z|^JPo)X!& zwQP#Q`Ok9mHfLCz-OssI^d7g8XoAP)DXXG=wHOZHnezC_0$WC*<9!xIPj*faf1aGy z;4;O4N${Y=iOqA$cH6EzAo1hLWATr1#~$#WJY#Y#@=En4KP#5{eHH5^&LlLsacHgV zdRA!cH;E-(-G8$d>kC14N0UVf7PHQ(xdujL=URTM%gue;ylR!5$VBh>>wzM7@7=mp z^?eZ=j{&QS=cF@x|2}SQHsS5t+@E#n&#&&C|NUD7 zk4IzEy{89$FsL2SF$fR6`sUBopAVLlescQ!}R`{{807y^DA6S{MEJ z{cyW|&GyfwcjqwY@ZQ_&;mBjdc;-rWa$@4crP#`JRo>tC?+=>=%ee->z1tc-DK-5&c--_Pk3jEJ#tHn9fmg20xw^H+fVW@q#r5|2 z`%0pp&-=%EhxzitTlLcQ%vb+(rEAF0|P4qgK3{F3>g?05E^pxQ!>*k8H@}J4RsC7bPdfz42`Ue%&iPf zAsUqaC227*Fi3)I2+mI{DNig)WhgH%*UQYyE>2D?NY%?PN}v7CMv8%ffx*+&&t;uc GLK6TX>Ew3+ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/xfce4-keyboard.png b/Media/Themes/Umami/Icon/devices/xfce4-keyboard.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b6326b04d5d58ee3c879722fa249bef8eb3c78 GIT binary patch literal 890 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}ha;hrvzAs)xyPCoA)5-4(f|MNN3_s>*6 zUeU^Zu})!DqFak(u2a{Nroz?U^#)(qMV|cHnt9pJV?{u-S>Uq2vZ-uGGa3a%MR@zp z&%9D;RempfVbhZtzS{)<9C)brZs+so-rEY& znv1%kj*GdvO!kcuFFmvA=^E8vK^$9{GuRd|NXfnMzo)bM@4|%(Pn`04Hz%mZDRN?z zYS41s)oz+o6BE=pQcivU%Repk=#*vphU(#WFBfb7kAJrNpXOB-#_X1UO#iBFW#6u@wQh= zK#S)LMI{9>1K}BxXLyp@3>X)1shKUB;@`3$GCtTmaUVPM>3&|t`ROeDZSEy$#G#{OByzubPgn?a7jK(+kBjfyq8QoTl+hoTZi zE9)h_Pe-N{bDyZlTw;9xWAZ=gXX2Mm{QENDtZq`?J7ot46`_MQR>|s<_vS{cZ{Er* z6c|2h)~wRA52HkS51z^4n&=^NghwgLT)<~z!?kIb85qugesDuHA??c5>l=dw_wzg` zJ;}1|vC1A-e>JsZjxHc6#lI(EHU1=9m z%6q_;;o&yfE7#>S-|x7==p9`j;@=_g(9MWx;nt@-3X3GT%J{P>=)Wo#=#85kH;OI#yL zQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=IR>@#w zU}&goV5Vzm9%5)@Wn^w;XbRDw^e;(^fq_91WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22 Xeo^}DcQ#TC3=9mOu6{1-oD!M| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4T%InDAs)xCPW_*KCq?G?{qvKbtn-}p zq-yiqySE~%-%iN2atW|{DRR_TW|O>%=#;bT%-cIMTo-OQcwyJUf~1WKT+G$e6#o?+ z6%{@BQ{0E$YKoEC+hbL0&%F+v{Ck#-zg+!|cRRLSU;9t#N8@>Z&v|>|=db7dP`|me zvvd3F^(WopeU@L2X4vy`*Sk7J7jA~cSWrH?@@} zas-O7CMPFPP~kkgi!*Z4$6KopYfSa}@v)s-Ieh)Oy+ZxRCvVI3XS4`fe^p?@i+6TE ze@w0}iM_7a(y&N_f#Lk;2fytso+tDiER-oxuktY2b@Gc%zRZCuS-QJ^9ozk0#=gS8 z-08Xr@0?-|MTHgy1|1!p1wkv({RhJ9c#Z{8ja8AQNufc2smCzq{x;hsnYT`_{u*ZT^T)-B?6cOsxUz8J!j{Jt zA8O^-u3g*Vw%B~}!YyK@0xTz<7M(~jS}?`wdTGtapEoV{2i1K$vhuRM=^2Hp@Z0z1 z&6`)T_1eb@nXW}wyh26U7>-FCdT5Zev8+RZL6JpPcCK#E#@N?pk&~X*=DvMvv{Yo( zDy7+HohGU5SQmYoiJ?W{#M7b=HvD~$9j=$Q98O#@YuWS9Kj*$?>T3OyJkdktM2gXb zRLMyyj+0aboF44T^R?kzWp$1pd$Fp85JZo7RSQ^$dPU&WinC2RLJyy|$ zgHbVscLCQ&8~&+YtjjVFUD!I8VM<%WDu<;(jsh$bR5+(xYHLv7I3Usd{`UtP{&~+8 zrFxr+_buA4%`m4}go|~`=~RPb3a5=UmYRC}Ww|SO$hY6%SfvSFP%Od++aybuRhq17p{fGCbOT+L(nwFZNgE z=^yU%&s?|Pe^)=)i%+g*Uvlvuop%ZKcXoWdGt=LG_A33eZVaK^_Mg85cLr!&DYczk zIBV9GZAB}mTs2vHL1<&w^L@Xbc_}~qf940go-0|Nttr>mdKI;Vst0LfuF#Q*>R literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/yast_HD.png b/Media/Themes/Umami/Icon/devices/yast_HD.png new file mode 100644 index 0000000000000000000000000000000000000000..d7aa0e11337ebca366cdb07d7632712920b2f324 GIT binary patch literal 696 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UZU^{;xH2#>7cW_~bm`KSD_5>r zvu4AF4I4LZ*tBWWjvYI8?b@|__wGG=_Uzre=fHsj2M-=Ra^%R-qeqV)KYrrGi8E(T zpE+~p?Af#D&Ye4d{_KSd7cO4BcTOXzJ2@g) z^s?suIUBeB`}gnPS2?jP1_lPkByV>Yh7ML)4+aK?U7jwEAsXlRo{JQ3bYN(E*m5FI zo|L-)1h72kq{ z@7o@=STO5B%bQP6{yyls;8wz9@w)k`-(}dYg6E zf3Ah0FP6WVaC6^+{?eLPnY(zz3l%vE1Q9VLAAs+q9i4;B-JXpC^fMpmBGls z$UxV?QrEyN#L&XZ*wo68NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UZU^{;xH2#>7cW_~bm`KSD_5>r zvu4AF4I4LZ*tBWWjvYI8?b@|__wGG=_Uzre=fHsj2M-=Ra^%R-qeqV)KYrrGi8E(T zpE+~p?Af#D&Ye4d{_KSd7cO4BcTOXzJ2@g) z^s?suIUBeB`}gnPS2?jP1_lPkByV>Yh7ML)4+aK?U7jwEAsXlRo{JQ3bYN(E*m5FI zo|L-)1h72kq{ z@7o@=STO5B%bQP6{yyls;8wz9@w)k`-(}dYg6E zf3Ah0FP6WVaC6^+{?eLPnY(zz3l%vE1Q9VLAAs+q9i4;B-JXpC^fMpmBGls z$UxV?QrEyN#L&XZ*wo6| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_+MX_sAs)w%PL0eEP82x)|NeB_$#NS% zx@>d{5t#UZ(T;PG(hs$;qtYrNzZCXyJYrn5NU5pc$?=P;VE?hlN6i;1WZ7zTuzPLv zcrAK)joI#-Z$7^L{&Uiiwk2+zj}90desk_m*|XXGtp7GnxL>)l-dad4^VK!iL`{ZY zy)O5?Ikv6c^=0q+M2G)nDohvLC#U&eQ;ltYAXB%m;miedJFlqe>vvA6{js_xivNIP z-|<_?R=qD077FytX}4KC!z`bRwP0ghT`WUGXi*RVeOnXr!EfrYo+p`qHu#qlmvTO3c~m)GTIW|#_YGvs1> zS$9~L!6J*NF48d7vD#$c3eibg%HJzl=Ew8SlsdAn%{rn+@;u|39mmWn-^=kn$bFxE zXKQ#-x5-*PyKJ6-CXpp++I8QUU)*CqVRrtgXzl6K_fM{sy4V?fe46K^kmpRCR@Hvh z|GvzeEP8Qy|L^6?gI4-KX7ZbFxs$~qK7G^bRZn{7txmPSC3W-|@9gY`-S&EMlOoD~ zT$rdHs;nhee{JR)C%x&-nX?Rhg&7`H$|+4;RwNl2Ccwhjq|lH#OF~l8QEjqg`X+8g z%`ZD5UaKz%vDukz{%8Ak#ru)m=^OYbdaz6hT9OyLUS@*8j*G>-Edniv6E(V+JSQbc zuyx(F*LL&}RIr*HDj)t|-WeoyM=PY$j zHwiGUdwpnIuDM+Q>gW0;j}QDiyyOv2O60X$e1B~2KYW{UoLXH=%;=gI)dn9S&EbGUWac3K_>& zo8X~R!%%coOwj4ne>O#zoBvL&U&=7SZ+T=W`?S=L)24}8i3R*x_3_WgDTZ!Z42}YC z-n@NltFgMo?q5^NrM9bA7QNS8ugOqSQX+8dhSTkBTb&jzuovUME}Lk}@QIhimYe!kPxe~+hRZ=#F#l>Q}YF)%PNc)I$ztaD0e0stY! BwtxTt literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/yast_mouse.png b/Media/Themes/Umami/Icon/devices/yast_mouse.png new file mode 100644 index 0000000000000000000000000000000000000000..0c72f7754a621ce1ed3907a602a2d99470834cac GIT binary patch literal 1288 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4T%InDAs)xCPW_*KCq?G?{qvKbtn-}p zq-yiqySE~%-%iN2atW|{DRR_TW|O>%=#;bT%-cIMTo-OQcwyJUf~1WKT+G$e6#o?+ z6%{@BQ{0E$YKoEC+hbL0&%F+v{Ck#-zg+!|cRRLSU;9t#N8@>Z&v|>|=db7dP`|me zvvd3F^(WopeU@L2X4vy`*Sk7J7jA~cSWrH?@@} zas-O7CMPFPP~kkgi!*Z4$6KopYfSa}@v)s-Ieh)Oy+ZxRCvVI3XS4`fe^p?@i+6TE ze@w0}iM_7a(y&N_f#Lk;2fytso+tDiER-oxuktY2b@Gc%zRZCuS-QJ^9ozk0#=gS8 z-08Xr@0?-|MTHgy1|1!p1wkv({RhJ9c#Z{8ja8AQNufc2smCzq{x;hsnYT`_{u*ZT^T)-B?6cOsxUz8J!j{Jt zA8O^-u3g*Vw%B~}!YyK@0xTz<7M(~jS}?`wdTGtapEoV{2i1K$vhuRM=^2Hp@Z0z1 z&6`)T_1eb@nXW}wyh26U7>-FCdT5Zev8+RZL6JpPcCK#E#@N?pk&~X*=DvMvv{Yo( zDy7+HohGU5SQmYoiJ?W{#M7b=HvD~$9j=$Q98O#@YuWS9Kj*$?>T3OyJkdktM2gXb zRLMyyj+0aboF44T^R?kzWp$1pd$Fp85JZo7RSQ^$dPU&WinC2RLJyy|$ zgHbVscLCQ&8~&+YtjjVFUD!I8VM<%WDu<;(jsh$bR5+(xYHLv7I3Usd{`UtP{&~+8 zrFxr+_buA4%`m4}go|~`=~RPb3a5=UmYRC}Ww|SO$hY6%SfvSFP%Od++aybuRhq17p{fGCbOT+L(nwFZNgE z=^yU%&s?|Pe^)=)i%+g*Uvlvuop%ZKcXoWdGt=LG_A33eZVaK^_Mg85cLr!&DYczk zIBV9GZAB}mTs2vHL1<&w^L@Xbc_}~qf940go-0|Nttr>mdKI;Vst0LfuF#Q*>R literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/yast_printer.png b/Media/Themes/Umami/Icon/devices/yast_printer.png new file mode 100644 index 0000000000000000000000000000000000000000..bee3c98ac44f4401ebaa346e8b681aa9d1fafbc4 GIT binary patch literal 979 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2GXS3O-ELp+XOow`3?BwXOQ{d>v(O~EOO z8_wQx?J3f`V|7SDMM+CQRKRM|y+6Fmtu@OQwKUB#apVYU%C!{Y>Pq4%df0SM)n2Jl zcF*%i=l1>hmREj%w#fE-w~v3eKoU@&1#+nd=8 z3-<4qUn&yyIyRe0%79(z#*G^enp00PBve%Vc+5E^h=-4FnUeoIVUDPqufya&x8A8( zv%qxS>qoovUcY{wu{L^|M&@R9$9)rivsKJHbD&U0=6GU8hDO;QWlo#^oY3edkB9%R zl;39#SQ)~w;aXCUA_r5={pDe+A6ClUzI}V+xePPz0{i$AvHrh8*Urh$ofZ)h^W@|q zrfcu4wu`jMwC9+eercRu`Tbq~v-;WWKgz0Jwa4Gr?|pONv&~KYnCqg~OH)%*T|c$P z+~Hpty(Lm_RXQ9AVHiiqQj z#81tEr}fpDMs!u-o0EFwz{!lV{gY=!!KWDU0npSH(WXq z;IiSG(xMgDU!N4);Mp|)f6R~MPmfx?|NQ$Q$bRtTME#1dzgWLk{k^EiWY6)gq_oU0 zFL&zCS9gAfT^34qnzdGWr5tC|gsiKNzsBopikasL_Pz^=e$Kt~_JJpjhw_E~e!ARm zo-e?=Kg@p_Q&pqg1B(KtA3PQ^oxLSG0gN#Zcmr5gnYeB9waRAaEn%2@@s{x0atFB P0|SGntDnm{r-UW|yNI6O literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/yast_soundcard.png b/Media/Themes/Umami/Icon/devices/yast_soundcard.png new file mode 100644 index 0000000000000000000000000000000000000000..625fd161ccc52a1d833b648e23e9b82fdf981ec7 GIT binary patch literal 1319 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4nw~C>As)xCPQ9Nm5-M`s{`?k;+WoXFU_0>r?`o%xQ>)$MR!{d@x@p}Dj~e9*)>rjwhp&6$wKOQNsAy7&m91sZ@~>Ba z+n(MOcW2Yvi><9(L0K=VxR#1|X`1+YUpu_fZ@Kg8tA{qNNl1J+%ckVTgHQA8&*(Fq zP!V0~x9`)ZiOk(oxmJd7#a<8eTKL*(*Sg7GOXUg=8%$cCdwb2AH7k(Fq}4wE%{Py1S|eoe%YxTs{dMn#ZJbkro)lRc z&EyFbdHCCIZ(P3uM}QZvfJ9s4lpw98MV-qycL_vo+`)d>fZa$#gzL%YN~4)PZHX#h z-?QJ{?|+A^UcF}R-Q`!a9`4|C6j0G!HRX_j z&$p?kBBmYv^XHG->brMJ|J`Zzd|-D$@|*(m6Gof!-BP`6H#RRnac}QZmm3NkA8hz9 zn@kLP^xJN0RPW83ku4&(gBLQCH0mn6QV(d5>)xx_BC+~v){lMjcO**eSaL93{#>_u>rW=@2nm;~e#?u0 zKRPPEkL8tvDI0(Jt3|n&8`CQ-wiFdI&)Ddv#P)$f{oOQEIlIN@3@!-Yf1-FXs6nv# zw}ZagOIy}s_38haW_&t0Y0HdryBQc5R7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly z3@xmTO|1;gv<(cb3=F1ywlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E Ri-CcG!PC{xWt~$(69BbmVnYA` literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emblems/emblem-favorite.png b/Media/Themes/Umami/Icon/emblems/emblem-favorite.png new file mode 100644 index 0000000000000000000000000000000000000000..0923492e3f3af918302b1fa03cda16ec830831df GIT binary patch literal 1280 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emblems/emblem-noread.png b/Media/Themes/Umami/Icon/emblems/emblem-noread.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb08fe7535e82a9c40a0de6ed483654eab77888 GIT binary patch literal 1060 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_jGiuzAs)xCPW8=}4i{;gZ!P7S{F6D{ zwB%yzNi6{(;Yn$Mi(1X!s{LYoyQ!tnsX&OsudcDYP%$*O=i{Ncr_4?rnhT?K?*yr* zJoH`In8c%d^TtHo$XORXzR%Nhn>8_KYQ(Ll2U6Rr&sUzWJYSurSMzGwE&bK2S9AS1 zx9u%^)a%d94XQ$&`)8kh#86g?%6$i1TY^@Wloc0m z-mrbUIiF66VMKKF?Q_pR2fw_&o--^gVBYokrjl7xUSB%#^u~=F73;VDyHpz6DUq@E zeCp;%FKz9J_xE_Oygv5H=vML zQ9J!f5~Gpi8z;si4pzMT{0++GKfW%^-ty0a*>G96>*u%8uePTxjB5`uT4Tkr;{Lwo zf63b4u1dW;c<9~C1!otiZWDU>DNyTMcK(WhJ;4Sq1R}S%#qR0Yyhmi4DubK_or*BwK_W19-r&6~(cYUz@(t(a6QWbLS_iMOM9jcJq5+#t6 z`|;uH)hkkjKK_02cvIDu7fVhkC4N=v;HaqEQEqeNbAWC^rs{-X)q*(!d(JLOmfc?V z)JrpfOHwLJd}Y*UA@vQpzt0~&e0b%@ot9qw@=1Mtiws337Q|TpGgK1lOV2(pCHHJ| z_4gGaS`6%;KY!l3j^+37->pd-e|-M(<;#U9TeF#CEuI$5Oxh^%=FJsVrXGy zY-(j_rfpzgWneJvvxOmwhTQy=%(O}dBLhQ2T>~>+L-P literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emblems/emblem-nowrite.png b/Media/Themes/Umami/Icon/emblems/emblem-nowrite.png new file mode 100644 index 0000000000000000000000000000000000000000..967e62a69ce7e5c547ae62fc7d37579131790cf1 GIT binary patch literal 838 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}ha9-c0aAs)xKPCcI`94KYpu{yQc!xgyw3H5M6VJn1D^n6 zY4#V}MYnq`EPfaktqZX_{peAp)>E#uw!{t&%RM#6ntyNQkXdluIwgO-aloRuvlUN7 zAMjVHYW_INJw51WOX7iZd9&l*3%CfLIeY4SQWMix6RV)Wtx?h;QERWdMXh?3w)FBA z50$r*1Y8r<=5O=8c;>lq>EeSMW-fDGm&MvR_wF}^|36Q=cP+a6&+Y2=bsC>o{{8Fb zy4jZV?u<^+>^wO2bhxqEf^%1l^k%7aepd9>*yEJUH7ilV;aF9> znav&bG?fRudS`b#w`~?&5V_=mYj*YOjUn-J73bCnwlS`KtNX~J&hlQ-fxoL~-mDee zSu4|I(Rcq?;huj_K3)z}bX0q`XV>Kek`H78KK-s#VEo6lzhVA?{0ICOzQ3R0GU1%N z&CNaPb3R)#C-MI{Z!d5Aa&piA_}6B literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emblems/emblem-photos.png b/Media/Themes/Umami/Icon/emblems/emblem-photos.png new file mode 100644 index 0000000000000000000000000000000000000000..00906aae6b3b7b637a7ebc7be2cbe858f329969f GIT binary patch literal 1218 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_M?75|Lp+XOo$8w*lPYn%{_|GryJzaQ zWzJgWc_(c$o3>+iz$7!XFV45wJXbWm@MIO_53<$Jst7sQtPsZ{c(7R@W5Lx3-K)p? zzbtyBS#tT}oboKRo?zj|T7i?tCt*AzW3P40WVK;zVg%vlWKTt5#9 zeYm(k>*CBt@u5#X5Mp~At|EYa4uYL&`lPZ3u|89wgLbBjOqcINlzpMKI%KQl(J`}Ho4rUQo# zF*Q0gWSE?~b4O;~>qnJxJ7f4RpJ|Uhe^X%jGN%2HF5MMOe)PGS8$3_oh@ zTmp|2%3OMBvb$;BRe_CDas^GU&bImGp&e=KUR|x;mY8tcY+5SggI#(zbHrlL8<%{G z{COxnKi|L6zf2>NFMl4lkzsDp+vTcUt*Rxl?$=9gwtHN^%XQxNFWcF*f|cb_?&&&A+cgN~Ky`(RxrMu*VUKHDh| z4rNSQ=Qq9j{m0~+N``BbRw#5xKm2?6ZSOJ{|MG|z8thN93kiJyHxYJnOOPiODf z^>Ai>YhwPY!Y^-bFjEu5w&d!o%v!H^Z~Ate`BVezjQX@4RlmQbtla*cBia6p!LLxR z{qav8F6Q#xy-a(uScb#I-1o1R_HVA7tNFlhYu(r02>ZCzaz|!cOv!k-@!#QI=kMR= zg<9?I^AC2DmRwZZ98)(x{mY~BJ| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}ha9-c0aAs)xKPCcI`94KYpu{yQc!xgyw3H5M6VJn1D^n6 zY4#V}MYnq`EPfaktqZX_{peAp)>E#uw!{t&%RM#6ntyNQkXdluIwgO-aloRuvlUN7 zAMjVHYW_INJw51WOX7iZd9&l*3%CfLIeY4SQWMix6RV)Wtx?h;QERWdMXh?3w)FBA z50$r*1Y8r<=5O=8c;>lq>EeSMW-fDGm&MvR_wF}^|36Q=cP+a6&+Y2=bsC>o{{8Fb zy4jZV?u<^+>^wO2bhxqEf^%1l^k%7aepd9>*yEJUH7ilV;aF9> znav&bG?fRudS`b#w`~?&5V_=mYj*YOjUn-J73bCnwlS`KtNX~J&hlQ-fxoL~-mDee zSu4|I(Rcq?;huj_K3)z}bX0q`XV>Kek`H78KK-s#VEo6lzhVA?{0ICOzQ3R0GU1%N z&CNaPb3R)#C-MI{Z!d5Aa&piA_}6B literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emblems/emblem-symbolic-link.png b/Media/Themes/Umami/Icon/emblems/emblem-symbolic-link.png new file mode 100644 index 0000000000000000000000000000000000000000..5848dc5f003f6dc7fbb178d2f3f4dba1e60a00d6 GIT binary patch literal 904 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haU7jwEAs)xKPCf4(5-4)q{(d&I^TnX! z+pb;U&z|~A+$H6Uyvc?60gfz=EV?X)hcYf}xd`2Ib5x!2U|H)f-R6=z9mdXEJy#|? zJDXYfzWVc*y$3yC96Iy&<2&p5#rvMm`~AS)e5v~6U}5D0z6**xs*BIuCnH_wHGHEMy>5wyH>Yl!T}YLcCAK9 zwjZJPX2u+wwWlASS!-C#9Klea>5y9Rq2>BnP8F5*$rFOp&vHJO5%TzCFJ9%cA@F23 z!vSfR2aoK&O}nz+;a;`4k^ztB@3X0lD)*|LgBUncxEB4`8Zo0UL58P*<*`uwwQCvM zX1#g$?m~{4=2SMz^0FP9Z}MYeJ$5O+q~jG# zn$wH-PKoK*!QL>3d1rvdMjyLHKYy0TGC1vsaSBs1j^8?On#-rUf4SjvUH5(8+3@3? z=a#Rg$F6?Nj@$9$$c)5m-)e6=Elkyn> zerC@@55^sc*&F8_XQoriTmCH9_|`_3le_MxIP8sMo^ks0!O2svK0Wo~L`2Qgf5oe> zXRleKC+vFh^503!|5m4^ZC8!8=TYcdG(Awn*M7(U0#)$|S+$D0lnO*F_++?0GhJZ& z$6$TH|AF`i>5SHN8J3REiy5?865=C_6}Z@DC*D~Wz3hMbZ*Kjk(mgXSgn2SBFsPQe zMwFx^mZVxG7o{eaq%s&87#ZjqSn3*>g&0~`8Jk)enrRytSQ!{h`)px|q9HdwB{Qv( n!N|bSP}jgr*U&t~(8$Wj9IioFtYSL@0|SGntDnm{r-UW|CiHm# literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emblems/emblem-system.png b/Media/Themes/Umami/Icon/emblems/emblem-system.png new file mode 100644 index 0000000000000000000000000000000000000000..77a84e841eb4ec3d2ce76171c0ca7a336c91719a GIT binary patch literal 1566 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;OA|_cGfjiFJ8Q`y|cBmyREaky|JmTr?<1Uy}7ds z#O>Td7u>3ID3ac5UsUw?Q1gr3f>w%)$3W5*|}()7#(O(bd`y zW_0&-^z?Q0_IHDgYFn^y?vW#hySh8Ndpr9l^iG*J>CvM{{S$kpOr11gV(+9W6Q)j^ zeCF)wd-v{jbhS>L+&^XNq*JF)o;!E0qpNMo)QMB3O}cmQ-piLSuU@?}W9GEkb7nkz z_z>deuAcUu-p*UMZa#VP_f?C5F*d8(&<#;j>GXHAo>07ym{m9-8;{oJ$v!u#p~Cv z-@JMK;lqc{?zXAZCM{SvZ^MQSn>TOXv17;X-Mjbh-Fx7`fkTH59XWF3=+UFcjvYIG z{P@X}Cr_O^dFs@u)2C0LJ9qBFh4U9LUc7ke!lg@>E?>TQ`SPX9moHzra^=d^D_5^x z1=)M;+V$(#Z``-Me@H{{06J9z1;b@X@13 zj~_pN^5n_Wr%#_fd-nYK^A|5(ynOlc)vH%vcfNW1_U*fO@7}+E|KY=jj~_pN`t<4Z z=g(iheEItI>$h*;zJLGz35!ce$;iqntEy{i>*yL9o0^(g**H2nIeU2e1jNK87VO%+@9@#1$Bv&m zedgS`a~CgOzH;^Iwd*%--n@0^-u?Rz9zJ^fP~Aei!pD5ISfVel7NP<%<(5KZobp?W%wNEv9yb80X(Fxz_wL*2N!hy=DKNcYoG& zj_oc=|Bo%4{QRAL^}jbC-%6Xmy82+6aq4}W+J~NjG42P?sE6x+mvVL~^^Hxc&Wo>_ zu=?n^1M5nE-1~XE_2ImU4xDe7NteHi+4s?Amh6ed_jOez|JUVSztfmA_t|Fgb@!@% z>|tJ0fAF*I^7S!0U$Lf0xuk|M#(vh}UX%Q3v2Xh+rJAn_*Jh~P-TO5`>PFvM@oRD= z&Mi~_zI`1oe?H^w{4GDfz52@C``}SlE;F6;$<>- zx2HayC3^asUgWmjQd*NImVZ6;@sg{x`I@MWn^q^j+VnCwK`|-T@U;KU)t^s&x_R=| zr+ZTqJ2*CO3>6eBx81+vm{*XGsbim{+POt5G?msqxKp<9j-O{(%!GDcwSy;4=_+Vt zO3oL`QdHJEa{O4w2M%RpZFX^edwp|tZDZwsF3b$sjqB%JdZMzOfq_A_#5JNMC9x#c zD!C{%u_Tqj$iT=z*T7QOz%0bj!phjx%Fs;Pz`)ADVA^L3Llh0U`6-!cl?+A(hK9NZ fX1a#vA%;d)M&@u0!eSL58yGxY{an^LB{Ts5IeJHK literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emblems/emblem-unreadable.png b/Media/Themes/Umami/Icon/emblems/emblem-unreadable.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb08fe7535e82a9c40a0de6ed483654eab77888 GIT binary patch literal 1060 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_jGiuzAs)xCPW8=}4i{;gZ!P7S{F6D{ zwB%yzNi6{(;Yn$Mi(1X!s{LYoyQ!tnsX&OsudcDYP%$*O=i{Ncr_4?rnhT?K?*yr* zJoH`In8c%d^TtHo$XORXzR%Nhn>8_KYQ(Ll2U6Rr&sUzWJYSurSMzGwE&bK2S9AS1 zx9u%^)a%d94XQ$&`)8kh#86g?%6$i1TY^@Wloc0m z-mrbUIiF66VMKKF?Q_pR2fw_&o--^gVBYokrjl7xUSB%#^u~=F73;VDyHpz6DUq@E zeCp;%FKz9J_xE_Oygv5H=vML zQ9J!f5~Gpi8z;si4pzMT{0++GKfW%^-ty0a*>G96>*u%8uePTxjB5`uT4Tkr;{Lwo zf63b4u1dW;c<9~C1!otiZWDU>DNyTMcK(WhJ;4Sq1R}S%#qR0Yyhmi4DubK_or*BwK_W19-r&6~(cYUz@(t(a6QWbLS_iMOM9jcJq5+#t6 z`|;uH)hkkjKK_02cvIDu7fVhkC4N=v;HaqEQEqeNbAWC^rs{-X)q*(!d(JLOmfc?V z)JrpfOHwLJd}Y*UA@vQpzt0~&e0b%@ot9qw@=1Mtiws337Q|TpGgK1lOV2(pCHHJ| z_4gGaS`6%;KY!l3j^+37->pd-e|-M(<;#U9TeF#CEuI$5Oxh^%=FJsVrXGy zY-(j_rfpzgWneJvvxOmwhTQy=%(O}dBLhQ2T>~>+L-P literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/face-angel.png b/Media/Themes/Umami/Icon/emotes/face-angel.png new file mode 100644 index 0000000000000000000000000000000000000000..50627bff5483841c0d05583ee3bfa958f7cd3af6 GIT binary patch literal 1496 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4w>(`OLp+Y(of@4J5-QTRzcjDd>hesd z=qlz@x(xy?OkD~g1_H`T(*>MVq%O8d%;&C8O!v1c`Jb_igrIAd4+vD99LZ%`9Dfq`d{+o-?4Kli*r?@ zbb}^-c^ovU(qqxf!nWCKr>uCMasJ%u9M4HHTb$DuFZVp&-!VfyE&spT&-D$@wukE( z9p6?jQ2*i8ol9A*kF7dxNF+5zaIkS?tZigi%gki2V!!02W$;azE&cVm-=4|$iL;u# zkNLam_luRbTQ{?FG+X>zyYhkmk;2!7i>A)_Cc$Iec8yW%3&*FuKjPS<;#s#(jrf_G zS87>O`}M;!%iG`Hvu$|CromR;H*2Djb%5)?Ka*V^@lNrb-~aGeM@plOM@NQqv&1xO zsoS$p2V`@fd}jCO=~R_f{uh%^mpzDUaI8uHezLRrn9e(;jX$hIDyH2FW@i+a=niPz zC%m@NY=J!EEAz7C8L?kt*E|3Gw(j@02iLz(FPY-od)@jn>u!_o%rt{FI@3gzl9>G- z2F^3s!a22@E9Os)rQ>nkpyQXXFWXmF5) zj9T{uR<3leTzmK^XU&&PY4K=whn93R*$0R6|K?P$<`mpfp?S1@{?_{!9aF73LP8YM z_B`}Ex8K|{D$7lYh1p!txiRd_jCl`E?+wq`U)Gm?-T!H$=2D#*=3TtA`Hc73ood@^ zy1+E!!q2)jLEI`)Q6dTvN=gD18Qdm{+|Q?8wAjzZ!_LgTc9YH4HPfDYYhSSH=PO#V zhkYNDJ%5|qh9w#dOlz5Sh1@Poa_;88<)Z1h#mzGyz|=)}(P0~_4+psquooQQzsRyn z!{POr30~=sltN!@m@a+Swr2N#hHci}$5^*sx$1VZGC^wAyxDT|YYKa3T`a!w>6BH^ zmq?Gf>L*ehQro(iuOxV{dtJ3S+L+U}qW6~9bW?x*g->JnqsvV%&h2?P&81LTO!(OK z%?bawuC0mcTjIZSiZVHxTm^r=tot{=PfljR6T)|?7vV7u$?{aMCzPtL& z2@UHYW8uR+4P1&}1eXfrDn8@rxuMc?gNN<5mFK@2oz35WEPc)wf9?T_5MA(^zhT(4(SKkHF)v@ zI~$A^$aw78y({bCrI}ZyA8*{$xlFQ{)!U?z?{G<;!Q3qCl5M{~ul=3(FT&#%`;vFl zR@|7M!}-0Tul~ROM*PwUX|7YYPi`|XFsPQeMwFx^ zmZVxG7o{eaq%s&87#ZjqSn3*>g&0~`8Jk)enrRytSQ!{h`)px|q9HdwB{Qv(!N|bS jP}jgr*U&t~(8$Wj9IioFtYSL@0|SGntDnm{r-UW|NMw=6 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/face-crying.png b/Media/Themes/Umami/Icon/emotes/face-crying.png new file mode 100644 index 0000000000000000000000000000000000000000..04b6cf122032dea102ee96498972949ee0ef4b33 GIT binary patch literal 1490 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4>pfi@Lp+W@of@4J;wo{xzWChD&EMZ` zyAZZOL^{hcP(z`7@e~cOEt4cTI$1up9$CSk;Sg`|=}D`&vr`kBzN6Ci45uR;jIBy* zCvJ1l5|7qcx+NgPJAe1xyT$VIF_T#}A2j>dot%EseCE&pM*nBlF#n%DL1<(7`=ZkK z$DZz*(((Il`T5q{*KI#;S*3Y()+^hm3;m`!t(aAED<*tp=@OeguO2_HW;s#M`y=b^ zp&jw&+g(4q>sF>5OJ4Y6Mxm0;Dv6b=B$)TA?8-m!>~i|0*tv7h_Nh)^e>155=RU^W z_o8jwuWw}zUS=aT(;#==d0#Vyn%V_RCmwRH5G+W}cxYKN&-SIPWsOem%xAOA?Q`$c z`X9J=UEJ+XO=0FoZ|&|wKPzXfwf20i`AKb>f>I@itAcUnFa3DstR)veO;4zHeeQ{#}DhpjKx_F*CnjB-leM_RG z_QV&oP6eXZuw&iQ`B0NlXCw3QcCwXPx$_)@8&P%%i7w_UD=_}v$A%!CP#;| zE|$MA=bqb=30Gn+a6F%GxYxqhWtqa#27gsUfkhdQWEL%CDyyk(;_bE#2o{-g{&>-o zH-e1YwB`H7`i}40!Yy!S&PRi*Rji-obB^!6$@|RU(DI;arE`mxuJ$mKe{{7g*<(3- z{)XNcYYb^i9ag$LH7;v|bf&e(X|;>S49U*}<=(r09oX?0Zmu-BK3yUXpu z&xY-~9BVSqr*PZhLtjGvd{nykH%0z@*xB^g2fgC@G!{ z3%9&|byZdMsNLVg=fXASMxT8;zb-MOWCG_>;hC1ZTbgFfFFBUr?Q1(ffB&IPhP)n! zom&2GiTT5P`Kw<~1^cw8GB00vS$xe}SQoqc!QWSrS7g>E7JZN^dnENPfO)Tz00-B# z>Ax?iANr6Wb$m+3LI!*DSa0cRH>R&%`Als8);n)zM#{-o+rIRDD-dkr%<>{LJL%>M zVHQ)4*IbOeCYplVdQE&xPCHf9ecPTgr`Y!1%ekg+v)yeN9gGs!UT)6&%97d>JFT3y~8IEd7H`A_1`1b zr;F{meq0e(bD6YnqocR1xC!TqNz#&Y*KN_8-G0dJ(vzCYOOO20HgAt^V3}~z$&KYl z1A~FoiTNgWX1gt(#ZM3q(ym<<)h00O^^UpDZPn}a6X#jowyUtwzQfCt#(3_oPEe6T zpu!|s=bM(Q+6fGr2^QQQjA{w@&n~)CshWNL{>rC&tn{;;^QvyjeEj{#|B-*Wk)lSF zv}qRu1A}UbYeY#(Vo9o1a#3nxNh*Vpfsui(fu*j2S%{&9m9eRnp_#UUft7*5w9giX zC>nC}Q!>*k8H@}J4RsC7bPdfz42`Ue%;6e@#VWQlFfd4hYzWRzD=AMbN@XZ7FW1Y= f%Pvk%EJ)SMFG`>N&PIxXfq}u()z4*}Q$iB}8eX8T literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/face-devilish.png b/Media/Themes/Umami/Icon/emotes/face-devilish.png new file mode 100644 index 0000000000000000000000000000000000000000..242560d14100c2c9d33606e2636688643061efdb GIT binary patch literal 1538 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4_dQ)4Lp+XOo$8qp8!B)wm zoMm`zNoVD;8+)GY{r${(&Ouk<&aI0co#H?D=)lAOzxVzBd9M7yf4N8V|t zaM_$ucH=lx&vxf^wQ^K+c;&hsCxqr`3)=E6Te0NcWRK0-xvu%PmlD3kGp}Q>zES$l zGj-4JbNfGaU0FH%yvNshn;Gj1c)xbepKB^L|T_TZN9xJ&(6)=KJg7hi16*VOsm<~S2KUUFJAe3q57=F`_H|r^*xoz z`uBipJ!=Km4&eu{Oq*@~9=IFAzo&cd+@+73t}bccwb58J#a2Z|Kk&Z2@2bZ+UuOBv z*_Wz)Nuoi#ake3UL1LM=HV0D4G!VX zS-<%LZ&y#?*P3L&v-8xp`O>D(9xPh0Iiz;?>u=$@+P4cIw&vKGHG4+gxS49PuYGR0 z;7pN2g%=toe=n#JSAV_WSofZ)ldNYtZGM-%srY18@mg{PV}v)O*K6r>5|SVF^hGWt zFOF!K(3LI!Pv&l);lvgfr%4HmW@O9#=jw6e@YwgK=Q3N^<~{4r7v}!nov}Gv3TyP*~9Q&E)|1?Yx63 zd`4GPI+w+1CGOUfF#fV!?-uXHw9~hqm6tE~UF){rqv6V^&Za(159 zJ@nG(>H2*O3~kRxs48Y^8SSlQ2{I~wb7P_Ymb$0@VvOypmR>r#?|rbw^p#)uKCDeX z;dA~%V6Wv-|BKT%Yq+-^c0804duj7S8?&?WhdPse?EDSv^?7TmE_t(+U29TU7_dN> zW!mEpH~zhUVe`7?*@=zWaUVXlq=Y}1aI$P;;pw$^K3;mAvUJH?s}(WR6gXx{Y<|8( z|EJ#h==N*uzpt%7ztn59#Z}9DGEwJknOUpcu1(Ss*>G8MgKo;=W7XF7$$K()e0d>} z^;AmhP-0QenkzwBFDx_Wa0oP%wm;4(w|)Qb-@$`xH2oe#37+N_yE#v0=D(>OJ>7h_ zTkOR>nNG$;Cg;d+eic&pqi)OHDW7(wPyHnj&=ASBp)rKdDsR)Tx3oVsdS z;o^ojMvc>%A2M;O=yEVOYpzi^sheE1O5^m}YroHHZxzj8%5}Kqy=i-+57XV?V=k*F zJvp=D-iMt12{$F@yDaU9ZYn#h)^+*FG524#AxbBogarDzUi@JlWiKixFUYCj&%&X= zx`S7My=SJk^y44B&rVfItd2-_pVnTs>57o!Qd#5Rm1RKih097*#~btjTrk zWnf@XEpd$~Nl7e8wMs5ZO)N=eFfuSQ&^55sH82Y?w6HQZwK6o*HZZUlpinR(g8 d$%zH2dih1^v)|cBF)%PNc)I$ztaD0e0sytrx_bZs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/face-glasses.png b/Media/Themes/Umami/Icon/emotes/face-glasses.png new file mode 100644 index 0000000000000000000000000000000000000000..f7cf4ec5c79d2b1c45e5df121eaf8f43c664b6e3 GIT binary patch literal 1567 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 R6axbTgQu&X%Q~loCIH^iq@(}< literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/face-kiss.png b/Media/Themes/Umami/Icon/emotes/face-kiss.png new file mode 100644 index 0000000000000000000000000000000000000000..20b81486d1777d49c7f78f481fa9e8cf182e7c45 GIT binary patch literal 1383 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq^B{)5S5wt!6947c5AlXQy6K=} z8QZGXmFp(V<&?8++k~rWJSivm1^o@w4~3LuZ;pyCp0;?W$&&gO70zabmnR-DOm6Ec7F@RvTrcpOo-psX*twP70zUCc zoBjzLdB4kM+5i0Ic4rSA74Ey961XAg#_{3{SB1D&dopIn8z_pbT4iy={qlnuI~q2g z5_z%d<{ZubR(ruliJE0kMP!WUKk7bT7IZ+NrYOxgb)(#&cxiE~pzmAZ&-Pta@`(uKRnBV8@ zFLlbMzbhklg*Rn?Z@chS?$~MJ3zaigPG9%e(M+937b_D}8KwdOkft`d;fi?u{$HOny*)?89p5(&#@IitQN9KC_3^*B4~5?ek;W zt;lcHwOOU{#2Xn+#^sy`*36Tsa$cw#^5C~9Pe{lXp)5|Ni~KGT((if~ZsL6qU3*~l ziG9`EA6iaork=m*It@Hl4)R)gum6vb&<6`1{ zCC%vfiK*oYm!BQJwx_!zV_{Z?iMQ&DzvsmNre-UyNKVWS4{9?Mcv}7cE|+*@ z)@LPrm`mz%WVyRqamQy}y@?vGdkvdQyYIVNZ?8SEf9eav&K?1e2xkt}Jsup&IVw3t zrwzXU4%i;M;I{v-lE0>Zn0s=W63!OwUBJM=pjzS@QIe8al4_M)l$uzQ%3x$*WT0zc zscT>sVrXGyY-(j_rfpzgWneJvvxOmwhTQy=%(O}dBLhQ2T>~>+L-PkfF|a8+I{BDL)gIKyyu$9dG;py~fV0wq zDc#@MSiKfI>EAg0vbCscUG@7&yDtG*yiImLo_MMK|1`UPi&Gi5E54lG_M@*pr=Yqtp?hV@;YnQD0S~Sxzm8%N6j)%Nxncj^$s2OEy|tfu zr{XHxSK}gXgSY3VhDyf&b)K!ca$Wj@&n(C9Rr3YtMC@%XIO(&?&t&uaUf-Ha&wOVs z3;cNW{KtEzrF2&D=#)x-5^7j%Syy`^^4|yM??0aDRP)U3To_|_?t6)%m!O`Wb2O(< ze8+nGx~bdC&6d_l8-1Ulc9mgTm^9y3wQo!_B0r|aO*gqZC1T>roqmb$I}EGqI^WLQ zUZQI``S60=3u27{g8%LaSP3U@@!;~&pKD+9>Q#s2=4VrHwNCWhWgulfZF-CCaqC}e z&6p45p4cVH8n$6uo}zzVu8R7D;3$RtIcAIAdVlqgcUazje20bPvMJ%pQcaBOtCC)q zJ-e=(5_N-X7f&R60)xe&MKS%$%1&lA$?5-GD4^+`xZ@7PnuyJvqSoc*8D1+-fa zDP%fZ==a>ecxG+1*She@)Ve^1;~3@FEQcyUb@KV`wrpT9aGufDnuzu zo%=pV^)Um-%NLe!CQ4k~(b(k7pvMrs`q*aYcWrm&_X+p->}*?iuWr@yogbe0u!+c< z=DBTY_EUGXuGx@l`^ci>@q>@QIG^sYxGDMcz{UI*^6wTu-edi)BWunL*K%pEIJ2o! z&gpKd<+uB%qrYcc^QTQ5+t00Es1xK3pm(ME?^K0fKRz*0S?2FI_g&T1k`lWbIws6F?_6|9 zV5@mZPF?w82WmGrMSbv{d-UM> zvWtZWCvPyEH*ZC{UrfgP?YF(1=S|klO@F6#ntzveUd$Q+$2BHalU=sBRW?<8^7=6S zzR%}>cQ@_LEI(8fQN6=-_qL2jR8|~DDl;|6C&mLp0*c_9} zYIHNP*Ln7TtA7l$CX2JLYWwqofq_A_#5JNMC9x#cD!C{%u_Tqj$iT=z*T7QOz%0bj z!phjx%Fs;Pz`)ADVA^L3Llh0U`6-!cl?+A(hK9NZX1a#vA%;d)M&@u0!eSNM85kHO wK{f>ErFVdQ&MBb@0GJPNP5=M^ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/face-plain.png b/Media/Themes/Umami/Icon/emotes/face-plain.png new file mode 100644 index 0000000000000000000000000000000000000000..eb58a7beaebf64b836b3639f5579bb321c9ae13a GIT binary patch literal 1438 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE)t)YnAs)w{PV>&0>MGGT|L1f2?ce5H zwr&sN$_&y>nBv63BcaREE5R)-9p(|ULD08nQD+;gcdE8l))a}3>8m;eKe##Ywy|hP z96B0yt0+@bH`n&<%bkC=&nztV;k&_vEn>#lv z=kPqr`+m3Zq5Ez5DD~Xccc=Xl?2XB2nXrxX*VIjQygim%e)cY&&uQ>qYQy)|ZKphL z)Y=DzZm#>d>GvtE*U~PPzFf+xepOS>oY?U4-`kwJjD!W&AAF8qyQ{8u*EHe1_v&f4 z#qMw2rsr$2K1Mq1W^l&^iyM_a7dT|uLmOlFO=>J&{$--`{wKEA@BX?oZ=L^pju$oC zbl{6UT|IyM_wUN5glBA0QPH~b@tJGcp6lJ$ zw~ODFeR6SYZtAHQ`sMHTM1EfOWGcP-cV^Q=Svt|q@&`8vYw@oqcw zV={fRyBSWoOUQ3I{=s9OJYRWY&%qTodGELDhUUau5%AgmRT&4!Fo$z$?p|;alPU*M2(qhQsq3Zm_GVm%XG_O zfkD)!)MVkW#iuSNUl&yDydbzOH_k_K?!g~?Zkb^q-+-Eqoq@1}*S8(+Vkx3Zog zCbc9lsfEj)Vey4|{j+90*t&exL_uy_tF8^YEfa0-im7@$=e%ThjN5?m#UYhG`Hmjx ziiSmd=UTlwt#=Ha62w9@U(uCzBPwn~$ZR78f9 ziA*Dxc(qOc=TBblGIi&7#;?=*r=Q(kd?G_aaPvkbv#?6j zpj#48n_e&AV%_q%v9mB?fsTch#H(LFo@=kxFtq<2b|B=~?RUrCe0zNOnoY3s3PG;> z?Kulh{JtI_wJ6as^~xe1=NtSM)Ab6T6x}JDFnh<*$mPb?8#8?`{|!7@Zu&6h>EY7H z8+RJIhH~UYHwYx~L`nYp!g8Nq_3!1!oX5Z3EP8O{fq8>gYe(i8f2NC(o0V2xJ-cR#FlUCkbdp|Rri5OL>t*I;7bhnc ar0V4trO$q6BgMeLz~JfX=d#Wzp$P!X)O}9? literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/face-sad.png b/Media/Themes/Umami/Icon/emotes/face-sad.png new file mode 100644 index 0000000000000000000000000000000000000000..e5f4d021da677344eafde3f61817215aa1314d2b GIT binary patch literal 1468 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4Gd*1#Lp+W@o$8%4B~;{i{rBJdex_N? zE&J6V_CovWw4iycEg1m^*$pMMq@_y}BUVV?nb44zs@S>fz=|9Z^DL*Nt3P-QCAvJN zT`SF|+zRr#ztn%(T)*Y_AJ=`~B{?Z5`eLiLe^F7f-@Cv6i{72JW&dZs%yiMljR$jV zE+u65{#gF}-Oi7b5A)k+M!D@xT{V}hxL54ZmMwcES=_p>{8}!4Kkr{m!@qEbwOemq z{Pgng-RJwNuRFY7b2CEtY;>g3ChqQw%Q`1Zs9Rbsvet|D<>%)q@$fg_Q}pNiyrWyr z9Gx`#(cAu2C6C_B@{PW>ramK_<)-$ciHuuvoGaf(_$V#a&)WWW>*wT)qPDfn`u3sW zSBhU9D!A>Wo1D1l)&Z4Q>I?Ep`@3XkewNq}<3Wm)UmP-Dg&vgc? zted}J$+BA&{|+pi!51knU!CcF)s|87w&lKEo3!K{4KIIEyL;GK#_Cp!aF^ny;tLmJ zPIO+bF+6y3Szw7lQ?AvUx|(p43$IoyyT7}(NBhTztL)onOpI_odrke&%HsD6L%W*a ze}AxJQizp<1lu741E0w^w>;_Pzcpi)%;A^6rhR(VyJ*XjB~f>8Y^nEbSbSyOsZU%1| z=B%OCAC}zPm%>`NK>kEzT$}wpR-*+r&o;f^*DZ6SR@&6CYu1j|c{^HX$vk~|HuF_> z)Q#ZTPV8L?pVV&t)GlOR{o`wTR*~4+1H4;i&6QGp=Y3(4g5jyQA3D!`SbWV+c`EBL zFH!NRUUP1qv)bhh|3#`Rc4o@NcP)_)>tCZ3LDPP*{t?wG{u3+6~QC(b6;GbD|;#|4v zO3D6bekXMGmM*Fhjov;zNPvIxyy6!xrJwj@o8O+c^T?F`iL%Q!zvjQ=@ORr23(|9{Rivxb^Xf zx%alN;<>`f(W^g&^{NED?p7*Z$Q0wF$RRyThkH|Qa|i3RYaI98t@WloR}7i)-un5I zt%jvPpPb*zK79>Cg4#>jvdwFLeNIl>*_C~YX}U**QVw_G%o%JMyjB4k@rz_mF1>t*I;7bhncr0V4trO$q6BgMeLz~JfX K=d#Wzp$PzF&0>MC-){&Vg9+Hd=! zer*uB(8k52^fZ)XMu0#sOJitrr_>{+WEW+}l=MT#I#hNj2_}i~cHPPdaZ+${5pZo4 zQ&HHmrFB}g_JwKNw(s43KRfMC%;ccTorRB8)F&Iy{Q2ML`I9-4KkoCa75w_OH0|%R zT??*tRNIzc@0HK3DOs5*sjU;N8#IGIQ_;u!_w*$ubzipHeYtb{xSjZd|E3Aof87ev zc(F%ZUuJX8t2Hk#hE%p{NCdZ;`M%kgXLNntt7Vtdi(_AwOn(1r*VfzqG5gXFth+9D zW-AY0Ncj1l@UziEQ=EG{9P}eBw*+vAGS57sHN*W^%wnsW7a8YD=WNw~pYh|(x`toV zvy#hh3c&1B>Y2Ix;o#m5{ zPru@}G%P;vUd`rbzUR)BeomkHFyii%S?W$VkCh)3s<~}&;_~adM+X-2wInL=G%vPa z68ZO#;6BSL=ERvd&dM7nUg9xax9E}MRjcH)xs2O_woVn+YQ8u1@rr}?hFg+ut7oR! z&q+Bw?XiMw%eRX3+xlnb#hsXKeVd_on&q5pf6uI0*C%l))-dR@)XN|9cJEm6!|wF^ zJO|CzNnOqPp-G`rHf7eDruBa7YZBGSL%H?le|52MO5~_RTYw6is#(7tY zAE`e6c+2kTm2--0mn7E&h=;A2nV{uS;Ul4XaA)G<^q4z}@~PUBgqzP)UR1W*F5@1R zIy=m-FaPdsn;-lQ%3Du;i&uX6bAf|il*@~m>5}0wXKsXaHN0QE^hlT6%hOMHR6OOn z&i_XJ-VXk^*;hU=YA?%-pi4+gM&swdx6nCGXnpE5w~0 zt_bSfrG=&-%0bxw50z%hx;!5A(YDD^ScDs!=wX8x-wi?;&N)79x>}L>I^iw_~F3fPg+`8QzSYvu4eFLv;?^F zxMi$viPp~5%zfD^wtf5Ezj?-wo3n$o%;RecCrv&%^UR<6nZ-uWdH&?LUF%r3%x!aK z_~NyukMhpnEqv^5Efp+}gjFD(ps5_l0K_WzbaR*B5+AB8os=l=13Px~_` z{{JKP+_{&(_RMV1ynScgw(yL)OENC!%|yLT(hOL#te`i-A) z>T%cYbhgiTzh>sLG%Wtjtt8PHIlAH}|Cq?)<`XtNcRH!ehHT*RMD-HSEw`IKl zy5qv+Wa_Kw(a#QiZhCgFu`@vpM)@k5?uZ_xU;T>TR=kFstRgZ_yVb#oV}7R8dqQ#rD>vNzdlZc${E&wC7aTIhH@y zjMZLeO*)$#S5jPmZrh?|!keZnabS}ON@5YR{vgnIJ|gU6YWyL4qku`JHQVHV{q%b6 z)3C$yqjBSjHIWam%-Xf-y0YTu&g!Je3s*6nU(>hC#pi6mwP#t^uE{=bJ-6g^t8uKb ze!S$|R}5+mG7995FsaUXPvynWrae8Y4aEVG*#Arz#y5R#eaf9?}0!6f^f9L-b`^OSpVq$&j+ihJ21_sp<*NBpo#FA92c8tNLD=^C1c7#dj_nZq>*i&boAU|^60 v*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGntDnm{r-UW|BZ`%A literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/face-surprise.png b/Media/Themes/Umami/Icon/emotes/face-surprise.png new file mode 100644 index 0000000000000000000000000000000000000000..61427d67172a42503639a87790ddd3195c42014a GIT binary patch literal 1482 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE%ROBjLp+Y}of?@l)m5Tx{?Gsab#l*N za=M+YIVB{(tg(s3!ysoR%c85R+m5KZ24MpY0Kso8**nchTgUnP;ZY{O);g=6mTM{p~;X&)wtBVK%w& z)t}{5LwRGA!V1$z2O6tBAL#qF;9AEYImSI~Dr!Q4lNsXJ%j$RhUAS~v>Xpc4QHu?p zXDRx4|DGEpW&b-$zOw51$G=S17>@trOUQeBNbCDe->KG%RfEmX#_!s&VaK8%5nta0 zzQWZN6E^-^l4n_Mc>DV0%a3;Ns(ZceSf0Z_)dTaUhpp4#k-C57icaUbxQ%uimwh`9 z2t-6~3E&WAlsv8#<>+5L*{bTv@-?q5qT@3x{=S^g#AmbJEUEqNw_ClXofVOWdGDXk z=oCnEWmOV#mSCEDS}C7r0h{~AF7t;kjlR9jJyBt~KJ9jO`mN)yCCiyEIaXiaWBIu| zd85S4;P(wv4|W_kOgh@JNMn})+eM2sn?8>0JAL0b&WV$Y+rKR!>+8`z+3nf)w%z#r z=hV_Piy-^_pKSrlGR-5J+SarEd=??(Bb+F~arl6NuicL|lZC}EahyJq_qSu!Z}IMz zQ>T7k`R!=58p{o@wQJX{;;Xu=9533J|?y;+hZKP zIlUh9mm4gtv0Ar&xwZOOqfE zmPzNH{gt^l`$*TJXWORs28`QYJo(p2;1yTS>Y(lg5fBE{ckP2u}|_-A(HZP9qY z8|(bH-IJ&&DEqkONx`qiO$B-a)4$0tU1z%2oOSuSpI@@i3U3wlF$`WYr~A~-1x_+K zXMav-yK=L?zjUun+~r-HCj}?JD_eeGRrVY6)g^{!F6br3Z%X@Gv+HrNhfc(SMNZ+!at*uCbTeXG=&I`-r~{PZax>FS$H+Yd8-zBqGY zNJ3O&c36vy)3me;e3z#4zM6JX$@*!*&zj>mw8Qh4L^m2LnD5KI&nv)i$U!r}DBZ25 zQb{gKRNEw*X<1~iz_c%^=U3?J^Y&V%&)V(Q_q_FY<3yVS^Uo+H%cyXzm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhX zLqlByGhIXT5JMv?BXhV0VX=zs3=9mCARB`7(@M${i&7cN%ggmL^RkPR6AM!H@{7`E Uzq65IU|?YIboFyt=akR{04l4ONdN!< literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/face-wink.png b/Media/Themes/Umami/Icon/emotes/face-wink.png new file mode 100644 index 0000000000000000000000000000000000000000..a70c0bea1e8da032bb87bc5d14232fe4be3ddb9e GIT binary patch literal 1461 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoElRRA+@ZHaUl0K?56s!;3#@b!sRW3N^Fjb7oB_Fzj$! z5Tm3uwaLNz<+n#=)8D--pPgS5IcaHQlm0%7lP90}r2X4Jr`RZ+?Vq`G_K|(HYm4qr z3-iuC(mZeX`(yp)Hai1m9TN&>`^@}AM7PCcYrU)HWB2&i&f52E|IK9hyPk3P{fw1d z(dYWQUR~^7cDBkS%rtLLN59{~rAN+vndtrfMR$6=Zb^Ar+?Uw9yQ*%V+%G4wq5AKf z%&vA-v-G$^`b;j&05k)vc|!}Zx}FU}{0?r&J0{qxDLvC)Y`5-^V6>ZkOFL zy*$|})@Jtt)nz3geooUZ&${=pX2ZMANTW#^b8r2LvAF-uZU$50tP@8{Qg(0#pL3V` zDiQSQ>_R=GEUrUSZoI8tG2g`5N5cN!#0AO6PE|9#QOL+#k-uTjYkR>vyE+##*Bnni zer|nc=FKC=zUEIpT_v#N%MxxGn;NOLrct5=R{K)Zf`hLFyqi?yyZO#X+wU&}O_P21 zzc-oH;K2IlZvN(qk5bdt&vL%_@@ds^bD#Pf3m57&hH){mHXb`4lNRzgCMMqezA=;k z%i~&EuRr|KYrOO&-6l&oan0;%NsHfBi}KYcXR)TVM{G}$TCX#^<6F%Zt^nrnj`04& zfoZSSE}g9XPO5Qn$pm?y$zN(Nbj^5L{NhOIysUL;PNgz$%NAExakQK~tt*0pC|om9GLj>Yx5SK7U<{z+B&x%Zwk z!XhG%bm>L$EL=Ztk)r8b-|RT28Hr5?%SygUSxr~dxRDVqd_+mcu6}XC?nkQy^FL*K ztLLufv0OdR^XqY`Gd5{glsei9T8;>_1#vj3wOoAglVw}`g+RWNV}BmUF1$QnZns(c zrf2DV>~~J>l%BI<=aZDEYp=CdT-Hlm%F*hxWQu}ARRdSRy#8&qw~S^fhYN4(t(llO zHZd*arrUo1 zeEhlGJ=g57@I7fzTHwai(!deG9OA#u+idxyhdZYl-V~X%iBZw#>FRT9*49a%uuRvB zk+q2v@?&mRZLq&ooiN2wtHC9+Z|b$4Ne#SD8W##F@LM#5&r>rz?)Fi6yBFMg~R(x(1fI24*3K z7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O4>2^dGBSs25EiT0&cMJR w39=zLKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_lNOPgg&ebxsLQ0BYQd6#xJL literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/stock_smiley-1.png b/Media/Themes/Umami/Icon/emotes/stock_smiley-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7e57001250292736734545ac84e2fca6931d8062 GIT binary patch literal 1456 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoEy`CDD^ScDs!=wX8x-wi?;&N)79x>}L>I^iw_~F3fPg+`8QzSYvu4eFLv;?^F zxMi$viPp~5%zfD^wtf5Ezj?-wo3n$o%;RecCrv&%^UR<6nZ-uWdH&?LUF%r3%x!aK z_~NyukMhpnEqv^5Efp+}gjFD(ps5_l0K_WzbaR*B5+AB8os=l=13Px~_` z{{JKP+_{&(_RMV1ynScgw(yL)OENC!%|yLT(hOL#te`i-A) z>T%cYbhgiTzh>sLG%Wtjtt8PHIlAH}|Cq?)<`XtNcRH!ehHT*RMD-HSEw`IKl zy5qv+Wa_Kw(a#QiZhCgFu`@vpM)@k5?uZ_xU;T>TR=kFstRgZ_yVb#oV}7R8dqQ#rD>vNzdlZc${E&wC7aTIhH@y zjMZLeO*)$#S5jPmZrh?|!keZnabS}ON@5YR{vgnIJ|gU6YWyL4qku`JHQVHV{q%b6 z)3C$yqjBSjHIWam%-Xf-y0YTu&g!Je3s*6nU(>hC#pi6mwP#t^uE{=bJ-6g^t8uKb ze!S$|R}5+mG7995FsaUXPvynWrae8Y4aEVG*#Arz#y5R#eaf9?}0!6f^f9L-b`^OSpVq$&j+ihJ21_sp<*NBpo#FA92c8tNLD=^C1c7#dj_nZq>*i&boAU|^60 v*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGntDnm{r-UW|BZ`%A literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/stock_smiley-11.png b/Media/Themes/Umami/Icon/emotes/stock_smiley-11.png new file mode 100644 index 0000000000000000000000000000000000000000..04b6cf122032dea102ee96498972949ee0ef4b33 GIT binary patch literal 1490 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}h4>pfi@Lp+W@of@4J;wo{xzWChD&EMZ` zyAZZOL^{hcP(z`7@e~cOEt4cTI$1up9$CSk;Sg`|=}D`&vr`kBzN6Ci45uR;jIBy* zCvJ1l5|7qcx+NgPJAe1xyT$VIF_T#}A2j>dot%EseCE&pM*nBlF#n%DL1<(7`=ZkK z$DZz*(((Il`T5q{*KI#;S*3Y()+^hm3;m`!t(aAED<*tp=@OeguO2_HW;s#M`y=b^ zp&jw&+g(4q>sF>5OJ4Y6Mxm0;Dv6b=B$)TA?8-m!>~i|0*tv7h_Nh)^e>155=RU^W z_o8jwuWw}zUS=aT(;#==d0#Vyn%V_RCmwRH5G+W}cxYKN&-SIPWsOem%xAOA?Q`$c z`X9J=UEJ+XO=0FoZ|&|wKPzXfwf20i`AKb>f>I@itAcUnFa3DstR)veO;4zHeeQ{#}DhpjKx_F*CnjB-leM_RG z_QV&oP6eXZuw&iQ`B0NlXCw3QcCwXPx$_)@8&P%%i7w_UD=_}v$A%!CP#;| zE|$MA=bqb=30Gn+a6F%GxYxqhWtqa#27gsUfkhdQWEL%CDyyk(;_bE#2o{-g{&>-o zH-e1YwB`H7`i}40!Yy!S&PRi*Rji-obB^!6$@|RU(DI;arE`mxuJ$mKe{{7g*<(3- z{)XNcYYb^i9ag$LH7;v|bf&e(X|;>S49U*}<=(r09oX?0Zmu-BK3yUXpu z&xY-~9BVSqr*PZhLtjGvd{nykH%0z@*xB^g2fgC@G!{ z3%9&|byZdMsNLVg=fXASMxT8;zb-MOWCG_>;hC1ZTbgFfFFBUr?Q1(ffB&IPhP)n! zom&2GiTT5P`Kw<~1^cw8GB00vS$xe}SQoqc!QWSrS7g>E7JZN^dnENPfO)Tz00-B# z>Ax?iANr6Wb$m+3LI!*DSa0cRH>R&%`Als8);n)zM#{-o+rIRDD-dkr%<>{LJL%>M zVHQ)4*IbOeCYplVdQE&xPCHf9ecPTgr`Y!1%ekg+v)yeN9gGs!UT)6&%97d>JFT3y~8IEd7H`A_1`1b zr;F{meq0e(bD6YnqocR1xC!TqNz#&Y*KN_8-G0dJ(vzCYOOO20HgAt^V3}~z$&KYl z1A~FoiTNgWX1gt(#ZM3q(ym<<)h00O^^UpDZPn}a6X#jowyUtwzQfCt#(3_oPEe6T zpu!|s=bM(Q+6fGr2^QQQjA{w@&n~)CshWNL{>rC&tn{;;^QvyjeEj{#|B-*Wk)lSF zv}qRu1A}UbYeY#(Vo9o1a#3nxNh*Vpfsui(fu*j2S%{&9m9eRnp_#UUft7*5w9giX zC>nC}Q!>*k8H@}J4RsC7bPdfz42`Ue%;6e@#VWQlFfd4hYzWRzD=AMbN@XZ7FW1Y= f%Pvk%EJ)SMFG`>N&PIxXfq}u()z4*}Q$iB}8eX8T literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/stock_smiley-13.png b/Media/Themes/Umami/Icon/emotes/stock_smiley-13.png new file mode 100644 index 0000000000000000000000000000000000000000..20b81486d1777d49c7f78f481fa9e8cf182e7c45 GIT binary patch literal 1383 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/stock_smiley-2.png b/Media/Themes/Umami/Icon/emotes/stock_smiley-2.png new file mode 100644 index 0000000000000000000000000000000000000000..7e57001250292736734545ac84e2fca6931d8062 GIT binary patch literal 1456 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoEy`CDD^ScDs!=wX8x-wi?;&N)79x>}L>I^iw_~F3fPg+`8QzSYvu4eFLv;?^F zxMi$viPp~5%zfD^wtf5Ezj?-wo3n$o%;RecCrv&%^UR<6nZ-uWdH&?LUF%r3%x!aK z_~NyukMhpnEqv^5Efp+}gjFD(ps5_l0K_WzbaR*B5+AB8os=l=13Px~_` z{{JKP+_{&(_RMV1ynScgw(yL)OENC!%|yLT(hOL#te`i-A) z>T%cYbhgiTzh>sLG%Wtjtt8PHIlAH}|Cq?)<`XtNcRH!ehHT*RMD-HSEw`IKl zy5qv+Wa_Kw(a#QiZhCgFu`@vpM)@k5?uZ_xU;T>TR=kFstRgZ_yVb#oV}7R8dqQ#rD>vNzdlZc${E&wC7aTIhH@y zjMZLeO*)$#S5jPmZrh?|!keZnabS}ON@5YR{vgnIJ|gU6YWyL4qku`JHQVHV{q%b6 z)3C$yqjBSjHIWam%-Xf-y0YTu&g!Je3s*6nU(>hC#pi6mwP#t^uE{=bJ-6g^t8uKb ze!S$|R}5+mG7995FsaUXPvynWrae8Y4aEVG*#Arz#y5R#eaf9?}0!6f^f9L-b`^OSpVq$&j+ihJ21_sp<*NBpo#FA92c8tNLD=^C1c7#dj_nZq>*i&boAU|^60 v*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGntDnm{r-UW|BZ`%A literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/stock_smiley-22.png b/Media/Themes/Umami/Icon/emotes/stock_smiley-22.png new file mode 100644 index 0000000000000000000000000000000000000000..0c87d782bf2974a320e0834eb8512b322aecb4fe GIT binary patch literal 1411 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq z7(Bq(?PRtc0|NtFlDE4H!+#K5uy^@n1_qV{PZ!4!kK=ErMCXLMinQ&&`TLGPx9xIW z-Q{byom$$e6|^yc=Y~la|AG&TBpi8NIt>kfF|a8+I{BDL)gIKyyu$9dG;py~fV0wq zDc#@MSiKfI>EAg0vbCscUG@7&yDtG*yiImLo_MMK|1`UPi&Gi5E54lG_M@*pr=Yqtp?hV@;YnQD0S~Sxzm8%N6j)%Nxncj^$s2OEy|tfu zr{XHxSK}gXgSY3VhDyf&b)K!ca$Wj@&n(C9Rr3YtMC@%XIO(&?&t&uaUf-Ha&wOVs z3;cNW{KtEzrF2&D=#)x-5^7j%Syy`^^4|yM??0aDRP)U3To_|_?t6)%m!O`Wb2O(< ze8+nGx~bdC&6d_l8-1Ulc9mgTm^9y3wQo!_B0r|aO*gqZC1T>roqmb$I}EGqI^WLQ zUZQI``S60=3u27{g8%LaSP3U@@!;~&pKD+9>Q#s2=4VrHwNCWhWgulfZF-CCaqC}e z&6p45p4cVH8n$6uo}zzVu8R7D;3$RtIcAIAdVlqgcUazje20bPvMJ%pQcaBOtCC)q zJ-e=(5_N-X7f&R60)xe&MKS%$%1&lA$?5-GD4^+`xZ@7PnuyJvqSoc*8D1+-fa zDP%fZ==a>ecxG+1*She@)Ve^1;~3@FEQcyUb@KV`wrpT9aGufDnuzu zo%=pV^)Um-%NLe!CQ4k~(b(k7pvMrs`q*aYcWrm&_X+p->}*?iuWr@yogbe0u!+c< z=DBTY_EUGXuGx@l`^ci>@q>@QIG^sYxGDMcz{UI*^6wTu-edi)BWunL*K%pEIJ2o! z&gpKd<+uB%qrYcc^QTQ5+t00Es1xK3pm(ME?^K0fKRz*0S?2FI_g&T1k`lWbIws6F?_6|9 zV5@mZPF?w82WmGrMSbv{d-UM> zvWtZWCvPyEH*ZC{UrfgP?YF(1=S|klO@F6#ntzveUd$Q+$2BHalU=sBRW?<8^7=6S zzR%}>cQ@_LEI(8fQN6=-_qL2jR8|~DDl;|6C&mLp0*c_9} zYIHNP*Ln7TtA7l$CX2JLYWwqofq_A_#5JNMC9x#cD!C{%u_Tqj$iT=z*T7QOz%0bj z!phjx%Fs;Pz`)ADVA^L3Llh0U`6-!cl?+A(hK9NZX1a#vA%;d)M&@u0!eSNM85kHO wK{f>ErFVdQ&MBb@0GJPNP5=M^ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/stock_smiley-3.png b/Media/Themes/Umami/Icon/emotes/stock_smiley-3.png new file mode 100644 index 0000000000000000000000000000000000000000..a70c0bea1e8da032bb87bc5d14232fe4be3ddb9e GIT binary patch literal 1461 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoElRRA+@ZHaUl0K?56s!;3#@b!sRW3N^Fjb7oB_Fzj$! z5Tm3uwaLNz<+n#=)8D--pPgS5IcaHQlm0%7lP90}r2X4Jr`RZ+?Vq`G_K|(HYm4qr z3-iuC(mZeX`(yp)Hai1m9TN&>`^@}AM7PCcYrU)HWB2&i&f52E|IK9hyPk3P{fw1d z(dYWQUR~^7cDBkS%rtLLN59{~rAN+vndtrfMR$6=Zb^Ar+?Uw9yQ*%V+%G4wq5AKf z%&vA-v-G$^`b;j&05k)vc|!}Zx}FU}{0?r&J0{qxDLvC)Y`5-^V6>ZkOFL zy*$|})@Jtt)nz3geooUZ&${=pX2ZMANTW#^b8r2LvAF-uZU$50tP@8{Qg(0#pL3V` zDiQSQ>_R=GEUrUSZoI8tG2g`5N5cN!#0AO6PE|9#QOL+#k-uTjYkR>vyE+##*Bnni zer|nc=FKC=zUEIpT_v#N%MxxGn;NOLrct5=R{K)Zf`hLFyqi?yyZO#X+wU&}O_P21 zzc-oH;K2IlZvN(qk5bdt&vL%_@@ds^bD#Pf3m57&hH){mHXb`4lNRzgCMMqezA=;k z%i~&EuRr|KYrOO&-6l&oan0;%NsHfBi}KYcXR)TVM{G}$TCX#^<6F%Zt^nrnj`04& zfoZSSE}g9XPO5Qn$pm?y$zN(Nbj^5L{NhOIysUL;PNgz$%NAExakQK~tt*0pC|om9GLj>Yx5SK7U<{z+B&x%Zwk z!XhG%bm>L$EL=Ztk)r8b-|RT28Hr5?%SygUSxr~dxRDVqd_+mcu6}XC?nkQy^FL*K ztLLufv0OdR^XqY`Gd5{glsei9T8;>_1#vj3wOoAglVw}`g+RWNV}BmUF1$QnZns(c zrf2DV>~~J>l%BI<=aZDEYp=CdT-Hlm%F*hxWQu}ARRdSRy#8&qw~S^fhYN4(t(llO zHZd*arrUo1 zeEhlGJ=g57@I7fzTHwai(!deG9OA#u+idxyhdZYl-V~X%iBZw#>FRT9*49a%uuRvB zk+q2v@?&mRZLq&ooiN2wtHC9+Z|b$4Ne#SD8W##F@LM#5&r>rz?)Fi6yBFMg~R(x(1fI24*3K z7FNclR)%KU1_o9J2Gc%U7@}y%%}>cpt7I@TFf`OPFw-?O4>2^dGBSs25EiT0&cMJR w39=zLKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_lNOPgg&ebxsLQ0BYQd6#xJL literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/stock_smiley-4.png b/Media/Themes/Umami/Icon/emotes/stock_smiley-4.png new file mode 100644 index 0000000000000000000000000000000000000000..e5f4d021da677344eafde3f61817215aa1314d2b GIT binary patch literal 1468 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 Uzq65IU|?YIboFyt=akR{04l4ONdN!< literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/stock_smiley-6.png b/Media/Themes/Umami/Icon/emotes/stock_smiley-6.png new file mode 100644 index 0000000000000000000000000000000000000000..d4d676e21c2aacf86d871b02ab99be4599a14e97 GIT binary patch literal 1455 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoEJ)SO(As)w{PV>&0>MC-){&Vg9+Hd=! zer*uB(8k52^fZ)XMu0#sOJitrr_>{+WEW+}l=MT#I#hNj2_}i~cHPPdaZ+${5pZo4 zQ&HHmrFB}g_JwKNw(s43KRfMC%;ccTorRB8)F&Iy{Q2ML`I9-4KkoCa75w_OH0|%R zT??*tRNIzc@0HK3DOs5*sjU;N8#IGIQ_;u!_w*$ubzipHeYtb{xSjZd|E3Aof87ev zc(F%ZUuJX8t2Hk#hE%p{NCdZ;`M%kgXLNntt7Vtdi(_AwOn(1r*VfzqG5gXFth+9D zW-AY0Ncj1l@UziEQ=EG{9P}eBw*+vAGS57sHN*W^%wnsW7a8YD=WNw~pYh|(x`toV zvy#hh3c&1B>Y2Ix;o#m5{ zPru@}G%P;vUd`rbzUR)BeomkHFyii%S?W$VkCh)3s<~}&;_~adM+X-2wInL=G%vPa z68ZO#;6BSL=ERvd&dM7nUg9xax9E}MRjcH)xs2O_woVn+YQ8u1@rr}?hFg+ut7oR! z&q+Bw?XiMw%eRX3+xlnb#hsXKeVd_on&q5pf6uI0*C%l))-dR@)XN|9cJEm6!|wF^ zJO|CzNnOqPp-G`rHf7eDruBa7YZBGSL%H?le|52MO5~_RTYw6is#(7tY zAE`e6c+2kTm2--0mn7E&h=;A2nV{uS;Ul4XaA)G<^q4z}@~PUBgqzP)UR1W*F5@1R zIy=m-FaPdsn;-lQ%3Du;i&uX6bAf|il*@~m>5}0wXKsXaHN0QE^hlT6%hOMHR6OOn z&i_XJ-VXk^*;hU=YA?%-pi4+gM&swdx6nCGXnpE5w~0 zt_bSfrG=&-%0bxw50z%hx;!5A(YDD^ScDs!=wX8x-wi?;&N)79x>}L>I^iw_~F3fPg+`8QzSYvu4eFLv;?^F zxMi$viPp~5%zfD^wtf5Ezj?-wo3n$o%;RecCrv&%^UR<6nZ-uWdH&?LUF%r3%x!aK z_~NyukMhpnEqv^5Efp+}gjFD(ps5_l0K_WzbaR*B5+AB8os=l=13Px~_` z{{JKP+_{&(_RMV1ynScgw(yL)OENC!%|yLT(hOL#te`i-A) z>T%cYbhgiTzh>sLG%Wtjtt8PHIlAH}|Cq?)<`XtNcRH!ehHT*RMD-HSEw`IKl zy5qv+Wa_Kw(a#QiZhCgFu`@vpM)@k5?uZ_xU;T>TR=kFstRgZ_yVb#oV}7R8dqQ#rD>vNzdlZc${E&wC7aTIhH@y zjMZLeO*)$#S5jPmZrh?|!keZnabS}ON@5YR{vgnIJ|gU6YWyL4qku`JHQVHV{q%b6 z)3C$yqjBSjHIWam%-Xf-y0YTu&g!Je3s*6nU(>hC#pi6mwP#t^uE{=bJ-6g^t8uKb ze!S$|R}5+mG7995FsaUXPvynWrae8Y4aEVG*#Arz#y5R#eaf9?}0!6f^f9L-b`^OSpVq$&j+ihJ21_sp<*NBpo#FA92c8tNLD=^C1c7#dj_nZq>*i&boAU|^60 v*$|wcR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGntDnm{r-UW|BZ`%A literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/emotes/stock_smiley-8.png b/Media/Themes/Umami/Icon/emotes/stock_smiley-8.png new file mode 100644 index 0000000000000000000000000000000000000000..eb58a7beaebf64b836b3639f5579bb321c9ae13a GIT binary patch literal 1438 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE)t)YnAs)w{PV>&0>MGGT|L1f2?ce5H zwr&sN$_&y>nBv63BcaREE5R)-9p(|ULD08nQD+;gcdE8l))a}3>8m;eKe##Ywy|hP z96B0yt0+@bH`n&<%bkC=&nztV;k&_vEn>#lv z=kPqr`+m3Zq5Ez5DD~Xccc=Xl?2XB2nXrxX*VIjQygim%e)cY&&uQ>qYQy)|ZKphL z)Y=DzZm#>d>GvtE*U~PPzFf+xepOS>oY?U4-`kwJjD!W&AAF8qyQ{8u*EHe1_v&f4 z#qMw2rsr$2K1Mq1W^l&^iyM_a7dT|uLmOlFO=>J&{$--`{wKEA@BX?oZ=L^pju$oC zbl{6UT|IyM_wUN5glBA0QPH~b@tJGcp6lJ$ zw~ODFeR6SYZtAHQ`sMHTM1EfOWGcP-cV^Q=Svt|q@&`8vYw@oqcw zV={fRyBSWoOUQ3I{=s9OJYRWY&%qTodGELDhUUau5%AgmRT&4!Fo$z$?p|;alPU*M2(qhQsq3Zm_GVm%XG_O zfkD)!)MVkW#iuSNUl&yDydbzOH_k_K?!g~?Zkb^q-+-Eqoq@1}*S8(+Vkx3Zog zCbc9lsfEj)Vey4|{j+90*t&exL_uy_tF8^YEfa0-im7@$=e%ThjN5?m#UYhG`Hmjx ziiSmd=UTlwt#=Ha62w9@U(uCzBPwn~$ZR78f9 ziA*Dxc(qOc=TBblGIi&7#;?=*r=Q(kd?G_aaPvkbv#?6j zpj#48n_e&AV%_q%v9mB?fsTch#H(LFo@=kxFtq<2b|B=~?RUrCe0zNOnoY3s3PG;> z?Kulh{JtI_wJ6as^~xe1=NtSM)Ab6T6x}JDFnh<*$mPb?8#8?`{|!7@Zu&6h>EY7H z8+RJIhH~UYHwYx~L`nYp!g8Nq_3!1!oX5Z3EP8O{fq8>gYe(i8f2NC(o0V2xJ-cR#FlUCkbdp|Rri5OL>t*I;7bhnc ar0V4trO$q6BgMeLz~JfX=d#Wzp$P!X)O}9? literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/application-certificate.png b/Media/Themes/Umami/Icon/mimetypes/application-certificate.png new file mode 100644 index 0000000000000000000000000000000000000000..f09c9ec2ac0b94c791fc02215de5aff79611dda8 GIT binary patch literal 1440 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/application-vnd.ms-word.document.macroEnabled.12.png b/Media/Themes/Umami/Icon/mimetypes/application-vnd.ms-word.document.macroEnabled.12.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eE8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UCk6O~xH6yuIXO8V9v%h;261t5Sy|bDfB*#r1qKENB_$;W1_o7C zRV^(o1_lOQU0sM^enBp(0Svi$*(s?>DXB?O(UF;1>9MiVq2a-y;lcR@xmnp68JX!R zsY&q(agovCFJ3&4j*aZ-YQ1>z!u$pE^9ynpEnbwDpOasZd+5-iMT-|roi??xsj;`W zXT{3pAVZq>hqWJzw6snMt<8yK&o9U=?A}st$5ZDV(caP4(bd{%Zr+`pyS%A+^`d!e z6csmY*sw7vY3J>_U44Cr4jnvn_~7Bj#=~7*M~)mkx_R@lV@Ho2KYC{S_KO!UTn`Mq zdGX?{t5@%Md*8Wo<<6ZucY}lPPA<8B@7{wucOKlk_u&5h2M-=Rdi3b=qeqV)KYsG$ z${3tB^m74k|JNr+5{{Mo4|NsBLJ3o6F z0|SFaNswPK10xeN8yhtkASeSsF;|zgrt2F4_BcNc~ZR#^`Q21XH27sn8d;N*k@ye2vZ4N4J* z7TNId&WLVM-C|Ix;drL#Tu-NePmhO>m#4S?`4cD3l%zFys<5}1o4fv0Px<}x*Dp4) zgQ}mLq@$!(cNOp1w8_ZGsOa=Vp{I6VOP9V2o7N{FYs%4?(SO4tzgl|xqCI!^{Bde= z$qt*)-Mn^dcA95GLPBMvw$q|D3i_soTNT!?Sh8fz8W~R|2|gz+ZLNtarzSe`mdRe- zy46D{gF$WK+a9(pk^v2yW*RYzDXe<*By)MYt5e+NbLaf-3xrOX=ol4x+^^UFtl#y9 ziGqsfjwmJPq%2p{&{>g|o}_j95Rdrtzzv&&g@vb2ni8;m^W?{g51URJY~D~<@VSeF z^TX!iO-9Cs4_Fy4X=X__gqoOu5_gGfL`h0wNvc(HQEFmIDua=Mk%6v(rLKWlh@pj* zv8k1znYMv}m4U&u&lZL#8glbfGSeymdKI;Vst0Qp0sg#Z8m literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.template.png b/Media/Themes/Umami/Icon/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.template.png new file mode 100644 index 0000000000000000000000000000000000000000..fe81b20af68ae28a9177a11f42988732b3dbd7bc GIT binary patch literal 1296 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoELY^*;As)w%hUVr3r;6D9U9weHblC;3 zU3|xnT`N6gWggynyQfg9^oYD#+Ds#t8(lmG|C9@bl%+fV34C*RxOhZDS+;Aoq2Z!O z?6bKWTU^4f>n(YEBkC@@R`%|1_wGI3nZJGA+`Y2(J^4lNs^92?zjwU8yty-H_S8qtEcT_3YCrt04eCqK`@Q*l;=aYj zS1;MxU)x`}d7j{ktFI>Sz7?M{nL+&0ffm&VJ$n|j9N6~w>ruh1{dEN!^h6IHm#@84 z_ar0y_O|D74IU~?Ts!Aviub!QR?3Axd8&9KMI&5e#biZEWuf~=>%PQFv+T2W|Dik~ zd`0usR@s?CsTs>c4&9h(TyXt?f{3_C$FIio&krZ~^3IBm3Rrx7@p0>>hM5y*NY87V zeZ4xOr(?!k2bTFeszg^cJ4PgKWDw_b){!}O)l2kQtV~1vpSm?KUmbeHtE$1_)Rpi> zx}met?!p?yFsaV}vZwqUb~Z?Emu8uyB*o>(Q(^JHLV4FQZ^54u(_$?e`6uXz9BjI$ z8ScB)*TDFe@~-*wy6U}4@{^Tou3ll8T4wEVxGLi1hljh0vp-y$s*ji3?jZNQ_0Fw7Q5<}8*jFtx`e}4v+4OG~(Y$3T}wKYnTjFtKY6W3S@oSb4^{Ehtv;Qjr*KWooR+dnt?DHiZ@%YvP^86L$y>eqJGVLw$;uyMh$XGz*8 zPy41gJXkOAL)@h9_?}HNwbfDE^Jjmps59>Rtu#@CdB*H-lNs-D>HIU=?5a?w{iSMe z&z>oPe;3Z59pjj+_3N4N6^lOaioN%C+{{U9)feDU_%r{lyvur?O$&sS4H+01R7+eV zN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1ywm{X8o1c=IR>@#w oU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kPfq{X+)78&qol`;+06ecuApigX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.sheet.png b/Media/Themes/Umami/Icon/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..1c7bc745d6965403174e35e917e57bbf5b41e329 GIT binary patch literal 1178 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 bBXcW5bBKnmiN(we3=9mOu6{1-oD!M<4VZ7p literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.document.png b/Media/Themes/Umami/Icon/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.document.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eE| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_D?D8sLp+Y(o#LAjlPc0S|Ff^rGxq33 zWskOqczH)3y`p9Mf4_q0m9UsyAqVG5i$8YaP>k;oPVo)XQjM*{pjAzGbX~@o7#WQcwcv?`rhZd_tkuV^dEJq`^Wh$6MFUL zRe;gdfNJ;K$6nkx5tRIR=9eQ!exw{;xx8-fE=$vrFE=jEfA;Lseb-mY@$1*Ft&`(x zx1W4P{QcVCnWF3l4Jld+pDmk~bVf9RF@h&-=U=7`8ELCO-m@~@^OG?{{ooPt_m}@Z z+!V@iB*~ENvG~lHGXph5j698a&ZM+4L?-4l96EEK)$sS}?H!(Sc0s3=-S6qm31|57 z^($jS9fQV1nIJ<|9!a%7R;(2wS8H}W51qDLzkz*{7vm?MGd(sA(b??heA3idJLec5 zV5$4MNw(qkboLcp9Gqs?jjD}KFn>6CzW$lL-aq~A3?19%q`!Q|I-zUnjk5Kj? zb02cgl>Gi|{mI*ZW(%?TJ`d!3!um>t`ACu>!z}6O4!6Y#Y7MPZt!jH$a7F&-;B6syoWhe3+S7IZaOC zxs3dN!5uG7@wcpU+}C@`I3qVxS*Ww3o142UzN^~p!rnIbx|APxeg0X_fAP^+fAZd6 znjG8SuYb4J(QLNsf_LZg4B9t4T{UuUn`|k}b}oid!T6K1nBGC1^^NhWUGY7qn-tsa z@1!U&T|961zv)vff5D2srO$%izg-dB=jfPXyvw>e<=LNAb59n`a6UI@PO+ASUdNZE z`Wq+QKe}`6{!`^f)<2AjEz*siKRHv7R`iU?pygrY#SN?Lzo|a?dHCGzUE%W_Yin)a z^gLv5mr0$+{d_yy{zaR<8HBQbOLon-Zus}_UrKnn`pSnYb7N&i7bh$Ko;_Qdzt{gy z*{3hY{`TgkrHh{*>3sbBQt`{{i`WKd5o i8k&a~8d({cTN#=|G;B>QW@cbuVDNPHb6Mw<&;$T9EEzoj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/application-x-executable.png b/Media/Themes/Umami/Icon/mimetypes/application-x-executable.png new file mode 100644 index 0000000000000000000000000000000000000000..9843f26fe3ba8d9bfcf2540ced3fee6e8a11c9ba GIT binary patch literal 1198 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_8$4YcLp+XOoq9T7I#lG?{_5v_>2H2S zt~zplM&+z(0XmD7s8Qacb(()uKX9O1V=e zgq*s(_VpFNzdgd$k8aHDj5pRX%Jc0AR#s8zD=B>+bN0`^_j7(rJoqoS9(W&VNnJ@f8XJpMY_s9}lS_xG%?K779?H*MFQxZf8(+FkxRv2mJf zhV}>T>1|6J&Ohfk7QRu$`|0C+qK8eU1KKWViB9i1z*=1 z&){7@J6_J_SBT&)`9HUwZoZ`0e}3bfIQGXD27OJ1GIet~9UoNcEZ=r!{k)gA!&}Un z_uE@3{j`m9H<`@5SfnSY;ErGYyQRqj6>N>^2GMVyWiNg{HBG5R{|Ec~9*?DNUcP^M=Dk?v8HLJ^XB+oie_6ODPoyj+_}7x< z){%dV|@< z0-1J(uqrY*Bp4NRs1>ca7Bc6}+aqBsn{L;)C`w6aC@yG8FqOO*W|XSD<<&~7DXaN~ z9)4W({DgMA?!E5XNoSuvX}Ev7T}krCoU%1XHmwK?J#*jx&;f}xV#+3>5wY40&n-U4 zwEI}CI@@}UOuTAXp5|BM_IZfT?#TCfB!tkJjwfr~CT zg>eJZ2Ihhjtvx$tR)2~1w5VAa3AYZ6f#VMS9jGWZkhk&4P>)UxG3iv~~qc9++nL{r>U!O08W9M%~vq85kH;OI#yL zQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=IR>@#w oU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kPfq{X+)78&qol`;+0QzYb`2YX_ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/ascii.png b/Media/Themes/Umami/Icon/mimetypes/ascii.png new file mode 100644 index 0000000000000000000000000000000000000000..37dcf9ed9fe6a41addbcf5515eebdbc90e6bf649 GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UmInBQxH6CkvU4)qJ6k%sTH89BJGxreu3xim{n~BYwr$_O{m`L9 z_wL=hfB*i22M-=TeE8_mqsNaQKY8-x>C>mro;`d1{P~L)FJ8WU`RdiH*RNl{dGqG& z+qduDy?g)u{f7@9K7Rc8>C>mrpFe;3^5yH-uiw6X`~Lm=j~_pN{`~p>|9_8$f{|XnL9W-ySgPcH8lrxoZi5|z`&T~?e1dczQ5xl0|UcBPZ!4! zjo_*Mr}GXu@VK7;%Az=R*#!>8Yk&TmZ+s;dC@0EfSSUVI#aK}KU0%&GJF`8~jJ>{H zA2~!5c5~ji%=m*-PqFcUIgi7m#$E5Zmot3kN^-r_=dit6s3wZ%bB-F)z_xV z8gGb@fAuBgrA3dd@52ed`W*J@IT?A*T2meS>Q4Wy35~ygha{^pwV0Lvd1X}cr0795 zo5!+6%oAm9f8t9}HJ<4+Z~bipx5bCQPpRa)K4Yfl37e{%X#dM`&*h!iw8Rr!_r7Fc zU{Eb_jVMV;EJ?LWE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|W tN@iLmgOP!up{{|MuAzB|p^=r5xs{| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_j-D=#As)xyPCcJJ$5rCE{rNqg_wBy9 zCUe%B%v+0`0wyfukc$#vZJyMuz~MF3Hsphl%LlcJ-ugy!#}7)Z{LdD-3Unm|s;~!g z`U(a%wYI!bn?1w#+jDDsIsUxc3CSL>4tDd~*f1NP|2*@(u`$n|{Qp}|?$@+FP4);OTa?`he7^P~Q;IpW6N*h7DZ{I079ULqb_geof{# zuixsmcWb)K(&zHqRppnbFE184 zAhT7pbxjL*^^bF*3s42~Jy4aBrFtuWhaezqk#iYZsvxH3*+&aG5F-Tmz$Ncfa zYT2ub5*v?)Ens9kJE>qt(+fvdd6$0Hj*H9_-W_!=b~+PyWXa0k&z<*`bgHbKQ>DT( zHDjya9_9;WL1r6@)8C%4`S#1^-#fQE3a9oqyt?z_vDsF6_x1i!v%hF3Ki+ctt&ZFB z4ra$(A>Yz>KB}INb}L2onifCn-EREV@W+)|F{UXCq`ojXOuDgtxtzAIO=;mZ8ym~X z-#*LU+H1A-*!PmE*+&G9%*rsRu`(_F_VW3>+N<;C&RI6!Jav8S=`izs2Y;&Ft3JsW zB%qv}{CH(#zRsqrdpvvio?BNu-?{P1yA{W#>hQeG9a|!C zGUDf2!C#enbN6iKp74f!&i;sXSFe4#X`=l0tJNDb>pM{|ztzX(JzYC3KH^tc{LZqq z6X)*_n05DNUZ`Ksl*G6Tg1d)IRmLKNq{_oDj!^qEPBP();NvipyZNqH=V~-to?N}cv z{EIDQ6Zy7xIfKOk{-pOS-oM%R*8igW>g4%Wbwvye45}rr5hW>!C8<`)MX8A;sSHL2 zMh3bDmbwOJA%+%K#->(=X4(b@Rt5&sK3f=~Xvob^$xN$cFfuSS)HN{EH8c+~G_o=> zw=y(`XxN%q%*?>RAPKS|I6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#WDFy}x22WQ% Jmvv4FO#r(M-}3+f literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/binary.png b/Media/Themes/Umami/Icon/mimetypes/binary.png new file mode 100644 index 0000000000000000000000000000000000000000..9843f26fe3ba8d9bfcf2540ced3fee6e8a11c9ba GIT binary patch literal 1198 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_8$4YcLp+XOoq9T7I#lG?{_5v_>2H2S zt~zplM&+z(0XmD7s8Qacb(()uKX9O1V=e zgq*s(_VpFNzdgd$k8aHDj5pRX%Jc0AR#s8zD=B>+bN0`^_j7(rJoqoS9(W&VNnJ@f8XJpMY_s9}lS_xG%?K779?H*MFQxZf8(+FkxRv2mJf zhV}>T>1|6J&Ohfk7QRu$`|0C+qK8eU1KKWViB9i1z*=1 z&){7@J6_J_SBT&)`9HUwZoZ`0e}3bfIQGXD27OJ1GIet~9UoNcEZ=r!{k)gA!&}Un z_uE@3{j`m9H<`@5SfnSY;ErGYyQRqj6>N>^2GMVyWiNg{HBG5R{|Ec~9*?DNUcP^M=Dk?v8HLJ^XB+oie_6ODPoyj+_}7x< z){%dV|@< z0-1J(uqrY*Bp4NRs1>ca7Bc6}+aqBsn{L;)C`w6aC@yG8FqOO*W|XSD<<&~7DXaN~ z9)4W({DgMA?!E5XNoSuvX}Ev7T}krCoU%1XHmwK?J#*jx&;f}xV#+3>5wY40&n-U4 zwEI}CI@@}UOuTAXp5|BM_IZfT?#TCfB!tkJjwfr~CT zg>eJZ2Ihhjtvx$tR)2~1w5VAa3AYZ6f#VMS9jGWZkhk&4P>)UxG3iv~~qc9++nL{r>U!O08W9M%~vq85kH;OI#yL zQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=IR>@#w oU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kPfq{X+)78&qol`;+0QzYb`2YX_ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/contents2.png b/Media/Themes/Umami/Icon/mimetypes/contents2.png new file mode 100644 index 0000000000000000000000000000000000000000..6d75399eef3e4637e5c3fc96c017b85f7ab45e28 GIT binary patch literal 1019 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}hae?46sLp+XeopL@~CRO6N{d;R`YvbLU z?Khn*Gu$nb6?&mrl%>1gY2hLTrzr}L7Jhx_YP0%+_xVN3S50}b_QlceD2<30OQ&q( zTurH0%E1%DO{&5C40`jcda=imIu|9u zYyY;G^F-{dF5Oq$UMc#~^|6V#5JSSl-s1Jg3fH8Hv|Q0<4KuSU`TH>BqIs4pgVxvU zH*@1{`7;@&rF!!Ix%#z`tIWxvjjMcf@7~+aE{2H*k7b_|+SRIjkh39oc0-y0&!pBM zLF4_l3*y&5GVN~`xDnew^D1wd-&T&;bSsB@r-a=LPo2E`>cafB0%AFRy6YG6b_%vs zoPE4wc5c}`YePW=VTQ{t#VfWltbV;YTr)84{;~XPFR!mY(sr=mnCkuNkj0aJTTic# zeR%mj*G&dRmIc8q${d}(%$w~KA~b~})e6rsuteDug)NbGnw06;WTxWensNBR4epI) z)f{U#{`_s)ihlpnKCsv4 zz`>ZzBlG>4|3!!U=iA<#p7ze+uY7Q`aB=81v-dA`vzh`QcdS{vbGzN2qKjMR zm@l`R&$Ii}%|oXT7+tXE5qR8l%7OcY{l;G}GHeofZ_J*u$53qg<=1v5ye@#wU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kPfq{X+)78&q Iol`;+07^%@>Hq)$ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/deb.png b/Media/Themes/Umami/Icon/mimetypes/deb.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/document.png b/Media/Themes/Umami/Icon/mimetypes/document.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eE8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UmInBQxH6CkvU4)qJ6k%sTH89BJGxreu3xim{n~BYwr$_O{m`L9 z_wL=hfB*i22M-=TeE8_mqsNaQKY8-x>C>mro;`d1{P~L)FJ8WU`RdiH*RNl{dGqG& z+qduDy?g)u{f7@9K7Rc8>C>mrpFe;3^5yH-uiw6X`~Lm=j~_pN{`~p>|9_8$f{|XnL9W-ySgPcH8lrxoZi5|z`&T~?e1dczQ5xl0|UcBPZ!4! zjo_*Mr}GXu@VK7;%Az=R*#!>8Yk&TmZ+s;dC@0EfSSUVI#aK}KU0%&GJF`8~jJ>{H zA2~!5c5~ji%=m*-PqFcUIgi7m#$E5Zmot3kN^-r_=dit6s3wZ%bB-F)z_xV z8gGb@fAuBgrA3dd@52ed`W*J@IT?A*T2meS>Q4Wy35~ygha{^pwV0Lvd1X}cr0795 zo5!+6%oAm9f8t9}HJ<4+Z~bipx5bCQPpRa)K4Yfl37e{%X#dM`&*h!iw8Rr!_r7Fc zU{Eb_jVMV;EJ?LWE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|W tN@iLmgOP!up{{|MuAzB|p^=r5xs{| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_8$4YcLp+XOoq9T7I#lG?{_5v_>2H2S zt~zplM&+z(0XmD7s8Qacb(()uKX9O1V=e zgq*s(_VpFNzdgd$k8aHDj5pRX%Jc0AR#s8zD=B>+bN0`^_j7(rJoqoS9(W&VNnJ@f8XJpMY_s9}lS_xG%?K779?H*MFQxZf8(+FkxRv2mJf zhV}>T>1|6J&Ohfk7QRu$`|0C+qK8eU1KKWViB9i1z*=1 z&){7@J6_J_SBT&)`9HUwZoZ`0e}3bfIQGXD27OJ1GIet~9UoNcEZ=r!{k)gA!&}Un z_uE@3{j`m9H<`@5SfnSY;ErGYyQRqj6>N>^2GMVyWiNg{HBG5R{|Ec~9*?DNUcP^M=Dk?v8HLJ^XB+oie_6ODPoyj+_}7x< z){%dV|@< z0-1J(uqrY*Bp4NRs1>ca7Bc6}+aqBsn{L;)C`w6aC@yG8FqOO*W|XSD<<&~7DXaN~ z9)4W({DgMA?!E5XNoSuvX}Ev7T}krCoU%1XHmwK?J#*jx&;f}xV#+3>5wY40&n-U4 zwEI}CI@@}UOuTAXp5|BM_IZfT?#TCfB!tkJjwfr~CT zg>eJZ2Ihhjtvx$tR)2~1w5VAa3AYZ6f#VMS9jGWZkhk&4P>)UxG3iv~~qc9++nL{r>U!O08W9M%~vq85kH;OI#yL zQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=IR>@#w oU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kPfq{X+)78&qol`;+0QzYb`2YX_ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/folder_tar.png b/Media/Themes/Umami/Icon/mimetypes/folder_tar.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/font-x-generic.png b/Media/Themes/Umami/Icon/mimetypes/font-x-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc4303ee25be3648276debb9e0b71f47d2cecc5 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{oo-U3d9>=#%y`3ErE^@5Cdfi1IA>&yQ zx{YFsYcu0(Uc@9Fd=%`xG$H=W`4u--{LtxG`t6f_$J7f!AsTC&&Yn@3+?4sYJ4ka@ zic|5-iz|u?&)xhz=W2V&F-zmgXFM*mwr_p#=5Ouq-`A{uANVh`DlF#LtIyioa^>%H zT?jDv^7f>^y>+1aj)IRh5-a-VTkTd|{_odp?}%+zi_`whd72%vXo`~YRJIQ(f{JrJ zAMWCN>BE)Gv+|2d)NP+-bqBZUss(S~xF&0{KG%WkXX-NE?5z?LJT|HQ-`V62j?Rin z)!pY;xP4P*>a1WARQ&d?Dz8th>DI~YZr3Fb86WSsGb1)}VE|*?zSURH3T7;S@RZHQ zl;h=ZRypz99y8tt6|eL}wlsBfoYykr|EDMP>ENX(*4q}do3^V)e4n*VtL{(jROR

A2y7St&6X6?j+RfXy8{d(4l6GDfkXJl`kLBc%2<9KV-ml{@ zPn-Vp!vh1QL-S-4x0Ib&8r#YTL#->vNmn*R`X9^ZnL@mbH6CxKEng= zWNlr3JMp+Rz3I(U772LrNp;Py9ha^x5@Y=sv8is+pW^P_{MRjN-{}6avnhKc$1%A+ zC@pd8k$tv*@A?OprAY}M6y0HCdH&({@~sWs2LkFPa%JRnMQ5w6V|KI=b9b4sFFqk} zsm~jSElVdV9Xhv9Aj;b2gl+9seqHOys=w14SHG-`3(2kfmCJeBY~Hf?)8~qd%LK2N z{;VvUD8KC44UJo05@H>5>Zcr&TyJV5^QF+l?vVS&iM+M76>sU2xc$Xy zoy&pV9Zu^V)(hR#Q({~?MR2JWm!|d~(Wl|6`}-%|f3L4Se|>~b2-o7p>+R>ynDOGx z!}{KOhHFUyC)BMUg0hEdiEBhjN@7W>RdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$ro zfq|8Q!L-j7h71f02o1UUDVb@N3`PcqhPno3x`yT>t*I;7bhncr0V4trO$q6BgMeLz~JfX=d#Wzp$Pytug_rs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/font.png b/Media/Themes/Umami/Icon/mimetypes/font.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc4303ee25be3648276debb9e0b71f47d2cecc5 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{oo-U3d9>=#%y`3ErE^@5Cdfi1IA>&yQ zx{YFsYcu0(Uc@9Fd=%`xG$H=W`4u--{LtxG`t6f_$J7f!AsTC&&Yn@3+?4sYJ4ka@ zic|5-iz|u?&)xhz=W2V&F-zmgXFM*mwr_p#=5Ouq-`A{uANVh`DlF#LtIyioa^>%H zT?jDv^7f>^y>+1aj)IRh5-a-VTkTd|{_odp?}%+zi_`whd72%vXo`~YRJIQ(f{JrJ zAMWCN>BE)Gv+|2d)NP+-bqBZUss(S~xF&0{KG%WkXX-NE?5z?LJT|HQ-`V62j?Rin z)!pY;xP4P*>a1WARQ&d?Dz8th>DI~YZr3Fb86WSsGb1)}VE|*?zSURH3T7;S@RZHQ zl;h=ZRypz99y8tt6|eL}wlsBfoYykr|EDMP>ENX(*4q}do3^V)e4n*VtL{(jROR

A2y7St&6X6?j+RfXy8{d(4l6GDfkXJl`kLBc%2<9KV-ml{@ zPn-Vp!vh1QL-S-4x0Ib&8r#YTL#->vNmn*R`X9^ZnL@mbH6CxKEng= zWNlr3JMp+Rz3I(U772LrNp;Py9ha^x5@Y=sv8is+pW^P_{MRjN-{}6avnhKc$1%A+ zC@pd8k$tv*@A?OprAY}M6y0HCdH&({@~sWs2LkFPa%JRnMQ5w6V|KI=b9b4sFFqk} zsm~jSElVdV9Xhv9Aj;b2gl+9seqHOys=w14SHG-`3(2kfmCJeBY~Hf?)8~qd%LK2N z{;VvUD8KC44UJo05@H>5>Zcr&TyJV5^QF+l?vVS&iM+M76>sU2xc$Xy zoy&pV9Zu^V)(hR#Q({~?MR2JWm!|d~(Wl|6`}-%|f3L4Se|>~b2-o7p>+R>ynDOGx z!}{KOhHFUyC)BMUg0hEdiEBhjN@7W>RdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$ro zfq|8Q!L-j7h71f02o1UUDVb@N3`PcqhPno3x`yT>t*I;7bhncr0V4trO$q6BgMeLz~JfX=d#Wzp$Pytug_rs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/font_bitmap.png b/Media/Themes/Umami/Icon/mimetypes/font_bitmap.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc4303ee25be3648276debb9e0b71f47d2cecc5 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{oo-U3d9>=#%y`3ErE^@5Cdfi1IA>&yQ zx{YFsYcu0(Uc@9Fd=%`xG$H=W`4u--{LtxG`t6f_$J7f!AsTC&&Yn@3+?4sYJ4ka@ zic|5-iz|u?&)xhz=W2V&F-zmgXFM*mwr_p#=5Ouq-`A{uANVh`DlF#LtIyioa^>%H zT?jDv^7f>^y>+1aj)IRh5-a-VTkTd|{_odp?}%+zi_`whd72%vXo`~YRJIQ(f{JrJ zAMWCN>BE)Gv+|2d)NP+-bqBZUss(S~xF&0{KG%WkXX-NE?5z?LJT|HQ-`V62j?Rin z)!pY;xP4P*>a1WARQ&d?Dz8th>DI~YZr3Fb86WSsGb1)}VE|*?zSURH3T7;S@RZHQ zl;h=ZRypz99y8tt6|eL}wlsBfoYykr|EDMP>ENX(*4q}do3^V)e4n*VtL{(jROR

A2y7St&6X6?j+RfXy8{d(4l6GDfkXJl`kLBc%2<9KV-ml{@ zPn-Vp!vh1QL-S-4x0Ib&8r#YTL#->vNmn*R`X9^ZnL@mbH6CxKEng= zWNlr3JMp+Rz3I(U772LrNp;Py9ha^x5@Y=sv8is+pW^P_{MRjN-{}6avnhKc$1%A+ zC@pd8k$tv*@A?OprAY}M6y0HCdH&({@~sWs2LkFPa%JRnMQ5w6V|KI=b9b4sFFqk} zsm~jSElVdV9Xhv9Aj;b2gl+9seqHOys=w14SHG-`3(2kfmCJeBY~Hf?)8~qd%LK2N z{;VvUD8KC44UJo05@H>5>Zcr&TyJV5^QF+l?vVS&iM+M76>sU2xc$Xy zoy&pV9Zu^V)(hR#Q({~?MR2JWm!|d~(Wl|6`}-%|f3L4Se|>~b2-o7p>+R>ynDOGx z!}{KOhHFUyC)BMUg0hEdiEBhjN@7W>RdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$ro zfq|8Q!L-j7h71f02o1UUDVb@N3`PcqhPno3x`yT>t*I;7bhncr0V4trO$q6BgMeLz~JfX=d#Wzp$Pytug_rs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/font_truetype.png b/Media/Themes/Umami/Icon/mimetypes/font_truetype.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc4303ee25be3648276debb9e0b71f47d2cecc5 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{oo-U3d9>=#%y`3ErE^@5Cdfi1IA>&yQ zx{YFsYcu0(Uc@9Fd=%`xG$H=W`4u--{LtxG`t6f_$J7f!AsTC&&Yn@3+?4sYJ4ka@ zic|5-iz|u?&)xhz=W2V&F-zmgXFM*mwr_p#=5Ouq-`A{uANVh`DlF#LtIyioa^>%H zT?jDv^7f>^y>+1aj)IRh5-a-VTkTd|{_odp?}%+zi_`whd72%vXo`~YRJIQ(f{JrJ zAMWCN>BE)Gv+|2d)NP+-bqBZUss(S~xF&0{KG%WkXX-NE?5z?LJT|HQ-`V62j?Rin z)!pY;xP4P*>a1WARQ&d?Dz8th>DI~YZr3Fb86WSsGb1)}VE|*?zSURH3T7;S@RZHQ zl;h=ZRypz99y8tt6|eL}wlsBfoYykr|EDMP>ENX(*4q}do3^V)e4n*VtL{(jROR

A2y7St&6X6?j+RfXy8{d(4l6GDfkXJl`kLBc%2<9KV-ml{@ zPn-Vp!vh1QL-S-4x0Ib&8r#YTL#->vNmn*R`X9^ZnL@mbH6CxKEng= zWNlr3JMp+Rz3I(U772LrNp;Py9ha^x5@Y=sv8is+pW^P_{MRjN-{}6avnhKc$1%A+ zC@pd8k$tv*@A?OprAY}M6y0HCdH&({@~sWs2LkFPa%JRnMQ5w6V|KI=b9b4sFFqk} zsm~jSElVdV9Xhv9Aj;b2gl+9seqHOys=w14SHG-`3(2kfmCJeBY~Hf?)8~qd%LK2N z{;VvUD8KC44UJo05@H>5>Zcr&TyJV5^QF+l?vVS&iM+M76>sU2xc$Xy zoy&pV9Zu^V)(hR#Q({~?MR2JWm!|d~(Wl|6`}-%|f3L4Se|>~b2-o7p>+R>ynDOGx z!}{KOhHFUyC)BMUg0hEdiEBhjN@7W>RdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$ro zfq|8Q!L-j7h71f02o1UUDVb@N3`PcqhPno3x`yT>t*I;7bhncr0V4trO$q6BgMeLz~JfX=d#Wzp$Pytug_rs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/font_type1.png b/Media/Themes/Umami/Icon/mimetypes/font_type1.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc4303ee25be3648276debb9e0b71f47d2cecc5 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{oo-U3d9>=#%y`3ErE^@5Cdfi1IA>&yQ zx{YFsYcu0(Uc@9Fd=%`xG$H=W`4u--{LtxG`t6f_$J7f!AsTC&&Yn@3+?4sYJ4ka@ zic|5-iz|u?&)xhz=W2V&F-zmgXFM*mwr_p#=5Ouq-`A{uANVh`DlF#LtIyioa^>%H zT?jDv^7f>^y>+1aj)IRh5-a-VTkTd|{_odp?}%+zi_`whd72%vXo`~YRJIQ(f{JrJ zAMWCN>BE)Gv+|2d)NP+-bqBZUss(S~xF&0{KG%WkXX-NE?5z?LJT|HQ-`V62j?Rin z)!pY;xP4P*>a1WARQ&d?Dz8th>DI~YZr3Fb86WSsGb1)}VE|*?zSURH3T7;S@RZHQ zl;h=ZRypz99y8tt6|eL}wlsBfoYykr|EDMP>ENX(*4q}do3^V)e4n*VtL{(jROR

A2y7St&6X6?j+RfXy8{d(4l6GDfkXJl`kLBc%2<9KV-ml{@ zPn-Vp!vh1QL-S-4x0Ib&8r#YTL#->vNmn*R`X9^ZnL@mbH6CxKEng= zWNlr3JMp+Rz3I(U772LrNp;Py9ha^x5@Y=sv8is+pW^P_{MRjN-{}6avnhKc$1%A+ zC@pd8k$tv*@A?OprAY}M6y0HCdH&({@~sWs2LkFPa%JRnMQ5w6V|KI=b9b4sFFqk} zsm~jSElVdV9Xhv9Aj;b2gl+9seqHOys=w14SHG-`3(2kfmCJeBY~Hf?)8~qd%LK2N z{;VvUD8KC44UJo05@H>5>Zcr&TyJV5^QF+l?vVS&iM+M76>sU2xc$Xy zoy&pV9Zu^V)(hR#Q({~?MR2JWm!|d~(Wl|6`}-%|f3L4Se|>~b2-o7p>+R>ynDOGx z!}{KOhHFUyC)BMUg0hEdiEBhjN@7W>RdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$ro zfq|8Q!L-j7h71f02o1UUDVb@N3`PcqhPno3x`yT>t*I;7bhncr0V4trO$q6BgMeLz~JfX=d#Wzp$Pytug_rs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-fs-executable.png b/Media/Themes/Umami/Icon/mimetypes/gnome-fs-executable.png new file mode 100644 index 0000000000000000000000000000000000000000..9843f26fe3ba8d9bfcf2540ced3fee6e8a11c9ba GIT binary patch literal 1198 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_8$4YcLp+XOoq9T7I#lG?{_5v_>2H2S zt~zplM&+z(0XmD7s8Qacb(()uKX9O1V=e zgq*s(_VpFNzdgd$k8aHDj5pRX%Jc0AR#s8zD=B>+bN0`^_j7(rJoqoS9(W&VNnJ@f8XJpMY_s9}lS_xG%?K779?H*MFQxZf8(+FkxRv2mJf zhV}>T>1|6J&Ohfk7QRu$`|0C+qK8eU1KKWViB9i1z*=1 z&){7@J6_J_SBT&)`9HUwZoZ`0e}3bfIQGXD27OJ1GIet~9UoNcEZ=r!{k)gA!&}Un z_uE@3{j`m9H<`@5SfnSY;ErGYyQRqj6>N>^2GMVyWiNg{HBG5R{|Ec~9*?DNUcP^M=Dk?v8HLJ^XB+oie_6ODPoyj+_}7x< z){%dV|@< z0-1J(uqrY*Bp4NRs1>ca7Bc6}+aqBsn{L;)C`w6aC@yG8FqOO*W|XSD<<&~7DXaN~ z9)4W({DgMA?!E5XNoSuvX}Ev7T}krCoU%1XHmwK?J#*jx&;f}xV#+3>5wY40&n-U4 zwEI}CI@@}UOuTAXp5|BM_IZfT?#TCfB!tkJjwfr~CT zg>eJZ2Ihhjtvx$tR)2~1w5VAa3AYZ6f#VMS9jGWZkhk&4P>)UxG3iv~~qc9++nL{r>U!O08W9M%~vq85kH;OI#yL zQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=IR>@#w oU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kPfq{X+)78&qol`;+0QzYb`2YX_ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-magicpoint.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-magicpoint.png new file mode 100644 index 0000000000000000000000000000000000000000..fd788b8638b87183e27e6fe837f5a47c155b62ba GIT binary patch literal 1007 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UCk6O~xH6yuIXO8V9v%h;261t5Sy|bDfB*#r1qKENB_$;W1_o7C zRV^(o1_lOQU0sM^enBp(0Svi$*(s?>DXB?O(UF;1>9MiVq2a-y;lcR@xmnp68JX!R zsY&q(agovCFJ3&4j*aZ-YQ1>z!u$pE^9ynpEnbwDpOasZd+5-iMT-|roi??xsj;`W zXT{3pAVZq>hqWJzw6snMt<8yK&o9U=?A}st$5ZDV(caP4(bd{%Zr+`pyS%A+^`d!e z6csmY*sw7vY3J>_U44Cr4jnvn_~7Bj#=~7*M~)mkx_R@lV@Ho2KYC{S_KO!UTn`Mq zdGX?{t5@%Md*8Wo<<6ZucY}lPPA<8B@7{wucOKlk_u&5h2M-=Rdi3b=qeqV)KYsG$ z${3tB^m74k|JNr+5{{Mo4|NsBLJ3o6F z0|SFaNswPK10xeN8yhtkASeSsF;|zgrt2F4_BcNc~ZR#^`Q21XH27sn8d;N*k@ye2vZ4N4J* z7TNId&WLVM-C|Ix;drL#Tu-NePmhO>m#4S?`4cD3l%zFys<5}1o4fv0Px<}x*Dp4) zgQ}mLq@$!(cNOp1w8_ZGsOa=Vp{I6VOP9V2o7N{FYs%4?(SO4tzgl|xqCI!^{Bde= z$qt*)-Mn^dcA95GLPBMvw$q|D3i_soTNT!?Sh8fz8W~R|2|gz+ZLNtarzSe`mdRe- zy46D{gF$WK+a9(pk^v2yW*RYzDXe<*By)MYt5e+NbLaf-3xrOX=ol4x+^^UFtl#y9 ziGqsfjwmJPq%2p{&{>g|o}_j95Rdrtzzv&&g@vb2ni8;m^W?{g51URJY~D~<@VSeF z^TX!iO-9Cs4_Fy4X=X__gqoOu5_gGfL`h0wNvc(HQEFmIDua=Mk%6v(rLKWlh@pj* zv8k1znYMv}m4U&u&lZL#8glbfGSeymdKI;Vst0Qp0sg#Z8m literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-msword.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-msword.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eE| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_j-D=#As)xyPCcJJ$5rCE{rNqg_wBy9 zCUe%B%v+0`0wyfukc$#vZJyMuz~MF3Hsphl%LlcJ-ugy!#}7)Z{LdD-3Unm|s;~!g z`U(a%wYI!bn?1w#+jDDsIsUxc3CSL>4tDd~*f1NP|2*@(u`$n|{Qp}|?$@+FP4);OTa?`he7^P~Q;IpW6N*h7DZ{I079ULqb_geof{# zuixsmcWb)K(&zHqRppnbFE184 zAhT7pbxjL*^^bF*3s42~Jy4aBrFtuWhaezqk#iYZsvxH3*+&aG5F-Tmz$Ncfa zYT2ub5*v?)Ens9kJE>qt(+fvdd6$0Hj*H9_-W_!=b~+PyWXa0k&z<*`bgHbKQ>DT( zHDjya9_9;WL1r6@)8C%4`S#1^-#fQE3a9oqyt?z_vDsF6_x1i!v%hF3Ki+ctt&ZFB z4ra$(A>Yz>KB}INb}L2onifCn-EREV@W+)|F{UXCq`ojXOuDgtxtzAIO=;mZ8ym~X z-#*LU+H1A-*!PmE*+&G9%*rsRu`(_F_VW3>+N<;C&RI6!Jav8S=`izs2Y;&Ft3JsW zB%qv}{CH(#zRsqrdpvvio?BNu-?{P1yA{W#>hQeG9a|!C zGUDf2!C#enbN6iKp74f!&i;sXSFe4#X`=l0tJNDb>pM{|ztzX(JzYC3KH^tc{LZqq z6X)*_n05DNUZ`Ksl*G6Tg1d)IRmLKNq{_oDj!^qEPBP();NvipyZNqH=V~-to?N}cv z{EIDQ6Zy7xIfKOk{-pOS-oM%R*8igW>g4%Wbwvye45}rr5hW>!C8<`)MX8A;sSHL2 zMh3bDmbwOJA%+%K#->(=X4(b@Rt5&sK3f=~Xvob^$xN$cFfuSS)HN{EH8c+~G_o=> zw=y(`XxN%q%*?>RAPKS|I6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#WDFy}x22WQ% Jmvv4FO#r(M-}3+f literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-pdf.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eE| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eE| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eE| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_b39!fLp+Xeo$8+c{Re-`h7iDeCpb?e}cH`Q4rVSUCBYUv5p3PyQO|yEA6Yo~M6x z7;AoFCBudnB90E4t&c6X{>@=tV5YY2--p__&W8;Qe7TJ?6_p~UwWhA^p1r2PCCj_P zmxoVIV#(&s!ne15jOiEU+$A<~!RrmTwV1c52h_X#tdVQjA*h}?lVif^ryF#HooboX z7Ptsblr@OZ-}JmvM3$Z7n%_pL&+|ZZbHThtC$m=d`n_#A zSRTIbX{WO@!;W?BLd&l$eXLXb_*3d9`T8S=&glFLI`HUwO4G4_CY_Cq0is*3?Fx1& zn#~|5Z{rdjE&a1b?(hxQOD4>2mJgqs#~uIqOXvIEA37Ts{{7*l@!Kx$r27=dpJ&2l z>_6OCs=nW**2P8an(+$WKo<=Wt`3fMuN5CDEYg@~<@x263jdx@Hcy|riai(C_-PmC zDx8_M@X7BGzHfrROA}w*2|g^(q}&i5-n>e(kl8pzU~j>^E2qytICK6Q*YukC_pPda zUhWS1bh;u)@uvqn|2(T&iHcJ1hE*rB=XF~+o{8@c*%Nx_)Z0gwc5)XhoKtUI{?SXX zR@d{7SLfgPwSw$Y4NG+;Gfe*e&77h!h2ygBT92Mr_}TO7ICpUV+4zxzOMp?TG3@}0(8A*k$tm~uJ^b?M5%+f; z-O?jr;Yv}?mJ?U(c>C7;+4nb={|+AQR%ej@Asw-{{MhQ98V7TwxgUGH*myzu@N&Mp ztX&J&Gl(uYb9Y-k!@j1;QS%E*4H+01R7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly z3@xmTO|1;gv<(cb3=F1ywm{X8o1c=IR>@#wU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kP Qfq{X+)78&qol`;+0EZ#?8vp| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_b39!fLp+Xeo$8+c{Re-`h7iDeCpb?e}cH`Q4rVSUCBYUv5p3PyQO|yEA6Yo~M6x z7;AoFCBudnB90E4t&c6X{>@=tV5YY2--p__&W8;Qe7TJ?6_p~UwWhA^p1r2PCCj_P zmxoVIV#(&s!ne15jOiEU+$A<~!RrmTwV1c52h_X#tdVQjA*h}?lVif^ryF#HooboX z7Ptsblr@OZ-}JmvM3$Z7n%_pL&+|ZZbHThtC$m=d`n_#A zSRTIbX{WO@!;W?BLd&l$eXLXb_*3d9`T8S=&glFLI`HUwO4G4_CY_Cq0is*3?Fx1& zn#~|5Z{rdjE&a1b?(hxQOD4>2mJgqs#~uIqOXvIEA37Ts{{7*l@!Kx$r27=dpJ&2l z>_6OCs=nW**2P8an(+$WKo<=Wt`3fMuN5CDEYg@~<@x263jdx@Hcy|riai(C_-PmC zDx8_M@X7BGzHfrROA}w*2|g^(q}&i5-n>e(kl8pzU~j>^E2qytICK6Q*YukC_pPda zUhWS1bh;u)@uvqn|2(T&iHcJ1hE*rB=XF~+o{8@c*%Nx_)Z0gwc5)XhoKtUI{?SXX zR@d{7SLfgPwSw$Y4NG+;Gfe*e&77h!h2ygBT92Mr_}TO7ICpUV+4zxzOMp?TG3@}0(8A*k$tm~uJ^b?M5%+f; z-O?jr;Yv}?mJ?U(c>C7;+4nb={|+AQR%ej@Asw-{{MhQ98V7TwxgUGH*myzu@N&Mp ztX&J&Gl(uYb9Y-k!@j1;QS%E*4H+01R7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly z3@xmTO|1;gv<(cb3=F1ywm{X8o1c=IR>@#wU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kP Qfq{X+)78&qol`;+0EZ#?8vp8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UCk6O~xH6yuIXO8V9v%h;261t5Sy|bDfB*#r1qKENB_$;W1_o7C zRV^(o1_lOQU0sM^enBp(0Svi$*(s?>DXB?O(UF;1>9MiVq2a-y;lcR@xmnp68JX!R zsY&q(agovCFJ3&4j*aZ-YQ1>z!u$pE^9ynpEnbwDpOasZd+5-iMT-|roi??xsj;`W zXT{3pAVZq>hqWJzw6snMt<8yK&o9U=?A}st$5ZDV(caP4(bd{%Zr+`pyS%A+^`d!e z6csmY*sw7vY3J>_U44Cr4jnvn_~7Bj#=~7*M~)mkx_R@lV@Ho2KYC{S_KO!UTn`Mq zdGX?{t5@%Md*8Wo<<6ZucY}lPPA<8B@7{wucOKlk_u&5h2M-=Rdi3b=qeqV)KYsG$ z${3tB^m74k|JNr+5{{Mo4|NsBLJ3o6F z0|SFaNswPK10xeN8yhtkASeSsF;|zgrt2F4_BcNc~ZR#^`Q21XH27sn8d;N*k@ye2vZ4N4J* z7TNId&WLVM-C|Ix;drL#Tu-NePmhO>m#4S?`4cD3l%zFys<5}1o4fv0Px<}x*Dp4) zgQ}mLq@$!(cNOp1w8_ZGsOa=Vp{I6VOP9V2o7N{FYs%4?(SO4tzgl|xqCI!^{Bde= z$qt*)-Mn^dcA95GLPBMvw$q|D3i_soTNT!?Sh8fz8W~R|2|gz+ZLNtarzSe`mdRe- zy46D{gF$WK+a9(pk^v2yW*RYzDXe<*By)MYt5e+NbLaf-3xrOX=ol4x+^^UFtl#y9 ziGqsfjwmJPq%2p{&{>g|o}_j95Rdrtzzv&&g@vb2ni8;m^W?{g51URJY~D~<@VSeF z^TX!iO-9Cs4_Fy4X=X__gqoOu5_gGfL`h0wNvc(HQEFmIDua=Mk%6v(rLKWlh@pj* zv8k1znYMv}m4U&u&lZL#8glbfGSeymdKI;Vst0Qp0sg#Z8m literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics-template.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics-template.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7177d9b69ae0e0d14d43be24900b4e3f0b5287 GIT binary patch literal 1247 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWq44?SHRLp(a~PW8?S4HaqIUq3hKU9RRb z->kI}w;GPEVol}|ozPym;(@UupM=11o;fCNzq%X_E-Ort5i+&<-00}*^$8!w*M($cc~@HhIsT&8aM z=NEzuj9->k-4*W57C*F~Gls>j;bD{M`n$QJ;Zkw6!gt=fFTbCi{&}9JD5Hs~>BZV7 z(QIsNA8h!a%Qz`0GAguIyV_~mIG(d)h0&xQ;Id}Z%%_6khT|F>*j_xuPmkKi||5%HUStF6Da zZC}iOHGBJ~<3Gy}>^u~5=j4Gi4u^bZ@E8Zb|FC@38tsSw+NZDFw9RGjVfn`=4=bfH zB=1#Z7T;m*EMi=6PLRd1f@8~;Eesm7KYOZ8iut^JijT_FlfI`pP0h`{#SAm!HXz=ar?e>`=F;haU-ezZRVyd?~`)Co%JjvhR->a|NeDR97g}9MM&qW=!dCy%d zIqa=u_%`lKlNNT))SDxF^~r?wyj$0EOqiLH#BY;p>$%I0sIL0l{G#f-9%D&a8CSxS-_B=JY9@ttwn`qkw8O~#vv+r7;MApi zwsib@rSkQv=ih=4xvy4F7WBE3qj?Oan zKmV-!cXYaFN*1q+5oUHoQc*)RRPx|=&Qo>+Rp4zTrh< zZ)*k98D`xsH_g^!Z6}F;?`og4o}G32Uc`)p($VjfIha%q`zV}bIiw?kr~ zynC}Q!>*k8H@}J n4RsC7bPdfz42`Ue%&iQ~AsV(O7Be$2Ffe$!`njxgN@xNAm#`z& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics.png new file mode 100644 index 0000000000000000000000000000000000000000..884d386cdf1c053a8cdd2b13f4d20dc4e9ba41a1 GIT binary patch literal 883 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation.png new file mode 100644 index 0000000000000000000000000000000000000000..fd788b8638b87183e27e6fe837f5a47c155b62ba GIT binary patch literal 1007 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UCk6O~xH6yuIXO8V9v%h;261t5Sy|bDfB*#r1qKENB_$;W1_o7C zRV^(o1_lOQU0sM^enBp(0Svi$*(s?>DXB?O(UF;1>9MiVq2a-y;lcR@xmnp68JX!R zsY&q(agovCFJ3&4j*aZ-YQ1>z!u$pE^9ynpEnbwDpOasZd+5-iMT-|roi??xsj;`W zXT{3pAVZq>hqWJzw6snMt<8yK&o9U=?A}st$5ZDV(caP4(bd{%Zr+`pyS%A+^`d!e z6csmY*sw7vY3J>_U44Cr4jnvn_~7Bj#=~7*M~)mkx_R@lV@Ho2KYC{S_KO!UTn`Mq zdGX?{t5@%Md*8Wo<<6ZucY}lPPA<8B@7{wucOKlk_u&5h2M-=Rdi3b=qeqV)KYsG$ z${3tB^m74k|JNr+5{{Mo4|NsBLJ3o6F z0|SFaNswPK10xeN8yhtkASeSsF;|zgrt2F4_BcNc~ZR#^`Q21XH27sn8d;N*k@ye2vZ4N4J* z7TNId&WLVM-C|Ix;drL#Tu-NePmhO>m#4S?`4cD3l%zFys<5}1o4fv0Px<}x*Dp4) zgQ}mLq@$!(cNOp1w8_ZGsOa=Vp{I6VOP9V2o7N{FYs%4?(SO4tzgl|xqCI!^{Bde= z$qt*)-Mn^dcA95GLPBMvw$q|D3i_soTNT!?Sh8fz8W~R|2|gz+ZLNtarzSe`mdRe- zy46D{gF$WK+a9(pk^v2yW*RYzDXe<*By)MYt5e+NbLaf-3xrOX=ol4x+^^UFtl#y9 ziGqsfjwmJPq%2p{&{>g|o}_j95Rdrtzzv&&g@vb2ni8;m^W?{g51URJY~D~<@VSeF z^TX!iO-9Cs4_Fy4X=X__gqoOu5_gGfL`h0wNvc(HQEFmIDua=Mk%6v(rLKWlh@pj* zv8k1znYMv}m4U&u&lZL#8glbfGSeymdKI;Vst0Qp0sg#Z8m literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet-template.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet-template.png new file mode 100644 index 0000000000000000000000000000000000000000..711b5b37f6c89787e390ed62914c2f8960cceee7 GIT binary patch literal 1382 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE8J;eVAs)x?hWh)+gv$J@+Z?cMgYj*r z#Kh^#Od@n9ZZmwk-r?qvBh9&2kGL#Wzy0OG!RGcyzS55;PJVfmd*w!Uey^krYgMF# z7ciZkw(VNp>H14Y&*epK4=77ZY`a_eZ12t3V{Ch7{g|{p|JmQ4wfDdOuFDtu5x-?| zuYR9z%dyDsEA@^YU-$0ZnYAlFRAond|G6i>Uw@uOp^cHTwQOF7g^^6J-LI4KANW-! zpIj~1|6KdB$?rD%yXVVZ9JVq0C@;5V?bf@UnM@IdUs{rD9#x1JE6<<$+V{CV`;D@O z-{E=-pLd69J<{L1cdvw`+|f&ygkto>B{r7}9iQIu!;|S__%Zi$T{l;=Z2In2|Cf=+ zc*5&b0de0089f-jeEoWp@uc0k$ND;Fl=VLr>a;c7Kd(G-)hZo<55mlWKB0ndIJ;`u zoAVP(KN=-0blAW!A$$V6LQ+7e>G9Bp4+mUadOVaudpF*RbDOl+T~@kfcNb^Tv#LM$ zML)=Kusrx!apcdPJ2KpC%{B9sCUVT0HS32-w~La>(}*iu<{!QM^Yom3m$^JDSuGjV zJSUylo+z;-Q|e`AEXy_1xtX)r_MLOzrFY?ed1m?w%Y8U8 zYuced7X%)O+aC+~tGKIhLDQmxa(7m&7X6+4F#Ax7H^YXxq9t4QH?3Nw^|1N&-ga$) zr5=Whe$S6ldHc)M>dQY#t#?(OkwS{ekp|l<{MrI)KbZ(k)Mx$O^D(EKU#PQXLY_q0 zzM=*7|7DFH&VJL%f1h#U$!m)~Pl=i1n3OneOS=Ejn?KgR-mqy;myGGJ8c|EB;^`l% z6^tXlEqF0~zF@`Y&`XOxd#Hvdr0Arj==l8R+Z?#kNrt1OZo=-28+VzPpPap{cJfZH zHR}|!^A4Pdx^c$9aMLT>3A4Rl+*V%SY4q#!v+Lj5^-fQ?d#P-_lA}D&@jlbWaE|{` z=ck1q2#w@kVt&FyEkpbCiZu&GzJApVIUZ7Y?E9zJ6-DK46Si-=WL@uDYj@wQZSmE( z9Szmt`wl)V&fna%YjJ|B>y7K7jM?j3yw9?B2?(R22R@{&cDJ$za>6j>ix?)K@wdg~YF2eVHzykXv8zI?*@)Sat}dwcgS+iH6M z-`B4pAKiZGAKNfVQ#aO9U+;ANm49sio|zt$-LIy_z`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? bBXcW5bBKnmiN(we3=9mOu6{1-oD!M<4VZ7p literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet.png new file mode 100644 index 0000000000000000000000000000000000000000..1c7bc745d6965403174e35e917e57bbf5b41e329 GIT binary patch literal 1178 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_b39!fLp+Xeo$8+c{Re-`h7iDeCpb?e}cH`Q4rVSUCBYUv5p3PyQO|yEA6Yo~M6x z7;AoFCBudnB90E4t&c6X{>@=tV5YY2--p__&W8;Qe7TJ?6_p~UwWhA^p1r2PCCj_P zmxoVIV#(&s!ne15jOiEU+$A<~!RrmTwV1c52h_X#tdVQjA*h}?lVif^ryF#HooboX z7Ptsblr@OZ-}JmvM3$Z7n%_pL&+|ZZbHThtC$m=d`n_#A zSRTIbX{WO@!;W?BLd&l$eXLXb_*3d9`T8S=&glFLI`HUwO4G4_CY_Cq0is*3?Fx1& zn#~|5Z{rdjE&a1b?(hxQOD4>2mJgqs#~uIqOXvIEA37Ts{{7*l@!Kx$r27=dpJ&2l z>_6OCs=nW**2P8an(+$WKo<=Wt`3fMuN5CDEYg@~<@x263jdx@Hcy|riai(C_-PmC zDx8_M@X7BGzHfrROA}w*2|g^(q}&i5-n>e(kl8pzU~j>^E2qytICK6Q*YukC_pPda zUhWS1bh;u)@uvqn|2(T&iHcJ1hE*rB=XF~+o{8@c*%Nx_)Z0gwc5)XhoKtUI{?SXX zR@d{7SLfgPwSw$Y4NG+;Gfe*e&77h!h2ygBT92Mr_}TO7ICpUV+4zxzOMp?TG3@}0(8A*k$tm~uJ^b?M5%+f; z-O?jr;Yv}?mJ?U(c>C7;+4nb={|+AQR%ej@Asw-{{MhQ98V7TwxgUGH*myzu@N&Mp ztX&J&Gl(uYb9Y-k!@j1;QS%E*4H+01R7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly z3@xmTO|1;gv<(cb3=F1ywm{X8o1c=IR>@#wU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kP Qfq{X+)78&qol`;+0EZ#?8vp| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_D?D8sLp+Y(o#LAjlPc0S|Ff^rGxq33 zWskOqczH)3y`p9Mf4_q0m9UsyAqVG5i$8YaP>k;oPVo)XQjM*{pjAzGbX~@o7#WQcwcv?`rhZd_tkuV^dEJq`^Wh$6MFUL zRe;gdfNJ;K$6nkx5tRIR=9eQ!exw{;xx8-fE=$vrFE=jEfA;Lseb-mY@$1*Ft&`(x zx1W4P{QcVCnWF3l4Jld+pDmk~bVf9RF@h&-=U=7`8ELCO-m@~@^OG?{{ooPt_m}@Z z+!V@iB*~ENvG~lHGXph5j698a&ZM+4L?-4l96EEK)$sS}?H!(Sc0s3=-S6qm31|57 z^($jS9fQV1nIJ<|9!a%7R;(2wS8H}W51qDLzkz*{7vm?MGd(sA(b??heA3idJLec5 zV5$4MNw(qkboLcp9Gqs?jjD}KFn>6CzW$lL-aq~A3?19%q`!Q|I-zUnjk5Kj? zb02cgl>Gi|{mI*ZW(%?TJ`d!3!um>t`ACu>!z}6O4!6Y#Y7MPZt!jH$a7F&-;B6syoWhe3+S7IZaOC zxs3dN!5uG7@wcpU+}C@`I3qVxS*Ww3o142UzN^~p!rnIbx|APxeg0X_fAP^+fAZd6 znjG8SuYb4J(QLNsf_LZg4B9t4T{UuUn`|k}b}oid!T6K1nBGC1^^NhWUGY7qn-tsa z@1!U&T|961zv)vff5D2srO$%izg-dB=jfPXyvw>e<=LNAb59n`a6UI@PO+ASUdNZE z`Wq+QKe}`6{!`^f)<2AjEz*siKRHv7R`iU?pygrY#SN?Lzo|a?dHCGzUE%W_Yin)a z^gLv5mr0$+{d_yy{zaR<8HBQbOLon-Zus}_UrKnn`pSnYb7N&i7bh$Ko;_Qdzt{gy z*{3hY{`TgkrHh{*>3sbBQt`{{i`WKd5o i8k&a~8d({cTN#=|G;B>QW@cbuVDNPHb6Mw<&;$T9EEzoj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-web.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-web.png new file mode 100644 index 0000000000000000000000000000000000000000..d75ba938bc84dfdf37b63fb975567c6e5a789eca GIT binary patch literal 1256 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_uRL8GLp+XeoqF0oBwXgW{qu8oc2043 zY@3-V!RnoHOJo%@BWu>=S$eZp6kg5CnSHF}di{cxfwQ+msVD>G)4 zBsD!XarE^Y{L1KSWtk#+@VNV*J(2Og1y|2@ z22cNPyWM4B0EZ$=a&mIaOTNNCdu#W^#(P$1x`gH`KMjqW^ipTxONFx24u-*d?uYef zdak=KwUeVnuz>WN$_;g;5eONH|IgW^!J^0o97q# zehPEuJ>bsjedTiX>~bsqwNtg`ELm42UVcn`W&Pb=)%iT@D@@KX)+;-4ESYlVoc;vA zr5|>kVvOQWyKwPd=k2#{9FDh6EX?Ga5@dd{LaO$v!c4C ztl?C;S>*NWcH3@>Bz2mozO?juE7jepH7$hQ^0JcbxrgV|PNwjj^78gjoBZbM&Ilh# zhKEfJHKEf)4J|jj6g!)Kt=?lZZ{E{qhedg0mh=eK{VC<}ol#R*Bfom}Y95;z4V$bQ zc3Wo^`R?p(yeP?&t=qTD)~?TN_l$U+%`)Bsr#a-@bxLB@#kvExoIajmz*6vZW&>~S zzlVy`lne9j&Q`KmJ=t&hOKB-Zne&U>g>>8}>#SeWaWqNih>?rXq?rLbzCZswKPKs~ zU5@6&mtMXU;9Giib;c|&qq(VZ{hz)+;Q4jP=Hkb9 z@&A7Qy~Gs2mC|sgtT~1;WC2G-s_iTx#hi1>^XLBEbtdxiDvK^J2aeN5zRDXHowwap zzxMh0?(jy{1hI}a%#T|Ci`;hJYO^A_Hl9JqgYo3o;|y!Q8tskw%ROo8| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eEAbt1fq^B*)5S5w1m=> zB%HC3!>qxIO}m-r$+mg<_y0fHu;M{XP0Tm{x}SdMe%9@O|IPmXEYttRTO$rVH{2pFxaYZ$-LmV;7Mp3URzT)BIySL-@WZBt5{57=~ za!mWaeJN#Xyj?B*i>-?Ji2USLb;~TQOt)^|?(|>QT({tD8u!$7q32GDxIdrz@>7GF zv+L7m^2>MG%0BpY(=+nzvWwp9xVs|+T`NwkuUb`gY~z;}wsc#bpKKW)x2==jqPuan z!u<){mX(nK0Tn{8q*fisGM{|PVfIQsjgUKC-ZvhbLT_ub60D8 zKa|xR`{B3xfeb6(sW;9jgnKa>H~(p}`LXd1-|5=rt2fOwXyBBY`gFqF#p*Iv1`ijX z(>b-*C2C(5L-0w-4GKS3=&*8i`#FA`sia{a&UH3i@8Vib-OY}rbD5=POD|x$pZu)g z_FX=?d~;a_?TU_~_3KtRE%p06S;*Qd`e4#;Mw6LZ8d`b{Medqc=B#Jge6*t}H6XN> zFDq;H3$1C-T?~rOv$xD&HsRZXJJB8D@~f3JEB}i~UV8E*zr<|G`_n0tECtuCUERjb z`+VW9WkLlz0_r!m{j)Q8vaqt{eD`Cq1$TC9-#YU2D4+J#PYgTrj@&#Q6Ur35l66U@ zy8^H4et%n@`zm#;k?JJ{s~=naXk*W;KQvi;$>nG#yDJOtEE8pPNvaD!Bt9w8w@vCq zzp>pv?jHZ1#{3kHs^7Z~+zj#O|Ged*!}gqn4f4n8Y8`$H{x4apwW0DeyQtE}1eGq) znJtrE%X16J35scod~|pD*yLBT%&0W#KqzDR`+JTP4XYaZqdv{6QRkHP@LFPV=Z35M z(&kmGSI1g>iT%{#p<`lO865w(;HDRkL4U1`ZOM-ZEm4b?q}-6&>gJfozO!k|)r?Su zsj`hn{@!PrEz7JECUS)Ho1<42*Nd-J2D8s@FrW3b+K55(<<|=rat%KUJ+$4|u)U-B zWA~%hdX*Z@pRo#$&VT%I$NuJ=7nNZpS7KDM&&OQ3cRtPH_YKB{8hM(3E^o-(8pUfh zmrtgTi-Vj0^O_s3ryT{}zqzy1mh<_ezUdw5M}-ts`^1|ZMA)4S=PNW!J-49X|M7*l zgUa9Bnzu{6sJv{JlikvbSl> z_P)wn*PMjnB$1-loD&HKJ2swT|Gy=&c}7-T+KGc5z5NO^eny)c)H$9$5}`M{e}zkn zO>wR95rt)|zV^f(U(>i%``g+2Z+}=>e#+*ru(LbBz`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? aBXcW5bBKnmiN(yIBF@v*&t;ucLK6T89c4QJ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.rn-realmedia-vbr.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.rn-realmedia-vbr.png new file mode 100644 index 0000000000000000000000000000000000000000..c9dbcb2d0a658550e5eca6e0e00704de81e9af9c GIT binary patch literal 1386 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq^B*)5S5w1m=> zB%HC3!>qxIO}m-r$+mg<_y0fHu;M{XP0Tm{x}SdMe%9@O|IPmXEYttRTO$rVH{2pFxaYZ$-LmV;7Mp3URzT)BIySL-@WZBt5{57=~ za!mWaeJN#Xyj?B*i>-?Ji2USLb;~TQOt)^|?(|>QT({tD8u!$7q32GDxIdrz@>7GF zv+L7m^2>MG%0BpY(=+nzvWwp9xVs|+T`NwkuUb`gY~z;}wsc#bpKKW)x2==jqPuan z!u<){mX(nK0Tn{8q*fisGM{|PVfIQsjgUKC-ZvhbLT_ub60D8 zKa|xR`{B3xfeb6(sW;9jgnKa>H~(p}`LXd1-|5=rt2fOwXyBBY`gFqF#p*Iv1`ijX z(>b-*C2C(5L-0w-4GKS3=&*8i`#FA`sia{a&UH3i@8Vib-OY}rbD5=POD|x$pZu)g z_FX=?d~;a_?TU_~_3KtRE%p06S;*Qd`e4#;Mw6LZ8d`b{Medqc=B#Jge6*t}H6XN> zFDq;H3$1C-T?~rOv$xD&HsRZXJJB8D@~f3JEB}i~UV8E*zr<|G`_n0tECtuCUERjb z`+VW9WkLlz0_r!m{j)Q8vaqt{eD`Cq1$TC9-#YU2D4+J#PYgTrj@&#Q6Ur35l66U@ zy8^H4et%n@`zm#;k?JJ{s~=naXk*W;KQvi;$>nG#yDJOtEE8pPNvaD!Bt9w8w@vCq zzp>pv?jHZ1#{3kHs^7Z~+zj#O|Ged*!}gqn4f4n8Y8`$H{x4apwW0DeyQtE}1eGq) znJtrE%X16J35scod~|pD*yLBT%&0W#KqzDR`+JTP4XYaZqdv{6QRkHP@LFPV=Z35M z(&kmGSI1g>iT%{#p<`lO865w(;HDRkL4U1`ZOM-ZEm4b?q}-6&>gJfozO!k|)r?Su zsj`hn{@!PrEz7JECUS)Ho1<42*Nd-J2D8s@FrW3b+K55(<<|=rat%KUJ+$4|u)U-B zWA~%hdX*Z@pRo#$&VT%I$NuJ=7nNZpS7KDM&&OQ3cRtPH_YKB{8hM(3E^o-(8pUfh zmrtgTi-Vj0^O_s3ryT{}zqzy1mh<_ezUdw5M}-ts`^1|ZMA)4S=PNW!J-49X|M7*l zgUa9Bnzu{6sJv{JlikvbSl> z_P)wn*PMjnB$1-loD&HKJ2swT|Gy=&c}7-T+KGc5z5NO^eny)c)H$9$5}`M{e}zkn zO>wR95rt)|zV^f(U(>i%``g+2Z+}=>e#+*ru(LbBz`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? aBXcW5bBKnmiN(yIBF@v*&t;ucLK6T89c4QJ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.rn-realmedia.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.rn-realmedia.png new file mode 100644 index 0000000000000000000000000000000000000000..c9dbcb2d0a658550e5eca6e0e00704de81e9af9c GIT binary patch literal 1386 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq^B*)5S5w1m=> zB%HC3!>qxIO}m-r$+mg<_y0fHu;M{XP0Tm{x}SdMe%9@O|IPmXEYttRTO$rVH{2pFxaYZ$-LmV;7Mp3URzT)BIySL-@WZBt5{57=~ za!mWaeJN#Xyj?B*i>-?Ji2USLb;~TQOt)^|?(|>QT({tD8u!$7q32GDxIdrz@>7GF zv+L7m^2>MG%0BpY(=+nzvWwp9xVs|+T`NwkuUb`gY~z;}wsc#bpKKW)x2==jqPuan z!u<){mX(nK0Tn{8q*fisGM{|PVfIQsjgUKC-ZvhbLT_ub60D8 zKa|xR`{B3xfeb6(sW;9jgnKa>H~(p}`LXd1-|5=rt2fOwXyBBY`gFqF#p*Iv1`ijX z(>b-*C2C(5L-0w-4GKS3=&*8i`#FA`sia{a&UH3i@8Vib-OY}rbD5=POD|x$pZu)g z_FX=?d~;a_?TU_~_3KtRE%p06S;*Qd`e4#;Mw6LZ8d`b{Medqc=B#Jge6*t}H6XN> zFDq;H3$1C-T?~rOv$xD&HsRZXJJB8D@~f3JEB}i~UV8E*zr<|G`_n0tECtuCUERjb z`+VW9WkLlz0_r!m{j)Q8vaqt{eD`Cq1$TC9-#YU2D4+J#PYgTrj@&#Q6Ur35l66U@ zy8^H4et%n@`zm#;k?JJ{s~=naXk*W;KQvi;$>nG#yDJOtEE8pPNvaD!Bt9w8w@vCq zzp>pv?jHZ1#{3kHs^7Z~+zj#O|Ged*!}gqn4f4n8Y8`$H{x4apwW0DeyQtE}1eGq) znJtrE%X16J35scod~|pD*yLBT%&0W#KqzDR`+JTP4XYaZqdv{6QRkHP@LFPV=Z35M z(&kmGSI1g>iT%{#p<`lO865w(;HDRkL4U1`ZOM-ZEm4b?q}-6&>gJfozO!k|)r?Su zsj`hn{@!PrEz7JECUS)Ho1<42*Nd-J2D8s@FrW3b+K55(<<|=rat%KUJ+$4|u)U-B zWA~%hdX*Z@pRo#$&VT%I$NuJ=7nNZpS7KDM&&OQ3cRtPH_YKB{8hM(3E^o-(8pUfh zmrtgTi-Vj0^O_s3ryT{}zqzy1mh<_ezUdw5M}-ts`^1|ZMA)4S=PNW!J-49X|M7*l zgUa9Bnzu{6sJv{JlikvbSl> z_P)wn*PMjnB$1-loD&HKJ2swT|Gy=&c}7-T+KGc5z5NO^eny)c)H$9$5}`M{e}zkn zO>wR95rt)|zV^f(U(>i%``g+2Z+}=>e#+*ru(LbBz`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? aBXcW5bBKnmiN(yIBF@v*&t;ucLK6T89c4QJ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.stardivision.calc.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.stardivision.calc.png new file mode 100644 index 0000000000000000000000000000000000000000..1c7bc745d6965403174e35e917e57bbf5b41e329 GIT binary patch literal 1178 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.stardivision.writer.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.stardivision.writer.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 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 bBXcW5bBKnmiN(we3=9mOu6{1-oD!M<4VZ7p literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.draw.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.draw.png new file mode 100644 index 0000000000000000000000000000000000000000..884d386cdf1c053a8cdd2b13f4d20dc4e9ba41a1 GIT binary patch literal 883 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}harJgR1As)xCPVx5_4iq_B|J_eh)Sl`F!5*=Li4uWtw_%w?-;d%e5byvGb*7`m(o)nF|xn zbzgEixaC*RR^?S8S`pJ)4cQzWSU9(OeUZ;qaD1}l^2_9XTXOHYENXSoGk4BY6Mt$v z+xC>hwZaotHy`9lAMsPl*vjbAT*1{^v*N*vd8_929*~$Zcebm5+4p^$H+>X4zg~E| zkWY`#B>g9XOBOfvX$FM~IEDrUhD^Qs%6d}xZ;9PA)hurv&no5g)(P2a&6Lcu@4b6_ z-(!XcrZI0?&h|wg_PZft^39NGrVraiz3c_6B$5LJyN)U;3H0B*@>;L?Tk4(K>GvX- zyr=&BS!uOUw=p$x;gbbRdD#Ng+|(i?;}3n_-WkpLuFsB_Tj!7I=H=QEHUG6Y+3(S0 zF8F^_-%A@mfte5xWk*3tje~~K7)DcgT1e2E!g$%^NU1o zyFbSi+vjx~-u`lTSFe{vO1k2UorUjj%wzqs<;KOsH+&~DE|ZTr_`TM}QBjgBfCupDP-; zuQbRe=x>p}P^hCPx1Z5-$)~rUE?v-IU|>)!ag8WRNi0dVN-j!GEJkI}w;GPEVol}|ozPym;(@UupM=11o;fCNzq%X_E-Ort5i+&<-00}*^$8!w*M($cc~@HhIsT&8aM z=NEzuj9->k-4*W57C*F~Gls>j;bD{M`n$QJ;Zkw6!gt=fFTbCi{&}9JD5Hs~>BZV7 z(QIsNA8h!a%Qz`0GAguIyV_~mIG(d)h0&xQ;Id}Z%%_6khT|F>*j_xuPmkKi||5%HUStF6Da zZC}iOHGBJ~<3Gy}>^u~5=j4Gi4u^bZ@E8Zb|FC@38tsSw+NZDFw9RGjVfn`=4=bfH zB=1#Z7T;m*EMi=6PLRd1f@8~;Eesm7KYOZ8iut^JijT_FlfI`pP0h`{#SAm!HXz=ar?e>`=F;haU-ezZRVyd?~`)Co%JjvhR->a|NeDR97g}9MM&qW=!dCy%d zIqa=u_%`lKlNNT))SDxF^~r?wyj$0EOqiLH#BY;p>$%I0sIL0l{G#f-9%D&a8CSxS-_B=JY9@ttwn`qkw8O~#vv+r7;MApi zwsib@rSkQv=ih=4xvy4F7WBE3qj?Oan zKmV-!cXYaFN*1q+5oUHoQc*)RRPx|=&Qo>+Rp4zTrh< zZ)*k98D`xsH_g^!Z6}F;?`og4o}G32Uc`)p($VjfIha%q`zV}bIiw?kr~ zynC}Q!>*k8H@}J n4RsC7bPdfz42`Ue%&iQ~AsV(O7Be$2Ffe$!`njxgN@xNAm#`z& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.impress.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.impress.png new file mode 100644 index 0000000000000000000000000000000000000000..fd788b8638b87183e27e6fe837f5a47c155b62ba GIT binary patch literal 1007 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UCk6O~xH6yuIXO8V9v%h;261t5Sy|bDfB*#r1qKENB_$;W1_o7C zRV^(o1_lOQU0sM^enBp(0Svi$*(s?>DXB?O(UF;1>9MiVq2a-y;lcR@xmnp68JX!R zsY&q(agovCFJ3&4j*aZ-YQ1>z!u$pE^9ynpEnbwDpOasZd+5-iMT-|roi??xsj;`W zXT{3pAVZq>hqWJzw6snMt<8yK&o9U=?A}st$5ZDV(caP4(bd{%Zr+`pyS%A+^`d!e z6csmY*sw7vY3J>_U44Cr4jnvn_~7Bj#=~7*M~)mkx_R@lV@Ho2KYC{S_KO!UTn`Mq zdGX?{t5@%Md*8Wo<<6ZucY}lPPA<8B@7{wucOKlk_u&5h2M-=Rdi3b=qeqV)KYsG$ z${3tB^m74k|JNr+5{{Mo4|NsBLJ3o6F z0|SFaNswPK10xeN8yhtkASeSsF;|zgrt2F4_BcNc~ZR#^`Q21XH27sn8d;N*k@ye2vZ4N4J* z7TNId&WLVM-C|Ix;drL#Tu-NePmhO>m#4S?`4cD3l%zFys<5}1o4fv0Px<}x*Dp4) zgQ}mLq@$!(cNOp1w8_ZGsOa=Vp{I6VOP9V2o7N{FYs%4?(SO4tzgl|xqCI!^{Bde= z$qt*)-Mn^dcA95GLPBMvw$q|D3i_soTNT!?Sh8fz8W~R|2|gz+ZLNtarzSe`mdRe- zy46D{gF$WK+a9(pk^v2yW*RYzDXe<*By)MYt5e+NbLaf-3xrOX=ol4x+^^UFtl#y9 ziGqsfjwmJPq%2p{&{>g|o}_j95Rdrtzzv&&g@vb2ni8;m^W?{g51URJY~D~<@VSeF z^TX!iO-9Cs4_Fy4X=X__gqoOu5_gGfL`h0wNvc(HQEFmIDua=Mk%6v(rLKWlh@pj* zv8k1znYMv}m4U&u&lZL#8glbfGSeymdKI;Vst0Qp0sg#Z8m literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.impress.template.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.impress.template.png new file mode 100644 index 0000000000000000000000000000000000000000..fe81b20af68ae28a9177a11f42988732b3dbd7bc GIT binary patch literal 1296 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoELY^*;As)w%hUVr3r;6D9U9weHblC;3 zU3|xnT`N6gWggynyQfg9^oYD#+Ds#t8(lmG|C9@bl%+fV34C*RxOhZDS+;Aoq2Z!O z?6bKWTU^4f>n(YEBkC@@R`%|1_wGI3nZJGA+`Y2(J^4lNs^92?zjwU8yty-H_S8qtEcT_3YCrt04eCqK`@Q*l;=aYj zS1;MxU)x`}d7j{ktFI>Sz7?M{nL+&0ffm&VJ$n|j9N6~w>ruh1{dEN!^h6IHm#@84 z_ar0y_O|D74IU~?Ts!Aviub!QR?3Axd8&9KMI&5e#biZEWuf~=>%PQFv+T2W|Dik~ zd`0usR@s?CsTs>c4&9h(TyXt?f{3_C$FIio&krZ~^3IBm3Rrx7@p0>>hM5y*NY87V zeZ4xOr(?!k2bTFeszg^cJ4PgKWDw_b){!}O)l2kQtV~1vpSm?KUmbeHtE$1_)Rpi> zx}met?!p?yFsaV}vZwqUb~Z?Emu8uyB*o>(Q(^JHLV4FQZ^54u(_$?e`6uXz9BjI$ z8ScB)*TDFe@~-*wy6U}4@{^Tou3ll8T4wEVxGLi1hljh0vp-y$s*ji3?jZNQ_0Fw7Q5<}8*jFtx`e}4v+4OG~(Y$3T}wKYnTjFtKY6W3S@oSb4^{Ehtv;Qjr*KWooR+dnt?DHiZ@%YvP^86L$y>eqJGVLw$;uyMh$XGz*8 zPy41gJXkOAL)@h9_?}HNwbfDE^Jjmps59>Rtu#@CdB*H-lNs-D>HIU=?5a?w{iSMe z&z>oPe;3Z59pjj+_3N4N6^lOaioN%C+{{U9)feDU_%r{lyvur?O$&sS4H+01R7+eV zN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1ywm{X8o1c=IR>@#w oU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kPfq{X+)78&qol`;+06ecuApigX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.writer.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-vnd.sun.xml.writer.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eE| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_D?D8sLp+Y(o#LAjlPc0S|Ff^rGxq33 zWskOqczH)3y`p9Mf4_q0m9UsyAqVG5i$8YaP>k;oPVo)XQjM*{pjAzGbX~@o7#WQcwcv?`rhZd_tkuV^dEJq`^Wh$6MFUL zRe;gdfNJ;K$6nkx5tRIR=9eQ!exw{;xx8-fE=$vrFE=jEfA;Lseb-mY@$1*Ft&`(x zx1W4P{QcVCnWF3l4Jld+pDmk~bVf9RF@h&-=U=7`8ELCO-m@~@^OG?{{ooPt_m}@Z z+!V@iB*~ENvG~lHGXph5j698a&ZM+4L?-4l96EEK)$sS}?H!(Sc0s3=-S6qm31|57 z^($jS9fQV1nIJ<|9!a%7R;(2wS8H}W51qDLzkz*{7vm?MGd(sA(b??heA3idJLec5 zV5$4MNw(qkboLcp9Gqs?jjD}KFn>6CzW$lL-aq~A3?19%q`!Q|I-zUnjk5Kj? zb02cgl>Gi|{mI*ZW(%?TJ`d!3!um>t`ACu>!z}6O4!6Y#Y7MPZt!jH$a7F&-;B6syoWhe3+S7IZaOC zxs3dN!5uG7@wcpU+}C@`I3qVxS*Ww3o142UzN^~p!rnIbx|APxeg0X_fAP^+fAZd6 znjG8SuYb4J(QLNsf_LZg4B9t4T{UuUn`|k}b}oid!T6K1nBGC1^^NhWUGY7qn-tsa z@1!U&T|961zv)vff5D2srO$%izg-dB=jfPXyvw>e<=LNAb59n`a6UI@PO+ASUdNZE z`Wq+QKe}`6{!`^f)<2AjEz*siKRHv7R`iU?pygrY#SN?Lzo|a?dHCGzUE%W_Yin)a z^gLv5mr0$+{d_yy{zaR<8HBQbOLon-Zus}_UrKnn`pSnYb7N&i7bh$Ko;_Qdzt{gy z*{3hY{`TgkrHh{*>3sbBQt`{{i`WKd5o i8k&a~8d({cTN#=|G;B>QW@cbuVDNPHb6Mw<&;$T9EEzoj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-wordperfect.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-wordperfect.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eEK z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-abiword.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-abiword.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eE| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_b39!fLp+Xeo$8+c{Re-`h7iDeCpb?e}cH`Q4rVSUCBYUv5p3PyQO|yEA6Yo~M6x z7;AoFCBudnB90E4t&c6X{>@=tV5YY2--p__&W8;Qe7TJ?6_p~UwWhA^p1r2PCCj_P zmxoVIV#(&s!ne15jOiEU+$A<~!RrmTwV1c52h_X#tdVQjA*h}?lVif^ryF#HooboX z7Ptsblr@OZ-}JmvM3$Z7n%_pL&+|ZZbHThtC$m=d`n_#A zSRTIbX{WO@!;W?BLd&l$eXLXb_*3d9`T8S=&glFLI`HUwO4G4_CY_Cq0is*3?Fx1& zn#~|5Z{rdjE&a1b?(hxQOD4>2mJgqs#~uIqOXvIEA37Ts{{7*l@!Kx$r27=dpJ&2l z>_6OCs=nW**2P8an(+$WKo<=Wt`3fMuN5CDEYg@~<@x263jdx@Hcy|riai(C_-PmC zDx8_M@X7BGzHfrROA}w*2|g^(q}&i5-n>e(kl8pzU~j>^E2qytICK6Q*YukC_pPda zUhWS1bh;u)@uvqn|2(T&iHcJ1hE*rB=XF~+o{8@c*%Nx_)Z0gwc5)XhoKtUI{?SXX zR@d{7SLfgPwSw$Y4NG+;Gfe*e&77h!h2ygBT92Mr_}TO7ICpUV+4zxzOMp?TG3@}0(8A*k$tm~uJ^b?M5%+f; z-O?jr;Yv}?mJ?U(c>C7;+4nb={|+AQR%ej@Asw-{{MhQ98V7TwxgUGH*myzu@N&Mp ztX&J&Gl(uYb9Y-k!@j1;QS%E*4H+01R7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly z3@xmTO|1;gv<(cb3=F1ywm{X8o1c=IR>@#wU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kP Qfq{X+)78&qol`;+0EZ#?8vp| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eEK z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-arj.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-arj.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-bzip-compressed-tar.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-bzip-compressed-tar.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-bzip.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-bzip.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-compress.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-compress.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-compressed-tar.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-compressed-tar.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-cpio-compressed.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-cpio-compressed.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-cpio.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-cpio.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-deb.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-deb.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-dvi.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-dvi.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eE| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_8$4YcLp+XOoq9T7I#lG?{_5v_>2H2S zt~zplM&+z(0XmD7s8Qacb(()uKX9O1V=e zgq*s(_VpFNzdgd$k8aHDj5pRX%Jc0AR#s8zD=B>+bN0`^_j7(rJoqoS9(W&VNnJ@f8XJpMY_s9}lS_xG%?K779?H*MFQxZf8(+FkxRv2mJf zhV}>T>1|6J&Ohfk7QRu$`|0C+qK8eU1KKWViB9i1z*=1 z&){7@J6_J_SBT&)`9HUwZoZ`0e}3bfIQGXD27OJ1GIet~9UoNcEZ=r!{k)gA!&}Un z_uE@3{j`m9H<`@5SfnSY;ErGYyQRqj6>N>^2GMVyWiNg{HBG5R{|Ec~9*?DNUcP^M=Dk?v8HLJ^XB+oie_6ODPoyj+_}7x< z){%dV|@< z0-1J(uqrY*Bp4NRs1>ca7Bc6}+aqBsn{L;)C`w6aC@yG8FqOO*W|XSD<<&~7DXaN~ z9)4W({DgMA?!E5XNoSuvX}Ev7T}krCoU%1XHmwK?J#*jx&;f}xV#+3>5wY40&n-U4 zwEI}CI@@}UOuTAXp5|BM_IZfT?#TCfB!tkJjwfr~CT zg>eJZ2Ihhjtvx$tR)2~1w5VAa3AYZ6f#VMS9jGWZkhk&4P>)UxG3iv~~qc9++nL{r>U!O08W9M%~vq85kH;OI#yL zQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=IR>@#w oU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kPfq{X+)78&qol`;+0QzYb`2YX_ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-afm.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-afm.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc4303ee25be3648276debb9e0b71f47d2cecc5 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{oo-U3d9>=#%y`3ErE^@5Cdfi1IA>&yQ zx{YFsYcu0(Uc@9Fd=%`xG$H=W`4u--{LtxG`t6f_$J7f!AsTC&&Yn@3+?4sYJ4ka@ zic|5-iz|u?&)xhz=W2V&F-zmgXFM*mwr_p#=5Ouq-`A{uANVh`DlF#LtIyioa^>%H zT?jDv^7f>^y>+1aj)IRh5-a-VTkTd|{_odp?}%+zi_`whd72%vXo`~YRJIQ(f{JrJ zAMWCN>BE)Gv+|2d)NP+-bqBZUss(S~xF&0{KG%WkXX-NE?5z?LJT|HQ-`V62j?Rin z)!pY;xP4P*>a1WARQ&d?Dz8th>DI~YZr3Fb86WSsGb1)}VE|*?zSURH3T7;S@RZHQ zl;h=ZRypz99y8tt6|eL}wlsBfoYykr|EDMP>ENX(*4q}do3^V)e4n*VtL{(jROR

A2y7St&6X6?j+RfXy8{d(4l6GDfkXJl`kLBc%2<9KV-ml{@ zPn-Vp!vh1QL-S-4x0Ib&8r#YTL#->vNmn*R`X9^ZnL@mbH6CxKEng= zWNlr3JMp+Rz3I(U772LrNp;Py9ha^x5@Y=sv8is+pW^P_{MRjN-{}6avnhKc$1%A+ zC@pd8k$tv*@A?OprAY}M6y0HCdH&({@~sWs2LkFPa%JRnMQ5w6V|KI=b9b4sFFqk} zsm~jSElVdV9Xhv9Aj;b2gl+9seqHOys=w14SHG-`3(2kfmCJeBY~Hf?)8~qd%LK2N z{;VvUD8KC44UJo05@H>5>Zcr&TyJV5^QF+l?vVS&iM+M76>sU2xc$Xy zoy&pV9Zu^V)(hR#Q({~?MR2JWm!|d~(Wl|6`}-%|f3L4Se|>~b2-o7p>+R>ynDOGx z!}{KOhHFUyC)BMUg0hEdiEBhjN@7W>RdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$ro zfq|8Q!L-j7h71f02o1UUDVb@N3`PcqhPno3x`yT>t*I;7bhncr0V4trO$q6BgMeLz~JfX=d#Wzp$Pytug_rs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-bdf.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-bdf.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc4303ee25be3648276debb9e0b71f47d2cecc5 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{oo-U3d9>=#%y`3ErE^@5Cdfi1IA>&yQ zx{YFsYcu0(Uc@9Fd=%`xG$H=W`4u--{LtxG`t6f_$J7f!AsTC&&Yn@3+?4sYJ4ka@ zic|5-iz|u?&)xhz=W2V&F-zmgXFM*mwr_p#=5Ouq-`A{uANVh`DlF#LtIyioa^>%H zT?jDv^7f>^y>+1aj)IRh5-a-VTkTd|{_odp?}%+zi_`whd72%vXo`~YRJIQ(f{JrJ zAMWCN>BE)Gv+|2d)NP+-bqBZUss(S~xF&0{KG%WkXX-NE?5z?LJT|HQ-`V62j?Rin z)!pY;xP4P*>a1WARQ&d?Dz8th>DI~YZr3Fb86WSsGb1)}VE|*?zSURH3T7;S@RZHQ zl;h=ZRypz99y8tt6|eL}wlsBfoYykr|EDMP>ENX(*4q}do3^V)e4n*VtL{(jROR

A2y7St&6X6?j+RfXy8{d(4l6GDfkXJl`kLBc%2<9KV-ml{@ zPn-Vp!vh1QL-S-4x0Ib&8r#YTL#->vNmn*R`X9^ZnL@mbH6CxKEng= zWNlr3JMp+Rz3I(U772LrNp;Py9ha^x5@Y=sv8is+pW^P_{MRjN-{}6avnhKc$1%A+ zC@pd8k$tv*@A?OprAY}M6y0HCdH&({@~sWs2LkFPa%JRnMQ5w6V|KI=b9b4sFFqk} zsm~jSElVdV9Xhv9Aj;b2gl+9seqHOys=w14SHG-`3(2kfmCJeBY~Hf?)8~qd%LK2N z{;VvUD8KC44UJo05@H>5>Zcr&TyJV5^QF+l?vVS&iM+M76>sU2xc$Xy zoy&pV9Zu^V)(hR#Q({~?MR2JWm!|d~(Wl|6`}-%|f3L4Se|>~b2-o7p>+R>ynDOGx z!}{KOhHFUyC)BMUg0hEdiEBhjN@7W>RdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$ro zfq|8Q!L-j7h71f02o1UUDVb@N3`PcqhPno3x`yT>t*I;7bhncr0V4trO$q6BgMeLz~JfX=d#Wzp$Pytug_rs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-linux-psf.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-linux-psf.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc4303ee25be3648276debb9e0b71f47d2cecc5 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{oo-U3d9>=#%y`3ErE^@5Cdfi1IA>&yQ zx{YFsYcu0(Uc@9Fd=%`xG$H=W`4u--{LtxG`t6f_$J7f!AsTC&&Yn@3+?4sYJ4ka@ zic|5-iz|u?&)xhz=W2V&F-zmgXFM*mwr_p#=5Ouq-`A{uANVh`DlF#LtIyioa^>%H zT?jDv^7f>^y>+1aj)IRh5-a-VTkTd|{_odp?}%+zi_`whd72%vXo`~YRJIQ(f{JrJ zAMWCN>BE)Gv+|2d)NP+-bqBZUss(S~xF&0{KG%WkXX-NE?5z?LJT|HQ-`V62j?Rin z)!pY;xP4P*>a1WARQ&d?Dz8th>DI~YZr3Fb86WSsGb1)}VE|*?zSURH3T7;S@RZHQ zl;h=ZRypz99y8tt6|eL}wlsBfoYykr|EDMP>ENX(*4q}do3^V)e4n*VtL{(jROR

A2y7St&6X6?j+RfXy8{d(4l6GDfkXJl`kLBc%2<9KV-ml{@ zPn-Vp!vh1QL-S-4x0Ib&8r#YTL#->vNmn*R`X9^ZnL@mbH6CxKEng= zWNlr3JMp+Rz3I(U772LrNp;Py9ha^x5@Y=sv8is+pW^P_{MRjN-{}6avnhKc$1%A+ zC@pd8k$tv*@A?OprAY}M6y0HCdH&({@~sWs2LkFPa%JRnMQ5w6V|KI=b9b4sFFqk} zsm~jSElVdV9Xhv9Aj;b2gl+9seqHOys=w14SHG-`3(2kfmCJeBY~Hf?)8~qd%LK2N z{;VvUD8KC44UJo05@H>5>Zcr&TyJV5^QF+l?vVS&iM+M76>sU2xc$Xy zoy&pV9Zu^V)(hR#Q({~?MR2JWm!|d~(Wl|6`}-%|f3L4Se|>~b2-o7p>+R>ynDOGx z!}{KOhHFUyC)BMUg0hEdiEBhjN@7W>RdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$ro zfq|8Q!L-j7h71f02o1UUDVb@N3`PcqhPno3x`yT>t*I;7bhncr0V4trO$q6BgMeLz~JfX=d#Wzp$Pytug_rs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-pcf.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-pcf.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc4303ee25be3648276debb9e0b71f47d2cecc5 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{oo-U3d9>=#%y`3ErE^@5Cdfi1IA>&yQ zx{YFsYcu0(Uc@9Fd=%`xG$H=W`4u--{LtxG`t6f_$J7f!AsTC&&Yn@3+?4sYJ4ka@ zic|5-iz|u?&)xhz=W2V&F-zmgXFM*mwr_p#=5Ouq-`A{uANVh`DlF#LtIyioa^>%H zT?jDv^7f>^y>+1aj)IRh5-a-VTkTd|{_odp?}%+zi_`whd72%vXo`~YRJIQ(f{JrJ zAMWCN>BE)Gv+|2d)NP+-bqBZUss(S~xF&0{KG%WkXX-NE?5z?LJT|HQ-`V62j?Rin z)!pY;xP4P*>a1WARQ&d?Dz8th>DI~YZr3Fb86WSsGb1)}VE|*?zSURH3T7;S@RZHQ zl;h=ZRypz99y8tt6|eL}wlsBfoYykr|EDMP>ENX(*4q}do3^V)e4n*VtL{(jROR

A2y7St&6X6?j+RfXy8{d(4l6GDfkXJl`kLBc%2<9KV-ml{@ zPn-Vp!vh1QL-S-4x0Ib&8r#YTL#->vNmn*R`X9^ZnL@mbH6CxKEng= zWNlr3JMp+Rz3I(U772LrNp;Py9ha^x5@Y=sv8is+pW^P_{MRjN-{}6avnhKc$1%A+ zC@pd8k$tv*@A?OprAY}M6y0HCdH&({@~sWs2LkFPa%JRnMQ5w6V|KI=b9b4sFFqk} zsm~jSElVdV9Xhv9Aj;b2gl+9seqHOys=w14SHG-`3(2kfmCJeBY~Hf?)8~qd%LK2N z{;VvUD8KC44UJo05@H>5>Zcr&TyJV5^QF+l?vVS&iM+M76>sU2xc$Xy zoy&pV9Zu^V)(hR#Q({~?MR2JWm!|d~(Wl|6`}-%|f3L4Se|>~b2-o7p>+R>ynDOGx z!}{KOhHFUyC)BMUg0hEdiEBhjN@7W>RdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$ro zfq|8Q!L-j7h71f02o1UUDVb@N3`PcqhPno3x`yT>t*I;7bhncr0V4trO$q6BgMeLz~JfX=d#Wzp$Pytug_rs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-sunos-news.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-sunos-news.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc4303ee25be3648276debb9e0b71f47d2cecc5 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{oo-U3d9>=#%y`3ErE^@5Cdfi1IA>&yQ zx{YFsYcu0(Uc@9Fd=%`xG$H=W`4u--{LtxG`t6f_$J7f!AsTC&&Yn@3+?4sYJ4ka@ zic|5-iz|u?&)xhz=W2V&F-zmgXFM*mwr_p#=5Ouq-`A{uANVh`DlF#LtIyioa^>%H zT?jDv^7f>^y>+1aj)IRh5-a-VTkTd|{_odp?}%+zi_`whd72%vXo`~YRJIQ(f{JrJ zAMWCN>BE)Gv+|2d)NP+-bqBZUss(S~xF&0{KG%WkXX-NE?5z?LJT|HQ-`V62j?Rin z)!pY;xP4P*>a1WARQ&d?Dz8th>DI~YZr3Fb86WSsGb1)}VE|*?zSURH3T7;S@RZHQ zl;h=ZRypz99y8tt6|eL}wlsBfoYykr|EDMP>ENX(*4q}do3^V)e4n*VtL{(jROR

A2y7St&6X6?j+RfXy8{d(4l6GDfkXJl`kLBc%2<9KV-ml{@ zPn-Vp!vh1QL-S-4x0Ib&8r#YTL#->vNmn*R`X9^ZnL@mbH6CxKEng= zWNlr3JMp+Rz3I(U772LrNp;Py9ha^x5@Y=sv8is+pW^P_{MRjN-{}6avnhKc$1%A+ zC@pd8k$tv*@A?OprAY}M6y0HCdH&({@~sWs2LkFPa%JRnMQ5w6V|KI=b9b4sFFqk} zsm~jSElVdV9Xhv9Aj;b2gl+9seqHOys=w14SHG-`3(2kfmCJeBY~Hf?)8~qd%LK2N z{;VvUD8KC44UJo05@H>5>Zcr&TyJV5^QF+l?vVS&iM+M76>sU2xc$Xy zoy&pV9Zu^V)(hR#Q({~?MR2JWm!|d~(Wl|6`}-%|f3L4Se|>~b2-o7p>+R>ynDOGx z!}{KOhHFUyC)BMUg0hEdiEBhjN@7W>RdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$ro zfq|8Q!L-j7h71f02o1UUDVb@N3`PcqhPno3x`yT>t*I;7bhncr0V4trO$q6BgMeLz~JfX=d#Wzp$Pytug_rs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-ttf.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-font-ttf.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc4303ee25be3648276debb9e0b71f47d2cecc5 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{oo-U3d9>=#%y`3ErE^@5Cdfi1IA>&yQ zx{YFsYcu0(Uc@9Fd=%`xG$H=W`4u--{LtxG`t6f_$J7f!AsTC&&Yn@3+?4sYJ4ka@ zic|5-iz|u?&)xhz=W2V&F-zmgXFM*mwr_p#=5Ouq-`A{uANVh`DlF#LtIyioa^>%H zT?jDv^7f>^y>+1aj)IRh5-a-VTkTd|{_odp?}%+zi_`whd72%vXo`~YRJIQ(f{JrJ zAMWCN>BE)Gv+|2d)NP+-bqBZUss(S~xF&0{KG%WkXX-NE?5z?LJT|HQ-`V62j?Rin z)!pY;xP4P*>a1WARQ&d?Dz8th>DI~YZr3Fb86WSsGb1)}VE|*?zSURH3T7;S@RZHQ zl;h=ZRypz99y8tt6|eL}wlsBfoYykr|EDMP>ENX(*4q}do3^V)e4n*VtL{(jROR

A2y7St&6X6?j+RfXy8{d(4l6GDfkXJl`kLBc%2<9KV-ml{@ zPn-Vp!vh1QL-S-4x0Ib&8r#YTL#->vNmn*R`X9^ZnL@mbH6CxKEng= zWNlr3JMp+Rz3I(U772LrNp;Py9ha^x5@Y=sv8is+pW^P_{MRjN-{}6avnhKc$1%A+ zC@pd8k$tv*@A?OprAY}M6y0HCdH&({@~sWs2LkFPa%JRnMQ5w6V|KI=b9b4sFFqk} zsm~jSElVdV9Xhv9Aj;b2gl+9seqHOys=w14SHG-`3(2kfmCJeBY~Hf?)8~qd%LK2N z{;VvUD8KC44UJo05@H>5>Zcr&TyJV5^QF+l?vVS&iM+M76>sU2xc$Xy zoy&pV9Zu^V)(hR#Q({~?MR2JWm!|d~(Wl|6`}-%|f3L4Se|>~b2-o7p>+R>ynDOGx z!}{KOhHFUyC)BMUg0hEdiEBhjN@7W>RdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$ro zfq|8Q!L-j7h71f02o1UUDVb@N3`PcqhPno3x`yT>t*I;7bhncr0V4trO$q6BgMeLz~JfX=d#Wzp$Pytug_rs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-gnumeric.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-gnumeric.png new file mode 100644 index 0000000000000000000000000000000000000000..1c7bc745d6965403174e35e917e57bbf5b41e329 GIT binary patch literal 1178 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_b39!fLp+Xeo$8+c{Re-`h7iDeCpb?e}cH`Q4rVSUCBYUv5p3PyQO|yEA6Yo~M6x z7;AoFCBudnB90E4t&c6X{>@=tV5YY2--p__&W8;Qe7TJ?6_p~UwWhA^p1r2PCCj_P zmxoVIV#(&s!ne15jOiEU+$A<~!RrmTwV1c52h_X#tdVQjA*h}?lVif^ryF#HooboX z7Ptsblr@OZ-}JmvM3$Z7n%_pL&+|ZZbHThtC$m=d`n_#A zSRTIbX{WO@!;W?BLd&l$eXLXb_*3d9`T8S=&glFLI`HUwO4G4_CY_Cq0is*3?Fx1& zn#~|5Z{rdjE&a1b?(hxQOD4>2mJgqs#~uIqOXvIEA37Ts{{7*l@!Kx$r27=dpJ&2l z>_6OCs=nW**2P8an(+$WKo<=Wt`3fMuN5CDEYg@~<@x263jdx@Hcy|riai(C_-PmC zDx8_M@X7BGzHfrROA}w*2|g^(q}&i5-n>e(kl8pzU~j>^E2qytICK6Q*YukC_pPda zUhWS1bh;u)@uvqn|2(T&iHcJ1hE*rB=XF~+o{8@c*%Nx_)Z0gwc5)XhoKtUI{?SXX zR@d{7SLfgPwSw$Y4NG+;Gfe*e&77h!h2ygBT92Mr_}TO7ICpUV+4zxzOMp?TG3@}0(8A*k$tm~uJ^b?M5%+f; z-O?jr;Yv}?mJ?U(c>C7;+4nb={|+AQR%ej@Asw-{{MhQ98V7TwxgUGH*myzu@N&Mp ztX&J&Gl(uYb9Y-k!@j1;QS%E*4H+01R7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly z3@xmTO|1;gv<(cb3=F1ywm{X8o1c=IR>@#wU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kP Qfq{X+)78&qol`;+0EZ#?8vpK z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-gzpostscript.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-gzpostscript.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eEK z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-killustrator.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-killustrator.png new file mode 100644 index 0000000000000000000000000000000000000000..35b6094c35fb17e6c523022e1c0d97433637abc1 GIT binary patch literal 1063 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_nw~C>As)xyPW8`_36(i+pPzQmFHQZX z$!s-=fFn^8q5@r9_%CtA*<|#~iF)@t^#^4rC+W`<-P7{uppva5IeAsW(ZH*Ua<#~+r>)zMefByaN-kAgcH+pL{v>J22XZrkq z)3@s5eR8w;FCF|dF}$zC(Cu!1YsZK3Pf^)=al0zGPB27dUu~C6O=Y=eEfl_-v#0XhJ%F*-i8BN?w_Kw!zPj-4c7-cgSk`EzOAOU1eDj_I~d<=XTA1 z9m*ykXtPv9)Y(khE;iWl_vD-_uZ}#FJH!wp|DY=An#z@|&{&NfwBN;k zsyRreDaa(+@a(bx4u|6}{a!M=M6CaF@a*c-HouN6oVRz`xicX>e0v^>c5tY9X5_DX z{=ICM=vN_2Sl~7SQlz;VfgnEo!HD`O$t`Ld5!2N#~2q-aKixSEU0S%PafcHn;L6*F;TGOTXAC%`3pTcCn7+M(;OskE+C4t@WK(_ebGj#Kg`;{$Kr4 zcew6*ZyY=Cp0Am>w6wGcm!SUsFE+u#f>GIF>tYUm-}~5_;k@nE`SR;x?}vtL{5*R_ z?Lo`quliRv=>__rgGN`y?;o$5wJHrwr4*EEzJ3+jp0_q|XYKFBKZD=TIT86} zj&<$7&7al(Pc(Ngtu=gp%=CGY(^Joye zz_{x$!{6+Bhb{lN?bs*$Qs(A1w@ZhY8kk$8S8xB7obO8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UCk6O~xH6yuIXO8V9v%h;261t5Sy|bDfB*#r1qKENB_$;W1_o7C zRV^(o1_lOQU0sM^enBp(0Svi$*(s?>DXB?O(UF;1>9MiVq2a-y;lcR@xmnp68JX!R zsY&q(agovCFJ3&4j*aZ-YQ1>z!u$pE^9ynpEnbwDpOasZd+5-iMT-|roi??xsj;`W zXT{3pAVZq>hqWJzw6snMt<8yK&o9U=?A}st$5ZDV(caP4(bd{%Zr+`pyS%A+^`d!e z6csmY*sw7vY3J>_U44Cr4jnvn_~7Bj#=~7*M~)mkx_R@lV@Ho2KYC{S_KO!UTn`Mq zdGX?{t5@%Md*8Wo<<6ZucY}lPPA<8B@7{wucOKlk_u&5h2M-=Rdi3b=qeqV)KYsG$ z${3tB^m74k|JNr+5{{Mo4|NsBLJ3o6F z0|SFaNswPK10xeN8yhtkASeSsF;|zgrt2F4_BcNc~ZR#^`Q21XH27sn8d;N*k@ye2vZ4N4J* z7TNId&WLVM-C|Ix;drL#Tu-NePmhO>m#4S?`4cD3l%zFys<5}1o4fv0Px<}x*Dp4) zgQ}mLq@$!(cNOp1w8_ZGsOa=Vp{I6VOP9V2o7N{FYs%4?(SO4tzgl|xqCI!^{Bde= z$qt*)-Mn^dcA95GLPBMvw$q|D3i_soTNT!?Sh8fz8W~R|2|gz+ZLNtarzSe`mdRe- zy46D{gF$WK+a9(pk^v2yW*RYzDXe<*By)MYt5e+NbLaf-3xrOX=ol4x+^^UFtl#y9 ziGqsfjwmJPq%2p{&{>g|o}_j95Rdrtzzv&&g@vb2ni8;m^W?{g51URJY~D~<@VSeF z^TX!iO-9Cs4_Fy4X=X__gqoOu5_gGfL`h0wNvc(HQEFmIDua=Mk%6v(rLKWlh@pj* zv8k1znYMv}m4U&u&lZL#8glbfGSeymdKI;Vst0Qp0sg#Z8m literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-kspread.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-kspread.png new file mode 100644 index 0000000000000000000000000000000000000000..1c7bc745d6965403174e35e917e57bbf5b41e329 GIT binary patch literal 1178 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_b39!fLp+Xeo$8+c{Re-`h7iDeCpb?e}cH`Q4rVSUCBYUv5p3PyQO|yEA6Yo~M6x z7;AoFCBudnB90E4t&c6X{>@=tV5YY2--p__&W8;Qe7TJ?6_p~UwWhA^p1r2PCCj_P zmxoVIV#(&s!ne15jOiEU+$A<~!RrmTwV1c52h_X#tdVQjA*h}?lVif^ryF#HooboX z7Ptsblr@OZ-}JmvM3$Z7n%_pL&+|ZZbHThtC$m=d`n_#A zSRTIbX{WO@!;W?BLd&l$eXLXb_*3d9`T8S=&glFLI`HUwO4G4_CY_Cq0is*3?Fx1& zn#~|5Z{rdjE&a1b?(hxQOD4>2mJgqs#~uIqOXvIEA37Ts{{7*l@!Kx$r27=dpJ&2l z>_6OCs=nW**2P8an(+$WKo<=Wt`3fMuN5CDEYg@~<@x263jdx@Hcy|riai(C_-PmC zDx8_M@X7BGzHfrROA}w*2|g^(q}&i5-n>e(kl8pzU~j>^E2qytICK6Q*YukC_pPda zUhWS1bh;u)@uvqn|2(T&iHcJ1hE*rB=XF~+o{8@c*%Nx_)Z0gwc5)XhoKtUI{?SXX zR@d{7SLfgPwSw$Y4NG+;Gfe*e&77h!h2ygBT92Mr_}TO7ICpUV+4zxzOMp?TG3@}0(8A*k$tm~uJ^b?M5%+f; z-O?jr;Yv}?mJ?U(c>C7;+4nb={|+AQR%ej@Asw-{{MhQ98V7TwxgUGH*myzu@N&Mp ztX&J&Gl(uYb9Y-k!@j1;QS%E*4H+01R7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly z3@xmTO|1;gv<(cb3=F1ywm{X8o1c=IR>@#wU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kP Qfq{X+)78&qol`;+0EZ#?8vp| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eEK z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-lhz.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-lhz.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-lzma-compressed-tar.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-lzma-compressed-tar.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-lzma.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-lzma.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-ms-dos-executable.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-ms-dos-executable.png new file mode 100644 index 0000000000000000000000000000000000000000..9843f26fe3ba8d9bfcf2540ced3fee6e8a11c9ba GIT binary patch literal 1198 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_8$4YcLp+XOoq9T7I#lG?{_5v_>2H2S zt~zplM&+z(0XmD7s8Qacb(()uKX9O1V=e zgq*s(_VpFNzdgd$k8aHDj5pRX%Jc0AR#s8zD=B>+bN0`^_j7(rJoqoS9(W&VNnJ@f8XJpMY_s9}lS_xG%?K779?H*MFQxZf8(+FkxRv2mJf zhV}>T>1|6J&Ohfk7QRu$`|0C+qK8eU1KKWViB9i1z*=1 z&){7@J6_J_SBT&)`9HUwZoZ`0e}3bfIQGXD27OJ1GIet~9UoNcEZ=r!{k)gA!&}Un z_uE@3{j`m9H<`@5SfnSY;ErGYyQRqj6>N>^2GMVyWiNg{HBG5R{|Ec~9*?DNUcP^M=Dk?v8HLJ^XB+oie_6ODPoyj+_}7x< z){%dV|@< z0-1J(uqrY*Bp4NRs1>ca7Bc6}+aqBsn{L;)C`w6aC@yG8FqOO*W|XSD<<&~7DXaN~ z9)4W({DgMA?!E5XNoSuvX}Ev7T}krCoU%1XHmwK?J#*jx&;f}xV#+3>5wY40&n-U4 zwEI}CI@@}UOuTAXp5|BM_IZfT?#TCfB!tkJjwfr~CT zg>eJZ2Ihhjtvx$tR)2~1w5VAa3AYZ6f#VMS9jGWZkhk&4P>)UxG3iv~~qc9++nL{r>U!O08W9M%~vq85kH;OI#yL zQW8s2t&)pU6H8JVj0}tnbPX(Z4a`CeEv$@9tqjey4GgRd45odyFhtRio1c=IR>@#w oU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kPfq{X+)78&qol`;+0QzYb`2YX_ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-perl.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-perl.png new file mode 100644 index 0000000000000000000000000000000000000000..16137b7356ad3bea68bdd938a29bd46ec6ca4ad8 GIT binary patch literal 1009 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp4hH^73*928PnoQiyzcdAWmwLsV2$ZeDhKXG=#{YgKCw^yxEZ z%$PlU_T0I1=gpfpfByUh3l=P1ym-lyB}4q*REZ^X5IR= z>({T}uwlcdO`A4v-n?bYmaSX2ZriqP`}XZScI?=>bLXyIyLRv1y=Tv!y?giW+qZB3 z{{06I95{IJ;Gsi@PJ_UivuDqqJ9qBVrAwDDUA}zf^5rX6uE6lsD_5^xy?X81wHw#3 z-@AA3{{8z89z1yX@ZrNp5b*f%qsL(I z`SWMbLEy!U=g(g}e*p$BU%Y(r;^j*a0j6HQeEIU#%U59H)vH&pUcY_~B0%(;*Kgju zdGq$|+yDRn+dhB4g@J)Vq$J2Mn1Pv#M@URT)4<5c*wiH=GO?+t*}!tD00RR9W0JSK zOT^o)NBS5T7#%!a978mMYcKBhVh$8wd+_uB%)1qwDk^hbt5}aZ^>Ix5#jvln|4HIN1Mj>G4-d&(?doAf?aZy)1)j&#?*i)#`X7#LJbTq8sH%t8z;tc*>q49&C+46F4$-hRu^5z<89ZJ6T-G@yGywo5yYM>z literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-php.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-php.png new file mode 100644 index 0000000000000000000000000000000000000000..d75ba938bc84dfdf37b63fb975567c6e5a789eca GIT binary patch literal 1256 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_uRL8GLp+XeoqF0oBwXgW{qu8oc2043 zY@3-V!RnoHOJo%@BWu>=S$eZp6kg5CnSHF}di{cxfwQ+msVD>G)4 zBsD!XarE^Y{L1KSWtk#+@VNV*J(2Og1y|2@ z22cNPyWM4B0EZ$=a&mIaOTNNCdu#W^#(P$1x`gH`KMjqW^ipTxONFx24u-*d?uYef zdak=KwUeVnuz>WN$_;g;5eONH|IgW^!J^0o97q# zehPEuJ>bsjedTiX>~bsqwNtg`ELm42UVcn`W&Pb=)%iT@D@@KX)+;-4ESYlVoc;vA zr5|>kVvOQWyKwPd=k2#{9FDh6EX?Ga5@dd{LaO$v!c4C ztl?C;S>*NWcH3@>Bz2mozO?juE7jepH7$hQ^0JcbxrgV|PNwjj^78gjoBZbM&Ilh# zhKEfJHKEf)4J|jj6g!)Kt=?lZZ{E{qhedg0mh=eK{VC<}ol#R*Bfom}Y95;z4V$bQ zc3Wo^`R?p(yeP?&t=qTD)~?TN_l$U+%`)Bsr#a-@bxLB@#kvExoIajmz*6vZW&>~S zzlVy`lne9j&Q`KmJ=t&hOKB-Zne&U>g>>8}>#SeWaWqNih>?rXq?rLbzCZswKPKs~ zU5@6&mtMXU;9Giib;c|&qq(VZ{hz)+;Q4jP=Hkb9 z@&A7Qy~Gs2mC|sgtT~1;WC2G-s_iTx#hi1>^XLBEbtdxiDvK^J2aeN5zRDXHowwap zzxMh0?(jy{1hI}a%#T|Ci`;hJYO^A_Hl9JqgYo3o;|y!Q8tskw%ROo88NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp4hH^73*928PnoQiyzcdAWmwLsV2$ZeDhKXG=#{YgKCw^yxEZ z%$PlU_T0I1=gpfpfByUh3l=P1ym-lyB}4q*REZ^X5IR= z>({T}uwlcdO`A4v-n?bYmaSX2ZriqP`}XZScI?=>bLXyIyLRv1y=Tv!y?giW+qZB3 z{{06I95{IJ;Gsi@PJ_UivuDqqJ9qBVrAwDDUA}zf^5rX6uE6lsD_5^xy?X81wHw#3 z-@AA3{{8z89z1yX@ZrNp5b*f%qsL(I z`SWMbLEy!U=g(g}e*p$BU%Y(r;^j*a0j6HQeEIU#%U59H)vH&pUcY_~B0%(;*Kgju zdGq$|+yDRn+dhB4g@J)Vq$J2Mn1Pv#M@URT)4<5c*wiH=GO?+t*}!tD00RR9W0JSK zOT^o)NBS5T7#%!a978mMYcKBhVh$8wd+_uB%)1qwDk^hbt5}aZ^>Ix5#jvln|4HIN1Mj>G4-d&(?doAf?aZy)1)j&#?*i)#`X7#LJbTq8sH%t8z;tc*>q49&C+46F4$-hRu^5z<89ZJ6T-G@yGywo5yYM>z literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-rar.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-rar.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-rpm.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-rpm.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-scribus.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-scribus.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eE8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp4hH^73*928PnoQiyzcdAWmwLsV2$ZeDhKXG=#{YgKCw^yxEZ z%$PlU_T0I1=gpfpfByUh3l=P1ym-lyB}4q*REZ^X5IR= z>({T}uwlcdO`A4v-n?bYmaSX2ZriqP`}XZScI?=>bLXyIyLRv1y=Tv!y?giW+qZB3 z{{06I95{IJ;Gsi@PJ_UivuDqqJ9qBVrAwDDUA}zf^5rX6uE6lsD_5^xy?X81wHw#3 z-@AA3{{8z89z1yX@ZrNp5b*f%qsL(I z`SWMbLEy!U=g(g}e*p$BU%Y(r;^j*a0j6HQeEIU#%U59H)vH&pUcY_~B0%(;*Kgju zdGq$|+yDRn+dhB4g@J)Vq$J2Mn1Pv#M@URT)4<5c*wiH=GO?+t*}!tD00RR9W0JSK zOT^o)NBS5T7#%!a978mMYcKBhVh$8wd+_uB%)1qwDk^hbt5}aZ^>Ix5#jvln|4HIN1Mj>G4-d&(?doAf?aZy)1)j&#?*i)#`X7#LJbTq8sH%t8z;tc*>q49&C+46F4$-hRu^5z<89ZJ6T-G@yGywo5yYM>z literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-shockwave-flash.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-shockwave-flash.png new file mode 100644 index 0000000000000000000000000000000000000000..c9dbcb2d0a658550e5eca6e0e00704de81e9af9c GIT binary patch literal 1386 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq^B*)5S5w1m=> zB%HC3!>qxIO}m-r$+mg<_y0fHu;M{XP0Tm{x}SdMe%9@O|IPmXEYttRTO$rVH{2pFxaYZ$-LmV;7Mp3URzT)BIySL-@WZBt5{57=~ za!mWaeJN#Xyj?B*i>-?Ji2USLb;~TQOt)^|?(|>QT({tD8u!$7q32GDxIdrz@>7GF zv+L7m^2>MG%0BpY(=+nzvWwp9xVs|+T`NwkuUb`gY~z;}wsc#bpKKW)x2==jqPuan z!u<){mX(nK0Tn{8q*fisGM{|PVfIQsjgUKC-ZvhbLT_ub60D8 zKa|xR`{B3xfeb6(sW;9jgnKa>H~(p}`LXd1-|5=rt2fOwXyBBY`gFqF#p*Iv1`ijX z(>b-*C2C(5L-0w-4GKS3=&*8i`#FA`sia{a&UH3i@8Vib-OY}rbD5=POD|x$pZu)g z_FX=?d~;a_?TU_~_3KtRE%p06S;*Qd`e4#;Mw6LZ8d`b{Medqc=B#Jge6*t}H6XN> zFDq;H3$1C-T?~rOv$xD&HsRZXJJB8D@~f3JEB}i~UV8E*zr<|G`_n0tECtuCUERjb z`+VW9WkLlz0_r!m{j)Q8vaqt{eD`Cq1$TC9-#YU2D4+J#PYgTrj@&#Q6Ur35l66U@ zy8^H4et%n@`zm#;k?JJ{s~=naXk*W;KQvi;$>nG#yDJOtEE8pPNvaD!Bt9w8w@vCq zzp>pv?jHZ1#{3kHs^7Z~+zj#O|Ged*!}gqn4f4n8Y8`$H{x4apwW0DeyQtE}1eGq) znJtrE%X16J35scod~|pD*yLBT%&0W#KqzDR`+JTP4XYaZqdv{6QRkHP@LFPV=Z35M z(&kmGSI1g>iT%{#p<`lO865w(;HDRkL4U1`ZOM-ZEm4b?q}-6&>gJfozO!k|)r?Su zsj`hn{@!PrEz7JECUS)Ho1<42*Nd-J2D8s@FrW3b+K55(<<|=rat%KUJ+$4|u)U-B zWA~%hdX*Z@pRo#$&VT%I$NuJ=7nNZpS7KDM&&OQ3cRtPH_YKB{8hM(3E^o-(8pUfh zmrtgTi-Vj0^O_s3ryT{}zqzy1mh<_ezUdw5M}-ts`^1|ZMA)4S=PNW!J-49X|M7*l zgUa9Bnzu{6sJv{JlikvbSl> z_P)wn*PMjnB$1-loD&HKJ2swT|Gy=&c}7-T+KGc5z5NO^eny)c)H$9$5}`M{e}zkn zO>wR95rt)|zV^f(U(>i%``g+2Z+}=>e#+*ru(LbBz`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? aBXcW5bBKnmiN(yIBF@v*&t;ucLK6T89c4QJ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-stuffit.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-stuffit.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-tar.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-tar.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-tarz.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-tarz.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-tex.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-application-x-tex.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eE| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_uRL8GLp+XeoqF0oBwXgW{qu8oc2043 zY@3-V!RnoHOJo%@BWu>=S$eZp6kg5CnSHF}di{cxfwQ+msVD>G)4 zBsD!XarE^Y{L1KSWtk#+@VNV*J(2Og1y|2@ z22cNPyWM4B0EZ$=a&mIaOTNNCdu#W^#(P$1x`gH`KMjqW^ipTxONFx24u-*d?uYef zdak=KwUeVnuz>WN$_;g;5eONH|IgW^!J^0o97q# zehPEuJ>bsjedTiX>~bsqwNtg`ELm42UVcn`W&Pb=)%iT@D@@KX)+;-4ESYlVoc;vA zr5|>kVvOQWyKwPd=k2#{9FDh6EX?Ga5@dd{LaO$v!c4C ztl?C;S>*NWcH3@>Bz2mozO?juE7jepH7$hQ^0JcbxrgV|PNwjj^78gjoBZbM&Ilh# zhKEfJHKEf)4J|jj6g!)Kt=?lZZ{E{qhedg0mh=eK{VC<}ol#R*Bfom}Y95;z4V$bQ zc3Wo^`R?p(yeP?&t=qTD)~?TN_l$U+%`)Bsr#a-@bxLB@#kvExoIajmz*6vZW&>~S zzlVy`lne9j&Q`KmJ=t&hOKB-Zne&U>g>>8}>#SeWaWqNih>?rXq?rLbzCZswKPKs~ zU5@6&mtMXU;9Giib;c|&qq(VZ{hz)+;Q4jP=Hkb9 z@&A7Qy~Gs2mC|sgtT~1;WC2G-s_iTx#hi1>^XLBEbtdxiDvK^J2aeN5zRDXHowwap zzxMh0?(jy{1hI}a%#T|Ci`;hJYO^A_Hl9JqgYo3o;|y!Q8tskw%ROo8K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-audio.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-audio.png new file mode 100644 index 0000000000000000000000000000000000000000..02ed64079b6f523eea63c2557e4b20afeefde514 GIT binary patch literal 1124 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_j-D=#As)xyPCcJJ$5rCE{rNqg_wBy9 zCUe%B%v+0`0wyfukc$#vZJyMuz~MF3Hsphl%LlcJ-ugy!#}7)Z{LdD-3Unm|s;~!g z`U(a%wYI!bn?1w#+jDDsIsUxc3CSL>4tDd~*f1NP|2*@(u`$n|{Qp}|?$@+FP4);OTa?`he7^P~Q;IpW6N*h7DZ{I079ULqb_geof{# zuixsmcWb)K(&zHqRppnbFE184 zAhT7pbxjL*^^bF*3s42~Jy4aBrFtuWhaezqk#iYZsvxH3*+&aG5F-Tmz$Ncfa zYT2ub5*v?)Ens9kJE>qt(+fvdd6$0Hj*H9_-W_!=b~+PyWXa0k&z<*`bgHbKQ>DT( zHDjya9_9;WL1r6@)8C%4`S#1^-#fQE3a9oqyt?z_vDsF6_x1i!v%hF3Ki+ctt&ZFB z4ra$(A>Yz>KB}INb}L2onifCn-EREV@W+)|F{UXCq`ojXOuDgtxtzAIO=;mZ8ym~X z-#*LU+H1A-*!PmE*+&G9%*rsRu`(_F_VW3>+N<;C&RI6!Jav8S=`izs2Y;&Ft3JsW zB%qv}{CH(#zRsqrdpvvio?BNu-?{P1yA{W#>hQeG9a|!C zGUDf2!C#enbN6iKp74f!&i;sXSFe4#X`=l0tJNDb>pM{|ztzX(JzYC3KH^tc{LZqq z6X)*_n05DNUZ`Ksl*G6Tg1d)IRmLKNq{_oDj!^qEPBP();NvipyZNqH=V~-to?N}cv z{EIDQ6Zy7xIfKOk{-pOS-oM%R*8igW>g4%Wbwvye45}rr5hW>!C8<`)MX8A;sSHL2 zMh3bDmbwOJA%+%K#->(=X4(b@Rt5&sK3f=~Xvob^$xN$cFfuSS)HN{EH8c+~G_o=> zw=y(`XxN%q%*?>RAPKS|I6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#WDFy}x22WQ% Jmvv4FO#r(M-}3+f literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-image.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-image.png new file mode 100644 index 0000000000000000000000000000000000000000..35b6094c35fb17e6c523022e1c0d97433637abc1 GIT binary patch literal 1063 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-python.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-python.png new file mode 100644 index 0000000000000000000000000000000000000000..16137b7356ad3bea68bdd938a29bd46ec6ca4ad8 GIT binary patch literal 1009 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp4hH^73*928PnoQiyzcdAWmwLsV2$ZeDhKXG=#{YgKCw^yxEZ z%$PlU_T0I1=gpfpfByUh3l=P1ym-lyB}4q*REZ^X5IR= z>({T}uwlcdO`A4v-n?bYmaSX2ZriqP`}XZScI?=>bLXyIyLRv1y=Tv!y?giW+qZB3 z{{06I95{IJ;Gsi@PJ_UivuDqqJ9qBVrAwDDUA}zf^5rX6uE6lsD_5^xy?X81wHw#3 z-@AA3{{8z89z1yX@ZrNp5b*f%qsL(I z`SWMbLEy!U=g(g}e*p$BU%Y(r;^j*a0j6HQeEIU#%U59H)vH&pUcY_~B0%(;*Kgju zdGq$|+yDRn+dhB4g@J)Vq$J2Mn1Pv#M@URT)4<5c*wiH=GO?+t*}!tD00RR9W0JSK zOT^o)NBS5T7#%!a978mMYcKBhVh$8wd+_uB%)1qwDk^hbt5}aZ^>Ix5#jvln|4HIN1Mj>G4-d&(?doAf?aZy)1)j&#?*i)#`X7#LJbTq8sH%t8z;tc*>q49&C+46F4$-hRu^5z<89ZJ6T-G@yGywo5yYM>z literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-sh.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-sh.png new file mode 100644 index 0000000000000000000000000000000000000000..16137b7356ad3bea68bdd938a29bd46ec6ca4ad8 GIT binary patch literal 1009 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp4hH^73*928PnoQiyzcdAWmwLsV2$ZeDhKXG=#{YgKCw^yxEZ z%$PlU_T0I1=gpfpfByUh3l=P1ym-lyB}4q*REZ^X5IR= z>({T}uwlcdO`A4v-n?bYmaSX2ZriqP`}XZScI?=>bLXyIyLRv1y=Tv!y?giW+qZB3 z{{06I95{IJ;Gsi@PJ_UivuDqqJ9qBVrAwDDUA}zf^5rX6uE6lsD_5^xy?X81wHw#3 z-@AA3{{8z89z1yX@ZrNp5b*f%qsL(I z`SWMbLEy!U=g(g}e*p$BU%Y(r;^j*a0j6HQeEIU#%U59H)vH&pUcY_~B0%(;*Kgju zdGq$|+yDRn+dhB4g@J)Vq$J2Mn1Pv#M@URT)4<5c*wiH=GO?+t*}!tD00RR9W0JSK zOT^o)NBS5T7#%!a978mMYcKBhVh$8wd+_uB%)1qwDk^hbt5}aZ^>Ix5#jvln|4HIN1Mj>G4-d&(?doAf?aZy)1)j&#?*i)#`X7#LJbTq8sH%t8z;tc*>q49&C+46F4$-hRu^5z<89ZJ6T-G@yGywo5yYM>z literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-vcalendar.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-vcalendar.png new file mode 100644 index 0000000000000000000000000000000000000000..33ea6a3ee697cf20eed140c5eb871994cb33def5 GIT binary patch literal 1212 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq{9Sr;B5V$MLIEqBCM$McVf7ob%*P(PF73 z%ha`0mWDZcT;>uIiO!B^G2|3X?hwoTq#&`O#mq}OQ@AK_g@4uOU|8KswM)Jr0*&1wee-r+A zq~vYmesTZu?_1KRe_S}xuyR$*_{IdDHq=ekVC+f=!W!Tr6s{74N zI{r=l#-$r4UM$>hc#J`y(`Cg<&d#mn>(}aNJ@`89-s{g*#YVUGC|m^d#}p}WND?Ax5Wx_QRJlXGtWvY6;0p~&LI zwdLD`@4vIUxI9+A<6&#!P|Wk(w_(SLeay^Twr>^s@Ovh2d*`tvAAkSk+hW_^=A4Mz ze`(ptlttHGf8{#8DNNP;*oUn5a&mWeOl+`k5GZ`6wE0Y`>GW&6R;_Tbn!ApV?bOCx z>-LcBv#0OI{;09Dk>l4q{ph*$b2sS%~F!<7wkT2v^pgr zbN_w)DVKiK*e#jjp(*IJrpHUu>9teKwN{U%lQfpz*t2rt=jZ1I{g13%v&M<*;DZy6 zcd!56#T(fl>z@8wJL zmQ6|hzc;f9IY@OdcRTQS>`Xo+s$s)yK5d<8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1 z?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_LnA9Ab1Or0h=#3+#mu0R#M9N!Wt~$(699nK BAYA|e literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-vcard.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-vcard.png new file mode 100644 index 0000000000000000000000000000000000000000..6d75399eef3e4637e5c3fc96c017b85f7ab45e28 GIT binary patch literal 1019 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}hae?46sLp+XeopL@~CRO6N{d;R`YvbLU z?Khn*Gu$nb6?&mrl%>1gY2hLTrzr}L7Jhx_YP0%+_xVN3S50}b_QlceD2<30OQ&q( zTurH0%E1%DO{&5C40`jcda=imIu|9u zYyY;G^F-{dF5Oq$UMc#~^|6V#5JSSl-s1Jg3fH8Hv|Q0<4KuSU`TH>BqIs4pgVxvU zH*@1{`7;@&rF!!Ix%#z`tIWxvjjMcf@7~+aE{2H*k7b_|+SRIjkh39oc0-y0&!pBM zLF4_l3*y&5GVN~`xDnew^D1wd-&T&;bSsB@r-a=LPo2E`>cafB0%AFRy6YG6b_%vs zoPE4wc5c}`YePW=VTQ{t#VfWltbV;YTr)84{;~XPFR!mY(sr=mnCkuNkj0aJTTic# zeR%mj*G&dRmIc8q${d}(%$w~KA~b~})e6rsuteDug)NbGnw06;WTxWensNBR4epI) z)f{U#{`_s)ihlpnKCsv4 zz`>ZzBlG>4|3!!U=iA<#p7ze+uY7Q`aB=81v-dA`vzh`QcdS{vbGzN2qKjMR zm@l`R&$Ii}%|oXT7+tXE5qR8l%7OcY{l;G}GHeofZ_J*u$53qg<=1v5ye@#wU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kPfq{X+)78&q Iol`;+07^%@>Hq)$ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-zsh.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-text-x-zsh.png new file mode 100644 index 0000000000000000000000000000000000000000..16137b7356ad3bea68bdd938a29bd46ec6ca4ad8 GIT binary patch literal 1009 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp4hH^73*928PnoQiyzcdAWmwLsV2$ZeDhKXG=#{YgKCw^yxEZ z%$PlU_T0I1=gpfpfByUh3l=P1ym-lyB}4q*REZ^X5IR= z>({T}uwlcdO`A4v-n?bYmaSX2ZriqP`}XZScI?=>bLXyIyLRv1y=Tv!y?giW+qZB3 z{{06I95{IJ;Gsi@PJ_UivuDqqJ9qBVrAwDDUA}zf^5rX6uE6lsD_5^xy?X81wHw#3 z-@AA3{{8z89z1yX@ZrNp5b*f%qsL(I z`SWMbLEy!U=g(g}e*p$BU%Y(r;^j*a0j6HQeEIU#%U59H)vH&pUcY_~B0%(;*Kgju zdGq$|+yDRn+dhB4g@J)Vq$J2Mn1Pv#M@URT)4<5c*wiH=GO?+t*}!tD00RR9W0JSK zOT^o)NBS5T7#%!a978mMYcKBhVh$8wd+_uB%)1qwDk^hbt5}aZ^>Ix5#jvln|4HIN1Mj>G4-d&(?doAf?aZy)1)j&#?*i)#`X7#LJbTq8sH%t8z;tc*>q49&C+46F4$-hRu^5z<89ZJ6T-G@yGywo5yYM>z literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-text.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-text.png new file mode 100644 index 0000000000000000000000000000000000000000..37dcf9ed9fe6a41addbcf5515eebdbc90e6bf649 GIT binary patch literal 651 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 aBXcW5bBKnmiN(yIBF@v*&t;ucLK6T89c4QJ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-mime-x-font-afm.png b/Media/Themes/Umami/Icon/mimetypes/gnome-mime-x-font-afm.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc4303ee25be3648276debb9e0b71f47d2cecc5 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{oo-U3d9>=#%y`3ErE^@5Cdfi1IA>&yQ zx{YFsYcu0(Uc@9Fd=%`xG$H=W`4u--{LtxG`t6f_$J7f!AsTC&&Yn@3+?4sYJ4ka@ zic|5-iz|u?&)xhz=W2V&F-zmgXFM*mwr_p#=5Ouq-`A{uANVh`DlF#LtIyioa^>%H zT?jDv^7f>^y>+1aj)IRh5-a-VTkTd|{_odp?}%+zi_`whd72%vXo`~YRJIQ(f{JrJ zAMWCN>BE)Gv+|2d)NP+-bqBZUss(S~xF&0{KG%WkXX-NE?5z?LJT|HQ-`V62j?Rin z)!pY;xP4P*>a1WARQ&d?Dz8th>DI~YZr3Fb86WSsGb1)}VE|*?zSURH3T7;S@RZHQ zl;h=ZRypz99y8tt6|eL}wlsBfoYykr|EDMP>ENX(*4q}do3^V)e4n*VtL{(jROR

A2y7St&6X6?j+RfXy8{d(4l6GDfkXJl`kLBc%2<9KV-ml{@ zPn-Vp!vh1QL-S-4x0Ib&8r#YTL#->vNmn*R`X9^ZnL@mbH6CxKEng= zWNlr3JMp+Rz3I(U772LrNp;Py9ha^x5@Y=sv8is+pW^P_{MRjN-{}6avnhKc$1%A+ zC@pd8k$tv*@A?OprAY}M6y0HCdH&({@~sWs2LkFPa%JRnMQ5w6V|KI=b9b4sFFqk} zsm~jSElVdV9Xhv9Aj;b2gl+9seqHOys=w14SHG-`3(2kfmCJeBY~Hf?)8~qd%LK2N z{;VvUD8KC44UJo05@H>5>Zcr&TyJV5^QF+l?vVS&iM+M76>sU2xc$Xy zoy&pV9Zu^V)(hR#Q({~?MR2JWm!|d~(Wl|6`}-%|f3L4Se|>~b2-o7p>+R>ynDOGx z!}{KOhHFUyC)BMUg0hEdiEBhjN@7W>RdP{kVo554k%5tcu7Rblfmw*5g_W_Xm7$ro zfq|8Q!L-j7h71f02o1UUDVb@N3`PcqhPno3x`yT>t*I;7bhncr0V4trO$q6BgMeLz~JfX=d#Wzp$Pytug_rs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/gnome-package.png b/Media/Themes/Umami/Icon/mimetypes/gnome-package.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/html.png b/Media/Themes/Umami/Icon/mimetypes/html.png new file mode 100644 index 0000000000000000000000000000000000000000..d75ba938bc84dfdf37b63fb975567c6e5a789eca GIT binary patch literal 1256 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/mime_ascii.png b/Media/Themes/Umami/Icon/mimetypes/mime_ascii.png new file mode 100644 index 0000000000000000000000000000000000000000..37dcf9ed9fe6a41addbcf5515eebdbc90e6bf649 GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UmInBQxH6CkvU4)qJ6k%sTH89BJGxreu3xim{n~BYwr$_O{m`L9 z_wL=hfB*i22M-=TeE8_mqsNaQKY8-x>C>mro;`d1{P~L)FJ8WU`RdiH*RNl{dGqG& z+qduDy?g)u{f7@9K7Rc8>C>mrpFe;3^5yH-uiw6X`~Lm=j~_pN{`~p>|9_8$f{|XnL9W-ySgPcH8lrxoZi5|z`&T~?e1dczQ5xl0|UcBPZ!4! zjo_*Mr}GXu@VK7;%Az=R*#!>8Yk&TmZ+s;dC@0EfSSUVI#aK}KU0%&GJF`8~jJ>{H zA2~!5c5~ji%=m*-PqFcUIgi7m#$E5Zmot3kN^-r_=dit6s3wZ%bB-F)z_xV z8gGb@fAuBgrA3dd@52ed`W*J@IT?A*T2meS>Q4Wy35~ygha{^pwV0Lvd1X}cr0795 zo5!+6%oAm9f8t9}HJ<4+Z~bipx5bCQPpRa)K4Yfl37e{%X#dM`&*h!iw8Rr!_r7Fc zU{Eb_jVMV;EJ?LWE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|W tN@iLmgOP!up{{|MuAzB|p^=r5xs{8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UmInBQxH6CkvU4)qJ6k%sTH89BJGxreu3xim{n~BYwr$_O{m`L9 z_wL=hfB*i22M-=TeE8_mqsNaQKY8-x>C>mro;`d1{P~L)FJ8WU`RdiH*RNl{dGqG& z+qduDy?g)u{f7@9K7Rc8>C>mrpFe;3^5yH-uiw6X`~Lm=j~_pN{`~p>|9_8$f{|XnL9W-ySgPcH8lrxoZi5|z`&T~?e1dczQ5xl0|UcBPZ!4! zjo_*Mr}GXu@VK7;%Az=R*#!>8Yk&TmZ+s;dC@0EfSSUVI#aK}KU0%&GJF`8~jJ>{H zA2~!5c5~ji%=m*-PqFcUIgi7m#$E5Zmot3kN^-r_=dit6s3wZ%bB-F)z_xV z8gGb@fAuBgrA3dd@52ed`W*J@IT?A*T2meS>Q4Wy35~ygha{^pwV0Lvd1X}cr0795 zo5!+6%oAm9f8t9}HJ<4+Z~bipx5bCQPpRa)K4Yfl37e{%X#dM`&*h!iw8Rr!_r7Fc zU{Eb_jVMV;EJ?LWE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|W tN@iLmgOP!up{{|MuAzB|p^=r5xs{K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/package.png b/Media/Themes/Umami/Icon/mimetypes/package.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/package_editors.png b/Media/Themes/Umami/Icon/mimetypes/package_editors.png new file mode 100644 index 0000000000000000000000000000000000000000..37dcf9ed9fe6a41addbcf5515eebdbc90e6bf649 GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UmInBQxH6CkvU4)qJ6k%sTH89BJGxreu3xim{n~BYwr$_O{m`L9 z_wL=hfB*i22M-=TeE8_mqsNaQKY8-x>C>mro;`d1{P~L)FJ8WU`RdiH*RNl{dGqG& z+qduDy?g)u{f7@9K7Rc8>C>mrpFe;3^5yH-uiw6X`~Lm=j~_pN{`~p>|9_8$f{|XnL9W-ySgPcH8lrxoZi5|z`&T~?e1dczQ5xl0|UcBPZ!4! zjo_*Mr}GXu@VK7;%Az=R*#!>8Yk&TmZ+s;dC@0EfSSUVI#aK}KU0%&GJF`8~jJ>{H zA2~!5c5~ji%=m*-PqFcUIgi7m#$E5Zmot3kN^-r_=dit6s3wZ%bB-F)z_xV z8gGb@fAuBgrA3dd@52ed`W*J@IT?A*T2meS>Q4Wy35~ygha{^pwV0Lvd1X}cr0795 zo5!+6%oAm9f8t9}HJ<4+Z~bipx5bCQPpRa)K4Yfl37e{%X#dM`&*h!iw8Rr!_r7Fc zU{Eb_jVMV;EJ?LWE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|W tN@iLmgOP!up{{|MuAzB|p^=r5xs{| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eEK z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq{9Sr;B5V$MLIEqBCM$McVf7ob%*P(PF73 z%ha`0mWDZcT;>uIiO!B^G2|3X?hwoTq#&`O#mq}OQ@AK_g@4uOU|8KswM)Jr0*&1wee-r+A zq~vYmesTZu?_1KRe_S}xuyR$*_{IdDHq=ekVC+f=!W!Tr6s{74N zI{r=l#-$r4UM$>hc#J`y(`Cg<&d#mn>(}aNJ@`89-s{g*#YVUGC|m^d#}p}WND?Ax5Wx_QRJlXGtWvY6;0p~&LI zwdLD`@4vIUxI9+A<6&#!P|Wk(w_(SLeay^Twr>^s@Ovh2d*`tvAAkSk+hW_^=A4Mz ze`(ptlttHGf8{#8DNNP;*oUn5a&mWeOl+`k5GZ`6wE0Y`>GW&6R;_Tbn!ApV?bOCx z>-LcBv#0OI{;09Dk>l4q{ph*$b2sS%~F!<7wkT2v^pgr zbN_w)DVKiK*e#jjp(*IJrpHUu>9teKwN{U%lQfpz*t2rt=jZ1I{g13%v&M<*;DZy6 zcd!56#T(fl>z@8wJL zmQ6|hzc;f9IY@OdcRTQS>`Xo+s$s)yK5d<8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1 z?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_LnA9Ab1Or0h=#3+#mu0R#M9N!Wt~$(699nK BAYA|e literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/rpm.png b/Media/Themes/Umami/Icon/mimetypes/rpm.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/shellscript.png b/Media/Themes/Umami/Icon/mimetypes/shellscript.png new file mode 100644 index 0000000000000000000000000000000000000000..16137b7356ad3bea68bdd938a29bd46ec6ca4ad8 GIT binary patch literal 1009 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp4hH^73*928PnoQiyzcdAWmwLsV2$ZeDhKXG=#{YgKCw^yxEZ z%$PlU_T0I1=gpfpfByUh3l=P1ym-lyB}4q*REZ^X5IR= z>({T}uwlcdO`A4v-n?bYmaSX2ZriqP`}XZScI?=>bLXyIyLRv1y=Tv!y?giW+qZB3 z{{06I95{IJ;Gsi@PJ_UivuDqqJ9qBVrAwDDUA}zf^5rX6uE6lsD_5^xy?X81wHw#3 z-@AA3{{8z89z1yX@ZrNp5b*f%qsL(I z`SWMbLEy!U=g(g}e*p$BU%Y(r;^j*a0j6HQeEIU#%U59H)vH&pUcY_~B0%(;*Kgju zdGq$|+yDRn+dhB4g@J)Vq$J2Mn1Pv#M@URT)4<5c*wiH=GO?+t*}!tD00RR9W0JSK zOT^o)NBS5T7#%!a978mMYcKBhVh$8wd+_uB%)1qwDk^hbt5}aZ^>Ix5#jvln|4HIN1Mj>G4-d&(?doAf?aZy)1)j&#?*i)#`X7#LJbTq8sH%t8z;tc*>q49&C+46F4$-hRu^5z<89ZJ6T-G@yGywo5yYM>z literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/sound.png b/Media/Themes/Umami/Icon/mimetypes/sound.png new file mode 100644 index 0000000000000000000000000000000000000000..02ed64079b6f523eea63c2557e4b20afeefde514 GIT binary patch literal 1124 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_j-D=#As)xyPCcJJ$5rCE{rNqg_wBy9 zCUe%B%v+0`0wyfukc$#vZJyMuz~MF3Hsphl%LlcJ-ugy!#}7)Z{LdD-3Unm|s;~!g z`U(a%wYI!bn?1w#+jDDsIsUxc3CSL>4tDd~*f1NP|2*@(u`$n|{Qp}|?$@+FP4);OTa?`he7^P~Q;IpW6N*h7DZ{I079ULqb_geof{# zuixsmcWb)K(&zHqRppnbFE184 zAhT7pbxjL*^^bF*3s42~Jy4aBrFtuWhaezqk#iYZsvxH3*+&aG5F-Tmz$Ncfa zYT2ub5*v?)Ens9kJE>qt(+fvdd6$0Hj*H9_-W_!=b~+PyWXa0k&z<*`bgHbKQ>DT( zHDjya9_9;WL1r6@)8C%4`S#1^-#fQE3a9oqyt?z_vDsF6_x1i!v%hF3Ki+ctt&ZFB z4ra$(A>Yz>KB}INb}L2onifCn-EREV@W+)|F{UXCq`ojXOuDgtxtzAIO=;mZ8ym~X z-#*LU+H1A-*!PmE*+&G9%*rsRu`(_F_VW3>+N<;C&RI6!Jav8S=`izs2Y;&Ft3JsW zB%qv}{CH(#zRsqrdpvvio?BNu-?{P1yA{W#>hQeG9a|!C zGUDf2!C#enbN6iKp74f!&i;sXSFe4#X`=l0tJNDb>pM{|ztzX(JzYC3KH^tc{LZqq z6X)*_n05DNUZ`Ksl*G6Tg1d)IRmLKNq{_oDj!^qEPBP();NvipyZNqH=V~-to?N}cv z{EIDQ6Zy7xIfKOk{-pOS-oM%R*8igW>g4%Wbwvye45}rr5hW>!C8<`)MX8A;sSHL2 zMh3bDmbwOJA%+%K#->(=X4(b@Rt5&sK3f=~Xvob^$xN$cFfuSS)HN{EH8c+~G_o=> zw=y(`XxN%q%*?>RAPKS|I6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#WDFy}x22WQ% Jmvv4FO#r(M-}3+f literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/spreadsheet.png b/Media/Themes/Umami/Icon/mimetypes/spreadsheet.png new file mode 100644 index 0000000000000000000000000000000000000000..1c7bc745d6965403174e35e917e57bbf5b41e329 GIT binary patch literal 1178 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_b39!fLp+Xeo$8+c{Re-`h7iDeCpb?e}cH`Q4rVSUCBYUv5p3PyQO|yEA6Yo~M6x z7;AoFCBudnB90E4t&c6X{>@=tV5YY2--p__&W8;Qe7TJ?6_p~UwWhA^p1r2PCCj_P zmxoVIV#(&s!ne15jOiEU+$A<~!RrmTwV1c52h_X#tdVQjA*h}?lVif^ryF#HooboX z7Ptsblr@OZ-}JmvM3$Z7n%_pL&+|ZZbHThtC$m=d`n_#A zSRTIbX{WO@!;W?BLd&l$eXLXb_*3d9`T8S=&glFLI`HUwO4G4_CY_Cq0is*3?Fx1& zn#~|5Z{rdjE&a1b?(hxQOD4>2mJgqs#~uIqOXvIEA37Ts{{7*l@!Kx$r27=dpJ&2l z>_6OCs=nW**2P8an(+$WKo<=Wt`3fMuN5CDEYg@~<@x263jdx@Hcy|riai(C_-PmC zDx8_M@X7BGzHfrROA}w*2|g^(q}&i5-n>e(kl8pzU~j>^E2qytICK6Q*YukC_pPda zUhWS1bh;u)@uvqn|2(T&iHcJ1hE*rB=XF~+o{8@c*%Nx_)Z0gwc5)XhoKtUI{?SXX zR@d{7SLfgPwSw$Y4NG+;Gfe*e&77h!h2ygBT92Mr_}TO7ICpUV+4zxzOMp?TG3@}0(8A*k$tm~uJ^b?M5%+f; z-O?jr;Yv}?mJ?U(c>C7;+4nb={|+AQR%ej@Asw-{{MhQ98V7TwxgUGH*myzu@N&Mp ztX&J&Gl(uYb9Y-k!@j1;QS%E*4H+01R7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly z3@xmTO|1;gv<(cb3=F1ywm{X8o1c=IR>@#wU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kP Qfq{X+)78&qol`;+0EZ#?8vp| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}hae?46sLp+XeopL@~CRO6N{d;R`YvbLU z?Khn*Gu$nb6?&mrl%>1gY2hLTrzr}L7Jhx_YP0%+_xVN3S50}b_QlceD2<30OQ&q( zTurH0%E1%DO{&5C40`jcda=imIu|9u zYyY;G^F-{dF5Oq$UMc#~^|6V#5JSSl-s1Jg3fH8Hv|Q0<4KuSU`TH>BqIs4pgVxvU zH*@1{`7;@&rF!!Ix%#z`tIWxvjjMcf@7~+aE{2H*k7b_|+SRIjkh39oc0-y0&!pBM zLF4_l3*y&5GVN~`xDnew^D1wd-&T&;bSsB@r-a=LPo2E`>cafB0%AFRy6YG6b_%vs zoPE4wc5c}`YePW=VTQ{t#VfWltbV;YTr)84{;~XPFR!mY(sr=mnCkuNkj0aJTTic# zeR%mj*G&dRmIc8q${d}(%$w~KA~b~})e6rsuteDug)NbGnw06;WTxWensNBR4epI) z)f{U#{`_s)ihlpnKCsv4 zz`>ZzBlG>4|3!!U=iA<#p7ze+uY7Q`aB=81v-dA`vzh`QcdS{vbGzN2qKjMR zm@l`R&$Ii}%|oXT7+tXE5qR8l%7OcY{l;G}GHeofZ_J*u$53qg<=1v5ye@#wU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kPfq{X+)78&q Iol`;+07^%@>Hq)$ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/stock_calendar.png b/Media/Themes/Umami/Icon/mimetypes/stock_calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..33ea6a3ee697cf20eed140c5eb871994cb33def5 GIT binary patch literal 1212 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq{9Sr;B5V$MLIEqBCM$McVf7ob%*P(PF73 z%ha`0mWDZcT;>uIiO!B^G2|3X?hwoTq#&`O#mq}OQ@AK_g@4uOU|8KswM)Jr0*&1wee-r+A zq~vYmesTZu?_1KRe_S}xuyR$*_{IdDHq=ekVC+f=!W!Tr6s{74N zI{r=l#-$r4UM$>hc#J`y(`Cg<&d#mn>(}aNJ@`89-s{g*#YVUGC|m^d#}p}WND?Ax5Wx_QRJlXGtWvY6;0p~&LI zwdLD`@4vIUxI9+A<6&#!P|Wk(w_(SLeay^Twr>^s@Ovh2d*`tvAAkSk+hW_^=A4Mz ze`(ptlttHGf8{#8DNNP;*oUn5a&mWeOl+`k5GZ`6wE0Y`>GW&6R;_Tbn!ApV?bOCx z>-LcBv#0OI{;09Dk>l4q{ph*$b2sS%~F!<7wkT2v^pgr zbN_w)DVKiK*e#jjp(*IJrpHUu>9teKwN{U%lQfpz*t2rt=jZ1I{g13%v&M<*;DZy6 zcd!56#T(fl>z@8wJL zmQ6|hzc;f9IY@OdcRTQS>`Xo+s$s)yK5d<8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1 z?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_LnA9Ab1Or0h=#3+#mu0R#M9N!Wt~$(699nK BAYA|e literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/stock_certificate.png b/Media/Themes/Umami/Icon/mimetypes/stock_certificate.png new file mode 100644 index 0000000000000000000000000000000000000000..f09c9ec2ac0b94c791fc02215de5aff79611dda8 GIT binary patch literal 1440 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoEi#%N%Lp+Y}omQI>S}Jkeet+>f+wXU( zw^u(m+ZG!$`?A?{AKA~Uoe4A3v=;82kmkhpSJdUJJBw?8<0bo~i?f|fJdFZ6C0G*o zsbog^-EPa>ch1s0_jc*-^4+_4f1kHKzW$BRwHrs6svjJ0yk9x*`DdH+{h$BJ?l`XY z?#m{{gdCO0mBEuk&fVM|4F~e2LiJZFkKq zr<;CC;4RA;-H2nB2tcN{2G+c4H zVuH(ijvLBH%I2?IGyCr&x5A&>CyPv(`dFChtl7t#V!Kk4c9_-OK9ryKvA0iQ(qWf% zTQY4|hx6^~`&sIIV8vXq2Oc|@epy+1tM!>Nhk^jl!Woe!mye{U9baX>`G-(*hjeU) zGiS-mN&9X(o7f8puA8Ij^Z9KiqtKU4sr)aU?_L*dD991H?X=O?DNSt`>-l-cB5w*2)vwq=M zt}-pw2EjgoS^EX*w}|LQbp`HixYsjbc~n&NzQR;x0p>}@vo>rW@ zvB5sT?EAy2ho66MjPZQ)Cer0vs=~ZUeF28mmp?@XKi*&%Rw^XHXcV`v-lO%4l|0)o z#=jdDy`6izB<=B>WyYd?E~hqLJRPQNo;fAt+5e!B#Z%AD($-7&F8*DuAN6JX{SS}U zete~Vdh3UVoepvV57x@$zu)%1>FDfz6>mQJ{wrR4eC68J&p-IHzj=25`#Bb&p1J?0 zB$?kk`h(~AZcYZr_dQqU6nL&oY}t}}I(%b=r){h8gA)tiizvK1dOy&2>Gef#&lS!Z?nH&{dT&Qq-0^InAn3|erLKLuX}Qf+49~gCNIa2hdu>p6#coG zK2PG`lgqLb-@UVYez!bs`td$lv2~BX{atQdc}MAIXjG(Yto)AJg#iJlm$=7gXWsh% zxasI@JuXGBODiMpKK<-&_3mW6v&w$0`c>6W>o@Obj5zXE%XpJm5(5K+YKdz^NlIc# zs#S7PYGO$$gOP!efv$n2u7O#Ip@o&Psg8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp4hH^73*928PnoQiyzcdAWmwLsV2$ZeDhKXG=#{YgKCw^yxEZ z%$PlU_T0I1=gpfpfByUh3l=P1ym-lyB}4q*REZ^X5IR= z>({T}uwlcdO`A4v-n?bYmaSX2ZriqP`}XZScI?=>bLXyIyLRv1y=Tv!y?giW+qZB3 z{{06I95{IJ;Gsi@PJ_UivuDqqJ9qBVrAwDDUA}zf^5rX6uE6lsD_5^xy?X81wHw#3 z-@AA3{{8z89z1yX@ZrNp5b*f%qsL(I z`SWMbLEy!U=g(g}e*p$BU%Y(r;^j*a0j6HQeEIU#%U59H)vH&pUcY_~B0%(;*Kgju zdGq$|+yDRn+dhB4g@J)Vq$J2Mn1Pv#M@URT)4<5c*wiH=GO?+t*}!tD00RR9W0JSK zOT^o)NBS5T7#%!a978mMYcKBhVh$8wd+_uB%)1qwDk^hbt5}aZ^>Ix5#jvln|4HIN1Mj>G4-d&(?doAf?aZy)1)j&#?*i)#`X7#LJbTq8sH%t8z;tc*>q49&C+46F4$-hRu^5z<89ZJ6T-G@yGywo5yYM>z literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/tar.png b/Media/Themes/Umami/Icon/mimetypes/tar.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/template_source.png b/Media/Themes/Umami/Icon/mimetypes/template_source.png new file mode 100644 index 0000000000000000000000000000000000000000..5b4b141ce72a5c260e5d6d57d795c8a0ee51e72b GIT binary patch literal 747 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UZUp#*xH6Cna`Up=J6k%sTH89BJGxqr9zAmG_|fCXj~zd8?8M3A zCr_R@dFtfp)2GgyJ$?4vnRDmQoxgDI;>8OWFI~8N<}%EM1z zxEWYIH)V9c|L(;g(=%z|uI|J8?*Ee#G=JN+6gzlQ$`OcSJ>P(tJ=?Phf z8SD%jq7^-?JwjdIKi+ZwtrZK87UyG&Z+r|43_sZKve@2#EGI9>z`&qd;u=wsl30>z zm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlBy iGhIXT5JMv?BXcW5bBKnmiN&Bq%;4$j=d#Wzp$Pz^J~DRz literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/text-html.png b/Media/Themes/Umami/Icon/mimetypes/text-html.png new file mode 100644 index 0000000000000000000000000000000000000000..d75ba938bc84dfdf37b63fb975567c6e5a789eca GIT binary patch literal 1256 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_uRL8GLp+XeoqF0oBwXgW{qu8oc2043 zY@3-V!RnoHOJo%@BWu>=S$eZp6kg5CnSHF}di{cxfwQ+msVD>G)4 zBsD!XarE^Y{L1KSWtk#+@VNV*J(2Og1y|2@ z22cNPyWM4B0EZ$=a&mIaOTNNCdu#W^#(P$1x`gH`KMjqW^ipTxONFx24u-*d?uYef zdak=KwUeVnuz>WN$_;g;5eONH|IgW^!J^0o97q# zehPEuJ>bsjedTiX>~bsqwNtg`ELm42UVcn`W&Pb=)%iT@D@@KX)+;-4ESYlVoc;vA zr5|>kVvOQWyKwPd=k2#{9FDh6EX?Ga5@dd{LaO$v!c4C ztl?C;S>*NWcH3@>Bz2mozO?juE7jepH7$hQ^0JcbxrgV|PNwjj^78gjoBZbM&Ilh# zhKEfJHKEf)4J|jj6g!)Kt=?lZZ{E{qhedg0mh=eK{VC<}ol#R*Bfom}Y95;z4V$bQ zc3Wo^`R?p(yeP?&t=qTD)~?TN_l$U+%`)Bsr#a-@bxLB@#kvExoIajmz*6vZW&>~S zzlVy`lne9j&Q`KmJ=t&hOKB-Zne&U>g>>8}>#SeWaWqNih>?rXq?rLbzCZswKPKs~ zU5@6&mtMXU;9Giib;c|&qq(VZ{hz)+;Q4jP=Hkb9 z@&A7Qy~Gs2mC|sgtT~1;WC2G-s_iTx#hi1>^XLBEbtdxiDvK^J2aeN5zRDXHowwap zzxMh0?(jy{1hI}a%#T|Ci`;hJYO^A_Hl9JqgYo3o;|y!Q8tskw%ROo88NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UZUp#*xH6Cna`Up=J6k%sTH89BJGxqr9zAmG_|fCXj~zd8?8M3A zCr_R@dFtfp)2GgyJ$?4vnRDmQoxgDI;>8OWFI~8N<}%EM1z zxEWYIH)V9c|L(;g(=%z|uI|J8?*Ee#G=JN+6gzlQ$`OcSJ>P(tJ=?Phf z8SD%jq7^-?JwjdIKi+ZwtrZK87UyG&Z+r|43_sZKve@2#EGI9>z`&qd;u=wsl30>z zm0XmXSdz+MWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlBy iGhIXT5JMv?BXcW5bBKnmiN&Bq%;4$j=d#Wzp$Pz^J~DRz literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/text-x-generic.png b/Media/Themes/Umami/Icon/mimetypes/text-x-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..37dcf9ed9fe6a41addbcf5515eebdbc90e6bf649 GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UmInBQxH6CkvU4)qJ6k%sTH89BJGxreu3xim{n~BYwr$_O{m`L9 z_wL=hfB*i22M-=TeE8_mqsNaQKY8-x>C>mro;`d1{P~L)FJ8WU`RdiH*RNl{dGqG& z+qduDy?g)u{f7@9K7Rc8>C>mrpFe;3^5yH-uiw6X`~Lm=j~_pN{`~p>|9_8$f{|XnL9W-ySgPcH8lrxoZi5|z`&T~?e1dczQ5xl0|UcBPZ!4! zjo_*Mr}GXu@VK7;%Az=R*#!>8Yk&TmZ+s;dC@0EfSSUVI#aK}KU0%&GJF`8~jJ>{H zA2~!5c5~ji%=m*-PqFcUIgi7m#$E5Zmot3kN^-r_=dit6s3wZ%bB-F)z_xV z8gGb@fAuBgrA3dd@52ed`W*J@IT?A*T2meS>Q4Wy35~ygha{^pwV0Lvd1X}cr0795 zo5!+6%oAm9f8t9}HJ<4+Z~bipx5bCQPpRa)K4Yfl37e{%X#dM`&*h!iw8Rr!_r7Fc zU{Eb_jVMV;EJ?LWE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^MMG|W tN@iLmgOP!up{{|MuAzB|p^=r5xs{8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UdjfnyTp4hH^73*928PnoQiyzcdAWmwLsV2$ZeDhKXG=#{YgKCw^yxEZ z%$PlU_T0I1=gpfpfByUh3l=P1ym-lyB}4q*REZ^X5IR= z>({T}uwlcdO`A4v-n?bYmaSX2ZriqP`}XZScI?=>bLXyIyLRv1y=Tv!y?giW+qZB3 z{{06I95{IJ;Gsi@PJ_UivuDqqJ9qBVrAwDDUA}zf^5rX6uE6lsD_5^xy?X81wHw#3 z-@AA3{{8z89z1yX@ZrNp5b*f%qsL(I z`SWMbLEy!U=g(g}e*p$BU%Y(r;^j*a0j6HQeEIU#%U59H)vH&pUcY_~B0%(;*Kgju zdGq$|+yDRn+dhB4g@J)Vq$J2Mn1Pv#M@URT)4<5c*wiH=GO?+t*}!tD00RR9W0JSK zOT^o)NBS5T7#%!a978mMYcKBhVh$8wd+_uB%)1qwDk^hbt5}aZ^>Ix5#jvln|4HIN1Mj>G4-d&(?doAf?aZy)1)j&#?*i)#`X7#LJbTq8sH%t8z;tc*>q49&C+46F4$-hRu^5z<89ZJ6T-G@yGywo5yYM>z literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/tgz.png b/Media/Themes/Umami/Icon/mimetypes/tgz.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3e654fbe1fa32df9b31566262ff0487d2318a GIT binary patch literal 847 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/txt.png b/Media/Themes/Umami/Icon/mimetypes/txt.png new file mode 100644 index 0000000000000000000000000000000000000000..37dcf9ed9fe6a41addbcf5515eebdbc90e6bf649 GIT binary patch literal 651 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 tN@iLmgOP!up{{|MuAzB|p^=r5xs{K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq{9Sr;B5V$MLIEqBCM$McVf7ob%*P(PF73 z%ha`0mWDZcT;>uIiO!B^G2|3X?hwoTq#&`O#mq}OQ@AK_g@4uOU|8KswM)Jr0*&1wee-r+A zq~vYmesTZu?_1KRe_S}xuyR$*_{IdDHq=ekVC+f=!W!Tr6s{74N zI{r=l#-$r4UM$>hc#J`y(`Cg<&d#mn>(}aNJ@`89-s{g*#YVUGC|m^d#}p}WND?Ax5Wx_QRJlXGtWvY6;0p~&LI zwdLD`@4vIUxI9+A<6&#!P|Wk(w_(SLeay^Twr>^s@Ovh2d*`tvAAkSk+hW_^=A4Mz ze`(ptlttHGf8{#8DNNP;*oUn5a&mWeOl+`k5GZ`6wE0Y`>GW&6R;_Tbn!ApV?bOCx z>-LcBv#0OI{;09Dk>l4q{ph*$b2sS%~F!<7wkT2v^pgr zbN_w)DVKiK*e#jjp(*IJrpHUu>9teKwN{U%lQfpz*t2rt=jZ1I{g13%v&M<*;DZy6 zcd!56#T(fl>z@8wJL zmQ6|hzc;f9IY@OdcRTQS>`Xo+s$s)yK5d<8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1 z?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_LnA9Ab1Or0h=#3+#mu0R#M9N!Wt~$(699nK BAYA|e literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/vcard.png b/Media/Themes/Umami/Icon/mimetypes/vcard.png new file mode 100644 index 0000000000000000000000000000000000000000..6d75399eef3e4637e5c3fc96c017b85f7ab45e28 GIT binary patch literal 1019 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}hae?46sLp+XeopL@~CRO6N{d;R`YvbLU z?Khn*Gu$nb6?&mrl%>1gY2hLTrzr}L7Jhx_YP0%+_xVN3S50}b_QlceD2<30OQ&q( zTurH0%E1%DO{&5C40`jcda=imIu|9u zYyY;G^F-{dF5Oq$UMc#~^|6V#5JSSl-s1Jg3fH8Hv|Q0<4KuSU`TH>BqIs4pgVxvU zH*@1{`7;@&rF!!Ix%#z`tIWxvjjMcf@7~+aE{2H*k7b_|+SRIjkh39oc0-y0&!pBM zLF4_l3*y&5GVN~`xDnew^D1wd-&T&;bSsB@r-a=LPo2E`>cafB0%AFRy6YG6b_%vs zoPE4wc5c}`YePW=VTQ{t#VfWltbV;YTr)84{;~XPFR!mY(sr=mnCkuNkj0aJTTic# zeR%mj*G&dRmIc8q${d}(%$w~KA~b~})e6rsuteDug)NbGnw06;WTxWensNBR4epI) z)f{U#{`_s)ihlpnKCsv4 zz`>ZzBlG>4|3!!U=iA<#p7ze+uY7Q`aB=81v-dA`vzh`QcdS{vbGzN2qKjMR zm@l`R&$Ii}%|oXT7+tXE5qR8l%7OcY{l;G}GHeofZ_J*u$53qg<=1v5ye@#wU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kPfq{X+)78&q Iol`;+07^%@>Hq)$ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/video-x-generic.png b/Media/Themes/Umami/Icon/mimetypes/video-x-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..c9dbcb2d0a658550e5eca6e0e00704de81e9af9c GIT binary patch literal 1386 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq^B*)5S5w1m=> zB%HC3!>qxIO}m-r$+mg<_y0fHu;M{XP0Tm{x}SdMe%9@O|IPmXEYttRTO$rVH{2pFxaYZ$-LmV;7Mp3URzT)BIySL-@WZBt5{57=~ za!mWaeJN#Xyj?B*i>-?Ji2USLb;~TQOt)^|?(|>QT({tD8u!$7q32GDxIdrz@>7GF zv+L7m^2>MG%0BpY(=+nzvWwp9xVs|+T`NwkuUb`gY~z;}wsc#bpKKW)x2==jqPuan z!u<){mX(nK0Tn{8q*fisGM{|PVfIQsjgUKC-ZvhbLT_ub60D8 zKa|xR`{B3xfeb6(sW;9jgnKa>H~(p}`LXd1-|5=rt2fOwXyBBY`gFqF#p*Iv1`ijX z(>b-*C2C(5L-0w-4GKS3=&*8i`#FA`sia{a&UH3i@8Vib-OY}rbD5=POD|x$pZu)g z_FX=?d~;a_?TU_~_3KtRE%p06S;*Qd`e4#;Mw6LZ8d`b{Medqc=B#Jge6*t}H6XN> zFDq;H3$1C-T?~rOv$xD&HsRZXJJB8D@~f3JEB}i~UV8E*zr<|G`_n0tECtuCUERjb z`+VW9WkLlz0_r!m{j)Q8vaqt{eD`Cq1$TC9-#YU2D4+J#PYgTrj@&#Q6Ur35l66U@ zy8^H4et%n@`zm#;k?JJ{s~=naXk*W;KQvi;$>nG#yDJOtEE8pPNvaD!Bt9w8w@vCq zzp>pv?jHZ1#{3kHs^7Z~+zj#O|Ged*!}gqn4f4n8Y8`$H{x4apwW0DeyQtE}1eGq) znJtrE%X16J35scod~|pD*yLBT%&0W#KqzDR`+JTP4XYaZqdv{6QRkHP@LFPV=Z35M z(&kmGSI1g>iT%{#p<`lO865w(;HDRkL4U1`ZOM-ZEm4b?q}-6&>gJfozO!k|)r?Su zsj`hn{@!PrEz7JECUS)Ho1<42*Nd-J2D8s@FrW3b+K55(<<|=rat%KUJ+$4|u)U-B zWA~%hdX*Z@pRo#$&VT%I$NuJ=7nNZpS7KDM&&OQ3cRtPH_YKB{8hM(3E^o-(8pUfh zmrtgTi-Vj0^O_s3ryT{}zqzy1mh<_ezUdw5M}-ts`^1|ZMA)4S=PNW!J-49X|M7*l zgUa9Bnzu{6sJv{JlikvbSl> z_P)wn*PMjnB$1-loD&HKJ2swT|Gy=&c}7-T+KGc5z5NO^eny)c)H$9$5}`M{e}zkn zO>wR95rt)|zV^f(U(>i%``g+2Z+}=>e#+*ru(LbBz`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? aBXcW5bBKnmiN(yIBF@v*&t;ucLK6T89c4QJ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/video.png b/Media/Themes/Umami/Icon/mimetypes/video.png new file mode 100644 index 0000000000000000000000000000000000000000..c9dbcb2d0a658550e5eca6e0e00704de81e9af9c GIT binary patch literal 1386 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq^B*)5S5w1m=> zB%HC3!>qxIO}m-r$+mg<_y0fHu;M{XP0Tm{x}SdMe%9@O|IPmXEYttRTO$rVH{2pFxaYZ$-LmV;7Mp3URzT)BIySL-@WZBt5{57=~ za!mWaeJN#Xyj?B*i>-?Ji2USLb;~TQOt)^|?(|>QT({tD8u!$7q32GDxIdrz@>7GF zv+L7m^2>MG%0BpY(=+nzvWwp9xVs|+T`NwkuUb`gY~z;}wsc#bpKKW)x2==jqPuan z!u<){mX(nK0Tn{8q*fisGM{|PVfIQsjgUKC-ZvhbLT_ub60D8 zKa|xR`{B3xfeb6(sW;9jgnKa>H~(p}`LXd1-|5=rt2fOwXyBBY`gFqF#p*Iv1`ijX z(>b-*C2C(5L-0w-4GKS3=&*8i`#FA`sia{a&UH3i@8Vib-OY}rbD5=POD|x$pZu)g z_FX=?d~;a_?TU_~_3KtRE%p06S;*Qd`e4#;Mw6LZ8d`b{Medqc=B#Jge6*t}H6XN> zFDq;H3$1C-T?~rOv$xD&HsRZXJJB8D@~f3JEB}i~UV8E*zr<|G`_n0tECtuCUERjb z`+VW9WkLlz0_r!m{j)Q8vaqt{eD`Cq1$TC9-#YU2D4+J#PYgTrj@&#Q6Ur35l66U@ zy8^H4et%n@`zm#;k?JJ{s~=naXk*W;KQvi;$>nG#yDJOtEE8pPNvaD!Bt9w8w@vCq zzp>pv?jHZ1#{3kHs^7Z~+zj#O|Ged*!}gqn4f4n8Y8`$H{x4apwW0DeyQtE}1eGq) znJtrE%X16J35scod~|pD*yLBT%&0W#KqzDR`+JTP4XYaZqdv{6QRkHP@LFPV=Z35M z(&kmGSI1g>iT%{#p<`lO865w(;HDRkL4U1`ZOM-ZEm4b?q}-6&>gJfozO!k|)r?Su zsj`hn{@!PrEz7JECUS)Ho1<42*Nd-J2D8s@FrW3b+K55(<<|=rat%KUJ+$4|u)U-B zWA~%hdX*Z@pRo#$&VT%I$NuJ=7nNZpS7KDM&&OQ3cRtPH_YKB{8hM(3E^o-(8pUfh zmrtgTi-Vj0^O_s3ryT{}zqzy1mh<_ezUdw5M}-ts`^1|ZMA)4S=PNW!J-49X|M7*l zgUa9Bnzu{6sJv{JlikvbSl> z_P)wn*PMjnB$1-loD&HKJ2swT|Gy=&c}7-T+KGc5z5NO^eny)c)H$9$5}`M{e}zkn zO>wR95rt)|zV^f(U(>i%``g+2Z+}=>e#+*ru(LbBz`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? aBXcW5bBKnmiN(yIBF@v*&t;ucLK6T89c4QJ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/wordprocessing.png b/Media/Themes/Umami/Icon/mimetypes/wordprocessing.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 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 Iol`;+07^%@>Hq)$ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/x-office-calendar.png b/Media/Themes/Umami/Icon/mimetypes/x-office-calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..33ea6a3ee697cf20eed140c5eb871994cb33def5 GIT binary patch literal 1212 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq{9Sr;B5V$MLIEqBCM$McVf7ob%*P(PF73 z%ha`0mWDZcT;>uIiO!B^G2|3X?hwoTq#&`O#mq}OQ@AK_g@4uOU|8KswM)Jr0*&1wee-r+A zq~vYmesTZu?_1KRe_S}xuyR$*_{IdDHq=ekVC+f=!W!Tr6s{74N zI{r=l#-$r4UM$>hc#J`y(`Cg<&d#mn>(}aNJ@`89-s{g*#YVUGC|m^d#}p}WND?Ax5Wx_QRJlXGtWvY6;0p~&LI zwdLD`@4vIUxI9+A<6&#!P|Wk(w_(SLeay^Twr>^s@Ovh2d*`tvAAkSk+hW_^=A4Mz ze`(ptlttHGf8{#8DNNP;*oUn5a&mWeOl+`k5GZ`6wE0Y`>GW&6R;_Tbn!ApV?bOCx z>-LcBv#0OI{;09Dk>l4q{ph*$b2sS%~F!<7wkT2v^pgr zbN_w)DVKiK*e#jjp(*IJrpHUu>9teKwN{U%lQfpz*t2rt=jZ1I{g13%v&M<*;DZy6 zcd!56#T(fl>z@8wJL zmQ6|hzc;f9IY@OdcRTQS>`Xo+s$s)yK5d<8c~vxSdwa$T$GwvlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1 z?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_LnA9Ab1Or0h=#3+#mu0R#M9N!Wt~$(699nK BAYA|e literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/x-office-document-template.png b/Media/Themes/Umami/Icon/mimetypes/x-office-document-template.png new file mode 100644 index 0000000000000000000000000000000000000000..c83964bdde0b20a172f73a15eab73d9de452b2e0 GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_D?D8sLp+Y(o#LAjlPc0S|Ff^rGxq33 zWskOqczH)3y`p9Mf4_q0m9UsyAqVG5i$8YaP>k;oPVo)XQjM*{pjAzGbX~@o7#WQcwcv?`rhZd_tkuV^dEJq`^Wh$6MFUL zRe;gdfNJ;K$6nkx5tRIR=9eQ!exw{;xx8-fE=$vrFE=jEfA;Lseb-mY@$1*Ft&`(x zx1W4P{QcVCnWF3l4Jld+pDmk~bVf9RF@h&-=U=7`8ELCO-m@~@^OG?{{ooPt_m}@Z z+!V@iB*~ENvG~lHGXph5j698a&ZM+4L?-4l96EEK)$sS}?H!(Sc0s3=-S6qm31|57 z^($jS9fQV1nIJ<|9!a%7R;(2wS8H}W51qDLzkz*{7vm?MGd(sA(b??heA3idJLec5 zV5$4MNw(qkboLcp9Gqs?jjD}KFn>6CzW$lL-aq~A3?19%q`!Q|I-zUnjk5Kj? zb02cgl>Gi|{mI*ZW(%?TJ`d!3!um>t`ACu>!z}6O4!6Y#Y7MPZt!jH$a7F&-;B6syoWhe3+S7IZaOC zxs3dN!5uG7@wcpU+}C@`I3qVxS*Ww3o142UzN^~p!rnIbx|APxeg0X_fAP^+fAZd6 znjG8SuYb4J(QLNsf_LZg4B9t4T{UuUn`|k}b}oid!T6K1nBGC1^^NhWUGY7qn-tsa z@1!U&T|961zv)vff5D2srO$%izg-dB=jfPXyvw>e<=LNAb59n`a6UI@PO+ASUdNZE z`Wq+QKe}`6{!`^f)<2AjEz*siKRHv7R`iU?pygrY#SN?Lzo|a?dHCGzUE%W_Yin)a z^gLv5mr0$+{d_yy{zaR<8HBQbOLon-Zus}_UrKnn`pSnYb7N&i7bh$Ko;_Qdzt{gy z*{3hY{`TgkrHh{*>3sbBQt`{{i`WKd5o i8k&a~8d({cTN#=|G;B>QW@cbuVDNPHb6Mw<&;$T9EEzoj literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/x-office-document.png b/Media/Themes/Umami/Icon/mimetypes/x-office-document.png new file mode 100644 index 0000000000000000000000000000000000000000..c95c16851b0f0d9a39401b8ac8fb2752284f6957 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haDxNNmAs)xCPC1l-msteeHZfeZ?ZWd9vRY213*3@qerW7#n7rUpw}sG0BZEtBvm^{%R|-y^^EToA zoF_ActCJiG4(@!jneX-g>%ac*eOS-`GG3(X=j{V$3%R6{-`&}7yfdSfW`$p=n3l(faT93ezlChGZ=W(`e95;$D+)BQ3FtMV;Fr?PJo5 z5IzU$+FYV`F$*U&i!8N zIQzf)&9}dB{*{yZ_VH);T8B?B7K*j2r_Jd7&ZDGMbHBFtd-45sr7R8H&!2g!O)gm* ze0%oOi(zxmZdd>F(e!odo@@NGzJ3===-_g84_O;ln{8&dXVJyw+{>JQM~gPxm?+uN zysD2)LFt;DL+bD3^S{p-#x3{Vef7u;+hu<9C099WIEWwFvD0tfDZVGk2U7n3U)+W&+Yhp1o0|Nttr>mdKI;Vst02`W9eEkI}w;GPEVol}|ozPym;(@UupM=11o;fCNzq%X_E-Ort5i+&<-00}*^$8!w*M($cc~@HhIsT&8aM z=NEzuj9->k-4*W57C*F~Gls>j;bD{M`n$QJ;Zkw6!gt=fFTbCi{&}9JD5Hs~>BZV7 z(QIsNA8h!a%Qz`0GAguIyV_~mIG(d)h0&xQ;Id}Z%%_6khT|F>*j_xuPmkKi||5%HUStF6Da zZC}iOHGBJ~<3Gy}>^u~5=j4Gi4u^bZ@E8Zb|FC@38tsSw+NZDFw9RGjVfn`=4=bfH zB=1#Z7T;m*EMi=6PLRd1f@8~;Eesm7KYOZ8iut^JijT_FlfI`pP0h`{#SAm!HXz=ar?e>`=F;haU-ezZRVyd?~`)Co%JjvhR->a|NeDR97g}9MM&qW=!dCy%d zIqa=u_%`lKlNNT))SDxF^~r?wyj$0EOqiLH#BY;p>$%I0sIL0l{G#f-9%D&a8CSxS-_B=JY9@ttwn`qkw8O~#vv+r7;MApi zwsib@rSkQv=ih=4xvy4F7WBE3qj?Oan zKmV-!cXYaFN*1q+5oUHoQc*)RRPx|=&Qo>+Rp4zTrh< zZ)*k98D`xsH_g^!Z6}F;?`og4o}G32Uc`)p($VjfIha%q`zV}bIiw?kr~ zynC}Q!>*k8H@}J n4RsC7bPdfz42`Ue%&iQ~AsV(O7Be$2Ffe$!`njxgN@xNAm#`z& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/x-office-drawing.png b/Media/Themes/Umami/Icon/mimetypes/x-office-drawing.png new file mode 100644 index 0000000000000000000000000000000000000000..884d386cdf1c053a8cdd2b13f4d20dc4e9ba41a1 GIT binary patch literal 883 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}harJgR1As)xCPVx5_4iq_B|J_eh)Sl`F!5*=Li4uWtw_%w?-;d%e5byvGb*7`m(o)nF|xn zbzgEixaC*RR^?S8S`pJ)4cQzWSU9(OeUZ;qaD1}l^2_9XTXOHYENXSoGk4BY6Mt$v z+xC>hwZaotHy`9lAMsPl*vjbAT*1{^v*N*vd8_929*~$Zcebm5+4p^$H+>X4zg~E| zkWY`#B>g9XOBOfvX$FM~IEDrUhD^Qs%6d}xZ;9PA)hurv&no5g)(P2a&6Lcu@4b6_ z-(!XcrZI0?&h|wg_PZft^39NGrVraiz3c_6B$5LJyN)U;3H0B*@>;L?Tk4(K>GvX- zyr=&BS!uOUw=p$x;gbbRdD#Ng+|(i?;}3n_-WkpLuFsB_Tj!7I=H=QEHUG6Y+3(S0 zF8F^_-%A@mfte5xWk*3tje~~K7)DcgT1e2E!g$%^NU1o zyFbSi+vjx~-u`lTSFe{vO1k2UorUjj%wzqs<;KOsH+&~DE|ZTr_`TM}QBjgBfCupDP-; zuQbRe=x>p}P^hCPx1Z5-$)~rUE?v-IU|>)!ag8WRNi0dVN-j!GEJn(YEBkC@@R`%|1_wGI3nZJGA+`Y2(J^4lNs^92?zjwU8yty-H_S8qtEcT_3YCrt04eCqK`@Q*l;=aYj zS1;MxU)x`}d7j{ktFI>Sz7?M{nL+&0ffm&VJ$n|j9N6~w>ruh1{dEN!^h6IHm#@84 z_ar0y_O|D74IU~?Ts!Aviub!QR?3Axd8&9KMI&5e#biZEWuf~=>%PQFv+T2W|Dik~ zd`0usR@s?CsTs>c4&9h(TyXt?f{3_C$FIio&krZ~^3IBm3Rrx7@p0>>hM5y*NY87V zeZ4xOr(?!k2bTFeszg^cJ4PgKWDw_b){!}O)l2kQtV~1vpSm?KUmbeHtE$1_)Rpi> zx}met?!p?yFsaV}vZwqUb~Z?Emu8uyB*o>(Q(^JHLV4FQZ^54u(_$?e`6uXz9BjI$ z8ScB)*TDFe@~-*wy6U}4@{^Tou3ll8T4wEVxGLi1hljh0vp-y$s*ji3?jZNQ_0Fw7Q5<}8*jFtx`e}4v+4OG~(Y$3T}wKYnTjFtKY6W3S@oSb4^{Ehtv;Qjr*KWooR+dnt?DHiZ@%YvP^86L$y>eqJGVLw$;uyMh$XGz*8 zPy41gJXkOAL)@h9_?}HNwbfDE^Jjmps59>Rtu#@CdB*H-lNs-D>HIU=?5a?w{iSMe z&z>oPe;3Z59pjj+_3N4N6^lOaioN%C+{{U9)feDU_%r{lyvur?O$&sS4H+01R7+eV zN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1ywm{X8o1c=IR>@#w oU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kPfq{X+)78&qol`;+06ecuApigX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/x-office-presentation.png b/Media/Themes/Umami/Icon/mimetypes/x-office-presentation.png new file mode 100644 index 0000000000000000000000000000000000000000..fd788b8638b87183e27e6fe837f5a47c155b62ba GIT binary patch literal 1007 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9UCk6O~xH6yuIXO8V9v%h;261t5Sy|bDfB*#r1qKENB_$;W1_o7C zRV^(o1_lOQU0sM^enBp(0Svi$*(s?>DXB?O(UF;1>9MiVq2a-y;lcR@xmnp68JX!R zsY&q(agovCFJ3&4j*aZ-YQ1>z!u$pE^9ynpEnbwDpOasZd+5-iMT-|roi??xsj;`W zXT{3pAVZq>hqWJzw6snMt<8yK&o9U=?A}st$5ZDV(caP4(bd{%Zr+`pyS%A+^`d!e z6csmY*sw7vY3J>_U44Cr4jnvn_~7Bj#=~7*M~)mkx_R@lV@Ho2KYC{S_KO!UTn`Mq zdGX?{t5@%Md*8Wo<<6ZucY}lPPA<8B@7{wucOKlk_u&5h2M-=Rdi3b=qeqV)KYsG$ z${3tB^m74k|JNr+5{{Mo4|NsBLJ3o6F z0|SFaNswPK10xeN8yhtkASeSsF;|zgrt2F4_BcNc~ZR#^`Q21XH27sn8d;N*k@ye2vZ4N4J* z7TNId&WLVM-C|Ix;drL#Tu-NePmhO>m#4S?`4cD3l%zFys<5}1o4fv0Px<}x*Dp4) zgQ}mLq@$!(cNOp1w8_ZGsOa=Vp{I6VOP9V2o7N{FYs%4?(SO4tzgl|xqCI!^{Bde= z$qt*)-Mn^dcA95GLPBMvw$q|D3i_soTNT!?Sh8fz8W~R|2|gz+ZLNtarzSe`mdRe- zy46D{gF$WK+a9(pk^v2yW*RYzDXe<*By)MYt5e+NbLaf-3xrOX=ol4x+^^UFtl#y9 ziGqsfjwmJPq%2p{&{>g|o}_j95Rdrtzzv&&g@vb2ni8;m^W?{g51URJY~D~<@VSeF z^TX!iO-9Cs4_Fy4X=X__gqoOu5_gGfL`h0wNvc(HQEFmIDua=Mk%6v(rLKWlh@pj* zv8k1znYMv}m4U&u&lZL#8glbfGSeymdKI;Vst0Qp0sg#Z8m literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/x-office-spreadsheet-template.png b/Media/Themes/Umami/Icon/mimetypes/x-office-spreadsheet-template.png new file mode 100644 index 0000000000000000000000000000000000000000..711b5b37f6c89787e390ed62914c2f8960cceee7 GIT binary patch literal 1382 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE8J;eVAs)x?hWh)+gv$J@+Z?cMgYj*r z#Kh^#Od@n9ZZmwk-r?qvBh9&2kGL#Wzy0OG!RGcyzS55;PJVfmd*w!Uey^krYgMF# z7ciZkw(VNp>H14Y&*epK4=77ZY`a_eZ12t3V{Ch7{g|{p|JmQ4wfDdOuFDtu5x-?| zuYR9z%dyDsEA@^YU-$0ZnYAlFRAond|G6i>Uw@uOp^cHTwQOF7g^^6J-LI4KANW-! zpIj~1|6KdB$?rD%yXVVZ9JVq0C@;5V?bf@UnM@IdUs{rD9#x1JE6<<$+V{CV`;D@O z-{E=-pLd69J<{L1cdvw`+|f&ygkto>B{r7}9iQIu!;|S__%Zi$T{l;=Z2In2|Cf=+ zc*5&b0de0089f-jeEoWp@uc0k$ND;Fl=VLr>a;c7Kd(G-)hZo<55mlWKB0ndIJ;`u zoAVP(KN=-0blAW!A$$V6LQ+7e>G9Bp4+mUadOVaudpF*RbDOl+T~@kfcNb^Tv#LM$ zML)=Kusrx!apcdPJ2KpC%{B9sCUVT0HS32-w~La>(}*iu<{!QM^Yom3m$^JDSuGjV zJSUylo+z;-Q|e`AEXy_1xtX)r_MLOzrFY?ed1m?w%Y8U8 zYuced7X%)O+aC+~tGKIhLDQmxa(7m&7X6+4F#Ax7H^YXxq9t4QH?3Nw^|1N&-ga$) zr5=Whe$S6ldHc)M>dQY#t#?(OkwS{ekp|l<{MrI)KbZ(k)Mx$O^D(EKU#PQXLY_q0 zzM=*7|7DFH&VJL%f1h#U$!m)~Pl=i1n3OneOS=Ejn?KgR-mqy;myGGJ8c|EB;^`l% z6^tXlEqF0~zF@`Y&`XOxd#Hvdr0Arj==l8R+Z?#kNrt1OZo=-28+VzPpPap{cJfZH zHR}|!^A4Pdx^c$9aMLT>3A4Rl+*V%SY4q#!v+Lj5^-fQ?d#P-_lA}D&@jlbWaE|{` z=ck1q2#w@kVt&FyEkpbCiZu&GzJApVIUZ7Y?E9zJ6-DK46Si-=WL@uDYj@wQZSmE( z9Szmt`wl)V&fna%YjJ|B>y7K7jM?j3yw9?B2?(R22R@{&cDJ$za>6j>ix?)K@wdg~YF2eVHzykXv8zI?*@)Sat}dwcgS+iH6M z-`B4pAKiZGAKNfVQ#aO9U+;ANm49sio|zt$-LIy_z`&qd;u=wsl30>zm0XmXSdz+M zWME{VYhbBsU>0I%VP$M;WoV{tU|?lnFzvI2A&Q3F{FKbJN(LhXLqlByGhIXT5JMv? bBXcW5bBKnmiN(we3=9mOu6{1-oD!M<4VZ7p literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/mimetypes/x-office-spreadsheet.png b/Media/Themes/Umami/Icon/mimetypes/x-office-spreadsheet.png new file mode 100644 index 0000000000000000000000000000000000000000..1c7bc745d6965403174e35e917e57bbf5b41e329 GIT binary patch literal 1178 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_b39!fLp+Xeo$8+c{Re-`h7iDeCpb?e}cH`Q4rVSUCBYUv5p3PyQO|yEA6Yo~M6x z7;AoFCBudnB90E4t&c6X{>@=tV5YY2--p__&W8;Qe7TJ?6_p~UwWhA^p1r2PCCj_P zmxoVIV#(&s!ne15jOiEU+$A<~!RrmTwV1c52h_X#tdVQjA*h}?lVif^ryF#HooboX z7Ptsblr@OZ-}JmvM3$Z7n%_pL&+|ZZbHThtC$m=d`n_#A zSRTIbX{WO@!;W?BLd&l$eXLXb_*3d9`T8S=&glFLI`HUwO4G4_CY_Cq0is*3?Fx1& zn#~|5Z{rdjE&a1b?(hxQOD4>2mJgqs#~uIqOXvIEA37Ts{{7*l@!Kx$r27=dpJ&2l z>_6OCs=nW**2P8an(+$WKo<=Wt`3fMuN5CDEYg@~<@x263jdx@Hcy|riai(C_-PmC zDx8_M@X7BGzHfrROA}w*2|g^(q}&i5-n>e(kl8pzU~j>^E2qytICK6Q*YukC_pPda zUhWS1bh;u)@uvqn|2(T&iHcJ1hE*rB=XF~+o{8@c*%Nx_)Z0gwc5)XhoKtUI{?SXX zR@d{7SLfgPwSw$Y4NG+;Gfe*e&77h!h2ygBT92Mr_}TO7ICpUV+4zxzOMp?TG3@}0(8A*k$tm~uJ^b?M5%+f; z-O?jr;Yv}?mJ?U(c>C7;+4nb={|+AQR%ej@Asw-{{MhQ98V7TwxgUGH*myzu@N&Mp ztX&J&Gl(uYb9Y-k!@j1;QS%E*4H+01R7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly z3@xmTO|1;gv<(cb3=F1ywm{X8o1c=IR>@#wU}&goV5Vzm9%5)@Wn^w;Xb#b^HL;kP Qfq{X+)78&qol`;+0EZ#?8vpK z;HUHMdIkmt&H|6fVg?4@>mbbNq%pgKfq^N|)5S5wZ?V4kKEZE3tlPI`S^8N{0P)(>Yli$z9DD>+ufEhs~19!EaJK%3op2CaGs^4$15W0 z8?E2@)NE~T@%h3NxqC8&P2N7ZbiZKd^S$r?+P<$m&z|$L-g^zN%|4BOrkA|GN>zfg z_UI*C-ShjT_?$Ny-0x%-Fiv1vqO)9@sYQT8Q(&P*#pxRt&EoD@Z{<_EHY?t{Z?n<& znH#U~wb;3G)54Z(+xAAZ9WY_JIBo8XHibJf%isR+eKW0g$K?EiPpoZh)vFXPncwGK zvR=*DvO>;te<@5vrj9k`D=3O%aiIJTlIqdwNHZ1 z2RCeqH(2)m!_7;=Fp~<09F8Y=k+K1lw^clx` zwy{-TYKUN+aJrANV8dstQ!^RXUWj^_*?LVbBeXO0-qi4aH~Zx+%KFZ{SglpTYG8AL z*CG6U$Nn|a!OvpW7dqsi`6*@^V zFXxAE-S$%U!9g`Oh63}6LA9%!qu71t?<<%+|K`NDnB?Eql65~jT)aXnXKkJIHlSr$ zM7A@-X}+sH*BM(Bx9wGI;K}{1?Z9Bjpna$1row`h(6kF&A`Dx_5}3pqWV79Gp8cP( zma*|#+oBrd2$pMR91)B$XHFd0{QLQCX|4P3FCCgx$7j(Xp5v_>=^)X;B&hI2Jo(3c z(EuhfMsW?M{eL2+zGBSMoUwc6;eAW9{<7sWToWphdCbeez@S><8c~vxSdwa$T$Gwv zlFDFYU}T_cV5w_h7Gh{&Wo&9?Xr^soU}a!1?X!g;iiX_$l+3hB1|tJQLtO(iT|@H_ dLnA9Ab1Or0h=#3+#mu0@?dj_0vd$@?2>=49R(AjZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/application-x-gnome-saved-search.png b/Media/Themes/Umami/Icon/places/application-x-gnome-saved-search.png new file mode 100644 index 0000000000000000000000000000000000000000..4b39b7e00835e83bef8edadd8e2589fa2e26eaaa GIT binary patch literal 1207 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_Q#@T9Lp+XOoobyE<0{g&f97s}>+IR3 zEsVEYSOf%I7(E<|gyjTzg%&ZID|mZ)zdY2cEv~TisEJsp%B&78p+!p?UAkDE3I#k2 zS?nLF^gX_@Z};okJ2NfYAHBPEZ)>lU%i)!2@8b>h%cI#%t^v5na^ObLLDmd+G+}5BFAn*Ap%0b@}GJ%Ck4Ck~{g*k+oZ`Crr3<#(e(1OU40z&+e~n zI^v_4+n`ct@%-fa*z_N-o=Zq?b-kqJUhIBcQGbP0@HJh7GrBi^dr25As5bf_<)k33 z|MAI7{)$(3H!rAOc4>xfSDUlWrIgvP=hqq~%nID{^+0uh?vWJk+JHE>$FtuGU#ylX zy&Vv5A7K~l@TvL6i7xEgsyb%9-OO(v&`W42+`zTLMM3luCZ4S90UQPShq z6RuZMKUCbLRnOd7f5Eilc9e6hsL|ag@l~QL?iUOue@{@uaUJ9D#VtUG?f{=1smeeZ8iG`41o zPpn!Hc*`fGvOs_#xc{VWoy=w94qKxOW{r8pspXfAJD9#k@1O9po^A5$gI{EsMQfHm zIlAE@=Lv~qlj`5;Tgv3?UsuarJ0!QxOJU`dqS>a?tQdc0ZT%Jd_WaKNtew4Q4qfeS zXM2;v-_;eruHffkZ=EIm7p^Ux#M;)-cy7~QZ{Y| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?VxBIJAs)xyPW8xbku?O6ZF2U!`)aH6vCd<@qjGk)+)og{pc{tG2vy`m<#1LaD7H ziV9ONeq5+lcSL3KNsG_#EcKr4`~L2XvDt%b%>Cu>Yrp^b|GfU(&i99+f6IICO^VyC zmV98v*TCOL%9OK7&h9s0EN@(KIznoroR?zVMsXByZo#WY_j^(JSA7yPkcWoq4<1;GJ0E;?gK%ulZrev||3IPgpeJ1*#LP&Gcbz|Epk?ew{Ad+&T}cUn=X=(vdOXwl5n z-uR*okIQH6pW&^xIPhY(e%u5l*Of6!99p)856>UZxpn8%)YrCKSNaP*;dY(J|AcYI z=YuwVa{s5#46bq8T(fcB`S3MMPd9zHd*}bAlf%X5{7vKKb|v;=pAOsqt=;%r;=`3~ z^PbNU&p$Y6>e~Ht?e;I$I{Wkz@0`hR;zTAlWPX#qb}V2gzuRtM8?F7%I313Ce0lWW zy4a>EtbQ>%i`QKJK_gjH!N|bCM8PXDyEI85xFj_*FSUq^%eg2uu_QG`p**uBLm?z1Rl(iUH(@#h3`Pb<2D%28x&~$;h89-FrdEb#+6D$z1_skUTNt8f$jwj5 tOsixtGB7mMH89gPG!HQ}vNAHaGPHnbaMomg#lXP8;OXk;vd$@?2>|D==HvhX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/distributor-logo.png b/Media/Themes/Umami/Icon/places/distributor-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9403d6a0a6fa868c02a7aece7fb9499a31c846e4 GIT binary patch literal 1119 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovuPZ!4!kK=cz`gTNziX5;1zIV^`{*%X_ z6qoFqwe1uK>spIlvs!PoPSA@AWKj$VcyuhZFu73sNKoO$R_@Kc+2N%NImDJIrDQCv zdl;c^e6FPJ+3TezPoMU_SAG5H7S$;;Ju^xlN6ssL_rLu7&hPWM|8ML(E*haXMW5Nd zp?hl3zgzpcDn8!*G~Hii`MGoFk3{~>z5Ugua!b&u|F*LpSNF`Vmzw)&e(m!!+$<&X z%?lU*`*Qr9`+=PoZJq`)u3EL{`?b~QHznV=vqEakoR}lawbt9t`R>v1)M@904z?{N zNnO#qW3zH+yO?yWTRHKm)6W+!x~HCX1wN2gJR+$1RQl?Ay&8KVyRSZGx_RchHanji zRPhzh?1;IYvyZRFXdjbeUYqj5>C^hopH(<=HD}!pBcZEoecv5q90V`C zRJ^7uqUPO^!bvMxy#3E=b9{_73*Qs}@$1|w_g}TAmdCk+l|OLm-u87`P5%z;l&`iI`>4LTxbWg;S*Km6 zw!VJ7W8L?%rBlAEv6`G&*BT%GeO-_LK@;5uu@8S9Z~H@?hdTjy>gy8LEVyVlYg{vWeAbMBbz zePY4a_u8n$W{HTxQVB`P~^+O*SCgXYZ)`SU;VKZ9tN_rb95%$pb(7*tDKBT7;dOH!?pi&7IyQW=a4j0|)Q zEOiacLJTdej7_Z!&9n^+tPBjMeYP+}(U6;;l9^V?U}RuusB2)RYiJ%~Xk=w%Ze?fz z(crAf{EC5rK@wy`aDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$QVa|X44$rjF6*2U FngEQS@CpC` literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/emptytrash.png b/Media/Themes/Umami/Icon/places/emptytrash.png new file mode 100644 index 0000000000000000000000000000000000000000..ae881de70b6e5e2a4a911e462eb88d14c62ca846 GIT binary patch literal 1323 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE9G)(YAs)xCPCcI;>nd{G{`(SAVG~veDyJ+}@Ho)gwBthP{|2!x`wc4=DfBQDM4Fq^Tt*FY_8gCR#Nbo*Ja7BJ$D{l?c_Xm{5a>7 zLw7B%mDbnpYmQic*>z3MZH5b}-_D80@2&iEe@@+IR>zcH&HKs5vdizSH9dZ8o@C!* z3Bh*3_6}F^X^TX)RZUJ@aKV^J#O0TTiZFp=`@{d4;2Y24v2XJdk+*RqSnd0?gHScBb)mv^EcfbDq z>vf+*`Boj)rHg#GFlWnpg|1Y!?mT2QUCdv&tyHeEf~mj3U{&DyyN4ef(0lb&a80R1 zvVQK$0}|CcHF!?-H|jAYUho&R@up!Bx0n)+npVx-(sAftma5#r&rUY0H0+n%wCZm^)NxSaV8_z++va-h;nn6| zlF477VZY$|UbSnx*7oP<_HJ@{l+j_6pVV{gyGiD?l$EBwnJmd(ADq~Jmv6o@D|tbl zXLz{4>gz1$7tbyesNT(`(>wK>DZ4_La+t;!F7LI)JiN9Z>u)bQ@%*OsFOhlT6GOHo zZ%O=k>dmY@76&FS+k4YE!y27%Ad<+W3SYc)nWD{?tnb^ z@{`>n&t<$^Gv+Sd>T>SlEhdF&ZnK_kydm@2rpL5HuxF#mv~K^% zvqx;r-hFm`LYr)kM(W#FE|OrGme2I#-|kIDc9JIP>1kzm%m3RQIWa5chN(jPiLZ&e zZ)9tQHctDxFWKkdm;7{1?)OR?(tX>aW-nn{r}KipzrOgnC}Q!>*k8H@}J4RsC7bPdfz z42`Ue%&iP9AR3%CnO`w5Fi3)I2+mI{DNig)WhgH%*UQYyE>2D?NY%?PN}v7CMv8%f Ofx*+&&t;ucLK6Toa8QW= literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/folder-remote.png b/Media/Themes/Umami/Icon/places/folder-remote.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2f227f8ae86d5dd2870f1d51bd349f075d931e GIT binary patch literal 1128 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/folder_home.png b/Media/Themes/Umami/Icon/places/folder_home.png new file mode 100644 index 0000000000000000000000000000000000000000..9a834163f798fcaf8e05cfe124c69d9e21be60da GIT binary patch literal 1114 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_=AJH&As)xCPTiXy9V*d2zqlq>-S3js zg@#)kD=)0#=HX!MY6);ncQg7WpKwNCiB8HH8P17@)#+g&T1G4?2@kv-HCBq;N>VR; z^CRwl^}aZ^+t=4U4lqr6XfFG5&gbfT>#Ozt++WJp{q*V6LysOky5q{e`f65nZLMvL z)P`-_zO4>=C8jW$uT6l@^~v7e-ri?R8CI`e9klxDhkMFOEf=`MTmrl{?%sX-?(N&r z>%&&hUd+bM&d!jNpTGP+S43na=hi4+Svk2!bCg>gI274k0*{s;+L{%$bs2ONG2Nw_IxxxN+;&E^EzZ znFn)3pX=PK?vZ73Q=D12<$ThVSE}o_o>QDznDz6rewwuBQQI9qPh61ikV)t{8g=~N z#K-^o`PP>1Z)&ZxZ3{ekL#Bge$&ZPLRt9^0_&3?Q_x%Lv1t}`b>i4Q&r8n~5-+A)5 z{2fQPnkkQ*dUHgD9{>1rdcC;A$(?c*&pnJ16LtFRjl$1mHny6lol+3UtUdQ+YqsdSy;~2|*`_`Jo?Ig_smUSDChFxi%Z9Cc)zrfZ zmj=19EIK3*&}Z`g-n{46RvRx6*}ne#$4fCY+xMGfl*<;rnxQ9ZaBQK;+2V${PMglg zn_e5Y-~3+xG;8Me`1$FpR=ixI*FH_@=v{O18$aK6gyqc86ZPE9_8=pOt>V3B?)uzg zyz}Q)X)AA?cc!goPSY2=4QaSyw<|G>5r{u^Mg5yvsoUu`n~Ejp58pqB={J+ zr)I_$<40?zht3gQF<)(mfSmuC16J)H_padc-&M)H+?!QSzWj6L8AmRuwLLrHx0MAJ zU-DY}Bfy@W!D&+EsiREGW80-?_8qC%_y2RtbIr|8n{%Y4dnQq9-P^1c2! zOJ(LBeX06pYDdTETmJk1{`{Bz`)}CE1@W#A*fto%Z4(b+xOISW!l42Mw)1H$D^6Q{ zSFP=M+7$o3eqB9-_PZCe4=$M%!@$6xTH+c}l9E`GYL#4+npl#`U}Ruqple{MYhV^) zXkle+YGr7qZD3$!U@+~og&~TD-29Zxv`Pje14Bby12bJi^AJNLD| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?VxBIJAs)xyPW8xbku?O6ZF2U!`)aH6vCd<@qjGk)+)og{pc{tG2vy`m<#1LaD7H ziV9ONeq5+lcSL3KNsG_#EcKr4`~L2XvDt%b%>Cu>Yrp^b|GfU(&i99+f6IICO^VyC zmV98v*TCOL%9OK7&h9s0EN@(KIznoroR?zVMsXByZo#WY_j^(JSA7yPkcWoq4<1;GJ0E;?gK%ulZrev||3IPgpeJ1*#LP&Gcbz|Epk?ew{Ad+&T}cUn=X=(vdOXwl5n z-uR*okIQH6pW&^xIPhY(e%u5l*Of6!99p)856>UZxpn8%)YrCKSNaP*;dY(J|AcYI z=YuwVa{s5#46bq8T(fcB`S3MMPd9zHd*}bAlf%X5{7vKKb|v;=pAOsqt=;%r;=`3~ z^PbNU&p$Y6>e~Ht?e;I$I{Wkz@0`hR;zTAlWPX#qb}V2gzuRtM8?F7%I313Ce0lWW zy4a>EtbQ>%i`QKJK_gjH!N|bCM8PXDyEI85xFj_*FSUq^%eg2uu_QG`p**uBLm?z1Rl(iUH(@#h3`Pb<2D%28x&~$;h89-FrdEb#+6D$z1_skUTNt8f$jwj5 tOsixtGB7mMH89gPG!HQ}vNAHaGPHnbaMomg#lXP8;OXk;vd$@?2>|D==HvhX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/gnome-fs-directory.png b/Media/Themes/Umami/Icon/places/gnome-fs-directory.png new file mode 100644 index 0000000000000000000000000000000000000000..5257570163e78d84b432d958481822a5e1395de3 GIT binary patch literal 1008 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haXFXjULp+XOow`3?*;VAY{pPsa;_Br^ zESft^)F-^-cVKdL;&Al!^!m>{MYCy2+mw~cib2cv&k|!)a@FADauMu$qQdMh^ytRM z>${Ef?=9Xi*J2y<^NzNB)73No);;@sWBZ5t>C(E_u3z_Fy?QnOd#i}`*R5~gzFn1n z;M%oo`sa3TXP8|Y5IQ^U+qrY+{9ea3oIUHCZ6b9#xetXlEPRKYixkB{${V#}!)vc}T;kCgA; zy<6Uw>C#1|V;QSnxwJ?;)@_*iaBq5UZf;^_<;NY)VdH658CMezz_6$9{SK(nD^F_nv<&-J zsz2A|;M%g!yvAf#<&toYxRPZT&zOj+`so|HeEmLCkVUY@Bdj@tm(MA< zc&^#ib}kdcEYXQsJCCHsPp~}8*p;wlSL^Ye`_mX-JUb=5-gZ%(cVv}8d^eNIxr?tw zld{AoH(aqych~1WciZy5o&CJqG77UUy-gK;xi!v*X;tL3+OL<_r_XPRGTr;?>Guug zX=ygTe~DWM4fId7w< literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/gnome-fs-ftp.png b/Media/Themes/Umami/Icon/places/gnome-fs-ftp.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2f227f8ae86d5dd2870f1d51bd349f075d931e GIT binary patch literal 1128 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 VAR3%CnO}i&l&7no%Q~loCIH#oy}AGZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/gnome-fs-nfs.png b/Media/Themes/Umami/Icon/places/gnome-fs-nfs.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2f227f8ae86d5dd2870f1d51bd349f075d931e GIT binary patch literal 1128 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_uAVNAAs)xKPCM_f5-MZ zOfY)=O6RnJ!Cm9OyW*y{OSZk7d#_Y6YWelQ_g4GYu3mLN`$4_gE{QYe&Q(pGJlTBS zR)elZo2O0{-D#FkS@|prswLbT62m6LOV*DLqi1w zzkUCHo1L9qJ5XdTzm+wnp)u;Sp@?_`+N=|2Zp2zSlShe9=QdZU~8#}wcjT;SH5;>Hb4B3>L zdV71ncZqyqJTucMz2MxzwCN3w9$Av<&kZ|v9qKi#^~jo;X8(83Ckx4^zqkM2@WRwZ zJ|VYFCs{_$_+9OJgJWNeUVQyjC^^;cD*GxX-h1i>bCp=`)s=kzSbia#@e(8Jnsb&{ z&a=MXS1B#OuUOpbK|9C!EsdJ`8+*?0`|(W7!779~&25ra-c;`u=GGMzm-czNC#ih+ z@Tr&KnDN>ssSQTPk9c+%hcStK=-nygAmXvMS@E(AQ%dCa6P|86ETfvV9#re|by)Wl zy*L=fCTY^fa96}qMQlY6+uf7mAKtr6T*CK;<*9+g@?6FTJ3JWY6u(HhyD4&-qWhv3 zwNLM+pJuvP<8Jy`MC(`iM5e^FEo%>1xvqXJu$<>~(2ErYzAM{*WipBV+#KL|jOVpT zZ&=$cPien@cV8};%gUyH)^C~LD`y6VNlW;a9ypvi`(StpA4BG{j4eUji_~2iwpcZV ztK}(4eGQb{8P(0ypy(vCoJW^IVB()&D|#Qd_5bFtJN-VSaohYSaeP5SK#(J`rsG1v{tH@MVf@>Q)a%7JYh(24Q+g_s4OXdm?%BC>r~kEU*D~_+*VhZaee>qTvuDr3g@uJP{Uk3|${d#t z6!|+Z*udWYzfgli=AA$&GiPcv zmE<3Px}bLc^S*iW=FQuGuKz%N)_(@Ud4Gb1zVtn1U|>)!ag8WRNi0dVN-j!GEJ1_nux4Z-8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wh6VV9xH6Ce&YnFBQ4VK7xVT7&G6>1Qz>tuT08x1s3_`<$6A}{6 zo;{n8kWf=oQ&(5l(b3V>)wOu>;-yQMu3EKf_3G7Y*REZ+Zr%Fz>o;!PxM|a-&6_uG z*|KHp)~(yNZQH(m`;HwucJAD{YuB#byLa!|vuE$#y$25-Jbd`@v17+hoH%jveZ{)u3fu+{rZg?H*Vg%dF$4# z+qZAuxpU{_}RaDh<^-ayK?Cc!f;>sp&-k*BzhBE^L17ni6y9+}HtE>kD z1EYeci(`m{BS*u|8~$;+v?)-w&7TdUd1K% z-|ppq&cMK+@gR%oz$bN$0@I&1Q)AP9{i`l#7gdX2F2p6jug9UGi2HyHM?x)c!FE=r zif!lL%$&K1nQ@JnP!KcAi}Uv<20dHElvq^h_3!+dGiPi}KG((QJ6ZBveWu~KP3d={ zZckD`{;oGqGj7ZmSvpPW&i&cPx68ekk5aPV*~)P1=Bg{#m&7+PNS=Nj_d)r@ocZA?Y`R5^L;a85XRSli%$m+21bY{62DZRnHxra!6YGz~Ud+zDUSzuM7hN zgI$ShM2T~LZfsH%t8z;tc*>q z49&C+46F0ny;B$@~iBc28G7 Jmvv4FO#l#Ap9TN` literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/gnome-fs-share.png b/Media/Themes/Umami/Icon/places/gnome-fs-share.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2f227f8ae86d5dd2870f1d51bd349f075d931e GIT binary patch literal 1128 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 Ofx*+&&t;ucLK6Toa8QW= literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/gnome-main-menu.png b/Media/Themes/Umami/Icon/places/gnome-main-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..9403d6a0a6fa868c02a7aece7fb9499a31c846e4 GIT binary patch literal 1119 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovuPZ!4!kK=cz`gTNziX5;1zIV^`{*%X_ z6qoFqwe1uK>spIlvs!PoPSA@AWKj$VcyuhZFu73sNKoO$R_@Kc+2N%NImDJIrDQCv zdl;c^e6FPJ+3TezPoMU_SAG5H7S$;;Ju^xlN6ssL_rLu7&hPWM|8ML(E*haXMW5Nd zp?hl3zgzpcDn8!*G~Hii`MGoFk3{~>z5Ugua!b&u|F*LpSNF`Vmzw)&e(m!!+$<&X z%?lU*`*Qr9`+=PoZJq`)u3EL{`?b~QHznV=vqEakoR}lawbt9t`R>v1)M@904z?{N zNnO#qW3zH+yO?yWTRHKm)6W+!x~HCX1wN2gJR+$1RQl?Ay&8KVyRSZGx_RchHanji zRPhzh?1;IYvyZRFXdjbeUYqj5>C^hopH(<=HD}!pBcZEoecv5q90V`C zRJ^7uqUPO^!bvMxy#3E=b9{_73*Qs}@$1|w_g}TAmdCk+l|OLm-u87`P5%z;l&`iI`>4LTxbWg;S*Km6 zw!VJ7W8L?%rBlAEv6`G&*BT%GeO-_LK@;5uu@8S9Z~H@?hdTjy>gy8LEVyVlYg{vWeAbMBbz zePY4a_u8n$W{HTxQVB`P~^+O*SCgXYZ)`SU;VKZ9tN_rb95%$pb(7*tDKBT7;dOH!?pi&7IyQW=a4j0|)Q zEOiacLJTdej7_Z!&9n^+tPBjMeYP+}(U6;;l9^V?U}RuusB2)RYiJ%~Xk=w%Ze?fz z(crAf{EC5rK@wy`aDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$QVa|X44$rjF6*2U FngEQS@CpC` literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/gnome-mime-x-directory-nfs-server.png b/Media/Themes/Umami/Icon/places/gnome-mime-x-directory-nfs-server.png new file mode 100644 index 0000000000000000000000000000000000000000..cb27e4230a2aa396716f2d665f06236bf3ecd4bd GIT binary patch literal 1021 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wh6VV9xH6Ce&YnFBQ4VK7xVT7&G6>1Qz>tuT08x1s3_`<$6A}{6 zo;{n8kWf=oQ&(5l(b3V>)wOu>;-yQMu3EKf_3G7Y*REZ+Zr%Fz>o;!PxM|a-&6_uG z*|KHp)~(yNZQH(m`;HwucJAD{YuB#byLa!|vuE$#y$25-Jbd`@v17+hoH%jveZ{)u3fu+{rZg?H*Vg%dF$4# z+qZAuxpU{_}RaDh<^-ayK?Cc!f;>sp&-k*BzhBE^L17ni6y9+}HtE>kD z1EYeci(`m{BS*u|8~$;+v?)-w&7TdUd1K% z-|ppq&cMK+@gR%oz$bN$0@I&1Q)AP9{i`l#7gdX2F2p6jug9UGi2HyHM?x)c!FE=r zif!lL%$&K1nQ@JnP!KcAi}Uv<20dHElvq^h_3!+dGiPi}KG((QJ6ZBveWu~KP3d={ zZckD`{;oGqGj7ZmSvpPW&i&cPx68ekk5aPV*~)P1=Bg{#m&7+PNS=Nj_d)r@ocZA?Y`R5^L;a85XRSli%$m+21bY{62DZRnHxra!6YGz~Ud+zDUSzuM7hN zgI$ShM2T~LZfsH%t8z;tc*>q z49&C+46F0ny;B$@~iBc28G7 Jmvv4FO#l#Ap9TN` literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/gnome-mime-x-directory-smb-server.png b/Media/Themes/Umami/Icon/places/gnome-mime-x-directory-smb-server.png new file mode 100644 index 0000000000000000000000000000000000000000..cb27e4230a2aa396716f2d665f06236bf3ecd4bd GIT binary patch literal 1021 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wh6VV9xH6Ce&YnFBQ4VK7xVT7&G6>1Qz>tuT08x1s3_`<$6A}{6 zo;{n8kWf=oQ&(5l(b3V>)wOu>;-yQMu3EKf_3G7Y*REZ+Zr%Fz>o;!PxM|a-&6_uG z*|KHp)~(yNZQH(m`;HwucJAD{YuB#byLa!|vuE$#y$25-Jbd`@v17+hoH%jveZ{)u3fu+{rZg?H*Vg%dF$4# z+qZAuxpU{_}RaDh<^-ayK?Cc!f;>sp&-k*BzhBE^L17ni6y9+}HtE>kD z1EYeci(`m{BS*u|8~$;+v?)-w&7TdUd1K% z-|ppq&cMK+@gR%oz$bN$0@I&1Q)AP9{i`l#7gdX2F2p6jug9UGi2HyHM?x)c!FE=r zif!lL%$&K1nQ@JnP!KcAi}Uv<20dHElvq^h_3!+dGiPi}KG((QJ6ZBveWu~KP3d={ zZckD`{;oGqGj7ZmSvpPW&i&cPx68ekk5aPV*~)P1=Bg{#m&7+PNS=Nj_d)r@ocZA?Y`R5^L;a85XRSli%$m+21bY{62DZRnHxra!6YGz~Ud+zDUSzuM7hN zgI$ShM2T~LZfsH%t8z;tc*>q z49&C+46F0ny;B$@~iBc28G7 Jmvv4FO#l#Ap9TN` literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/gnome-mime-x-directory-smb-share.png b/Media/Themes/Umami/Icon/places/gnome-mime-x-directory-smb-share.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2f227f8ae86d5dd2870f1d51bd349f075d931e GIT binary patch literal 1128 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_uAVNAAs)xKPCM_f5-MZ zOfY)=O6RnJ!Cm9OyW*y{OSZk7d#_Y6YWelQ_g4GYu3mLN`$4_gE{QYe&Q(pGJlTBS zR)elZo2O0{-D#FkS@|prswLbT62m6LOV*DLqi1w zzkUCHo1L9qJ5XdTzm+wnp)u;Sp@?_`+N=|2Zp2zSlShe9=QdZU~8#}wcjT;SH5;>Hb4B3>L zdV71ncZqyqJTucMz2MxzwCN3w9$Av<&kZ|v9qKi#^~jo;X8(83Ckx4^zqkM2@WRwZ zJ|VYFCs{_$_+9OJgJWNeUVQyjC^^;cD*GxX-h1i>bCp=`)s=kzSbia#@e(8Jnsb&{ z&a=MXS1B#OuUOpbK|9C!EsdJ`8+*?0`|(W7!779~&25ra-c;`u=GGMzm-czNC#ih+ z@Tr&KnDN>ssSQTPk9c+%hcStK=-nygAmXvMS@E(AQ%dCa6P|86ETfvV9#re|by)Wl zy*L=fCTY^fa96}qMQlY6+uf7mAKtr6T*CK;<*9+g@?6FTJ3JWY6u(HhyD4&-qWhv3 zwNLM+pJuvP<8Jy`MC(`iM5e^FEo%>1xvqXJu$<>~(2ErYzAM{*WipBV+#KL|jOVpT zZ&=$cPien@cV8};%gUyH)^C~LD`y6VNlW;a9ypvi`(StpA4BG{j4eUji_~2iwpcZV ztK}(4eGQb{8P(0ypy(vCoJW^IVB()&D|#Qd_5bFtJN-VSaohYSaeP5SK#(J`rsG1v{tH@MVf@>Q)a%7JYh(24Q+g_s4OXdm?%BC>r~kEU*D~_+*VhZaee>qTvuDr3g@uJP{Uk3|${d#t z6!|+Z*udWYzfgli=AA$&GiPcv zmE<3Px}bLc^S*iW=FQuGuKz%N)_(@Ud4Gb1zVtn1U|>)!ag8WRNi0dVN-j!GEJ1_nux4Z-8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2w<^}kKxH6Cn>g($m7#MPMa~K#H;^N{M7#M!HmX=!O0b<;94 zGm49gN_sa|R#sG3SJ&6qH8wUhH#hh8_D+~EVeZ^H3+HZHvSjh9RV&x7U9)-P!OfdD zZ{Bxd%a+YsHy_-#AmsE?vHS`RdiH*KR$$e*OB58#iv=ym|Zf z?K^kw+`D)0{{8!pA3uKj^y#x_&t8GR>({Sezj^cK?c2BS-o1PO{{4p!A3lBh^ce)c zdCp z3?v)^9lNT-T?6k#KVH6oGw*2QqlBHTx*oE*0;~W0Y}>Z-fb9EU-tX>CuZ~}579HxM zU(j|m=;7W)b8bYeWT@)rZF(P|wy#i8DDgi3x#`_DcD(I}Tkp^Hns`_}o&ESqkwfuQ znGA*6Ii8 zic{5`dv=*>@PiXZg33ocU+3D;!k^w`>9=j3Yt^|$Zdzxt-==IZ}8 z^;W!@%Tjo6{bXQZuq$zmC~?lu%}vcKVQ?-=O)N=GQ7F$W$xsN%NL6t6^bO$R(n!`+ zFfuSOR`5#9E=^KU&&tfrO-xo-2rfy@%u6j&H+~<%z`&piGASjoB-JVzYz%{ufsui( zfu*j2S%{&9m9eRnp_#UUft7*5w9giXC>nC}Q!>*k8H@}J4RsC7bPdfz42`Ue%&iP9 VAR3%CnO}i&l&7no%Q~loCIH#oy}AGZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/gnome-stock-trash.png b/Media/Themes/Umami/Icon/places/gnome-stock-trash.png new file mode 100644 index 0000000000000000000000000000000000000000..ae881de70b6e5e2a4a911e462eb88d14c62ca846 GIT binary patch literal 1323 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE9G)(YAs)xCPCcI;>nd{G{`(SAVG~veDyJ+}@Ho)gwBthP{|2!x`wc4=DfBQDM4Fq^Tt*FY_8gCR#Nbo*Ja7BJ$D{l?c_Xm{5a>7 zLw7B%mDbnpYmQic*>z3MZH5b}-_D80@2&iEe@@+IR>zcH&HKs5vdizSH9dZ8o@C!* z3Bh*3_6}F^X^TX)RZUJ@aKV^J#O0TTiZFp=`@{d4;2Y24v2XJdk+*RqSnd0?gHScBb)mv^EcfbDq z>vf+*`Boj)rHg#GFlWnpg|1Y!?mT2QUCdv&tyHeEf~mj3U{&DyyN4ef(0lb&a80R1 zvVQK$0}|CcHF!?-H|jAYUho&R@up!Bx0n)+npVx-(sAftma5#r&rUY0H0+n%wCZm^)NxSaV8_z++va-h;nn6| zlF477VZY$|UbSnx*7oP<_HJ@{l+j_6pVV{gyGiD?l$EBwnJmd(ADq~Jmv6o@D|tbl zXLz{4>gz1$7tbyesNT(`(>wK>DZ4_La+t;!F7LI)JiN9Z>u)bQ@%*OsFOhlT6GOHo zZ%O=k>dmY@76&FS+k4YE!y27%Ad<+W3SYc)nWD{?tnb^ z@{`>n&t<$^Gv+Sd>T>SlEhdF&ZnK_kydm@2rpL5HuxF#mv~K^% zvqx;r-hFm`LYr)kM(W#FE|OrGme2I#-|kIDc9JIP>1kzm%m3RQIWa5chN(jPiLZ&e zZ)9tQHctDxFWKkdm;7{1?)OR?(tX>aW-nn{r}KipzrOgnC}Q!>*k8H@}J4RsC7bPdfz z42`Ue%&iP9AR3%CnO`w5Fi3)I2+mI{DNig)WhgH%*UQYyE>2D?NY%?PN}v7CMv8%f Ofx*+&&t;ucLK6Toa8QW= literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/gtk-directory.png b/Media/Themes/Umami/Icon/places/gtk-directory.png new file mode 100644 index 0000000000000000000000000000000000000000..5257570163e78d84b432d958481822a5e1395de3 GIT binary patch literal 1008 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haXFXjULp+XOow`3?*;VAY{pPsa;_Br^ zESft^)F-^-cVKdL;&Al!^!m>{MYCy2+mw~cib2cv&k|!)a@FADauMu$qQdMh^ytRM z>${Ef?=9Xi*J2y<^NzNB)73No);;@sWBZ5t>C(E_u3z_Fy?QnOd#i}`*R5~gzFn1n z;M%oo`sa3TXP8|Y5IQ^U+qrY+{9ea3oIUHCZ6b9#xetXlEPRKYixkB{${V#}!)vc}T;kCgA; zy<6Uw>C#1|V;QSnxwJ?;)@_*iaBq5UZf;^_<;NY)VdH658CMezz_6$9{SK(nD^F_nv<&-J zsz2A|;M%g!yvAf#<&toYxRPZT&zOj+`so|HeEmLCkVUY@Bdj@tm(MA< zc&^#ib}kdcEYXQsJCCHsPp~}8*p;wlSL^Ye`_mX-JUb=5-gZ%(cVv}8d^eNIxr?tw zld{AoH(aqych~1WciZy5o&CJqG77UUy-gK;xi!v*X;tL3+OL<_r_XPRGTr;?>Guug zX=ygTe~DWM4fId7w< literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/gtk-network.png b/Media/Themes/Umami/Icon/places/gtk-network.png new file mode 100644 index 0000000000000000000000000000000000000000..f47b6a310298d356cba268da68ffa9e9595ba16f GIT binary patch literal 1071 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2w<^}kKxH6Cn>g($m7#MPMa~K#H;^N{M7#M!HmX=!O0b<;94 zGm49gN_sa|R#sG3SJ&6qH8wUhH#hh8_D+~EVeZ^H3+HZHvSjh9RV&x7U9)-P!OfdD zZ{Bxd%a+YsHy_-#AmsE?vHS`RdiH*KR$$e*OB58#iv=ym|Zf z?K^kw+`D)0{{8!pA3uKj^y#x_&t8GR>({Sezj^cK?c2BS-o1PO{{4p!A3lBh^ce)c zdCp z3?v)^9lNT-T?6k#KVH6oGw*2QqlBHTx*oE*0;~W0Y}>Z-fb9EU-tX>CuZ~}579HxM zU(j|m=;7W)b8bYeWT@)rZF(P|wy#i8DDgi3x#`_DcD(I}Tkp^Hns`_}o&ESqkwfuQ znGA*6Ii8 zic{5`dv=*>@PiXZg33ocU+3D;!k^w`>9=j3Yt^|$Zdzxt-==IZ}8 z^;W!@%Tjo6{bXQZuq$zmC~?lu%}vcKVQ?-=O)N=GQ7F$W$xsN%NL6t6^bO$R(n!`+ zFfuSOR`5#9E=^KU&&tfrO-xo-2rfy@%u6j&H+~<%z`&piGASjoB-JVzYz%{ufsui( zfu*j2S%{&9m9eRnp_#UUft7*5w9giXC>nC}Q!>*k8H@}J4RsC7bPdfz42`Ue%&iP9 VAR3%CnO}i&l&7no%Q~loCIH#oy}AGZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/inode-directory.png b/Media/Themes/Umami/Icon/places/inode-directory.png new file mode 100644 index 0000000000000000000000000000000000000000..5257570163e78d84b432d958481822a5e1395de3 GIT binary patch literal 1008 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haXFXjULp+XOow`3?*;VAY{pPsa;_Br^ zESft^)F-^-cVKdL;&Al!^!m>{MYCy2+mw~cib2cv&k|!)a@FADauMu$qQdMh^ytRM z>${Ef?=9Xi*J2y<^NzNB)73No);;@sWBZ5t>C(E_u3z_Fy?QnOd#i}`*R5~gzFn1n z;M%oo`sa3TXP8|Y5IQ^U+qrY+{9ea3oIUHCZ6b9#xetXlEPRKYixkB{${V#}!)vc}T;kCgA; zy<6Uw>C#1|V;QSnxwJ?;)@_*iaBq5UZf;^_<;NY)VdH658CMezz_6$9{SK(nD^F_nv<&-J zsz2A|;M%g!yvAf#<&toYxRPZT&zOj+`so|HeEmLCkVUY@Bdj@tm(MA< zc&^#ib}kdcEYXQsJCCHsPp~}8*p;wlSL^Ye`_mX-JUb=5-gZ%(cVv}8d^eNIxr?tw zld{AoH(aqych~1WciZy5o&CJqG77UUy-gK;xi!v*X;tL3+OL<_r_XPRGTr;?>Guug zX=ygTe~DWM4fId7w< literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/network-server.png b/Media/Themes/Umami/Icon/places/network-server.png new file mode 100644 index 0000000000000000000000000000000000000000..cb27e4230a2aa396716f2d665f06236bf3ecd4bd GIT binary patch literal 1021 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wh6VV9xH6Ce&YnFBQ4VK7xVT7&G6>1Qz>tuT08x1s3_`<$6A}{6 zo;{n8kWf=oQ&(5l(b3V>)wOu>;-yQMu3EKf_3G7Y*REZ+Zr%Fz>o;!PxM|a-&6_uG z*|KHp)~(yNZQH(m`;HwucJAD{YuB#byLa!|vuE$#y$25-Jbd`@v17+hoH%jveZ{)u3fu+{rZg?H*Vg%dF$4# z+qZAuxpU{_}RaDh<^-ayK?Cc!f;>sp&-k*BzhBE^L17ni6y9+}HtE>kD z1EYeci(`m{BS*u|8~$;+v?)-w&7TdUd1K% z-|ppq&cMK+@gR%oz$bN$0@I&1Q)AP9{i`l#7gdX2F2p6jug9UGi2HyHM?x)c!FE=r zif!lL%$&K1nQ@JnP!KcAi}Uv<20dHElvq^h_3!+dGiPi}KG((QJ6ZBveWu~KP3d={ zZckD`{;oGqGj7ZmSvpPW&i&cPx68ekk5aPV*~)P1=Bg{#m&7+PNS=Nj_d)r@ocZA?Y`R5^L;a85XRSli%$m+21bY{62DZRnHxra!6YGz~Ud+zDUSzuM7hN zgI$ShM2T~LZfsH%t8z;tc*>q z49&C+46F0ny;B$@~iBc28G7 Jmvv4FO#l#Ap9TN` literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/network-workgroup.png b/Media/Themes/Umami/Icon/places/network-workgroup.png new file mode 100644 index 0000000000000000000000000000000000000000..f47b6a310298d356cba268da68ffa9e9595ba16f GIT binary patch literal 1071 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2w<^}kKxH6Cn>g($m7#MPMa~K#H;^N{M7#M!HmX=!O0b<;94 zGm49gN_sa|R#sG3SJ&6qH8wUhH#hh8_D+~EVeZ^H3+HZHvSjh9RV&x7U9)-P!OfdD zZ{Bxd%a+YsHy_-#AmsE?vHS`RdiH*KR$$e*OB58#iv=ym|Zf z?K^kw+`D)0{{8!pA3uKj^y#x_&t8GR>({Sezj^cK?c2BS-o1PO{{4p!A3lBh^ce)c zdCp z3?v)^9lNT-T?6k#KVH6oGw*2QqlBHTx*oE*0;~W0Y}>Z-fb9EU-tX>CuZ~}579HxM zU(j|m=;7W)b8bYeWT@)rZF(P|wy#i8DDgi3x#`_DcD(I}Tkp^Hns`_}o&ESqkwfuQ znGA*6Ii8 zic{5`dv=*>@PiXZg33ocU+3D;!k^w`>9=j3Yt^|$Zdzxt-==IZ}8 z^;W!@%Tjo6{bXQZuq$zmC~?lu%}vcKVQ?-=O)N=GQ7F$W$xsN%NL6t6^bO$R(n!`+ zFfuSOR`5#9E=^KU&&tfrO-xo-2rfy@%u6j&H+~<%z`&piGASjoB-JVzYz%{ufsui( zfu*j2S%{&9m9eRnp_#UUft7*5w9giXC>nC}Q!>*k8H@}J4RsC7bPdfz42`Ue%&iP9 VAR3%CnO}i&l&7no%Q~loCIH#oy}AGZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/network.png b/Media/Themes/Umami/Icon/places/network.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2f227f8ae86d5dd2870f1d51bd349f075d931e GIT binary patch literal 1128 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_uAVNAAs)xKPCM_f5-MZ zOfY)=O6RnJ!Cm9OyW*y{OSZk7d#_Y6YWelQ_g4GYu3mLN`$4_gE{QYe&Q(pGJlTBS zR)elZo2O0{-D#FkS@|prswLbT62m6LOV*DLqi1w zzkUCHo1L9qJ5XdTzm+wnp)u;Sp@?_`+N=|2Zp2zSlShe9=QdZU~8#}wcjT;SH5;>Hb4B3>L zdV71ncZqyqJTucMz2MxzwCN3w9$Av<&kZ|v9qKi#^~jo;X8(83Ckx4^zqkM2@WRwZ zJ|VYFCs{_$_+9OJgJWNeUVQyjC^^;cD*GxX-h1i>bCp=`)s=kzSbia#@e(8Jnsb&{ z&a=MXS1B#OuUOpbK|9C!EsdJ`8+*?0`|(W7!779~&25ra-c;`u=GGMzm-czNC#ih+ z@Tr&KnDN>ssSQTPk9c+%hcStK=-nygAmXvMS@E(AQ%dCa6P|86ETfvV9#re|by)Wl zy*L=fCTY^fa96}qMQlY6+uf7mAKtr6T*CK;<*9+g@?6FTJ3JWY6u(HhyD4&-qWhv3 zwNLM+pJuvP<8Jy`MC(`iM5e^FEo%>1xvqXJu$<>~(2ErYzAM{*WipBV+#KL|jOVpT zZ&=$cPien@cV8};%gUyH)^C~LD`y6VNlW;a9ypvi`(StpA4BG{j4eUji_~2iwpcZV ztK}(4eGQb{8P(0ypy(vCoJW^IVB()&D|#Qd_5bFtJN-VSaohYSaeP5SK#(J`rsG1v{tH@MVf@>Q)a%7JYh(24Q+g_s4OXdm?%BC>r~kEU*D~_+*VhZaee>qTvuDr3g@uJP{Uk3|${d#t z6!|+Z*udWYzfgli=AA$&GiPcv zmE<3Px}bLc^S*iW=FQuGuKz%N)_(@Ud4Gb1zVtn1U|>)!ag8WRNi0dVN-j!GEJ1_nux4Z-8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2w<^}kKxH6Cn>g($m7#MPMa~K#H;^N{M7#M!HmX=!O0b<;94 zGm49gN_sa|R#sG3SJ&6qH8wUhH#hh8_D+~EVeZ^H3+HZHvSjh9RV&x7U9)-P!OfdD zZ{Bxd%a+YsHy_-#AmsE?vHS`RdiH*KR$$e*OB58#iv=ym|Zf z?K^kw+`D)0{{8!pA3uKj^y#x_&t8GR>({Sezj^cK?c2BS-o1PO{{4p!A3lBh^ce)c zdCp z3?v)^9lNT-T?6k#KVH6oGw*2QqlBHTx*oE*0;~W0Y}>Z-fb9EU-tX>CuZ~}579HxM zU(j|m=;7W)b8bYeWT@)rZF(P|wy#i8DDgi3x#`_DcD(I}Tkp^Hns`_}o&ESqkwfuQ znGA*6Ii8 zic{5`dv=*>@PiXZg33ocU+3D;!k^w`>9=j3Yt^|$Zdzxt-==IZ}8 z^;W!@%Tjo6{bXQZuq$zmC~?lu%}vcKVQ?-=O)N=GQ7F$W$xsN%NL6t6^bO$R(n!`+ zFfuSOR`5#9E=^KU&&tfrO-xo-2rfy@%u6j&H+~<%z`&piGASjoB-JVzYz%{ufsui( zfu*j2S%{&9m9eRnp_#UUft7*5w9giXC>nC}Q!>*k8H@}J4RsC7bPdfz42`Ue%&iP9 VAR3%CnO}i&l&7no%Q~loCIH#oy}AGZ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/novell-button.png b/Media/Themes/Umami/Icon/places/novell-button.png new file mode 100644 index 0000000000000000000000000000000000000000..9403d6a0a6fa868c02a7aece7fb9499a31c846e4 GIT binary patch literal 1119 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovuPZ!4!kK=cz`gTNziX5;1zIV^`{*%X_ z6qoFqwe1uK>spIlvs!PoPSA@AWKj$VcyuhZFu73sNKoO$R_@Kc+2N%NImDJIrDQCv zdl;c^e6FPJ+3TezPoMU_SAG5H7S$;;Ju^xlN6ssL_rLu7&hPWM|8ML(E*haXMW5Nd zp?hl3zgzpcDn8!*G~Hii`MGoFk3{~>z5Ugua!b&u|F*LpSNF`Vmzw)&e(m!!+$<&X z%?lU*`*Qr9`+=PoZJq`)u3EL{`?b~QHznV=vqEakoR}lawbt9t`R>v1)M@904z?{N zNnO#qW3zH+yO?yWTRHKm)6W+!x~HCX1wN2gJR+$1RQl?Ay&8KVyRSZGx_RchHanji zRPhzh?1;IYvyZRFXdjbeUYqj5>C^hopH(<=HD}!pBcZEoecv5q90V`C zRJ^7uqUPO^!bvMxy#3E=b9{_73*Qs}@$1|w_g}TAmdCk+l|OLm-u87`P5%z;l&`iI`>4LTxbWg;S*Km6 zw!VJ7W8L?%rBlAEv6`G&*BT%GeO-_LK@;5uu@8S9Z~H@?hdTjy>gy8LEVyVlYg{vWeAbMBbz zePY4a_u8n$W{HTxQVB`P~^+O*SCgXYZ)`SU;VKZ9tN_rb95%$pb(7*tDKBT7;dOH!?pi&7IyQW=a4j0|)Q zEOiacLJTdej7_Z!&9n^+tPBjMeYP+}(U6;;l9^V?U}RuusB2)RYiJ%~Xk=w%Ze?fz z(crAf{EC5rK@wy`aDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$QVa|X44$rjF6*2U FngEQS@CpC` literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/redhat-network-server.png b/Media/Themes/Umami/Icon/places/redhat-network-server.png new file mode 100644 index 0000000000000000000000000000000000000000..cb27e4230a2aa396716f2d665f06236bf3ecd4bd GIT binary patch literal 1021 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wh6VV9xH6Ce&YnFBQ4VK7xVT7&G6>1Qz>tuT08x1s3_`<$6A}{6 zo;{n8kWf=oQ&(5l(b3V>)wOu>;-yQMu3EKf_3G7Y*REZ+Zr%Fz>o;!PxM|a-&6_uG z*|KHp)~(yNZQH(m`;HwucJAD{YuB#byLa!|vuE$#y$25-Jbd`@v17+hoH%jveZ{)u3fu+{rZg?H*Vg%dF$4# z+qZAuxpU{_}RaDh<^-ayK?Cc!f;>sp&-k*BzhBE^L17ni6y9+}HtE>kD z1EYeci(`m{BS*u|8~$;+v?)-w&7TdUd1K% z-|ppq&cMK+@gR%oz$bN$0@I&1Q)AP9{i`l#7gdX2F2p6jug9UGi2HyHM?x)c!FE=r zif!lL%$&K1nQ@JnP!KcAi}Uv<20dHElvq^h_3!+dGiPi}KG((QJ6ZBveWu~KP3d={ zZckD`{;oGqGj7ZmSvpPW&i&cPx68ekk5aPV*~)P1=Bg{#m&7+PNS=Nj_d)r@ocZA?Y`R5^L;a85XRSli%$m+21bY{62DZRnHxra!6YGz~Ud+zDUSzuM7hN zgI$ShM2T~LZfsH%t8z;tc*>q z49&C+46F0ny;B$@~iBc28G7 Jmvv4FO#l#Ap9TN` literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/server.png b/Media/Themes/Umami/Icon/places/server.png new file mode 100644 index 0000000000000000000000000000000000000000..cb27e4230a2aa396716f2d665f06236bf3ecd4bd GIT binary patch literal 1021 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wh6VV9xH6Ce&YnFBQ4VK7xVT7&G6>1Qz>tuT08x1s3_`<$6A}{6 zo;{n8kWf=oQ&(5l(b3V>)wOu>;-yQMu3EKf_3G7Y*REZ+Zr%Fz>o;!PxM|a-&6_uG z*|KHp)~(yNZQH(m`;HwucJAD{YuB#byLa!|vuE$#y$25-Jbd`@v17+hoH%jveZ{)u3fu+{rZg?H*Vg%dF$4# z+qZAuxpU{_}RaDh<^-ayK?Cc!f;>sp&-k*BzhBE^L17ni6y9+}HtE>kD z1EYeci(`m{BS*u|8~$;+v?)-w&7TdUd1K% z-|ppq&cMK+@gR%oz$bN$0@I&1Q)AP9{i`l#7gdX2F2p6jug9UGi2HyHM?x)c!FE=r zif!lL%$&K1nQ@JnP!KcAi}Uv<20dHElvq^h_3!+dGiPi}KG((QJ6ZBveWu~KP3d={ zZckD`{;oGqGj7ZmSvpPW&i&cPx68ekk5aPV*~)P1=Bg{#m&7+PNS=Nj_d)r@ocZA?Y`R5^L;a85XRSli%$m+21bY{62DZRnHxra!6YGz~Ud+zDUSzuM7hN zgI$ShM2T~LZfsH%t8z;tc*>q z49&C+46F0ny;B$@~iBc28G7 Jmvv4FO#l#Ap9TN` literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/start-here.png b/Media/Themes/Umami/Icon/places/start-here.png new file mode 100644 index 0000000000000000000000000000000000000000..9403d6a0a6fa868c02a7aece7fb9499a31c846e4 GIT binary patch literal 1119 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_ovuPZ!4!kK=cz`gTNziX5;1zIV^`{*%X_ z6qoFqwe1uK>spIlvs!PoPSA@AWKj$VcyuhZFu73sNKoO$R_@Kc+2N%NImDJIrDQCv zdl;c^e6FPJ+3TezPoMU_SAG5H7S$;;Ju^xlN6ssL_rLu7&hPWM|8ML(E*haXMW5Nd zp?hl3zgzpcDn8!*G~Hii`MGoFk3{~>z5Ugua!b&u|F*LpSNF`Vmzw)&e(m!!+$<&X z%?lU*`*Qr9`+=PoZJq`)u3EL{`?b~QHznV=vqEakoR}lawbt9t`R>v1)M@904z?{N zNnO#qW3zH+yO?yWTRHKm)6W+!x~HCX1wN2gJR+$1RQl?Ay&8KVyRSZGx_RchHanji zRPhzh?1;IYvyZRFXdjbeUYqj5>C^hopH(<=HD}!pBcZEoecv5q90V`C zRJ^7uqUPO^!bvMxy#3E=b9{_73*Qs}@$1|w_g}TAmdCk+l|OLm-u87`P5%z;l&`iI`>4LTxbWg;S*Km6 zw!VJ7W8L?%rBlAEv6`G&*BT%GeO-_LK@;5uu@8S9Z~H@?hdTjy>gy8LEVyVlYg{vWeAbMBbz zePY4a_u8n$W{HTxQVB`P~^+O*SCgXYZ)`SU;VKZ9tN_rb95%$pb(7*tDKBT7;dOH!?pi&7IyQW=a4j0|)Q zEOiacLJTdej7_Z!&9n^+tPBjMeYP+}(U6;;l9^V?U}RuusB2)RYiJ%~Xk=w%Ze?fz z(crAf{EC5rK@wy`aDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$QVa|X44$rjF6*2U FngEQS@CpC` literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/stock_folder.png b/Media/Themes/Umami/Icon/places/stock_folder.png new file mode 100644 index 0000000000000000000000000000000000000000..5257570163e78d84b432d958481822a5e1395de3 GIT binary patch literal 1008 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haXFXjULp+XOow`3?*;VAY{pPsa;_Br^ zESft^)F-^-cVKdL;&Al!^!m>{MYCy2+mw~cib2cv&k|!)a@FADauMu$qQdMh^ytRM z>${Ef?=9Xi*J2y<^NzNB)73No);;@sWBZ5t>C(E_u3z_Fy?QnOd#i}`*R5~gzFn1n z;M%oo`sa3TXP8|Y5IQ^U+qrY+{9ea3oIUHCZ6b9#xetXlEPRKYixkB{${V#}!)vc}T;kCgA; zy<6Uw>C#1|V;QSnxwJ?;)@_*iaBq5UZf;^_<;NY)VdH658CMezz_6$9{SK(nD^F_nv<&-J zsz2A|;M%g!yvAf#<&toYxRPZT&zOj+`so|HeEmLCkVUY@Bdj@tm(MA< zc&^#ib}kdcEYXQsJCCHsPp~}8*p;wlSL^Ye`_mX-JUb=5-gZ%(cVv}8d^eNIxr?tw zld{AoH(aqych~1WciZy5o&CJqG77UUy-gK;xi!v*X;tL3+OL<_r_XPRGTr;?>Guug zX=ygTe~DWM4fId7w< literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/trashcan_empty.png b/Media/Themes/Umami/Icon/places/trashcan_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..ae881de70b6e5e2a4a911e462eb88d14c62ca846 GIT binary patch literal 1323 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE9G)(YAs)xCPCcI;>nd{G{`(SAVG~veDyJ+}@Ho)gwBthP{|2!x`wc4=DfBQDM4Fq^Tt*FY_8gCR#Nbo*Ja7BJ$D{l?c_Xm{5a>7 zLw7B%mDbnpYmQic*>z3MZH5b}-_D80@2&iEe@@+IR>zcH&HKs5vdizSH9dZ8o@C!* z3Bh*3_6}F^X^TX)RZUJ@aKV^J#O0TTiZFp=`@{d4;2Y24v2XJdk+*RqSnd0?gHScBb)mv^EcfbDq z>vf+*`Boj)rHg#GFlWnpg|1Y!?mT2QUCdv&tyHeEf~mj3U{&DyyN4ef(0lb&a80R1 zvVQK$0}|CcHF!?-H|jAYUho&R@up!Bx0n)+npVx-(sAftma5#r&rUY0H0+n%wCZm^)NxSaV8_z++va-h;nn6| zlF477VZY$|UbSnx*7oP<_HJ@{l+j_6pVV{gyGiD?l$EBwnJmd(ADq~Jmv6o@D|tbl zXLz{4>gz1$7tbyesNT(`(>wK>DZ4_La+t;!F7LI)JiN9Z>u)bQ@%*OsFOhlT6GOHo zZ%O=k>dmY@76&FS+k4YE!y27%Ad<+W3SYc)nWD{?tnb^ z@{`>n&t<$^Gv+Sd>T>SlEhdF&ZnK_kydm@2rpL5HuxF#mv~K^% zvqx;r-hFm`LYr)kM(W#FE|OrGme2I#-|kIDc9JIP>1kzm%m3RQIWa5chN(jPiLZ&e zZ)9tQHctDxFWKkdm;7{1?)OR?(tX>aW-nn{r}KipzrOgnC}Q!>*k8H@}J4RsC7bPdfz z42`Ue%&iP9AR3%CnO`w5Fi3)I2+mI{DNig)WhgH%*UQYyE>2D?NY%?PN}v7CMv8%f Ofx*+&&t;ucLK6Toa8QW= literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/user-desktop.png b/Media/Themes/Umami/Icon/places/user-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..1748a80a24f235493c8f61f3465e68b7c3027f14 GIT binary patch literal 1109 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?VxBIJAs)xyPW8xbku?O6ZF2U!`)aH6vCd<@qjGk)+)og{pc{tG2vy`m<#1LaD7H ziV9ONeq5+lcSL3KNsG_#EcKr4`~L2XvDt%b%>Cu>Yrp^b|GfU(&i99+f6IICO^VyC zmV98v*TCOL%9OK7&h9s0EN@(KIznoroR?zVMsXByZo#WY_j^(JSA7yPkcWoq4<1;GJ0E;?gK%ulZrev||3IPgpeJ1*#LP&Gcbz|Epk?ew{Ad+&T}cUn=X=(vdOXwl5n z-uR*okIQH6pW&^xIPhY(e%u5l*Of6!99p)856>UZxpn8%)YrCKSNaP*;dY(J|AcYI z=YuwVa{s5#46bq8T(fcB`S3MMPd9zHd*}bAlf%X5{7vKKb|v;=pAOsqt=;%r;=`3~ z^PbNU&p$Y6>e~Ht?e;I$I{Wkz@0`hR;zTAlWPX#qb}V2gzuRtM8?F7%I313Ce0lWW zy4a>EtbQ>%i`QKJK_gjH!N|bCM8PXDyEI85xFj_*FSUq^%eg2uu_QG`p**uBLm?z1Rl(iUH(@#h3`Pb<2D%28x&~$;h89-FrdEb#+6D$z1_skUTNt8f$jwj5 tOsixtGB7mMH89gPG!HQ}vNAHaGPHnbaMomg#lXP8;OXk;vd$@?2>|D==HvhX literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/user-home.png b/Media/Themes/Umami/Icon/places/user-home.png new file mode 100644 index 0000000000000000000000000000000000000000..9a834163f798fcaf8e05cfe124c69d9e21be60da GIT binary patch literal 1114 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 Ofx*+&&t;ucLK6Toa8QW= literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/places/xfce-trash_empty.png b/Media/Themes/Umami/Icon/places/xfce-trash_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..ae881de70b6e5e2a4a911e462eb88d14c62ca846 GIT binary patch literal 1323 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE9G)(YAs)xCPCcI;>nd{G{`(SAVG~veDyJ+}@Ho)gwBthP{|2!x`wc4=DfBQDM4Fq^Tt*FY_8gCR#Nbo*Ja7BJ$D{l?c_Xm{5a>7 zLw7B%mDbnpYmQic*>z3MZH5b}-_D80@2&iEe@@+IR>zcH&HKs5vdizSH9dZ8o@C!* z3Bh*3_6}F^X^TX)RZUJ@aKV^J#O0TTiZFp=`@{d4;2Y24v2XJdk+*RqSnd0?gHScBb)mv^EcfbDq z>vf+*`Boj)rHg#GFlWnpg|1Y!?mT2QUCdv&tyHeEf~mj3U{&DyyN4ef(0lb&a80R1 zvVQK$0}|CcHF!?-H|jAYUho&R@up!Bx0n)+npVx-(sAftma5#r&rUY0H0+n%wCZm^)NxSaV8_z++va-h;nn6| zlF477VZY$|UbSnx*7oP<_HJ@{l+j_6pVV{gyGiD?l$EBwnJmd(ADq~Jmv6o@D|tbl zXLz{4>gz1$7tbyesNT(`(>wK>DZ4_La+t;!F7LI)JiN9Z>u)bQ@%*OsFOhlT6GOHo zZ%O=k>dmY@76&FS+k4YE!y27%Ad<+W3SYc)nWD{?tnb^ z@{`>n&t<$^Gv+Sd>T>SlEhdF&ZnK_kydm@2rpL5HuxF#mv~K^% zvqx;r-hFm`LYr)kM(W#FE|OrGme2I#-|kIDc9JIP>1kzm%m3RQIWa5chN(jPiLZ&e zZ)9tQHctDxFWKkdm;7{1?)OR?(tX>aW-nn{r}KipzrOgnC}Q!>*k8H@}J4RsC7bPdfz z42`Ue%&iP9AR3%CnO`w5Fi3)I2+mI{DNig)WhgH%*UQYyE>2D?NY%?PN}v7CMv8%f Ofx*+&&t;ucLK6Toa8QW= literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/audio-volume-high.png b/Media/Themes/Umami/Icon/status/audio-volume-high.png new file mode 100644 index 0000000000000000000000000000000000000000..79c5401ad35c0a75cf6d7255864d350ae09ac187 GIT binary patch literal 1161 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tIdPZ!4!kK=Er`ufC#iX5+hzSo>@3d6LZ zq@@w!@1&xm74ou@N>=J^X-!g(ozQe^$*fgdCeE5L{e_b+kE1y2#UozFIfA8pyQF(J zy=wQ_Fhj!U>NFR{%n%dVlo`M6`nrE6a5*oD-T6Vq{QaHk^LzLI-v58L%@6y3s&BrE zefzfe@3U#U-&^f2KHeuC9DLt*P5Iod^OUZanpYg#bLZ=&ji(%%uX|rLv9JDh@mM;W z(stGvGk>mRK6r1})~-n+uBqk8`ivV&>4$t8d-oEB5`l^E_Ggd;XuV`{G_oSWSOp|HCyn z{g12nm&0#$m3!~2N1fGTT_sgm9drC`p{znsc=+|YM^oQ*&6;&S2zeqD6cyE-rE!lwFs(*oHAn>KCQ@Gau{$1Y#f*&k}_x2~M~QO`T|#ieR?wb|C~ z$EMp>V0f6W$IK>hJDW)n@%<|I88n7 z`b5cL!NIa4vzP=Xs<}>THQyk#VMbhv;oM{2YmFqE4cQ(`ihS6cy4f`~C+YOmjqP{W z%Lcyo^xiq)YlE8TUdag(a(}rs*iWPwRm?m1z4qK3&p)zlr=LkBf08pcl-S+#x{bSd zv%ARLxe`6KmH!|9a0`(yayhp?Xo7@XER)5}dZUWxclR+Q#m z`{&8T^Vx9>{!IU_tBRxU-s7h{rw#O+o_8*t+V*Dk)~4qyxAebkTjtHEQXVUIv%V$x${%g}n78-0W`FgvH#ZOh%xtJMfrc1LqWPJHg4|NK`F3m=32^!s87 zPb)sg#67In|Hrs&U43*+|APw*3=FCzt`Q|Ei6yC4$wjG&C8-QX21W+D29~-8W+8?a zR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg3cglKpg#}UWC yz#s{-Aviy+q&%@Gm7%=6TrV>(yEr+qAXP8FD1G)j8z}|`1_n=8KbLh*2~7YVC<2WD literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/audio-volume-low.png b/Media/Themes/Umami/Icon/status/audio-volume-low.png new file mode 100644 index 0000000000000000000000000000000000000000..35ff977672b2dde8788a5b8ce67ce8ddd8a05dcf GIT binary patch literal 888 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{3PZ!4!kK=DAJ9>u%iX5*mzbE~?*NAIo zP~YTQrs%J%QQLzrPZ4v{<2K|~+8`K}B9N$Sk`;W-$$hEowz5c$MR`1$!cLA#+{e@A zRKKs@?wWrrQ1f|Yx7go@1?OwO%hi4V!_WWkwLs+3xIOkI`5#j5cCIw;?TzN;7@7`Bj`whKCaqzaKoTD4tMT`}S!?mQAqS+5-szb?S~=jxRbd9iQ~F?-uIFst);C3 z<;@I7_SyWeI(@%eX#=;0y}eMv|L>1B*R=niSH}>(oZV~Z|Nf~A3=FCzt`Q|Ei6yC4 z$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP z(={{?F*LF=GPg3cglKpg#}UWCz#s{-Aviy+q&%@Gm7%=6TrV>(yEr+qAXP8FD1G)j S8z}|`1_n=8KbLh*2~7Y#qGc`s literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/audio-volume-medium.png b/Media/Themes/Umami/Icon/status/audio-volume-medium.png new file mode 100644 index 0000000000000000000000000000000000000000..1a559245ec2be43dd6bf0a9092aabfca49d20c6e GIT binary patch literal 1008 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q|Ho-U3d9>?EK_Ra_impER3f3Nw>&csD- zyjLxHxyzk4X}sGtVcp$`t!~a@O_3biM5K?hw{X8*q${#fucj<9SiG=DL*?$43vX&v zT8{X7t&qCF;?ncz$jmd9cP_V)VbruA$yr~<@5G`{=cvKVe_;J@h^`BFR%ZV z__wWp-F6f6{W7w9%_Ck~uAk(aD6#H>SMBA>A0DTye%~#U31OKrWY8&zMoDp<`LhktRY)-ahG>z2ZKxC6QRx{KX>h#`g{MsSEpy~yZ`%s z)j{=s^ZApQ@76j`zx6-jQe*Kttv6iF8?<>ER<*UY{Z;RiUB7mH{B94vJE<=F{(gBd z^=hi@n|qs!RX?yOO!YdeEBDeSYWK1_-eWWV%iOtDxb$-IrP}9*_B~uHdzX20lpTAW z=5vPz7Kh~IS;vlc=YccUWgHD;x2fk326VE>te|#-Io$*Id`{y_&mbwjEU3W@S8*1h$ zaCoRqE@oJ4Y7t<_p-{9b)+LWQB7M8Uy%*8@8(W2U*7U{L^&7T1IWC;yl-bJMGf#h; z#Y_1Z`+NI!|7Z(5fBQjZ`zab}M@5d;`Yu~;o^yA5w%XsqUpuZzJ(oEh__F`m(X;&rLmh-x$o>C)(DHzv{d_l< zE4vwD?kw67d4PfS01rQZdaOw7yS?)al|DT#V%Vghx9?v6@gSyc4SkQxnRMpp$7);s z`TsIL$j)Y|%R%-m1_lPz64!{5l*E!$tK_28#FA77BLgD?T?0#91G5lA3oBz&D?>AF z0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjthZq`J8JSxdT0%5DjpK-8U|^60*$|wc rR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGntDnm{r-UW|1^BT4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/audio-volume-muted.png b/Media/Themes/Umami/Icon/status/audio-volume-muted.png new file mode 100644 index 0000000000000000000000000000000000000000..84f22a6e8fb6a1b353233e8509de96cde1bb9730 GIT binary patch literal 1044 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{&o-U3d9>?EK_4N_)6gggRdin4d24j`m zMi)h=r8ZYzSn=@P-DdZr{T=L&tM2qBUOcU4p(a@n_Ek@h?wdWO%aEVOib`%76V3yZFMHJ(f3OGB@(|M!0HsV9=~pStbix&K61O&OOh>)Nl-v2DwiN0s~j zx-zo!%l=RnTW>AgdrjtSYFevx_4oG^oj4dD{NC4j{PFdmmCFtvulsHK@xjHzTbX+d zHwLTwGhUefQhBbQ{5#8QmlJN!7nypsVO{O+*$t8nDMpd9HutI*9sGIDF?+8WgF=JF zfn&XEuO56>de&p9hVB%DV+u=I&OC4DcyRTLedzzES5z3hPCi&^7wvfURQJX(RJheNlSw?wU+i|tX2M5^RM>$zPrWS-`}yi^(}e! z+9gUliudmMJ?@k3sF-thr;LR2<#n+UFHO#z+2F&N(A(Enm7JU$r#IdBXN{b~L|K`W ze||sv%6k8MpjYA0PRX#_#{{O%0-n@^a(bj?0uH2!tA$9p>mtf61NfTYt)$C?;0t5$dfEQ`Nu$FRfEJ}mN^A1HsR zmbgZgq$HN4S|t~yCYGc!7#SED=o(n+8kmI`T3DHwTA5gA8yHv_7%Uf$=w@JGKxoL# zPsvQH#I50)*8_6~1_nux4Z-| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i__dH!3Lp+Xeom!tEohotMzI^(U+)Gz= z{+ecARGOQYSHD*5;-mhve1fc(drQ~mI{ZDX#gpb5AY&o&XS=91i(ulKtLIj+wm;a= zk!^1Ed{>8zUZAx8-#WC-0gwSLWJ&NlVk! z9-Dbyyq6PM|8Mb@s#{YM@^@?H$I1E4;1(|WuvAJj&(FiqSn22;$;`OFE_D|~CtQ5} z{Hc8K@=5RaM<`d{nv&os`DKe{wW#aQUj_F?TI!opS~~OFHLi=T)cT&R_9$kT(eXv0 zCl98_GhXcty?0=v^LK@%Jo{>b>L$wipHh!ytzn1mEf8%y?Y(M+l=9L|A6~P3-XC*@ z`#iV9vJHBBd$+wVowCXLKzR0a@2Dj$N3JY>k=@-=|7Xh2`R*OZO3d=B_Y^qj%zGfl zpxqg>lg&8Z>Xhw^U7k958+Mtvn=DH|=MwB%$!O^+C$8&r{8hw8rUjLA>?S9yb4-%V zY!Un=#BglQxi=THTheXMoTxhH>YXUL=7?^al4I25IFpTSB2zUsN$`7KYfwF%a&d~z zp5))_>i$S~s_E9oFt@DL5?{c`p(*HOkbm`2;qIB2PZ|0&Pnmg0M9sTXHRy3N%ciMu zKkRB>Gx{80O4;VBw}8dLt8vPtrv)=SRGI{o)K4EcsmNfpgylealEU9puN}6$ky_y( zcw_6-hABdK4Ge_b_zt{Xao5)9(2ExuzRqTAzI}hqu+&e-RQf^LiPW;$w^oIPO^b}} zeX>H|vW}@?*0Z!`$)!S}P(hp5C5zi^Y%ZxbJRVe1_lNOPgg&ebxsLQ02;In+a literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/connect_creating.png b/Media/Themes/Umami/Icon/status/connect_creating.png new file mode 100644 index 0000000000000000000000000000000000000000..fa4c15a57a2e6d0dbde05e314703709f2e9e051b GIT binary patch literal 906 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wiUjzCxH6Ch>g($m7#MPMb0E5dgM%RqGcz*?qp77Hg6iw*>gsAM zD=W&%O6%+EYHMq3VwX7PZgR}s;*`9?rEr@|;dYmzZEj_|+{$*lm+kT{-R@hlE4J-W zV)v2kiuU{|C-bMCESPe#VCu=D>1T>&oGzMirgZkX@_85P>+2dD8=6|`Crp?yckY}e zOBSzPyJqv|&D*wZJ9_l!i4(_9oH%ju;>F9CFJHNGTOWy7}V8 zi`TDTzyA3B&6_uGKK*$6`Nz92KR$f;@afyH&!0bs{_ow%z`&qZ666=mz{JeL&dDzz zA}S^>AuT7bq^zo~ZD?U(X%iL^S37;p{sSj&{rvS(;nN%j1_s6?Z+91l4pvzY1_p+& zo-U3d8WUS5z4SZeAmY~Ta5E$(aLa-PO3Au<8dtW(t=pu`ap}~rfA1ZQE<4@!{PM?k z=AF-~${ha-8>KhpHOiiT$ZmT`OTaDhnJD+7u=uN8QHpkk%K5X_z5KN}-lro`;=KQM zSEH}p-#_iuIbEL86!W}$kcGC>nYF6A!}`_QT%ak}Ti{uLc=+xh)3zr6A>&Sn}%e&=pa!w=WDM=~zo z5wYdB>xZ8V3=DQ9t`Q~9`MJ5Nc_j?aMX8A;sVNHOnI#ztAsML(?w-B@TwEH-nhHh+ z2F40riP@z|3hG&zxw(nS>I%UnshN4HMe4@yBN!MMR6!=CB$lLFC4-G&FfuSQ&^55s zH82Y?w6HQZwK6o*HZZURVeP?Gg@^>bP0l+XkKW;9}G literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/connect_established.png b/Media/Themes/Umami/Icon/status/connect_established.png new file mode 100644 index 0000000000000000000000000000000000000000..501d3f6fc92c962e5aa75e371f3144b4cfef6dd4 GIT binary patch literal 901 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wiUjzCxH6Ch>g($m7#MPMb0E5dgM%RqGcz*?qp77Hg6iw*>gsAM zD=W&%O6%+EYHMrEJSyDcy4~V>Jd^r8lO}j3_xq$z_DP@On?5-(Z9;J7(733eadA=evZ9uyMJ>xp+gFsfuPpCcU0+|<*x1n2Qa@qBgt>F) zELpO6?b(!re{ISdR8j7i?^F3}}>rkXG?FnsWI zaSYLz*gENE&>;r_*JdXM*8oP*$h&TxjNvSt7cwXKin%%&{Q2J=U^;W6N^tA*uQp$H zhU$9$pLm?ta`}OUCx1FlH{d*8)GfMl@7`-#SG&R^p6p$B)%5K_?P*JH=GfTYyEid@ zeTMCQ?XDmdZxO5bkgYL~4qf$J?IU8na{huFnUh7Wc^?-W%vgNGa`6KH7byh`SE*i` zd2&f2$L_kaImwG;cn(S2c(Q)KtnidS%NHCr6tz75Nr$1vXFqpNyJ?ifn$34F|33ER zme^)q4u-jP-w%oT_3@ospQk4r(&9AnN2FHiB%3?j@7c?qWcYl`t)6ZAKrNEng)jRo z0|SFyiEBiObAE1aYF-J0b5UwyNotBhd1gt5LP$ocg1e`002h}=vZjKOfq}7tS7LT) zl7f0xW^Qg`vbsWWNor@#v7>o>z40H`Fbq&ly3@xmT zO|1;gv<(cb3=F1ywlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQY}@HCDi4wPCw MUHx3vIVCg!0H)njU;qFB literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/connect_no.png b/Media/Themes/Umami/Icon/status/connect_no.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2c7b7524e592ca36eb8997b1c215d1ec6a1c69 GIT binary patch literal 753 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 sGSey| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?mYyz-As)xiPPv~QohotM{(N=a6BS!^ z->Pj}J$K!@aQWI=?m+3xE@u5*qOA?{X3lmjS7u&lzFVN`VT#|)vlsRs$X?Hqd9X^E zC-H?VcamD!sST&twr&u$in+WrdfMZomnNLa%YCC)^Wfp0J^b&#f3|sF{o~Mo&6*3h zY!}}Wkhf>c7N5H7>EQ##tUnUu8{fyBe413Nth|!v&xaUBsWUFWe`hmKbJd#|uq?Ce z=Z9-@=ilAhTkVokW;A{ClUt@5(_enE$<0oE>ML&dm$#|bH{n1l^UD%}ebwTBe-wt; z`JdWWcI?%_u9Q|BWx;-ei+W=snegz zbiA;s#7g$h#w{X$o>U$@)G2(BeZy1d@Y}+BSmM9)^JyiQPW^Cm^NI|S+uI6d*sor6 ztjOx>E1J14!bkE$VKjsMrhb!Lh3X$0#6q+pf`b`uZ0pUv-NEtDIK5)WzH>Kz?66b$ zG>^Zwnk^;qoV47vEmK7gJwK<|*4XjDg70F6h@c~P>xSjaFXrD*J5ah+pk|wT1ONJk zuU9VaY?6W5~(NOPZxNEmcvegCjb8UBUZLsq3<%-d+!SdCk?szLZJ+UO-!6!ixuv zTS|7h?ulA!WN7HPF(Ri!dufM{pOcB#vhCrThdq9M_|?ZCufiNJBQ0sTqf)p!ZJDdb z_0p=Usu%Cx<-N(h{`mR%;Jt;-7cT}HGsl}Te_2*)m@@0)zX%@XnMWjKYVJ73dR#Ak z_WXHt%XZ^Q=QrQG+WLIgpPWd;{Xv!KV*9cxo4Gfb%{sel?^C0LpNv?}f7u|bY+`dJ zD_#A*zTUl`EPPx26p}hp9c}uaRd#qh{+Igu_MY!YqBL7s7`OKFW)!_-doW#LM%|VT zA9k`&+!meRm3kv0tLWzPohzBFUT1!mkYehoTFYj`vaP}QLH+|i>m9F*-|mXr{z`Jy z@+(K>O&C}Go>>+Dk>C08fvyAneg+H-45}rr5hW>!C8<`)MX8A;sSHL2Mh3bDmbwOJ zA%+%K#->(=X4(b@Rt5&sK3f=~Xvob^$xN$cFfuSS)HN{EH8c+~G_o=>w=%SZXm}dO S5y!y5z~JfX=d#Wzp$Py%blIH% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/edittrash.png b/Media/Themes/Umami/Icon/status/edittrash.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b9cd3b5498f66c6a0caa0481b70399a2036e91 GIT binary patch literal 1589 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWpvLY^*;As)xKPR+~-2^BeBpFg+K`0`#6 zMbV9|T&{x7A_Ag;jt-rMZ03)|lYLB7vL3nb|9SVw5sAl5o$>)ezC7L?-aUn?ivpQt z4}?uvtDC!A*6OoW{?6{o_1#InJo0-^p56U^Pxbl#|IYuM|M@|^+%bDzYq?5|jeGaL zT6WbxZdb^&FDviczqtAPV)Ett_jaeA-K8F5?!57PhKX626~mr8o4+rP|0kUAn{WHw z;`R0mQeXG34$DnAz3uIu-{)rY@W?IHyM8dmpe5jO${W3TcfZcnoE za_`Z`lKGjDH?}zow4IrK{n#Pa(}j1Z#>mKc-8(z+(#u%I`Tw~tzDwC}TKhZfu))0z zJyXB^D&2nR>P^n5$%S*SB$k((=YD>E`OcL?o8G;i7$w}Q7~~}-J$vPp(|2|zD$h2{ zRpVJ=Xz(CEZevnuz#H3tduJ|+cz4;iHTPVs^!sJiH;b~iMp@9wa?hiD0hXo)5%YCQRD^XG+M-ri*9Tbow;T|1Gw{+r3aYc~aU<~^JF>zCQ*3k#dy z-2VPibmfxG#hlsK)*aoHyD6@3_xqcNP6{6{+_aZ>Gegj+JA0$A8Sh_fy)<8vtxD~G z)bb#ME&I+aTb?_=rm7?9z2UUd^$J}|C6BIb zdUA$myg{Tei)lvQjYGNH^Pe1-=PQ19M}Erb&B(iPm1(>v{-cXvyM#g zBMZ)Lo@&{TIHd)(x0D&42;#13it4>6*t~5TA7A}9H?2HVU^36<(bnkR{^JsWGWjos?VmYj8wF&;BL zC6gn?5+k~ogcLiAxPEdHaJjU}wp+mG@=+7pTkCi6UOrRw>df>X|11_Stz&DiW6phe z!}8GzCmH{f#)Hu}uYdO9h@D}E050*Owglw-L{9BzV2$4rv`+|oF_R4MRLgiC^j z$u<3y9VKmTO^4>oxUaGhby@VQ%f2z>|1k$cqqu!bF1M_fSgDd|bFSc}gs-pn$}q2% zgO+03*B>^B+4IK6MMpy7P5LT_QmfkiS=uM}8%*e#ayr#`V&5btO&6)I4Mq)<*fw$) z`iLJttDNkp^xXcOyduZnFW)@>Jho8iTe{kGsU<^@;iKP;@6b>KU2fRkFk5%?SPm0Ynj;2A7B5ba{qHx z&D7?3mX)l|ny;VaAAPa*B@^Gzblz)uB^N9`^tw&lbF<&&Hw-Zhj3N*+OM-M z`_3^iFsPQeMwFx^mZVxG7o{eaq%s&87#ZjqSn3*>g&0~`8Jk)enrRytSQ!{h`)px| zq9HdwB{Qv(!N|bSP}jgr*U&t~(8$Wj+{(}rqTy*AM;rqKgCxj?;QX|b^2DN4hVt@q iz0ADq;^f4FRK5J7^x5xhq!<_&7(8A5T-G@yGywn|Ue9s> literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/error.png b/Media/Themes/Umami/Icon/status/error.png new file mode 100644 index 0000000000000000000000000000000000000000..f01f85e2f3d3c2a4300681edf5eb5eb3892a985e GIT binary patch literal 1075 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?rk*a2As)xyPO;69PM0`df9dYa)0&;S ziHVvn%g(avN=(%JdLihAfYke$K1QV{FKiUZSa`vy{hg;rc>3Fbj_E0<1vs{}9O+~Y z+!#DzO~UDGH>Z|NdN*(R;l0aGC78 z(P6lJK<4oa1R1-aaym+Yq{T)5kBF!aH{H z?B6Gxz*;xw(&}2VU|;_mvyCy+4?R-az4g{}?|I?>dH>B>ap1_G z_xk#=rhY%X|nf{&G+~BGMUtm6${BT$5}?|r5opQ-@Whd z8X)Sz8tBTy^I3n9$8O(O2cG`;Q*%v(Wio?z@p3=moE)W#yv+vhRvp{OrL?fCfa7n} z+?$7Fmfhl;X=@g5G3m5YzfDNXoz3ZcPMUqL+;Uyn_$y<}Qk%eoTXJtZ|IAOGXmz^F z`G&eMV>R=6``UTRIiT4l^Ul`-{3D^(iJ84 ze@m1=*^k$v9BZzv4ozxJdf_4x(xV(~n&ohD7e|=h@v>y@#?WJ4^&$eR4}U%Dwe+Uv za>coBrW~Ia>gV^IFmTuEQkz^7q$$-aepc&_L4%^ot0xiy`?;$a@0>e#?$Vu|#V5)x zmu%#*wye?%nHpi__~&r{3Y*BqmLJyFao00s9aD6;^GCg|{p)!f{hRBq+t2;?BzaCq z*Mhr_e;ZG>FWS~>Yu#;b?3|k0dp7U;FY|)S7SjSxtYG5yV0d|ZL)fdYR(E@QSvS5- zSrnlVsr68#%R|rmdfAG%Zvs|^@yq@AcUJy^*aK$f&tDg7_4R6c2<~&Qd~n2Y#$KNI zv(7&?L}X5US$MnYSp0`4VrzBa(jsK@)!ag8WRNi0dVN-j!GEJ| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}ha?>t=`Lp+XOoxDF^CRE_K{pY;mZ-o|? z&6x$QFEl48?R0KxYvPOK=+w@bkP*A1U@NP~y4Z%Pr~WgFzVr}0DWuoYav(6p$s)4P zpl_13-uJ`zzTe|HdT-u)zV*yvyz6Jh?lqtPvo4+O-+TA2gwoQjoA&J46HvDCVn)ej zldIayW@cvZx=+k*h%E^W?LYJ8*|TS9zr7m1el5*5n|(yW&^Y9C(petC#QgmHih_a( zW>URtPqM5H<8GKcckX3x#_a6uTRCP=U%coLU|Q9+s*llg(uUo;t-st0?>0{}i#&37 z?b@~F>5QI&Mdj=kG6`*kq`{ zlCM~i)Dzs`>A}%hx4+**?~bK;TS}x_<}9_$S#8{mkBtDxPDs1KAFpj<0-@Y&uZc)_wBSlzq#>Abb5kB*+Z^Aw{O4LxnriYo7?|B!JsAj z{qpzt`aj=#T%U_>Z$BhHf4_U~x~5+7Wf9WW@#V=z>m=NMS00;gU4DN?sKM5w)Am1o zemF1ls`7GyV~m}`d%lOb^rg>Uqu5e&Z}CKnh1OqqHlMJ!J**StD>K)=TB7KOIVFAoi_`$*a$O z_;SH-%?@9!8PYs#_wW7u_{2HB{$R+T(oU9B7#cB7oP zLbf9J+P3;ikrzz554LQ`%Xz4=Ge-4uOEgzSh2!Oat3QiBYO*V?XN&;lG}RK;fq{X+)78&qol`;+04!IvmjD0& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/folder-open.png b/Media/Themes/Umami/Icon/status/folder-open.png new file mode 100644 index 0000000000000000000000000000000000000000..def61fe71f94ef2eb82d10d3159a4ff1e5e69707 GIT binary patch literal 1073 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_e4Z|jAs)xCPTiZG5-M__{`tAtGgXrB zNQy}>Zk7Lk$Vp0Y%^zkT%ccayX_`SxX1RID3MgqT+q7|8Idf#kjT1t#n;*29&JO*& z^<+xgy*<_MEyeWnzxkfgF}zXn;LyW;)#u;W?Bo7lKG7*MB4WjvvuDrxS>4DnJ8w0& z@1DelJ$wFa?%2b6Ba}U~^!%B3Yu2opbBANYmMtl7%VtX`r?q9hTQgHpDJM6Vx2&wp z>TFu^)|`a$a`A?*U%!57Z8&<=HFx{%P20D-b1;UwhPpSXc;2{kN2cO^_EA}5ZR?F2 zckTLhFV!JP!_X}_lv7b4S%!IrWaKnMdwcu4Sz9wqq^@L{y0AQ#S#|2xty{apT@9F8 z9_X_8_Z0F3w6zGl_*&KRq|y4h+XS7{OD?}und_$>!+FA}|9fSY8e`X#4i2TJRgdOq zXNhgwzI}PaXHG#D?LGT>G!&AL?ryMnUT{t@xyN&o58DxmwJ~=V_AiNZmksS(!0<%V zXpXUw_nRHRZoMwI`)kFR@ul+H-(T)8BUn-oZ2$f`WL2rl0iE~+5uV*I<|W1F@3&v8 z_I;TvPjiXZKh8adOcnFRcQSl2`tjy*`3j5nslO$e8F${$l$o&S<#LvXYs{B?zIykW zsHWCd^`A%Mzwf?2>xR>-Q1=gv>hB789_*F(E$rzMUTDq1v$-PoabWMkfEV+=3*Oi- z)7U0pU_5W>p*KFgc~TNTUNhDh`2C)D%{%m;#k+;e`u__$GX8jd=i)BY!zU}zgZ{_mm-xb+mBf-qDYF72{(-%eZ_uYMz^Pn^9$BLE}E~bm5vfM%f zOrKPKT^Z7{kpIuWFB(?7_hZ-u7H=wkA#p@&`)uPg*IKVgKG3_?eU$Uhw(>=6_WwRS zZSOzT;NtS;;AA`L{`h5utB?8f&ktC6;>PQMc~3uG5RLkB>fpnd7s~tXH1~-%RPDe2 z|J}R4&HPTuYL>QEkH6g78{9Et=Fi9N-|gzRd^~FRGb3W+L9Gv3A5J~p^4B}?0nZKA zpbEPMOd)zbr+sy%Z(7=re(3V=`KRy8t~a)Pzrf%D0|SFRdP{kVo554 zk%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn3=MS+%ybRSLkx|q zjLfYJEg>47#&N_kFfd4hYzWRzD=AMbN@XZ7FW1Y=%Pvk%EJ)SMFG`>N&PIxXfq}u( L)z4*}Q$iB}1@qhs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/folder-visiting.png b/Media/Themes/Umami/Icon/status/folder-visiting.png new file mode 100644 index 0000000000000000000000000000000000000000..8d6b6e61324de102c53c1d1f58d41630e255bf35 GIT binary patch literal 792 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}iFUp-wMLp+XOoq9I!vV%zL`3jl9?GEOS zP9CwLOFuA(bjE&rsCcL^^`3&zd4|_(A}S`U{+*oGIAOx3O3 zBM%=Q{JT;}@S^=xjrAXYFr9gG_8#Lj){e*A0x#n?^L^RG5GbPLIZ1xI42Pmt{j$oR z{|aQ<9vV*gJ^At!6XWpnv#eiSylAeps6UuN>5vga-{Xw6U$2+#uAQYnk+Z>l@x`@5 zQytSEpW(Uxec_ZYoAcG(F-Z(Np6`0MJa7ANsRkV{gXMxBd7F3Me_#LNYt{b3t7j~# zZ)P#fW2l(Y95#`yfbD^Z1J9i;K8BV%XLg4Q`YUjXnQU14Qs~4N{+??87Xb_m45}rr z5hW>!C8<`)MX8A;sSHL2Mh3bDmbwOJA%+%K#->(=X4(b@Rt5&sK3f=~Xvob^$xN$c zFfuSS)HN{EH8c+~G_o=>w=%SZXm}dO5y!y5APKS|I6tkVJh3R1p}f3YFEcN@I61K( ZRWH9NefB#WDFy}x22WQ%mvv4FO#sz?LA3w? literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/folder_open.png b/Media/Themes/Umami/Icon/status/folder_open.png new file mode 100644 index 0000000000000000000000000000000000000000..def61fe71f94ef2eb82d10d3159a4ff1e5e69707 GIT binary patch literal 1073 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_e4Z|jAs)xCPTiZG5-M__{`tAtGgXrB zNQy}>Zk7Lk$Vp0Y%^zkT%ccayX_`SxX1RID3MgqT+q7|8Idf#kjT1t#n;*29&JO*& z^<+xgy*<_MEyeWnzxkfgF}zXn;LyW;)#u;W?Bo7lKG7*MB4WjvvuDrxS>4DnJ8w0& z@1DelJ$wFa?%2b6Ba}U~^!%B3Yu2opbBANYmMtl7%VtX`r?q9hTQgHpDJM6Vx2&wp z>TFu^)|`a$a`A?*U%!57Z8&<=HFx{%P20D-b1;UwhPpSXc;2{kN2cO^_EA}5ZR?F2 zckTLhFV!JP!_X}_lv7b4S%!IrWaKnMdwcu4Sz9wqq^@L{y0AQ#S#|2xty{apT@9F8 z9_X_8_Z0F3w6zGl_*&KRq|y4h+XS7{OD?}und_$>!+FA}|9fSY8e`X#4i2TJRgdOq zXNhgwzI}PaXHG#D?LGT>G!&AL?ryMnUT{t@xyN&o58DxmwJ~=V_AiNZmksS(!0<%V zXpXUw_nRHRZoMwI`)kFR@ul+H-(T)8BUn-oZ2$f`WL2rl0iE~+5uV*I<|W1F@3&v8 z_I;TvPjiXZKh8adOcnFRcQSl2`tjy*`3j5nslO$e8F${$l$o&S<#LvXYs{B?zIykW zsHWCd^`A%Mzwf?2>xR>-Q1=gv>hB789_*F(E$rzMUTDq1v$-PoabWMkfEV+=3*Oi- z)7U0pU_5W>p*KFgc~TNTUNhDh`2C)D%{%m;#k+;e`u__$GX8jd=i)BY!zU}zgZ{_mm-xb+mBf-qDYF72{(-%eZ_uYMz^Pn^9$BLE}E~bm5vfM%f zOrKPKT^Z7{kpIuWFB(?7_hZ-u7H=wkA#p@&`)uPg*IKVgKG3_?eU$Uhw(>=6_WwRS zZSOzT;NtS;;AA`L{`h5utB?8f&ktC6;>PQMc~3uG5RLkB>fpnd7s~tXH1~-%RPDe2 z|J}R4&HPTuYL>QEkH6g78{9Et=Fi9N-|gzRd^~FRGb3W+L9Gv3A5J~p^4B}?0nZKA zpbEPMOd)zbr+sy%Z(7=re(3V=`KRy8t~a)Pzrf%D0|SFRdP{kVo554 zk%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn3=MS+%ybRSLkx|q zjLfYJEg>47#&N_kFfd4hYzWRzD=AMbN@XZ7FW1Y=%Pvk%EJ)SMFG`>N&PIxXfq}u( L)z4*}Q$iB}1@qhs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/gnome-dev-wavelan-encrypted.png b/Media/Themes/Umami/Icon/status/gnome-dev-wavelan-encrypted.png new file mode 100644 index 0000000000000000000000000000000000000000..28fe5ef49659ce5a7251fa41d46b8aa1695cedbf GIT binary patch literal 1309 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE@}4e^As)w{hQ<3tmx|1rEwz|msy6uX z;x_Tgnw|M}Gi-OPFibNpe6h?;Ue;)CTAzU+qvU_dPwSgCB@G1FMA@WyZaGE&>R%^v zE66J|GynbD-1oWq$%_wcshL-ObnionSw9jc>%ZLlz5IOnx$=F*w`{BbiO-*OY0-4= z)AboI|13Qm9~gSe_qzP)@BgMAXqhx^eu!Ul;UmAST+!{}`MFX(zoyQ*<;87VoqN6U z{4~+|Hs6z{MlZj-X5ISrjsi&^&YV?H_eT z+hkq+yDD#&?dIA48u%5}IyBo^7vIXh;M?Prf924-4N98qWj7|ic<=nDO|+(`RpApy z>-2e)I5W%BtB`+?CatED;Z9knC_NjRacuqJ1gYg-YYHmU4zT=aKG&}#5?p?Ku|NpsJhjqj~&+DJLyVgN%!q)lc z&a`xUSX_$!@k^y;Ps|2Ab|H2?g=ZTyKb6G46MCO|ne9`pmQ$F??Vbyhs?}B=Cs*H&fht?Vd}S4)j=|*(d(SlCTd^we>KI+ zX(GcRIrSZ4qKiUPJ%WtHW^1m^$}@OZ;Tv)_WJlWFb7vo1dKBw^a&nIPPA4~6rB`wW z%~>q9dOE@1wy-R93;lcX_f6O1QTlNcDn9-C)8wu=F>%`~!5Q-%4_G%JRh56MDp=M0 z?)$ROUtj&cw{FWk|L-gH*Bee$tym#%)Y!@K$8kN=&F_h7bJk^Bq~HJgN^iZ*?VHQr z-R$7Dd6qFlO;`AXZq<~Pv5}E}<)!gmF**M&^UXKPtJyeK{PL;GdwxK))N7iyK$J_% zwI&tS`t0m{UNN!S>mQ$n$IC1!_7{}9nfal%-dxll>94q=hs61?(JIQ88=)uh`&pGw$KD~6Wyf6ODovWK$=BDNG z^LxI2o9)ggTlf3|yZh#QKmHu~82{i}HB-v2-HhvnVYW=V#= zjV@(iU{Eb_jVMV;EJ?LWE=o--No6oHFf!0Ju+%j$3o*2?GB&j`G}AUPure^1_SwP^ yMMG|WN@iLmgOP!up{{|MuAzB|p^=r5xs{| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}ha?>t=`Lp+XOoxDF^CRE_K{pY;mZ-o|? z&6x$QFEl48?R0KxYvPOK=+w@bkP*A1U@NP~y4Z%Pr~WgFzVr}0DWuoYav(6p$s)4P zpl_13-uJ`zzTe|HdT-u)zV*yvyz6Jh?lqtPvo4+O-+TA2gwoQjoA&J46HvDCVn)ej zldIayW@cvZx=+k*h%E^W?LYJ8*|TS9zr7m1el5*5n|(yW&^Y9C(petC#QgmHih_a( zW>URtPqM5H<8GKcckX3x#_a6uTRCP=U%coLU|Q9+s*llg(uUo;t-st0?>0{}i#&37 z?b@~F>5QI&Mdj=kG6`*kq`{ zlCM~i)Dzs`>A}%hx4+**?~bK;TS}x_<}9_$S#8{mkBtDxPDs1KAFpj<0-@Y&uZc)_wBSlzq#>Abb5kB*+Z^Aw{O4LxnriYo7?|B!JsAj z{qpzt`aj=#T%U_>Z$BhHf4_U~x~5+7Wf9WW@#V=z>m=NMS00;gU4DN?sKM5w)Am1o zemF1ls`7GyV~m}`d%lOb^rg>Uqu5e&Z}CKnh1OqqHlMJ!J**StD>K)=TB7KOIVFAoi_`$*a$O z_;SH-%?@9!8PYs#_wW7u_{2HB{$R+T(oU9B7#cB7oP zLbf9J+P3;ikrzz554LQ`%Xz4=Ge-4uOEgzSh2!Oat3QiBYO*V?XN&;lG}RK;fq{X+)78&qol`;+04!IvmjD0& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/gnome-fs-directory-visiting.png b/Media/Themes/Umami/Icon/status/gnome-fs-directory-visiting.png new file mode 100644 index 0000000000000000000000000000000000000000..8d6b6e61324de102c53c1d1f58d41630e255bf35 GIT binary patch literal 792 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}iFUp-wMLp+XOoq9I!vV%zL`3jl9?GEOS zP9CwLOFuA(bjE&rsCcL^^`3&zd4|_(A}S`U{+*oGIAOx3O3 zBM%=Q{JT;}@S^=xjrAXYFr9gG_8#Lj){e*A0x#n?^L^RG5GbPLIZ1xI42Pmt{j$oR z{|aQ<9vV*gJ^At!6XWpnv#eiSylAeps6UuN>5vga-{Xw6U$2+#uAQYnk+Z>l@x`@5 zQytSEpW(Uxec_ZYoAcG(F-Z(Np6`0MJa7ANsRkV{gXMxBd7F3Me_#LNYt{b3t7j~# zZ)P#fW2l(Y95#`yfbD^Z1J9i;K8BV%XLg4Q`YUjXnQU14Qs~4N{+??87Xb_m45}rr z5hW>!C8<`)MX8A;sSHL2Mh3bDmbwOJA%+%K#->(=X4(b@Rt5&sK3f=~Xvob^$xN$c zFfuSS)HN{EH8c+~G_o=>w=%SZXm}dO5y!y5APKS|I6tkVJh3R1p}f3YFEcN@I61K( ZRWH9NefB#WDFy}x22WQ%mvv4FO#sz?LA3w? literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/gnome-fs-loading-icon.png b/Media/Themes/Umami/Icon/status/gnome-fs-loading-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e75c4a5714e3d539ea31707cfeae891687e591a6 GIT binary patch literal 955 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}hadp%toLp+XOopLr?I8oqOz47dvSt;9B zM)H`@$9?BjlMgOztb6b$h{5*!?vih3c5*K~ zdT=3Q{z^j&lLw*6ZihOK9Y0=M$u!$M-_b?u_|8{y7R(7~I@PSxpe%ahR*cDu=|_cG)^i?k(K|l7eErNC`%XhPhU=v_ zH`cPp##RSxS(NjUB~-cc#|y@nQ#0Gz-3nybLyt-vzA-n@%{{;H%ZH5%?B_Tf*024U ze}A9SUZb-wgKHVSeEAZfArc^3<^OeJiOjpZ`=gT^Tm?J0R-JnC+mr8&eT!jR(M}(w zi4HCw1=7;eENVV*^v}0B7Vjy`^7*sLu?sg|JgQ6$5fweSY0INEDMp@l^ZzeyDiFV# z&yK&{PW}Wr~S}cwtRVEtoX$$ z_a*z@T3K65?l$&Pn&_Y#fAs9c*&Q5#x1W8xp?mB0Elttq3*?wYHO`&elx>L z;)&GKpw0+q9_zH=IkO-C>P@t(`{CfdYwG;Xn>pe%9AEIwv#UK8v+>0C_xEpZEjHJW zvwMEz)!9U9>CT-qzkM@%)M@eh+Pd_l zB&PG9H{{OtNt2e9&5oED*C@O7bxGiZt_U5s>}>6oSB!czC!BxI=%F?#=hlviA*%$p z>aK7URS%V?iF^=oif3-Tsnzopr08dJqKmY&$ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/gnome-fs-trash-full.png b/Media/Themes/Umami/Icon/status/gnome-fs-trash-full.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b9cd3b5498f66c6a0caa0481b70399a2036e91 GIT binary patch literal 1589 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWpvLY^*;As)xKPR+~-2^BeBpFg+K`0`#6 zMbV9|T&{x7A_Ag;jt-rMZ03)|lYLB7vL3nb|9SVw5sAl5o$>)ezC7L?-aUn?ivpQt z4}?uvtDC!A*6OoW{?6{o_1#InJo0-^p56U^Pxbl#|IYuM|M@|^+%bDzYq?5|jeGaL zT6WbxZdb^&FDviczqtAPV)Ett_jaeA-K8F5?!57PhKX626~mr8o4+rP|0kUAn{WHw z;`R0mQeXG34$DnAz3uIu-{)rY@W?IHyM8dmpe5jO${W3TcfZcnoE za_`Z`lKGjDH?}zow4IrK{n#Pa(}j1Z#>mKc-8(z+(#u%I`Tw~tzDwC}TKhZfu))0z zJyXB^D&2nR>P^n5$%S*SB$k((=YD>E`OcL?o8G;i7$w}Q7~~}-J$vPp(|2|zD$h2{ zRpVJ=Xz(CEZevnuz#H3tduJ|+cz4;iHTPVs^!sJiH;b~iMp@9wa?hiD0hXo)5%YCQRD^XG+M-ri*9Tbow;T|1Gw{+r3aYc~aU<~^JF>zCQ*3k#dy z-2VPibmfxG#hlsK)*aoHyD6@3_xqcNP6{6{+_aZ>Gegj+JA0$A8Sh_fy)<8vtxD~G z)bb#ME&I+aTb?_=rm7?9z2UUd^$J}|C6BIb zdUA$myg{Tei)lvQjYGNH^Pe1-=PQ19M}Erb&B(iPm1(>v{-cXvyM#g zBMZ)Lo@&{TIHd)(x0D&42;#13it4>6*t~5TA7A}9H?2HVU^36<(bnkR{^JsWGWjos?VmYj8wF&;BL zC6gn?5+k~ogcLiAxPEdHaJjU}wp+mG@=+7pTkCi6UOrRw>df>X|11_Stz&DiW6phe z!}8GzCmH{f#)Hu}uYdO9h@D}E050*Owglw-L{9BzV2$4rv`+|oF_R4MRLgiC^j z$u<3y9VKmTO^4>oxUaGhby@VQ%f2z>|1k$cqqu!bF1M_fSgDd|bFSc}gs-pn$}q2% zgO+03*B>^B+4IK6MMpy7P5LT_QmfkiS=uM}8%*e#ayr#`V&5btO&6)I4Mq)<*fw$) z`iLJttDNkp^xXcOyduZnFW)@>Jho8iTe{kGsU<^@;iKP;@6b>KU2fRkFk5%?SPm0Ynj;2A7B5ba{qHx z&D7?3mX)l|ny;VaAAPa*B@^Gzblz)uB^N9`^tw&lbF<&&Hw-Zhj3N*+OM-M z`_3^iFsPQeMwFx^mZVxG7o{eaq%s&87#ZjqSn3*>g&0~`8Jk)enrRytSQ!{h`)px| zq9HdwB{Qv(!N|bSP}jgr*U&t~(8$Wj+{(}rqTy*AM;rqKgCxj?;QX|b^2DN4hVt@q iz0ADq;^f4FRK5J7^x5xhq!<_&7(8A5T-G@yGywn|Ue9s> literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/gnome-netstatus-disconn.png b/Media/Themes/Umami/Icon/status/gnome-netstatus-disconn.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2c7b7524e592ca36eb8997b1c215d1ec6a1c69 GIT binary patch literal 753 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2w90>3Uab+M5G_}+(VPKfcz|hoE-_%lX=277m*XZX?ZNlp$+7#NNoJ$mBA@e?OboMB+Nc=6(uD_5>vyLR*D&0Du_zIgHC z_3PJf-n@DH_U*fO@7}+E|KY=j&!0d4|Nnoj!&hDg1_q&$AirP+CJ|9FaS0`DLkmlr z+PdcHYi1TEg)uNNFeZ7syV%<$8Z?>haQufIz}a8*Gi_wJ1k<6ED%&oAi`_EdW9 z^HxA`waC(#T$9;fqn1W!l(tycePF9oa|~K9ck~Ve1A|?OYeb22er|4RUI~M9QEFmI zYKlU6W=V!ZNJgrHyQgme7neq|rh<`yfw6*DVs>egf_heFZf;_-x@#wU}&goV5Vzm9%5)@Wn^w;XbI8qG>#(| zgW!U_%O^81FmM)lL>4nJa0`JjoZKYbyj2#lLOH3Eb1U;D@+P#miNqf*%*1xaT^p zE2MXwug|3|FSmGZ2sX_;d*=Q2c9o@uxsy45=^20iz4yD_=j!*r>pt}QYCbRc<#RqZ z!C%yJ{ok+8S0=aeuWf3uwchsj$oqV)*E76Sch){nGY=4D*uTFsw*B0+uhlib`zLMf zVlXu|WhnW3iAzXjfyPgDq0U2-)z?4kS<8`d+l+y)oy$uvSJBp?BBSQsjV=Z!4u%ll zv+F&2j;OpmV-iS_emt5$PQTM?yc_viQbNqa9|y!ewb)HBeds$VAQ z=4pmmi3|yAqgsC!Yv)9!p8<3 zLNoPLj+Q$A-C?pKKR>-Hfgv-}Ls1||>2hX@Qseryy)G7artq-!GmFc{GsU&?2nlC~ z__|*W4T*KV92ye4yz-5`l(qHAV@Vx3V$mEe0vxx`?M>h8bLvQOGB!4L9lLw~r(YM9+u9ecdG|_5m_uQbXUn1mReN_t zM;SaS{CUuTt?{(TvKL=w%6Yaf^P92e-QL#gn~e7zbDOTs@9*zpAk@iWJX0n_C%ZcF z0@w8gwc6hbmm72G|21Gu;}k~I~K3=E7F zyb`lZlN8jmGIMhilhqZ1OHwoQQj64$-$yVoFsOn|N=Yn9wMqsX!(e1!WT0zcscT>s zVrXGyY-(j_rfpzgWneJvvxOmwhTQy=%(O}dBLhQ2T>~>+L-P|&hNp2H RaSRL$44$rjF6*2UngCMI*cbo+ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/gnome-netstatus-idle.png b/Media/Themes/Umami/Icon/status/gnome-netstatus-idle.png new file mode 100644 index 0000000000000000000000000000000000000000..501d3f6fc92c962e5aa75e371f3144b4cfef6dd4 GIT binary patch literal 901 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wiUjzCxH6Ch>g($m7#MPMb0E5dgM%RqGcz*?qp77Hg6iw*>gsAM zD=W&%O6%+EYHMrEJSyDcy4~V>Jd^r8lO}j3_xq$z_DP@On?5-(Z9;J7(733eadA=evZ9uyMJ>xp+gFsfuPpCcU0+|<*x1n2Qa@qBgt>F) zELpO6?b(!re{ISdR8j7i?^F3}}>rkXG?FnsWI zaSYLz*gENE&>;r_*JdXM*8oP*$h&TxjNvSt7cwXKin%%&{Q2J=U^;W6N^tA*uQp$H zhU$9$pLm?ta`}OUCx1FlH{d*8)GfMl@7`-#SG&R^p6p$B)%5K_?P*JH=GfTYyEid@ zeTMCQ?XDmdZxO5bkgYL~4qf$J?IU8na{huFnUh7Wc^?-W%vgNGa`6KH7byh`SE*i` zd2&f2$L_kaImwG;cn(S2c(Q)KtnidS%NHCr6tz75Nr$1vXFqpNyJ?ifn$34F|33ER zme^)q4u-jP-w%oT_3@ospQk4r(&9AnN2FHiB%3?j@7c?qWcYl`t)6ZAKrNEng)jRo z0|SFyiEBiObAE1aYF-J0b5UwyNotBhd1gt5LP$ocg1e`002h}=vZjKOfq}7tS7LT) zl7f0xW^Qg`vbsWWNor@#v7>o>z40H`Fbq&ly3@xmT zO|1;gv<(cb3=F1ywlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQY}@HCDi4wPCw MUHx3vIVCg!0H)njU;qFB literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/gnome-netstatus-rx.png b/Media/Themes/Umami/Icon/status/gnome-netstatus-rx.png new file mode 100644 index 0000000000000000000000000000000000000000..d0cdddeb2593b437c24a24c426a1e61abdad5133 GIT binary patch literal 1027 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wrUv+gxH6Ch>g($m7#MPMb0E5dgM%RqGcz*?qp77Hg6iw*>gsAM zD=W&%O6%+EYHMrEJSuErmpJBba?IW0l)S>FaGOivc9)`UZgJgiaXoHjyWGllyO-_q zOzQVcn&6q-?_IjxCw;O{`V`;v$-Wi40@Ef0XHJeSnibo2D6xEQV)v2kiuU}5#rchk z^QWB5pL(*OVR1p@qJqZ71yfEIOg&lDysW5YX;I6vqUmRfW}GgXai+9=MQQuW(%I+A zyH=OayHHTOXwr$(dqeoAiIDX>9iHjF6UcP+! z%9SfuuU@@&?b`M0*KgjudF$5A7cXACe*OCO$M0|6ym|BK$J@7W-+un_?%lh0Uw*uQ z|Ng^=51+pM`uzEG!18Pp1_lPTk|4ie1}0_}c20f)5m7O5328ZbC1q7@Z9@wSOPjEW zxZ3G!_8&NL>*ueR3ZLdMFfcGCdAqwXbg;^LFfcI6db&7x=I-<5 z|2Vru%tJUIF}`?PQo_+`zO*kO>QM0l7m*{!wh0*=EZ=>ahk>DirC=-5gWI-@8)nU8 zeDc+n@xhyIte=kCG96e`8{D2ZgU8;1;e^uHt(#ey4rClkyR$Szf#E_r^-*WYf%!4QDMU4;susyi^&vuW)h3e>Ic^w}cb$2*BUo7jMQLZ1MmtI?6 z*sJjRYHqF9sx`|!LLD|+hQ)@;FtFHUtX}qLb(O7sU7q{FBXR*YYEhC0A2J`1Umo%6 zZIXM@PPPYmM^oFK3Psx)Z zUnZ+ue;6`5xG(dUbqE6k!yoqiWrbp;i>5g-FfiDaxJHyX=jZ08=9Mrw7o{eaq^2m8 zXO?6rgk+>DxO@5raB*oQYbqES7#J&fC1#f<=H@0Qt1ASTq-N%&7O5M*k6>V6 zPz9Nkl30>zl?*n9!N|bKK-a)h*T5{q(89{t)XLCI+rYrez+l>E3quqQx%nxXX_X8{ n28M>Z24=d3<{^egRz~JlhL#WwPvbb^KzYT})z4*}Q$iB}P@s}3 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/gnome-netstatus-tx.png b/Media/Themes/Umami/Icon/status/gnome-netstatus-tx.png new file mode 100644 index 0000000000000000000000000000000000000000..bf2513307db0b25af9bf5c4175d1afa7ebe74246 GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wrUv+gxH6Ch>g($m7#MPMb0E5dgM%RqGcz*?qp77Hg6iw*>gsAM zD=W&%O6%+EYHMrEJSuErmpJBba?IW0l)S>FaGOivc9)`UZgJgiaXoHjyWGllyO-_q zOzQVcn&6q-?_IjxCw;O{`V`;v$-Wi40@Ef0XHJeSnibo2D6xEQV)v2kiuU}5#rchk z^QWB5pL(*OVR1p@qJqZ71yfEIOg&lDysW5YX;I6vqUmRfW}GgXai+9=MQQuW(%I+A zyH=OayHHTOXwr$(dqeoAiIDX>9iHjF6UcP+! z%9SfuuU@@&?b`M0*KgjudF$5A7cXACe*OCO$M0|6ym|BK$J@7W-+un_?%lh0Uw*uQ z|Ng^=51+pM`uzEG!18Pp1_lPTk|4ie1}0_}c20f)5m7O5328ZbC1q7@Z9@wSOPjEW zxZ3G!_8&NL>*ueR3ZLdMFfcGCdAqwXbg;^LFfcGGc)B=-NJz3C+?#hfK!V{y^6$-a zO&Yz<9&r-vKQJvN&B3E*kE*fr^=--V4Qn|T3VGCXCj7p4+LD2RL95}iDZ}*ZEC;H} zcnosZaWWjA&uDi?iQ!A!^Oe%czqptjuDQfV`8zOpR6R|vTp_~2aAmjiMN!E^FQtC` zJJvnBc^5;XZ8Vcg_yom>d8Q6k^}qS*oDK5hrf!tJ{ZZQd0h6g`$?39-cayiy`u_K% z*uf>K=5JSPc~@;(#j&D%f0u^pZf1cGt|FyBkMG=MYgLn_<~W~CA=O?>iu2&#=!X4m z5tT)o)MN4(cKqNhy-$9bA>3rmFvs`&v(hS; zRJC8*CY`dFQsrT|`d<$yKm2DrzM@!h_GQH|1_lPZ64!_l=ltB<)VvY~=c3falGGH1 z^30M9g^-L?1$R&104^?#WK9Jl0|R3Puf*)qBn9=X%-r0>WOaq$lGMz+)FO4`_Yn*X z45}cLQW8s2t&+jUFc=va8R!~V>Kd4Z7+P2vn_3x~X&V?=85m6aY+;C^AvZrIGp&-r o$iUE0*T78I&^*M@$jZpv%Fq&`;b|O494NbZy85}Sb4q9e06F4}T>t<8 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/gnome-netstatus-txrx.png b/Media/Themes/Umami/Icon/status/gnome-netstatus-txrx.png new file mode 100644 index 0000000000000000000000000000000000000000..fa4c15a57a2e6d0dbde05e314703709f2e9e051b GIT binary patch literal 906 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wiUjzCxH6Ch>g($m7#MPMb0E5dgM%RqGcz*?qp77Hg6iw*>gsAM zD=W&%O6%+EYHMq3VwX7PZgR}s;*`9?rEr@|;dYmzZEj_|+{$*lm+kT{-R@hlE4J-W zV)v2kiuU{|C-bMCESPe#VCu=D>1T>&oGzMirgZkX@_85P>+2dD8=6|`Crp?yckY}e zOBSzPyJqv|&D*wZJ9_l!i4(_9oH%ju;>F9CFJHNGTOWy7}V8 zi`TDTzyA3B&6_uGKK*$6`Nz92KR$f;@afyH&!0bs{_ow%z`&qZ666=mz{JeL&dDzz zA}S^>AuT7bq^zo~ZD?U(X%iL^S37;p{sSj&{rvS(;nN%j1_s6?Z+91l4pvzY1_p+& zo-U3d8WUS5z4SZeAmY~Ta5E$(aLa-PO3Au<8dtW(t=pu`ap}~rfA1ZQE<4@!{PM?k z=AF-~${ha-8>KhpHOiiT$ZmT`OTaDhnJD+7u=uN8QHpkk%K5X_z5KN}-lro`;=KQM zSEH}p-#_iuIbEL86!W}$kcGC>nYF6A!}`_QT%ak}Ti{uLc=+xh)3zr6A>&Sn}%e&=pa!w=WDM=~zo z5wYdB>xZ8V3=DQ9t`Q~9`MJ5Nc_j?aMX8A;sVNHOnI#ztAsML(?w-B@TwEH-nhHh+ z2F40riP@z|3hG&zxw(nS>I%UnshN4HMe4@yBN!MMR6!=CB$lLFC4-G&FfuSQ&^55s zH82Y?w6HQZwK6o*HZZURVeP?Gg@^>bP0l+XkKW;9}G literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/gnome-stock-trash-full.png b/Media/Themes/Umami/Icon/status/gnome-stock-trash-full.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b9cd3b5498f66c6a0caa0481b70399a2036e91 GIT binary patch literal 1589 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWpvLY^*;As)xKPR+~-2^BeBpFg+K`0`#6 zMbV9|T&{x7A_Ag;jt-rMZ03)|lYLB7vL3nb|9SVw5sAl5o$>)ezC7L?-aUn?ivpQt z4}?uvtDC!A*6OoW{?6{o_1#InJo0-^p56U^Pxbl#|IYuM|M@|^+%bDzYq?5|jeGaL zT6WbxZdb^&FDviczqtAPV)Ett_jaeA-K8F5?!57PhKX626~mr8o4+rP|0kUAn{WHw z;`R0mQeXG34$DnAz3uIu-{)rY@W?IHyM8dmpe5jO${W3TcfZcnoE za_`Z`lKGjDH?}zow4IrK{n#Pa(}j1Z#>mKc-8(z+(#u%I`Tw~tzDwC}TKhZfu))0z zJyXB^D&2nR>P^n5$%S*SB$k((=YD>E`OcL?o8G;i7$w}Q7~~}-J$vPp(|2|zD$h2{ zRpVJ=Xz(CEZevnuz#H3tduJ|+cz4;iHTPVs^!sJiH;b~iMp@9wa?hiD0hXo)5%YCQRD^XG+M-ri*9Tbow;T|1Gw{+r3aYc~aU<~^JF>zCQ*3k#dy z-2VPibmfxG#hlsK)*aoHyD6@3_xqcNP6{6{+_aZ>Gegj+JA0$A8Sh_fy)<8vtxD~G z)bb#ME&I+aTb?_=rm7?9z2UUd^$J}|C6BIb zdUA$myg{Tei)lvQjYGNH^Pe1-=PQ19M}Erb&B(iPm1(>v{-cXvyM#g zBMZ)Lo@&{TIHd)(x0D&42;#13it4>6*t~5TA7A}9H?2HVU^36<(bnkR{^JsWGWjos?VmYj8wF&;BL zC6gn?5+k~ogcLiAxPEdHaJjU}wp+mG@=+7pTkCi6UOrRw>df>X|11_Stz&DiW6phe z!}8GzCmH{f#)Hu}uYdO9h@D}E050*Owglw-L{9BzV2$4rv`+|oF_R4MRLgiC^j z$u<3y9VKmTO^4>oxUaGhby@VQ%f2z>|1k$cqqu!bF1M_fSgDd|bFSc}gs-pn$}q2% zgO+03*B>^B+4IK6MMpy7P5LT_QmfkiS=uM}8%*e#ayr#`V&5btO&6)I4Mq)<*fw$) z`iLJttDNkp^xXcOyduZnFW)@>Jho8iTe{kGsU<^@;iKP;@6b>KU2fRkFk5%?SPm0Ynj;2A7B5ba{qHx z&D7?3mX)l|ny;VaAAPa*B@^Gzblz)uB^N9`^tw&lbF<&&Hw-Zhj3N*+OM-M z`_3^iFsPQeMwFx^mZVxG7o{eaq%s&87#ZjqSn3*>g&0~`8Jk)enrRytSQ!{h`)px| zq9HdwB{Qv(!N|bSP}jgr*U&t~(8$Wj+{(}rqTy*AM;rqKgCxj?;QX|b^2DN4hVt@q iz0ADq;^f4FRK5J7^x5xhq!<_&7(8A5T-G@yGywn|Ue9s> literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/gtk-dialog-error.png b/Media/Themes/Umami/Icon/status/gtk-dialog-error.png new file mode 100644 index 0000000000000000000000000000000000000000..f01f85e2f3d3c2a4300681edf5eb5eb3892a985e GIT binary patch literal 1075 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 sGSey| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?mYyz-As)xiPPv~QohotM{(N=a6BS!^ z->Pj}J$K!@aQWI=?m+3xE@u5*qOA?{X3lmjS7u&lzFVN`VT#|)vlsRs$X?Hqd9X^E zC-H?VcamD!sST&twr&u$in+WrdfMZomnNLa%YCC)^Wfp0J^b&#f3|sF{o~Mo&6*3h zY!}}Wkhf>c7N5H7>EQ##tUnUu8{fyBe413Nth|!v&xaUBsWUFWe`hmKbJd#|uq?Ce z=Z9-@=ilAhTkVokW;A{ClUt@5(_enE$<0oE>ML&dm$#|bH{n1l^UD%}ebwTBe-wt; z`JdWWcI?%_u9Q|BWx;-ei+W=snegz zbiA;s#7g$h#w{X$o>U$@)G2(BeZy1d@Y}+BSmM9)^JyiQPW^Cm^NI|S+uI6d*sor6 ztjOx>E1J14!bkE$VKjsMrhb!Lh3X$0#6q+pf`b`uZ0pUv-NEtDIK5)WzH>Kz?66b$ zG>^Zwnk^;qoV47vEmK7gJwK<|*4XjDg70F6h@c~P>xSjaFXrD*J5ah+pk|wT1ONJk zuU9VaY?6W5~(NOPZxNEmcvegCjb8UBUZLsq3<%-d+!SdCk?szLZJ+UO-!6!ixuv zTS|7h?ulA!WN7HPF(Ri!dufM{pOcB#vhCrThdq9M_|?ZCufiNJBQ0sTqf)p!ZJDdb z_0p=Usu%Cx<-N(h{`mR%;Jt;-7cT}HGsl}Te_2*)m@@0)zX%@XnMWjKYVJ73dR#Ak z_WXHt%XZ^Q=QrQG+WLIgpPWd;{Xv!KV*9cxo4Gfb%{sel?^C0LpNv?}f7u|bY+`dJ zD_#A*zTUl`EPPx26p}hp9c}uaRd#qh{+Igu_MY!YqBL7s7`OKFW)!_-doW#LM%|VT zA9k`&+!meRm3kv0tLWzPohzBFUT1!mkYehoTFYj`vaP}QLH+|i>m9F*-|mXr{z`Jy z@+(K>O&C}Go>>+Dk>C08fvyAneg+H-45}rr5hW>!C8<`)MX8A;sSHL2Mh3bDmbwOJ zA%+%K#->(=X4(b@Rt5&sK3f=~Xvob^$xN$cFfuSS)HN{EH8c+~G_o=>w=%SZXm}dO S5y!y5z~JfX=d#Wzp$Py%blIH% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/gtk-directory.png b/Media/Themes/Umami/Icon/status/gtk-directory.png new file mode 100644 index 0000000000000000000000000000000000000000..def61fe71f94ef2eb82d10d3159a4ff1e5e69707 GIT binary patch literal 1073 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_e4Z|jAs)xCPTiZG5-M__{`tAtGgXrB zNQy}>Zk7Lk$Vp0Y%^zkT%ccayX_`SxX1RID3MgqT+q7|8Idf#kjT1t#n;*29&JO*& z^<+xgy*<_MEyeWnzxkfgF}zXn;LyW;)#u;W?Bo7lKG7*MB4WjvvuDrxS>4DnJ8w0& z@1DelJ$wFa?%2b6Ba}U~^!%B3Yu2opbBANYmMtl7%VtX`r?q9hTQgHpDJM6Vx2&wp z>TFu^)|`a$a`A?*U%!57Z8&<=HFx{%P20D-b1;UwhPpSXc;2{kN2cO^_EA}5ZR?F2 zckTLhFV!JP!_X}_lv7b4S%!IrWaKnMdwcu4Sz9wqq^@L{y0AQ#S#|2xty{apT@9F8 z9_X_8_Z0F3w6zGl_*&KRq|y4h+XS7{OD?}und_$>!+FA}|9fSY8e`X#4i2TJRgdOq zXNhgwzI}PaXHG#D?LGT>G!&AL?ryMnUT{t@xyN&o58DxmwJ~=V_AiNZmksS(!0<%V zXpXUw_nRHRZoMwI`)kFR@ul+H-(T)8BUn-oZ2$f`WL2rl0iE~+5uV*I<|W1F@3&v8 z_I;TvPjiXZKh8adOcnFRcQSl2`tjy*`3j5nslO$e8F${$l$o&S<#LvXYs{B?zIykW zsHWCd^`A%Mzwf?2>xR>-Q1=gv>hB789_*F(E$rzMUTDq1v$-PoabWMkfEV+=3*Oi- z)7U0pU_5W>p*KFgc~TNTUNhDh`2C)D%{%m;#k+;e`u__$GX8jd=i)BY!zU}zgZ{_mm-xb+mBf-qDYF72{(-%eZ_uYMz^Pn^9$BLE}E~bm5vfM%f zOrKPKT^Z7{kpIuWFB(?7_hZ-u7H=wkA#p@&`)uPg*IKVgKG3_?eU$Uhw(>=6_WwRS zZSOzT;NtS;;AA`L{`h5utB?8f&ktC6;>PQMc~3uG5RLkB>fpnd7s~tXH1~-%RPDe2 z|J}R4&HPTuYL>QEkH6g78{9Et=Fi9N-|gzRd^~FRGb3W+L9Gv3A5J~p^4B}?0nZKA zpbEPMOd)zbr+sy%Z(7=re(3V=`KRy8t~a)Pzrf%D0|SFRdP{kVo554 zk%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn3=MS+%ybRSLkx|q zjLfYJEg>47#&N_kFfd4hYzWRzD=AMbN@XZ7FW1Y=%Pvk%EJ)SMFG`>N&PIxXfq}u( L)z4*}Q$iB}1@qhs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/gtk-missing-image.png b/Media/Themes/Umami/Icon/status/gtk-missing-image.png new file mode 100644 index 0000000000000000000000000000000000000000..82dd93df92a7645f2775990829e08a7ac7b152bd GIT binary patch literal 808 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haTAnVBAs)xCPC1_~94K&nzwzcw6HePH zM|i!OJ3cOWvZ&taqPO0$_H#Sa~Y`<>yq^i#g>YL@hNGZD7Ocf9)Q@o<8 z=fYz+%s zmbq$k)c*V7SEF2gUuUT+?pn9_YS!5&g0k^+G5vIoMBDnrgIukLypGE= zy!rn_?1XTdfpLd~4%4#8p2*p6SkxTV)}Ehx?a+nkU(PO#3j4rp7PNF(!^_+%6rO6G|55F)*B|{(dq0&B4t&D%-YA3sz9{TzM%r z#lDV#p+w%kvHS;jw)r~!AneH|M2_o z6Sep4!!BjNIoluJl)hCV;aG{U@ZMi~ZSnh*zJ6c~S}L?9M=YFg_d=~!3#Nv&*o>Px zX4~QwR&8`)=rEYG(0JcW9f34~&o|WBIGa5W9D4lzWv?1zs{?bx+3xAeAF0|P4qgK3{F3{f=X=BH$) sRWcYE7#ivtnCTjthZq`J8JSxdT0%5DjpK-8U|?YIboFyt=akR{07jTbxc~qF literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/image-loading.png b/Media/Themes/Umami/Icon/status/image-loading.png new file mode 100644 index 0000000000000000000000000000000000000000..e75c4a5714e3d539ea31707cfeae891687e591a6 GIT binary patch literal 955 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}hadp%toLp+XOopLr?I8oqOz47dvSt;9B zM)H`@$9?BjlMgOztb6b$h{5*!?vih3c5*K~ zdT=3Q{z^j&lLw*6ZihOK9Y0=M$u!$M-_b?u_|8{y7R(7~I@PSxpe%ahR*cDu=|_cG)^i?k(K|l7eErNC`%XhPhU=v_ zH`cPp##RSxS(NjUB~-cc#|y@nQ#0Gz-3nybLyt-vzA-n@%{{;H%ZH5%?B_Tf*024U ze}A9SUZb-wgKHVSeEAZfArc^3<^OeJiOjpZ`=gT^Tm?J0R-JnC+mr8&eT!jR(M}(w zi4HCw1=7;eENVV*^v}0B7Vjy`^7*sLu?sg|JgQ6$5fweSY0INEDMp@l^ZzeyDiFV# z&yK&{PW}Wr~S}cwtRVEtoX$$ z_a*z@T3K65?l$&Pn&_Y#fAs9c*&Q5#x1W8xp?mB0Elttq3*?wYHO`&elx>L z;)&GKpw0+q9_zH=IkO-C>P@t(`{CfdYwG;Xn>pe%9AEIwv#UK8v+>0C_xEpZEjHJW zvwMEz)!9U9>CT-qzkM@%)M@eh+Pd_l zB&PG9H{{OtNt2e9&5oED*C@O7bxGiZt_U5s>}>6oSB!czC!BxI=%F?#=hlviA*%$p z>aK7URS%V?iF^=oif3-Tsnzopr08dJqKmY&$ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/image-missing.png b/Media/Themes/Umami/Icon/status/image-missing.png new file mode 100644 index 0000000000000000000000000000000000000000..82dd93df92a7645f2775990829e08a7ac7b152bd GIT binary patch literal 808 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haTAnVBAs)xCPC1_~94K&nzwzcw6HePH zM|i!OJ3cOWvZ&taqPO0$_H#Sa~Y`<>yq^i#g>YL@hNGZD7Ocf9)Q@o<8 z=fYz+%s zmbq$k)c*V7SEF2gUuUT+?pn9_YS!5&g0k^+G5vIoMBDnrgIukLypGE= zy!rn_?1XTdfpLd~4%4#8p2*p6SkxTV)}Ehx?a+nkU(PO#3j4rp7PNF(!^_+%6rO6G|55F)*B|{(dq0&B4t&D%-YA3sz9{TzM%r z#lDV#p+w%kvHS;jw)r~!AneH|M2_o z6Sep4!!BjNIoluJl)hCV;aG{U@ZMi~ZSnh*zJ6c~S}L?9M=YFg_d=~!3#Nv&*o>Px zX4~QwR&8`)=rEYG(0JcW9f34~&o|WBIGa5W9D4lzWv?1zs{?bx+3xAeAF0|P4qgK3{F3{f=X=BH$) sRWcYE7#ivtnCTjthZq`J8JSxdT0%5DjpK-8U|?YIboFyt=akR{07jTbxc~qF literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/important.png b/Media/Themes/Umami/Icon/status/important.png new file mode 100644 index 0000000000000000000000000000000000000000..f77bca6c2e8afe2ee1891bc545994e422c6407ef GIT binary patch literal 1079 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?mYyz-As)xiPPv~QohotM{(N=a6BS!^ z->Pj}J$K!@aQWI=?m+3xE@u5*qOA?{X3lmjS7u&lzFVN`VT#|)vlsRs$X?Hqd9X^E zC-H?VcamD!sST&twr&u$in+WrdfMZomnNLa%YCC)^Wfp0J^b&#f3|sF{o~Mo&6*3h zY!}}Wkhf>c7N5H7>EQ##tUnUu8{fyBe413Nth|!v&xaUBsWUFWe`hmKbJd#|uq?Ce z=Z9-@=ilAhTkVokW;A{ClUt@5(_enE$<0oE>ML&dm$#|bH{n1l^UD%}ebwTBe-wt; z`JdWWcI?%_u9Q|BWx;-ei+W=snegz zbiA;s#7g$h#w{X$o>U$@)G2(BeZy1d@Y}+BSmM9)^JyiQPW^Cm^NI|S+uI6d*sor6 ztjOx>E1J14!bkE$VKjsMrhb!Lh3X$0#6q+pf`b`uZ0pUv-NEtDIK5)WzH>Kz?66b$ zG>^Zwnk^;qoV47vEmK7gJwK<|*4XjDg70F6h@c~P>xSjaFXrD*J5ah+pk|wT1ONJk zuU9VaY?6W5~(NOPZxNEmcvegCjb8UBUZLsq3<%-d+!SdCk?szLZJ+UO-!6!ixuv zTS|7h?ulA!WN7HPF(Ri!dufM{pOcB#vhCrThdq9M_|?ZCufiNJBQ0sTqf)p!ZJDdb z_0p=Usu%Cx<-N(h{`mR%;Jt;-7cT}HGsl}Te_2*)m@@0)zX%@XnMWjKYVJ73dR#Ak z_WXHt%XZ^Q=QrQG+WLIgpPWd;{Xv!KV*9cxo4Gfb%{sel?^C0LpNv?}f7u|bY+`dJ zD_#A*zTUl`EPPx26p}hp9c}uaRd#qh{+Igu_MY!YqBL7s7`OKFW)!_-doW#LM%|VT zA9k`&+!meRm3kv0tLWzPohzBFUT1!mkYehoTFYj`vaP}QLH+|i>m9F*-|mXr{z`Jy z@+(K>O&C}Go>>+Dk>C08fvyAneg+H-45}rr5hW>!C8<`)MX8A;sSHL2Mh3bDmbwOJ zA%+%K#->(=X4(b@Rt5&sK3f=~Xvob^$xN$cFfuSS)HN{EH8c+~G_o=>w=%SZXm}dO S5y!y5z~JfX=d#Wzp$Py%blIH% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/info.png b/Media/Themes/Umami/Icon/status/info.png new file mode 100644 index 0000000000000000000000000000000000000000..037bfb801e11d365b0cd07c9ed2e8a28c1ca2cdc GIT binary patch literal 1352 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>K z;HUHMdIkmt&H|6fVg?3oVGw3ym^DX&fq})#)5S5wq?PHY$A?J+}5g@2FYD$SE~&Wc9#0;C{+95q{PWAgRDcR+!PHHq?Ega zCmp0Fjyt8f1-KDFz zVm7g?%}|(m?%{fE@!pA-)tAfe{u5*(WLFs8@UQXUai)dG`<#D#N}GQpM*Z@_W_GX6PHBHv<%f?$8Go^}i8~7T4jURhne&2OfS6h5_wcVY$reBh(O@#c;d=<`f<+85c{&t0TmdwWN z%{Tr8bg;gTaqErNStYmg#aEBkXAMDlA5N_d*|#Ki$HdF?-@FWUY?=F6RUq%{^j)u+ z6|JgFyPr+S3H0J|^6(V!m?#vqV9FEKz!TSZ99a@RF>U##s&!xgiTSPAQEJy5?XvS`pPSa>Hb2R8%8Q=QYnDZGUQT0O?>;T}SSQ0H{b@a$9A2h`YBT-lEXiuq zU-f-PUZ>dgEo@RvrFn*Hr|PGge2(e$_9@%OY9$xBF=KI}(Jqw*msY-%WInL+m5_n4 zP1UF8Z~edT)ri|O&v>On#EQ7gOwLug3Ji=g?Tb^Qa{k;~V0E=H{za#4wOyIa?O!E! z40EF`%!{&q9egUQ$hB|R>f)s{E}nY)FKW7xl>hr}xzCq3CB9uBx@7CDMEP))^7Ahr z20xoQapK|M-`@ROa!Qo3;ElOko&3H@^X7dpXunZ4(|48J#D;`TaT9eJ3=1}DPWGAM z-dAJ))Zn-29k{ubDIBl) z-`HPxV6e?ric`9rb%n#Ds+Ch_%-Iv?ywJWb?Z@%(t#59wKR3_z+r%K{eW4eO+!h9S zxF|og5Sy?e;PS?`*ZKKnbA&9umY3V>|E^u#>N`8Wz*tT9rug4Sa>s7m-qC!db(VPE zj!C^yT`{|Ac&ZNWv7E@@bCy9^IJ`9@<-K`1lg^9>UoL)cGq;IpyDs`z+U!fh%&+Y zwr#inP!}GqY<10s{idq(q)9K{m{>HFGuAL1U^$SNUa)(P9s?Ic>f2jOS65YEe=jeq z%f@uj>Wt6wEv2uUUagCrUv79Th{21YgyAUH8Z8Ikr3@pEYZIeBlvT1tlzF$k* z`D*tvI|v=nY4Bm4z?Kls&5$S8z;ht@=h9QjqROj{_8QLr_c|HRJ zgKCLuL`h0wNvc(HQEFmIDua=Mk%6v(rLKWlh@pj*v8k1znYMv}m4U&u&lZL#8glbf sGSey| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_l;RPZ!4!kK!)v`4=Rdl;DOPf`PMl7++un#p z5405W0Dly0ix%xU5b_|;&28DvrK$7%77I$qe3>|Ps%vPe>55gEIW>Qb z7d(zCujh^Y8{*J&xccCGuXdis-fLuBaH&DN*Njm+%oDoheY{)j0YrVul1DXIxEQW zW8=+l1{N<|CoP$rH~oeGoRz0;&p3YQkaELqO=cOt-v|Hf`BS#~s8{)U-c_r!I*%vu z@blkg-{&_+u%U15?QKGQ=b3+mWoOJ+p2s)GvS2~)!ikF0rpaBtk?{D^Q|=Y3ez6vu zdAP-&X|}IgaB1GU#@~y-hc|rIWNhF|&YZb(#ex~9!}Ts*+A}}Fpu_&bdzO2vG`7pk zo%QYbv}x1Cb9;S%)Wj_c3MturWaSdoB8#_`O$s%;wr9%Q?v=atbj|UgpIq~#V+|i1 zTK31+{r2s93eL+fU%7VW*|B89cf5CJKRkI{S(D+%rcFuH;{rwY>|@O7^{uF7Zh7XM z-uOK#`nIH`WLl-Fm-F7qK!%8dyLkJ$Z&j5QYc$u# zyWfsAvM)0#&V4w|X;-!Fo7=nR&zvc#rmp_0@%{B(FQX)Db|ky+O#AjwM|kq%Q`^?6 zwm22H9RBQm^QL9rGh5w~?-eJ`ojVw`v-|ZtzlQ!hdV#*81sisJNOf~-XWZwl%o{n) z@CC1B`@NcIYuPzz2^;1=v(>F&|IOL@?A-3yM{CndPenE4I0{6>)UYV{{Wz{V*YEg4 zXZH@5LosjvbWX~>ZTN!s%eSv<7}V!o?#$knsUXz(g13#g<=OK-k4aZPK0YeH&oNYd z%8XC56*$iB&X#V8-v3Rocio&{>Cww39o)IG(_TZ@aM5+?eN3xFT-SvqdC4k7Yprck z@w~IQT%BW%TIbrS2e;STaqOEtb7JK7-ODCEICJIW%FO>CcdQDEN;(p=ZSrgLbqiO$ zI-WOu#}u9o&kht?ynWqJyz})}cdzZ!H)_@!N3ET9!fD3BiMv}4f1bZP_R-0dN9S4A zFl}XgzkKOZS%#!ltL`!S?T&qPHRQ--MivF_hcj2lOfTSFz+|Mr7&z}tlW2lu1WVG& zGbz50)?N}m^s=*7rsHGE18vR=m$%MpdRL!Z&)hw2*0jn_>p}(w2GtVRh?11Vl2ohY zqSVBaR0bmhBLiInOI-uA5JL+qV^b?bGi?I{D+7aRpDhegH00)|WTsUz7#SEE>Kd5o z8k&a~8d({cTNzqHG(3&th+|-2kObKfoS#-wo>-L1P+nfHmzkGcoSayYs+V7sKKq@G R6axbTgQu&X%Q~loCIDeOSG)iK literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/messagebox_critical.png b/Media/Themes/Umami/Icon/status/messagebox_critical.png new file mode 100644 index 0000000000000000000000000000000000000000..f01f85e2f3d3c2a4300681edf5eb5eb3892a985e GIT binary patch literal 1075 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/messagebox_warning.png b/Media/Themes/Umami/Icon/status/messagebox_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..f77bca6c2e8afe2ee1891bc545994e422c6407ef GIT binary patch literal 1079 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?mYyz-As)xiPPv~QohotM{(N=a6BS!^ z->Pj}J$K!@aQWI=?m+3xE@u5*qOA?{X3lmjS7u&lzFVN`VT#|)vlsRs$X?Hqd9X^E zC-H?VcamD!sST&twr&u$in+WrdfMZomnNLa%YCC)^Wfp0J^b&#f3|sF{o~Mo&6*3h zY!}}Wkhf>c7N5H7>EQ##tUnUu8{fyBe413Nth|!v&xaUBsWUFWe`hmKbJd#|uq?Ce z=Z9-@=ilAhTkVokW;A{ClUt@5(_enE$<0oE>ML&dm$#|bH{n1l^UD%}ebwTBe-wt; z`JdWWcI?%_u9Q|BWx;-ei+W=snegz zbiA;s#7g$h#w{X$o>U$@)G2(BeZy1d@Y}+BSmM9)^JyiQPW^Cm^NI|S+uI6d*sor6 ztjOx>E1J14!bkE$VKjsMrhb!Lh3X$0#6q+pf`b`uZ0pUv-NEtDIK5)WzH>Kz?66b$ zG>^Zwnk^;qoV47vEmK7gJwK<|*4XjDg70F6h@c~P>xSjaFXrD*J5ah+pk|wT1ONJk zuU9VaY?6W5~(NOPZxNEmcvegCjb8UBUZLsq3<%-d+!SdCk?szLZJ+UO-!6!ixuv zTS|7h?ulA!WN7HPF(Ri!dufM{pOcB#vhCrThdq9M_|?ZCufiNJBQ0sTqf)p!ZJDdb z_0p=Usu%Cx<-N(h{`mR%;Jt;-7cT}HGsl}Te_2*)m@@0)zX%@XnMWjKYVJ73dR#Ak z_WXHt%XZ^Q=QrQG+WLIgpPWd;{Xv!KV*9cxo4Gfb%{sel?^C0LpNv?}f7u|bY+`dJ zD_#A*zTUl`EPPx26p}hp9c}uaRd#qh{+Igu_MY!YqBL7s7`OKFW)!_-doW#LM%|VT zA9k`&+!meRm3kv0tLWzPohzBFUT1!mkYehoTFYj`vaP}QLH+|i>m9F*-|mXr{z`Jy z@+(K>O&C}Go>>+Dk>C08fvyAneg+H-45}rr5hW>!C8<`)MX8A;sSHL2Mh3bDmbwOJ zA%+%K#->(=X4(b@Rt5&sK3f=~Xvob^$xN$cFfuSS)HN{EH8c+~G_o=>w=%SZXm}dO S5y!y5z~JfX=d#Wzp$Py%blIH% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/messagebox_warning_16x16.png b/Media/Themes/Umami/Icon/status/messagebox_warning_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..a50036cc314f03a48af1b3aaaeacdde233eb8c40 GIT binary patch literal 1047 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7^D~{D12U7785lGsmQFmY z?Gh+)tlrr9NQV+)s7S6V-}e9-^2XHT#(%TK3^elE%jZ(fO6@vbxK zR_4NXy|V>tIxB3B?SK52ZT_n3&8x2e|NT#67eDGbzP{^iN|Ml@Rp}a^o4?BEq`cizu)n}!zP9B3=Yi&& zvs!0nuAFPMyU;^G)rn)SkoOY}BaN*JGylGo{`JXsqmG>OKe5#}9-WvV`o3X>>dP!I z-|oCq)00D={5fG%I~(|+riTKs)c#nTB+CnS`^$prO5K`;hKQ2`rdxY`HQBn zj;i3Fb^YO!J*!^cF4)B=TRtrc&QwR%t}ia(K51IH$ot04 zR=b<`_k7@dd?Nktvj=-Yalu*O5n0T@z%2~Ij105pNH8!k`FXlHhFJJ7oqRr9I8fmD z{`aYyXQyvEsg^AjoGG1rS;y1U@Iq4tznspJw?~t{F4{XqPAlwV(1Z?+ick3;UYzXS zo8j0pZ;eRz@<&UPbZk9D7j4YjtZIMlWRh1gXpw`E~}~Wv{8scTb0%V9-BOU}+!r(6CPWpb{cK7C<;G#6**MnfJqrH2ayxP7_W zA4p9&{p#0Z7n^rt#>NSyQC6o9Y0f&Dpu~9hd2_6ubC*lQRM8pJrcNm@x36QevtIq@ z!qZ>1hLZyqS66SCeQ6u7YoN?}r`tCSj#;W$-Tzy+CpKE!cHLEz^r_w3{;t`uxAyR) z)WFm=7sZqnkNI5IJTRm9=9l;zDgpn)bY}I+JYO66LF>WWr8D<1*Vs2WNCvEK$T-v4 zq?LEz3*%Cg55@EUgg@ENDHFAUP4ejDBl{hrOWt2vc&F?)_sq(P%s*H4sWUJzFnGH9 KxvX| zgW!U_%O^81FmM)lL>4nJa0`JjoZKYbyj2#lLOH3Eb1U;D@+P#miNqf*%*1xaT^p zE2MXwug|3|FSmGZ2sX_;d*=Q2c9o@uxsy45=^20iz4yD_=j!*r>pt}QYCbRc<#RqZ z!C%yJ{ok+8S0=aeuWf3uwchsj$oqV)*E76Sch){nGY=4D*uTFsw*B0+uhlib`zLMf zVlXu|WhnW3iAzXjfyPgDq0U2-)z?4kS<8`d+l+y)oy$uvSJBp?BBSQsjV=Z!4u%ll zv+F&2j;OpmV-iS_emt5$PQTM?yc_viQbNqa9|y!ewb)HBeds$VAQ z=4pmmi3|yAqgsC!Yv)9!p8<3 zLNoPLj+Q$A-C?pKKR>-Hfgv-}Ls1||>2hX@Qseryy)G7artq-!GmFc{GsU&?2nlC~ z__|*W4T*KV92ye4yz-5`l(qHAV@Vx3V$mEe0vxx`?M>h8bLvQOGB!4L9lLw~r(YM9+u9ecdG|_5m_uQbXUn1mReN_t zM;SaS{CUuTt?{(TvKL=w%6Yaf^P92e-QL#gn~e7zbDOTs@9*zpAk@iWJX0n_C%ZcF z0@w8gwc6hbmm72G|21Gu;}k~I~K3=E7F zyb`lZlN8jmGIMhilhqZ1OHwoQQj64$-$yVoFsOn|N=Yn9wMqsX!(e1!WT0zcscT>s zVrXGyY-(j_rfpzgWneJvvxOmwhTQy=%(O}dBLhQ2T>~>+L-P|&hNp2H RaSRL$44$rjF6*2UngCMI*cbo+ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/network-idle.png b/Media/Themes/Umami/Icon/status/network-idle.png new file mode 100644 index 0000000000000000000000000000000000000000..501d3f6fc92c962e5aa75e371f3144b4cfef6dd4 GIT binary patch literal 901 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wiUjzCxH6Ch>g($m7#MPMb0E5dgM%RqGcz*?qp77Hg6iw*>gsAM zD=W&%O6%+EYHMrEJSyDcy4~V>Jd^r8lO}j3_xq$z_DP@On?5-(Z9;J7(733eadA=evZ9uyMJ>xp+gFsfuPpCcU0+|<*x1n2Qa@qBgt>F) zELpO6?b(!re{ISdR8j7i?^F3}}>rkXG?FnsWI zaSYLz*gENE&>;r_*JdXM*8oP*$h&TxjNvSt7cwXKin%%&{Q2J=U^;W6N^tA*uQp$H zhU$9$pLm?ta`}OUCx1FlH{d*8)GfMl@7`-#SG&R^p6p$B)%5K_?P*JH=GfTYyEid@ zeTMCQ?XDmdZxO5bkgYL~4qf$J?IU8na{huFnUh7Wc^?-W%vgNGa`6KH7byh`SE*i` zd2&f2$L_kaImwG;cn(S2c(Q)KtnidS%NHCr6tz75Nr$1vXFqpNyJ?ifn$34F|33ER zme^)q4u-jP-w%oT_3@ospQk4r(&9AnN2FHiB%3?j@7c?qWcYl`t)6ZAKrNEng)jRo z0|SFyiEBiObAE1aYF-J0b5UwyNotBhd1gt5LP$ocg1e`002h}=vZjKOfq}7tS7LT) zl7f0xW^Qg`vbsWWNor@#v7>o>z40H`Fbq&ly3@xmT zO|1;gv<(cb3=F1ywlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQY}@HCDi4wPCw MUHx3vIVCg!0H)njU;qFB literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/network-offline.png b/Media/Themes/Umami/Icon/status/network-offline.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2c7b7524e592ca36eb8997b1c215d1ec6a1c69 GIT binary patch literal 753 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2w90>3Uab+M5G_}+(VPKfcz|hoE-_%lX=277m*XZX?ZNlp$+7#NNoJ$mBA@e?OboMB+Nc=6(uD_5>vyLR*D&0Du_zIgHC z_3PJf-n@DH_U*fO@7}+E|KY=j&!0d4|Nnoj!&hDg1_q&$AirP+CJ|9FaS0`DLkmlr z+PdcHYi1TEg)uNNFeZ7syV%<$8Z?>haQufIz}a8*Gi_wJ1k<6ED%&oAi`_EdW9 z^HxA`waC(#T$9;fqn1W!l(tycePF9oa|~K9ck~Ve1A|?OYeb22er|4RUI~M9QEFmI zYKlU6W=V!ZNJgrHyQgme7neq|rh<`yfw6*DVs>egf_heFZf;_-x@#wU}&goV5Vzm9%5)@Wn^w;XbI8qG>#(8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wrUv+gxH6Ch>g($m7#MPMb0E5dgM%RqGcz*?qp77Hg6iw*>gsAM zD=W&%O6%+EYHMrEJSuErmpJBba?IW0l)S>FaGOivc9)`UZgJgiaXoHjyWGllyO-_q zOzQVcn&6q-?_IjxCw;O{`V`;v$-Wi40@Ef0XHJeSnibo2D6xEQV)v2kiuU}5#rchk z^QWB5pL(*OVR1p@qJqZ71yfEIOg&lDysW5YX;I6vqUmRfW}GgXai+9=MQQuW(%I+A zyH=OayHHTOXwr$(dqeoAiIDX>9iHjF6UcP+! z%9SfuuU@@&?b`M0*KgjudF$5A7cXACe*OCO$M0|6ym|BK$J@7W-+un_?%lh0Uw*uQ z|Ng^=51+pM`uzEG!18Pp1_lPTk|4ie1}0_}c20f)5m7O5328ZbC1q7@Z9@wSOPjEW zxZ3G!_8&NL>*ueR3ZLdMFfcGCdAqwXbg;^LFfcI6db&7x=I-<5 z|2Vru%tJUIF}`?PQo_+`zO*kO>QM0l7m*{!wh0*=EZ=>ahk>DirC=-5gWI-@8)nU8 zeDc+n@xhyIte=kCG96e`8{D2ZgU8;1;e^uHt(#ey4rClkyR$Szf#E_r^-*WYf%!4QDMU4;susyi^&vuW)h3e>Ic^w}cb$2*BUo7jMQLZ1MmtI?6 z*sJjRYHqF9sx`|!LLD|+hQ)@;FtFHUtX}qLb(O7sU7q{FBXR*YYEhC0A2J`1Umo%6 zZIXM@PPPYmM^oFK3Psx)Z zUnZ+ue;6`5xG(dUbqE6k!yoqiWrbp;i>5g-FfiDaxJHyX=jZ08=9Mrw7o{eaq^2m8 zXO?6rgk+>DxO@5raB*oQYbqES7#J&fC1#f<=H@0Qt1ASTq-N%&7O5M*k6>V6 zPz9Nkl30>zl?*n9!N|bKK-a)h*T5{q(89{t)XLCI+rYrez+l>E3quqQx%nxXX_X8{ n28M>Z24=d3<{^egRz~JlhL#WwPvbb^KzYT})z4*}Q$iB}P@s}3 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/network-transmit-receive.png b/Media/Themes/Umami/Icon/status/network-transmit-receive.png new file mode 100644 index 0000000000000000000000000000000000000000..fa4c15a57a2e6d0dbde05e314703709f2e9e051b GIT binary patch literal 906 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wiUjzCxH6Ch>g($m7#MPMb0E5dgM%RqGcz*?qp77Hg6iw*>gsAM zD=W&%O6%+EYHMq3VwX7PZgR}s;*`9?rEr@|;dYmzZEj_|+{$*lm+kT{-R@hlE4J-W zV)v2kiuU{|C-bMCESPe#VCu=D>1T>&oGzMirgZkX@_85P>+2dD8=6|`Crp?yckY}e zOBSzPyJqv|&D*wZJ9_l!i4(_9oH%ju;>F9CFJHNGTOWy7}V8 zi`TDTzyA3B&6_uGKK*$6`Nz92KR$f;@afyH&!0bs{_ow%z`&qZ666=mz{JeL&dDzz zA}S^>AuT7bq^zo~ZD?U(X%iL^S37;p{sSj&{rvS(;nN%j1_s6?Z+91l4pvzY1_p+& zo-U3d8WUS5z4SZeAmY~Ta5E$(aLa-PO3Au<8dtW(t=pu`ap}~rfA1ZQE<4@!{PM?k z=AF-~${ha-8>KhpHOiiT$ZmT`OTaDhnJD+7u=uN8QHpkk%K5X_z5KN}-lro`;=KQM zSEH}p-#_iuIbEL86!W}$kcGC>nYF6A!}`_QT%ak}Ti{uLc=+xh)3zr6A>&Sn}%e&=pa!w=WDM=~zo z5wYdB>xZ8V3=DQ9t`Q~9`MJ5Nc_j?aMX8A;sVNHOnI#ztAsML(?w-B@TwEH-nhHh+ z2F40riP@z|3hG&zxw(nS>I%UnshN4HMe4@yBN!MMR6!=CB$lLFC4-G&FfuSQ&^55s zH82Y?w6HQZwK6o*HZZURVeP?Gg@^>bP0l+XkKW;9}G literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/network-transmit.png b/Media/Themes/Umami/Icon/status/network-transmit.png new file mode 100644 index 0000000000000000000000000000000000000000..bf2513307db0b25af9bf5c4175d1afa7ebe74246 GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&X5#!GkW{xC2wrUv+gxH6Ch>g($m7#MPMb0E5dgM%RqGcz*?qp77Hg6iw*>gsAM zD=W&%O6%+EYHMrEJSuErmpJBba?IW0l)S>FaGOivc9)`UZgJgiaXoHjyWGllyO-_q zOzQVcn&6q-?_IjxCw;O{`V`;v$-Wi40@Ef0XHJeSnibo2D6xEQV)v2kiuU}5#rchk z^QWB5pL(*OVR1p@qJqZ71yfEIOg&lDysW5YX;I6vqUmRfW}GgXai+9=MQQuW(%I+A zyH=OayHHTOXwr$(dqeoAiIDX>9iHjF6UcP+! z%9SfuuU@@&?b`M0*KgjudF$5A7cXACe*OCO$M0|6ym|BK$J@7W-+un_?%lh0Uw*uQ z|Ng^=51+pM`uzEG!18Pp1_lPTk|4ie1}0_}c20f)5m7O5328ZbC1q7@Z9@wSOPjEW zxZ3G!_8&NL>*ueR3ZLdMFfcGCdAqwXbg;^LFfcGGc)B=-NJz3C+?#hfK!V{y^6$-a zO&Yz<9&r-vKQJvN&B3E*kE*fr^=--V4Qn|T3VGCXCj7p4+LD2RL95}iDZ}*ZEC;H} zcnosZaWWjA&uDi?iQ!A!^Oe%czqptjuDQfV`8zOpR6R|vTp_~2aAmjiMN!E^FQtC` zJJvnBc^5;XZ8Vcg_yom>d8Q6k^}qS*oDK5hrf!tJ{ZZQd0h6g`$?39-cayiy`u_K% z*uf>K=5JSPc~@;(#j&D%f0u^pZf1cGt|FyBkMG=MYgLn_<~W~CA=O?>iu2&#=!X4m z5tT)o)MN4(cKqNhy-$9bA>3rmFvs`&v(hS; zRJC8*CY`dFQsrT|`d<$yKm2DrzM@!h_GQH|1_lPZ64!_l=ltB<)VvY~=c3falGGH1 z^30M9g^-L?1$R&104^?#WK9Jl0|R3Puf*)qBn9=X%-r0>WOaq$lGMz+)FO4`_Yn*X z45}cLQW8s2t&+jUFc=va8R!~V>Kd4Z7+P2vn_3x~X&V?=85m6aY+;C^AvZrIGp&-r o$iUE0*T78I&^*M@$jZpv%Fq&`;b|O494NbZy85}Sb4q9e06F4}T>t<8 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/network-wireless-encrypted.png b/Media/Themes/Umami/Icon/status/network-wireless-encrypted.png new file mode 100644 index 0000000000000000000000000000000000000000..28fe5ef49659ce5a7251fa41d46b8aa1695cedbf GIT binary patch literal 1309 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 I=akR{07qv8vH$=8 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/software-update-available.png b/Media/Themes/Umami/Icon/status/software-update-available.png new file mode 100644 index 0000000000000000000000000000000000000000..7397eb4c39c7bf5fea339aac3bd80f723b7bf8ce GIT binary patch literal 1363 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWoE2A(dCAs)xiPUH3o4wpE7{%v!+K&w-y zi)+FyuAFm*>1=)q=U7@(ZXTALI!$as-%dxR*{7va?urO{A3dqYGgnzyaC*+o=GLPL zM{FM-Tdb?%5^LuAOz4X5hC8=^FZlcIZqfFsf(s(IrTW&reEEIu=l}EH&w0O1^~wJ) zuPz6_|N8R8v3mCy_agSPRkr62EfADx|9|<>!*fhePrPtf+YvVV;H}T8z4hT9iPwXt z%eeh)x6pIGrr=oCyyoGpgC%8;PRAZ7+spCy{Hltc<;q$q!keyVPO0yG-~Qah@#8zi zXf>XjMmG+As<^jPdCq(NPJtW6PY={@kZU==?V$eh?UiqT7Tx>lqY|^uBP~zntQcFl zI#))3goo(w{441n5B+@Z_`;;|caG!*S&O{;JT<4a9{4Y9Dp{ikMojwZq0LG?_{Q!&$S1(+L&1Wll_0=_(`!(djvrLOaT@Gez&Om}EY^ z>3X0!tKqZLvaXZ2^%~ro!`z%|xJG&YFTSl|K7z-uy(yaYjC;S?TK09O(s%OjFu&W? zT3?iM(S+IXnSFb16z98b#~&=8b%k?xpkbq$=)c|P4-2{1ueq|J{-&KC--|;)Zh9`O&W8S&O?8QtkRn~6S2ubL>!(Fm8iR<0< zjm59F1}FK1s@$=fpduA>@M%%XxAcY9{UWh?p}oeY-VOH_ABlZr__mvA7ZdB*lu6+Q z-$O4tL?5atj@cS@U_IaY)tN4)(>brMR@OcIEMooXWsSG5o=)7MbguaBo|LAI$9&)2 z5@OPOZS*6te9ec=s&enHWHhY2e8AzO&9c9RlbWR*J96BZbxJw(qc%u4@3pOZRrNgW zQ(=Ex+4pPvSQ1t(-kAL8!Krl;@BUm~BEPd^r{TwwKfyyqcl76i=ZP(a; z*YC_DKQq+{Ewxt!N2J%2}(?w?yHi2anRfOPcA{N=m9z zCwZ!D5{TRt>V2vD>y+Q!YeS~1teUD7)8gX&$dR#hQp%zUr+A&kIz%5{oI1t!fpEC@ zBEd-o9rw?z{QqVBiTo=s4rK3$I=7jDfkCyzHKHUXu_V7$iY91m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BgMeLz~JfX=d#Wzp$Pz@ CD`F!6 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/software-update-urgent.png b/Media/Themes/Umami/Icon/status/software-update-urgent.png new file mode 100644 index 0000000000000000000000000000000000000000..a7447fb0b2b30ace5a7433c754caf838454ac765 GIT binary patch literal 1036 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}haFFjoxLp+YZox0awxKQG_{oZ@)o%#<~ z9X~yFS&#+ST8$7^ret=Z3r7#m*dfVgRxa%1I>?iHdbJ z7-KZ^ltndh|Q zy#+J2zRbL~Y`Ni~M3qRn`Aol8GHSlK?zHgPUj6tRv5_Y$Z2H8wOqVbCAJU*{ksUte zVevwN`Dtk!SyGO^k3YZBdG4h6rpw5NHQk@*2VZlQd;7c@^WFW_IHlMe4?Fm&d7e4H zc>DI(_Y*(3GIx!QM-+J}SiRcRP}_rOGD9W$~0CH=x!#l~hL8RAM2@KF+0IQH7crbySaap--2^W~2vTez8c8dHRm4wb$XdOeZj`RdgdOJ%(~{;+U3wyrDQ zw`jkyKl72koeVmZ(<8)?NeW0U2A#!P5U=GdIt+n6Nqq{@am=F)ytFnqnjMR znVa8?jduR}JKE=kwb%!akcAq`e(R^Z=(r`<+Adu+OMFXzUy{7++2c!Bc`eSIRPmW@ z`StFADHGin{1bf8(D=z=K~{C4AR`M?}!vnAycOCr*F<;)~PEABb(xe|}Hph0psp3x54wQTPA++-apD zZ>P_h+8Z1lePe;J2IIbG440}aw2mfy&tZ)@@mPoV{=I{b@01m33pFrJVfJ%a*0Db} zk0U|;2IIDd^$xE#bWAC&4%-vKaKJH*gKv|=YZj@aH~CBbuN@U$Eqa}SfkCyzHKHUX zu_V7$iY91m~xflqVLYGL)B>>t*I;7bhncr0V4t WrO$q6BgMeLz~JfX=d#Wzp$PyO?!0;c literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/stock_attach.png b/Media/Themes/Umami/Icon/status/stock_attach.png new file mode 100644 index 0000000000000000000000000000000000000000..658a093788eb5beb3881c2cf5f60d757d7fef23a GIT binary patch literal 1324 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_l;RPZ!4!kK!)v`4=Rdl;DOPf`PMl7++un#p z5405W0Dly0ix%xU5b_|;&28DvrK$7%77I$qe3>|Ps%vPe>55gEIW>Qb z7d(zCujh^Y8{*J&xccCGuXdis-fLuBaH&DN*Njm+%oDoheY{)j0YrVul1DXIxEQW zW8=+l1{N<|CoP$rH~oeGoRz0;&p3YQkaELqO=cOt-v|Hf`BS#~s8{)U-c_r!I*%vu z@blkg-{&_+u%U15?QKGQ=b3+mWoOJ+p2s)GvS2~)!ikF0rpaBtk?{D^Q|=Y3ez6vu zdAP-&X|}IgaB1GU#@~y-hc|rIWNhF|&YZb(#ex~9!}Ts*+A}}Fpu_&bdzO2vG`7pk zo%QYbv}x1Cb9;S%)Wj_c3MturWaSdoB8#_`O$s%;wr9%Q?v=atbj|UgpIq~#V+|i1 zTK31+{r2s93eL+fU%7VW*|B89cf5CJKRkI{S(D+%rcFuH;{rwY>|@O7^{uF7Zh7XM z-uOK#`nIH`WLl-Fm-F7qK!%8dyLkJ$Z&j5QYc$u# zyWfsAvM)0#&V4w|X;-!Fo7=nR&zvc#rmp_0@%{B(FQX)Db|ky+O#AjwM|kq%Q`^?6 zwm22H9RBQm^QL9rGh5w~?-eJ`ojVw`v-|ZtzlQ!hdV#*81sisJNOf~-XWZwl%o{n) z@CC1B`@NcIYuPzz2^;1=v(>F&|IOL@?A-3yM{CndPenE4I0{6>)UYV{{Wz{V*YEg4 zXZH@5LosjvbWX~>ZTN!s%eSv<7}V!o?#$knsUXz(g13#g<=OK-k4aZPK0YeH&oNYd z%8XC56*$iB&X#V8-v3Rocio&{>Cww39o)IG(_TZ@aM5+?eN3xFT-SvqdC4k7Yprck z@w~IQT%BW%TIbrS2e;STaqOEtb7JK7-ODCEICJIW%FO>CcdQDEN;(p=ZSrgLbqiO$ zI-WOu#}u9o&kht?ynWqJyz})}cdzZ!H)_@!N3ET9!fD3BiMv}4f1bZP_R-0dN9S4A zFl}XgzkKOZS%#!ltL`!S?T&qPHRQ--MivF_hcj2lOfTSFz+|Mr7&z}tlW2lu1WVG& zGbz50)?N}m^s=*7rsHGE18vR=m$%MpdRL!Z&)hw2*0jn_>p}(w2GtVRh?11Vl2ohY zqSVBaR0bmhBLiInOI-uA5JL+qV^b?bGi?I{D+7aRpDhegH00)|WTsUz7#SEE>Kd5o z8k&a~8d({cTNzqHG(3&th+|-2kObKfoS#-wo>-L1P+nfHmzkGcoSayYs+V7sKKq@G R6axbTgQu&X%Q~loCIDeOSG)iK literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/stock_dialog-error.png b/Media/Themes/Umami/Icon/status/stock_dialog-error.png new file mode 100644 index 0000000000000000000000000000000000000000..f01f85e2f3d3c2a4300681edf5eb5eb3892a985e GIT binary patch literal 1075 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 sGSey| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?mYyz-As)xiPPv~QohotM{(N=a6BS!^ z->Pj}J$K!@aQWI=?m+3xE@u5*qOA?{X3lmjS7u&lzFVN`VT#|)vlsRs$X?Hqd9X^E zC-H?VcamD!sST&twr&u$in+WrdfMZomnNLa%YCC)^Wfp0J^b&#f3|sF{o~Mo&6*3h zY!}}Wkhf>c7N5H7>EQ##tUnUu8{fyBe413Nth|!v&xaUBsWUFWe`hmKbJd#|uq?Ce z=Z9-@=ilAhTkVokW;A{ClUt@5(_enE$<0oE>ML&dm$#|bH{n1l^UD%}ebwTBe-wt; z`JdWWcI?%_u9Q|BWx;-ei+W=snegz zbiA;s#7g$h#w{X$o>U$@)G2(BeZy1d@Y}+BSmM9)^JyiQPW^Cm^NI|S+uI6d*sor6 ztjOx>E1J14!bkE$VKjsMrhb!Lh3X$0#6q+pf`b`uZ0pUv-NEtDIK5)WzH>Kz?66b$ zG>^Zwnk^;qoV47vEmK7gJwK<|*4XjDg70F6h@c~P>xSjaFXrD*J5ah+pk|wT1ONJk zuU9VaY?6W5~(NOPZxNEmcvegCjb8UBUZLsq3<%-d+!SdCk?szLZJ+UO-!6!ixuv zTS|7h?ulA!WN7HPF(Ri!dufM{pOcB#vhCrThdq9M_|?ZCufiNJBQ0sTqf)p!ZJDdb z_0p=Usu%Cx<-N(h{`mR%;Jt;-7cT}HGsl}Te_2*)m@@0)zX%@XnMWjKYVJ73dR#Ak z_WXHt%XZ^Q=QrQG+WLIgpPWd;{Xv!KV*9cxo4Gfb%{sel?^C0LpNv?}f7u|bY+`dJ zD_#A*zTUl`EPPx26p}hp9c}uaRd#qh{+Igu_MY!YqBL7s7`OKFW)!_-doW#LM%|VT zA9k`&+!meRm3kv0tLWzPohzBFUT1!mkYehoTFYj`vaP}QLH+|i>m9F*-|mXr{z`Jy z@+(K>O&C}Go>>+Dk>C08fvyAneg+H-45}rr5hW>!C8<`)MX8A;sSHL2Mh3bDmbwOJ zA%+%K#->(=X4(b@Rt5&sK3f=~Xvob^$xN$cFfuSS)HN{EH8c+~G_o=>w=%SZXm}dO S5y!y5z~JfX=d#Wzp$Py%blIH% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/stock_open.png b/Media/Themes/Umami/Icon/status/stock_open.png new file mode 100644 index 0000000000000000000000000000000000000000..def61fe71f94ef2eb82d10d3159a4ff1e5e69707 GIT binary patch literal 1073 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_e4Z|jAs)xCPTiZG5-M__{`tAtGgXrB zNQy}>Zk7Lk$Vp0Y%^zkT%ccayX_`SxX1RID3MgqT+q7|8Idf#kjT1t#n;*29&JO*& z^<+xgy*<_MEyeWnzxkfgF}zXn;LyW;)#u;W?Bo7lKG7*MB4WjvvuDrxS>4DnJ8w0& z@1DelJ$wFa?%2b6Ba}U~^!%B3Yu2opbBANYmMtl7%VtX`r?q9hTQgHpDJM6Vx2&wp z>TFu^)|`a$a`A?*U%!57Z8&<=HFx{%P20D-b1;UwhPpSXc;2{kN2cO^_EA}5ZR?F2 zckTLhFV!JP!_X}_lv7b4S%!IrWaKnMdwcu4Sz9wqq^@L{y0AQ#S#|2xty{apT@9F8 z9_X_8_Z0F3w6zGl_*&KRq|y4h+XS7{OD?}und_$>!+FA}|9fSY8e`X#4i2TJRgdOq zXNhgwzI}PaXHG#D?LGT>G!&AL?ryMnUT{t@xyN&o58DxmwJ~=V_AiNZmksS(!0<%V zXpXUw_nRHRZoMwI`)kFR@ul+H-(T)8BUn-oZ2$f`WL2rl0iE~+5uV*I<|W1F@3&v8 z_I;TvPjiXZKh8adOcnFRcQSl2`tjy*`3j5nslO$e8F${$l$o&S<#LvXYs{B?zIykW zsHWCd^`A%Mzwf?2>xR>-Q1=gv>hB789_*F(E$rzMUTDq1v$-PoabWMkfEV+=3*Oi- z)7U0pU_5W>p*KFgc~TNTUNhDh`2C)D%{%m;#k+;e`u__$GX8jd=i)BY!zU}zgZ{_mm-xb+mBf-qDYF72{(-%eZ_uYMz^Pn^9$BLE}E~bm5vfM%f zOrKPKT^Z7{kpIuWFB(?7_hZ-u7H=wkA#p@&`)uPg*IKVgKG3_?eU$Uhw(>=6_WwRS zZSOzT;NtS;;AA`L{`h5utB?8f&ktC6;>PQMc~3uG5RLkB>fpnd7s~tXH1~-%RPDe2 z|J}R4&HPTuYL>QEkH6g78{9Et=Fi9N-|gzRd^~FRGb3W+L9Gv3A5J~p^4B}?0nZKA zpbEPMOd)zbr+sy%Z(7=re(3V=`KRy8t~a)Pzrf%D0|SFRdP{kVo554 zk%5tcu7Rblfmw*5g_W_Xm7$rofq|8Q!L-j7hA0|x^HVa@DjAFn3=MS+%ybRSLkx|q zjLfYJEg>47#&N_kFfd4hYzWRzD=AMbN@XZ7FW1Y=%Pvk%EJ)SMFG`>N&PIxXfq}u( L)z4*}Q$iB}1@qhs literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/stock_trash_full.png b/Media/Themes/Umami/Icon/status/stock_trash_full.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b9cd3b5498f66c6a0caa0481b70399a2036e91 GIT binary patch literal 1589 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWpvLY^*;As)xKPR+~-2^BeBpFg+K`0`#6 zMbV9|T&{x7A_Ag;jt-rMZ03)|lYLB7vL3nb|9SVw5sAl5o$>)ezC7L?-aUn?ivpQt z4}?uvtDC!A*6OoW{?6{o_1#InJo0-^p56U^Pxbl#|IYuM|M@|^+%bDzYq?5|jeGaL zT6WbxZdb^&FDviczqtAPV)Ett_jaeA-K8F5?!57PhKX626~mr8o4+rP|0kUAn{WHw z;`R0mQeXG34$DnAz3uIu-{)rY@W?IHyM8dmpe5jO${W3TcfZcnoE za_`Z`lKGjDH?}zow4IrK{n#Pa(}j1Z#>mKc-8(z+(#u%I`Tw~tzDwC}TKhZfu))0z zJyXB^D&2nR>P^n5$%S*SB$k((=YD>E`OcL?o8G;i7$w}Q7~~}-J$vPp(|2|zD$h2{ zRpVJ=Xz(CEZevnuz#H3tduJ|+cz4;iHTPVs^!sJiH;b~iMp@9wa?hiD0hXo)5%YCQRD^XG+M-ri*9Tbow;T|1Gw{+r3aYc~aU<~^JF>zCQ*3k#dy z-2VPibmfxG#hlsK)*aoHyD6@3_xqcNP6{6{+_aZ>Gegj+JA0$A8Sh_fy)<8vtxD~G z)bb#ME&I+aTb?_=rm7?9z2UUd^$J}|C6BIb zdUA$myg{Tei)lvQjYGNH^Pe1-=PQ19M}Erb&B(iPm1(>v{-cXvyM#g zBMZ)Lo@&{TIHd)(x0D&42;#13it4>6*t~5TA7A}9H?2HVU^36<(bnkR{^JsWGWjos?VmYj8wF&;BL zC6gn?5+k~ogcLiAxPEdHaJjU}wp+mG@=+7pTkCi6UOrRw>df>X|11_Stz&DiW6phe z!}8GzCmH{f#)Hu}uYdO9h@D}E050*Owglw-L{9BzV2$4rv`+|oF_R4MRLgiC^j z$u<3y9VKmTO^4>oxUaGhby@VQ%f2z>|1k$cqqu!bF1M_fSgDd|bFSc}gs-pn$}q2% zgO+03*B>^B+4IK6MMpy7P5LT_QmfkiS=uM}8%*e#ayr#`V&5btO&6)I4Mq)<*fw$) z`iLJttDNkp^xXcOyduZnFW)@>Jho8iTe{kGsU<^@;iKP;@6b>KU2fRkFk5%?SPm0Ynj;2A7B5ba{qHx z&D7?3mX)l|ny;VaAAPa*B@^Gzblz)uB^N9`^tw&lbF<&&Hw-Zhj3N*+OM-M z`_3^iFsPQeMwFx^mZVxG7o{eaq%s&87#ZjqSn3*>g&0~`8Jk)enrRytSQ!{h`)px| zq9HdwB{Qv(!N|bSP}jgr*U&t~(8$Wj+{(}rqTy*AM;rqKgCxj?;QX|b^2DN4hVt@q iz0ADq;^f4FRK5J7^x5xhq!<_&7(8A5T-G@yGywn|Ue9s> literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/stock_volume-0.png b/Media/Themes/Umami/Icon/status/stock_volume-0.png new file mode 100644 index 0000000000000000000000000000000000000000..35ff977672b2dde8788a5b8ce67ce8ddd8a05dcf GIT binary patch literal 888 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{3PZ!4!kK=DAJ9>u%iX5*mzbE~?*NAIo zP~YTQrs%J%QQLzrPZ4v{<2K|~+8`K}B9N$Sk`;W-$$hEowz5c$MR`1$!cLA#+{e@A zRKKs@?wWrrQ1f|Yx7go@1?OwO%hi4V!_WWkwLs+3xIOkI`5#j5cCIw;?TzN;7@7`Bj`whKCaqzaKoTD4tMT`}S!?mQAqS+5-szb?S~=jxRbd9iQ~F?-uIFst);C3 z<;@I7_SyWeI(@%eX#=;0y}eMv|L>1B*R=niSH}>(oZV~Z|Nf~A3=FCzt`Q|Ei6yC4 z$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP z(={{?F*LF=GPg3cglKpg#}UWCz#s{-Aviy+q&%@Gm7%=6TrV>(yEr+qAXP8FD1G)j S8z}|`1_n=8KbLh*2~7Y#qGc`s literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/stock_volume-max.png b/Media/Themes/Umami/Icon/status/stock_volume-max.png new file mode 100644 index 0000000000000000000000000000000000000000..79c5401ad35c0a75cf6d7255864d350ae09ac187 GIT binary patch literal 1161 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tIdPZ!4!kK=Er`ufC#iX5+hzSo>@3d6LZ zq@@w!@1&xm74ou@N>=J^X-!g(ozQe^$*fgdCeE5L{e_b+kE1y2#UozFIfA8pyQF(J zy=wQ_Fhj!U>NFR{%n%dVlo`M6`nrE6a5*oD-T6Vq{QaHk^LzLI-v58L%@6y3s&BrE zefzfe@3U#U-&^f2KHeuC9DLt*P5Iod^OUZanpYg#bLZ=&ji(%%uX|rLv9JDh@mM;W z(stGvGk>mRK6r1})~-n+uBqk8`ivV&>4$t8d-oEB5`l^E_Ggd;XuV`{G_oSWSOp|HCyn z{g12nm&0#$m3!~2N1fGTT_sgm9drC`p{znsc=+|YM^oQ*&6;&S2zeqD6cyE-rE!lwFs(*oHAn>KCQ@Gau{$1Y#f*&k}_x2~M~QO`T|#ieR?wb|C~ z$EMp>V0f6W$IK>hJDW)n@%<|I88n7 z`b5cL!NIa4vzP=Xs<}>THQyk#VMbhv;oM{2YmFqE4cQ(`ihS6cy4f`~C+YOmjqP{W z%Lcyo^xiq)YlE8TUdag(a(}rs*iWPwRm?m1z4qK3&p)zlr=LkBf08pcl-S+#x{bSd zv%ARLxe`6KmH!|9a0`(yayhp?Xo7@XER)5}dZUWxclR+Q#m z`{&8T^Vx9>{!IU_tBRxU-s7h{rw#O+o_8*t+V*Dk)~4qyxAebkTjtHEQXVUIv%V$x${%g}n78-0W`FgvH#ZOh%xtJMfrc1LqWPJHg4|NK`F3m=32^!s87 zPb)sg#67In|Hrs&U43*+|APw*3=FCzt`Q|Ei6yC4$wjG&C8-QX21W+D29~-8W+8?a zR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg3cglKpg#}UWC yz#s{-Aviy+q&%@Gm7%=6TrV>(yEr+qAXP8FD1G)j8z}|`1_n=8KbLh*2~7YVC<2WD literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/stock_volume-med.png b/Media/Themes/Umami/Icon/status/stock_volume-med.png new file mode 100644 index 0000000000000000000000000000000000000000..1a559245ec2be43dd6bf0a9092aabfca49d20c6e GIT binary patch literal 1008 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q|Ho-U3d9>?EK_Ra_impER3f3Nw>&csD- zyjLxHxyzk4X}sGtVcp$`t!~a@O_3biM5K?hw{X8*q${#fucj<9SiG=DL*?$43vX&v zT8{X7t&qCF;?ncz$jmd9cP_V)VbruA$yr~<@5G`{=cvKVe_;J@h^`BFR%ZV z__wWp-F6f6{W7w9%_Ck~uAk(aD6#H>SMBA>A0DTye%~#U31OKrWY8&zMoDp<`LhktRY)-ahG>z2ZKxC6QRx{KX>h#`g{MsSEpy~yZ`%s z)j{=s^ZApQ@76j`zx6-jQe*Kttv6iF8?<>ER<*UY{Z;RiUB7mH{B94vJE<=F{(gBd z^=hi@n|qs!RX?yOO!YdeEBDeSYWK1_-eWWV%iOtDxb$-IrP}9*_B~uHdzX20lpTAW z=5vPz7Kh~IS;vlc=YccUWgHD;x2fk326VE>te|#-Io$*Id`{y_&mbwjEU3W@S8*1h$ zaCoRqE@oJ4Y7t<_p-{9b)+LWQB7M8Uy%*8@8(W2U*7U{L^&7T1IWC;yl-bJMGf#h; z#Y_1Z`+NI!|7Z(5fBQjZ`zab}M@5d;`Yu~;o^yA5w%XsqUpuZzJ(oEh__F`m(X;&rLmh-x$o>C)(DHzv{d_l< zE4vwD?kw67d4PfS01rQZdaOw7yS?)al|DT#V%Vghx9?v6@gSyc4SkQxnRMpp$7);s z`TsIL$j)Y|%R%-m1_lPz64!{5l*E!$tK_28#FA77BLgD?T?0#91G5lA3oBz&D?>AF z0|P4qgK3{F3{f=X=BH$)RWcYE7#ivtnCTjthZq`J8JSxdT0%5DjpK-8U|^60*$|wc rR#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR&0|SGntDnm{r-UW|1^BT4 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/stock_volume-min.png b/Media/Themes/Umami/Icon/status/stock_volume-min.png new file mode 100644 index 0000000000000000000000000000000000000000..35ff977672b2dde8788a5b8ce67ce8ddd8a05dcf GIT binary patch literal 888 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{3PZ!4!kK=DAJ9>u%iX5*mzbE~?*NAIo zP~YTQrs%J%QQLzrPZ4v{<2K|~+8`K}B9N$Sk`;W-$$hEowz5c$MR`1$!cLA#+{e@A zRKKs@?wWrrQ1f|Yx7go@1?OwO%hi4V!_WWkwLs+3xIOkI`5#j5cCIw;?TzN;7@7`Bj`whKCaqzaKoTD4tMT`}S!?mQAqS+5-szb?S~=jxRbd9iQ~F?-uIFst);C3 z<;@I7_SyWeI(@%eX#=;0y}eMv|L>1B*R=niSH}>(oZV~Z|Nf~A3=FCzt`Q|Ei6yC4 z$wjG&C8-QX21W+D29~-8W+8?aR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP z(={{?F*LF=GPg3cglKpg#}UWCz#s{-Aviy+q&%@Gm7%=6TrV>(yEr+qAXP8FD1G)j S8z}|`1_n=8KbLh*2~7Y#qGc`s literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/stock_volume-mute.png b/Media/Themes/Umami/Icon/status/stock_volume-mute.png new file mode 100644 index 0000000000000000000000000000000000000000..a3c319b2b4cb426dae0340f109af26e77793909c GIT binary patch literal 1044 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_q{&o-U3d9>?EK_4N_)6gggRdin4d24j`m zMi)h=r8ZYzSn=@P-DdZr{T=L&tM2qBUOcU4p(a@n_Ek@h?wdWO%aEVOib`%76V3yZFMHJ(f3OGB@(|M!0HsV9=~pStbix&K61O&OOh>)Nl-v2DwiN0s~j zx-zo!%l=RnTW>AgdrjtSYFevx_4oG^oj4dD{NC4j{PFdmmCFtvulsHK@xjHzTbX+d zHwLTwGhUefQhBbQ{5#8QmlJN!7nypsVO{O+*$t8nDMpd9HutI*9sGIDF?+8WgF=JF zfn&XEuO56>de&p9hVB%DV+u=I&OC4DcyRTLedzzES5z3hPCi&^7wvfURQJX(RJheNlSw?wU+i|tX2M5^RM>$zPrWS-`}yi^(}e! z+9gUliudmMJ?@k3sF-thr;LR2<#n+UFHO#z+2F&N(A(Enm7JU$r#IdBXN{b~L|K`W ze||sv%6k8MpjYA0PRX#_#{{O%0-n@^a(bj?0uH2!tA$9p>mtf61NfTYt)$C?;0t5$dfEQ`Nu$FRfEJ}mN^A1HsR zmbgZgq$HN4S|t~yCYGc!7#SED=o(n+8kmI`T38vIS{a&Y8yHv_7)<+YVaUM1fY6Ye zpOTqY$zWt)XsByorfX;(VrXP#WNu|>3DNL0jw6nNfk6^vLvVgtNqJ&XDnogBxn5>o ec5!lIL8@MUQTpt6Hc|`>3=E#GelF{r5}E*p+Qe-D literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/stock_volume.png b/Media/Themes/Umami/Icon/status/stock_volume.png new file mode 100644 index 0000000000000000000000000000000000000000..79c5401ad35c0a75cf6d7255864d350ae09ac187 GIT binary patch literal 1161 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJFnEBm+sSM@1_tIdPZ!4!kK=Er`ufC#iX5+hzSo>@3d6LZ zq@@w!@1&xm74ou@N>=J^X-!g(ozQe^$*fgdCeE5L{e_b+kE1y2#UozFIfA8pyQF(J zy=wQ_Fhj!U>NFR{%n%dVlo`M6`nrE6a5*oD-T6Vq{QaHk^LzLI-v58L%@6y3s&BrE zefzfe@3U#U-&^f2KHeuC9DLt*P5Iod^OUZanpYg#bLZ=&ji(%%uX|rLv9JDh@mM;W z(stGvGk>mRK6r1})~-n+uBqk8`ivV&>4$t8d-oEB5`l^E_Ggd;XuV`{G_oSWSOp|HCyn z{g12nm&0#$m3!~2N1fGTT_sgm9drC`p{znsc=+|YM^oQ*&6;&S2zeqD6cyE-rE!lwFs(*oHAn>KCQ@Gau{$1Y#f*&k}_x2~M~QO`T|#ieR?wb|C~ z$EMp>V0f6W$IK>hJDW)n@%<|I88n7 z`b5cL!NIa4vzP=Xs<}>THQyk#VMbhv;oM{2YmFqE4cQ(`ihS6cy4f`~C+YOmjqP{W z%Lcyo^xiq)YlE8TUdag(a(}rs*iWPwRm?m1z4qK3&p)zlr=LkBf08pcl-S+#x{bSd zv%ARLxe`6KmH!|9a0`(yayhp?Xo7@XER)5}dZUWxclR+Q#m z`{&8T^Vx9>{!IU_tBRxU-s7h{rw#O+o_8*t+V*Dk)~4qyxAebkTjtHEQXVUIv%V$x${%g}n78-0W`FgvH#ZOh%xtJMfrc1LqWPJHg4|NK`F3m=32^!s87 zPb)sg#67In|Hrs&U43*+|APw*3=FCzt`Q|Ei6yC4$wjG&C8-QX21W+D29~-8W+8?a zR>r1QhGyCZ237_J(>_}mqG-s?PsvQHWH2%?G}JXP(={{?F*LF=GPg3cglKpg#}UWC yz#s{-Aviy+q&%@Gm7%=6TrV>(yEr+qAXP8FD1G)j8z}|`1_n=8KbLh*2~7YVC<2WD literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/stock_weather-cloudy.png b/Media/Themes/Umami/Icon/status/stock_weather-cloudy.png new file mode 100644 index 0000000000000000000000000000000000000000..2b13588588584e47cc3ea9e2346e986734972d84 GIT binary patch literal 1078 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&j9Muu5)Bp4VNcLw-`xH2#>bab^gG&FQ{wPK*Qj;_|OuGY?O5Tm23wY#^Yv%9UU zr>(oUqo=R4ySJmex1+149n9$L>Fw<90f|7Ab@#M)cDHqcWqbR(x_a7Ity(^J{_N!| zmabg2eAVg|bLY+8zGK_G1+%+*JGO4yvTy&Mt=l%OSh;NL_ARGRpFDl$6v)P&j=l-q z{S$inC-zL5(m#3XgvnDUPMJD!+Vsiu7tC3@Z1J+?i&w8%v3bkJty?#5+rD|{uI)Q_ z?bx+v=idE$4jkNf;NboPhxQ*na_GpBgGY`YI)41fiIc}pojQK%^hvN4C(oQYb@tqu zbLY>TJAd~4`Lh=;oxgbL!lla>E?>TQ<;tZiS1(_^cKPbHE7z`HxqkiX^&8i2-nwz? z_RZV3Z{E3c`_A3lckkZ4d+*M@`*-i%zjy!sz55UDJ$P{c!NdCx9zJ;V=;5Qs4GI1({dHrKW7Z^6XfJ)HU&}fer!Hgp z`SWLGm(p$>Gh;&=8^t61DvEql6T%sHozXYYIdEKDXC0R@*Bc`if#*rf(o&ciJlZ3l z9Gfv~F9QREY>8_`iF1B#Zfaf$gL6@8Vo7R>LV0FMhC)b2s)D14T?4ZaLklZoQ!7I=Z36=<1A}RwEeugK| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?*F0SuLp+W@o$Q@4CsgEk{r9@hr;>$c z`&>R~6ZM99DgTvU9?Er-+oHB6ICCvsq$F}_Dp%f=rWcC>bk;Tnls`H&m3yM6Q*V>V zn+TJY(>C@eyxk&nX_>E&(c6?sGxO8l9d`BdechsBeQ@)x=l6>L{r_#x|090pt3v*j zao;aLeR3kz&|_EQ^^iNUMfdhIh2D7^Qdpin^LLnxpqd8jg}`UE&0V`=y#qg3f9QVI z{ddWub=LZy7*;!px-=)s@SS0-J)oSUw+3CvzuqBY|x^S-;wZ@oMIX{zp=XSJV}%{?x)+U4EOUYBh- zQ$klC;B1{-yECHpF)eddYhtZU@HsdGzChdngx;GC{+my-@_pYNC^uCPVu3rkpU zgB)`-Q)J`LU$T#$seX9F8vlHyu6Nd_*k>7UxF#M~-0^8$gyNrKcjGo)9;K*jNzPlv zlKu5siv2s^_1rI$xtM$LcghaVGZqinXV3p_$+c$QXKziHWS0p$|4w^VoPDw8*=w&q zG1DHLW7_K#;I-(Wft5l5(~U=}Ej&qUnTn;)@LYTLjN^<-$kjyFz6ygcR>?>AuDU+= z=qJl*`Zckgr~hkgSTga+#cfily}CYDH*8)6uKCE!<|F1atMjBzdV7{9@AeI9vz`W8 zI&OaKDZ|sn#ZnrPb=oZQ=-n`tyJjLc_2<_)M_Kk5Y-eoVT3NJNa^IVH=jt5xs}H4) z9m^|7`(R=n{^!TvR}Y@JAMlJ1cha|WwcYr*?CUo3r@z!s`tVNpv31gFWyi29A{DDj z`7dTD@4Tb4Gp0{^@pa4DHq~b(g7uf$EZkc6{K4+`y*hi?84eve@W23id5Y{@wTN*|M~A^Z)1Oe~J-GxZjk#>e0GxW%;CF z(VN=NOa8SyTPDWT$dJ1>x8-o+l%R~<73;ey(V~EP73kqwtR`Np1YN;tJ>s5wb`kE zck%W;wm5!DXvL1*qPg2AUcSF5M`vp8ij1tBq_ncOkDZ0fE(QCfFaO9TH}AQjRaNhq zlD65&<{tNFF)gqQ((f_U*S*rL_8{^8yCbO$$@1@iy?S)v=--LIswSRHF}Nnc!)kae zNK5RbNVmeXG}nkmvsqu(ZkZbNZMy1*Qq`*GzoTCBvz_Pp(Q{FsnNiG8vqdPVZtYgP z9T9JA%bvVQTv>JZ@v7stTO#gkYWV;8o4E+X9^Fez`VTWOFvym;MwB?`=jNv7l`uFL zr6!i7rYMwWmSiY|WTYy%d-?{vPf^WdU|>)MDNIQ$NwrD_t70%RFf!0Ju+%j$3o*2? zGB&j`G}AUPure^1_SwP^MMG|WN@iLmgOP!up{{|MuAzB|p^=r5xs{8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&j9Muu5)Bp4VNPXzdcxH2#>bab^sP-k~rcW*~eUuREWXK#O3M^|fScUxCaJA?}n z@9FF8o6y}ip}T)#Pv3;@36uIJPVVdKY47gs==DEg#L*=n>KG)y>`XM&Fg#n zyCzKPoiM3){f0H`HmupQb<@^un@^uPb>=J>ojY~*-08FD&YU}c=J1gNM~)ska_rF2 zV+W5OJ9O;$;bSKb9Y1mS_{pOuP98mV`uM5SCr+I?e){Z*vk+b9PoFz~^1`Ka7cZT? zbmjczE9b9Vy?FKdrJFae-n@17=B;bD?p(ih_r~oz*KgmwdHe3IJ9ls1y?^W8gFE-{ z-?{(b&i#jX??1fv;L*K@kMBKva_`ZT`;VVIc>MIiBA>aA3b^Y=;`yv z&t5!!_TtI27f+u*fBO98ljkp=zIgfU#j9s8Uq5^K`uWS(FJ8TQ@%rt{*Kc3FdHd?^ zyVq~uy?OiY?YsAH-oJnM{=>WXAKt(J`0m5U_a8of`0(ldhtKane*Ez9)BBH~K79QA z;nU|2pT2zj{N?kPub;ns{qp_$x9>l`egEJ^*Uw)d^y}B}U%x@< z_n$w%|NQ;)_wS$o|Nkp2QC-Erz@T3eQHkBS()NKY8lo zr_Z0ieEIU_>(_7JzJLGmLxI(eGd(?loXv?l@EwBNp8cQrUA-9=D5FgIJT=cH%u+!cB)I)|5Cn<@BA zbmB|77(?Gy(UUbtw^ig<8_#}W@c+oElU^LvJ4(H3*ZT72DCy2E+8kZ7^P$k8r-6NH zzqT#pWL)?0rDN)$0?w0s{M^dy>C-=?cx#`ZQ|Gy(#ie|~(v=HcGs@P*dt~HnXNhsz zu)^xh*&8<2`sU{5s@uH;^bRh)I$ccW`Q(sEv#(FNy7p{q!MZm`ex2#Mw{P35Z+p5p zjXVw>QnKG_RDbG=W-M!I@Y5L+n_V0h<~w;OCp({4(X6|2AZg+?jrT9~u1!fzbKx)Z zt1B$D^HZyGGi7)Yc8tNLD=^C1c7#dj_nOhlJLNq*$bP0l+XkKkkVXc literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/stock_weather-night-few-clouds.png b/Media/Themes/Umami/Icon/status/stock_weather-night-few-clouds.png new file mode 100644 index 0000000000000000000000000000000000000000..bb3f5c1429288daab75290c317bc7afb57168da4 GIT binary patch literal 1269 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?=R92;Lp+YZopRbgCRFD5{^xUcmdllg z%wTMD@=4G#O;QlJbYu&YvmtAy$+3)8-r~o$UhGj(xyC!O;h6n_souSYcEZB5qI4H5 zWvZR!EE{3yPn&g|6OBYS@heU^Vl)>mCG_ckKLI0?%h0xJwFY4CNQoP zv3MR4w{PjW|G&7yy=q@n-dle7q~O;JO&dQ3u6q5eBsjSEc{j6joj=Epb-b627QU|Y z@PDxJ`22=-uV>8pb2Bm~YEG%l@^TAHrE=j5bEWO(zyGVO>tD{tJMWV?SM-TzMmNr+ zDJ*RW5;~eBH}i~@&+49ojf%GSWZozB?A;#Dv~BaVo{jqc`~SHq%szeKiP)#;$|>Hi zH_Y4(Bv?}IILSFJEg)%Ra^A-DjC{X}i$g+PZU=T62`ApFQ+U zlw+ZSXk!qU^h*<;%{;!B6Rc&n9lm(??ql_qJ(UTaCcfTB9{XRM6xotFOJH7ufY8AN z22<0m3#KSW3A3j1^u2ZP>O6af?U8T$%yq9jnOWyO-^$9w7@{M*C#W$S> zt_eX3B1Q?3VqxL$7e;6(q)2eIIte(Hyi@z|HbUEp!{jc%m*x_s4O(V3eeDr{6@UC? z%vo|dB5GG_NEYwLT@v#$b6u;WMHx;ov-WJ%UKUwrC)C*##C2ImdA>eFi-H8tflWGR z;&!#%o5#{Kq48@8mw5Vrhb3A}PA3jE2A3?_uOAm1Tf1lDN6%Ng%rq7z^gQ~tHG9Uq zna5tevi(w`F3{7P?eFIzLr8&3rq$F%AxBPG2*PX6@KKJb`2hFcXTUXw{mz)3E z!0Dg?$HE;3wyo>dEncy@JMrNsn?nx`Vy?G7ws^3INubH)J?Eth7f!5;+gp@X_t2mF zz{}X#HgjZlzO^_vGk^d8V@6JiGnTbpxh2JS)!gB_iA?o7i9>D@^IkhuFm2sxShA&j z!OoSE+s+0G_X;tr@9XV1d$0Aw{Ahal`+v6IAN${r{QSAN;^)%v0}{>4Uf%d;7E>_0 z`L>LkMhn+^h1qvq7EW+q8RO)ATJV^}>>I%bb7UsYd#;+Nckj=Ob8}O#9Dfz4CBAW< zpW^JhE*nEwp39g$kBE$P+!*1KW!rk^+BfAs7bO=j%PrSu*iB%VG2=(dn*Yb*ult9E zhEA@j;|}s-VP^DLny{Ns=6L0YSRq%1B@TMir%t&f|4sCcyT`|KXWn0y=T?kkUhpu% z=GcwvP96MmkKQS7`^kRy`$d&=6>i!L3=Fa*t`Q~9`MJ5Nc_j?aMX8A;sVNHOnI#zt zAsML(?w-B@?^9Is7#J8-K?+k6OH!?p!KxUH42%qP4J>sH%t8z;tc*>q49&C+46F3DNL0jw6nNfq}u()z4*}Q$iB} D+QcLb literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/stock_weather-showers.png b/Media/Themes/Umami/Icon/status/stock_weather-showers.png new file mode 100644 index 0000000000000000000000000000000000000000..d1fc77e6b61be2774153e5ba5826204bc2bd4f98 GIT binary patch literal 1527 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/user-trash-full.png b/Media/Themes/Umami/Icon/status/user-trash-full.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b9cd3b5498f66c6a0caa0481b70399a2036e91 GIT binary patch literal 1589 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7l!{JxM1({$qWpvLY^*;As)xKPR+~-2^BeBpFg+K`0`#6 zMbV9|T&{x7A_Ag;jt-rMZ03)|lYLB7vL3nb|9SVw5sAl5o$>)ezC7L?-aUn?ivpQt z4}?uvtDC!A*6OoW{?6{o_1#InJo0-^p56U^Pxbl#|IYuM|M@|^+%bDzYq?5|jeGaL zT6WbxZdb^&FDviczqtAPV)Ett_jaeA-K8F5?!57PhKX626~mr8o4+rP|0kUAn{WHw z;`R0mQeXG34$DnAz3uIu-{)rY@W?IHyM8dmpe5jO${W3TcfZcnoE za_`Z`lKGjDH?}zow4IrK{n#Pa(}j1Z#>mKc-8(z+(#u%I`Tw~tzDwC}TKhZfu))0z zJyXB^D&2nR>P^n5$%S*SB$k((=YD>E`OcL?o8G;i7$w}Q7~~}-J$vPp(|2|zD$h2{ zRpVJ=Xz(CEZevnuz#H3tduJ|+cz4;iHTPVs^!sJiH;b~iMp@9wa?hiD0hXo)5%YCQRD^XG+M-ri*9Tbow;T|1Gw{+r3aYc~aU<~^JF>zCQ*3k#dy z-2VPibmfxG#hlsK)*aoHyD6@3_xqcNP6{6{+_aZ>Gegj+JA0$A8Sh_fy)<8vtxD~G z)bb#ME&I+aTb?_=rm7?9z2UUd^$J}|C6BIb zdUA$myg{Tei)lvQjYGNH^Pe1-=PQ19M}Erb&B(iPm1(>v{-cXvyM#g zBMZ)Lo@&{TIHd)(x0D&42;#13it4>6*t~5TA7A}9H?2HVU^36<(bnkR{^JsWGWjos?VmYj8wF&;BL zC6gn?5+k~ogcLiAxPEdHaJjU}wp+mG@=+7pTkCi6UOrRw>df>X|11_Stz&DiW6phe z!}8GzCmH{f#)Hu}uYdO9h@D}E050*Owglw-L{9BzV2$4rv`+|oF_R4MRLgiC^j z$u<3y9VKmTO^4>oxUaGhby@VQ%f2z>|1k$cqqu!bF1M_fSgDd|bFSc}gs-pn$}q2% zgO+03*B>^B+4IK6MMpy7P5LT_QmfkiS=uM}8%*e#ayr#`V&5btO&6)I4Mq)<*fw$) z`iLJttDNkp^xXcOyduZnFW)@>Jho8iTe{kGsU<^@;iKP;@6b>KU2fRkFk5%?SPm0Ynj;2A7B5ba{qHx z&D7?3mX)l|ny;VaAAPa*B@^Gzblz)uB^N9`^tw&lbF<&&Hw-Zhj3N*+OM-M z`_3^iFsPQeMwFx^mZVxG7o{eaq%s&87#ZjqSn3*>g&0~`8Jk)enrRytSQ!{h`)px| zq9HdwB{Qv(!N|bSP}jgr*U&t~(8$Wj+{(}rqTy*AM;rqKgCxj?;QX|b^2DN4hVt@q iz0ADq;^f4FRK5J7^x5xhq!<_&7(8A5T-G@yGywn|Ue9s> literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/weather-clear-night.png b/Media/Themes/Umami/Icon/status/weather-clear-night.png new file mode 100644 index 0000000000000000000000000000000000000000..e7595f7c1e0fd9d471428bce71ffc22c62e1b327 GIT binary patch literal 1079 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&j9Muu5)Bp4VNPXzdcxH2#>bab^sP-k~rcW*~eUuREWXK#O3M^|fScUxCaJA?}n z@9FF8o6y}ip}T)#Pv3;@36uIJPVVdKY47gs==DEg#L*=n>KG)y>`XM&Fg#n zyCzKPoiM3){f0H`HmupQb<@^un@^uPb>=J>ojY~*-08FD&YU}c=J1gNM~)ska_rF2 zV+W5OJ9O;$;bSKb9Y1mS_{pOuP98mV`uM5SCr+I?e){Z*vk+b9PoFz~^1`Ka7cZT? zbmjczE9b9Vy?FKdrJFae-n@17=B;bD?p(ih_r~oz*KgmwdHe3IJ9ls1y?^W8gFE-{ z-?{(b&i#jX??1fv;L*K@kMBKva_`ZT`;VVIc>MIiBA>aA3b^Y=;`yv z&t5!!_TtI27f+u*fBO98ljkp=zIgfU#j9s8Uq5^K`uWS(FJ8TQ@%rt{*Kc3FdHd?^ zyVq~uy?OiY?YsAH-oJnM{=>WXAKt(J`0m5U_a8of`0(ldhtKane*Ez9)BBH~K79QA z;nU|2pT2zj{N?kPub;ns{qp_$x9>l`egEJ^*Uw)d^y}B}U%x@< z_n$w%|NQ;)_wS$o|Nkp2QC-Erz@T3eQHkBS()NKY8lo zr_Z0ieEIU_>(_7JzJLGmLxI(eGd(?loXv?l@EwBNp8cQrUA-9=D5FgIJT=cH%u+!cB)I)|5Cn<@BA zbmB|77(?Gy(UUbtw^ig<8_#}W@c+oElU^LvJ4(H3*ZT72DCy2E+8kZ7^P$k8r-6NH zzqT#pWL)?0rDN)$0?w0s{M^dy>C-=?cx#`ZQ|Gy(#ie|~(v=HcGs@P*dt~HnXNhsz zu)^xh*&8<2`sU{5s@uH;^bRh)I$ccW`Q(sEv#(FNy7p{q!MZm`ex2#Mw{P35Z+p5p zjXVw>QnKG_RDbG=W-M!I@Y5L+n_V0h<~w;OCp({4(X6|2AZg+?jrT9~u1!fzbKx)Z zt1B$D^HZyGGi7)Yc8tNLD=^C1c7#dj_nOhlJLNq*$bP0l+XkKkkVXc literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/weather-clear.png b/Media/Themes/Umami/Icon/status/weather-clear.png new file mode 100644 index 0000000000000000000000000000000000000000..7f6e10d45a4594319dbadcc6ddaf72fe71a72cdb GIT binary patch literal 1079 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;1&j9Muu5)Bp4VNmk0QSxH2#>{8?{@75!ds_h*CM?{#*6*4h5q=mJu+!T!%iI}kcq z`)8Bg-_uQhHrf5zWdCQQ?VnAyAaM}e?$1WBvds=4*^PF8b~yamYX4`m{huxNAdyY> zf6lo5Iph9&XV9NbcE9%r{XUfkGJKEYpFNR(PS^f9-~Q)<`|r*6zqdI2-fI7QyW{VJ z{=bj9{63oZ`+Vi^OBuhf7XR7q05W!mWx$`8fqz~G{dpPu=T+37 z*YST|C;oYz_UBFdpEr4b-sb;#TlD8`@t=1Uf8IC!dEfEp)BL|TX8pZ2|L>bKf8U+^ z`+mpY51oHMbpQR(^Y=sV-w%8Le(eAIY4+bwbN+r_`uFpSzh74T{j%!smo4+^doG#z7LU|>x0c6aH?;lAX|z`&^N>Ealo zaXvX=0ZRerg9#JD6I_HJCa_IhVOA%z-oYi>$BrFPSdpl5=D-1^Ri}F{D6Lwq zq@MKR(USApE7z#ErHFNJ%Fn7wc6V;;Tf3c0dXsLD=GMDwuP$|cdhMH$#x?GxrKQ`i zPk*MGGW)Zli{#B#-dWMNW@UA4PF{THDof8%9uTBje*vQ#~qH0dR;+m3>9`p-lhptOc)p# zWJ_ElN}Tg^b5rw57@Uhz6H8K46v{J8G895GQWe}ieFNU7sOB*+FsOnQrX-f6S|x*3 zF&G&b8R!~V>Kd4Z7+P2vn_3x~X&V?=85m6aY+;C^AvZrIGp&-r$iUE0*T78I&^*M@ d$jZpv%Fq&`;b|O490LObgQu&X%Q~loCIAU| zgW!U_%O^81FmM)lL>4nJa0`PlBg3pY5)2H?=R92;Lp+YZopRbgCRFD5{^xUcmdllg z%wTMD@=4G#O;QlJbYu&YvmtAy$+3)8-r~o$UhGj(xyC!O;h6n_souSYcEZB5qI4H5 zWvZR!EE{3yPn&g|6OBYS@heU^Vl)>mCG_ckKLI0?%h0xJwFY4CNQoP zv3MR4w{PjW|G&7yy=q@n-dle7q~O;JO&dQ3u6q5eBsjSEc{j6joj=Epb-b627QU|Y z@PDxJ`22=-uV>8pb2Bm~YEG%l@^TAHrE=j5bEWO(zyGVO>tD{tJMWV?SM-TzMmNr+ zDJ*RW5;~eBH}i~@&+49ojf%GSWZozB?A;#Dv~BaVo{jqc`~SHq%szeKiP)#;$|>Hi zH_Y4(Bv?}IILSFJEg)%Ra^A-DjC{X}i$g+PZU=T62`ApFQ+U zlw+ZSXk!qU^h*<;%{;!B6Rc&n9lm(??ql_qJ(UTaCcfTB9{XRM6xotFOJH7ufY8AN z22<0m3#KSW3A3j1^u2ZP>O6af?U8T$%yq9jnOWyO-^$9w7@{M*C#W$S> zt_eX3B1Q?3VqxL$7e;6(q)2eIIte(Hyi@z|HbUEp!{jc%m*x_s4O(V3eeDr{6@UC? z%vo|dB5GG_NEYwLT@v#$b6u;WMHx;ov-WJ%UKUwrC)C*##C2ImdA>eFi-H8tflWGR z;&!#%o5#{Kq48@8mw5Vrhb3A}PA3jE2A3?_uOAm1Tf1lDN6%Ng%rq7z^gQ~tHG9Uq zna5tevi(w`F3{7P?eFIzLr8&3rq$F%AxBPG2*PX6@KKJb`2hFcXTUXw{mz)3E z!0Dg?$HE;3wyo>dEncy@JMrNsn?nx`Vy?G7ws^3INubH)J?Eth7f!5;+gp@X_t2mF zz{}X#HgjZlzO^_vGk^d8V@6JiGnTbpxh2JS)!gB_iA?o7i9>D@^IkhuFm2sxShA&j z!OoSE+s+0G_X;tr@9XV1d$0Aw{Ahal`+v6IAN${r{QSAN;^)%v0}{>4Uf%d;7E>_0 z`L>LkMhn+^h1qvq7EW+q8RO)ATJV^}>>I%bb7UsYd#;+Nckj=Ob8}O#9Dfz4CBAW< zpW^JhE*nEwp39g$kBE$P+!*1KW!rk^+BfAs7bO=j%PrSu*iB%VG2=(dn*Yb*ult9E zhEA@j;|}s-VP^DLny{Ns=6L0YSRq%1B@TMir%t&f|4sCcyT`|KXWn0y=T?kkUhpu% z=GcwvP96MmkKQS7`^kRy`$d&=6>i!L3=Fa*t`Q~9`MJ5Nc_j?aMX8A;sVNHOnI#zt zAsML(?w-B@?^9Is7#J8-K?+k6OH!?p!KxUH42%qP4J>sH%t8z;tc*>q49&C+46F3DNL0jw6nNfq}u()z4*}Q$iB} D+QcLb literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/weather-few-clouds.png b/Media/Themes/Umami/Icon/status/weather-few-clouds.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1dfc155d97197bbeb4e372190f1991aadf3821 GIT binary patch literal 1277 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/weather-showers-scattered.png b/Media/Themes/Umami/Icon/status/weather-showers-scattered.png new file mode 100644 index 0000000000000000000000000000000000000000..f0cf8e7169464688ca0df8e1a4740e75f84e4bd1 GIT binary patch literal 1442 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zxP?KOkzv*xkm+nm-tI08|3PrU-sO`S7+9)3T^vI^j$fS`=`$x(Vn$sTl(|DvXT|4#M!zw?Xhp4Z)HVfiE8<{>1i(JNNo zz4XxTGb%=b>e0WK@9H;DUYNcpd8ziXS6=z?_4>E0WG=iimE+oU>RU}+eYB~a-M_$% zCR)B)!n)pzj(R7}EI603>Vu!J{~^;0{onZ1*L-7(IdS&plB{Rj{w@hze&c2=vq#Dy z{;8|}d_DM(v7}_%?D&ywIyFHs(YBhUT zHbdl=jLM1yNtgp(yF5JAk+5K4N zRDsir^8Tx;W!1{&3y8C2J$J)JpziXQ6`poW)&hwy{Ozd|k12 zy<_H2*E;*B%};pSZsap)tzUgC=h5aMjn9TQMjf3e3+*0DZ5HGTmGfDqRTsZh??5$Y zkzGVk5!0q(qXi4OA_UrQ#D7zK@}`jYoAC8SImXTJ?%7?rHLKExxjFoSob*A}EDh&l zRhM0AS1r2V>G|=;kIA2>M6CO7H(|%-J}+5S#xmK+3ER%e$#m(uy@_OQd$G*m;k0XN zGhVMc_%if_&Gd89{r;2tB`QrM;x6rS<9uJK!H|0=S@M^QS5GO&WU+@=cW}uF6d7FP zO+2*AiMPLL<}7W8H8I;-_2rN0)@1oTT&mD#AC~Z}B#Xb;?_|istuusP%wATwC_`f5 z@twMkN0~2+d{}dN^ErXvYwkakzI*I=fqe+8@4O{PwW{vjmtX1d`9gSsUoCfYGTXxA zML*Mwp1nC~aAJ{a$z-FzxX4qFvkNT(L$fOz{FkS_KRbW*hu*z{w`NQVRi8snoi$JTDzI!-g-_cgCy~i>&j&wR;L&VQ$@)$Hdd}m;=Z~p{ zCVZBD@U#4C|3ur@v-itYYURv#*!gMG8XkSOPcth|nB5aotK#e8UbxlwQA($@qM+Bd z=c3*%*=v@!{MM|0sk3TQ>3f}qSy=hbYi^|z+S-HP(e{0mQ6l{L1)ztqgt>&Ld&a;xv z)0;osUC-LK zy8q`n7B>-=z^&IK*K7Q~B)gek>_wXNuV)wE?Bfg;*ACx(;@W)cMSP31@-F^)9_v~r zHRWVY)y)Ub9<2>Mu}L~|XW{=>^Q}1dIn2~!buY-ClIwfmf94;qeUUnAZXV;m#K6EH zTjCl~;+&tGo0?a`;9QiNSdyBeP@Y+mp%9Xhs^ISF8}L3wHIIRTK^3GhC9x#cDjBSb z!N|bKK-a)h*T5{q(89{t)XLCI+rYrez+l>E3quqQx%nxXX_X8{28M>Z24=d3<{^eg dRz~JlhL#WwPvbb^7#J8BJYD@<);T3K0RUQPhtU84 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/status/weather-showers.png b/Media/Themes/Umami/Icon/status/weather-showers.png new file mode 100644 index 0000000000000000000000000000000000000000..d1fc77e6b61be2774153e5ba5826204bc2bd4f98 GIT binary patch literal 1527 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Pointer/alternate.png b/Media/Themes/Umami/Pointer/alternate.png new file mode 100644 index 0000000000000000000000000000000000000000..6465e7ed321d2d08dfb98c050f20f8ed25a41f52 GIT binary patch literal 922 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGSkfJR9T^xl_H+M9WCckk zdj$D1FjT2AFf_C~A8+2g z`OKL!&z?QoxpU{mix(kkHg4Q_c`t|Gk_wPS*=FGNj+s>Ukw`|$6 zsZ*!UpFe-`;>FXaPoFet(#)AN7cE+}b?ernM~|*wzkdJz{WE9IoHlJ*Pft%@U*EE2 z%cf7CzG%^++S=NpqN0L=g52EP!otF)rlzc{tpET2M@2Hq)# zpFMl_{Q2{bA3r{M^5oN}PjA8C!-o&=-@pIx;ltavZ(qH7b>YH=yLazCd-m+}=g%ik zp1gkj`lCmW-oJnU=FOYWpFjWl_3O`{KMV{Ee0+R@f`TFV}4f z|NsB*oc3iG0|P^JNswPK10xd?GcyYdD;padJ39v_7Z(>dHxCalFCQPjpsxt!-aW^ zXD@4bzyIa3+xHgSW&3wzl1JIYU7e}V+2;1LU12s{+=XG%(%RsbVI>P_cg18&(Fpn|-Gz7&3Ge z|Gg4=Y@@U+dqdamA1gK1y|va(Wc%90!?57m*2hUR(pGhUpB(sp`eC!p6CcDd_KPt5 z5(xNtR-mrjhWXD|o*L`(w;QzT-vldP+w|(&DaKR(tV+W7@7?0!DK&9ZsU!O?N#`Y6 z()>Tg8|0ORyL^rsOsiyIU{Eb_jVMV;EJ?LWE=o--No6oHFf!0JFw-?K4>2^fGB&p| zHq$jQu`)1tTs5r+MMG|WN@iLmgOP!ug|2~#uAxPUk%5(|g_WrZM8nAg?{+gVFfe$! L`njxgN@xNA-rcx& literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Pointer/cross.png b/Media/Themes/Umami/Pointer/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..fbdcafe398939e64af828cc16d90e0a50374851c GIT binary patch literal 632 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGSkfJR9T^xl_H+M9WCckk zdj$D1FjT2AFf_Ch$dH%=fBuVGtzci&R)Gc>MrY5J|gux#cY!y6L!5Aqru zIl!uXVErpKR&yqvtFcoxjV3p$b7UAjl+-!U&yn%@#D7i(hJMZ$T{ABKeLc0Zu7Q*B zxYoe~-)9_aI34IxxJh}z`f^Vh&L^L@1n-;v?tQVx)-Azyv8$$h-lDUo)}rTkt_6F* zG~e5EtC;kj|GToa_Z>sblE}CaQ^x1cv7(jB{vVum$cp{9%JnyocAjbP0l+XkKnzskr literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Pointer/dgn1.png b/Media/Themes/Umami/Pointer/dgn1.png new file mode 100644 index 0000000000000000000000000000000000000000..8d583fc1d56aee17aad1bb3db24dd20c3fd36501 GIT binary patch literal 951 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGSkfJR9T^xl_H+M9WCckk zdj$D1FjT2AFf_C({SZwQ9$X9jjKYTC-+Ne}Dhv z$&;(9s)~w=YHMo?3JQ99dOABhzkmP!`}gm!U%$QwgST(r-n@D9_U+p@!QjrFJ7>?H zJ$LThPha1_*u=rv+dm*AB04TLEj_cm zx_kPvl^;KS{q_yym%qk}TemVWFfb;0ySv1(Tua=|z`*G4>Eak-(ffANUBANyJgvFv zxtISg$lP;y!j1=R?GI;8tl*xo!`b2gHM4Djw>GLucZe$lU0wFCC~Ll4gT0uV`2~4K z7N;WtqB|V~7*0xgvuK=o^Rs8e!zzoMZ}a_oyXG;cESNuU^TxAlriU~#T$H=9>z4+{ z<*EROSr_Y8v_>*cPJF@P@ors6W6r#zMr;?JSkLRTH0nL^_pP>@P??v{y56OJsPCXecOn0w ze(t23r_*eG?n-*q2HfXS*j1sKtM>W-MPmmWuC2Ql$)vfPgffUSZYaOLdZ*mCmHdu^ ziLn8O`-S@&-j`k6_0-Iqt#N7f>MFlpuH$>^^?4h)%w<8c~vxSdwa$T$GwvlFDFYU}T_cV5Vze z9%5){Wo&L`Y^G~qVr5|PxN2GtiiX_$l+3hB1|tJQ3ta;fT|bP0l+XkKqVU2d literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Pointer/dgn2.png b/Media/Themes/Umami/Pointer/dgn2.png new file mode 100644 index 0000000000000000000000000000000000000000..82240628c82d375939be42e3035dc88ddba98f94 GIT binary patch literal 952 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGSkfJR9T^xl_H+M9WCckk zdj$D1FjT2AFf_CX*@zyHjcGdFMEJa_IKT;<}$ix)0j zxN6m^Ns}hco;`cjs#Qmh965UQ=z;|c+S}V#tyetPy?gh*eED+a z%9YQbKfinT?*04sZ{EE5^5x6duU|iZ{`}?3mrtKQeg6FU_wU~j+26l^|M~Oh_wU~f z3=G`d+&nxyHa0f4wzduq4o*%^|NsBj?Eklmfq@~iB*-tAfsu)cnVE%!m5rT)laq@J zte%%oNJv;jL_|bXOhQ6ZT3SX%PEKA~MO{NfQ&&%4-@wS+-o?wu*DoMAB0V!Vub{Z4 zW9HHg?>~S2`t95I@4r9}_`BX<11K&Slf2zs5{_=K5ny0obntX>46!(Uck*q&!v;KU zxyz&Ztutmdc&og7s5qhGxh+?W;zyPZTeG}`Z)@bTo($t$chWcZ=V|%l|0W;Q*X~Z5 zv(JiOL6OZZR5fWI;~Asm4iOid>Wjq;XM?xSeAL|fFR1Ze=F>Kf`;F@R);#<<@7v>J zi?-Ni@w9vjy?5J{@DZh(;R+Vop zW$4~kw4gyV;grqlQ;PSuY+@7ZWK?0!%RQx7zs5SED$Q4v;ZD+t`YW-@t=s36O*+Py zS{l23oAs=F%egM6oVXR7K3lA(!roYCLR0wJ^w%s7DvTwoW}3hI)$%CVy~n}sUx?7G zHR*jpU)y6H*`^#lIp=AM?v%vU1<&;-1T10C?__YD@mTubl?%cB2YVN2SuI|0U~^mF z?*;W$;{PRnFqw}$cLyHh2Ln{LVD`NwQ2A6N&WEdD2 O7(8A5T-G@yGywnyg3Ad2 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Pointer/help.png b/Media/Themes/Umami/Pointer/help.png new file mode 100644 index 0000000000000000000000000000000000000000..57327a4c5fc2c9ba406574a189bbf4bb5988d7df GIT binary patch literal 1346 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGSkfJR9T^xl_H+M9WCckk zdj$D1FjT2AFf_Cg%96561#*NpnU*Eoc z`^=d$ckkZazkmPv^XCsAKD=Ycj;mL%K6&!w)2C0%mMw#rGjHC!RjXEQ+qUh{p+h@& z?%cCy&xsQ!?%lgLfByXa`}g0!fB)LGYmXj1+Pr!5wr$%kUc7kw_U)ZJcTSu*amth_ z*REY#zkdC}g9rQj`&X=3apugKrAwEtS+i#I=FM$wZ3`DJ+_PuT+_`gCty;Bj-@f_t z=QlSuFIu!{-MV$PwYAHZEo*9Onm2FW>({RjA3i*J^5mmOk4~C2sk^(ow6t{k^y&Zq z|NjF9&z?Q|_U+rMRja;z`}X?v>v!+oJ$v@-?%lhOA3uKm`t_$zpYGhbbMoZLr%#_A zKYsk^(W4I@JoxnK)5C`kpFe;8^y$-=FJE4}cJ1xkx36En{`m3ZyLaziy?XWb?c4Y7 z-+%b<;r;vfpFVv$efsq0&!4}1`Lcccb~yX{_wP%WF8%P~!>3Q5zJ2@l_wV0-|Ni~` z`*+TqIX`~<`26|v*RNlH{`{GhmG$e_ukYW#GcYi)v$G2c35kh`iHnP?si_$m8JU=v zn46nhT3XuJ*x1_I+S%FJ+uJ)hI5;{wy1Tpk`1tty`~Uy{Ur)mR69WUo+>#)_UKd9lI=Xs>Mn=Xare@~$4$fZQfk7eRk&#i+ z(a{O1IXOkeCFPx6Q>H9mbMxlC$IqUv|K(q5yIIfdxHkEye#W{JCX6zXc8iucaulSTmyufN$Z@POhofwx*y^3v z@=VuE;%)R|I3lrT>$NKf@;aFgDVE{(HFfU!k$@>tf~?eYKahZaAE4&iGlxXg%+k51@mc}PBY$L)8D%b>;3qrX?#tAXW^yWk#`fGOkcl?)F zi6yBFMg~R(x&~&t2Ie7#hE~SrR>o$!1}0Vp29K+z^`L0T%}>cpt7I@TFtpG$Fwr%% e2r)9WGBC6~AD=mM z=Gn7nJ9qBfzkmPLt5;vWdbM%m#v@0L+_-V$_3PK$wrx9n`0$=RdrqD_dHwqJGiT0h z+qUh{p+o1+otr&-_Wb$tXU?2CckbK`8#b(6yLRi=tw)a@oj!f~`t|Gg@83Ur_UuWM zCe55VbKACU&CShiZEY)7tXQ^e+4Skt7cE-U-QAs?on25+P*qixnVDHwSlHCml$DkB z`}gmtsHp${|G#|s^6lHV-@bkO{{8!pA3vTvdGg@FgU62_zkB!Y)2C1W|NnpW>eaJn z&pv(n^!V}P%a<>|diCnVhYt{EfBEv|<;$0!KY#x4;lum)@9*5X^YZ1(XV0F!dGqG& z+qbuG-+uAp#k+U!K7amv;lhPmw{AUt{P_9v=dWMCe*5gUg&pFVy1`Sa(WKYxDz{>{L^ARr(hEG#T3DXFNasHUc-qoZSJX!!sC|D%$(-!m{U zl$Hef1v4-*F)=fmd1De2UDeIT-m!vBIcQj zd}(ebm44r!%!-Ot6||dp>y=MFtD&BVXwR7#JI~OiTc25VUE*6_8lyvo|*l>?js?=j!_#m4qkSWH_6ViLG$cABS`M5zbL?1?_Q?mn zfr}f87#J@6_Wf_*YOKk?z@S><8c~vxSdwa$T$GwvlFDFYU}T_cV5Vze9%5){Wo&L` zY^G~qVr5|PxN2GtiiX_$l+3hB1|tJQ3ta;fT|e{rdIm?c2AXKYu=c{P>3tAFf=v^77@&H*em&eEIU(vuE$#y?g!o^^+%0K79D_ z{{8zeU%q_$^y%^A$6vpG{r>&?j~_oEj9SJk552A zKv-B|{6A-2*%DzR9>0L?yS|F{yx(t9_*9CQCE4RvcINYY z#kxo0Rtd~M@Lu?xX4hjI=NT&_UArz;o?_VAzr4l2@r6xd! zt;sQubAL`ctemm6@RO$6@yOKwm&aoqjdRsk+$!pXBSs}crnwdcn{a{Sx29x z%{Vq?ZfoVP9KOrhb-%^x{G5xp0&5Gaw&nUvow>Z?`{S~XbBE?kys|xvbMu^Iiai%K zSwdc)3aNacDcf%u%&}kv$040`8*A-D%&8NN|JyzmcaG`J@@fw$VPIfTEpd$~Nl7e8 zwMs5ZO)N=eFfuSQ&^0jAH82k`G_*1{w=y=8y)UhLn$ z|JAEkM~)o1apT78*RQv2+qP=es@=PH-@SYH{{8z`uU_4=XV2!%n|JQqdFRfZjT<-a z*|TTy;>BmqoVj-G+T6KwmoHy_Qr4<1~$Y}t|}OO`HOx@y&`#fulWwY5!{Frlfbsimc*w6rugH#ayq z_%9fI0E3TU0A_x81qRQ-;58V41ztUU`t;eeXAtt^$B!RAeE9U~(}xcq-h;v0w{Ks+ ze*O0C+gGn%y?pud?c296Uc7ko<_$#4%a<>oJ$tre$Bupb_HEz3eed4A`}XbIwr$(? z?c4Y4*|T@=-mP1=Zrir)-Me@1-@kwN?i~XI11l>l8yg!tJ3BWwHxCaFFE8)^|NqxH zm*+AtFqD)8`2{mDGBGhTvx3xca&dta@$&NW@$>Tw2nmabiHVC#N=iyeNy*5_$;rtp zC@ZU~scUNM8W5|5r%smLRN#w<@4#}Etu zr;{qJnF2+Q?Y^Arb5`V3#}Per7vxqzgS>W1-p5_Jg~>u$JXmjowSMRf)_BTQ+`S7kX`5{rqCN3B!&rQI2O< zO$k3!!W{7R=x3q!M~{12f0iz2pS*J!&(ih{;ZGbUR9#PHbXQ{9AaJzxw&nc}4d#Zd z#l@dB1cVx1yg6A`a7po=6XSxmtvkQHR_^;d=k&2GmFbI0mi79q?Up^4Hz{V*wN}%Q zLAjspZY<+o=zI5u>%Y}MOzf|&JG+Yg=&s36UvD^n@tb_hlD+GmX1UO_QmvAUQWHy38H@~!40H|5bPdcy z3=OS}&8>{hbPY_b3=AGuP3u9?kei>9nO4bQWMF8aYha>lXc1y$Xk}n*Wdzm0u)AV6 Q0|Nttr>mdKI;Vst01YQP1poj5 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Pointer/pen.png b/Media/Themes/Umami/Pointer/pen.png new file mode 100644 index 0000000000000000000000000000000000000000..e836fe4886861df5aa0ca6a47bd09ef2a7a0a20b GIT binary patch literal 1253 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Pointer/text.png b/Media/Themes/Umami/Pointer/text.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b17c25a6efda34d527f325ebf2e87b249ab788 GIT binary patch literal 5514 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 ZWnco)a6?{h1p@;EgQu&X%Q~loCIIOwkDdSk literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Pointer/vert.png b/Media/Themes/Umami/Pointer/vert.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4cd257f8245b91fa716fd0830534dfe9fa1acb GIT binary patch literal 1084 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGSkfJR9T^xl_H+M9WCckk zdj$D1FjT2AFf_C~AD=mM z=Gn7nJ9qBfzkmPLt5-K}+<4^3ksCK|K-3&Qe0a~EJ=d>a-@kwVnKNg$ZQFM4+_~Aa zXHT6vb^iSMix)3m3kF-aZasSR==AB+*RNl{fB*hPixy3qG->9{ncKE)Yi@3CYinBu z2GgfcU$kgZcXxMfZEbdTc4lT~US3{dVPR8KQ&v{i|NsA^qN0BP{{8;_`{&P}|NQy$ z`}glZe*Ad)^y%x@uOB>k@c;k+XV0EJfByX0vu7Vae!O<=+NV#SUc7km=H0t@uV26Z_3PK?&!2z& z`t|3}9|i^nK0ZEvettngK_MX_5fKqFF)>L=No8eab#-+^L&N|7|4X_Y>0n@BC@l%{ z3ua(sVq#`yVPR!sV`FFM;N;@s=HcPx<>liO6c!c{5fv4ekdTy-mzP&iP*7A>R#sKh z(ALq>Gc+7?gjha3c2ja9sz6c!#! za1cInuR8qA-tYIS#Ur`JKE0Ud^0eZ{5%CZI{*{%zo9i8D&y*m*>~NDa<9)@x6Bo-^ z3=TyV?REHMknnk4{0(3Ebw>`%otAXiz3ltEkB>jr#1useJb2Ld{l3Am^~;4_g`O*L zB(R^i->~reY(dilOdlQJJF?YlZZ=-fv9p_Lme0#weTLUc|0afhw&pw_t($Mu=u++- zs>pd^&zh+-9sG-zs&TjQJG`5a#T2_W%fn#__bgFS;TLNHT&D3bP56-ABt6k=`uoj# zLBU4zt(oT3-o7cL_iJ&S3&X#Kx8JM0KlaK*p3z{DQB~T#M^($VhHTt$lI_aQ$>M)X zw%&+KF64eZ>)?$`fxn6tFSbi7^RdP{kVo554k%5tcu7R1Zfq96b zp_Q?@m9d$wfr*uY!Q-lFJt!J-^HVa@DjAFn3@vmGOmqz`LW~Tp3{0&|j3659TU9d{ Q7#J8lUHx3vIVCg!0Q^lR>i_@% literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Pointer/wait.png b/Media/Themes/Umami/Pointer/wait.png new file mode 100644 index 0000000000000000000000000000000000000000..6f7efbdad8343188d5efe6569530bde2d6bd4719 GIT binary patch literal 7107 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 + widget->color = Color(0, 0, 0); + if (!widget->font) + widget->font = Compositor.theme.font.sans; + if (widget->image) { + widget->width = Max(widget->image->width + 8, widget->width); + widget->height = Max(widget->image->height + 8, widget->height); + } + Rect2D(win->render_ctx, x + 1, y + 1, widget->width - 2, widget->height - 2, + Color(232, 232, 232)); + Line2D(win->render_ctx, x + 1, y, x + widget->width - 1, y, + Color(96, 96, 96)); + Line2D(win->render_ctx, x + 1, y + widget->height - 1, x + widget->width - 1, + y + widget->height - 1, Color(96, 96, 96)); + Line2D(win->render_ctx, x, y + 1, x, y + widget->height - 2, + Color(96, 96, 96)); + Line2D(win->render_ctx, x + widget->width - 1, y + 1, x + widget->width - 1, + y + widget->height - 2, Color(96, 96, 96)); + if (widget == win->mouse_down_widget && Mouse.left && + @widget_is_hovered(win->x + x, win->y + y, widget)) { + + if (widget->image) { + Blot2D(win->render_ctx, x + 5, y + 5, widget->image); + } + + Line2D(win->render_ctx, x + 1, y + 1, x + widget->width - 2, y + 1, + Color(152, 152, 152)); + Line2D(win->render_ctx, x + 1, y + 1, x + 1, y + widget->height - 3, + Color(152, 152, 152)); + Line2D(win->render_ctx, x + 2, y + 2, x + widget->width - 3, y + 2, + Color(216, 216, 216)); + Line2D(win->render_ctx, x + 2, y + 2, x + 2, y + widget->height - 4, + Color(216, 216, 216)); + Line2D(win->render_ctx, x + 2, y + widget->height - 3, + x + widget->width - 2, y + widget->height - 3, Color(255, 255, 255)); + Line2D(win->render_ctx, x + 3, y + widget->height - 4, + x + widget->width - 2, y + widget->height - 4, Color(255, 255, 255)); + Line2D(win->render_ctx, x + widget->width - 3, y + 2, x + widget->width - 3, + y + widget->height - 3, Color(255, 255, 255)); + Line2D(win->render_ctx, x + widget->width - 4, y + 3, x + widget->width - 4, + y + widget->height - 3, Color(255, 255, 255)); + } else { + + if (widget->image) { + Blot2D(win->render_ctx, x + 4, y + 4, widget->image); + } + + Line2D(win->render_ctx, x + 2, y + 2, x + widget->width - 2, y + 2, + Color(255, 255, 255)); + Line2D(win->render_ctx, x + 2, y + 3, x + widget->width - 3, y + 3, + Color(255, 255, 255)); + Line2D(win->render_ctx, x + 2, y + 2, x + 2, y + widget->height - 3, + Color(255, 255, 255)); + Line2D(win->render_ctx, x + 3, y + 2, x + 3, y + widget->height - 4, + Color(255, 255, 255)); + Line2D(win->render_ctx, x + 3, y + widget->height - 3, + x + widget->width - 3, y + widget->height - 3, Color(216, 216, 216)); + Line2D(win->render_ctx, x + widget->width - 3, y + 3, x + widget->width - 3, + y + widget->height - 3, Color(216, 216, 216)); + Line2D(win->render_ctx, x + 2, y + widget->height - 2, + x + widget->width - 2, y + widget->height - 2, Color(152, 152, 152)); + Line2D(win->render_ctx, x + widget->width - 2, y + 2, x + widget->width - 2, + y + widget->height - 2, Color(152, 152, 152)); + } + if (StrLen(&widget->text)) { + text_offset = T(widget == win->mouse_down_widget && Mouse.left && + @widget_is_hovered(win->x + x, win->y + y, widget), + 1, 0); + text_width = PutS2D(NULL, widget->font, 0, 0, Color(0, 0, 0), , &widget->text); + PutS2D(win->render_ctx, widget->font, + x + text_offset + (widget->width / 2) - (text_width / 2), + y + text_offset + (widget->height / 2) - (widget->font->line_height / 2), + widget->color, , &widget->text); + } +} + +U0 @umami_checkbox_repaint(Window* win, CheckBoxWidget* widget, I64 x, I64 y) +{ + + if (widget == win->mouse_down_widget && + @widget_is_hovered(win->x + x, win->y + y, widget)) { + Blot2D(win->render_ctx, x, y, + T(widget->checked, umami_widget_checkbox_checked_active, + umami_widget_checkbox_active)); + return; + } + if (widget == win->mouse_down_widget->echo && widget != win->mouse_down_widget && + @widget_is_hovered(win->x + x, win->y + y, win->mouse_down_widget)) { + Blot2D(win->render_ctx, x, y, + T(widget->checked, umami_widget_checkbox_checked_active, + umami_widget_checkbox_active)); + return; + } + Blot2D( + win->render_ctx, x, y, + T(widget->checked, umami_widget_checkbox_checked, umami_widget_checkbox)); +} + +U0 @umami_terminal_calculate_size(Window* win, TerminalWidget* widget) +{ + widget->size.cols = RoundI64(win->width, 8) / 8; + widget->size.rows = (RoundI64(win->height, 16) / 16) - 2; +} + +U32 @umami_terminal_256_color_lookup(I64 index) +{ + U32* color_table = TERMINAL_COLOR_TABLE; + return color_table[index]; +} + +U0 @umami_terminal_set_256_color_foreground(Window* win, TerminalWidget* widget, + I64 argc, U8** argv) +{ + if (argc != 3 && !StrCmp(argv[1], "5")) + return; + widget->color.foreground = @umami_terminal_256_color_lookup(Str2I64(argv[2])); +} + +U0 @umami_terminal_set_256_color_background(Window* win, TerminalWidget* widget, + I64 argc, U8** argv) +{ + if (argc != 3 && !StrCmp(argv[1], "5")) + return; + widget->color.background = @umami_terminal_256_color_lookup(Str2I64(argv[2])); + widget->color.background.u8[3] = win->opacity; +} + +U0 @umami_terminal_cleanup_strings(I64 argc, U8** argv) +{ + I64 i; + for (i = 0; i < argc - 1; i++) + Free(argv[i]); +} + +I64 @umami_ansi_16_color_table[8] = { 0, 4, 2, 6, 1, 5, 3, 7 }; + +U0 @umami_terminal_set_16_color_fg_value(TerminalWidget* widget) +{ + I64 val = widget->last_fg_color_set; + if (val > 15) + return; + widget->color.foreground = Color(T(widget->attr.bold, + gr_palette_std[8 + @umami_ansi_16_color_table[val]].r & 0xFF, + gr_palette_std[@umami_ansi_16_color_table[val]].r & 0xFF), + T(widget->attr.bold, + gr_palette_std[8 + @umami_ansi_16_color_table[val]].g & 0xFF, + gr_palette_std[@umami_ansi_16_color_table[val]].g & 0xFF), + T(widget->attr.bold, + gr_palette_std[8 + @umami_ansi_16_color_table[val]].b & 0xFF, + gr_palette_std[@umami_ansi_16_color_table[val]].b & 0xFF)); +} + +U0 @umami_terminal_ctrl_seq_sgr(Window* win, TerminalWidget* widget) +{ + I64 argc; + I64 i; + I64 val; + U8** argv = String.Split(&widget->consumed_chars, ';', &argc); + if (!argc && StrLen(&widget->consumed_chars)) { + argc = 1; + argv[0] = &widget->consumed_chars; + } + if (!argc && !StrLen(&widget->consumed_chars)) { + widget->color.background = Color(0, 0, 0); + widget->color.foreground = Color(217, 217, 217); + return; + } + for (i = 0; i < argc; i++) { + val = Str2I64(argv[i]); + switch (val) { + case 0: + widget->color.background = Color(0, 0, 0); + widget->color.foreground = Color(217, 217, 217); + break; + case 1: + widget->attr.bold = TRUE; + if (widget->last_fg_color_set < 16) + @umami_terminal_set_16_color_fg_value(widget); + break; + case 2: + widget->attr.bold = FALSE; + if (widget->last_fg_color_set < 16) + @umami_terminal_set_16_color_fg_value(widget); + break; + // 16 colors + case 30...37: + widget->last_fg_color_set = val - 30; + @umami_terminal_set_16_color_fg_value(widget); + break; + case 40...47: + widget->color.background = Color(gr_palette_std[@umami_ansi_16_color_table[(val - 40)]].r & 0xFF, + gr_palette_std[@umami_ansi_16_color_table[(val - 40)]].g & 0xFF, + gr_palette_std[@umami_ansi_16_color_table[(val - 40)]].b & 0xFF, + win->opacity); + break; + // 256 colors + case 38: + widget->last_fg_color_set = 256; + @umami_terminal_set_256_color_foreground(win, widget, argc, argv); + i += 2; + break; + case 48: + @umami_terminal_set_256_color_background(win, widget, argc, argv); + i += 2; + break; + case 39: + // FIXME: Set default foreground color + widget->color.foreground = Color(217, 217, 217); + break; + case 49: + // FIXME: Set default background color + widget->color.background = Color(0, 0, 0); + break; + default: + System.Log("Unrecognized attribute in ctrl_seq_sgr: %d", val); + break; + } + } + // if (argc) + // @umami_terminal_cleanup_strings(argc, argv); +} + +U0 @umami_terminal_set_col(Window* win, TerminalWidget* widget, I64 row, + I64 col, U8 char) +{ + widget->row[row + widget->scroll.y].col[col + widget->scroll.x].foreground = widget->color.foreground; + widget->row[row + widget->scroll.y].col[col + widget->scroll.x].background = widget->color.background; + widget->row[row + widget->scroll.y].col[col + widget->scroll.x].char = char; +} + +U0 @umami_terminal_set_row(Window* win, TerminalWidget* widget, I64 row, + U8 char) +{ + I64 col; + for (col = 0; col < TERMINAL_MAX_COLS - 1; col++) + @umami_terminal_set_col(win, widget, row, col, char); +} + +U0 @umami_terminal_set_rows(Window* win, TerminalWidget* widget, U8 char) +{ + I64 row; + for (row = 0; row < widget->size.rows - 1; row++) + @umami_terminal_set_row(win, widget, row, char); +} + +U0 @umami_terminal_repaint_col(Window* win, TerminalWidget* widget, I64 row, + I64 col) +{ + U8 char[2]; + char[1] = NULL; + U32 col_bg_color; + char[0] = widget->row[row + widget->scroll.y].col[col + widget->scroll.x].char; + col_bg_color = widget->row[row + widget->scroll.y] + .col[col + widget->scroll.x] + .background; + col_bg_color.u8[3] = win->opacity; + Rect2D(widget->backing_store, 2 + (col * 8), 2 + (row * 16), 8, 16, + col_bg_color); + PutS2D(widget->backing_store, Compositor.theme.font.monospace, 2 + (col * 8), + 2 + (row * 16), + widget->row[row + widget->scroll.y] + .col[col + widget->scroll.x] + .foreground, + , &char); +} + +U0 @umami_terminal_repaint_row(Window* win, TerminalWidget* widget, I64 row) +{ + I64 col; + for (col = 0; col < TERMINAL_MAX_COLS - 1; col++) + @umami_terminal_repaint_col(win, widget, row, col); +} + +U0 @umami_terminal_repaint_rows(Window* win, TerminalWidget* widget) +{ + I64 row; + for (row = 0; row < widget->size.rows - 1; row++) + @umami_terminal_repaint_row(win, widget, row); +} + +U0 @umami_terminal_ctrl_seq_cursor_move(Window* win, TerminalWidget* widget, + I64 dir) +{ + I64 pos = Str2I64(&widget->consumed_chars); + I64 prev_row = widget->cursor.y; + switch (dir) { + case 'A': + widget->cursor.y = Max(0, widget->cursor.y - pos); + break; + case 'B': + widget->cursor.y = Min(widget->cursor.y + pos, widget->size.rows - 1); + break; + case 'C': + widget->cursor.x = Min(widget->cursor.x + pos, widget->size.cols - 1); + break; + case 'D': + widget->cursor.x = Max(0, widget->cursor.x - pos); + break; + }; + @umami_terminal_repaint_row(win, widget, prev_row); +} + +U0 @umami_terminal_ctrl_seq_cursor_pos(Window* win, TerminalWidget* widget) +{ + I64 argc; + I64 i; + I64 val; + U8** argv = String.Split(&widget->consumed_chars, ';', &argc); + if (!argc) { + @umami_terminal_repaint_col(win, widget, widget->cursor.y, + widget->cursor.x); + widget->cursor.x = 0; + widget->cursor.y = 0; + return; + } + if (argc == 2) { + @umami_terminal_repaint_col(win, widget, widget->cursor.y, + widget->cursor.x); + widget->cursor.y = Str2I64(argv[0]) - 1; + widget->cursor.x = Str2I64(argv[1]) - 1; + widget->cursor.y = Min(widget->size.rows - 2, widget->cursor.y); + widget->cursor.x = Min(widget->size.cols - 2, widget->cursor.x); + widget->cursor.y = Max(0, widget->cursor.y); + widget->cursor.x = Max(0, widget->cursor.x); + //@umami_terminal_cleanup_strings(argc, argv); + return; + } +} + +U0 @umami_terminal_ctrl_seq_erase_screen(Window* win, TerminalWidget* widget) +{ + I64 i; + if (!StrLen(&widget->consumed_chars)) { + // TODO: clear from cursor to end of the screen + return; + } + I64 val = Str2I64(&widget->consumed_chars); + switch (val) { + case 0: + // TODO: clear from cursor to end of the screen + break; + case 1: + // TODO: clear from cursor to beginning of the screen + break; + case 2: + widget->scroll.x = 0; + widget->scroll.y = 0; + widget->max.x = 0; + widget->max.y = 0; + for (i = 0; i < 2000; i++) + @umami_terminal_set_row(win, widget, i, NULL); + @umami_terminal_repaint_rows(win, widget); + break; + default: + System.Log("Unrecognized attribute in ctrl_seq_erase_screen: %d", val); + break; + }; +} + +U0 @umami_terminal_ctrl_seq_erase_line(Window* win, TerminalWidget* widget) +{ + if (!StrLen(&widget->consumed_chars)) { + // TODO: clear from cursor to end of the line + return; + } + I64 val = Str2I64(&widget->consumed_chars); + switch (val) { + case 0: + // TODO: clear from cursor to end of the line + break; + case 1: + // TODO: clear from cursor to beginning of the line + break; + case 2: + @umami_terminal_set_row(win, widget, widget->cursor.y, ' '); + @umami_terminal_repaint_rows(win, widget); + break; + default: + System.Log("Unrecognized attribute in ctrl_seq_erase_line: %d", val); + break; + }; +} + +U0 @umami_terminal_send_response_string(Window* win, TerminalWidget* widget, + U8* string) +{ + if (!string || !widget->output) + return; + I64 i; + for (i = 0; i < StrLen(string); i++) + FifoU8Ins(widget->output, string[i]); +} + +U0 @umami_terminal_ctrl_seq_set_func(Window* win, TerminalWidget* widget, + Bool bool) +{ + if (!StrCmp(&widget->consumed_chars, "?25")) { + @umami_terminal_repaint_col(win, widget, widget->cursor.y, + widget->cursor.x); + widget->cursor.hidden = T(bool, FALSE, TRUE); + } +} + +U0 @umami_terminal_ctrl_seq_dev_attr_report(Window* win, + TerminalWidget* widget) +{ + if (!widget->output) + return; + if (StrFind("=", &widget->consumed_chars)) { + // Tertiary device attributes + @umami_terminal_send_response_string(win, widget, "\x1bP!|7E565445\x1b\\"); + return; + } + if (StrFind(">", &widget->consumed_chars)) { + // Secondary device attributes + @umami_terminal_send_response_string(win, widget, "\x1b[>65;6201;1c"); + return; + } + // Primary device attributes + @umami_terminal_send_response_string(win, widget, "\x1b[?65;1;9c"); +} + +U0 @umami_terminal_ctrl_seq_ecp_report(Window* win, TerminalWidget* widget) +{ + if (!widget->output) + return; + U8 resp_str[32]; + StrPrint(&resp_str, "\x1b[%d;%dR", widget->cursor.y + 1, + widget->cursor.x + 1); + if (!StrCmp(&widget->consumed_chars, "5")) + @umami_terminal_send_response_string(win, widget, "\x1b[0n"); + if (!StrCmp(&widget->consumed_chars, "6")) + @umami_terminal_send_response_string(win, widget, &resp_str); +} + +U0 @umami_terminal_ctrl_seq_req_tparm(Window* win, TerminalWidget* widget) +{ + // FIXME: allow unsolicited DECREPTPARMs + if (!StrCmp(&widget->consumed_chars, "1")) { + @umami_terminal_send_response_string(win, widget, + "\x1b[3;1;1;120;120;1;0x"); + return; + } + @umami_terminal_send_response_string(win, widget, "\x1b[2;1;1;120;120;1;0x"); +} + +U0 @umami_terminal_os_cmd(Window* win, TerminalWidget* widget) +{ + I64 argc; + I64 i; + I64 val; + U8** argv = String.Split(&widget->consumed_chars, ';', &argc); + if (!argc) + return; + val = Str2I64(argv[0]); + switch (val) { + case 0: + // Test set window title + StrPrint(win->title, "Terminal - %s", argv[1]); + break; + default: + break; + } + //@umami_terminal_cleanup_strings(argc, argv); +} + +U0 @umami_terminal_consume_char(Window* win, TerminalWidget* widget) +{ + U8 char[2]; + char[1] = NULL; + FifoU8Rem(widget->input, &char); + + switch (widget->state) { + case TERMINAL_STATE_CONSUME_BEGIN: + StrCpy(&widget->consumed_chars, ""); + switch (char[0]) { + case '7': // DEC Save Cursor + MemCpy(&widget->stored.attr, &widget->attr, + sizeof(@terminal_widget_attr)); + MemCpy(&widget->stored.color, &widget->color, + sizeof(@terminal_widget_color)); + MemCpy(&widget->stored.cursor, &widget->cursor, + sizeof(@terminal_widget_cursor)); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + case '8': // Dec Restore Cursor + MemCpy(&widget->attr, &widget->stored.attr, + sizeof(@terminal_widget_attr)); + MemCpy(&widget->color, &widget->stored.color, + sizeof(@terminal_widget_color)); + MemCpy(&widget->cursor, &widget->stored.cursor, + sizeof(@terminal_widget_cursor)); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + case '[': + widget->state = TERMINAL_STATE_CONSUME_CTRL_SEQ; + break; + case ']': + widget->state = TERMINAL_STATE_CONSUME_OS_CMD; + break; + default: + System.Log(Fs, "Undefined C1 control code: %c", char[0]); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + }; + break; + case TERMINAL_STATE_CONSUME_CTRL_SEQ: + switch (char[0]) { + case '0' ... '9': + case ';': + case '?': + case '>': + case '=': + String.Append(&widget->consumed_chars, &char); + break; + case 'A' ... 'D': + @umami_terminal_ctrl_seq_cursor_move(win, widget, char[0]); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + case 'H': + @umami_terminal_ctrl_seq_cursor_pos(win, widget); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + case 'J': + @umami_terminal_ctrl_seq_erase_screen(win, widget); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + case 'K': + @umami_terminal_ctrl_seq_erase_line(win, widget); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + case 'c': + @umami_terminal_ctrl_seq_dev_attr_report(win, widget); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + case 'h': + @umami_terminal_ctrl_seq_set_func(win, widget, 1); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + case 'l': + @umami_terminal_ctrl_seq_set_func(win, widget, 0); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + case 'm': + @umami_terminal_ctrl_seq_sgr(win, widget); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + case 'n': + @umami_terminal_ctrl_seq_ecp_report(win, widget); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + case 't': + widget->state = TERMINAL_STATE_CONSUME_END; + break; + case 'x': + @umami_terminal_ctrl_seq_req_tparm(win, widget); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + default: + System.Log(Fs, + "Invalid or unimplemented character in control sequence: '%c'", + char[0]); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + } + break; + case TERMINAL_STATE_CONSUME_OS_CMD: + switch (char[0]) { + case 7: + case '\\': + @umami_terminal_os_cmd(win, widget); + widget->state = TERMINAL_STATE_CONSUME_END; + break; + default: + String.Append(&widget->consumed_chars, &char); + break; + }; + break; + }; +} + +U0 @umami_terminal_output_char(Window* win, TerminalWidget* widget) +{ + if (widget->scroll.y != widget->max.y) { + widget->scroll.y = widget->max.y; + @umami_terminal_repaint_rows(win, widget); + } else { + widget->scroll.y = widget->max.y; + } + U8 char[2]; + char[1] = NULL; + FifoU8Rem(widget->input, &char); + switch (char[0]) { + case 27: + StrCpy(&widget->consumed_chars, ""); + widget->state = TERMINAL_STATE_CONSUME_BEGIN; + return; + break; + case 7: + // Audio.Beep(); + break; + case 8: + widget->row[widget->cursor.y + widget->scroll.y] + .col[widget->cursor.x + widget->scroll.x] + .char + = ' '; + widget->cursor.x--; + if (widget->cursor.x < 0) { + widget->cursor.y--; + widget->cursor.x = widget->size.cols - 2; + } + break; + case 10: + widget->cursor.y++; + widget->cursor.x = 0; + break; + case 13: + widget->cursor.x = 0; + break; + case 32...127: + widget->row[widget->cursor.y + widget->scroll.y] + .col[widget->cursor.x + widget->scroll.x] + .foreground + = widget->color.foreground; + widget->row[widget->cursor.y + widget->scroll.y] + .col[widget->cursor.x + widget->scroll.x] + .background + = widget->color.background; + widget->row[widget->cursor.y + widget->scroll.y] + .col[widget->cursor.x + widget->scroll.x] + .char + = char[0]; + widget->cursor.x++; + break; + default: + widget->row[widget->cursor.y + widget->scroll.y] + .col[widget->cursor.x + widget->scroll.x] + .foreground + = widget->color.foreground; + widget->row[widget->cursor.y + widget->scroll.y] + .col[widget->cursor.x + widget->scroll.x] + .background + = widget->color.background; + widget->row[widget->cursor.y + widget->scroll.y] + .col[widget->cursor.x + widget->scroll.x] + .char + = '?'; + widget->cursor.x++; + break; + }; + if (widget->cursor.x >= widget->size.cols - 1) { + widget->cursor.y++; + widget->cursor.x = 0; + } + if (widget->cursor.y >= widget->size.rows - 1) { + widget->cursor.y--; + widget->max.y++; + widget->scroll.y = widget->max.y; + @umami_terminal_set_row(win, widget, widget->cursor.y, NULL); + @umami_terminal_repaint_rows(win, widget); + } + @umami_terminal_set_col(win, widget, widget->cursor.y, widget->cursor.x, ' '); +} + +U0 @umami_terminal_repaint(Window* win, TerminalWidget* widget, I64 x, I64 y) +{ + + I64 current_col = NULL; + I64 current_row = NULL; + + @umami_terminal_calculate_size(win, widget); + + if (widget->refresh) { + @umami_terminal_repaint_rows(win, widget); + widget->refresh = FALSE; + } + + while (FifoU8Cnt(widget->input)) { + current_col = widget->cursor.x; + current_row = widget->cursor.y; + switch (widget->state) { + case TERMINAL_STATE_OUTPUT: + @umami_terminal_output_char(win, widget); + break; + case TERMINAL_STATE_CONSUME_BEGIN: + case TERMINAL_STATE_CONSUME_CTRL_SEQ: + case TERMINAL_STATE_CONSUME_OS_CMD: + @umami_terminal_consume_char(win, widget); + break; + } + if (widget->state == TERMINAL_STATE_OUTPUT) + @umami_terminal_repaint_col(win, widget, current_row, current_col); + if (widget->state == TERMINAL_STATE_CONSUME_END) + widget->state = TERMINAL_STATE_OUTPUT; + } + if (widget->state == TERMINAL_STATE_OUTPUT && !widget->cursor.hidden && widget->scroll.y == widget->max.y) + Rect2D(widget->backing_store, 2 + (widget->cursor.x * 8), + 2 + (widget->cursor.y * 16), 8, 16, widget->color.cursor); +} + +I64 @umami_input_get_text_width(BitmapFontTextInputWidget* widget) +{ + I64 x; + I64 y; + I64 text_width = PutS2D(NULL, widget->font, 0, 0, Color(0, 0, 0), -1, &widget->text); + + Context2D* ctx = NewContext2D(text_width, widget->font->line_height); + Fill2D(ctx, 0); + PutS2D(ctx, widget->font, 0, 0, Color(128, 255, 255), -1, &widget->text); + + for (x = ctx->width - 1; x > -1; x--) { + for (y = 0; y < ctx->height - 1; y++) { + if (ctx->fb[(ctx->width * y) + x]) { + DelContext2D(ctx); + return x + 2; + } + } + } + DelContext2D(ctx); + return x; +} + +U0 @umami_input_draw_cursor(Window* win, BitmapFontTextInputWidget* widget, + I64 index, I64 x, I64 y, I64 pos) +{ + if (widget->selected_region_start != -1 && widget->selected_region_end != -1) + return; + if (widget == win->focused_widget) { + if (Blink && index == widget->cursor_index) { + VLine2D(win->render_ctx, x + 2 + pos, y + 2, + y + 2 + widget->font->line_height, Color(0, 0, 0)); + } + } +} + +U0 @umami_input_repaint(Window* win, I64 event, + BitmapFontTextInputWidget* widget, I64 x, I64 y) +{ + + if (!widget->font) + widget->font = Compositor.theme.font.sans; + U8* text; + U8 ch[2]; + I64 index; + I64 text_width; + I64 text_x_pos; + ch[1] = NULL; + widget->height = widget->font->line_height + 6; + + HLine2D(win->render_ctx, x, y, x + widget->width, Color(156, 156, 156)); + VLine2D(win->render_ctx, x, y, y + widget->height, Color(156, 156, 156)); + HLine2D(win->render_ctx, x + 1, y + widget->height, x + widget->width, + Color(190, 190, 190)); + VLine2D(win->render_ctx, x + widget->width, y + 1, y + widget->height, + Color(190, 190, 190)); + Rect2D(win->render_ctx, x + 1, y + 1, widget->width - 1, widget->height - 1, + Color(255, 255, 255)); + + if (widget == win->focused_widget) { + HLine2D(win->render_ctx, x + 1, y + 1, x + widget->width - 1, + Color(0, 0, 0)); + VLine2D(win->render_ctx, x + 1, y + 1, y + widget->height - 2, + Color(0, 0, 0)); + HLine2D(win->render_ctx, x + 1, y + widget->height - 1, + x + widget->width - 1, Color(0, 0, 0)); + VLine2D(win->render_ctx, x + widget->width - 1, y + 1, + y + widget->height - 1, Color(0, 0, 0)); + } else { + widget->in_drag = FALSE; + } + + if (!Mouse.left) { + widget->in_drag = FALSE; + widget->mouse_drag_index = -1; + } + + Context2D* text_input_ctx = NewContext2D(widget->width - 4, widget->height); + + if (widget->is_password) { + StrCpy(widget->password, widget->text); + for (text_x_pos = 0; text_x_pos < StrLen(widget->password); text_x_pos++) + widget->password[text_x_pos] = '*'; + } + text = T(widget->is_password, &widget->password, &widget->text); + index = 0; + text_width; + text_x_pos = 0; + while (*text) { + ch[0] = *text; + text_width = PutS2D(NULL, widget->font, 0, 0, Color(0, 0, 0), -1, &ch) + 2; + + if (event == CPZ_MSG_WIN_LEFT_BTN_DOWN && !widget->in_drag && Mouse.x >= win->x + widget->x + -widget->x_offset + text_x_pos && Mouse.x <= win->x + widget->x + -widget->x_offset + text_x_pos + text_width) { + widget->cursor_index = index; + widget->mouse_drag_index = widget->cursor_index - 1; + widget->mouse_drag_origin_x = Mouse.x - win->x - widget->x + widget->x_offset; + } + + if (widget->in_drag) { + if (Mouse.x - win->x - widget->x < widget->mouse_drag_origin_x && Mouse.x >= win->x + widget->x + -widget->x_offset + text_x_pos && Mouse.x <= win->x + widget->x + -widget->x_offset + text_x_pos + text_width) { + widget->selected_region_start = index; + widget->selected_region_end = widget->mouse_drag_index; + } + if (Mouse.x - win->x - widget->x >= widget->mouse_drag_origin_x && Mouse.x >= win->x + widget->x + -widget->x_offset + text_x_pos + text_width) { + widget->selected_region_start = widget->mouse_drag_index + 1; + widget->selected_region_end = index; + } + } + + if (index >= widget->selected_region_start && index <= widget->selected_region_end) { + Rect2D(text_input_ctx, -widget->x_offset + text_x_pos, 0, text_width, + widget->font->line_height + 3, Compositor.theme.color.hilight); + } + if (index >= widget->selected_region_start && index <= widget->selected_region_end) + PutS2D(text_input_ctx, widget->font, -widget->x_offset + text_x_pos, 2, + Color(255, 255, 255), -1, &ch); + else + PutS2D(text_input_ctx, widget->font, -widget->x_offset + text_x_pos, 2, + widget->color, -1, &ch); + + @umami_input_draw_cursor(win, widget, index, x, y, + -widget->x_offset + text_x_pos); + text_x_pos += text_width; + + text++; + index++; + } + + if (event == CPZ_MSG_WIN_LEFT_BTN_DOWN && !widget->in_drag && Mouse.x > win->x + widget->x + -widget->x_offset + text_x_pos && widget == win->focused_widget) { + widget->cursor_index = StrLen(&widget->text); + widget->mouse_drag_index = widget->cursor_index; + widget->mouse_drag_origin_x = Mouse.x - win->x - widget->x; + } + + if (event == CPZ_MSG_WIN_LEFT_BTN_DOWN && widget == win->focused_widget) { + @widget_input_clear_selected_region(widget); + widget->in_drag = TRUE; + } + + if (-widget->x_offset + text_x_pos < text_input_ctx->width) + @umami_input_draw_cursor(win, widget, index, x, y, + -widget->x_offset + text_x_pos); + + Blot2D(win->render_ctx, x + 3, y + 2, text_input_ctx); + DelContext2D(text_input_ctx); +} + +U0 @umami_label_repaint(Window* win, BitmapFontTextLabelWidget* widget, I64 x, + I64 y) +{ + if (!widget->font) + widget->font = Compositor.theme.font.sans; + if (widget->text) + PutS2D(win->render_ctx, widget->font, x, y, widget->color, -1, + widget->text); +} + +U0 @umami_list_view_repaint(Window* win, ListViewWidget* widget, I64 x, I64 y) +{ +} + +U0 @umami_menu_item_repaint(Window* win, MenuItemWidget* widget, I64 x, I64 y) +{ + U32 text_color = Color(0, 0, 0); + I64 text_x = 8; + I64 text_y = 4 + (widget->height / 2) - (16 / 2); + I64 icon_x = 4; + I64 icon_y = 0; + if (widget->icon) { + icon_y = 4 + (widget->height / 2) - (widget->icon->height / 2) - 3; + } + if (@widget_is_hovered(win->x + x, win->y + y, widget)) { + Rect2D(win->render_ctx, x, y, widget->width, widget->height, + Compositor.theme.color.hilight); + text_color = Color(255, 255, 255); + if (widget->submenu) { + Gui.Window.Show(widget->submenu); + Gui.Window.Refresh(widget->submenu); + if (Compositor.GetWindowByZIndex(Compositor.max_z_index - 3) != widget->submenu) { + Gui.Window.SetZIndex(widget->submenu, Compositor.max_z_index - 3); + } + } + } + if (!(@widget_is_hovered(win->x + x, win->y + y, widget))) { + if (widget->submenu) { + Gui.Window.Hide(widget->submenu); + } + } + if (!widget->font) + widget->font = Compositor.theme.font.menu; + if (widget->icon) { + Blot2D(win->render_ctx, x + icon_x, y + icon_y, widget->icon); + text_x += 20; + } + if (widget->text) + PutS2D(win->render_ctx, widget->font, x + text_x, y + text_y, + T(widget->color, widget->color, text_color), -1, widget->text); +} + +U0 @umami_radio_repaint(Window* win, RadioButtonWidget* widget, I64 x, I64 y) +{ + if (widget == win->mouse_down_widget && + @widget_is_hovered(win->x + x, win->y + y, widget)) { + Blot2D(win->render_ctx, x, y, + T(widget->selected, umami_widget_radio_selected, + umami_widget_radio_active)); + return; + } + if (widget == win->mouse_down_widget->echo && widget != win->mouse_down_widget && !widget->selected && + @widget_is_hovered(win->x + x, win->y + y, win->mouse_down_widget)) { + Blot2D(win->render_ctx, x, y, + T(win->mouse_down_widget(RadioButtonWidget*)->selected, + umami_widget_radio_selected, umami_widget_radio_active)); + return; + } + Blot2D(win->render_ctx, x, y, + T(widget->selected, umami_widget_radio_selected, umami_widget_radio)); +} + +U0 @umami_radio_select(Window* win, RadioButtonWidget* widget) +{ + @window_widgets_list* widgets_list; + widgets_list = win->widget; + while (widgets_list) { + if (widgets_list->widget && widgets_list->widget->type == WIDGET_TYPE_RADIO) + if (widgets_list->widget(RadioButtonWidget*)->group == widget->group) + widgets_list->widget(RadioButtonWidget*)->selected = T(widgets_list->widget == widget, TRUE, FALSE); + widgets_list = widgets_list->next; + } +} + +Bool @umami_horz_slider_bar_is_hovered(I64 x, I64 y, Widget* widget) +{ + no_warn y; + if (Mouse.x > x - 7 && Mouse.x < x + widget->width + 7) + return TRUE; + return FALSE; +} + +Bool @umami_horz_slider_is_hovered(Window* win, HorizontalSliderWidget* widget, + I64 x, I64 y, I64 scroll_pos) +{ + if (@widget_is_hovered(win->x + x, win->y + y - 24, widget) && Mouse.x > -4 + (win->x + widget->x - 7) + scroll_pos && Mouse.x < (win->x + widget->x - 7) + scroll_pos + 16) + return TRUE; + return FALSE; +} + +U0 @umami_horz_slider_repaint(Window* win, I64 event, + HorizontalSliderWidget* widget, I64 x, I64 y) +{ + I64 scroll = widget->scroll; + widget->height = 12; + if (widget->in_drag && + @umami_horz_slider_bar_is_hovered(win->x + x, win->y + y - 24, widget)) { + if (widget->origin.mouse_x != Mouse.x) { + widget->scroll += (Mouse.x - widget->origin.mouse_x); + widget->origin.mouse_x = Mouse.x; + } + } + + Rect2D(win->render_ctx, x, y + 5, widget->width, 4, Color(156, 156, 156)); + if (@umami_horz_slider_is_hovered(win, widget, x, y, widget->scroll) && event == CPZ_MSG_WIN_LEFT_BTN_DOWN) { + win->mouse_down_widget = widget; + widget->origin.mouse_x = Mouse.x; + widget->in_drag = TRUE; + } else { + if (@widget_is_hovered(win->x + x, win->y + y, widget) && event == CPZ_MSG_WIN_LEFT_BTN_DOWN) { + widget->scroll = (Mouse.x - win->x - x + 2); + widget->origin.mouse_x = Mouse.x; + widget->in_drag = TRUE; + } + } + + if (@widget_is_hovered(win->x + x, win->y + y, widget) && event == CPZ_MSG_WIN_MOUSE_WHEEL) { + widget->scroll -= Compositor.mouse.z; + } + + widget->scroll = Max(0, widget->scroll); + widget->scroll = Min(widget->width - 1, widget->scroll); + widget->value = ToI64((widget->max * 1.0) / (widget->width * 1.0) * (widget->scroll * 1.0)); + + if (!Mouse.left) + widget->in_drag = FALSE; + + HLine2D(win->render_ctx, x, y + 1, x + widget->width, Color(190, 190, 190)); + HLine2D(win->render_ctx, x + 1, y + 4, x + widget->width, Color(0, 0, 0)); + VLine2D(win->render_ctx, x + 1, y + 4, y + 8, Color(0, 0, 0)); + VLine2D(win->render_ctx, x, y + 4, y + 9, Color(190, 190, 190)); + HLine2D(win->render_ctx, x, y + 9, x + widget->width, Color(255, 255, 255)); + VLine2D(win->render_ctx, x + widget->width, y + 4, y + 9, + Color(255, 255, 255)); + + VLine2D(win->render_ctx, x, y + 11, y + 16, Color(190, 190, 190)); + VLine2D(win->render_ctx, x + 1, y + 11, y + 16, Color(255, 255, 255)); + + VLine2D(win->render_ctx, x + (widget->width / 2) - 1, y + 11, y + 16, + Color(190, 190, 190)); + VLine2D(win->render_ctx, x + (widget->width / 2), y + 11, y + 16, + Color(255, 255, 255)); + + VLine2D(win->render_ctx, x + widget->width - 1, y + 11, y + 16, + Color(190, 190, 190)); + VLine2D(win->render_ctx, x + widget->width, y + 11, y + 16, + Color(255, 255, 255)); + + Blot2D(win->render_ctx, (x - 7) + widget->scroll, y, + umami_widget_horz_slider); + + if (widget->scroll != scroll) + widget->change = TRUE; +} + +Bool @umami_vert_slider_bar_is_hovered(I64 x, I64 y, Widget* widget) +{ + no_warn x; + if (Mouse.y > y - 7 && Mouse.y < y + widget->height + 7) + return TRUE; + return FALSE; +} + +Bool @umami_vert_slider_is_hovered(Window* win, VerticalSliderWidget* widget, + I64 x, I64 y, I64 scroll_pos) +{ + if (@widget_is_hovered(win->x + x - 24, win->y + y, widget) && Mouse.y > -4 + (win->y + widget->y - 7) + scroll_pos && Mouse.y < (win->y + widget->y - 7) + scroll_pos + 16) + return TRUE; + return FALSE; +} + +U0 @umami_vert_slider_repaint(Window* win, I64 event, + VerticalSliderWidget* widget, I64 x, I64 y) +{ + I64 scroll = widget->scroll; + widget->width = 12; + if (widget->in_drag && + @umami_vert_slider_bar_is_hovered(win->x + x, win->y + y, widget)) { + if (widget->origin.mouse_y != Mouse.y) { + widget->scroll += (Mouse.y - widget->origin.mouse_y); + widget->origin.mouse_y = Mouse.y; + } + } + Rect2D(win->render_ctx, x + 5, y, 4, widget->height, Color(156, 156, 156)); + if (@umami_horz_slider_is_hovered(win, widget, x, y, widget->scroll) && event == CPZ_MSG_WIN_LEFT_BTN_DOWN) { + win->mouse_down_widget = widget; + widget->origin.mouse_y = Mouse.y; + widget->in_drag = TRUE; + } else { + if (@widget_is_hovered(win->x + x, win->y + y, widget) && event == CPZ_MSG_WIN_LEFT_BTN_DOWN) { + widget->scroll = (Mouse.y - win->y - y + 1); + widget->origin.mouse_y = Mouse.y; + widget->in_drag = TRUE; + } + } + if (@widget_is_hovered(win->x + x, win->y + y, widget) && event == CPZ_MSG_WIN_MOUSE_WHEEL) { + widget->scroll += Compositor.mouse.z; + } + widget->scroll = Max(0, widget->scroll); + widget->scroll = Min(widget->height - 1, widget->scroll); + widget->value = ToI64((widget->max * 1.0) / (widget->height * 1.0) * (widget->scroll * 1.0)); + if (!Mouse.left) + widget->in_drag = FALSE; + VLine2D(win->render_ctx, x + 1, y, y + widget->height, Color(190, 190, 190)); + VLine2D(win->render_ctx, x + 4, y + 1, y + widget->height, Color(0, 0, 0)); + HLine2D(win->render_ctx, x + 4, y, x + 9, Color(0, 0, 0)); + VLine2D(win->render_ctx, x + 9, y, y + widget->height, Color(255, 255, 255)); + HLine2D(win->render_ctx, x + 4, y + widget->height, x + 9, + Color(255, 255, 255)); + HLine2D(win->render_ctx, x + 11, y, x + 16, Color(190, 190, 190)); + HLine2D(win->render_ctx, x + 11, y + 1, x + 16, Color(255, 255, 255)); + HLine2D(win->render_ctx, x + 11, y + (widget->height / 2) - 1, x + 16, + Color(190, 190, 190)); + HLine2D(win->render_ctx, x + 11, y + (widget->height / 2), x + 16, + Color(255, 255, 255)); + HLine2D(win->render_ctx, x + 11, y + widget->height - 1, x + 16, + Color(190, 190, 190)); + HLine2D(win->render_ctx, x + 11, y + widget->height, x + 16, + Color(255, 255, 255)); + Blot2D(win->render_ctx, x, (y - 7) + widget->scroll, + umami_widget_vert_slider); + + if (widget->scroll != scroll) + widget->change = TRUE; +} + +U0 @umami_vert_scroll_button_repaint(Window* win, I64 x, I64 y, I64 width, + I64 height) +{ + I64 i; + + Rect2D(win->render_ctx, x, y, width, height, Color(192, 192, 192)); + for (i = 0; i < height; i++) { + Line2D(win->render_ctx, x, y, x, y + height - 1, Color(192, 192, 192)); + Line2D(win->render_ctx, x + 1, y, x + 1, y + height - 1, + Color(255, 255, 255)); + Line2D(win->render_ctx, x + 14, y, x + width - 2, y + height - 1, + Color(128, 128, 128)); + Line2D(win->render_ctx, x + 15, y, x + width - 1, y + height - 1, + Color(64, 64, 64)); + } + + Plot2D(win->render_ctx, x + 1, y, Color(192, 192, 192)); + Plot2D(win->render_ctx, x + 14, y, Color(192, 192, 192)); + Plot2D(win->render_ctx, x + 15, y, Color(64, 64, 64)); + + Line2D(win->render_ctx, x + 1, y + 1, x + width - 2, y + 1, + Color(255, 255, 255)); + Plot2D(win->render_ctx, x + 14, y + 1, Color(128, 128, 128)); + Plot2D(win->render_ctx, x + 15, y + 1, Color(64, 64, 64)); + + Line2D(win->render_ctx, x + 1, y + height - 2, x + width - 2, y + height - 2, + Color(128, 128, 128)); + + Line2D(win->render_ctx, x, y + height - 1, x + width - 1, y + height - 1, + Color(64, 64, 64)); +} + +U0 @umami_vert_scrollbar_repaint(Window* win, I64 event, + VerticalScrollBarWidget* widget, I64 x, + I64 y) +{ + I64 scroll = widget->scroll; + I64 segment_length = widget->length; + I64 i, j; + Bool fill = TRUE; + + if (widget->in_drag && Mouse.y > win->y + widget->y && Mouse.y < win->y + widget->y + widget->height) { + if (widget->origin.mouse_y != Mouse.y) { + widget->scroll += (Mouse.y - widget->origin.mouse_y); + widget->origin.mouse_y = Mouse.y; + } + } + if (@widget_is_hovered(win->x + x, win->y + y, widget) && event == CPZ_MSG_WIN_LEFT_BTN_DOWN) { + if (Mouse.y > win->y + y + 16 && Mouse.y < win->y + y + widget->height - 16) { + widget->scroll = (Mouse.y - win->y - y - (widget->length / 2)); + widget->origin.mouse_y = Mouse.y; + widget->in_drag = TRUE; + } + } + if (@widget_is_hovered(win->x + x, win->y + y, widget) && event == CPZ_MSG_WIN_MOUSE_WHEEL) { + widget->scroll += Compositor.mouse.z; + } + widget->scroll = Max(16, widget->scroll); + widget->scroll = Min(widget->height - 1, widget->scroll); + while (widget->scroll + segment_length > widget->height - 16) + widget->scroll--; + widget->value = ToI64((widget->max * 1.0) / (widget->height * 1.0) * (widget->scroll * 1.0)); + if (!Mouse.left) + widget->in_drag = FALSE; + + Rect2D(win->render_ctx, x, y, widget->width, widget->height, + Color(127, 127, 127)); + + for (i = 0; i < widget->width; i++) { + for (j = 16; j < widget->height - 16; j++) { + if (fill) + Plot2D(win->render_ctx, i + x, j + y, Color(255, 255, 255)); + fill = !fill; + } + fill = !fill; + } + + @umami_vert_scroll_button_repaint(win, x, y, widget->width, 16); + @umami_vert_scroll_button_repaint(win, x, y + widget->height - 16, + widget->width, 16); + + Blot2D(win->render_ctx, x, y, umami_widget_sb_up_button); + Blot2D(win->render_ctx, x, y + widget->height - 16, + umami_widget_sb_down_button); + + @umami_vert_scroll_button_repaint(win, x, y + widget->scroll, widget->width, + segment_length); + + if (widget->scroll != scroll) + widget->change = TRUE; +} + +U0 @umami_widgets_repaint(Window* win, I64 event, I64 origin_x, I64 origin_y) +{ + @window_widgets_list* widgets_list; + Widget* widget; + Context2D* ctx; + Bool widget_is_hovered; + I64 x, y; + F64 ttf_point_to_size; + no_warn ctx; + no_warn ttf_point_to_size; + + if (event == CPZ_MSG_WIN_LEFT_BTN_DOWN) + win->focused_widget = NULL; + + widget_is_hovered = FALSE; + widgets_list = win->widget; + while (widgets_list) { + if (widgets_list->widget) { + widget = widgets_list->widget; + x = win->x + origin_x + widget->x; + y = win->y + origin_y + widget->y; + + if (@gui_window_is_hovered(win) && @widget_is_hovered(x, y, widget)) { + win->hovered_widget = widget; + widget_is_hovered = TRUE; + } + + if (@widget_is_hovered(x, y, widget) && event == CPZ_MSG_WIN_LEFT_BTN_DOWN) { + win->focused_widget = widget; + win->mouse_down_widget = widget; + break; + } + } + widgets_list = widgets_list->next; + } + + if (!widget_is_hovered) + win->hovered_widget = NULL; + + if (!Mouse.left && win->mouse_down_widget) { + widget = win->mouse_down_widget; + x = win->x + origin_x + widget->x; + y = win->y + origin_y + widget->y; + if (@widget_is_hovered(x, y, widget) && widget->callback.clicked) + widget->callback.clicked(widget); + if (@widget_is_hovered(x, y, widget) && widget->echo) { + if (widget->echo->callback.clicked) + widget->echo->callback.clicked(widget->echo); + } + if (@widget_is_hovered(x, y, widget)) { + switch (widget->type) { + case WIDGET_TYPE_CHECKBOX: + widget(CheckBoxWidget*)->checked = !widget(CheckBoxWidget*)->checked; + break; + case WIDGET_TYPE_RADIO: + @umami_radio_select(win, widget); + break; + default: + break; + } + } + if (@widget_is_hovered(x, y, widget) && widget->echo) { + switch (widget->echo->type) { + case WIDGET_TYPE_CHECKBOX: + widget->echo(CheckBoxWidget*)->checked = !widget->echo(CheckBoxWidget*)->checked; + break; + case WIDGET_TYPE_RADIO: + @umami_radio_select(win, widget->echo); + break; + default: + break; + } + } + win->mouse_down_widget = NULL; + } + + widgets_list = win->widget; + while (widgets_list) { + if (widgets_list->widget) { + widget = widgets_list->widget; + x = origin_x + widget->x; + y = origin_y + widget->y; + if (x > win->width - 12 || y > win->height - 12) + goto @umami_skip_widget_repaint; + switch (widget->type) { + case NULL: + break; + case WIDGET_TYPE_BUTTON: + @umami_button_repaint(win, widget, x, y); + break; + case WIDGET_TYPE_CHECKBOX: + @umami_checkbox_repaint(win, widget, x, y); + break; + case WIDGET_TYPE_TERMINAL: + @umami_terminal_repaint(win, widget, x, y); + if (widget->backing_store) + CopyRect2D(win->render_ctx, x, y, widget->backing_store); + break; + case WIDGET_TYPE_CONTEXT2D: + if (widget(Context2DWidget*)->ctx) + if (widget(Context2DWidget*)->fast_copy) + CopyRect2D(win->render_ctx, x, y, widget(Context2DWidget*)->ctx); + else + Blot2D(win->render_ctx, x, y, widget(Context2DWidget*)->ctx); + break; + case WIDGET_TYPE_RADIO: + @umami_radio_repaint(win, widget, x, y); + break; + case WIDGET_TYPE_INPUT: + @umami_input_repaint(win, event, widget, x, y); + break; + case WIDGET_TYPE_LABEL: + @umami_label_repaint(win, widget, x, y); + break; + case WIDGET_TYPE_LISTVIEW: + @umami_list_view_repaint(win, widget, x, y); + break; + case WIDGET_TYPE_MENU_ITEM: + @umami_menu_item_repaint(win, widget, x, y); + break; + case WIDGET_TYPE_HORZ_SLIDER: + @umami_horz_slider_repaint(win, event, widget, x, y); + break; + case WIDGET_TYPE_VERT_SLIDER: + @umami_vert_slider_repaint(win, event, widget, x, y); + break; + case WIDGET_TYPE_HORZ_SCROLLBAR: + //@umami_horz_scrollbar_repaint(win, event, widget, x, y); + break; + case WIDGET_TYPE_VERT_SCROLLBAR: + @umami_vert_scrollbar_repaint(win, event, widget, x, y); + break; + default: + break; + } + if (widget->change) { + if (widget->callback.change) + widget->callback.change(widget); + if (widget->echo) { + if (widget->echo->callback.change) + widget->echo->callback.change(widget); + } + widget->change = FALSE; + } + } + @umami_skip_widget_repaint : widgets_list = widgets_list->next; + } +} + +U0 @umami_window_repaint(Window* win, I64 event) +{ + if (!win) + return; + + win->repainting = TRUE; + + win->render_ctx->width = win->width; + win->render_ctx->height = win->height; + if (!@gui_window_flag_is_set(win, WIN_FLAGS_NOFILL)) + MemSetU32(win->render_ctx->fb, Color(204, 204, 204, win->opacity), + win->width * win->height); + + I64 title_bar_x; + I64 title_bar_y; + I64 title_bar_width; + I64 title_bar_height = 0; + I64 window_button_x; + I64 origin_title_width; + I64 pass; + Bool repaint; + U8 window_title[1024]; + + if (@gui_window_flag_is_set(win, WIN_FLAGS_TITLE_BAR)) { + title_bar_height = 17; + } + + I64 widget_origin_x = 4; + I64 widget_origin_y = 4; + if (title_bar_height) + widget_origin_y = 7 + title_bar_height; + + @umami_widgets_repaint(win, event, widget_origin_x, widget_origin_y); + + // Draw window margins + if (!@gui_window_flag_is_set(win, WIN_FLAGS_NOFILL)) { + Rect2D(win->render_ctx, 0, 0, win->width, 4, + Color(204, 204, 204, win->opacity)); + Rect2D(win->render_ctx, 0, win->height - 4, win->width, 4, + Color(204, 204, 204, win->opacity)); + Rect2D(win->render_ctx, 0, 0, 4, win->height, + Color(204, 204, 204, win->opacity)); + Rect2D(win->render_ctx, win->width - 5, 0, 4, win->height, + Color(204, 204, 204, win->opacity)); + } + + // Draw window border + Line2D(win->render_ctx, 0, 0, win->width - 1, 0, + Color(255, 255, 255, win->opacity)); + Line2D(win->render_ctx, 0, 0, 0, win->height - 2, + Color(255, 255, 255, win->opacity)); + Line2D(win->render_ctx, 1, win->height - 1, win->width - 1, win->height - 1, + Color(156, 156, 156, win->opacity)); + Line2D(win->render_ctx, win->width - 1, 1, win->width - 1, win->height - 1, + Color(156, 156, 156, win->opacity)); + + title_bar_width = 0; + + if (@gui_window_flag_is_set(win, WIN_FLAGS_TITLE_BAR)) { + title_bar_x = 4; + title_bar_y = 4; + title_bar_width = win->width - 8; + + if (@gui_window_flag_is_set(win, WIN_FLAGS_ICON)) { + if (win->icon) + Blot2D(win->render_ctx, 4, 4, win->icon); + else + Blot2D(win->render_ctx, 4, 4, umami_default_icon); + title_bar_x = 24; + title_bar_width -= 20; + } + + origin_title_width = title_bar_width; + + repaint = FALSE; + + for (pass = 0; pass < 2; pass++) { + title_bar_width = origin_title_width; + window_button_x = win->width - 20; + if (@gui_window_flag_is_set(win, WIN_FLAGS_CLOSE_BUTTON)) { + if (pass) { + if (win->mouse.x > window_button_x && win->mouse.x < window_button_x + 16 && win->mouse.y > 5 && win->mouse.y < 21 && win->button.close) { + CopyRect2D(umami_title_bar_button, -32, -1, + umami_min_max_close_pressed); + if (!Mouse.left && win->callback.close) + win->callback.close(win); + } else + CopyRect2D(umami_title_bar_button, -32, -1, umami_min_max_close); + CopyRect2D(win->render_ctx, window_button_x, 5, + umami_title_bar_button); + } + if (win->left_btn_down.x > window_button_x && win->left_btn_down.x < window_button_x + 16 && win->left_btn_down.y > 5 && win->left_btn_down.y < 21 && Mouse.left && !win->button.close) { + win->button.close = TRUE; + repaint = TRUE; + } + window_button_x -= 16; + title_bar_width -= 17; + } + if (@gui_window_flag_is_set(win, WIN_FLAGS_MAX_BUTTON)) { + if (pass) { + if (win->mouse.x > window_button_x && win->mouse.x < window_button_x + 16 && win->mouse.y > 5 && win->mouse.y < 21 && win->button.maximize) { + CopyRect2D(umami_title_bar_button, -16, -1, + umami_min_max_close_pressed); + if (!Mouse.left && win->callback.maximize) + win->callback.maximize(win); + } + + else + CopyRect2D(umami_title_bar_button, -16, -1, umami_min_max_close); + CopyRect2D(win->render_ctx, window_button_x, 5, + umami_title_bar_button); + } + if (win->left_btn_down.x > window_button_x && win->left_btn_down.x < window_button_x + 16 && win->left_btn_down.y > 5 && win->left_btn_down.y < 21 && Mouse.left && !win->button.maximize) { + win->button.maximize = TRUE; + repaint = TRUE; + } + window_button_x -= 16; + title_bar_width -= 17; + } + if (@gui_window_flag_is_set(win, WIN_FLAGS_MIN_BUTTON)) { + if (pass) { + if (win->mouse.x > window_button_x && win->mouse.x < window_button_x + 16 && win->mouse.y > 5 && win->mouse.y < 21 && win->button.minimize) { + CopyRect2D(umami_title_bar_button, 0, -1, + umami_min_max_close_pressed); + if (!Mouse.left && win->callback.minimize) + win->callback.minimize(win); + } else + CopyRect2D(umami_title_bar_button, 0, -1, umami_min_max_close); + CopyRect2D(win->render_ctx, window_button_x, 5, + umami_title_bar_button); + } + if (win->left_btn_down.x > window_button_x && win->left_btn_down.x < window_button_x + 16 && win->left_btn_down.y > 5 && win->left_btn_down.y < 21 && Mouse.left && !win->button.minimize) { + win->button.minimize = TRUE; + repaint = TRUE; + } + window_button_x -= 16; + title_bar_width -= 17; + } + } + + if (!Mouse.left) { + if (win->button.close) + repaint = TRUE; + if (win->button.maximize) + repaint = TRUE; + if (win->button.minimize) + repaint = TRUE; + win->button.close = FALSE; + win->button.maximize = FALSE; + win->button.minimize = FALSE; + } + + if (repaint) { + @umami_window_repaint(win, event); + return; + } + + if (title_bar_width) { + win->title_bar_x = title_bar_x; + win->title_bar_width = title_bar_width; + } + + StrCpy(&window_title, &win->title); + if (win == Compositor.active_win) { + HGradientRect2D(win->render_ctx, title_bar_x, title_bar_y, + title_bar_width, title_bar_height, + Color(10, 36, 106, win->opacity), + Color(165, 201, 239, win->opacity)); + // Color(85, 18, 132, win->opacity), + // Color(233, 15, 240, win->opacity)); + PutS2D(win->render_ctx, Compositor.theme.font.menu, title_bar_x + 4, + title_bar_y + 4, Color(255, 255, 255, win->opacity), + title_bar_width, &window_title); + } else { + Rect2D(win->render_ctx, title_bar_x, title_bar_y, title_bar_width, + title_bar_height, Color(235, 235, 235, win->opacity)); + PutS2D(win->render_ctx, Compositor.theme.font.menu, title_bar_x + 4, + title_bar_y + 4, Color(156, 156, 156, win->opacity), + title_bar_width, &window_title); + } + + Line2D(win->render_ctx, title_bar_x, title_bar_y, + title_bar_x + title_bar_width - 1, title_bar_y, + Color(156, 156, 156, win->opacity)); + Line2D(win->render_ctx, title_bar_x, title_bar_y, title_bar_x, + title_bar_y + title_bar_height - 2, + Color(156, 156, 156, win->opacity)); + + Line2D(win->render_ctx, title_bar_x + title_bar_width - 1, title_bar_y, + title_bar_x + title_bar_width - 1, + title_bar_y + title_bar_height - 1, + Color(255, 255, 255, win->opacity)); + Line2D(win->render_ctx, title_bar_x, title_bar_y + title_bar_height - 1, + title_bar_x + title_bar_width - 1, + title_bar_y + title_bar_height - 1, + Color(255, 255, 255, win->opacity)); + + if (@gui_window_flag_is_set(win, WIN_FLAGS_RESIZABLE)) + Blot2D(win->render_ctx, win->width - 16, win->height - 16, + umami_corner_resize); + } + + win->backing_store->width = win->render_ctx->width; + win->backing_store->height = win->render_ctx->height; + if (!@gui_window_flag_is_set(win, WIN_FLAGS_NOFILL)) + MemCpyU32(win->backing_store->fb, win->render_ctx->fb, + win->render_ctx->width * win->render_ctx->height); + if (@gui_window_flag_is_set(win, WIN_FLAGS_NOFILL)) + MemCpyU32(win->backing_store->fb, win->render_ctx->fb, (win->width) * 20); + + win->repainting = FALSE; +} + +Compositor.theme.color.active_border = Color(0, 0, 0); +Compositor.theme.color.hilight = Color(8, 33, 107); + +BitmapFont* @umami_theme_bitmapfont_001 = @bitmapfont_new_from_context2d( + Image.FileToContext2D("M:/Media/Themes/Umami/BitmapFont/menu.png"), + "Eight Bit Dragon", + "`1234567890-=[]\;',./" + "~!@#\d%^&*()_+{}|:\"<>?" + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); +@umami_theme_bitmapfont_001->line_height = 12; +BitmapFonts.Add(@umami_theme_bitmapfont_001); + +BitmapFont* @umami_theme_bitmapfont_002 = @bitmapfont_new_from_context2d( + Image.FileToContext2D("M:/Media/Themes/Umami/BitmapFont/sans.png"), + "Nineteen Ninety Three", + "`1234567890-=[]\;',./" + "~!@#\d%^&*()_+{}|:\"<>?" + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); +@umami_theme_bitmapfont_002->line_height = 10; +BitmapFonts.Add(@umami_theme_bitmapfont_002); + +BitmapFont* @umami_theme_bitmapfont_003 = @bitmapfont_new_from_context2d( + Image.FileToContext2D("M:/Media/Themes/Umami/BitmapFont/monospace.png"), + "Spleen", + " !\"#\d%&'()*+,-./" + "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`" + "abcdefghijklmnopqrstuvwxyz{|}~", + 7); +@umami_theme_bitmapfont_003->line_height = 16; +BitmapFonts.Add(@umami_theme_bitmapfont_003); + +Compositor.theme.font.menu = BitmapFonts.GetByName("Eight Bit Dragon"); +Compositor.theme.font.sans = BitmapFonts.GetByName("Nineteen Ninety Three"); +Compositor.theme.font.monospace = BitmapFonts.GetByName("Spleen"); + +Compositor.theme.window.min_width = 128; +Compositor.theme.window.min_height = 128; + +Compositor.theme.window_repaint = &@umami_window_repaint; + +Context2D** umami_pointer_wait_frames = CAlloc(sizeof(Context2D*) * 18); +Context2D* umami_pointer_wait_anim = Image.FileToContext2D("M:/Media/Themes/Umami/Pointer/wait.png"); + +U0 @umami_pointer_wait_anim_init() +{ + I64 i; + for (i = 0; i < 18; i++) { + umami_pointer_wait_frames[i] = NewContext2D(24, 24); + Blot2D(umami_pointer_wait_frames[i], 0, -(24 * i), umami_pointer_wait_anim); + } + DelContext2D(umami_pointer_wait_anim); +} + +@umami_pointer_wait_anim_init; +Compositor.theme.pointer.wait = Animation2D.NewFromFrames(umami_pointer_wait_frames, 18, 50); \ No newline at end of file diff --git a/Media/Themes/Umami/Widget/checkbox.png b/Media/Themes/Umami/Widget/checkbox.png new file mode 100644 index 0000000000000000000000000000000000000000..39eed00579691bce6c22cdf04ccc4d125cc6d401 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE)4%caKYZ?lNlHo zI14-?iy0WWg+Z8+Vb&Z81_lQ95>H=O_Q!0DEK-USwh9X{Ffd4#xJHyX=jZ08=9Mrw z7o{eaq^2m8XO?6rxO@5rgg5euGcYg&db&7zv5SRu-3m%d eN=o&gn3noD-mT2F=wV=BVDNPHb6Mw<&;$T~8A$^G literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Widget/checkbox_active.png b/Media/Themes/Umami/Widget/checkbox_active.png new file mode 100644 index 0000000000000000000000000000000000000000..57eedc0eb2ec327a9fefaf31c5dae6bbae7efeb0 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I7G?$phQ^Te;|vT8oCO|{#S9GG!XV7ZFl&wk z0|NtliKnkC`(rjn7J0SeWkuf@7#Ji=Tq8=H^K)}k^GX<;i&7IyQd1PlGfOfQ+&z5* z!W;R-85kIZ0(?ST85kH65)yXo*m2{=jTbLo{Qv*ovi9{(1_lPkk|4ie28U-i(mS|xv6<249-QVi6yBi3gww484B*6z5(Hl zeBulY459%(A+8KykdTnDW5Vwgjdu>RDj1tltWZR#8s3- xgy-mbro%iu(FS)OGBJ5DrDZBKs2Ff*urgd?7ME5vSls|}fv2mV%Q~loCIB1cLMZ?M literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Widget/horz_slider.png b/Media/Themes/Umami/Widget/horz_slider.png new file mode 100644 index 0000000000000000000000000000000000000000..9d3fb382eb3144b6c80ed8c28292aeb0e0617f28 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I7G?$phQ^Te;|vT8oCO|{#S9GG!XV7ZFl&wk z0|NtliKnkC`(rjSF+r7!?rJ#<3=Gl%J|V6QU{Fy}F=4`l6DLkwzkdDw`}ZF{eE846 z;3IxUl!1YPu_VYZn8D%MjWiG^$=lt9qwU_*Dh37yJ5LwK5RLQ696?PCY!U(b?F@`2 zjY*0ojOikb#U_mk~$XUsseLC%?$= P2D!k~)z4*}Q$iB}SnxkE literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Widget/radio.png b/Media/Themes/Umami/Widget/radio.png new file mode 100644 index 0000000000000000000000000000000000000000..15963bf1ee5f601aab547d0178f6437efd9c05a2 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I7G?$phQ^Te;|vT8oCO|{#S9GG!XV7ZFl&wk z0|NtliKnkC`(rjn7JUWR=7$Ch3=EPbt`Q~9`MJ5Nc_j?aMX8A;sVNHOnI#zt?w-B@ z;f;La3=9nX0X`wF3=9kj2?;xP?6`5`#{d8Sm%mx1%)r3FSQ6wH%;50sMjD8dH_!@hljQC0!Y-EB@tT2wA=1;uF+^ixazX+JFK>ba+rneVmYq;qbF8W9&`S>{oi;D8 zrV~sDonCo$C9$4ha(%(%HG`>1gQ>}@OM_`mTT_$9whhZTxw;g&4W=w#x>Vd?LC2KE fpWGQ+85l&R1w{XU>H5yVz`)??>gTe~DWM4fd?{Ac literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Widget/sb_down_button.png b/Media/Themes/Umami/Widget/sb_down_button.png new file mode 100644 index 0000000000000000000000000000000000000000..0a80796323e775af4587a975a93612acdf541e5c GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;IMrH;E2G1=owlgp=um$*pxH5pj()69@85kHC zOM?7@862M7NMm4NkoI(O4B@z*oN$2qhrEG-!CwZ!dOn7oJv?977<719I={XaJPXq7 M>FVdQ&MBb@0Eqz|1^@s6 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Widget/sb_left_button.png b/Media/Themes/Umami/Widget/sb_left_button.png new file mode 100644 index 0000000000000000000000000000000000000000..dadd1627fbb29f05207272722a5dc9646944fe59 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;IMrH;E2G1=owlgp=um$*pxH5pj()69@85kHC zOM?7@862M7NMm4NknwbJ4B@z*oN$0ms$qtpi$OC-nFY5F+q9+P3=G?fnJ2`zZuSQ0 N_H^}gS?83{1OS7i91Z{g literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Widget/sb_right_button.png b/Media/Themes/Umami/Widget/sb_right_button.png new file mode 100644 index 0000000000000000000000000000000000000000..8d328a3f7aa06aa189fbc8f031a96fc83cc493c1 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;IMrH;E2G1=owlgp=um$*pxH5pj()69@85kHC zOM?7@862M7NMm4Nkn(hK4B?1QPB_3c!-2(kMh1f*`vaXFI(r!y9*QttNiASj1nKp3 L^>bP0l+XkKLMs~v literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Widget/sb_up_button.png b/Media/Themes/Umami/Widget/sb_up_button.png new file mode 100644 index 0000000000000000000000000000000000000000..49e70bed677787d97ca38dde20e3bcd8d477acb7 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;IMrH;E2G1=owlgp=um$*pxH5pj()69@85kHC zOM?7@862M7NMm4NkoI(O4B@z*oN$0!qH#v&N=A|Z`TRp2BdpgY5I)xx|@D|S!cyzhu1qu@@~DD^IrGh>JxnL#px)rq;aH7UY{d+;?dMC+%_(znj7EhS(Hs-U|?Wayp!SGmgf)r?i^hP O;(EIJxvX^X_+~x z3MG{VsS2qTnQ06R6}R3_i!FPi!P9y_@~93YXUmbIAGYab7f#RTF0%}sdQQc1?w8;* z8yB|docw-x$DJQv-v;kE`Gb^AATQvw~n(- za{>Qxf8FKvjj?fgJDx81l~G=HZo}Nh6ZT8^v_DII|E-kx{IK6go+-x-J#K#4ccqFg zYx!fnr#6p6uU%Yw|J}g_0V}zMSf2@M{HWc!xT#M-4ap3>=<+Fow?JHdXuNe$h={pK=|U5QbjKgI;{Ixpm^X+xbBwE&*rY5s93DN!$?u$ z;WYEvzxSU!Z(^PvEi`evxAv8z*|CdzT=QZdvMQMP=WSx$w^exm{%HG%RSFu>X@{A` z;`;?cU!>-?p0zySe?fk|faTkC29K6IO-ULJ4gMl6LY1juN-r`PLINz?Pl&R3v{-jN zk#I^{p0lUuvE0(Prw?^bm#h|c;JBy5I$MS-;iyK0y%cZu3XcgIN}eHSJf}@^>hcWo znsrSr+$1C9;*wR%BD-0;)u#EJ)rmeihxwbsNzLqSbBZUVu)K^^e>@{Ecbh)@`#N1c9ENkDoh#3n!_E1>Y%^+r?pLS2fE$)e!@q9`B zR)el7M~{_89ceJ&OPX1-v0CxFVxHd{=Q}@ai}Du!<|^WQ5m)@1ck8}=#ks=P_YN&x z$zSo?zlIl$A|8J3Y47&Io< zPPFwn>>zVAK6tB=E}z(xM-vuWMGA-(UeOX+=(IvKs?=cT7w%amD!O`oP1y$z_8(o< z+`V}n-?}D+AB>Nlyjb!=N%fz;=9Z3+4|d4Ee`ovd9;4IZGbXFEWiEVKHPh?JQJ=C< zo;{1$8F`eNCY;ep_M0^6gG~JQ4?(#8u1z1TM|S}Eu+=pO33yhicy zrc;&Oo5R*^yk`58yV?f6_K63SrYShKG)Z}BEbfw6Yo#d`v_<~=2X~qME_$so zss=?m3z&E}J!b#keE)9L&y$?yniA~0;&Xl{vv9m&I=d^kUjBC3XO<84%;8nH<1-nI z=P$W_JL(I^i~DSP>u%55#2)jG!P&np=TzU5<(f}EANVa<8!RTVgZ0<7JNKe~ThuaK zx)S<{&BB7kjeE-8cOT!~J9qD&?d4bR*;Q8*b?{{Vna04tz?S6g?!xdN1Q+aGKAC}m zfwRCPvY3H^TNs2H8D`CqU|?WiFY)wsWq-oP!D!6#)9`630|SGbr;B4q#NoGB4stRW zaIiT3UVku7|9%ZitxD6o5QXXml3aIU-@1ETy7wkm_|DC8AA!{WR*q9@-?7Ymb6)*K i%Kh&h3=9m%tPibr5kK&1YXk!W1B0ilpUXO@geCyK43wMz literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Window/min_max_close.png b/Media/Themes/Umami/Window/min_max_close.png new file mode 100644 index 0000000000000000000000000000000000000000..d03a45ded519536760e8ff9f052d035befd53489 GIT binary patch literal 650 zcmeAS@N?(olHy`uVBq!ia0y~yU@%}{U=UzoW?*1g)bOy0fq}6l)7d$|)7e>}peR2r zGbfdSL1SX=L|c!;4l+mMgSRT_@`+7(G-07tq=0DQ6)lm4PAf#CN)2{?;htrpqN~@} zlzs4E|It;=-J93(t!q;F!T9LOizP3VRR8H~Zt3{=V2Awsced~DF*+?iW3oD1=E9d% zGrf)+^(hPG*|Uh9kw>X%!Wo@pze$rm$i#pD@bRnOvCVtV|Fv|=I+xVouQD&SEmHNK z!n}KHq~?6@JiJC@^^xaClGS1-{FwN<>vaAcZa!`s@n{coc-H!PW3%muKDEif!~s~!D13SSbtr+ zb1&+*MJ>anE1{p*EG$^uxToxW_wn7mbNBw)UVinSU3EoK2T$goX$%YuoCO|{#S9GG z!XV7ZFl&wk0|NtliKnkC`x7>Hab4ke*%MweFfd32_=LDJFfcecIQ;+rAHry8XgG7` z%>V!Y-%eV$hk=2Cxg^Lhn1O-eSJ{z!3=9m6N#5=*>|%)>uNfE^B0XIkLnJOI2Q)Fb zmdsix!{l`#vu%@!0f*yqL7|h!92&w8S@3pDP;E#t@=&^|bCYMai&TJe8Rr7FOC<;1 z8nCT)@Hi05I{Cm;{*w9A+nO9Xtj<1YVm5fd#IWjg{j~o_cX=}~Ffe$!`njxgN@xNA D;^z>~ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Window/min_max_close_pressed.png b/Media/Themes/Umami/Window/min_max_close_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a9c9a445b73d123d9efbe54c680fe64f6ec09e GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0y~yU@%}{U=UzoW?*1g)bOy0fq{V~-O<;Pfnj4m_n$;o z1_lO&WRDrPK92^=N8qSq>Lsz PfjsT$>gTe~DWM4fk=|jK literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/wallpaper.jpg b/Media/Themes/Umami/wallpaper.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d7990c436a0fea3545395e9c6b1aac90f44ef87 GIT binary patch literal 527141 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

F>*ZrSBUyZ8L&f%6K>=O@led0*?d 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

`U)Il@RhR|HZ(p;_8(o-&8o&F|nZWLd1zrOiP%i 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

VpxGu!nvmQ!i^?6ss`@t>H_9l~dJQ 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

p2C*2cvD>P2WHKar|S$Hz`=Hf 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

Z3NdmBmkS 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

W{^j_;jDFW{)%ye>}EE?N0L6B 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 literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/wallpaper_old.png b/Media/Themes/Umami/wallpaper_old.png new file mode 100644 index 0000000000000000000000000000000000000000..ae6a4771ca6ce44e9c369a6e4e21be4114de73b7 GIT binary patch literal 1839928 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%0DOV|CIl~?;Y+hchmZ$nC*G*M`u#f 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%0Ahdh_-ATdVTR>ukgK{JZt~`@R1+ZiOa` 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%0D;OEq6l|5+z~EY@a^ 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%0DGbTQUPNzK)3q0y4; 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%0DdCc*O_r6Ep|GC>O9$zOcGf`pZ0?$VQt;=VN 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%0ATnRi$3wm53_TcGB{Im?2?f_mxN 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 Dd|m<K literal 0 HcmV?d00001 diff --git a/Run.HC b/Run.HC new file mode 100644 index 0000000..76f820e --- /dev/null +++ b/Run.HC @@ -0,0 +1,3 @@ +// Compile System in Adam task +Adam("Cd(\"M:/System/\");\n"); +AdamFile("M:/System/MakeSystem"); diff --git a/Settings/SystemMenu.json b/Settings/SystemMenu.json new file mode 100644 index 0000000..0c42efb --- /dev/null +++ b/Settings/SystemMenu.json @@ -0,0 +1,40 @@ +{ + "items": [ + { + "name": "Terminal", + "path": "M:/Applications/OS/Terminal.app", + "icon": "M:/Applications/OS/Terminal.app/Icon.png" + }, + { + "name": "Accessories", + "items": [ + { + "name": "Calculator", + "path": "M:/Applications/Accessories/Calculator.app", + "icon": "M:/Applications/Accessories/Calculator.app/window_icon_16x16.png" + }, + { + "name": "TestApplication", + "path": "M:/Applications/TestApplication.app" + } + ], + "icon": "M:/Applications/Accessories/Icon.png" + }, + { + "name": "System", + "items": [ + { + "name": "TempleOS Window Manager", + "path": "M:/Applications/OS/TempleOS.app", + "icon": "M:/Applications/OS/TempleOS.app/window_icon_16x16.png" + } + ], + "icon": "M:/Applications/OS/Icon.png" + }, + { + "name": "Shut Down", + "path": "M:/Applications/OS/ShutDown.app", + "icon": "M:/Applications/OS/ShutDown.app/Icon.png" + } + ] +} \ No newline at end of file diff --git a/System/Api/Dns.HC b/System/Api/Dns.HC new file mode 100644 index 0000000..1955f91 --- /dev/null +++ b/System/Api/Dns.HC @@ -0,0 +1,28 @@ +#define DNS_REQUEST_PTR 0x300010 + +MemSet(DNS_REQUEST_PTR, NULL, sizeof(U64)); + +class DnsRequest { + U64 host; + U64 pointer_to_u32; +}; + +U32 @dns_query(U8* host) +{ + U32 res = 0; + if (!host) + return U32_MAX; + if (!StrICmp("catbox.moe", host)) { + return 0x0a1400fe; + } + DnsRequest* request = CAlloc(sizeof(DnsRequest), Fs->code_heap); + request->host = StrNew(host, erythros_mem_task); + request->pointer_to_u32 = &res; + U64* request_ptr = DNS_REQUEST_PTR; + while (*request_ptr) + Sleep(1); + LXchgU32(request_ptr, request); + while (!res) + Sleep(1); + return res; +} diff --git a/System/Api/Icmp.HC b/System/Api/Icmp.HC new file mode 100644 index 0000000..e52040c --- /dev/null +++ b/System/Api/Icmp.HC @@ -0,0 +1,32 @@ +#define ICMP_REQUEST_PTR 0x300020 + +MemSet(ICMP_REQUEST_PTR, NULL, sizeof(U64)); + +class IcmpRequest { + U64 addr; + U64 iden; + U64 seq; + U64 pointer_to_u32; +}; + +U32 @icmp_echo_request(U32 addr, U16 iden, U16 seq, IcmpRequest* request, I64 count) +{ + U32 res = 0; // low 16 = ttl, hi 16 = payload size + request->addr = addr; + request->iden = iden; + request->seq = seq; + request->pointer_to_u32 = &res; + I64 start_jiffies = cnts.jiffies; + U64* request_ptr = ICMP_REQUEST_PTR; + if (!count) + *request_ptr = NULL; + while (*request_ptr) { + if (!(cnts.jiffies < start_jiffies + 1000)) + return res; + Sleep(1); + } + LXchgU32(request_ptr, request); + while (!res && cnts.jiffies < start_jiffies + 1000) + Sleep(1); + return res; +} \ No newline at end of file diff --git a/System/Api/Ipv4.HC b/System/Api/Ipv4.HC new file mode 100644 index 0000000..105ebe3 --- /dev/null +++ b/System/Api/Ipv4.HC @@ -0,0 +1,9 @@ +U32 @ipv4_address(I64 o3, I64 o2, I64 o1, I64 o0) +{ + U32 addr = NULL; + addr.u8[3] = o3; + addr.u8[2] = o2; + addr.u8[1] = o1; + addr.u8[0] = o0; + return addr; +} diff --git a/System/Api/MD5.HC b/System/Api/MD5.HC new file mode 100644 index 0000000..b827b4d --- /dev/null +++ b/System/Api/MD5.HC @@ -0,0 +1,144 @@ +/* + * Simple MD5 implementation + * + * https://gist.github.com/creationix/4710780 + */ + +U32 md5_r[64] = { 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, + 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, + 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, + 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 }; +// Use binary integer part of the sines of integers (in radians) as constants// +// Initialize variables: +U32 md5_k[64] = { + 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, + 0xa8304613, 0xfd469501, 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, + 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, 0xf61e2562, 0xc040b340, + 0x265e5a51, 0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, + 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8, + 0x676f02d9, 0x8d2a4c8a, 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, + 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, 0x289b7ec6, 0xeaa127fa, + 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, + 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92, + 0xffeff47d, 0x85845dd1, 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, + 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 +}; + +// leftrotate function +U32 LEFTROTATE(U32 x, U32 c) { return (((x) << (c)) | ((x) >> (32 - (c)))); } + +U0 md5(U8* initial_msg, U32 initial_len, U32* md5_h) +{ + + // These vars will contain the hash + U32 md5_h0, md5_h1, md5_h2, md5_h3; + + // Message (to prepare) + U8* msg = NULL; + + // Note: All variables are unsigned 32 bit and wrap modulo 2^32 when + // calculating + + // r specifies the per-round shift amounts + + md5_h0 = 0x67452301; + md5_h1 = 0xefcdab89; + md5_h2 = 0x98badcfe; + md5_h3 = 0x10325476; + + // Pre-processing: adding a single 1 bit + // append "1" bit to message + /* Notice: the input bytes are considered as bits strings, + where the first bit is the most significant bit of the byte.[37] */ + + // Pre-processing: padding with zeros + // append "0" bit until message length in bit ≡ 448 (mod 512) + // append length mod (2 pow 64) to message + + U32 new_len; + for (new_len = initial_len * 8 + 1; new_len % 512 != 448; new_len++) + ; + new_len /= 8; + + msg = CAlloc(new_len + 64, erythros_mem_task); // also appends "0" bits + // (we alloc also 64 extra bytes...) + MemCpy(msg, initial_msg, initial_len); + msg[initial_len] = 128; // write the "1" bit + + U32 bits_len = 8 * initial_len; // note, we append the len + MemCpy(msg + new_len, &bits_len, 4); // in bits at the end of the buffer + + // Process the message in successive 512-bit chunks: + // for each 512-bit chunk of message: + U32 offset; + for (offset = 0; offset < new_len; offset += (512 / 8)) { + + // break chunk into sixteen 32-bit words w[j], 0 ≤ j ≤ 15 + U32* w = (msg + offset)(U32*); + + // Initialize hash value for this chunk: + U32 a = md5_h0; + U32 b = md5_h1; + U32 c = md5_h2; + U32 d = md5_h3; + + // Main loop: + U32 i; + for (i = 0; i < 64; i++) { + + U32 f, g; + + if (i < 16) { + f = (b & c) | ((~b) & d); + g = i; + } else if (i < 32) { + f = (d & b) | ((~d) & c); + g = (5 * i + 1) % 16; + } else if (i < 48) { + f = b ^ c ^ d; + g = (3 * i + 5) % 16; + } else { + f = c ^ (b | (~d)); + g = (7 * i) % 16; + } + + U32 temp = d; + d = c; + c = b; + // printf("rotateLeft(%x + %x + %x + %x, %d)\n", a, f, k[i], w[g], r[i]); + b = b + LEFTROTATE((a + f + md5_k[i] + w[g]), md5_r[i]); + a = temp; + } + + // Add this chunk's hash to result so far: + + md5_h0 += a; + md5_h1 += b; + md5_h2 += c; + md5_h3 += d; + } + + md5_h[0] = md5_h0; + md5_h[1] = md5_h1; + md5_h[2] = md5_h2; + md5_h[3] = md5_h3; + + // cleanup + Free(msg); +} + +U8* md5_string(U8* buf, I64 size) +{ + U32 md5_h[4]; + md5(buf, size, &md5_h[0]); + U8* str = CAlloc(33, erythros_mem_task); + StrPrint(str + StrLen(str), "%02x%02x%02x%02x", md5_h[0].u8[0], + md5_h[0].u8[1], md5_h[0].u8[2], md5_h[0].u8[3]); + StrPrint(str + StrLen(str), "%02x%02x%02x%02x", md5_h[1].u8[0], + md5_h[1].u8[1], md5_h[1].u8[2], md5_h[1].u8[3]); + StrPrint(str + StrLen(str), "%02x%02x%02x%02x", md5_h[2].u8[0], + md5_h[2].u8[1], md5_h[2].u8[2], md5_h[2].u8[3]); + StrPrint(str + StrLen(str), "%02x%02x%02x%02x", md5_h[3].u8[0], + md5_h[3].u8[1], md5_h[3].u8[2], md5_h[3].u8[3]); + return str; +} diff --git a/System/Api/NetInfo.HC b/System/Api/NetInfo.HC new file mode 100644 index 0000000..79f0384 --- /dev/null +++ b/System/Api/NetInfo.HC @@ -0,0 +1,32 @@ +#define NETINFO_REQUEST_PTR 0x300030 + +MemSet(NETINFO_REQUEST_PTR, NULL, sizeof(U64)); + +class NetInfoRequest { + U64 mac_address; + U64 ipv4_address; + U64 ipv4_netmask; + U64 ipv4_network; + U64 ipv4_gateway; + U64 dns_server_address; + U64 dns_server_port; + U64 rx_bytes; + U64 rx_frames; + U64 tx_bytes; + U64 tx_frames; + U64 pointer_to_u32; +}; + +NetInfoRequest* @net_info_request() +{ + U32 res = 0; + NetInfoRequest* req = CAlloc(sizeof(NetInfoRequest), Fs->code_heap); + req->pointer_to_u32 = &res; + U64* request_ptr = NETINFO_REQUEST_PTR; + while (*request_ptr) + Sleep(1); + LXchgU32(request_ptr, req); + while (!res) + Sleep(1); + return req; +} diff --git a/System/Api/Tcp.HC b/System/Api/Tcp.HC new file mode 100644 index 0000000..99f436c --- /dev/null +++ b/System/Api/Tcp.HC @@ -0,0 +1,210 @@ +#define TCP_SOCKET_REQUEST_PTR 0x300000 +#define TCP_BIND_REQUEST_PTR 0x300040 +#define TCP_ACCEPT_REQUEST_PTR 0x300050 + +MemSet(TCP_SOCKET_REQUEST_PTR, NULL, sizeof(U64)); + +// TcpSocket states + +#define TCP_SOCKET_STATE_IDLE 0 +#define TCP_SOCKET_STATE_ESTABLISHED 1 +#define TCP_SOCKET_STATE_CLOSED 2 +#define TCP_SOCKET_STATE_CONNECTING 4 + +class TcpSocket { + U64 remote_addr; + U64 remote_port; + U64 state; + U64 receive_buffer_ptr; // Pointer to receive buffer in physical memory + U64 receive_buffer_size; + U64 receive_buffer_filled; // Number of bytes Net has put into buffer + U64 receive_buffer_kick; // Net sets this to 1 when it has data available for + // us, we set back to 0 when ready to receive + U64 send_buffer_ptr; + U64 send_buffer_size; + U64 send_buffer_filled; + U64 send_buffer_kick; // We set this to 1 when we have data available to net, + // Net sets back to 0 when ready to receive + U0(*close) + (); + U64(*receive) + (U64 buf, U64 length); + U0(*send) + (U64 buf, U64 length); +}; + +class TcpBind { + U64 port; + U64 function; + U64 response_code; +}; + +U8 @tcp_close_wrapper_function[16] + = { 0x55, 0x48, 0x8B, 0xEC, 0x68, 0x78, + 0x56, 0x34, 0x12, 0xE8, 0x02, 0x6D, + 0x02, 0x00, 0x5D, 0xC3 }; + +U8 @tcp_receive_wrapper_function[32] = { + 0x55, 0x48, 0x8B, 0xEC, 0x56, 0x57, 0x48, 0x8B, 0x75, 0x18, 0x48, + 0x8B, 0x7D, 0x10, 0x56, 0x57, 0x68, 0x78, 0x56, 0x34, 0x12, 0xE8, + 0x5E, 0x62, 0x02, 0x00, 0x5F, 0x5E, 0x5D, 0xC2, 0x10, 0x00 +}; + +U8 @tcp_send_wrapper_function[32] = { + 0x55, 0x48, 0x8B, 0xEC, 0x56, 0x57, 0x48, 0x8B, 0x75, 0x18, 0x48, + 0x8B, 0x7D, 0x10, 0x56, 0x57, 0x68, 0x78, 0x56, 0x34, 0x12, 0xE8, + 0x5E, 0x62, 0x02, 0x00, 0x5F, 0x5E, 0x5D, 0xC2, 0x10, 0x00 +}; + +U0 @tcp_socket_send(TcpSocket* s, U64 buf, U64 length) +{ + while (s->send_buffer_kick) + Sleep(1); + U64 pos = 0; + U64 bytes_to_send = 0; + while (pos < length) { + if ((length - pos) > s->send_buffer_size) + bytes_to_send = s->send_buffer_size; + else + bytes_to_send = length - pos; + MemCpy(s->send_buffer_ptr, buf + pos, bytes_to_send); + s->send_buffer_filled = bytes_to_send; + s->send_buffer_kick = 1; + pos += bytes_to_send; + while (s->send_buffer_kick) + Sleep(1); + } +} + +U64 @tcp_socket_receive(TcpSocket* s, U64 buf, U64 size) +{ + s->receive_buffer_size = size; + s->receive_buffer_kick = 0; + while (!s->receive_buffer_kick) { + if (s->state == TCP_SOCKET_STATE_CLOSED) + return NULL; + Sleep(1); + } + U64 bytes_received = s->receive_buffer_filled; + if (bytes_received > 0) { + MemCpy(buf, s->receive_buffer_ptr, bytes_received); + } + return bytes_received; +} + +U0 @tcp_wait_for_connection_established(TcpSocket* s) +{ + while (s->state != TCP_SOCKET_STATE_ESTABLISHED) + Sleep(1); +} + +U0 @tcp_socket_close(TcpSocket* s) +{ + if (s->close) + Free(s->close); + if (s->receive) + Free(s->receive); + if (s->send) + Free(s->send); + s->state = TCP_SOCKET_STATE_CLOSED; +} + +TcpSocket* @tcp_socket_create(U8* host, U64 port) +{ + U64 addr = @dns_query(host); + TcpSocket* s = CAlloc(sizeof(TcpSocket), erythros_mem_task->code_heap); + s->remote_addr = addr; + s->remote_port = port; + + U64 a; + + s->close = MAlloc(16, erythros_mem_task->code_heap); + MemCpy(s->close, @tcp_close_wrapper_function, 16); + a = s->close; + a += 0x05; + MemSetU32(a, s, 1); + a = s->close; + a += 0x09; + @patch_call_rel32(a, &@tcp_socket_close); + + s->receive = MAlloc(25, erythros_mem_task->code_heap); + MemCpy(s->receive, @tcp_receive_wrapper_function, 32); + a = s->receive; + a += 0x11; + MemSetU32(a, s, 1); + a = s->receive; + a += 0x15; + @patch_call_rel32(a, &@tcp_socket_receive); + + s->send = MAlloc(32, erythros_mem_task->code_heap); + MemCpy(s->send, @tcp_send_wrapper_function, 32); + a = s->send; + a += 0x11; + MemSetU32(a, s, 1); + a = s->send; + a += 0x15; + @patch_call_rel32(a, &@tcp_socket_send); + + U64* request_ptr = TCP_SOCKET_REQUEST_PTR; + while (*request_ptr) + Sleep(1); + LXchgU32(request_ptr, s); + return s; +} + +U64 @tcp_socket_bind(U64 port, U64 function) +{ + if (!port || !function) + return NULL; + + TcpBind* b = CAlloc(sizeof(TcpBind), erythros_mem_task->code_heap); + b->port = port; + b->function = function; // U0 my_spawn_wrapper_function(TcpSocket* s) + + U64* request_ptr = TCP_BIND_REQUEST_PTR; + while (*request_ptr) + Sleep(1); + LXchgU32(request_ptr, b); + while (*request_ptr) + Sleep(1); + U64 res = b->response_code; + Free(b); + return res; +} + +TcpSocket* @tcp_socket_accept(TcpSocket* s) +{ + if (!s || !s->remote_addr || !s->remote_port) + return NULL; + + U64 a; + + s->close = MAlloc(16, erythros_mem_task->code_heap); + MemCpy(s->close, @tcp_close_wrapper_function, 16); + a = s->close; + a += 0x05; + MemSetU32(a, s, 1); + a = s->close; + a += 0x09; + @patch_call_rel32(a, &@tcp_socket_close); + + s->receive = MAlloc(25, erythros_mem_task->code_heap); + MemCpy(s->receive, @tcp_receive_wrapper_function, 32); + a = s->receive; + a += 0x11; + MemSetU32(a, s, 1); + a = s->receive; + a += 0x15; + @patch_call_rel32(a, &@tcp_socket_receive); + + s->send = MAlloc(32, erythros_mem_task->code_heap); + MemCpy(s->send, @tcp_send_wrapper_function, 32); + a = s->send; + a += 0x11; + MemSetU32(a, s, 1); + a = s->send; + a += 0x15; + @patch_call_rel32(a, &@tcp_socket_send); + + return s; +} diff --git a/System/Api/Tls.HC b/System/Api/Tls.HC new file mode 100644 index 0000000..0d51f21 --- /dev/null +++ b/System/Api/Tls.HC @@ -0,0 +1,99 @@ +#define TLS_CONNECT_TASK_STACK_SIZE 524288 +#define TLS_CLIENT_MESSAGE_BUFFER_SIZE 0xFFFF + +class TlsSocket : TcpSocket { + U64 ctx; + U8 client_message[TLS_CLIENT_MESSAGE_BUFFER_SIZE]; +}; + +U0 @tls_send_pending(TlsSocket* s) +{ + U32 out_buffer_len = 0; + U8* out_buffer = @tls_get_write_buffer(s->ctx, &out_buffer_len); + if (out_buffer && out_buffer_len) { + @tcp_socket_send(s, out_buffer, out_buffer_len); + @tls_buffer_clear(s->ctx); + } +} + +U0 @tls_socket_send(TlsSocket* s, U64 buf, U64 size) +{ + @tls_write(s->ctx, buf, size); + @tls_send_pending(s); +} + +U64 @tls_socket_receive(TlsSocket* s, U8* buf, I64 size) +{ + I64 len = @tcp_socket_receive(s, s->client_message, TLS_CLIENT_MESSAGE_BUFFER_SIZE); + if (len) { + @tls_consume_stream(s->ctx, s->client_message, len, NULL); + @tls_send_pending(s); + } + return @tls_read(s->ctx, buf, size); +} + +U0 @tls12_connect(TlsSocket* s) +{ + I64 len; + @tls_client_connect(s->ctx); + @tls_send_pending(s); + while (!@tls_established(s->ctx)) { + len = @tcp_socket_receive(s, &s->client_message, TLS_CLIENT_MESSAGE_BUFFER_SIZE); + if (len) { + @tls_consume_stream(s->ctx, &s->client_message, len, NULL); + @tls_send_pending(s); + } + Sleep(1); + } +} + +TlsSocket* @tls_socket_create(U8* server_name, U64 port = 443) +{ + U64 addr = @dns_query(server_name); + TlsSocket* s = CAlloc(sizeof(TlsSocket), erythros_mem_task->code_heap); + s->remote_addr = addr; + s->remote_port = port; + + U64 a; + + s->close = MAlloc(16, erythros_mem_task->code_heap); + MemCpy(s->close, @tcp_close_wrapper_function, 16); + a = s->close; + a += 0x05; + MemSetU32(a, s, 1); + a = s->close; + a += 0x09; + @patch_call_rel32(a, &@tcp_socket_close); + + s->receive = MAlloc(25, erythros_mem_task->code_heap); + MemCpy(s->receive, @tcp_receive_wrapper_function, 32); + a = s->receive; + a += 0x11; + MemSetU32(a, s, 1); + a = s->receive; + a += 0x15; + @patch_call_rel32(a, &@tls_socket_receive); + + s->send = MAlloc(32, erythros_mem_task->code_heap); + MemCpy(s->send, @tcp_send_wrapper_function, 32); + a = s->send; + a += 0x11; + MemSetU32(a, s, 1); + a = s->send; + a += 0x15; + @patch_call_rel32(a, &@tls_socket_send); + + U64* request_ptr = TCP_SOCKET_REQUEST_PTR; + while (*request_ptr) + Sleep(1); + LXchgU32(request_ptr, s); + + while (s->state != TCP_SOCKET_STATE_ESTABLISHED) + Sleep(1); + + s->ctx = @tls_create_context(0, TLS_V12); + @tls_sni_set(s->ctx, StrNew(server_name, erythros_mem_task->code_heap)); + Spawn(&@tls12_connect, s, , , , TLS_CONNECT_TASK_STACK_SIZE); + + return s; +} diff --git a/System/Config/Net.json b/System/Config/Net.json new file mode 100644 index 0000000..9217064 --- /dev/null +++ b/System/Config/Net.json @@ -0,0 +1,10 @@ +{ + "tcpip.ipv4_address": "10.20.0.10", + "tcpip.ipv4_netmask": "255.255.255.0", + "tcpip.ipv4_network": "10.20.0.0", + "tcpip.ipv4_gateway": "10.20.0.254", + "tcpip.ipv4_dns_server_address": "8.8.8.8", + "tcpip.ipv4_dns_server_port": "53", + "tcpip.mss_size": "1360", + "eof": "eof" +} \ No newline at end of file diff --git a/System/Core/Compositor.HC b/System/Core/Compositor.HC new file mode 100644 index 0000000..1a3da84 --- /dev/null +++ b/System/Core/Compositor.HC @@ -0,0 +1,1112 @@ +#define CPZ_MSG_WIN_CREATE 0x1001 +#define CPZ_MSG_WIN_DESTROY 0x1002 +#define CPZ_MSG_WIN_REPAINT 0x1003 +#define CPZ_MSG_WIN_MOVE_TO 0x1004 +#define CPZ_MSG_WIN_RESIZE_TO 0x1005 +#define CPZ_MSG_WIN_MOUSE_AT 0x1006 +#define CPZ_MSG_WIN_MOUSE_WHEEL 0x1007 +#define CPZ_MSG_WIN_LEFT_BTN_UP 0x1008 +#define CPZ_MSG_WIN_LEFT_BTN_DOWN 0x1009 +#define CPZ_MSG_WIN_RIGHT_BTN_UP 0x100A +#define CPZ_MSG_WIN_RIGHT_BTN_DOWN 0x100B +#define CPZ_MSG_WIN_KEY_PRESS 0x100C +#define CPZ_MSG_WIN_WIDGET_DESTROY 0x100D +#define CPZ_MSG_WIN_SET_Z_INDEX 0x100E +#define CPZ_MSG_SET_WALLPAPER 0x100F + +#define CPZ_WALLPAPER_CENTERED 0x0 +#define CPZ_WALLPAPER_AUTORESIZE 0x1 +#define CPZ_WALLPAPER_REPEAT 0x2 + +class @compositor_menubar +{ + Window* win; + CTask* task; + TextInputWidget* title; +}; + +class @compositor_windows_list +{ + @compositor_windows_list* prev; + @compositor_windows_list* next; + Window* window; +}; + +class @compositor +{ + I64 next_id; + I64 max_z_index; + Window* active_win; + Context2D* blend_ctx; + Context2D* ctx; + Context2D* pointer; + @compositor_menubar menubar; + @compositor_windows_list* windows; + @compositor_windows_list* global_input_event_listeners; + Bounds2D bounds; + @mouse mouse; + @session session; + @theme theme; + Bool in_drag; + Bool in_resize; + CTask* task; + U0(*Init) + (); + Window* (*CreateWindow)(I64 x, I64 y, I64 width, I64 height, + I64 flags = WIN_FLAGS_DEFAULT, U8* title = NULL, + Context2D* icon = NULL); + U0 (*DestroyWindow)(Window* win); + Window (*GetWindowByTitle)(U8* title); + Window (*GetWindowByZIndex)(I64 index); + U0 (*HideWindow)(Window* win); + U0 (*ShowWindow)(Window* win); + U0 (*RegisterForGlobalInputEvents)(Window* win); + U0 (*UnregisterForGlobalInputEvents)(Window* win); + U0 (*SetWallpaper)(Context2D* ctx, U32 mode = CPZ_WALLPAPER_AUTORESIZE, U32 background = Color(0, 0, 0)); + U0(*Task) + (); +}; + +@compositor Compositor; + +U0 @compositor_add_window_to_list(Window* win) +{ + @compositor_windows_list* win_list = Compositor.windows; + @compositor_windows_list* win_next = CAlloc(sizeof(@compositor_windows_list)); + while (win_list->next) { + win_list = win_list->next; + } + win_next->window = win; + win_next->prev = win_list; + win_list->next = win_next; +} + +U0 @compositor_add_global_input_event_listener_to_list(Window* win) +{ + @compositor_windows_list* win_list = Compositor.global_input_event_listeners; + @compositor_windows_list* win_next = CAlloc(sizeof(@compositor_windows_list)); + while (win_list->next) { + win_list = win_list->next; + } + win_next->window = win; + win_next->prev = win_list; + win_list->next = win_next; +} + +U0 @compositor_remove_global_input_event_listener_from_list(Window* win) +{ + @compositor_windows_list* win_list = Compositor.global_input_event_listeners; + @compositor_windows_list* win_list_prev = NULL; + @compositor_windows_list* win_list_next = NULL; + + while (win_list) { + if (win_list->window == win) { + win_list_prev = win_list->prev; + win_list_next = win_list->next; + win_list_prev->next = win_list_next; + win_list_next->prev = win_list_prev; + Free(win_list); + return; + } + win_list = win_list->next; + } +} + +U0 @compositor_refresh(Window* win) +{ + IpcMessage* msg = CAlloc(sizeof(IpcMessage)); + msg->client = win->client; + msg->type = CPZ_MSG_WIN_REPAINT; + msg->payload = win; + Ipc.MsgSend(msg->client, msg); +} + +U0 @compositor_set_z_index(Window* win, I64 index) +{ + if (!win) + return; + I64 i = 0; + @compositor_windows_list* win_index = NULL; + @compositor_windows_list* win_list = Compositor.windows->next; + @compositor_windows_list* prev = NULL; + @compositor_windows_list* next = NULL; + while (win_list) { + if (win_list->window == win) { + win_index = win_list; + if (win_index->prev) + prev = win_index->prev; + if (win_index->next) + next = win_index->next; + if (prev) + prev->next = next; + if (next) + next->prev = prev; + break; + } + win_list = win_list->next; + } + + win_list = Compositor.windows->next; + prev = NULL; + + while (win_list) { + if (i == index) { + prev = win_list->prev; + if (prev) + prev->next = win_index; + win_index->prev = prev; + win_index->next = win_list; + win_list->prev = win_index; + break; + } + i++; + win_list = win_list->next; + } +} + +U0 @compositor_set_z_index_send_msg(Window* win, I64 index) +{ + if (!win) + return; + IpcMessage* msg = CAlloc(sizeof(IpcMessage)); + msg->client = win->client; + msg->type = CPZ_MSG_WIN_SET_Z_INDEX; + msg->payload = win; + msg->i64 = index; + Ipc.MsgSend(Compositor.task, msg); +} + +U0 @compositor_set_wallpaper(Context2D* ctx, U32 mode, U32 background) +{ // Sets the wallpaper, doesn't Free the Context, you need to Free it after. + if (!ctx) { + return; + } + Window* win = Compositor.GetWindowByTitle("Wallpaper"); + Context2D* tmp = ctx; + + if (!win) { // Please, don't call this if the system isn't initialized + System.Log(Fs, "Trying to set the Wallpaper, but the System isn't initialized completely!"); + return; + } + + if (Display.Width() != ctx->width || Display.Height() != ctx->height) { + if (Display.Width() > ctx->width && Display.Height() > ctx->height) { + switch (mode) { + case CPZ_WALLPAPER_CENTERED: + tmp = NewContext2D(Display.Width(), Display.Height()); + Fill2D(tmp, background); + CopyRect2D(tmp, + (Display.Width() / 2) - (ctx->width / 2), + (Display.Height() / 2) - (ctx->height / 2), + ctx); + break; + case CPZ_WALLPAPER_REPEAT: + tmp = NewContext2D(Display.Width(), Display.Height()); + I64 x = 0; + I64 y = 0; + while (TRUE) { + CopyRect2D(tmp, x, y, ctx); + x += ctx->width; + if (x >= Display.Width()) { + x = 0; + y += ctx->height; + if (y >= Display.Height()) + break; + } + } + break; + case CPZ_WALLPAPER_AUTORESIZE: + default: + tmp = Scale2D(tmp, Display.Width() / ToF64(ctx->width), Display.Height() / ToF64(ctx->height)); + break; + } + } else { + tmp = Scale2D(tmp, Display.Width() / ToF64(ctx->width), Display.Height() / ToF64(ctx->height)); + } + } + + MemCpyU32(win->backing_store->fb, tmp->fb, + Display.Width() * Display.Height()); + if (tmp != ctx) // We don't want to delete the context so it can be reused later (If necessary) + DelContext2D(tmp); +} + +U0 @compositor_set_wallpaper_send_msg(Context2D* ctx, U32 mode = CPZ_WALLPAPER_AUTORESIZE, U32 background = Color(0, 0, 0)) +{ + if (!ctx) + return; + IpcMessage* msg = CAlloc(sizeof(IpcMessage)); + msg->client = Fs; + msg->type = CPZ_MSG_SET_WALLPAPER; + msg->payload = ctx; + msg->i64.u32[0] = mode; + msg->i64.u32[1] = background; + Ipc.MsgSend(Compositor.task, msg); +} + +U0 @compositor_ipc_queue_process() +{ + Window* win; + IpcMessage* msg; + @compositor_windows_list* win_list = Compositor.windows->next; + @compositor_windows_list* prev; + @compositor_windows_list* next; + msg = Ipc.MsgRecv(); + if (msg) { + switch (msg->type) { + case CPZ_MSG_WIN_CREATE: + win = msg->payload; + win->client = msg->client; + win->render_ctx = NewContext2D(Display.Width(), Display.Height()); + win->backing_store = NewContext2D(Display.Width(), Display.Height()); + win->backing_store->width = win->width; + win->backing_store->height = win->height; + @compositor_add_window_to_list(win); + System.Log(Fs, "Received message ← CreateWindow (%dx%d at %d, %d)", + win->width, win->height, win->x, win->y); + Free(msg); + msg = CAlloc(sizeof(IpcMessage)); + msg->client = win->client; + msg->type = CPZ_MSG_WIN_REPAINT; + msg->payload = win; + Ipc.MsgSend(msg->client, msg); + break; + case CPZ_MSG_WIN_DESTROY: + win = msg->payload; + while (win_list) { + if (win_list->window == win) { + prev = win_list->prev; + next = win_list->next; + prev->next = next; + next->prev = prev; + if (win_list->window->backing_store) + DelContext2D(win_list->window->backing_store); + if (win_list->window->render_ctx) + DelContext2D(win_list->window->render_ctx); + // FIXME: free Widgets + Free(win_list->window); + Free(win_list); + Compositor.active_win = NULL; + System.Log(Fs, "Received message ← DestroyWindow 0x%08x", win); + break; + } + win_list = win_list->next; + } + break; + case CPZ_MSG_WIN_SET_Z_INDEX: + @compositor_set_z_index(msg->payload, msg->i64); + System.Log(Fs, "Received message ← SetZIndex (%08X, %d)", msg->payload, + msg->i64); + Free(msg); + break; + case CPZ_MSG_SET_WALLPAPER: + Context2D* ctx = msg->payload; + U32 mode = msg->i64.u32[0]; + U32 background = msg->i64.u32[1]; + System.Log(Fs, "Received message ← SetWallpaper (%08X, Mode: %d, Background: %d)", ctx, + mode, background); + @compositor_set_wallpaper(ctx, mode, background); + Free(msg); + break; + default: + Free(msg); + break; + } + } +} + +Window* @compositor_get_window_by_title(U8* title) +{ + @compositor_windows_list* win_list = Compositor.windows->next; + while (win_list) { + if (win_list->window) + if (!StrCmp(&win_list->window->title, title)) + return win_list->window; + win_list = win_list->next; + } + return NULL; +} + +Window* @compositor_get_window_by_z_index(I64 index) +{ + @compositor_windows_list* win_list = Compositor.windows->next; + I64 i = 0; + while (win_list) { + if (i == index) + return win_list->window; + i++; + win_list = win_list->next; + } + return NULL; +} + +U0 @compositor_handle_active_window_flags() +{ + if (!Compositor.active_win) + return; + if (Compositor.active_win->flags & WIN_FLAGS_MINIMIZED) { + Compositor.active_win = Compositor.GetWindowByTitle("Wallpaper"); + if (Compositor.menubar.win) { + Gui.Widget.SetText(Compositor.menubar.title, + &Compositor.active_win->title); + Gui.Window.Refresh(Compositor.menubar.win); + } + } +} + +Context2D* @compositor_set_theme_pointer(U8* path, U8* pointer) +{ + U8 file_path[512]; + StrPrint(&file_path, "%sPointer/%s.png", path, pointer); + Context2D* ctx = Image.FileToContext2D(&file_path); + return ctx; +} + +U0 @compositor_set_theme_wallpaper(U8* path) +{ + U8 file_path[512]; + StrPrint(&file_path, "%s%s", path, "wallpaper.jpg"); + Compositor.theme.wallpaper = Image.FileToContext2D(file_path); + if (!Compositor.theme.wallpaper) { + Compositor.theme.wallpaper = NewContext2D(Display.Width(), Display.Height()); + } +} + +U0 @compositor_set_theme(U8* theme) +{ + U8 theme_path[512]; + U8 exec_path[512]; + StrPrint(&theme_path, "M:/Media/Themes/%s/", theme); + if (!IsDir(&theme_path)) { + System.Log(Fs, "SetTheme failed: Theme does not exist: '%s'", theme); + return; + } + // FIXME: This is disgusting + Compositor.theme.pointer.pointer = + @compositor_set_theme_pointer(&theme_path, "pointer"); + Compositor.theme.pointer.pen = + @compositor_set_theme_pointer(&theme_path, "pen"); + Compositor.theme.pointer.move = + @compositor_set_theme_pointer(&theme_path, "move"); + Compositor.theme.pointer.link = + @compositor_set_theme_pointer(&theme_path, "link"); + Compositor.theme.pointer.horz = + @compositor_set_theme_pointer(&theme_path, "horz"); + Compositor.theme.pointer.vert = + @compositor_set_theme_pointer(&theme_path, "vert"); + Compositor.theme.pointer.text = + @compositor_set_theme_pointer(&theme_path, "text"); + Compositor.theme.pointer.cross = + @compositor_set_theme_pointer(&theme_path, "cross"); + Compositor.theme.pointer.dgn1 = + @compositor_set_theme_pointer(&theme_path, "dgn1"); + Compositor.theme.pointer.dgn2 = + @compositor_set_theme_pointer(&theme_path, "dgn2"); + Compositor.theme.pointer.help = + @compositor_set_theme_pointer(&theme_path, "help"); + Compositor.theme.pointer.alternate = + @compositor_set_theme_pointer(&theme_path, "alternate"); + Compositor.theme.pointer.unavailable = + @compositor_set_theme_pointer(&theme_path, "unavailable"); + + @compositor_set_theme_wallpaper(&theme_path); + + StrPrint(&exec_path, "%sTheme.HC", &theme_path); + ExeDoc(DocRead(exec_path)); +} + +Bool @compositor_active_win_flag_is_set(U64 flag) +{ + if (@gui_window_flag_is_set(Compositor.active_win, flag)) + return TRUE; + return FALSE; +} + +U0 @compositor_set_pointer(Context2D* pointer = NULL) +{ + if (!pointer) + pointer = Compositor.theme.pointer.pointer; + if (Animation2D.IsAnimation(pointer)) + Compositor.pointer = Animation2D.Frame(pointer); + else + Compositor.pointer = pointer; + Mouse.PointerSet(Compositor.pointer->fb, Compositor.pointer->width, + Compositor.pointer->height); +} + +U0 @compositor_set_active_window(Window* win) +{ + if (!win) + return; + if (Compositor.active_win == win) + return; + IpcMessage* msg; + @compositor_windows_list* win_list = Compositor.windows->next; + @compositor_windows_list* prev; + @compositor_windows_list* next; + while (win_list) { + if (!(win->flags & WIN_FLAGS_NO_REINDEX)) { + if (win_list->window == win && win_list->next) { + prev = win_list->prev; + next = win_list->next; + prev->next = next; + next->prev = prev; + while (next->next) { + next = next->next; + } + win_list->prev = next; + win_list->next = NULL; + next->next = win_list; + break; + } + } + win_list = win_list->next; + } + if (Compositor.active_win && Compositor.active_win != win) { + msg = CAlloc(sizeof(IpcMessage)); + msg->client = Compositor.active_win->client; + msg->type = CPZ_MSG_WIN_REPAINT; + msg->payload = Compositor.active_win; + Ipc.MsgSend(msg->client, msg); + } + Compositor.active_win = win; + if (Compositor.menubar.win && Compositor.menubar.title) { + Gui.Widget.SetText(Compositor.menubar.title, win->title); + Gui.Window.Refresh(Compositor.menubar.win); + } + System.Log(Fs, "SetActiveWindow (%dx%d at %d, %d)", win->width, win->height, + win->x, win->y); + msg = CAlloc(sizeof(IpcMessage)); + msg->client = win->client; + msg->type = CPZ_MSG_WIN_REPAINT; + msg->payload = win; + Ipc.MsgSend(msg->client, msg); + @compositor_set_pointer(); +} + +U0 @compositor_handle_window_resize() +{ + if (!Compositor.active_win) + return; + if (Compositor.active_win->signature != WIN_SIGNATURE) + return; + if (!(@compositor_active_win_flag_is_set(WIN_FLAGS_RESIZABLE))) + goto resize_set_pointer; + + Bool set_pointer_to_resize = FALSE; + I64 new_width; + I64 new_height; + + // Bottom right + if (Mouse.x > Compositor.active_win->x + Compositor.active_win->width - 16 && Mouse.x < Compositor.active_win->x + Compositor.active_win->width && Mouse.y > Compositor.active_win->y + Compositor.active_win->height - 16 && Mouse.y < Compositor.active_win->y + Compositor.active_win->height) { + @compositor_set_pointer(Compositor.theme.pointer.dgn1); + set_pointer_to_resize = TRUE; + } + + if (Mouse.left && !Compositor.mouse.left && Compositor.active_win) { + if (Mouse.x > Compositor.active_win->x + Compositor.active_win->width - 16 && Mouse.x < Compositor.active_win->x + Compositor.active_win->width && Mouse.y > Compositor.active_win->y + Compositor.active_win->height - 16 && Mouse.y < Compositor.active_win->y + Compositor.active_win->height) { + Compositor.active_win->origin.x = Compositor.active_win->x; + Compositor.active_win->origin.y = Compositor.active_win->y; + Compositor.active_win->origin.width = Compositor.active_win->width; + Compositor.active_win->origin.height = Compositor.active_win->height; + Compositor.active_win->origin.mouse_x = Mouse.x; + Compositor.active_win->origin.mouse_y = Mouse.y; + Compositor.in_resize = TRUE; + } + } + + if (!Mouse.left) { + Compositor.in_drag = FALSE; + Compositor.in_resize = FALSE; + } + + if (Compositor.in_resize) { + // FIXME: Set minimum width and height in Compositor.theme or Window. + new_width = Max(16, Compositor.active_win->origin.width + (Mouse.x - Compositor.active_win->origin.mouse_x)); + new_height = Max(16, Compositor.active_win->origin.height + (Mouse.y - Compositor.active_win->origin.mouse_y)); + new_width = Max(Compositor.theme.window.min_width, new_width); + new_height = Max(Compositor.theme.window.min_height, new_height); + if (Compositor.active_win->width != new_width || Compositor.active_win->height != new_height && !Compositor.active_win->repainting) { + Window* win = Compositor.active_win; + IpcMessage* msg = CAlloc(sizeof(IpcMessage)); + System.Log(Fs, + "Sent message → WindowResizeTo (%dx%d at %d, %d) to (%dx%d)", + Compositor.active_win->width, Compositor.active_win->height, + Compositor.active_win->x, Compositor.active_win->y, new_width, + new_height); + + if (win->signature != WIN_SIGNATURE) + return; + + win->width = new_width; + win->height = new_height; + msg->client = Compositor.active_win->client; + msg->type = CPZ_MSG_WIN_RESIZE_TO; + msg->payload = win; + Ipc.MsgSend(msg->client, msg); + } + } + +resize_set_pointer: + // FIXME: Move this to @compositor_set_pointer_for_window() or somewhere more + // appropriate? + if (!set_pointer_to_resize) { + if (Compositor.active_win) + if (@gui_window_is_hovered(Compositor.active_win)) + if (Compositor.active_win->hovered_widget) + if (Compositor.active_win->hovered_widget->pointer) + @compositor_set_pointer( + Compositor.active_win->hovered_widget->pointer); + else { + if (Compositor.active_win->pointer) + @compositor_set_pointer(Compositor.active_win->pointer); + else + @compositor_set_pointer(); + } + else { + if (Compositor.active_win->pointer) + @compositor_set_pointer(Compositor.active_win->pointer); + else + @compositor_set_pointer(); + } + else + @compositor_set_pointer(); + else + @compositor_set_pointer(); + } +} + +U0 @compositor_handle_window_drag() +{ + if (!(@compositor_active_win_flag_is_set(WIN_FLAGS_MOVABLE))) + return; + + I64 title_length; + I64 title_offset; + I64 new_x; + I64 new_y; + + // FIXME: Get title_length and title_offset values from theme and Window + // flags. + title_offset = 0; + title_length = Compositor.active_win->width; + + if (@compositor_active_win_flag_is_set(WIN_FLAGS_TITLE_BAR)) { + title_offset = Compositor.active_win->title_bar_x; + title_length = Compositor.active_win->title_bar_width; + } + + if (Mouse.left && !Compositor.mouse.left && Compositor.active_win) { + if (Mouse.x > Compositor.active_win->x + title_offset && Mouse.x < Compositor.active_win->x + title_offset + title_length && Mouse.y > Compositor.active_win->y && Mouse.y < Compositor.active_win->y + 18) { + Compositor.active_win->origin.x = Compositor.active_win->x; + Compositor.active_win->origin.y = Compositor.active_win->y; + Compositor.active_win->origin.width = Compositor.active_win->width; + Compositor.active_win->origin.height = Compositor.active_win->height; + Compositor.active_win->origin.mouse_x = Mouse.x; + Compositor.active_win->origin.mouse_y = Mouse.y; + Compositor.in_drag = TRUE; + } + } + + if (!Mouse.left) { + Compositor.in_drag = FALSE; + Compositor.in_resize = FALSE; + } + + if (Compositor.in_drag) { + new_x = Compositor.active_win->origin.x + (Mouse.x - Compositor.active_win->origin.mouse_x); + new_y = Compositor.active_win->origin.y + (Mouse.y - Compositor.active_win->origin.mouse_y); + if (Compositor.active_win->x != new_x || Compositor.active_win->y != new_y) { + Window* win = Compositor.active_win; + IpcMessage* msg = CAlloc(sizeof(IpcMessage)); + System.Log( + Fs, "Sent message → WindowMoveTo (%dx%d at %d, %d) to (%d, %d)", + Compositor.active_win->width, Compositor.active_win->height, + Compositor.active_win->x, Compositor.active_win->y, new_x, new_y); + win->x = Min(Compositor.bounds.x2, Max(Compositor.bounds.x1, new_x)); + win->y = Min(Compositor.bounds.y2, Max(Compositor.bounds.y1, new_y)); + msg->client = Compositor.active_win->client; + msg->type = CPZ_MSG_WIN_MOVE_TO; + msg->payload = win; + Ipc.MsgSend(msg->client, msg); + } + } +} + +U0 @compositor_handle_window_select() +{ + Window* win; + @compositor_windows_list* win_list; + if (Mouse.left && !Compositor.mouse.left) { + if (((Mouse.x < Compositor.active_win->x || Mouse.x > Compositor.active_win->x + Compositor.active_win->width) || (Mouse.y < Compositor.active_win->y || Mouse.y > Compositor.active_win->y + Compositor.active_win->height)) || + @compositor_active_win_flag_is_set(WIN_FLAGS_NO_REINDEX)) { + win_list = Compositor.windows->next; + while (win_list->next) { + win_list = win_list->next; + } + while (win_list) { + if (Mouse.x > win_list->window->x && Mouse.x < win_list->window->x + win_list->window->width && Mouse.y > win_list->window->y && Mouse.y < win_list->window->y + win_list->window->height) { + if (Compositor.active_win != win_list->window && !(@gui_window_flag_is_set(win_list->window, WIN_FLAGS_MINIMIZED)) && !(@gui_window_flag_is_set(win_list->window, WIN_FLAGS_HIDDEN))) { + @compositor_set_active_window(win_list->window); + return; + } + } + win_list = win_list->prev; + } + } + } +} + +U0 @compositor_handle_global_input_events() +{ + // FIXME: Handle registered global input events + IpcMessage* msg; + I64 mouse_x; + I64 mouse_y; + I64 type = NULL; + Bool mouse_left = Mouse.left; + Bool mouse_right = Mouse.right; + + I64 key = Keyboard.active_key; + I64 tS = Keyboard.active_key_tS; + + if (key && tS != Keyboard.last_key_tS) { + + @compositor_windows_list* win_list = Compositor.global_input_event_listeners->next; + while (win_list) { + msg = CAlloc(sizeof(IpcMessage)); + System.Log(Fs, "Sent message → WinKeyPress [%08x] to window 0x%08x", key, + win_list->window); + msg->client = win_list->window->client; + msg->type = CPZ_MSG_WIN_KEY_PRESS; + msg->payload = win_list->window; + msg->i64 = key; + Ipc.MsgSend(msg->client, msg); + win_list = win_list->next; + } + } +} + +U0 @compositor_register_global_input_event_listener(Window* win) +{ + @compositor_add_global_input_event_listener_to_list(win); +} + +U0 @compositor_unregister_global_input_event_listener(Window* win) +{ + @compositor_remove_global_input_event_listener_from_list(win); +} + +U0 @compositor_handle_window_input_events(Window* win) +{ + if (!win) + return; + + IpcMessage* msg; + I64 mouse_x; + I64 mouse_y; + I64 type = NULL; + Bool mouse_left = Mouse.left; + Bool mouse_right = Mouse.right; + + if (win->focused_widget) { + if (win->focused_widget->type == WIDGET_TYPE_INPUT) { + if (@widget_input_handle_key(win->focused_widget)) { + msg = CAlloc(sizeof(IpcMessage)); + System.Log(Fs, "Sent message → WinKeyPress"); + msg->client = win->client; + msg->type = CPZ_MSG_WIN_KEY_PRESS; + msg->payload = win; + Ipc.MsgSend(msg->client, msg); + } + if (win->focused_widget(BitmapFontTextInputWidget*) + ->selected_region_start + == -1 + || win->focused_widget(BitmapFontTextInputWidget*) + ->selected_region_end + == -1) { + if (win->focused_widget(BitmapFontTextInputWidget*)->blink != Blink) { + win->focused_widget(BitmapFontTextInputWidget*)->blink = !win->focused_widget(BitmapFontTextInputWidget*)->blink; + @compositor_refresh(win); + } + } + } + } + + if (Mouse.z != Compositor.mouse.delta_z) { + msg = CAlloc(sizeof(IpcMessage)); + System.Log(Fs, "Sent message → WindowMouseWheel"); + msg->client = win->client; + msg->type = CPZ_MSG_WIN_MOUSE_WHEEL; + msg->payload = win; + Ipc.MsgSend(msg->client, msg); + } + + if (Mouse.x != Compositor.mouse.x || Mouse.y != Compositor.mouse.y || Mouse.left != Compositor.mouse.left || Mouse.right != Compositor.mouse.right) { + if (Mouse.x != Compositor.mouse.x || Mouse.y != Compositor.mouse.y) { + mouse_x = Mouse.x - win->x; + mouse_y = Mouse.y - win->y; + if (Mouse.x >= win->x && Mouse.x <= win->x + win->width && Mouse.y >= win->y && Mouse.y <= win->y + win->height && (mouse_x != win->mouse.x || mouse_y != win->mouse.y)) { + win->mouse.x = mouse_x; + win->mouse.y = mouse_y; + msg = CAlloc(sizeof(IpcMessage)); + System.Log(Fs, "Sent message → WindowMouseAt (%dx%d)", mouse_x, + mouse_y); + msg->client = win->client; + msg->type = CPZ_MSG_WIN_MOUSE_AT; + msg->payload = win; + Ipc.MsgSend(msg->client, msg); + } + } + if (mouse_left != win->mouse.left) { + switch (mouse_left) { + case MS_UP: + System.Log(Fs, "Sent message → WindowMouseLeftBtnUp"); + type = CPZ_MSG_WIN_LEFT_BTN_UP; + break; + case MS_DOWN: + System.Log(Fs, "Sent message → WindowMouseLeftBtnDown"); + type = CPZ_MSG_WIN_LEFT_BTN_DOWN; + break; + default: + break; + } + win->mouse.left = mouse_left; + win->left_btn_down.x = Mouse.x - win->x; + win->left_btn_down.y = Mouse.y - win->y; + msg = CAlloc(sizeof(IpcMessage)); + msg->client = win->client; + msg->type = type; + msg->payload = win; + Ipc.MsgSend(msg->client, msg); + } + if (mouse_right != win->mouse.right) { + switch (mouse_right) { + case MS_UP: + System.Log(Fs, "Sent message → WindowMouseRightBtnUp"); + type = CPZ_MSG_WIN_RIGHT_BTN_UP; + break; + case MS_DOWN: + System.Log(Fs, "Sent message → WindowMouseRightBtnDown"); + type = CPZ_MSG_WIN_RIGHT_BTN_DOWN; + break; + default: + break; + } + win->mouse.right = mouse_right; + win->right_btn_down.x = Mouse.x - win->x; + win->right_btn_down.y = Mouse.y - win->y; + msg = CAlloc(sizeof(IpcMessage)); + msg->client = win->client; + msg->type = type; + msg->payload = win; + Ipc.MsgSend(msg->client, msg); + } + } +} + +U0 @compositor_handle_windows_input_events() +{ + if (Compositor.active_win) + @compositor_handle_window_input_events(Compositor.active_win); + @compositor_windows_list* win_list = Compositor.windows; + Compositor.max_z_index = 0; + while (win_list) { + if (win_list->window) { + if (win_list->window->flags & WIN_FLAGS_MENU && win_list->window != Compositor.active_win && Gui.Window.IsVisible(win_list->window)) + @compositor_handle_window_input_events(win_list->window); + } + Compositor.max_z_index++; + win_list = win_list->next; + } +} + +U0 @compositor_reset_input_event_timestamps() +{ + Keyboard.last_key_tS = Keyboard.active_key_tS; +} + +Window* @compositor_create_window(I64 x, I64 y, I64 width, I64 height, + I64 flags = WIN_FLAGS_DEFAULT, + U8* title = NULL, Context2D* icon = NULL) +{ + Window* win = CAlloc(sizeof(Window)); + IpcMessage* msg = CAlloc(sizeof(IpcMessage)); + win->x = x; + win->y = y; + win->width = width; + win->height = height; + win->opacity = 255; + win->flags = flags; + win->icon = icon; + win->client = Fs; + win->signature = WIN_SIGNATURE; + win->widget = CAlloc(sizeof(@window_widgets_list)); + win->callback.close = &@gui_window_callback_close; + win->callback.maximize = &@gui_window_callback_maximize; + win->callback.minimize = &@gui_window_callback_minimize; + win->callback.repaint = NULL; + + if (title) + StrCpy(&win->title, title); + else + StrCpy(&win->title, "Untitled window"); + msg->client = Fs; + msg->type = CPZ_MSG_WIN_CREATE; + msg->payload = win; + Ipc.MsgSend(Compositor.task, msg); + while (!win->backing_store) { + Sleep(1); + }; + return win; +} + +U0 @compositor_destroy_window(Window* win) +{ + IpcMessage* msg = CAlloc(sizeof(IpcMessage)); + msg->client = Fs; + msg->type = CPZ_MSG_WIN_DESTROY; + msg->payload = win; + Ipc.MsgSend(Compositor.task, msg); +} + +U0 @compositor_hide_window(Window* win) +{ + @gui_window_hide(win); + Compositor.active_win = NULL; +} + +U0 @compositor_show_window(Window* win) { @gui_window_show(win); } + +Context2D* @compositor_win_select_backing_store(Window* win) +{ + I64 iterations = 0; + while (Compositor.in_resize && win == Compositor.active_win && (win->width != win->backing_store->width || win->height != win->backing_store->height) && iterations < 64) { + iterations++; + if (!(iterations % 8)) + @compositor_refresh(win); + Sleep(1); + } + return win->backing_store; +} + +U0 @compositor_blit_window_backing_stores() +{ + @compositor_windows_list* win_list; + win_list = Compositor.windows; + while (win_list) { + if (win_list->window) { + if (!(@gui_window_flag_is_set(win_list->window, WIN_FLAGS_MINIMIZED)) && !(@gui_window_flag_is_set(win_list->window, WIN_FLAGS_HIDDEN)) && win_list->window->signature == WIN_SIGNATURE) { + if (@compositor_win_select_backing_store(win_list->window) == win_list->window->resize_ctx) { + CopyRect2D(Compositor.ctx, win_list->window->x, win_list->window->y, + win_list->window->resize_ctx); + } else { + if (win_list->window->alpha) { + Compositor.blend_ctx->width = win_list->window->width; + Compositor.blend_ctx->height = win_list->window->height; + CopyRect2D(Compositor.blend_ctx, -win_list->window->x, + -win_list->window->y, Compositor.ctx); + BlendRect2D(win_list->window->backing_store, Compositor.blend_ctx); + CopyRect2D(Compositor.ctx, win_list->window->x, win_list->window->y, + Compositor.blend_ctx); + } else { + CopyRect2D(Compositor.ctx, win_list->window->x, win_list->window->y, + win_list->window->backing_store); + } + } + if (win_list->window == Compositor.active_win && !(@gui_window_flag_is_set(win_list->window, WIN_FLAGS_NOHILIGHT))) { + // Top border + Line2D(Compositor.ctx, win_list->window->x - 1, + win_list->window->y - 1, + win_list->window->x - 1 + win_list->window->width + 2, + win_list->window->y - 1, Compositor.theme.color.active_border); + // Left border + Line2D(Compositor.ctx, win_list->window->x - 1, + win_list->window->y - 1, win_list->window->x - 1, + win_list->window->y + win_list->window->height, + Compositor.theme.color.active_border); + // Bottom border + Line2D(Compositor.ctx, win_list->window->x - 1, + win_list->window->y + win_list->window->height, + win_list->window->x - 1 + win_list->window->width + 2, + win_list->window->y + win_list->window->height, + Compositor.theme.color.active_border); + // Right border + Line2D(Compositor.ctx, + win_list->window->x - 1 + win_list->window->width + 1, + win_list->window->y - 1, + win_list->window->x - 1 + win_list->window->width + 1, + win_list->window->y + win_list->window->height, + Compositor.theme.color.active_border); + // Bottom shadow + Line2D(Compositor.ctx, win_list->window->x + 1, + win_list->window->y + win_list->window->height + 1, + win_list->window->x + win_list->window->width + 2, + win_list->window->y + win_list->window->height + 1, + Compositor.theme.color.active_border); + // Right shadow + Line2D(Compositor.ctx, + win_list->window->x - 1 + win_list->window->width + 2, + win_list->window->y + 1, + win_list->window->x - 1 + win_list->window->width + 2, + win_list->window->y + win_list->window->height + 1, + Compositor.theme.color.active_border); + } + } + } + win_list = win_list->next; + } +} + +U0 @compositor_init() +{ + Compositor.blend_ctx = NewContext2D(Display.Width(), Display.Height()); + Compositor.ctx = NewContext2D(Display.Width(), Display.Height()); + Compositor.windows = CAlloc(sizeof(@compositor_windows_list)); + Compositor.global_input_event_listeners = CAlloc(sizeof(@compositor_windows_list)); + Compositor.bounds.x1 = -Display.Width(); + Compositor.bounds.y1 = 33; + Compositor.bounds.x2 = Display.Width(); + Compositor.bounds.y2 = Display.Height(); + Compositor.active_win = NULL; + Compositor.menubar.win = NULL; + Compositor.menubar.task = NULL; + Compositor.menubar.title = NULL; + Compositor.next_id = 0; + Compositor.session.user.uid = 1; + StrCpy(&Compositor.session.home, "/home/alec"); + StrCpy(&Compositor.session.hostname, "erythros"); + StrCpy(&Compositor.session.user.name, "alec"); + StrCpy(&Compositor.session.user.fullname, "Alec Murphy"); + @compositor_set_theme("Umami"); + @compositor_set_pointer(); +} + +U0 @compositor_task() +{ + Window* win; + Ipc.InitQueue(Fs); + Compositor.task = Fs; + System.Log(Fs, "Task running at 0x%08x", Fs); + + I64 total_mem; + I64 free_mem; + + while (1) { + // Process client IpcMessages. + @compositor_ipc_queue_process(); + + // Handle active window flags + @compositor_handle_active_window_flags(); + + // Handle window resize + @compositor_handle_window_resize(); + + // Handle window drag + @compositor_handle_window_drag(); + + // Handle window select + @compositor_handle_window_select(); + + // Handle global input events + @compositor_handle_global_input_events(); + + // Handle windows input events + @compositor_handle_windows_input_events(); + + // Reset input event timestamps + @compositor_reset_input_event_timestamps(); + + // Blit window backing stores + @compositor_blit_window_backing_stores(); + + // Draw Mouse Pointer (if no mouse integration). + // if (!Mouse.Update || Mouse.integration_type == MI_QEMU) + Blot2D(Compositor.ctx, Mouse.X(), Mouse.Y(), Compositor.pointer); + + // Debug stuff + I64 debug_row; + + if (1 == 2) { + debug_row = 2; + + total_mem = sys_code_bp->alloced_u8s; + if (sys_data_bp) { + total_mem += sys_data_bp->alloced_u8s; + } + free_mem = sys_code_bp->alloced_u8s - sys_code_bp->used_u8s; + if (sys_data_bp) { + free_mem += sys_data_bp->alloced_u8s - sys_data_bp->used_u8s; + } + + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + "SysTimerRead : 0x%08x", SysTimerRead); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + "Total Memory : 0x%08x", total_mem); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + "Free Memory : 0x%08x", free_mem); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + "Mouse.X() : %d", Mouse.X()); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + "Mouse.Y() : %d", Mouse.Y()); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + "Mouse.Z() : %d", Mouse.z); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + "Compositor.mouse.z : %d", Compositor.mouse.z); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + "Mouse.left() : %d", Compositor.mouse.left > 0); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + "Mouse.right() : %d", Compositor.mouse.right > 0); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + "Active window: 0x%08x", Compositor.active_win); + if (Compositor.active_win) { + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + "[+] x : %d", Compositor.active_win->x); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + " y : %d", Compositor.active_win->y); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + " width : %d", Compositor.active_win->width); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + " height : %d", Compositor.active_win->height); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + " title : %s", Compositor.active_win->title); + ConsolePrint2D(Compositor.ctx, 08 * 03, 16 * debug_row++, , , + " flags : %016b", Compositor.active_win->flags); + } + } + + // Flip off-screen context to framebuffer. + Graphics2D.Flip(Compositor.ctx); + + // Update Compositor mouse button state + Compositor.mouse.x = Mouse.x; + Compositor.mouse.y = Mouse.y; + if (Compositor.mouse.delta_z != Mouse.z) + Compositor.mouse.z = (Mouse.z - Compositor.mouse.delta_z) * T(Mouse.natural_scroll, -Mouse.wheel_sensitivity, Mouse.wheel_sensitivity); + Compositor.mouse.delta_z = Mouse.z; + Compositor.mouse.left = Mouse.left; + Compositor.mouse.right = Mouse.right; + + if (Display.Update) + Display.Update(); + Sleep(1); + } +} + +Gui.Window.Refresh = &@compositor_refresh; +Gui.Window.SetFocus = &@compositor_set_active_window; +Gui.Window.SetZIndex = &@compositor_set_z_index_send_msg; + +Compositor.GetWindowByTitle = &@compositor_get_window_by_title; +Compositor.GetWindowByZIndex = &@compositor_get_window_by_z_index; +Compositor.Init = &@compositor_init; +Compositor.CreateWindow = &@compositor_create_window; +Compositor.DestroyWindow = &@compositor_destroy_window; +Compositor.HideWindow = &@compositor_hide_window; +Compositor.RegisterForGlobalInputEvents = &@compositor_register_global_input_event_listener; +Compositor.ShowWindow = &@compositor_show_window; +Compositor.Task = &@compositor_task; +Compositor.UnregisterForGlobalInputEvents = &@compositor_unregister_global_input_event_listener; +Compositor.SetWallpaper = &@compositor_set_wallpaper_send_msg; + +"compositor "; \ No newline at end of file diff --git a/System/Core/FileSystem.HC b/System/Core/FileSystem.HC new file mode 100644 index 0000000..c9b8dc5 --- /dev/null +++ b/System/Core/FileSystem.HC @@ -0,0 +1,3 @@ + + +"filesystem "; \ No newline at end of file diff --git a/System/Core/Menu.HC b/System/Core/Menu.HC new file mode 100644 index 0000000..8983c9a --- /dev/null +++ b/System/Core/Menu.HC @@ -0,0 +1,67 @@ +// Core component for Menu functions + +#define MENU_ITEM_MIN_HEIGHT 24 +#define MENU_ITEM_MIN_WIDTH 256 + +I64 @menu_get_items_count(Window* win) +{ + I64 count = 0; + @window_widgets_list* wl = win->widget; + while (wl) { + if (wl->widget) { + if (wl->widget->type == WIDGET_TYPE_MENU_ITEM) + count++; + } + wl = wl->next; + } + return count; +} + +MenuItemWidget* @menu_add_item(Window* win, U8* text, Context2D* icon, + U64 callback, U8* path = NULL, + Window* submenu = NULL) +{ + I64 items_count = @menu_get_items_count(win); + win->height = 8; + win->height += MENU_ITEM_MIN_HEIGHT * (items_count + 1); + MenuItemWidget* item = Gui.CreateWidget( + win, WIDGET_TYPE_MENU_ITEM, 0, MENU_ITEM_MIN_HEIGHT * items_count, + MENU_ITEM_MIN_WIDTH, MENU_ITEM_MIN_HEIGHT); + Gui.Widget.SetText(item, text); + if (icon) + item->icon = icon; + if (path) + item->path = StrNew(path); + if (submenu) + item->submenu = submenu; + if (callback) + Gui.Widget.SetCallback(item, "clicked", callback); + return item; +} + +Window* @menu_new(U8* title = NULL) +{ + Window* menu = Compositor.CreateWindow( + 0, 0, MENU_ITEM_MIN_WIDTH, MENU_ITEM_MIN_HEIGHT, + WIN_FLAGS_NOHILIGHT | WIN_FLAGS_SKIP | WIN_FLAGS_MENU); + Gui.Window.Hide(menu); + if (title) + Gui.Window.SetTitle(menu, title); + else + Gui.Window.SetTitle(menu, ""); + return menu; +} + +class @menu +{ + MenuItemWidget* (*AddItem)(Window* win, U8* text, Context2D* icon, + U64 callback, U8* path = NULL, + Window* submenu = NULL); + Window* (*New)(U8* title); +}; + +@menu Menu; +Menu.AddItem = &@menu_add_item; +Menu.New = &@menu_new; + +"menu "; \ No newline at end of file diff --git a/System/Core/MessageBox.HC b/System/Core/MessageBox.HC new file mode 100644 index 0000000..8f8f1d8 --- /dev/null +++ b/System/Core/MessageBox.HC @@ -0,0 +1,108 @@ +// Core component for MessageBox functions + +Context2D* MESSAGEBOX_ICON_ERR = Image.FileToContext2D( + "/Media/Themes/Umami/Icon/status/messagebox_critical.png"); +Context2D* MESSAGEBOX_ICON_INFO = Image.FileToContext2D("/Media/Themes/Umami/Icon/status/messagebox_info.png"); +Context2D* MESSAGEBOX_ICON_WARN = Image.FileToContext2D( + "/Media/Themes/Umami/Icon/status/messagebox_warning.png"); + +Context2D* MESSAGEBOX_WIN_ICON_ERR = Image.FileToContext2D( + "/Media/Themes/Umami/Icon/status/messagebox_critical_16x16.png"); +Context2D* MESSAGEBOX_WIN_ICON_INFO = Image.FileToContext2D( + "/Media/Themes/Umami/Icon/status/messagebox_info_16x16.png"); +Context2D* MESSAGEBOX_WIN_ICON_WARN = Image.FileToContext2D( + "/Media/Themes/Umami/Icon/status/messagebox_warning_16x16.png"); + +#define MESSAGEBOX_TYPE_ALERT 0 +#define MESSAGEBOX_TYPE_ERROR 1 +#define MESSAGEBOX_TYPE_INFO 2 + +U0 @messagebox_close_window(Window* window) +{ + Compositor.DestroyWindow(window); +} +U0 @messagebox_close_widget(Widget* widget) +{ + Compositor.DestroyWindow(widget->parent_win); +} + +U0 @messagebox_msg(U8* str, I64 type, Context2D* win_icon, Context2D* icon, + U8* options = NULL, U64 callback = NULL) +{ + U64 flags = WIN_FLAGS_MOVABLE | WIN_FLAGS_ICON | WIN_FLAGS_TITLE_BAR | WIN_FLAGS_CLOSE_BUTTON; + Window* win = Compositor.CreateWindow(0, 0, 320, 192, flags); + Gui.Window.SetIcon(win, win_icon); + switch (type) { + case MESSAGEBOX_TYPE_ALERT: + Gui.Window.SetTitle(win, "Alert"); + break; + case MESSAGEBOX_TYPE_ERROR: + Gui.Window.SetTitle(win, "Error"); + break; + case MESSAGEBOX_TYPE_INFO: + Gui.Window.SetTitle(win, "Info"); + break; + } + Context2DWidget* ctx_icon = Gui.CreateWidget(win, WIDGET_TYPE_CONTEXT2D, 8, 16, 24, 24); + ctx_icon->ctx = icon; + TextLabelWidget* lbl_text = Gui.CreateWidget(win, WIDGET_TYPE_LABEL, 40, 16, 192, 96); + ButtonWidget* btn_ok = NULL; + ButtonWidget* btn_cancel = NULL; + + Gui.Widget.SetText(lbl_text, str); + Gui.Window.SetCallback(win, "close", callback); + + if (options) { + btn_ok = Gui.CreateWidget(win, WIDGET_TYPE_BUTTON, (win->width / 2) - 80, + win->height - 60, 64, 24); + btn_cancel = Gui.CreateWidget(win, WIDGET_TYPE_BUTTON, (win->width / 2) + 16, + win->height - 60, 64, 24); + Gui.Widget.SetText(btn_ok, " OK "); + Gui.Widget.SetText(btn_cancel, " Cancel "); + Gui.Widget.SetCallback(btn_ok, "clicked", callback); + Gui.Widget.SetCallback(btn_cancel, "clicked", callback); + btn_ok->tag = TRUE; + btn_cancel->tag = FALSE; + } else { + btn_ok = Gui.CreateWidget(win, WIDGET_TYPE_BUTTON, (win->width / 2) - 32, + win->height - 60, 64, 24); + Gui.Widget.SetText(btn_ok, " OK "); + Gui.Widget.SetCallback(btn_ok, "clicked", callback); + btn_ok->tag = TRUE; + } + + Gui.Window.Center(win); + Gui.Window.SetFocus(win); +} + +U0 @messagebox_alert(U8* str, U8* options = NULL, U64 callback = NULL) +{ + @messagebox_msg(str, MESSAGEBOX_TYPE_ALERT, MESSAGEBOX_WIN_ICON_WARN, + MESSAGEBOX_ICON_WARN, options, callback); +} + +U0 @messagebox_error(U8* str, U8* options = NULL, U64 callback = NULL) +{ + @messagebox_msg(str, MESSAGEBOX_TYPE_ERROR, MESSAGEBOX_WIN_ICON_ERR, + MESSAGEBOX_ICON_ERR, options, callback); +} + +U0 @messagebox_info(U8* str, U8* options = NULL, U64 callback = NULL) +{ + @messagebox_msg(str, MESSAGEBOX_TYPE_INFO, MESSAGEBOX_WIN_ICON_INFO, + MESSAGEBOX_ICON_INFO, options, callback); +} + +class @messagebox +{ + U0* (*Alert)(U8* str, U8* options = NULL, U64 callback = NULL); + U0* (*Error)(U8* str, U8* options = NULL, U64 callback = NULL); + U0* (*Info)(U8* str, U8* options = NULL, U64 callback = NULL); +}; + +@messagebox MessageBox; +MessageBox.Alert = &@messagebox_alert; +MessageBox.Error = &@messagebox_error; +MessageBox.Info = &@messagebox_info; + +"messagebox "; \ No newline at end of file diff --git a/System/Core/Scheduler.HC b/System/Core/Scheduler.HC new file mode 100644 index 0000000..6415f07 --- /dev/null +++ b/System/Core/Scheduler.HC @@ -0,0 +1,79 @@ +/* clang-format off */ + +U0 @scheduler_restore_page_table(U64 i) { + U64 reg R15 _pt = i.u32[1]; + if (_pt) { // Use CTask's page table entries + asm { + MOV RAX, R15 + MOV_CR3_RAX + } + } else { // Use identity mapping + asm { + MOV EAX, [MEM_PML4] + MOV_CR3_RAX + } + } +} + +asm { +ERYTHROS_TASK_CONTEXT_RESTORE_START:: + XOR RAX,RAX + INC U64 GS:CCPU.swap_cnter[RAX] + MOV RSI,FS:CTask.addr[RAX] + BT U32 CTask.rflags[RSI],RFLAGf_INT + JNC @@05 + BTS U32 GS:CCPU.cpu_flags[RAX],CPUf_RAN_A_TASK +@@05: BT U64 CTask.task_flags[RSI],TASKf_DISABLE_BPTS + JC @@15 + MOV RDX,U64 CTask.bpt_lst[RSI] +@@10: TEST RDX,RDX + JZ @@15 + MOV RDI,U64 CBpt.addr[RDX] + MOV U8 [RDI],OC_BPT + MOV RDX,U64 CBpt.next[RDX] + JMP @@10 + +@@15: INC U64 CTask.swap_cnter[RSI] + + MOV RAX, U64 CTask.user_data[RSI] + PUSH RAX + CALL I32 &@scheduler_restore_page_table + + MOV RAX,U64 CTask.fpu_mmx[RSI] + FXRSTOR U64 [RAX] + + MOV RAX,RSP + LEA RSP,U64 CTask.rcx[RSI] + POP RCX + POP RDX + POP RBX + POP RBP + POP RDI + POP R8 + POP R9 + POP R10 + POP R11 + POP R12 + POP R13 + POP R14 + POP R15 + MOV RSP,RAX + + MOV RAX,U64 CTask.rax[RSI] + PUSH CGDT.ds + PUSH U64 CTask.rsp[RSI] + PUSH U64 CTask.rflags[RSI] + PUSH CGDT.cs64 + PUSH U64 CTask.rip[RSI] + MOV RSI,U64 CTask.rsi[RSI] + IRET + ERYTHROS_TASK_CONTEXT_RESTORE_END:: + NOP + //************************************ +} + +/* clang-format on */ + +Function.Patch(_TASK_CONTEXT_RESTORE, ERYTHROS_TASK_CONTEXT_RESTORE_START); + +"scheduler "; \ No newline at end of file diff --git a/System/Core/Shell.HC b/System/Core/Shell.HC new file mode 100644 index 0000000..90b2a95 --- /dev/null +++ b/System/Core/Shell.HC @@ -0,0 +1,282 @@ +#define SHELL_OPTS_ERR_INVALID_OPT -1 +#define SHELL_OPTS_ERR_EXTRA_OPD -2 + +U0 @shell_free_args(I64 argc, U8** argv) +{ + I64 i; + for (i = 0; i < argc; i++) + Free(argv[i]); + if (argv) + Free(argv); +} + +U8** @shell_parse_args(@shell* sh, U8* str, + I64* argc) +{ // Return argc, argv from str. + Bool quoted = FALSE; + I64 _argc = 0; + U8** _argv = NULL; + U8** _tmp = CAlloc(sizeof(U64) * StrLen(str)); + I64 i = 0; + I64 s = 0; + I64 len; + while (i < StrLen(str) + 1) { + switch (str[i]) { + case 0: + case ' ': + if (!quoted) { + len = (str + i) - (str + s - 1); + if (str[i - 1] == '"') + len--; + if (len - 1) { + _tmp[_argc] = CAlloc(len); + MemCpy(_tmp[_argc], str + s, len - 1); + _argc++; + } + s = i + 1; + } + break; + case '"': + quoted = !quoted; + if (quoted) + s = i + 1; + break; + default: + break; + } + i++; + } + *argc = _argc; + _argv = CAlloc(sizeof(U64) * _argc); + MemCpy(_argv, _tmp, sizeof(U64) * _argc); + Free(_tmp); + return _argv; +} + +I64 @shell_parse_opts(@shell* sh, U8* op_lst, I64 argc, U8** argv, I64* flags, + U64* op_err, Bool ignore_extra_opd = FALSE) +{ + I64 i, j; + U8 op_chr[2]; + op_chr[1] = 0; + for (i = 1; i < argc; i++) { + if (argv[i][0] == '-') { + for (j = 1; j < StrLen(argv[i]); j++) { + op_chr[0] = argv[i][j]; + if (StrFind(&op_chr, op_lst)) + *flags |= 1 << (StrFind(&op_chr, op_lst) - op_lst); + else { + *op_err = StrNew(&op_chr); + return SHELL_OPTS_ERR_INVALID_OPT; + } + } + } else { + if (!ignore_extra_opd) { + *op_err = StrNew(argv[i]); + return SHELL_OPTS_ERR_EXTRA_OPD; + } + } + } + return 0; +} +U8* @shell_expand_relative_path(@shell* sh, U8* path) +{ + if (!path || !sh) + return NULL; + if (StrLen(path) < 1) + return NULL; + switch (path[0]) { + case '/': + return StrNew(path); + break; + default: + U8* abs_path = CAlloc(StrLen(path) + StrLen(&sh->cwd) + 4); + StrPrint(abs_path, "%s/%s", &sh->cwd, path); + return abs_path; + break; + } +} + +U8* @shell_get_env_var(@shell* sh, U8* key) +{ + @shell_env_var* var = sh->env->next; + while (var) { + if (StrLen(&var->key) && StrLen(&var->value)) + if (!StrCmp(&var->key, key)) + return &var->value; + var = var->next; + } + return ""; +} + +U0 @shell_set_env_var(@shell* sh, U8* key, U8* value) +{ + if (!sh || !key || !value) + return; + @shell_env_var* var = sh->env->next; + while (var->next) { + if (!StrCmp(&var->key, key)) { + StrCpy(&var->value, value); + return; + } + var = var->next; + } + @shell_env_var* new = CAlloc(sizeof(@shell_env_var)); + StrCpy(&new->key, key); + StrCpy(&new->value, value); + new->prev = var; + var->next = new; +} + +U0 @shell_unset_env_var(@shell* sh, U8* key) +{ + @shell_env_var* var = sh->env->next; + @shell_env_var* prev = NULL; + @shell_env_var* next = NULL; + while (var) { + if (!StrCmp(&var->key, key)) { + prev = var->prev; + next = var->next; + if (prev) + prev->next = next; + if (next) + next->prev = prev; + Free(var); + return; + } + var = var->next; + } +} + +U0 @shell_history_append(@shell* sh, U8* str) +{ + if (!sh || !str) + return; + if (!StrCmp(str, "")) + return; + I64 i; + sh->history.entries[sh->history.pos] = StrNew(str); + sh->history.pos++; + if (sh->history.pos > SHELL_HISTORY_LIMIT - 1) { + Free(sh->history.entries[0]); + for (i = 0; i < SHELL_HISTORY_LIMIT; i++) + sh->history.entries[i] = sh->history.entries[i + 1]; + sh->history.pos--; + } +} + +U0 @shell_process_args(@shell* sh, I64 argc, U8** argv) +{ + if (argc < 1 || !argv) + return; + I64 i; + U8 buf[256]; + for (i = 0; i < argc; i++) { + if (argv[i][0] == '\d') { + switch (argv[i][1]) { + case '?': + Free(argv[i]); + StrPrint(&buf, "%d", sh->answer); + argv[i] = StrNew(&buf); + break; + case '0': + Free(argv[i]); + argv[i] = StrNew("esh"); + break; + default: + Free(argv[i]); + argv[i] = StrNew(@shell_get_env_var(sh, argv[i] + 1)); + break; + } + } + if (!StrCmp(argv[i], "~")) { + Free(argv[i]); + argv[i] = StrNew(&sh->session->home); + } + } +} + +U0 @shell_update_prompts(@shell* sh) +{ + U8 buf[512]; + U8 buf2[512]; + StrCpy(&buf, &sh->cwd); + StrPrint(buf2, "/home/%s", &sh->session->user.name); + if (!StrCmp(&buf, &buf2)) + StrCpy(&buf, "~"); + else + StrCpy(&buf, StrLastOcc(&buf, "/") + 1); + StrPrint(&sh->PS1, "[%s@%s %s]\d ", &sh->session->user.name, + &sh->session->hostname, &buf); +} + +I64 @shell_input_loop(@shell* sh) +{ + CHashFun* cmd; + I64 argc; + U8** argv; + U8 buf[4096]; + Bool exit = FALSE; + I64 i; + I64 (*@shell_exec)(@shell* sh, I64 argc, U8** argv); + + while (!exit) { + + @shell_update_prompts(sh); + Stdio.WriteLine(sh, &sh->PS1); + Stdio.ReadLine(sh, &buf); + + @shell_history_append(sh, &buf); + argv = @shell_parse_args(sh, &buf, &argc); + + if (argc) { + if (!StrCmp(argv[0], "exit")) { + exit = TRUE; + goto @shell_exit; + } + @shell_process_args(sh, argc, argv); + StrPrint(&buf, "@shell_cmd_%s", argv[0]); + cmd = HashFind(&buf, adam_task->hash_table, HTT_FUN); + if (cmd) { + @shell_exec = cmd->exe_addr; + sh->answer = @shell_exec(sh, argc, argv); + sh->break = FALSE; + FifoU8Flush(sh->input); + } else { + StrPrint(&buf, "%s: command not found\n", argv[0]); + Stdio.WriteLine(sh, &buf); + sh->answer = 0; + } + } + + @shell_exit : @shell_free_args(argc, argv); + } + return 0; +} + +U0 @shell_instance(@shell* sh) +{ + @shell_input_loop(sh); + sh->exit = TRUE; +} + +U0 @shell_init(@shell* sh) +{ + sh->env = CAlloc(sizeof(@shell_env_var)); + sh->history.limit = SHELL_HISTORY_LIMIT; + sh->history.pos = 0; + sh->history.entries = CAlloc(sizeof(U64) * SHELL_HISTORY_LIMIT); + sh->input = FifoU8New(SHELL_INPUT_FIFO_SIZE); + sh->task = Spawn(&@shell_instance, sh); +} + +@shell* @shell_new(Bool headless = FALSE) +{ + @shell* sh = CAlloc(sizeof(@shell)); + if (!headless) + @shell_init(sh); + StrCpy(&sh->cwd, &Compositor.session.home); + return sh; +} + +"shell "; \ No newline at end of file diff --git a/System/Core/ShellCommands.HC b/System/Core/ShellCommands.HC new file mode 100644 index 0000000..c5d458a --- /dev/null +++ b/System/Core/ShellCommands.HC @@ -0,0 +1,13 @@ +extern I64 @systemstarter_open(@shell* sh, I64 argc, U8** argv); + +CDirEntry* sc_de = FilesFind("M:/System/Shell/Commands/*.HC"); +CDirEntry* sc_de2 = sc_de; +while (sc_de2) { + if (!(!StrCmp(sc_de2->name, ".") && !StrCmp(sc_de2->name, ".."))) { + ExeDoc(DocRead(sc_de2->full_name)); + } + sc_de2 = sc_de2->next; +} +DirTreeDel(sc_de); + +"shellcommands "; \ No newline at end of file diff --git a/System/Core/SystemStarter.HC b/System/Core/SystemStarter.HC new file mode 100644 index 0000000..bf7fa4a --- /dev/null +++ b/System/Core/SystemStarter.HC @@ -0,0 +1,214 @@ +#define SYSSTART_MSG_NULL 0 +#define SYSSTART_MSG_SPAWN 1 +#define SYSSTART_MSG_KILL 2 + +class @systemtask +{ + U8* path; + U8* name; +}; + +class @systemstarter +{ + CTask* task; + U0 (*CreateTask)(U8* path, U8* name); + U0 (*Init)(); + U0 (*Spawn)(U8* path, U8* name); + U0 (*Task)(); +}; + +@systemstarter SystemStarter; + +U32 @systemstarter_ext(U8* path) +{ + U32 res = NULL; + U8* ext = FileSystem.GetFileExtension(path); + MemCpy(&res, ext, StrLen(ext)); + return res; +} + +U0 @systemstarter_init() { } + +I64 @systemstarter_open(@shell* sh, I64 argc, U8** argv) +{ + U8 buf[512]; + U8* path = @shell_expand_relative_path(sh, argv[1]); + if (!FileSystem.PathExists(path)) { + Stdio.WriteLine(sh, "error: path does not exist: "); + Stdio.WriteLine(sh, path); + Stdio.WriteLine(sh, "\n"); + Free(path); + return 1; + } + + switch (@systemstarter_ext(path)) { + case 'app': + StrCpy(&buf, ""); + String.Append(&buf, "I64 @exe_doc_buf_size = NULL; "); + String.Append(&buf, + "U8 *@exe_doc_buf = FileSystem.ReadFile(\"%s/Run.HC\", " + "&@exe_doc_buf_size); ", + path); + String.Append(&buf, "ExePutS(@exe_doc_buf); "); + String.Append(&buf, "Free(@exe_doc_buf); "); + // System.Log(Fs, &buf); + CTask* task = User; + TaskExe(task, NULL, "Raw(ON);\n", 0); + TaskExe(task, NULL, &buf, 0); + return 0; + break; + default: + Stdio.WriteLine(sh, "error: unknown or unsupported file type.\n"); + // Free(path); + return 1; + break; + }; +} + +U0 @systemstarter_spawn(U8* path, U8* name) +{ + CTask* task = Spawn(&UserCmdLine); + Sleep(Rand * 100); + U8 change_path_str[512]; + StrPrint(task->task_name, name); + StrPrint(change_path_str, "Cd(\"%s\");\n", path); + TaskExe(task, NULL, "Raw(ON);\n", 0); + TaskExe(task, NULL, change_path_str, 0); + TaskExe(task, NULL, "ExeFile(\"Run.HC\");\n", 0); + Sleep(Rand * 100); +} + +U0 @systemstarter_load_applets() +{ + U8 applet_name[512]; + CDirEntry* de = FilesFind("M:/Applets/*.applet"); + CDirEntry* tmpde = de; + while (tmpde) { + StrCpy(&applet_name, StrLastOcc(tmpde->full_name, "/") + 1); + *(StrFirstOcc(&applet_name, ".")) = NULL; + SystemStarter.Spawn(tmpde->full_name, &applet_name); + tmpde = tmpde->next; + } + DirTreeDel(de); +} + +U0 @systemstarter_play_user_startup_sound() +{ + U8 path[512]; + StrPrint(&path, "/home/%s/.sounds/startup.wav", + &Compositor.session.user.name); + U8** argv = CAlloc(sizeof(U64) * 2); + argv[0] = "aplay"; + argv[1] = &path; + @shell* sh = @shell_new(TRUE); + sh->session = &Compositor.session; + //@shell_cmd_aplay(sh, 2, argv); + Free(sh); +} + +U0 @systemstarter_set_user_wallpaper() +{ + U8 path[512]; + StrPrint(&path, "/home/%s/.wallpaper/wallpaper.png", + &Compositor.session.user.name); + U8** argv = CAlloc(sizeof(U64) * 2); + argv[0] = "wpset"; + argv[1] = &path; + //@shell_cmd_wpset(NULL, 2, argv); +} + +U0 @systemstarter_user_startup() +{ + // Set User wallpaper + @systemstarter_set_user_wallpaper(); + + // Play User startup sound + @systemstarter_play_user_startup_sound(); +} + +U0 @systemstarter_startup() +{ + + // Set user-specific startup preferences + Spawn(&@systemstarter_user_startup); + + // Initialize Clipboard + Clipboard.Init(); + + // Spawn Clipboard Task + Spawn(Clipboard.Task, , "Clipboard", T(mp_cnt > 3, 2, 1)); + + // Initialize SystemTray + SystemTray.Init(); + + // Spawn SystemTray Task + Spawn(SystemTray.Task, , "SystemTray", T(mp_cnt > 3, 2, 1)); + + SystemStarter.Spawn("M:/Applications/OS/Wallpaper.app", "Wallpaper"); + SystemStarter.Spawn("M:/Applications/OS/MenuBar.app", "MenuBar"); + SystemStarter.Spawn("M:/Applications/OS/TaskSwitcher.app", + "TaskSwitcher"); + + // Load SystemTray Applets + @systemstarter_load_applets; +} + +U0 @systemstarter_ipc_queue_process() +{ + IpcMessage* msg; + @systemtask* st = NULL; + msg = Ipc.MsgRecv(); + if (msg) { + switch (msg->type) { + case SYSSTART_MSG_SPAWN: + if (msg->payload) { + st = msg->payload; + if (st->path && st->name) { + SystemStarter.Spawn(st->path, st->name); + System.Log(Fs, "Received message ← CreateTask (%s)", st->name); + Free(st->name); + Free(st->path); + } + Free(st); + } + break; + case SYSSTART_MSG_KILL: + break; + default: + break; + } + Free(msg); + } +} + +U0 @systemstarter_task() +{ + Ipc.InitQueue(Fs); + System.Log(Fs, "Task running at 0x%08x", Fs); + SystemStarter.task = Fs; + Spawn(&@systemstarter_startup, , , T(mp_cnt, 1, 0)); + + while (1) { + @systemstarter_ipc_queue_process; + Sleep(1); + } +} + +U0 @systemstarter_create_task(U8* path, U8* name) +{ + @systemtask* st = CAlloc(sizeof(@systemtask)); + IpcMessage* msg = CAlloc(sizeof(IpcMessage)); + st->path = StrNew(path); + st->name = StrNew(name); + msg->client = NULL; + msg->type = SYSSTART_MSG_SPAWN; + msg->payload = st; + Ipc.MsgSend(SystemStarter.task, msg); +} + +SystemStarter.CreateTask = &@systemstarter_create_task; +SystemStarter.Init = &@systemstarter_init; +SystemStarter.Spawn = &@systemstarter_spawn; +SystemStarter.Task = &@systemstarter_task; + +"systemstarter "; diff --git a/System/Core/SystemTray.HC b/System/Core/SystemTray.HC new file mode 100644 index 0000000..db7c7e6 --- /dev/null +++ b/System/Core/SystemTray.HC @@ -0,0 +1,139 @@ +#define SYSTRAY_MSG_NULL 0x0 +#define SYSTRAY_MSG_REGISTER 0x1 +#define SYSTRAY_MSG_UNREGISTER 0x2 + +class @systemtray +{ + CTask* task; + @window_widgets_list* item; + U0 (*Init)(); + U0 (*Task)(); + Context2DWidget* (*RegisterItem)(); + U0 (*UnregisterItem)(Widget* widget); + U0 (*SetIcon)(Context2DWidget* widget, U8* path); +}; + +@systemtray SystemTray; + +U0 @systemtray_register_item(I64 addr) +{ + Context2DWidget* item = Gui.CreateWidget( + Compositor.menubar.win, WIDGET_TYPE_CONTEXT2D, -24, 0, 24, 24); + item->ctx = NewContext2D(item->width, item->height); + Fill2D(item->ctx, Color(0, 0, 0, 0)); + MemSetI64(addr, item, 1); +} + +U0 @systemtray_unregister_item(Widget* item) +{ + IpcMessage* msg = CAlloc(sizeof(IpcMessage)); + msg->client = NULL; + msg->type = CPZ_MSG_WIN_WIDGET_DESTROY; + msg->payload = item; + System.Log(Fs, "Sent message → WidgetDestroy"); + Ipc.MsgSend(Compositor.menubar.task, msg); +} + +U0 @systemtray_reindex_items() +{ + I64 x = Display.Width() - 100; + @window_widgets_list* item = Compositor.menubar.win->widget; + while (item->next) + item = item->next; + while (item->widget->type == WIDGET_TYPE_CONTEXT2D) { + x -= item->widget->width + 4; + item->widget->x = x; + item = item->prev; + } + Gui.Window.Refresh(Compositor.menubar.win); +} + +U0 @systemtray_ipc_queue_process() +{ + IpcMessage* msg; + msg = Ipc.MsgRecv(); + if (msg) { + switch (msg->type) { + case SYSTRAY_MSG_REGISTER: + @systemtray_register_item(msg->payload); + @systemtray_reindex_items; + break; + case SYSTRAY_MSG_UNREGISTER: + @systemtray_unregister_item(msg->payload); + @systemtray_reindex_items; + break; + default: + break; + } + Free(msg); + } +} + +U0 @systemtray_init() { } + +U0 @systemtray_task() +{ + Ipc.InitQueue(Fs); + SystemTray.task = Fs; + System.Log(Fs, "Task running at 0x%08x", Fs); + while (!Compositor.menubar.win) // Wait for instance + Sleep(1); + while (1) { + @systemtray_ipc_queue_process(); + Sleep(1); + } +} + +Context2DWidget* @systemtray_client_register_item() +{ + Context2DWidget* item = NULL; + IpcMessage* msg = CAlloc(sizeof(IpcMessage)); + msg->client = NULL; + msg->type = SYSTRAY_MSG_REGISTER; + msg->payload = &item; + System.Log(Fs, "Sent message → SystrayRegisterItem"); + Ipc.MsgSend(SystemTray.task, msg); + while (!item) + Sleep(1); + return item; +} + +U0 @systemtray_client_unregister_item(Widget* item) +{ + IpcMessage* msg = CAlloc(sizeof(IpcMessage)); + msg->client = NULL; + msg->type = SYSTRAY_MSG_UNREGISTER; + msg->payload = item; + System.Log(Fs, "Sent message → SystrayUnRegisterItem"); + Ipc.MsgSend(SystemTray.task, msg); + while (item->type) + Sleep(1); + @systemtray_reindex_items; +} + +U0 @systemtray_set_icon(Context2DWidget* widget, U8* path) +{ + if (!widget || !path) + return; + U8 full_path[512]; + if (2 == 3) // FIXME + StrCpy(&full_path, path); + else { + StrCpy(&full_path, "M:/Media/Themes/Umami/Icon/"); + String.Append(&full_path, path); + } + if (!FileFind(&full_path)) + return; + Context2D* icon = Image.FileToContext2D(&full_path); + CopyRect2D(widget->ctx, 0, 0, icon); + DelContext2D(icon); + Gui.Window.Refresh(Compositor.menubar.win); +} + +SystemTray.Init = &@systemtray_init; +SystemTray.RegisterItem = &@systemtray_client_register_item; +SystemTray.SetIcon = &@systemtray_set_icon; +SystemTray.Task = &@systemtray_task; +SystemTray.UnregisterItem = &@systemtray_client_unregister_item; + +"systemtray "; \ No newline at end of file diff --git a/System/Drivers/AC97.HC b/System/Drivers/AC97.HC new file mode 100644 index 0000000..77732d2 --- /dev/null +++ b/System/Drivers/AC97.HC @@ -0,0 +1,153 @@ +#define INT_LAST_VALID_ENTRY 1 << 2 +#define INT_IOC 1 << 3 +#define INT_FIFO_ERR 1 << 4 + +#define BDL_BUF_SIZE 2044 +#define PCM_BUF_SIZE 2048 +#define MAX_BDLS 32 + +#define PCM_IN 0 +#define PCM_OUT 1 +#define MIC_IN 2 + +// Native Audio Mixer registers (all U16) + +#define RESET 0x00 // Reset Register +#define MASTER_VOL 0x02 // Set Master Output Volume +#define MIC_VOL 0x0E // Set Microphone Volume +#define PCM_VOL 0x18 // Set Output Volume of PCM patterns +#define REC_SLC 0x1A // Select Input Device +#define REC_GAIN 0x1C // Set Input Gain +#define MIC_GAIN 0x1E // Set Gain of Microphone +#define EXT_ID 0x28 // Supported extended functions +#define EXT_CTRL 0x2A // Enabling extended functions +#define EXT_FRONT_RATE 0x2C // Sample rate of front speaker + +// Native Audio Bus Master registers + +#define PCM_INPUT_REG_BOX \ + 0x00 // NABM register box for PCM IN (sizeof NABM register box) +#define PCM_OUTPUT_REG_BOX \ + 0x10 // NABM register box for PCM OUT (sizeof NABM register box) +#define MIC_INPUT_REG_BOX \ + 0x20 // NABM register box for Microphone (sizeof NABM register box) +#define GLOBAL_CTL 0x2C // Global Control Register (U32) +#define GLOBAL_STS 0x30 // Global Status Register (U32) + +// NABM register box registers + +#define BUFFER_DSC_ADDR 0x00 // Physical Address of Buffer Descriptor List (U32) +#define CUR_ENTRY_VAL \ + 0x04 // Number of Actual Processed Buffer Descriptor Entry (U8) +#define LAST_VALID_ENTRY 0x05 // Number of all Descriptor Entries (U8) +#define TRANSFER_STS 0x06 // Status of Transferring Data (U16) +#define CUR_IDX_PROC_SAMPLES \ + 0x08 // Number of Transferred Samples in Actual Processed Entry (U16) +#define PRCSD_ENTRY 0x0A // Number of Actual Processed Buffer Entry (U8) +#define BUFFER_CNT \ + 0x0B // Most Important Register for controlling Transfers (U8) + +class @ac97_bdl_entry +{ + U32 addr; + U16 length; // length - 1 + U16 flags; +}; + +class @ac97_bdl +{ + @ac97_bdl_entry entries[32]; +}; + +class @ac97 +{ + @pci_info pci; + @ac97_bdl* bdl[3]; + U16 nam; + U16 nabm; +}; + +@ac97 AC97; + +U0 @ac97_fill_buffer() +{ + I64 idx = InU8(AC97.nabm + PCM_OUTPUT_REG_BOX + LAST_VALID_ENTRY); + U32* buf = AC97.bdl[PCM_OUT]->entries[idx].addr; + @audio_mix_output(buf, BDL_BUF_SIZE); + OutU8(AC97.nabm + PCM_OUTPUT_REG_BOX + LAST_VALID_ENTRY, ++idx); +} + +U0 @ac97_int_handler() +{ + U16 status = InU16(AC97.nabm + PCM_OUTPUT_REG_BOX + TRANSFER_STS); + if (status & INT_IOC) { + @ac97_fill_buffer; + OutU16(AC97.nabm + PCM_OUTPUT_REG_BOX + TRANSFER_STS, 0x1C); + } +} + +I64 @ac97_init() +{ + I64 i; + I64 j; + // Scan for device + j = PCIClassFind(0x040100, 0); + if (j < 0) { + device_not_found: + AdamLog("\n[AC'97] Device not found\n"); + return -1; + } + @get_pci_info(j, &AC97.pci); + + if (AC97.pci.vendor_id != 0x8086 || AC97.pci.device_id != 0x2415) + goto device_not_found; + + AC97.nam = AC97.pci.bar[0] & 0xFFFFFF00; + AC97.nabm = AC97.pci.bar[1] & 0xFFFFFF00; + + // Enable port IO, disable MMIO + PCIWriteU8(j.u8[2], j.u8[1], j.u8[0], 0x4, 5); + + OutU32(AC97.nabm + GLOBAL_CTL, 0x03); + OutU16(AC97.nam + RESET, 0xFFFF); + + // Set PCM Output to Max volume + OutU16(AC97.nam + PCM_VOL, 0x0000); + + // Allocate Buffer Descriptor Lists + AC97.bdl[PCM_IN] = CAllocAligned(sizeof(@ac97_bdl), 4096, Fs->code_heap); + AC97.bdl[PCM_OUT] = CAllocAligned(sizeof(@ac97_bdl), 4096, Fs->code_heap); + AC97.bdl[MIC_IN] = CAllocAligned(sizeof(@ac97_bdl), 4096, Fs->code_heap); + + for (i = 0; i < MAX_BDLS; i++) { + AC97.bdl[PCM_OUT]->entries[i].addr = CAllocAligned(PCM_BUF_SIZE, 4096, Fs->code_heap); + AC97.bdl[PCM_OUT]->entries[i].length = BDL_BUF_SIZE / 2; + AC97.bdl[PCM_OUT]->entries[i].flags = 1 << 15; + } + + // Set addresses of Buffer Descriptor Lists + // OutU32(AC97.nabm + PCM_INPUT_REG_BOX + BUFFER_DSC_ADDR, AC97.bdl[PCM_IN]); + OutU32(AC97.nabm + PCM_OUTPUT_REG_BOX + BUFFER_DSC_ADDR, AC97.bdl[PCM_OUT]); + // OutU32(AC97.nabm + MIC_INPUT_REG_BOX + BUFFER_DSC_ADDR, AC97.bdl[MIC_IN]); + + // Set Master Volume + OutU16(AC97.nam + MASTER_VOL, 0x0F0F); + + // Stop playing sound + OutU8(AC97.nabm + PCM_OUTPUT_REG_BOX + BUFFER_CNT, 0); + + // Fill one buffers + @ac97_fill_buffer; + + // Enable interrupt handler + @pci_register_int_handler(&@ac97_int_handler); + + // Start playing sound + OutU8(AC97.nabm + PCM_OUTPUT_REG_BOX + BUFFER_CNT, 1); + + return 0; +} + +@ac97_init; + +"ac97 "; \ No newline at end of file diff --git a/System/Drivers/Audio.HC b/System/Drivers/Audio.HC new file mode 100644 index 0000000..532cfde --- /dev/null +++ b/System/Drivers/Audio.HC @@ -0,0 +1,117 @@ +extern U0 (*fp_snd_fill_buf)(U32* buf, I64 buf_num); + +#define AUDIO_MAX_STREAMS 16 + +#define AUDIO_OUTPUT_BUFFER_SIZE 1024 + +#define AUDIO_STREAM_FIFO_SIZE 1048576 +#define AUDIO_STREAM_TYPE_INPUT 0 +#define AUDIO_STREAM_TYPE_OUTPUT 1 + +class Sound { + // For simplicity, all samples will be converted to 44100 Hz, 2 channels, 16 + // bit when they are loaded. + I64 rate; + I64 channels; + I64 bits; + U32* data; + I64 length; // in samples +}; + +class @audio_device +{ + Bool enabled; +}; + +class @audio_mixer +{ + I64 left; + I64 right; +}; + +class @audio_stream +{ + I64 type; + I64 rate; + I64 channels; + I64 bits; + CFifoI64* data; +}; + +class @audio_wave_generator +{ + F64 duration; + I64 frequency; +}; + +class @audio +{ + I64 driver; + @audio_device device; + @audio_mixer mixer; + @audio_stream output[AUDIO_MAX_STREAMS + 1]; + @audio_wave_generator wavegen; + U0 (*Beep)(); + U0 (*Init)(); + U0 (*MixOutput)(U64 buf, I64); + Sound (*SoundFromFile)(U8* filename); + U0 (*FreeSound)(Sound* snd); + I64 (*PlaySound)(Sound* snd); +}; + +@audio Audio; + +U0 @audio_mix_output(U32* buf, I64 length = NULL) +{ + I64 i; + I64 j; + I64 acc_sample_L = 0; + I64 acc_sample_R = 0; + I64 acc_streams = 0; + U32 sample; + if (!length) + length = AUDIO_OUTPUT_BUFFER_SIZE; + for (i = 0; i < length / 4; i++) { + acc_sample_L = 0; + acc_sample_R = 0; + acc_streams = 0; + if (Audio.wavegen.frequency) { + sample.i16[0] = T(Sin(Audio.wavegen.frequency * Audio.wavegen.duration) >= 0.0, + I16_MAX / 8, I16_MIN / 8); + sample.i16[1] = sample.i16[0]; + FifoI64Ins(Audio.output[AUDIO_MAX_STREAMS].data, sample); + Audio.wavegen.duration += 6.4 / 48000.0; + } + for (j = 0; j < AUDIO_MAX_STREAMS + 1; j++) { + if (FifoI64Cnt(Audio.output[j].data)) { + FifoI64Rem(Audio.output[j].data, &sample); + acc_streams++; + acc_sample_L += sample.i16[0]; + acc_sample_R += sample.i16[1]; + } + } + buf[i].i16[0] = ToI64(acc_sample_L / Sqrt(acc_streams) * Audio.mixer.left / 100); + buf[i].i16[1] = ToI64(acc_sample_R / Sqrt(acc_streams) * Audio.mixer.right / 100); + } +} + +U0 @audio_init() +{ + I64 i = 0; + for (i = 0; i < AUDIO_MAX_STREAMS + 1; i++) + Audio.output[i].data = FifoI64New(AUDIO_STREAM_FIFO_SIZE); + Audio.mixer.left = 100; + Audio.mixer.right = 100; + Audio.wavegen.duration = 0.0; + Audio.wavegen.frequency = 0; + Audio.device.enabled = TRUE; +} + +Audio.driver = NULL; +Audio.Init = &@audio_init; +Audio.MixOutput = &@audio_mix_output; + +// Initialize Audio +Audio.Init(); + +"audio "; \ No newline at end of file diff --git a/System/Drivers/Display.HC b/System/Drivers/Display.HC new file mode 100644 index 0000000..cc97257 --- /dev/null +++ b/System/Drivers/Display.HC @@ -0,0 +1,26 @@ +class @display +{ + I64 width; + I64 height; + I64 bpp; + I64 driver; + U64 fb; + + U0(*Init) + (I64 width, I64 height, I64 bpp, I64 driver); + I64(*Width) + (); + I64(*Height) + (); + I64(*Bpp) + (); + I64(*Driver) + (); + U0 (*Update)(); +}; + +@display Display; +Display.driver = NULL; +Display.Update = NULL; + +"display "; diff --git a/System/Drivers/Mouse.HC b/System/Drivers/Mouse.HC new file mode 100644 index 0000000..763b61d --- /dev/null +++ b/System/Drivers/Mouse.HC @@ -0,0 +1,111 @@ +// FIXME: This should be an Input driver which contains both Keyboard/Mouse +// classes. +extern U0 @vmsvga_mouse_pointer_set(U32* pointer, I64 width, I64 height); + +#define MI_QEMU 0x01 +#define MI_VBOX 0x02 +#define MS_UPDATE_INTERVAL 10 + +#define MS_UP 0 +#define MS_DOWN 1 + +class @mouse +{ + I64 x; + I64 y; + I64 z; + I64 delta_z; + I64 wheel_sensitivity; + U32* pointer; + I64 integration_type; + Bool left; + Bool right; + Bool natural_scroll; + I64 (*X)(); + I64 (*Y)(); + U0 (*PointerSet)(U32* pointer, I64 width, I64 height); + U0 (*Init)(); + U0 (*Update)(); + U0 (*Task)(); +}; + +class @keyboard +{ + I64 active_key; + I64 active_key_tS; + I64 last_key_tS; + U0 (*Update)(); +}; + +@mouse Mouse; +@keyboard Keyboard; + +U0 @keyboard_update() +{ + I64 sc; + if (FifoI64Rem(kbd.scan_code_fifo, &sc)) { + if (!(sc & SCF_KEY_UP)) { + Keyboard.active_key = sc(U8); + Keyboard.active_key_tS = cnts.jiffies; + return; + } + } + Keyboard.active_key = 0; +} + +Keyboard.Update = &@keyboard_update; + +I64 @mouse_x() { return Mouse.x; } + +I64 @mouse_y() { return Mouse.y; } + +U0 @mouse_integration_type_set(I64 type) { Mouse.integration_type = type; } + +U0 @mouse_pointer_set(U32* pointer, I64 width, I64 height) +{ + if (Mouse.pointer != pointer) { + Mouse.pointer = pointer; + if (Mouse.integration_type == MI_VBOX) { + @vmsvga_mouse_pointer_set(pointer, width, height); + } + } +} + +U0 @mouse_init() +{ + Mouse.x = Display.Width() / 2; + Mouse.y = Display.Height() / 2; + Mouse.z = ms.pos.z; + Mouse.wheel_sensitivity = 2; + Mouse.pointer = NULL; + Mouse.left = OFF; + Mouse.right = OFF; +} + +U0 @mouse_task() +{ + while (1) { + WinMsUpdate; + KbdMsHndlr(0, 0); + Keyboard.Update(); + if (Mouse.Update) + Mouse.Update(); + if (!Mouse.Update) { + // Mouse.x = ms.pos.x; + // Mouse.y = ms.pos.y; + Mouse.left = ms.lb > 0; + Mouse.right = ms.rb > 0; + } + Mouse.z = ms.pos.z; + Sleep(MS_UPDATE_INTERVAL); + } +} + +Mouse.X = &@mouse_x; +Mouse.Y = &@mouse_y; +Mouse.PointerSet = &@mouse_pointer_set; +Mouse.Init = &@mouse_init; +Mouse.Update = NULL; +Mouse.Task = &@mouse_task; + +"mouse "; diff --git a/System/Drivers/Pci.HC b/System/Drivers/Pci.HC new file mode 100644 index 0000000..3d84393 --- /dev/null +++ b/System/Drivers/Pci.HC @@ -0,0 +1,98 @@ +#define PCI_INTH_MAX 16 + +U64 @pci_int_handler[PCI_INTH_MAX]; + +class @pci_info +{ + U16 vendor_id; + U16 device_id; + U16 command; + U16 status; + U32 _class; + U32 bar[6]; + U32 cap_pointer; +}; + +class @pci_cap +{ + U8 cap_vndr; /* Generic PCI field: PCI_CAP_ID_VNDR */ + U8 cap_next; /* Generic PCI field: next ptr. */ + U8 cap_len; /* Generic PCI field: capability length */ + U8 cfg_type; /* Identifies the structure. */ + U8 bar; /* Where to find it. */ + U8 padding[3]; /* Pad to full dword. */ + U32 offset; /* Offset within bar. */ + U32 length; /* Length of the structure, in bytes. */ +}; + +U0 @get_pci_info(I64 i, @pci_info* pci) +{ + I64 j; + pci->vendor_id = PCIReadU32(i.u8[2], i.u8[1], i.u8[0], 0x0) & 0xFFFF; + pci->device_id = PCIReadU32(i.u8[2], i.u8[1], i.u8[0], 0x0) >> 16; + pci->command = PCIReadU32(i.u8[2], i.u8[1], i.u8[0], 0x4) & 0xFFFF; + pci->status = PCIReadU32(i.u8[2], i.u8[1], i.u8[0], 0x4) >> 16; + pci->_class = PCIReadU32(i.u8[2], i.u8[1], i.u8[0], 0x8) >> 24; + for (j = 0; j < 6; j++) + pci->bar[j] = PCIReadU32(i.u8[2], i.u8[1], i.u8[0], 0x10 + (0x04 * j)); +} + +U0 @get_pci_cap(I64 i, @pci_cap* cap, I64 idx) +{ + I64 base = 0x40 + (idx * 16); + U32 u32; + u32 = PCIReadU32(i.u8[2], i.u8[1], i.u8[0], base); + cap->cap_vndr = u32.u8[0]; + cap->cap_next = u32.u8[1]; + cap->cap_len = u32.u8[2]; + cap->cfg_type = u32.u8[3]; + u32 = PCIReadU32(i.u8[2], i.u8[1], i.u8[0], base + 0x04); + cap->bar = u32.u8[0]; + cap->offset = PCIReadU32(i.u8[2], i.u8[1], i.u8[0], base + 0x08); + cap->length = PCIReadU32(i.u8[2], i.u8[1], i.u8[0], base + 0x0c); +} + +U0 @pci_reroute_interrupts(I64 base, I64 cpu) +{ + I64 i; + U8* da = dev.uncached_alias + IOAPIC_REG; + U32* _d = dev.uncached_alias + IOAPIC_DATA; + + for (i = 0; i < 4; i++) { + *da = IOREDTAB + i * 2 + 1; + *_d = dev.mp_apic_ids[cpu] << 24; + *da = IOREDTAB + i * 2; + *_d = 0x4000 + base + i; + } +} + +I64 @pci_register_int_handler(U64 handler) +{ + if (!handler) + return -1; + I64 i = 0; + while (@pci_int_handler[i]) + i++; + if (i > PCI_INTH_MAX - 1) + return -1; + @pci_int_handler[i] = handler; + return 0; +} + +interrupt U0 @pci_interrupt_handler() +{ + I64 i; + for (i = 0; i < PCI_INTH_MAX; i++) + if (@pci_int_handler[i]) + Call(@pci_int_handler[i]); + *(dev.uncached_alias + LAPIC_EOI)(U32*) = 0; +} + +MemSet(&@pci_int_handler, NULL, sizeof(U64) * PCI_INTH_MAX); +IntEntrySet(0x40, &@pci_interrupt_handler, IDTET_IRQ); +IntEntrySet(0x41, &@pci_interrupt_handler, IDTET_IRQ); +IntEntrySet(0x42, &@pci_interrupt_handler, IDTET_IRQ); +IntEntrySet(0x43, &@pci_interrupt_handler, IDTET_IRQ); +@pci_reroute_interrupts(0x40, 0); + +"pci "; \ No newline at end of file diff --git a/System/Drivers/VMSVGA.HC b/System/Drivers/VMSVGA.HC new file mode 100644 index 0000000..9e42374 --- /dev/null +++ b/System/Drivers/VMSVGA.HC @@ -0,0 +1,255 @@ +class @vmsvga_info +{ + U16 io_base; + U32* fifo; + U16 width; + U16 height; + U16 bpp; + U64 fb; + U32 capabilities; +}; + +#define VMWGFX_FIFO_STATIC_SIZE (1024 * 1024) + +#define VMSVGA_MAGIC 0x900000 +#define VMSVGA_ID_2 (VMSVGA_MAGIC << 8 | 2) +#define VMSVGA_MOUSE_ID 1 + +#define VMSVGA_CAP_GMR 0x00100000 + +#define VMSVGA_CMD_INVALID_CMD 0 +#define VMSVGA_CMD_UPDATE 1 +#define VMSVGA_CMD_RECT_COPY 3 +#define VMSVGA_CMD_DEFINE_CURSOR 19 +#define VMSVGA_CMD_DEFINE_ALPHA_CURSOR 22 +#define VMSVGA_CMD_UPDATE_VERBOSE 25 +#define VMSVGA_CMD_FRONT_ROP_FILL 29 +#define VMSVGA_CMD_FENCE 30 +#define VMSVGA_CMD_ESCAPE 33 +#define VMSVGA_CMD_DEFINE_SCREEN 34 +#define VMSVGA_CMD_DESTROY_SCREEN 35 +#define VMSVGA_CMD_DEFINE_GMRFB 36 +#define VMSVGA_CMD_BLIT_GMRFB_TO_SCREEN 37 +#define VMSVGA_CMD_BLIT_SCREEN_TO_GMRFB 38 +#define VMSVGA_CMD_ANNOTATION_FILL 39 +#define VMSVGA_CMD_ANNOTATION_COPY 40 +#define VMSVGA_CMD_DEFINE_GMR2 41 +#define VMSVGA_CMD_REMAP_GMR2 42 + +#define VMSVGA_REG_ID 0 +#define VMSVGA_REG_ENABLE 1 +#define VMSVGA_REG_WIDTH 2 +#define VMSVGA_REG_HEIGHT 3 +#define VMSVGA_REG_MAX_WIDTH 4 +#define VMSVGA_REG_MAX_HEIGHT 5 +#define VMSVGA_REG_DEPTH 6 +#define VMSVGA_REG_BITS_PER_PIXEL 7 /* Current bpp in the guest */ +#define VMSVGA_REG_PSEUDOCOLOR 8 +#define VMSVGA_REG_RED_MASK 9 +#define VMSVGA_REG_GREEN_MASK 10 +#define VMSVGA_REG_BLUE_MASK 11 +#define VMSVGA_REG_BYTES_PER_LINE 12 +#define VMSVGA_REG_FB_START 13 /* (Deprecated) */ +#define VMSVGA_REG_FB_OFFSET 14 +#define VMSVGA_REG_VRAM_SIZE 15 +#define VMSVGA_REG_FB_SIZE 16 + +/* ID 0 implementation only had the above registers then the palette */ +#define VMSVGA_REG_CAPABILITIES 17 +#define VMSVGA_REG_MEM_START 18 /* (Deprecated) */ +#define VMSVGA_REG_MEM_SIZE 19 +#define VMSVGA_REG_CONFIG_DONE 20 /* Set when memory area configured */ +#define VMSVGA_REG_SYNC 21 /* See "FIFO Synchronization Registers" */ +#define VMSVGA_REG_BUSY 22 /* See "FIFO Synchronization Registers" */ +#define VMSVGA_REG_GUEST_ID 23 /* Set guest OS identifier */ +#define VMSVGA_REG_CURSOR_ID 24 /* (Deprecated) */ +#define VMSVGA_REG_CURSOR_X 25 /* (Deprecated) */ +#define VMSVGA_REG_CURSOR_Y 26 /* (Deprecated) */ +#define VMSVGA_REG_CURSOR_ON 27 /* (Deprecated) */ +#define VMSVGA_REG_HOST_BITS_PER_PIXEL 28 /* (Deprecated) */ +#define VMSVGA_REG_SCRATCH_SIZE 29 /* Number of scratch registers */ +#define VMSVGA_REG_MEM_REGS 30 /* Number of FIFO registers */ +#define VMSVGA_REG_NUM_DISPLAYS 31 /* (Deprecated) */ +#define VMSVGA_REG_PITCHLOCK 32 /* Fixed pitch for all modes */ +#define VMSVGA_REG_IRQMASK 33 /* Interrupt mask */ + +/* Legacy multi-monitor support */ +#define VMSVGA_REG_NUM_GUEST_DISPLAYS \ + 34 /* Number of guest displays in X/Y direction */ +#define VMSVGA_REG_DISPLAY_ID \ + 35 /* Display ID for the following display attributes */ +#define VMSVGA_REG_DISPLAY_IS_PRIMARY \ + 36 /* Whether this is a primary display \ + */ +#define VMSVGA_REG_DISPLAY_POSITION_X 37 /* The display position x */ +#define VMSVGA_REG_DISPLAY_POSITION_Y 38 /* The display position y */ +#define VMSVGA_REG_DISPLAY_WIDTH 39 /* The display's width */ +#define VMSVGA_REG_DISPLAY_HEIGHT 40 /* The display's height */ + +/* See "Guest memory regions" below. */ +#define VMSVGA_REG_GMR_ID 41 +#define VMSVGA_REG_GMR_DESCRIPTOR 42 +#define VMSVGA_REG_GMR_MAX_IDS 43 +#define VMSVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH 44 +#define VMSVGA_REG_TRACES \ + 45 /* Enable trace-based updates even when FIFO is on */ +#define VMSVGA_REG_GMRS_MAX_PAGES \ + 46 /* Maximum number of 4KB pages for all GMRs */ +#define VMSVGA_REG_MEMORY_SIZE \ + 47 /* Total dedicated device memory excluding FIFO */ +#define VMSVGA_REG_TOP 48 /* Must be 1 more than the last register */ + +#define VMSVGA_FIFO_MIN 0 +#define VMSVGA_FIFO_MAX 1 +#define VMSVGA_FIFO_NEXT_CMD 2 +#define VMSVGA_FIFO_STOP 3 +#define VMSVGA_FIFO_CAPABILITIES 4 +#define VMSVGA_FIFO_FLAGS 5 +#define VMSVGA_FIFO_FENCE 6 +#define VMSVGA_FIFO_3D_HWVERSION 7 +#define VMSVGA_FIFO_PITCHLOCK 8 +#define VMSVGA_FIFO_CURSOR_ON 9 +#define VMSVGA_FIFO_CURSOR_X 10 +#define VMSVGA_FIFO_CURSOR_Y 11 +#define VMSVGA_FIFO_CURSOR_COUNT 12 +#define VMSVGA_FIFO_CURSOR_LAST_UPDATED 13 +#define VMSVGA_FIFO_RESERVED 14 +#define VMSVGA_FIFO_CURSOR_SCREEN_ID 15 +#define VMSVGA_FIFO_DEAD 16 +#define VMSVGA_FIFO_3D_HWVERSION_REVISED 17 +#define VMSVGA_FIFO_3D_CAPS 18 +#define VMSVGA_FIFO_3D_CAPS_LAST = 19 +#define VMSVGA_FIFO_GUEST_3D_HWVERSION 20 +#define VMSVGA_FIFO_FENCE_GOAL 21 +#define VMSVGA_FIFO_BUSY 22 +#define VMSVGA_FIFO_NUM_REGS 23 + +#define VMSVGA_FIFO_CAP_NONE 0 +#define VMSVGA_FIFO_CAP_FENCE (1 << 0) +#define VMSVGA_FIFO_CAP_ACCELFRONT (1 << 1) +#define VMSVGA_FIFO_CAP_PITCHLOCK (1 << 2) +#define VMSVGA_FIFO_CAP_VIDEO (1 << 3) +#define VMSVGA_FIFO_CAP_CURSOR_BYPASS_3 (1 << 4) +#define VMSVGA_FIFO_CAP_ESCAPE (1 << 5) +#define VMSVGA_FIFO_CAP_RESERVE (1 << 6) +#define VMSVGA_FIFO_CAP_SCREEN_OBJECT (1 << 7) +#define VMSVGA_FIFO_CAP_GMR2 (1 << 8) +// #define VMSVGA_FIFO_CAP_3D_HWVERSION_REVISED VMSVGA_FIFO_CAP_GMR2 +#define VMSVGA_FIFO_CAP_SCREEN_OBJECT_2 (1 << 9) +#define VMSVGA_FIFO_CAP_DEAD (1 << 10) + +@vmsvga_info vmsvga; +MemSet(&vmsvga, 0, sizeof(@vmsvga_info)); + +U32 @vmsvga_reg_read(I64 index) +{ + OutU32(vmsvga.io_base, index); + return InU32(vmsvga.io_base + 1); +} + +U0 @vmsvga_reg_write(I64 index, U32 val) +{ + OutU32(vmsvga.io_base, index); + OutU32(vmsvga.io_base + 1, val); +} + +U0 @vmsvga_fifo_write(U32 value) +{ + /* Need to sync? */ + if ((vmsvga.fifo[VMSVGA_FIFO_NEXT_CMD] + sizeof(U32) == vmsvga.fifo[VMSVGA_FIFO_STOP]) || (vmsvga.fifo[VMSVGA_FIFO_NEXT_CMD] == vmsvga.fifo[VMSVGA_FIFO_MAX] - sizeof(U32) && vmsvga.fifo[VMSVGA_FIFO_STOP] == vmsvga.fifo[VMSVGA_FIFO_MIN])) { + //"Syncing because of full fifo\n"; + // vmwareWaitForFB(pVMWARE); + } + vmsvga.fifo[vmsvga.fifo[VMSVGA_FIFO_NEXT_CMD] / sizeof(U32)] = value; + if (vmsvga.fifo[VMSVGA_FIFO_NEXT_CMD] == vmsvga.fifo[VMSVGA_FIFO_MAX] - sizeof(U32)) { + vmsvga.fifo[VMSVGA_FIFO_NEXT_CMD] = vmsvga.fifo[VMSVGA_FIFO_MIN]; + } else { + vmsvga.fifo[VMSVGA_FIFO_NEXT_CMD] += sizeof(U32); + } +} + +U0 @vmsvga_fifo_get_cap(U8* s, I64 cap) +{ + "%32s:", s; + if ((vmsvga.fifo[VMSVGA_FIFO_CAPABILITIES] & cap) == cap) + "%s\n", "True"; + else + "%s\n", "False"; +} + +I64 @vmsvga_init(I64 w, I64 h, I64 bpp) +{ + I64 j; + j = PCIClassFind(0x030000, 0); + if (j < 0) { + //"VMSVGA device not found.\n"; + return -1; + } + vmsvga.io_base = PCIReadU16(j.u8[2], j.u8[1], j.u8[0], 0x10) & ~(0x0F); + @vmsvga_reg_write(VMSVGA_REG_ID, VMSVGA_ID_2); + if (@vmsvga_reg_read(VMSVGA_REG_ID) == VMSVGA_ID_2) { + //"VMSVGA driver version 2 supported.\n"; + } else { + //"VMSVGA device not supported.\n"; + return -1; + } + vmsvga.width = w; + vmsvga.height = h; + vmsvga.bpp = bpp; + vmsvga.fb = @vmsvga_reg_read(VMSVGA_REG_FB_START); + vmsvga.fifo = @vmsvga_reg_read(VMSVGA_REG_MEM_START); + //"FIFO @ 0x%08X (%d bytes)\n", vmsvga.fifo, + // @vmsvga_reg_read(VMSVGA_REG_MEM_SIZE); + @vmsvga_reg_write(VMSVGA_REG_WIDTH, 1920); + @vmsvga_reg_write(VMSVGA_REG_HEIGHT, 1080); + @vmsvga_reg_write(VMSVGA_REG_BITS_PER_PIXEL, 32); + @vmsvga_reg_write(VMSVGA_REG_ENABLE, 1); + vmsvga.fifo[VMSVGA_FIFO_MIN] = 16; + vmsvga.fifo[VMSVGA_FIFO_MAX] = 16 + (10 * 1024); + vmsvga.fifo[VMSVGA_FIFO_NEXT_CMD] = 16; + vmsvga.fifo[VMSVGA_FIFO_STOP] = 16; + @vmsvga_reg_write(VMSVGA_REG_CONFIG_DONE, 0); + @vmsvga_fifo_write(VMSVGA_CMD_UPDATE); + @vmsvga_fifo_write(0); + @vmsvga_fifo_write(0); + @vmsvga_fifo_write(0); + @vmsvga_fifo_write(0); + @vmsvga_reg_write(VMSVGA_REG_CONFIG_DONE, 1); + return 0; +} + +U0 @vmsvga_mouse_pointer_set(U32* pointer, I64 width, I64 height) +{ + @vmsvga_reg_write(VMSVGA_REG_CONFIG_DONE, 0); + @vmsvga_fifo_write(VMSVGA_CMD_DEFINE_ALPHA_CURSOR); + @vmsvga_fifo_write(VMSVGA_MOUSE_ID); + @vmsvga_fifo_write(0); + @vmsvga_fifo_write(0); + @vmsvga_fifo_write(width); + @vmsvga_fifo_write(height); + I64 x, y; + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + @vmsvga_fifo_write(pointer[(y * width) + x]); + } + } + @vmsvga_reg_write(VMSVGA_REG_CONFIG_DONE, 1); +} + +U64 @vmsvga_get_framebuffer() { return vmsvga.fb; } + +U0 @vmsvga_display_update() { @vmsvga_reg_write(VMSVGA_REG_ENABLE, 1); } + +class @vmsvga +{ + U0(*Init) + (I64 w, I64 h, I64 bpp); + U64(*FrameBuffer) + (); +}; + +@vmsvga VMSVGA; +VMSVGA.FrameBuffer = &@vmsvga_get_framebuffer; +VMSVGA.Init = &@vmsvga_init; + +"vmsvga "; diff --git a/System/Drivers/VMwareTools.HC b/System/Drivers/VMwareTools.HC new file mode 100644 index 0000000..34125f1 --- /dev/null +++ b/System/Drivers/VMwareTools.HC @@ -0,0 +1,148 @@ +// https://wiki.osdev.org/VMware_tools + +#define VMWARE_MAGIC 0x564D5868 +#define VMWARE_PORT 0x5658 +#define VMWARE_PORTHB 0x5659 + +#define CMD_GETVERSION 10 + +#define CMD_ABSPOINTER_DATA 39 +#define CMD_ABSPOINTER_STATUS 40 +#define CMD_ABSPOINTER_COMMAND 41 + +#define ABSPOINTER_ENABLE 0x45414552 +#define ABSPOINTER_RELATIVE 0xF5 +#define ABSPOINTER_ABSOLUTE 0x53424152 + +class @vmware_cmd +{ + union { + U32 ax; + U32 magic; + }; + union { + U32 bx; + I32 size; + }; + union { + U32 cx; + U16 command; + }; + union { + U32 dx; + U16 port; + }; + U32 si; + U32 di; +}; + +U0 @vmware_send(@vmware_cmd* cmd) +{ + U32 reg RAX reg_ax = cmd->ax; + U32 reg RBX reg_bx = cmd->bx; + U32 reg RCX reg_cx = cmd->cx; + U32 reg RDX reg_dx = cmd->dx; + U32 reg RSI reg_si = cmd->si; + U32 reg RDI reg_di = cmd->di; + reg_ax = VMWARE_MAGIC; + reg_dx = VMWARE_PORT; + asm { + IN AX, DX + } + cmd->ax = reg_ax; + cmd->bx = reg_bx; + cmd->cx = reg_cx; + cmd->dx = reg_dx; + cmd->si = reg_si; + cmd->di = reg_di; +} + +Bool @vmware_backdoor_is_present() +{ + @vmware_cmd cmd; + cmd.bx = ~VMWARE_MAGIC; + cmd.command = CMD_GETVERSION; + @vmware_send(&cmd); + if (cmd.bx != VMWARE_MAGIC || cmd.ax == 0xFFFFFFFF) { + return FALSE; + } + return TRUE; +} + +U0 @vmware_ms_absolute() +{ + @vmware_cmd cmd; + + cmd.bx = ABSPOINTER_ENABLE; + cmd.command = CMD_ABSPOINTER_COMMAND; + @vmware_send(&cmd); + + cmd.bx = 0; + cmd.command = CMD_ABSPOINTER_STATUS; + @vmware_send(&cmd); + + cmd.bx = 1; + cmd.command = CMD_ABSPOINTER_DATA; + @vmware_send(&cmd); + + cmd.bx = ABSPOINTER_ABSOLUTE; + cmd.command = CMD_ABSPOINTER_COMMAND; + @vmware_send(&cmd); +} + +U0 @vmware_handle_mouse() +{ + @vmware_cmd cmd; + cmd.bx = 0; + cmd.command = CMD_ABSPOINTER_STATUS; + @vmware_send(&cmd); + + if (cmd.ax == 0xFFFF0000) { + @vmware_ms_absolute; + return; + } + + if ((cmd.ax & 0xFFFF) < 4) + return; + + cmd.bx = 4; + cmd.command = CMD_ABSPOINTER_DATA; + @vmware_send(&cmd); + + I32 buttons = (cmd.ax & 0xFFFF); + I64 z = cmd.dx; + if (z > 1) { + z = -1; + } + + MsSet(@lerp(cmd.bx, 0xffff, Display.width), @lerp(cmd.cx, 0xffff, Display.height), ms.pos.z + z); + Mouse.x = @lerp(cmd.bx, 0xffff, Display.width); + Mouse.y = @lerp(cmd.cx, 0xffff, Display.height); + // MsSet((cmd.bx * Display.width) / 0xffff, (cmd.cx * Display.height) / 0xffff, ms.pos.z + z); + ms.lb = buttons & 0x20; + ms.rb = buttons & 0x10; +} + +U0 @vmware_ms_nop() { } + +U0 @vmware_ms_update() +{ + while (1) { + @vmware_handle_mouse; + Sleep(1); + } +} + +U0 @vmware_tools_init() +{ + if (!@vmware_backdoor_is_present) { + return; + } + @patch_jmp_rel32(&WinMsUpdate, &@vmware_ms_nop); + @vmware_ms_absolute; + Spawn(&@vmware_ms_update, , "VMwareMsUpdateTask"); +} + +@vmware_tools_init; + +"vmware-tools "; diff --git a/System/Drivers/Virtio-blk.HC b/System/Drivers/Virtio-blk.HC new file mode 100644 index 0000000..d5762aa --- /dev/null +++ b/System/Drivers/Virtio-blk.HC @@ -0,0 +1,475 @@ +// Virtio.HC + +// +// PCI virtio I/O registers. +// + +#define VIRTIO_PCI_HOST_FEATURES 0 // Features supported by the host +#define VIRTIO_PCI_GUEST_FEATURES 4 // Features activated by the guest +#define VIRTIO_PCI_QUEUE_PFN 8 // PFN for the currently selected queue +#define VIRTIO_PCI_QUEUE_SIZE 12 // Queue size for the currently selected queue +#define VIRTIO_PCI_QUEUE_SEL 14 // Queue selector +#define VIRTIO_PCI_QUEUE_NOTIFY 16 // Queue notifier +#define VIRTIO_PCI_STATUS 18 // Device status register +#define VIRTIO_PCI_ISR 19 // Interrupt status register +#define VIRTIO_PCI_CONFIG 20 // Configuration data block + +// +// PCI virtio status register bits +// + +#define VIRTIO_CONFIG_S_ACKNOWLEDGE 1 +#define VIRTIO_CONFIG_S_DRIVER 2 +#define VIRTIO_CONFIG_S_DRIVER_OK 4 +#define VIRTIO_CONFIG_S_FAILED 0x80 + +// +// Ring descriptor flags +// + +#define VRING_DESC_F_NEXT 1 // Buffer continues via the next field +#define VRING_DESC_F_WRITE 2 // Buffer is write-only (otherwise read-only) +#define VRING_DESC_F_INDIRECT 4 // Buffer contains a list of buffer descriptors + +class @virtio_queue_buf +{ + U64 address; + U32 length; + U16 flags; + U16 next; +}; +class @virtio_avail +{ + U16 flags; + U16 index; + U16 ring[256]; + U16 int_index; +}; +class @virtio_used_item +{ + U32 index; + U32 length; +}; +class @virtio_used +{ + U16 flags; + U16 index; + @virtio_used_item ring[256]; + U16 int_index; +}; +class @virtio_queue +{ + @virtio_queue_buf buffers[256]; + @virtio_avail available; + U8 padding[3578]; + @virtio_used used; +}; + +class @virtio_avail_buf +{ + U32 index; + U64 address; + U32 length; +}; + +class @virtio_buf_info +{ + U8* buffer; + U64 size; + U8 flags; + + // If the user wants to keep same buffer as passed in this struct, use "true". + // otherwise, the supplied buffer will be copied in the queues' buffer + Bool copy; +}; + +// Virtio-blk.HC + +#define BDT_VIRTIO_BLK 10 + +#define VIRTIO_BLK_T_IN 0 +#define VIRTIO_BLK_T_OUT 1 +#define VIRTIO_BLK_T_FLUSH 4 + +#define VIRTIO_BLK_MAX_BLK 0x400000 // Limit blkdev to 2G max, set to NULL to use entire disk (not recommended for RedSea) + +class @virtio_blk +{ + U16 port; + U32 blks; + @virtio_queue* vq; + I64 vq_size; + I64 vq_index; + U8 status; +}; + +class @virtio_blk_request +{ + U32 type; + U32 priority; + U64 sector; +}; + +@virtio_blk virtio_blk; +MemSet(&virtio_blk, 0, sizeof(@virtio_blk)); + +I64 VirtioBlkInit() +{ + I64 j; + + // Scan for device + j = PCIClassFind(0x010000, 0); + if (j < 0) { + "\n[virtio-blk] No device found\n"; + return -1; + } + virtio_blk.port = PCIReadU32(j.u8[2], + j.u8[1], j.u8[0], 0x10) + & 0xFFFFFFFC; + + virtio_blk.blks = InU32(virtio_blk.port + VIRTIO_PCI_CONFIG); + + // Reset Device + OutU8(virtio_blk.port + VIRTIO_PCI_STATUS, 0); + + // Found Driver + OutU8(virtio_blk.port + VIRTIO_PCI_STATUS, InU8(virtio_blk.port + VIRTIO_PCI_STATUS) | VIRTIO_CONFIG_S_ACKNOWLEDGE | VIRTIO_CONFIG_S_DRIVER); + + // Set up virt queue + OutU16(virtio_blk.port + VIRTIO_PCI_QUEUE_SEL, 0); + virtio_blk.vq_size = InU16(virtio_blk.port + VIRTIO_PCI_QUEUE_SIZE); // 256 + virtio_blk.vq = CAllocAligned(sizeof(@virtio_queue), 4096, erythros_mem_task->code_heap); + OutU32(virtio_blk.port + VIRTIO_PCI_QUEUE_PFN, virtio_blk.vq / 4096); + + // Init OK + OutU8(virtio_blk.port + VIRTIO_PCI_STATUS, InU8(virtio_blk.port + VIRTIO_PCI_STATUS) | VIRTIO_CONFIG_S_DRIVER_OK); + virtio_blk.vq_index = 0; +} + +// DskVIO.HC + +U0 VIOFlush() +{ + I64 j; + I64 vq_idx; + @virtio_blk_request* brq = CAlloc(sizeof(@virtio_blk_request), erythros_mem_task); + brq->type = VIRTIO_BLK_T_FLUSH; + brq->sector = NULL; + vq_idx = virtio_blk.vq->available.index % 256; + virtio_blk.vq->buffers[virtio_blk.vq_index % 256].address = brq; + virtio_blk.vq->buffers[virtio_blk.vq_index % 256].length = sizeof(@virtio_blk_request); + virtio_blk.vq->buffers[virtio_blk.vq_index % 256].flags = VRING_DESC_F_NEXT; + virtio_blk.vq->buffers[virtio_blk.vq_index % 256].next = (virtio_blk.vq_index + 1) % 256; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 1) % 256].address = &virtio_blk.status; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 1) % 256].length = 1; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 1) % 256].flags = VRING_DESC_F_WRITE; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 1) % 256].next = 0; + virtio_blk.vq->available.ring[vq_idx] = virtio_blk.vq_index % 256; + virtio_blk.vq_index += 2; + j = virtio_blk.vq->used.index; + virtio_blk.vq->available.index++; + OutU16(virtio_blk.port + VIRTIO_PCI_QUEUE_NOTIFY, 0); + while (j == virtio_blk.vq->used.index) { + Yield; + } + Free(brq); +} + +Bool VIORBlks(CDrv* dv, U8* buf, I64 blk, I64 cnt) +{ + no_warn dv; + I64 i, j; + I64 vq_idx; + U64 addr; + @virtio_blk_request* brq = CAlloc(sizeof(@virtio_blk_request), erythros_mem_task); + for (i = 0; i < cnt; i++) { + brq->type = VIRTIO_BLK_T_IN; + brq->sector = blk + i; + vq_idx = virtio_blk.vq->available.index % 256; + addr = buf + (BLK_SIZE * i); + virtio_blk.vq->buffers[virtio_blk.vq_index % 256].address = brq; + virtio_blk.vq->buffers[virtio_blk.vq_index % 256].length = sizeof(@virtio_blk_request); + virtio_blk.vq->buffers[virtio_blk.vq_index % 256].flags = VRING_DESC_F_NEXT; + virtio_blk.vq->buffers[virtio_blk.vq_index % 256].next = (virtio_blk.vq_index + 1) % 256; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 1) % 256].address = addr; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 1) % 256].length = BLK_SIZE; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 1) % 256].flags = VRING_DESC_F_WRITE | VRING_DESC_F_NEXT; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 1) % 256].next = (virtio_blk.vq_index + 2) % 256; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 2) % 256].address = &virtio_blk.status; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 2) % 256].length = 1; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 2) % 256].flags = VRING_DESC_F_WRITE; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 2) % 256].next = 0; + virtio_blk.vq->available.ring[vq_idx] = virtio_blk.vq_index % 256; + virtio_blk.vq_index += 3; + j = virtio_blk.vq->used.index; + virtio_blk.vq->available.index++; + OutU16(virtio_blk.port + VIRTIO_PCI_QUEUE_NOTIFY, 0); + while (j == virtio_blk.vq->used.index) { + Yield; + } + } + Free(brq); + return TRUE; +} + +Bool VIOWBlks(CDrv* dv, U8* buf, I64 blk, I64 cnt) +{ + no_warn dv; + I64 i, j; + I64 vq_idx; + U64 addr; + @virtio_blk_request* brq = CAlloc(sizeof(@virtio_blk_request), erythros_mem_task); + for (i = 0; i < cnt; i++) { + brq->type = VIRTIO_BLK_T_OUT; + brq->sector = blk + i; + vq_idx = virtio_blk.vq->available.index % 256; + addr = buf + (BLK_SIZE * i); + virtio_blk.vq->buffers[virtio_blk.vq_index % 256].address = brq; + virtio_blk.vq->buffers[virtio_blk.vq_index % 256].length = sizeof(@virtio_blk_request); + virtio_blk.vq->buffers[virtio_blk.vq_index % 256].flags = VRING_DESC_F_NEXT; + virtio_blk.vq->buffers[virtio_blk.vq_index % 256].next = (virtio_blk.vq_index + 1) % 256; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 1) % 256].address = addr; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 1) % 256].length = BLK_SIZE; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 1) % 256].flags = VRING_DESC_F_NEXT; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 1) % 256].next = (virtio_blk.vq_index + 2) % 256; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 2) % 256].address = &virtio_blk.status; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 2) % 256].length = 1; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 2) % 256].flags = VRING_DESC_F_WRITE; + virtio_blk.vq->buffers[(virtio_blk.vq_index + 2) % 256].next = 0; + virtio_blk.vq->available.ring[vq_idx] = virtio_blk.vq_index % 256; + virtio_blk.vq_index += 3; + j = virtio_blk.vq->used.index; + virtio_blk.vq->available.index++; + OutU16(virtio_blk.port + VIRTIO_PCI_QUEUE_NOTIFY, 0); + while (j == virtio_blk.vq->used.index) { + Yield; + } + } + Free(brq); + VIOFlush; + return TRUE; +} + +U0 RedSeaTryInit(CDrv* dv) +{ + CRedSeaBoot br; + Bool unlock; + try { + unlock = DrvLock(dv); + BlkRead(dv, &br, dv->drv_offset, 1); + if (br.signature != MBR_PT_REDSEA || br.signature2 != 0xAA55) + return; + dv->fs_type = FSt_REDSEA; + CallExtStr("RedSeaFreeFreeLst", dv); + dv->spc = 1; + dv->size = br.sects; + dv->data_area = dv->drv_offset + br.bitmap_sects; + dv->root_clus = br.root_clus; + dv->fat1 = dv->fat2 = dv->drv_offset + 1; + CallExtStr("DrvFATBlkAlloc", dv); + if (unlock) + DrvUnlock(dv); + } catch if (unlock) + DrvUnlock(dv); +} + +U8 MountVirtioBlk() +{ // Mount Virtio-blk device + CDrv* dv = DrvMakeFreeSlot(DrvNextFreeLet('A')); + CBlkDev* bd = BlkDevNextFreeSlot(dv->drv_let, BDT_RAM); + CRedSeaBoot* bs = CAlloc(BLK_SIZE, erythros_mem_task); + bd->max_blk = 512; + BlkDevAdd(bd, , TRUE, TRUE); + bd->type = BDT_VIRTIO_BLK; + if (VIRTIO_BLK_MAX_BLK) { + bd->max_blk = Min(VIRTIO_BLK_MAX_BLK, virtio_blk.blks); + } else { + bd->max_blk = virtio_blk.blks; + } + Free(bd->RAM_dsk); + dv->size = bd->max_blk + 1 - bd->drv_offset; + VIORBlks(dv, bs, 0, 1); + dv->root_clus = bs->root_clus; + dv->data_area = bs->bitmap_sects; + dv->next_free = NULL; + dv->last_free = NULL; + Free(bs); + RedSeaTryInit(dv); + return dv->drv_let; +} + +// DskBlk2.HC + +Bool BlkRead2(CDrv* dv, U8* buf, I64 blk, I64 cnt) +{ // Read blk cnt from Drv to buf. + Bool res = TRUE, unlock; + CBlkDev* bd = dv->bd; + if (cnt <= 0) + return TRUE; + DrvChk(dv); + try { + unlock = DrvLock(dv); + CallExtStr("BlkDevInit", bd); + if (dv->drv_offset && blk < dv->drv_offset || blk + cnt > dv->drv_offset + dv->size) + throw('Drv'); + if (bd->flags & BDF_READ_CACHE) + CallExtStr("RCache", dv, &buf, &blk, &cnt); + if (cnt > 0) { + switch (bd->type) { + case BDT_RAM: + MemCpy(buf, bd->RAM_dsk + blk << BLK_SIZE_BITS, cnt << BLK_SIZE_BITS); + break; + case BDT_ISO_FILE_READ: + case BDT_ISO_FILE_WRITE: + FBlkRead(bd->file_dsk, buf, blk, cnt); + break; + case BDT_ATA: + case BDT_ATAPI: + res = CallExtStr("ATARBlks", dv, buf, blk, cnt); + break; + case BDT_VIRTIO_BLK: + res = VIORBlks(dv, buf, blk, cnt); + break; + } + bd->last_time = tS; + if (bd->flags & BDF_READ_CACHE) + CallExtStr("DskCacheAdd", dv, buf, blk, cnt); + } + if (unlock) + DrvUnlock(dv); + } catch if (unlock) + DrvUnlock(dv); + return res; +} + +Bool BlkWrite2(CDrv* dv, U8* buf, I64 blk, I64 cnt) +{ // Write blk cnt from buf to Drv. + Bool res = TRUE, unlock; + CBlkDev* bd = dv->bd; + if (cnt <= 0) + return TRUE; + DrvChk(dv); + try { + unlock = DrvLock(dv); + CallExtStr("BlkDevInit", bd); + if (bd->flags & BDF_READ_ONLY && !(bd->flags & BDF_READ_ONLY_OVERRIDE)) + throw('BlkDev'); + if (dv->drv_offset && blk < dv->drv_offset || blk + cnt > dv->drv_offset + dv->size) + throw('Drv'); + if (cnt > 0) { + switch (bd->type) { + case BDT_RAM: + MemCpy(bd->RAM_dsk + blk << BLK_SIZE_BITS, buf, cnt << BLK_SIZE_BITS); + break; + case BDT_ISO_FILE_READ: + case BDT_ISO_FILE_WRITE: + FBlkWrite(bd->file_dsk, buf, blk, cnt); + break; + case BDT_ATA: + case BDT_ATAPI: + res = CallExtStr("ATAWBlks", dv, buf, blk, cnt); + break; + case BDT_VIRTIO_BLK: + res = VIOWBlks(dv, buf, blk, cnt); + break; + } + bd->last_time = tS; + if (bd->flags & BDF_READ_CACHE) + CallExtStr("DskCacheAdd", dv, buf, blk, cnt); + } + if (unlock) + DrvUnlock(dv); + } catch if (unlock) + DrvUnlock(dv); + return res; +} + +@patch_jmp_rel32(&BlkRead, &BlkRead2); +@patch_jmp_rel32(&BlkWrite, &BlkWrite2); + +// DskBlkDev2.HC + +CBlkDev* BlkDevChk2(CBlkDev* bd, Bool except = TRUE) +{ // Check for valid BlkDev. Throw exception. + if (bd->type == BDT_VIRTIO_BLK) + return bd; + if (!bd || bd->bd_signature != BD_SIGNATURE_VAL || !(BDT_NULL < bd->type < BDT_TYPES_NUM)) { + if (except) + throw('BlkDev'); + else + return NULL; + } else + return bd; +} + +@patch_jmp_rel32(&BlkDevChk, &BlkDevChk2); + +// DskDrv2.HC + +DefineLstLoad("ST_BLKDEV_TYPES2", + "NULL\0RAM\0ATA\0FILE_READ\0FILE_WRITE\0ATAPI\0NULL\0NULL\0NULL\0NULL\0VIRTIO\0"); + +U8 DrvTextAttrGet2(U8 drv_let = 0) +{ // Get color of drive. + U8* blkdev_text_attr2 = blkdev_text_attr; + U8* drv_text_attr2 = drv_text_attr; + I64 dta_size = 3; + drv_let = Let2Let(drv_let); + if (drv_let == 'A') + return BLACK << 4 | WHITE; + if ('A' <= drv_let <= 'Z') + return blkdev_text_attr2[Let2BlkDevType(drv_let)] << 4 | drv_text_attr2[drv_let % dta_size]; + else + return BLACK << 4 | WHITE; +} + +U0 DrvRep2() +{ // Drive report. + CDrv* dv; + CBlkDev* bd; + I64 ch, i, drv_let, attr; + U8* st; + "\nDefined Drives:\n"; + for (i = 0, dv = blkdev.drvs; i < DRVS_NUM; i++, dv++) { + if (dv->dv_signature == DRV_SIGNATURE_VAL) { + bd = dv->bd; + drv_let = Drv2Let(dv); + if (Bt(&dv->fs_type, FStf_DISABLE)) + ch = '-'; + else if (drv_let == blkdev.boot_drv_let) + ch = ':'; + else + ch = '+'; + attr = DrvTextAttrGet(drv_let); + "\dFG,%d\d\dBG,%d\d%C %-8Z %-10Z %04X %04X %02X\n", + attr & 15, attr >> 4, drv_let, dv->fs_type &FSG_TYPE_MASK, "ST_DRV_TYPES", + bd->type, "ST_BLKDEV_TYPES2", bd->base0, bd->base1, bd->unit; + if (st = DrvModelNum(drv_let)) { + "Model#:%s\n", st; + Free(st); + } + if (st = DrvSerialNum(drv_let)) { + "Serial#:%s\n", st; + Free(st); + } + if (bd->type == BDT_ISO_FILE_READ || bd->type == BDT_ISO_FILE_WRITE) + "File=\"%s\"\n", bd->file_dsk_name; + "%016X-%016X\n\dFG\d\dBG\d", dv->drv_offset, dv->drv_offset + dv->size - 1; + } + } + "Home Dir:\"%s\"\n", blkdev.home_dir; +} + +@patch_jmp_rel32(&DrvTextAttrGet, &DrvTextAttrGet2); +@patch_jmp_rel32(&DrvRep, &DrvRep2); + +VirtioBlkInit; +MountVirtioBlk; + +if (Let2Drv('A', 0) && !Let2Drv('A')->root_clus) { + "[virtio-blk] RedSea filesystem not initialized, formatting.\n"; + Fmt('A', , FALSE, FSt_REDSEA); + Cd("M:/System/"); +} + +"virtio-blk "; diff --git a/System/FFI/Base.HC b/System/FFI/Base.HC new file mode 100644 index 0000000..e013399 --- /dev/null +++ b/System/FFI/Base.HC @@ -0,0 +1,51 @@ +#define PUSH_SYSV_REGS \ + asm {PUSH RCX PUSH RDX PUSH RBX PUSH RBP PUSH RSI PUSH RDI PUSH R8 PUSH R9 PUSH \ + R10 PUSH R11 PUSH R12 PUSH R13 PUSH R14 PUSH R15} +#define POP_SYSV_REGS \ + p0 = p0; \ + p1 = p1; \ + p2 = p2; \ + p3 = p3; \ + p4 = p4; \ + p5 = p5; \ + asm {POP R15 POP R14 POP R13 POP R12 POP R11 POP R10 POP R9 POP R8 POP RDI POP \ + RSI POP RBP POP RBX POP RDX POP RCX} +#define GET_SYSV_ARGS \ + asm {PUSH R9 PUSH R8 PUSH RCX PUSH RDX PUSH RSI PUSH RDI} \ + I64 reg RDI p0; \ + I64 reg RSI p1; \ + I64 reg RDX p2; \ + I64 reg RCX p3; \ + I64 reg R8 p4; \ + I64 reg R9 p5; \ + asm {POP RDI POP RSI POP RDX POP RCX POP R8 POP R9} + +#define MOV_ANS_RAX asm { MOV[&ans], RAX } +#define MOV_PARAM0_RDI asm {MOV [&param0], RDI} + +I64 param0; +I64 elf_argc; +U8** elf_argv; + +asm { +_ELF_CALL:: + PUSH RBP + MOV RBP,RSP + MOV RAX,U64 SF_ARG1[RBP] + MOV RDI,U64 SF_ARG2[RBP] + MOV RSI,U64 SF_ARG3[RBP] + TEST RAX,RAX + JZ @@05 + CALL RAX +@@05: POP RBP + RET1 8 +} + +U0 _main() +{ + MOV_PARAM0_RDI + CallInd(_ELF_CALL, param0, elf_argc, elf_argv); + UserTaskCont; +} + +U0 _exit() { UserTaskCont; } diff --git a/System/FFI/ELF64.HC b/System/FFI/ELF64.HC new file mode 100644 index 0000000..50e6315 --- /dev/null +++ b/System/FFI/ELF64.HC @@ -0,0 +1,301 @@ +#define EI_NIDENT 16 +#define EM_X86_64 0x3E +#define ET_EXEC 2 +#define ET_DYN 3 + +U0 @elf64_debug_print(U8 fmt, ...) +{ + // FIXME: Remove unnecessary debug_print statements and PrintErr for errors. + no_warn fmt, argc, argv; +} + +class Elf64_Ehdr { + U8 e_ident[EI_NIDENT]; /* Magic number and other info */ + U16 e_type; /* Object file type */ + U16 e_machine; /* Architecture */ + U32 e_version; /* Object file version */ + U64 e_entry; /* Entry point virtual address */ + U64 e_phoff; /* Program header table file offset */ + U64 e_shoff; /* Section header table file offset */ + U32 e_flags; /* Processor-specific flags */ + U16 e_ehsize; /* ELF header size in bytes */ + U16 e_phentsize; /* Program header table entry size */ + U16 e_phnum; /* Program header table entry count */ + U16 e_shentsize; /* Section header table entry size */ + U16 e_shnum; /* Section header table entry count */ + U16 e_shstrndx; /* Section header string table index */ +}; + +class Elf64_Shdr { + U32 sh_name; /* Section name (string tbl index) */ + U32 sh_type; /* Section type */ + U64 sh_flags; /* Section flags */ + U64 sh_addr; /* Section virtual addr at execution */ + U64 sh_offset; /* Section file offset */ + U64 sh_size; /* Section size in bytes */ + U32 sh_link; /* Link to another section */ + U32 sh_info; /* Additional section information */ + U64 sh_addralign; /* Section alignment */ + U64 sh_entsize; /* Entry size if section holds table */ +}; + +class Elf64_Sym { + U32 st_name; /* Symbol name (string tbl index) */ + U8 st_info; /* Symbol type and binding */ + U8 st_other; /* Symbol visibility */ + U16 st_shndx; /* Section index */ + U64 st_value; /* Symbol value */ + U64 st_size; /* Symbol size */ +}; + +class PLT_entry { + U8 pad[0x10]; +}; + +class RELA_entry { + U64 r_offset; + U64 r_info; + I64 r_addend; +}; + +class Elf { + union { + U8* u8; + Elf64_Ehdr* ehdr; + } I64 size; + U8* dynstr; + Elf64_Sym* dynsym; + PLT_entry* plt; + RELA_entry* rela_dyn; + RELA_entry* rela_plt; + Elf64_Sym* strtab; + Elf64_Sym* symtab; + I64 rela_dyn_size; + I64 rela_plt_size; + I64 strtab_size; + I64 symtab_size; +}; + +U0(*_start) +(); + +U0 unimplemented_symbol() +{ + I32 s = 0xDEADF00D; + PrintWarn("Unimplemented symbol: %s\n", s); + Dbg; + while (1) + Sleep(1); +} + +Bool is_valid_elf(Elf* elf) +{ + Bool res = TRUE; + if (MemCmp(elf->u8 + 1, "ELF", 3)) { + @elf64_debug_print("Invalid signature (not ELF).\n"); + res = FALSE; + } + if (elf->ehdr->e_type != ET_EXEC && elf->ehdr->e_type != ET_DYN) { + @elf64_debug_print("Invalid object file type.\n"); + res = FALSE; + } + if (elf->ehdr->e_machine != EM_X86_64) { + @elf64_debug_print("Invalid architecture.\n"); + res = FALSE; + } + return res; +} + +U0 process_elf_section_header_table(Elf* elf) +{ + Elf64_Shdr* shdr = elf->u8 + elf->ehdr->e_shoff; + Elf64_Shdr* shdr_shstrtab = shdr + elf->ehdr->e_shstrndx; + U8* shstrtab = elf->u8 + shdr_shstrtab->sh_offset; + I64 i = 0; + while (i < elf->ehdr->e_shnum) { + if (!StrCmp(shstrtab + shdr->sh_name, ".symtab")) { + @elf64_debug_print("found symtab at 0x%08x, size = %d\n", shdr->sh_offset, + shdr->sh_size); + elf->symtab = elf->u8 + shdr->sh_offset; + elf->symtab_size = shdr->sh_size; + } + if (!StrCmp(shstrtab + shdr->sh_name, ".strtab")) { + @elf64_debug_print("found strtab at 0x%08x, size = %d\n", shdr->sh_offset, + shdr->sh_size); + elf->strtab = elf->u8 + shdr->sh_offset; + elf->strtab_size = shdr->sh_size; + } + if (shdr->sh_addr) { + MemCpy(shdr->sh_addr, elf->u8 + shdr->sh_offset, shdr->sh_size); + if (!StrCmp(shstrtab + shdr->sh_name, ".dynstr")) + elf->dynstr = shdr->sh_addr; + if (!StrCmp(shstrtab + shdr->sh_name, ".dynsym")) + elf->dynsym = shdr->sh_addr; + if (!StrCmp(shstrtab + shdr->sh_name, ".plt")) + elf->plt = shdr->sh_addr; + if (!StrCmp(shstrtab + shdr->sh_name, ".rela.dyn")) { + elf->rela_dyn = shdr->sh_addr; + elf->rela_dyn_size = shdr->sh_size / shdr->sh_entsize; + } + if (!StrCmp(shstrtab + shdr->sh_name, ".rela.plt")) { + elf->rela_plt = shdr->sh_addr; + elf->rela_plt_size = shdr->sh_size / shdr->sh_entsize; + } + if (!StrCmp(shstrtab + shdr->sh_name, ".bss") || !StrCmp(shstrtab + shdr->sh_name, ".tbss")) { + MemSet(shdr->sh_addr, NULL, shdr->sh_size); + @elf64_debug_print( + "Zeroed out section '%s' at physical address 0x%06x, size = %d bytes\n", + shstrtab + shdr->sh_name, shdr->sh_addr, shdr->sh_size); + } else + @elf64_debug_print( + "MemCpy section '%s' to physical address 0x%06x, size = %d bytes\n", + shstrtab + shdr->sh_name, shdr->sh_addr, shdr->sh_size); + if (!StrCmp(shstrtab + shdr->sh_name, ".bss")) { + MemSet(shdr->sh_addr, NULL, shdr->sh_size); + @elf64_debug_print("MemSet section '%s' at physical address 0x%06x to NULL, " + "size = %d bytes\n", + shstrtab + shdr->sh_name, shdr->sh_addr, shdr->sh_size); + } + } + shdr++; + i++; + } +} + +U0 process_elf_rela_dyn_entries(Elf* elf) +{ + I64 i; + U8* entry_name; + RELA_entry* rela_dyn = elf->rela_dyn; + for (i = 0; i < elf->rela_dyn_size; i++) { + entry_name = elf->dynstr + elf->dynsym[(rela_dyn->r_info >> 32)].st_name; + @elf64_debug_print("rela_dyn->r_offset = %08x\n", rela_dyn->r_offset); + @elf64_debug_print("entry name = '%s'\n", entry_name); + if (!StrCmp(entry_name, "__libc_start_main")) { + *(rela_dyn->r_offset)(U64*) = &_main; + @elf64_debug_print("Set value for .rela.dyn entry '%s' to: &_main\n", + entry_name); + } + if (!StrCmp(entry_name, "stdin")) { + *(rela_dyn->r_offset)(U64*) = 0; + @elf64_debug_print("Set value for .rela.dyn entry '%s' to: %d\n", entry_name, 0); + } + if (!StrCmp(entry_name, "stdout")) { + *(rela_dyn->r_offset)(U64*) = 1; + @elf64_debug_print("Set value for .rela.dyn entry '%s' to: %d\n", entry_name, 1); + } + if (!StrCmp(entry_name, "stderr")) { + *(rela_dyn->r_offset)(U64*) = 2; + @elf64_debug_print("Set value for .rela.dyn entry '%s' to: %d\n", entry_name, 2); + } + rela_dyn++; + } +} + +CHashClass* get_symbol_hash_entry(U8* entry_name) +{ + I64 i; + CHashSrcSym* sym; + CHashTable* tbl = Fs->hash_table; + while (tbl) { + for (i = 0; i < tbl->mask; i++) { + sym = tbl->body[i]; + while (sym) { + if (sym->type == HTT_CLASS) + if (!StrCmp(sym->str, entry_name)) + return sym; + sym = sym->next; + } + } + tbl = tbl->next; + } + return NULL; +} + +U64 get_symbol_address(U8* entry_name) +{ + CHash* h = HashFind(entry_name, Fs->hash_table, Fs->hash_table->mask); + if (!h) + return NULL; + switch (h->type) { + case HTT_GLBL_VAR: + return h(CHashGlblVar*)->data_addr; + break; + case HTT_FUN: + return h(CHashFun*)->exe_addr; + break; + default: + return NULL; + break; + } + return NULL; +} + +U0 process_elf_rela_plt_entries(Elf* elf) +{ + I64 i; + U32 handler; + U32* patch; + U8* entry_name; + Bool symbol_exists; + PLT_entry* plt = elf->plt; + RELA_entry* rela_plt = elf->rela_plt; + plt++; + for (i = 0; i < elf->rela_plt_size; i++) { + symbol_exists = FALSE; + entry_name = elf->dynstr + elf->dynsym[(rela_plt->r_info >> 32)].st_name; + handler = MAlloc(sizeof(unimplemented_symbol), erythros_mem_task->code_heap); + MemCpy(handler, &unimplemented_symbol, sizeof(unimplemented_symbol)); + patch = handler + 0x0A; + *patch = entry_name; + @patch_jmp_rel32(plt, handler); + @patch_call_rel32(handler + 0x16, &PrintErr); + //@patch_call_rel32(handler + 0x21, &_exit); + if (!StrCmp(entry_name, "__libc_start_main")) { + symbol_exists = TRUE; + @patch_jmp_rel32(plt, &_main); + @elf64_debug_print("Set value for .rela.plt entry '%s' to &_main\n", entry_name); + } + if (get_symbol_address(entry_name)) { + symbol_exists = TRUE; + @patch_jmp_rel32(plt, get_symbol_address(entry_name)); + @elf64_debug_print("Set value for .rela.plt entry '%s' to &%s\n", entry_name, + entry_name); + } + if (!symbol_exists) + @elf64_debug_print( + "Set value for .rela.plt entry '%s' to &unimplemented_symbol\n", + entry_name); + rela_plt++; + plt++; + } +} + +U0 load_elf(...) +{ + if (argc < 1) { + PrintErr("Not enough arguments.\n"); + return; + } + if (!FileFind(argv[0])) { + PrintErr("File not found: %s\n", argv[0]); + return; + } + + Elf elf; + elf.u8 = FileRead(argv[0], &elf.size); + @elf64_debug_print("Load file '%s', size = %d bytes\n", argv[0], elf.size); + + if (!is_valid_elf(&elf)) { + PrintErr("File is not a valid ELF x86-64 executable.\n"); + return; + } + + process_elf_section_header_table(&elf); + process_elf_rela_dyn_entries(&elf); + process_elf_rela_plt_entries(&elf); + + _start = elf.ehdr->e_entry; + elf_argc = argc; + elf_argv = argv; +} \ No newline at end of file diff --git a/System/FFI/LibC.HC b/System/FFI/LibC.HC new file mode 100644 index 0000000..9c89a44 --- /dev/null +++ b/System/FFI/LibC.HC @@ -0,0 +1,324 @@ +#define stdin 0 +#define stdout 1 +#define stderr 2 + +U0 bcmp() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + MemCmp(p0, p1, p2); + POP_SYSV_REGS +} + +U0 calloc() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + CAlloc(p0 * p1, erythros_mem_task->code_heap); + POP_SYSV_REGS +} + +U0 free() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + Free(p0); + POP_SYSV_REGS +} + +I64 @isatty() +{ + return 0; +} + +U0 isatty() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + // Dbg; + @isatty; + POP_SYSV_REGS +} + +I64 @fwrite(U8* ptr, I64 size, I64 nmemb, U64 stream) +{ + U8* tmp; + switch (stream) { + case stdout: + case stderr: + tmp = CAlloc((size * nmemb) + 1, erythros_mem_task->code_heap); + MemCpy(tmp, ptr, (size * nmemb)); +#ifdef QEMU_RUN_TESTS + QemuDebugMsg(tmp); +#endif + DocPutS(adam_task->put_doc, tmp); + Free(tmp); + // if (!MemCmp(tmp, "VERIFICATION FAILED", 19)) + // Break; + break; + default: + break; + } + return size * nmemb; +} + +U0 fwrite() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + @fwrite(p0, p1, p2, p3); + POP_SYSV_REGS +} + +U64 @getentropy(U8* buffer, U64 length) +{ + I64 i; + for (i = 0; i < length; i++) + buffer[i] = RandU64; + return 0; +} + +U0 getentropy() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + @getentropy(p0, p1); + POP_SYSV_REGS +} + +U0 htonl() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + EndianU32(p0); + POP_SYSV_REGS +} + +U0 ntohl() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + EndianU32(p0); + POP_SYSV_REGS +} + +U0 htons() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + EndianU16(p0); + POP_SYSV_REGS +} + +U0 ntohs() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + EndianU16(p0); + POP_SYSV_REGS +} + +U64 @malloc(I64 size) +{ + U64 res = MAlloc(size, malloc_mem_task[malloc_current_mem_task % MALLOC_MEM_TASK_COUNT]->code_heap); + malloc_current_mem_task++; + return res; +} + +U0 malloc() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + @malloc(p0); + POP_SYSV_REGS +} + +U0 memcmp() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + MemCmp(p0, p1, p2); + POP_SYSV_REGS +} + +U0 memcpy() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + MemCpy(p0, p1, p2); + POP_SYSV_REGS +} + +U8* @memmove(U8* dest, U8* src, I64 n) +{ + I64 i; + U8* from = src; + U8* to = dest; + if (from == to || n == 0) + return dest; + if (to > from && to - from < n) { + /* to overlaps with from */ + /* <from......> */ + /* <to........> */ + /* copy in reverse, to avoid overwriting from */ + for (i = n - 1; i >= 0; i--) + to[i] = from[i]; + return dest; + } + if (from > to && from - to < n) { + /* to overlaps with from */ + /* <from......> */ + /* <to........> */ + /* copy forwards, to avoid overwriting from */ + for (i = 0; i < n; i++) + to[i] = from[i]; + return dest; + } + MemCpy(dest, src, n); + return dest; +} + +U0 memmove() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + @memmove(p0, p1, p2); + POP_SYSV_REGS +} + +U0 memset() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + MemSet(p0, p1, p2); + POP_SYSV_REGS +} + +U0 putc() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + PutChars(p0); + POP_SYSV_REGS +} + +U0 rand() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + RandU64; + POP_SYSV_REGS +} + +U8* @realloc(U8* ptr, I64 size) +{ + U8* new; + if (!ptr) { + new = MAlloc(size, erythros_mem_task->code_heap); + } else { + new = MAlloc(size, erythros_mem_task->code_heap); + MemCpy(new, ptr, size); + Free(ptr); + } + return new; +} + +U0 realloc() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + @realloc(p0, p1); + POP_SYSV_REGS +} + +// FIXME: It is non-obvious how to take a [u8] and convert it to a +// formatted string in Jakt, so we have to do this hack for +// now. Hopefully, this will change soon. +U0 sprintf() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + StrPrint(p0, p1, p2, p3, p4, p5); + POP_SYSV_REGS +} + +I64 @strncmp(U8* s1, U8* s2, I32 n) +{ + U64 u1, u2; + + while (n-- > 0) { + u1 = *s1++; + u2 = *s2++; + u1 = u1 & 0xff; + u2 = u2 & 0xff; + if (u1 != u2) + return u1 - u2; + if (u1 == '\0') + return 0; + } + return 0; +} + +U0 strncmp() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + @strncmp(p0, p1, p2); + POP_SYSV_REGS +} + +U0 strcmp() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + StrCmp(p0, p1); + POP_SYSV_REGS +} + +U0 strlen() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + StrLen(p0); + POP_SYSV_REGS +} + +I64 tos_nist_offset = 5020; +#define NIST_TIME_OFFSET (tos_nist_offset - local_time_offset / CDATE_FREQ) + +public +I64 CDate2Unix(CDate dt) +{ // TempleOS datetime to Unix timestamp. + return ToI64((dt - Str2Date("1/1/1970")) / CDATE_FREQ + NIST_TIME_OFFSET); +} + +I64 @time(I64* ptr) +{ + no_warn ptr; + return CDate2Unix(Now); +} + +U0 time() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + @time(p0); + POP_SYSV_REGS +} + +U0 toupper() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + ToUpper(p0); + POP_SYSV_REGS +} + +U0 __assert_fail() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + "%s:%d: %s: %s\n", p1, p2, p3, p0; + Break; + POP_SYSV_REGS +} diff --git a/System/FFI/New.HC b/System/FFI/New.HC new file mode 100644 index 0000000..42d4e13 --- /dev/null +++ b/System/FFI/New.HC @@ -0,0 +1,35 @@ +U0 _ZdlPv() +{ + // operator delete(void*) + PUSH_SYSV_REGS + GET_SYSV_ARGS + Free(p0); + POP_SYSV_REGS +} + +U0 _ZdlPvm() +{ + // operator delete(void*, unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + Free(p0); + POP_SYSV_REGS +} + +U0 _Znwm() +{ + // operator new(unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + MAlloc(p0, erythros_mem_task); + POP_SYSV_REGS +} + +U0 _ZnwmRKSt9nothrow_t() +{ + // operator new(unsigned long, std::nothrow_t const&) + PUSH_SYSV_REGS + GET_SYSV_ARGS + MAlloc(p0, erythros_mem_task); + POP_SYSV_REGS +} diff --git a/System/Jakt/DC.HC b/System/Jakt/DC.HC new file mode 100644 index 0000000..ea20b52 --- /dev/null +++ b/System/Jakt/DC.HC @@ -0,0 +1,288 @@ +U0 _Z8dc_aliasm() +{ + // dc_alias(unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + DCAlias(p0); + POP_SYSV_REGS +} + +U0 _Z7dc_blotmmmm() +{ + // dc_blot(unsigned long, unsigned long, unsigned long, unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + GrBlot(p0, p1, p2, p3); + POP_SYSV_REGS +} + +U8* @dc_buffer(CDC* dc) { return dc->body; } + +U0 _Z9dc_bufferm() +{ + // dc_buffer(unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @dc_buffer(p0); + POP_SYSV_REGS +} + +I64 @dc_color(CDC* dc) { return dc->color; } + +U0 _Z8dc_colorm() +{ + // dc_color(unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @dc_color(p0); + POP_SYSV_REGS +} + +U0 @dc_copy(CDC* dest, I64 x, I64 y, CDC* src) +{ + + // If position is off-screen, return + if (x > dest->width - 1 || y > dest->height - 1) + return; + + // If device context dimensions match, MemCpy and return + if (dest->width_internal == src->width_internal && dest->height == src->height) { + MemCpy(dest->body, src->body, dest->width_internal * dest->height); + return; + } + + CDC* dc1 = DCAlias(dest); + CDC* dc2 = DCAlias(src); + + I64 src_line = 0; + I64 src_row = 0; + I64 clip_y = 0; + + // Handle horizontal clipping left + while (x < 0) { + dc2->x0++; + x++; + } + + // Handle vertical clipping top + while (y < 0) { + dc2->body += src->width_internal; + dc2->y0++; + y++; + } + + // default, clip line to copy as width-left off screen + src_line = src->width - dc2->x0; + + if (-dc2->x0 + x + src->width >= dest->width) { + src_line -= ((-dc2->x0 + x + src->width) - dest->width); + } + + dc2->body += dc2->x0; + clip_y = y; + + while (src_row < (src->height - dc2->y0) && clip_y < dest->height) { + MemCpy(dc1->body + (y * dest->width) + x, dc2->body, src_line); + dc2->body += src->width_internal; + dc1->body += dest->width_internal; + clip_y++; + src_row++; + } + + Free(dc2); + Free(dc1); +} + +U0 _Z7dc_copymmmm() +{ + // dc_copy(unsigned long, unsigned long, unsigned long, unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @dc_copy(p0, p1, p2, p3); + POP_SYSV_REGS +} + +U0 _Z10dc_destroym() +{ + // dc_destroy(unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + DCDel(p0); + POP_SYSV_REGS +} + +U0 _Z14dc_draw_circlemlll() +{ + // dc_draw_circle(unsigned long, long, long, long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + GrCircle3(p0, p1, p2, 0, p3); + POP_SYSV_REGS +} + +U0 _Z19dc_draw_filled_rectmllll() +{ + // dc_draw_filled_rect(unsigned long, long, long, long, long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + GrRect(p0, p1, p2, p3, p4); + POP_SYSV_REGS +} + +U0 _Z12dc_draw_linemllll() +{ + // dc_draw_line(unsigned long, long, long, long, long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + GrLine3(p0, p1, p2, 0, p3, p4, 0); + POP_SYSV_REGS +} + +U0 _Z13dc_draw_pixelmll() +{ + // dc_draw_pixel(unsigned long, long, long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + GrPlot(p0, p1, p2); + POP_SYSV_REGS +} + +U0 _Z7dc_fillmm() +{ + // dc_fill(unsigned long, unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + DCFill(p0, p1); + POP_SYSV_REGS +} + +CDC* @dc_gr_dc() { return gr.dc; } + +U0 _Z8dc_gr_dcv() +{ + // dc_gr_dc() + PUSH_SYSV_REGS + GET_SYSV_ARGS + @dc_gr_dc(); + POP_SYSV_REGS +} + +I64 @dc_height(CDC* dc) { return dc->height; } + +U0 _Z9dc_heightm() +{ + // dc_height(unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @dc_height(p0); + POP_SYSV_REGS +} + +U0 _Z17dc_load_from_filePKc() +{ + // dc_load_from_file(char const*) + PUSH_SYSV_REGS + GET_SYSV_ARGS + GRRead(p0); + POP_SYSV_REGS +} + +U0 _Z6dc_newmm() +{ + // dc_new(unsigned long, unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + DCNew(p0, p1); + POP_SYSV_REGS +} + +U0 _Z11dc_pixel_atmll() +{ + // dc_pixel_at(unsigned long, long, long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + GrPeek(p0, p1, p2); + POP_SYSV_REGS +} + +U0 _Z16dc_replace_colormmm() +{ + // dc_replace_color(unsigned long, unsigned long, unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + DCColorChg(p0, p1, p2); + POP_SYSV_REGS +} + +U0 _Z13dc_screenshotv() +{ + // dc_screenshot() + PUSH_SYSV_REGS + GET_SYSV_ARGS + DCScrnCapture(1); + POP_SYSV_REGS +} + +U0 _Z15dc_save_to_filePKcm() +{ + // dc_save_to_file(char const*, unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + GRWrite(p0, p1); + POP_SYSV_REGS +} + +U0 @dc_set_color(CDC* dc, I64 color) { dc->color = color; } + +U0 _Z12dc_set_colorml() +{ + // dc_set_color(unsigned long, long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @dc_set_color(p0, p1); + POP_SYSV_REGS +} + +U0 @dc_set_thickness(CDC* dc, I64 thickness) { dc->thick = thickness; } + +U0 _Z16dc_set_thicknessml() +{ + // dc_set_thickness(unsigned long, long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @dc_set_thickness(p0, p1); + POP_SYSV_REGS +} + +I64 @dc_thickness(CDC* dc) { return dc->thick; } + +U0 _Z12dc_thicknessm() +{ + // dc_thickness(unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @dc_thickness(p0); + POP_SYSV_REGS +} + +I64 @dc_width(CDC* dc) { return dc->width; } + +U0 _Z8dc_widthm() +{ + // dc_width(unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @dc_width(p0); + POP_SYSV_REGS +} + +I64 @dc_width_internal(CDC* dc) { return dc->width_internal; } + +U0 _Z17dc_width_internalm() +{ + // dc_width_internal(unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @dc_width_internal(p0); + POP_SYSV_REGS +} \ No newline at end of file diff --git a/System/Jakt/IOPort.HC b/System/Jakt/IOPort.HC new file mode 100644 index 0000000..e192c14 --- /dev/null +++ b/System/Jakt/IOPort.HC @@ -0,0 +1,53 @@ +U0 _Z14ioport_read_u8t() +{ + // ioport_read_u8(unsigned short) + PUSH_SYSV_REGS + GET_SYSV_ARGS + InU8(p0); + POP_SYSV_REGS +} + +U0 _Z15ioport_read_u16t() +{ + // ioport_read_u16(unsigned short) + PUSH_SYSV_REGS + GET_SYSV_ARGS + InU16(p0); + POP_SYSV_REGS +} + +U0 _Z15ioport_read_u32t() +{ + // ioport_read_u32(unsigned short) + PUSH_SYSV_REGS + GET_SYSV_ARGS + InU32(p0); + POP_SYSV_REGS +} + +U0 _Z15ioport_write_u8th() +{ + // ioport_write_u8(unsigned short, unsigned char) + PUSH_SYSV_REGS + GET_SYSV_ARGS + OutU8(p0, p1); + POP_SYSV_REGS +} + +U0 _Z16ioport_write_u16tt() +{ + // ioport_write_u16(unsigned short, unsigned short) + PUSH_SYSV_REGS + GET_SYSV_ARGS + OutU16(p0, p1); + POP_SYSV_REGS +} + +U0 _Z16ioport_write_u32tj() +{ + // ioport_write_u32(unsigned short, unsigned int) + PUSH_SYSV_REGS + GET_SYSV_ARGS + OutU32(p0, p1); + POP_SYSV_REGS +} diff --git a/System/Jakt/Input.HC b/System/Jakt/Input.HC new file mode 100644 index 0000000..b427a40 --- /dev/null +++ b/System/Jakt/Input.HC @@ -0,0 +1,72 @@ +U0 _Z16input_get_stringPKc() +{ + // input_get_string(char const*) + PUSH_SYSV_REGS + GET_SYSV_ARGS + GetStr(p0); + POP_SYSV_REGS +} + +Bool @input_key_down(U8 scancode) { return Bt(kbd.down_bitmap, scancode); } + +U0 _Z14input_key_downh() +{ + // input_key_down(unsigned char) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @input_key_down(p0); + POP_SYSV_REGS +} + +Bool @input_mouse_left() { return ms.lb; } + +U0 _Z16input_mouse_leftv() +{ + // input_mouse_left() + PUSH_SYSV_REGS + GET_SYSV_ARGS + @input_mouse_left(); + POP_SYSV_REGS +} + +Bool @input_mouse_right() { return ms.rb; } + +U0 _Z17input_mouse_rightv() +{ + // input_mouse_right() + PUSH_SYSV_REGS + GET_SYSV_ARGS + @input_mouse_right(); + POP_SYSV_REGS +} + +I64 @input_mouse_x() { return ms.pos.x; } + +U0 _Z13input_mouse_xv() +{ + // input_mouse_x() + PUSH_SYSV_REGS + GET_SYSV_ARGS + @input_mouse_x(); + POP_SYSV_REGS +} + +I64 @input_mouse_y() { return ms.pos.y; } + +U0 _Z13input_mouse_yv() +{ + // input_mouse_y() + PUSH_SYSV_REGS + GET_SYSV_ARGS + @input_mouse_y(); + POP_SYSV_REGS +} + +U0 _Z17input_press_a_keyv() +{ + // input_press_a_key() + PUSH_SYSV_REGS + GET_SYSV_ARGS + PressAKey; + POP_SYSV_REGS +} \ No newline at end of file diff --git a/System/Jakt/OS.HC b/System/Jakt/OS.HC new file mode 100644 index 0000000..88cd0cc --- /dev/null +++ b/System/Jakt/OS.HC @@ -0,0 +1,289 @@ +U0 _Z8os_blinkPKc() +{ + // os_blink(char const*) + PUSH_SYSV_REGS + GET_SYSV_ARGS + F64 frequency = Str2F64(p0); + Print("called os_blink(%.1f)\n", frequency); + Blink(frequency); + POP_SYSV_REGS +} + +U64 @os_call(U8* function_name, U64 arg) +{ + if (!function_name) + return NULL; + if (!StrLen(function_name)) + return NULL; + CHash* h = HashFind(function_name, Fs->hash_table, Fs->hash_table->mask); + if (!h) + return NULL; + if (h->type & HTT_FUN == HTT_FUN) { + CallInd(h(CHashFun*)->exe_addr, arg); + } else { + return NULL; + } +} + +U0 _Z7os_callmm() +{ + // os_call(unsigned long, unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @os_call(p0, p1); + POP_SYSV_REGS +} + +U0 _Z16os_device_callocj() +{ + // os_device_calloc(unsigned int) + PUSH_SYSV_REGS + GET_SYSV_ARGS + CAllocAligned(p0, 4096, erythros_mem_task->code_heap); + POP_SYSV_REGS +} + +U0 _Z7os_exitv() +{ + // os_exit() + PUSH_SYSV_REGS + GET_SYSV_ARGS + UserTaskCont; + POP_SYSV_REGS +} + +U8* @os_file_picker(U8* path, U8* glob) +{ + U8* full_path = CAlloc(StrLen(path) + StrLen(glob) + 4, erythros_mem_task); + CatPrint(full_path, "%s/%s", path, glob); + + CDirEntry* de = FilesFind(full_path); + Free(full_path); + + CDirEntry* tmpde; + U8* file_list = NULL; + U8* selected_file = NULL; + I64 list_pos = 0; + I64 list_size = 0; + + tmpde = de; + while (tmpde) { + list_size += StrLen(tmpde->name) + 2; + tmpde = tmpde->next; + } + + file_list = CAlloc(list_size, erythros_mem_task); + + tmpde = de; + while (tmpde) { + StrCpy(file_list + list_pos, tmpde->name); + list_pos += StrLen(tmpde->name) + 1; + tmpde = tmpde->next; + } + + I64 list_index = Adam("PopUpPickLst(0x%08x);\n", file_list); + Free(file_list); + list_pos = 0; + + if (list_index < 0) { + DirTreeDel(de); + return StrNew("", erythros_mem_task); + } + + tmpde = de; + while (tmpde) { + if (list_index == list_pos) { + selected_file = CAlloc(StrLen(path) + StrLen(tmpde->name) + 4, erythros_mem_task); + CatPrint(selected_file, "%s/%s", path, tmpde->name); + break; + } + StrCpy(file_list + list_pos, tmpde->name); + list_pos++; + tmpde = tmpde->next; + } + + DirTreeDel(de); + return selected_file; +} + +U0 _Z14os_file_pickerPKcS0_() +{ + // os_file_picker(char const*, char const*) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @os_file_picker(p0, p1); + POP_SYSV_REGS +} + +U8* @os_files_list(U8* path) +{ + U8* full_path = CAlloc(StrLen(path) + 4, erythros_mem_task); + CatPrint(full_path, "%s", path); + + CDirEntry* de = FilesFind(full_path); + Free(full_path); + + CDateStruct ds; + CDirEntry* tmpde; + U8* file_list = NULL; + I64 list_size = 0; + + tmpde = de; + while (tmpde) { + list_size += StrLen(tmpde->name) + 48; // Should be enough for filename, date, + // filesize + semicolon separators + tmpde = tmpde->next; + } + + if (!list_size) + return NULL; + + file_list = CAlloc(list_size, erythros_mem_task); + + tmpde = de; + I64 counter = 0; + + while (tmpde) { + if (counter > 0) { + StrCpy(file_list + StrLen(file_list), "|"); + } + StrCpy(file_list + StrLen(file_list), tmpde->name); + if (tmpde->attr & RS_ATTR_DIR) + StrCpy(file_list + StrLen(file_list), "/"); + StrCpy(file_list + StrLen(file_list), ";"); + Date2Struct(&ds, tmpde->datetime); + StrPrint(file_list + StrLen(file_list), "%04d-%02d-%02d %02d:%02d", ds.year, + ds.mon, ds.day_of_mon, ds.hour, ds.min); + StrCpy(file_list + StrLen(file_list), ";"); + StrPrint(file_list + StrLen(file_list), "%d", tmpde->size); + tmpde = tmpde->next; + counter++; + } + + DirTreeDel(de); + return file_list; +} + +U0 _Z14os_path_existsPKc() +{ + // os_path_exists(char const*) + PUSH_SYSV_REGS + GET_SYSV_ARGS + FileFind(p0); + POP_SYSV_REGS +} + +U0 _Z13os_files_listPKc() +{ + // os_files_list(char const*) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @os_files_list(p0); + POP_SYSV_REGS +} + +Bool @os_is_vm() +{ + CRAXRBCRCXRDX res; + CPUId(0x40000000, &res); + if (res.rbx == 0x4B4D564B) + return TRUE; + return FALSE; +} + +U0 _Z8os_is_vmv() +{ + PUSH_SYSV_REGS + GET_SYSV_ARGS + @os_is_vm; + POP_SYSV_REGS +} + +U0 @os_pc_speaker(F64 frequency) +{ + I64 period; + if (!frequency) + OutU8(0x61, InU8(0x61) & ~3); + else { + period = ClampI64(SYS_TIMER_FREQ / frequency, 1, U16_MAX); + OutU8(0x43, 0xB6); + OutU8(0x42, period); + OutU8(0x42, period.u8[1]); + OutU8(0x61, 3 | InU8(0x61)); + } +} + +U0 _Z13os_pc_speakerPKc() +{ + // os_pc_speaker(char const*) + PUSH_SYSV_REGS + GET_SYSV_ARGS + F64 frequency = Str2F64(p0); + @os_pc_speaker(frequency); + POP_SYSV_REGS +} + +U0 _Z9os_randomv() +{ + // os_random() + PUSH_SYSV_REGS + GET_SYSV_ARGS + RandU64; + POP_SYSV_REGS +} + +U0 _Z19os_read_entire_filePKcPl() +{ + // os_read_entire_file(char const*, long*) + PUSH_SYSV_REGS + GET_SYSV_ARGS + FileRead(p0, p1); + POP_SYSV_REGS +} + +U0 @os_screenshot() +{ + CDC* dc = DCScrnCapture(, erythros_mem_task); + // Image.Write("B:/screenshot.png", dc); + DCDel(dc); +} + +U0 _Z13os_screenshotv() +{ + // os_screenshot() + PUSH_SYSV_REGS + GET_SYSV_ARGS + @os_screenshot; + POP_SYSV_REGS +} + +U8* @os_to_uppercase(U8* instr) +{ + if (!instr) + return NULL; + if (!StrLen(instr)) + return NULL; + U8* outstr = CAlloc(StrLen(instr) + 1, erythros_mem_task); + I64 i; + for (i = 0; i < StrLen(instr); i++) + outstr[i] = ToUpper(instr[i]); + return outstr; +} + +U0 _Z15os_to_uppercasePKc() +{ + // os_to_uppercase(char const*) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @os_to_uppercase(p0); + POP_SYSV_REGS +} + +U0 _Z20os_write_entire_filePKcPhl() +{ + // os_write_entire_file(char const*, unsigned char*, long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + FileWrite(p0, p1, p2); + POP_SYSV_REGS +} diff --git a/System/Jakt/PCI.HC b/System/Jakt/PCI.HC new file mode 100644 index 0000000..1a37903 --- /dev/null +++ b/System/Jakt/PCI.HC @@ -0,0 +1,62 @@ +U0 _Z8pci_findl() +{ + // pci_find(long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + PCIClassFind(p0, 0); + POP_SYSV_REGS +} + +U0 _Z11pci_read_u8llll() +{ + // pci_read_u8(long, long, long, long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + PCIReadU8(p0, p1, p2, p3); + POP_SYSV_REGS +} + +U0 _Z12pci_read_u16llll() +{ + // pci_read_u16(long, long, long, long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + PCIReadU16(p0, p1, p2, p3); + POP_SYSV_REGS +} + +U0 _Z12pci_read_u32llll() +{ + // pci_read_u32(long, long, long, long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + PCIReadU32(p0, p1, p2, p3); + POP_SYSV_REGS +} + +U0 _Z12pci_write_u8llllh() +{ + // pci_write_u8(long, long, long, long, unsigned char) + PUSH_SYSV_REGS + GET_SYSV_ARGS + PCIWriteU8(p0, p1, p2, p3, p4); + POP_SYSV_REGS +} + +U0 _Z13pci_write_u16llllt() +{ + // pci_write_u16(long, long, long, long, unsigned short) + PUSH_SYSV_REGS + GET_SYSV_ARGS + PCIWriteU16(p0, p1, p2, p3, p4); + POP_SYSV_REGS +} + +U0 _Z13pci_write_u32llllj() +{ + // pci_write_u32(long, long, long, long, unsigned int) + PUSH_SYSV_REGS + GET_SYSV_ARGS + PCIWriteU32(p0, p1, p2, p3, p4); + POP_SYSV_REGS +} diff --git a/System/Jakt/Time.HC b/System/Jakt/Time.HC new file mode 100644 index 0000000..f6f3f31 --- /dev/null +++ b/System/Jakt/Time.HC @@ -0,0 +1,37 @@ +U0 _Z9time_busyl() +{ + // time_busy(long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + Busy(p0); + POP_SYSV_REGS +} + +I64 @time_jiffies() { return cnts.jiffies; } + +U0 _Z12time_jiffiesv() +{ + // time_jiffies() + PUSH_SYSV_REGS + GET_SYSV_ARGS + @time_jiffies; + POP_SYSV_REGS +} + +U0 _Z8time_nowv() +{ + // time_now() + PUSH_SYSV_REGS + GET_SYSV_ARGS + Now; + POP_SYSV_REGS +} + +U0 _Z10time_sleepl() +{ + // time_sleep(long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + Sleep(p0); + POP_SYSV_REGS +} \ No newline at end of file diff --git a/System/Jakt/Window.HC b/System/Jakt/Window.HC new file mode 100644 index 0000000..7e91097 --- /dev/null +++ b/System/Jakt/Window.HC @@ -0,0 +1,94 @@ +U0 @window_draw_it(CTask* task, CDC* dc) +{ + if (task->user_data) + @dc_copy(dc, task->pix_left, task->pix_top, task->user_data); +} + +CTask* @window_user() +{ + CTask* task = Spawn(&UserCmdLine, , , 0); + TaskWait(task); + XTalk(task, + "while (1) { StrCpy(Fs->task_title, Fs->task_name); Sleep(1); };\n"); + return task; +} + +CTask* @window_create() +{ + CTask* task = @window_user; + task->draw_it = &@window_draw_it; + return task; +} + +U0 _Z13window_createv() +{ + // window_create() + PUSH_SYSV_REGS + GET_SYSV_ARGS + @window_create(); + POP_SYSV_REGS +} + +U0 _Z14window_destroym() +{ + // window_destroy(unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + Kill(p0); + POP_SYSV_REGS +} + +Bool @window_is_focused(CTask* task) { return task == sys_focus_task; } + +U0 _Z17window_is_focusedm() +{ + // window_is_focused(unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @window_is_focused(p0); + POP_SYSV_REGS +} + +U0 @window_set_coordinates(CTask* task, I64 top, I64 left, I64 bottom, + I64 right) +{ + task->win_top = top; + task->win_left = left; + task->win_bottom = bottom; + task->win_right = right; +} + +U0 _Z22window_set_coordinatesmllll() +{ + // window_set_coordinates(unsigned long, long, long, long, long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @window_set_coordinates(p0, p1, p2, p3, p4); + POP_SYSV_REGS +} + +U0 @window_set_context(CTask* task, CDC* dc) { task->user_data = dc; } + +U0 _Z18window_set_contextmm() +{ + // window_set_context(unsigned long, unsigned long) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @window_set_context(p0, p1); + POP_SYSV_REGS +} + +U0 @window_set_title(CTask* task, U8* title) +{ + StrCpy(task->task_name, title); + StrCpy(task->task_title, title); +} + +U0 _Z16window_set_titlemPKc() +{ + // window_set_title(unsigned long, char const*) + PUSH_SYSV_REGS + GET_SYSV_ARGS + @window_set_title(p0, p1); + POP_SYSV_REGS +} diff --git a/System/Libraries/Animation2D.HC b/System/Libraries/Animation2D.HC new file mode 100644 index 0000000..9e2b0e6 --- /dev/null +++ b/System/Libraries/Animation2D.HC @@ -0,0 +1,65 @@ +class AnimationContext2D { + U64 signature; + I64 duration; // in jiffies + I64 index; // current frame + I64 length; // length in frames + I64 timer; // timer + cnts.jiffies = current ticks + Context2D** frame; // Context2D*, ... +}; + +AnimationContext2D* @animation2d_new_from_frames(Context2D** frames, I64 length, + I64 duration = 250) +{ + if (!frames || !length) + return NULL; + AnimationContext2D* actx = CAlloc(sizeof(AnimationContext2D)); + actx->signature = 'animated'; + actx->frame = frames; + actx->length = length; + actx->duration = duration; + return actx; +} + +Context2D* @animation2d_frame(AnimationContext2D* actx) +{ + I64 ticks = cnts.jiffies; + if (!actx) + return NULL; + if (!actx->length) + return NULL; + if (actx->index > actx->length - 1) + actx->index = 0; + if (!actx->index && !actx->timer) + actx->timer = ticks; + while (ticks >= actx->timer + actx->duration) { + actx->timer += actx->duration; + actx->index++; + if (actx->index > actx->length - 1) + actx->index = 0; + } + return actx->frame[actx->index]; +} + +Bool @animation2d_is_animation(AnimationContext2D* actx) +{ + return T(actx->signature == 'animated', TRUE, FALSE); +} + +U0 @animation2d_reset(AnimationContext2D* actx) { actx->index = 0; } + +class @animation2d +{ + Context2D* (*Frame)(AnimationContext2D* actx); + U0 (*Reset)(AnimationContext2D* actx); + Bool (*IsAnimation)(AnimationContext2D* actx); + AnimationContext2D* (*NewFromFrames)(Context2D** frames, I64 length, + I64 duration = 250); +}; + +@animation2d Animation2D; +Animation2D.IsAnimation = &@animation2d_is_animation; +Animation2D.NewFromFrames = &@animation2d_new_from_frames; +Animation2D.Frame = &@animation2d_frame; +Animation2D.Reset = &@animation2d_reset; + +"animation2d "; diff --git a/System/Libraries/Audio.HC b/System/Libraries/Audio.HC new file mode 100644 index 0000000..938f7ae --- /dev/null +++ b/System/Libraries/Audio.HC @@ -0,0 +1,143 @@ +// WAV header spec information: +// https://web.archive.org/web/20140327141505/https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ +// http://www.topherlee.com/software/pcm-tut-wavformat.html + +class @sound_file_wav_header +{ + // RIFF Header + U8 riff_header[4]; // Contains "RIFF" + I32 wav_size; // Size of the wav portion of the file, which follows the first + // 8 bytes. File size - 8 + U8 wave_header[4]; // Contains "WAVE" + + // Format Header + U8 fmt_header[4]; // Contains "fmt " (includes trailing space) + I32 fmt_chunk_size; // Should be 16 for PCM + I16 audio_format; // Should be 1 for PCM. 3 for IEEE Float + I16 num_channels; + I32 sample_rate; + I32 byte_rate; // Number of bytes per second. sample_rate * num_channels * + // Bytes Per Sample + I16 sample_alignment; // num_channels * Bytes Per Sample + I16 bit_depth; // Number of bits per sample + + // Data + U8 data_header[4]; // Contains "data" + I32 data_bytes; // Number of bytes in data. Number of samples * num_channels * + // sample byte size + U8 bytes[0]; // Remainder of wave file is bytes +}; + +I64 @audio_get_available_output_stream() +{ + I64 stream = 0; + while (FifoI64Cnt(Audio.output[stream].data)) + stream++; + if (stream > AUDIO_MAX_STREAMS - 1) + return -1; + return stream; +} + +Bool @audio_buffer_is_wav(@sound_file_wav_header* wav, I64 size) +{ + if (!MemCmp(&wav->riff_header, "RIFF", 4) && !MemCmp(&wav->wave_header, "WAVE", 4)) + return TRUE; + return FALSE; +} + +U0 @audio_free_sound(Sound* snd) +{ + if (!snd) + return; + if (snd->data) + Free(snd->data); + Free(snd); +} + +I64 @audio_play_sound(Sound* snd) +{ + I64 i; + I64 stream = @audio_get_available_output_stream; + if (stream < 0) + return stream; + if (!snd->data || !snd->length) + return stream; + for (i = 0; i < snd->length; i++) + FifoI64Ins(Audio.output[stream].data, snd->data[i]); + return stream; +} + +Sound* @audio_sound_from_buffer(U32* buf, I64 length) +{ + if (!buf || !length) + return NULL; + Sound* snd = CAlloc(sizeof(Sound)); + snd->rate = 44100; + snd->channels = 2; + snd->bits = 16; + snd->data = buf; + snd->length = length; + return snd; +} + +U32* @audio_buffer_mono_to_stereo(U16* buf, I64 size) +{ + U32* out = CAlloc(size * 2); + I64 i; + for (i = 0; i < size / 2; i++) { + out[i].u16[0] = buf[i]; + out[i].u16[1] = buf[i]; + } + return out; +} + +U32* @audio_buffer_copy(U32* buf, I64 size) +{ + U32* out = MAlloc(size); + MemCpyU32(out, buf, size / 4); + return out; +} + +Sound* @audio_sound_from_file(U8* filename) +{ + if (!FileSystem.PathExists(filename)) + return NULL; + I64 length = 0; + U32* buf = NULL; + I64 size = 0; + U8* data = FileSystem.ReadFile(filename, &size); + if (!data) + return NULL; + if (@audio_buffer_is_wav(data, size)) { + @sound_file_wav_header* wav = data; + if (wav->fmt_chunk_size == 16 && wav->audio_format == 1 && wav->sample_rate == 48000) { + switch (wav->num_channels) { + case 1: + buf = @audio_buffer_mono_to_stereo(&wav->bytes, wav->data_bytes); + length = wav->data_bytes / 2; + break; + case 2: + buf = @audio_buffer_copy(&wav->bytes, wav->data_bytes); + length = wav->data_bytes / 4; + break; + } + } + } + Free(data); + return @audio_sound_from_buffer(buf, length); +} + +U0 @audio_snd(I8 ona = 0) { Audio.wavegen.frequency = Ona2Freq(ona); } + +Audio.SoundFromFile = &@audio_sound_from_file; +Audio.FreeSound = &@audio_free_sound; +Audio.PlaySound = &@audio_play_sound; + +Sound* @snd_beep = Audio.SoundFromFile("/mnt/redsea/t/Media/Sounds/Beep.wav"); + +U0 @audio_beep() { Audio.PlaySound(@snd_beep); } + +Audio.Beep = &@audio_beep; +Function.Patch(&Snd, &@audio_snd); + +"audio "; \ No newline at end of file diff --git a/System/Libraries/Base64.HC b/System/Libraries/Base64.HC new file mode 100644 index 0000000..e737197 --- /dev/null +++ b/System/Libraries/Base64.HC @@ -0,0 +1,90 @@ + +U8* @base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +U8* @base64_decode(U8* input, I64* output_length) +{ + I64 input_length = StrLen(input); + if (input_length % 4 != 0) { + return NULL; // Invalid Base64 input length + } + + // Calculate the expected output length + *output_length = (3 * input_length) / 4; + if (input[input_length - 1] == '=') { + (*output_length)--; + } + if (input[input_length - 2] == '=') { + (*output_length)--; + } + + // Allocate memory for the decoded data + U8* decoded_data = CAlloc(*output_length, erythros_mem_task); + if (decoded_data == NULL) { + return NULL; // Memory allocation failed + } + + // Initialize variables for decoding process + I32 i, j = 0; + U32 sextet_bits = 0; + I64 sextet_count = 0; + U32 base64_value; + U8* char_pointer; + U8 input_find_buf[2]; + input_find_buf[1] = NULL; + + // Loop through the Base64 input and decode it + for (i = 0; i < input_length; i++) { + // Convert Base64 character to a 6-bit value + base64_value = 0; + if (input[i] == '=') { + base64_value = 0; + } else { + input_find_buf[0] = input[i]; + char_pointer = StrFirstOcc(@base64_chars, input_find_buf); + if (char_pointer == NULL) { + Free(decoded_data); + return NULL; // Invalid Base64 character + } + base64_value = char_pointer - @base64_chars; + } + + // Combine 6-bit values into a 24-bit sextet + sextet_bits = (sextet_bits << 6) | base64_value; + sextet_count++; + + // When a sextet is complete, decode it into three bytes + if (sextet_count == 4) { + decoded_data[j++] = (sextet_bits >> 16) & 0xFF; + decoded_data[j++] = (sextet_bits >> 8) & 0xFF; + decoded_data[j++] = sextet_bits & 0xFF; + sextet_bits = 0; + sextet_count = 0; + } + } + + return decoded_data; +} + +U8* @base64_encode(U8* input, I64 input_length) +{ + I64 i; + U8 buf[3]; + I64 c = 0; + U8* output = CAlloc(input_length * 2, erythros_mem_task); + + for (i = 0; i < input_length; i += 3) { + buf[0] = input[i]; + buf[1] = @t((i + 1 < input_length), input[i + 1], 0); + buf[2] = @t((i + 2 < input_length), input[i + 2], 0); + + output[c++] = @base64_chars[(buf[0] & 0xfc) >> 2]; + output[c++] = @base64_chars[((buf[0] & 0x03) << 4) + ((buf[1] & 0xf0) >> 4)]; + output[c++] = @t((i + 1 < input_length), @base64_chars[((buf[1] & 0x0f) << 2) + ((buf[2] & 0xc0) >> 6)], '='); + output[c++] = @t((i + 2 < input_length), @base64_chars[buf[2] & 0x3f], '='); + } + + output[c] = '\0'; + return output; +} + +"base64 "; diff --git a/System/Libraries/BitmapFont.HC b/System/Libraries/BitmapFont.HC new file mode 100644 index 0000000..35d8b68 --- /dev/null +++ b/System/Libraries/BitmapFont.HC @@ -0,0 +1,146 @@ +extern class Context2D; +extern U32 Color(I64 r, I64 g, I64 b, I64 a = 255); +extern U32 Peek2D(Context2D* ctx, I64 x, I64 y); + +class BitmapFont { + U8* name; + U8* char_map; + I64 line_height; + U16 bitmap[4096]; +}; + +class @bitmap_font_list +{ + @bitmap_font_list* prev; + @bitmap_font_list* next; + BitmapFont* font; +}; + +class @bitmapfont +{ + @bitmap_font_list* fonts; + U0 (*Add)(BitmapFont* font); + BitmapFont* (*GetByName)(U8* name); + U0 (*Init)(); +}; + +// BitmapFont* @bitmapfont_new_from_bdf_data(Context2D* ctx, U8* bdf_data) +//{ +// BitmapFont* font = CAlloc(sizeof(BitmapFont)); +// +// I64 bdf_lines_max = 0; +// U8** bdf_lines = String.Split(bdf_data, , &bdf_lines_max); +// +// I64 char_pos = 0; +// I64 char_x_pos = 0; +// I64 i, w; +// I64 xx, yy; +// /* +// while (*char_map++) { +// // Clear character bitmap +// for (i = 0; i < 16; i++) { +// font->bitmap[(char_pos * 16) + i] = 0; +// } +// // Get character width +// w = 0; +// for (xx = 0; xx < 16; xx++) { +// if (Peek2D(ctx, char_x_pos + xx, 0) == Color(255, 0, 0)) { +// w = xx; +// break; +// } +// } +// // Extract bitmap +// for (yy = 0; yy < 16; yy++) { +// for (xx = 0; xx < w + 1; xx++) { +// if (Peek2D(ctx, char_x_pos + xx, yy) == Color(0, 0, 0)) { +// font->bitmap[(char_pos * 16) + yy] |= 0x8000 >> xx; +// } +// } +// //"%016b\n", font->bitmap[(char_pos * 16) + yy]; +// } +// char_pos++; +// char_x_pos += w + 1; +// } +// */ +// return font; +// } + +BitmapFont* @bitmapfont_new_from_context2d(Context2D* ctx, U8* name, + U8* char_map, I64 fixed_width = 0) +{ + BitmapFont* font = CAlloc(sizeof(BitmapFont)); + font->name = StrNew(name); + font->char_map = StrNew(char_map); + + I64 char_pos = 0; + I64 char_x_pos = 0; + I64 i, w; + I64 xx, yy; + while (*char_map++) { + // Clear character bitmap + for (i = 0; i < 16; i++) { + font->bitmap[(char_pos * 16) + i] = 0; + } + w = fixed_width; + if (!w) { + // Get character width + for (xx = 0; xx < 16; xx++) { + if (Peek2D(ctx, char_x_pos + xx, 0) == Color(255, 0, 0)) { + w = xx; + break; + } + } + } + // Extract bitmap + for (yy = 0; yy < 16; yy++) { + for (xx = 0; xx < w + 1; xx++) { + if (Peek2D(ctx, char_x_pos + xx, yy) == Color(0, 0, 0)) { + font->bitmap[(char_pos * 16) + yy] |= 0x8000 >> xx; + } + } + //"%016b\n", font->bitmap[(char_pos * 16) + yy]; + } + char_pos++; + char_x_pos += w + 1; + } + return font; +} + +@bitmapfont BitmapFonts; + +U0 @bitmap_fonts_add(BitmapFont* font) +{ + @bitmap_font_list* fonts = BitmapFonts.fonts; + while (fonts->next) { + fonts = fonts->next; + } + @bitmap_font_list* font_list_item = CAlloc(sizeof(@bitmap_font_list)); + font_list_item->prev = fonts; + font_list_item->font = font; + fonts->next = font_list_item; +} + +BitmapFont* @bitmap_fonts_get_by_name(U8* name) +{ + @bitmap_font_list* fonts = BitmapFonts.fonts; + while (fonts) { + if (fonts->font) { + if (!StrCmp(fonts->font->name, name)) + return fonts->font; + } + fonts = fonts->next; + } + return NULL; +} + +U0 @bitmap_fonts_init() +{ + BitmapFonts.fonts = CAlloc(sizeof(@bitmap_font_list)); +} + +BitmapFonts.Add = &@bitmap_fonts_add; +BitmapFonts.GetByName = &@bitmap_fonts_get_by_name; +BitmapFonts.Init = &@bitmap_fonts_init; +BitmapFonts.Init(); + +"bitmapfont "; \ No newline at end of file diff --git a/System/Libraries/Clipboard.HC b/System/Libraries/Clipboard.HC new file mode 100644 index 0000000..c920a83 --- /dev/null +++ b/System/Libraries/Clipboard.HC @@ -0,0 +1,125 @@ +#define CLIP_MSG_NULL 0 +#define CLIP_MSG_INSERT 1 +#define CLIP_MSG_REMOVE 2 + +#define CLIP_TYPE_NULL 0 +#define CLIP_TYPE_TEXT 1 +#define CLIP_TYPE_DATA 2 + +class @clipboard_item +{ + I64 length; + I64 type; +}; + +class ClipboardTextItem : @clipboard_item { + U8* text; +} + +class ClipboardDataItem : @clipboard_item { + U8* data; +} + +class @clipboard_list_item +{ + @clipboard_list_item* prev; + @clipboard_list_item* next; + @clipboard_item* item; +}; + +class @clipboard +{ + CTask* task; + I64 length; + @clipboard_list_item* items; + U0 (*Init)(); + U0 (*Insert)(I64 type, U8* data); + I64 (*Length)(); + U0(*Task) + (); +}; + +@clipboard Clipboard; + +U0 @clipboard_add(@clipboard_item* item) +{ + @clipboard_list_item* items = Clipboard.items; + while (items->next) { + items = items->next; + } + @clipboard_list_item* new_item = CAlloc(sizeof(@clipboard_list_item)); + new_item->prev = items; + new_item->item = item; + items->next = new_item; + Clipboard.length++; + Clipboard.items->prev = new_item; +} + +U0 @clipboard_init() { Clipboard.items = CAlloc(sizeof(@clipboard_list_item)); } + +I64 @clipboard_length() { return Clipboard.length; } + +U0 @clipboard_ipc_queue_process() +{ + IpcMessage* msg; + msg = Ipc.MsgRecv(); + if (msg) { + switch (msg->type) { + case CLIP_MSG_INSERT: + @clipboard_add(msg->payload); + break; + case CLIP_MSG_REMOVE: + // FIXME: Handle this + break; + default: + break; + } + Free(msg); + } +} + +U0 @clipboard_insert_text(U8* text) +{ + IpcMessage* msg = CAlloc(sizeof(IpcMessage)); + ClipboardTextItem* item = CAlloc(sizeof(ClipboardTextItem)); + item->length = StrLen(text); + item->type = CLIP_TYPE_TEXT; + item->text = text; + msg->client = NULL; // FIXME: Do we care about client here? :/ + msg->type = CLIP_MSG_INSERT; + msg->payload = item; + System.Log(Fs, "Sent message → ClipInsert -> \"%s\"", text); + Ipc.MsgSend(Clipboard.task, msg); +} + +U0 @clipboard_insert(I64 type, U8* data) +{ + switch (type) { + case CLIP_TYPE_TEXT: + @clipboard_insert_text(data); + break; + case CLIP_TYPE_DATA: + // Reserved + break; + default: + break; + } +} + +U0 @clipboard_task() +{ + Ipc.InitQueue(Fs); + Clipboard.task = Fs; + System.Log(Fs, "Task running at 0x%08x", Fs); + while (1) { + @clipboard_ipc_queue_process(); + Sleep(1); + } +} + +Clipboard.Init = &@clipboard_init; +Clipboard.Insert = &@clipboard_insert; +Clipboard.Length = &@clipboard_length; +Clipboard.Task = &@clipboard_task; + +"clipboard "; diff --git a/System/Libraries/Display.HC b/System/Libraries/Display.HC new file mode 100644 index 0000000..df09f3b --- /dev/null +++ b/System/Libraries/Display.HC @@ -0,0 +1,49 @@ +Silent(ON); + +#define FB_NONE 0x00 +#define FB_VMSVGA 0x01 + +I64 @display_init(I64 width, I64 height, I64 bpp, I64 driver) +{ + I64 err; + Display.width = width; + Display.height = height; + Display.bpp = bpp; + Display.driver = driver; + Display.fb = NULL; + switch (Display.driver) { + case FB_VMSVGA: + err = VMSVGA.Init(Display.width, Display.height, Display.bpp); + if (err) + return err; + Display.fb = VMSVGA.FrameBuffer(); + Display.Update = &@vmsvga_display_update; + break; + default: + //"Unsupported display driver\n"; + return -1; + break; + } + text.cols = Display.width / 8; + text.rows = Display.height / 16; + text.raw_col = 0; + return 0; +} + +I64 @display_get_width() { return Display.width; } + +I64 @display_get_height() { return Display.height; } + +I64 @display_get_bpp() { return Display.bpp; } + +I64 @display_get_driver() { return Display.driver; } + +Display.Init = &@display_init; +Display.Width = &@display_get_width; +Display.Height = &@display_get_height; +Display.Bpp = &@display_get_bpp; +Display.Driver = &@display_get_driver; + +Silent(OFF); + +"display "; diff --git a/System/Libraries/FileSystem.HC b/System/Libraries/FileSystem.HC new file mode 100644 index 0000000..d35a1f7 --- /dev/null +++ b/System/Libraries/FileSystem.HC @@ -0,0 +1,234 @@ +#define FS_TYPE_UNSUPPORTED -1 +#define FS_TYPE_SYSTEM 0 +#define FS_TYPE_REDSEA 1 +#define FS_TYPE_9P 2 + +#define DE_TYPE_FILE 0 +#define DE_TYPE_DIR 1 + +class @dir_entry +{ + U8 mode; + U8 type; + U32 atime; + U32 mtime; + U64 size; + U8 name[255]; + U8 uid[255]; + U8 gid[255]; + @dir_entry* next; +}; + +extern Bool @plan9fs_file_find(U8* path); +extern @dir_entry* @plan9fs_get_files(U8* path); +extern U8* @plan9fs_read_file(U8* path, I64* size); +extern I64 @plan9fs_write_file(U8* path, U64 buffer, I64 size); + +class @filesystem +{ + I64 root_fs_type; + @dir_entry (*GetFiles)(U8* path); + U8* (*GetFileExtension)(U8* path); + U0 (*Init)(); + Bool (*PathExists)(U8* path); + U8* (*ReadFile)(U8* path, I64* size); + I64* (*WriteFile)(U8* path, U64 buffer, I64 size); +}; + +@filesystem FileSystem; + +U8* @filesystem_resolve_path(U8* path) +{ + U8* abs_path = CAlloc(StrLen(path)); + I64 argc; + I64 i; + I64 pos = 0; + U8** argv; + U8** outv; + U8* path_cpy = StrNew(path); + argv = String.Split(path_cpy, '/', &argc); + outv = CAlloc(sizeof(U64) * argc); + + for (i = 0; i < argc; i++) { + if (!(!StrCmp(argv[i], ".") || !StrCmp(argv[i], "") || !StrCmp(argv[i], ".."))) { + outv[pos] = argv[i]; + pos++; + } + if (!StrCmp(argv[i], "..")) { + pos = Max(0, pos - 1); + } + } + for (i = 0; i < pos; i++) + String.Append(abs_path, "/%s", outv[i]); + Free(path_cpy); + Free(outv); + if (abs_path[StrLen(abs_path) - 1] == '/') + abs_path[StrLen(abs_path) - 1] = NULL; + if (!StrLen(abs_path)) + StrCpy(abs_path, "/"); + return abs_path; +} + +I64 @filesystem_get_type(U8* path) +{ + if (!MemCmp(path, "/mnt/redsea/", 12) && StrLen(path) > 12) + return FS_TYPE_REDSEA; + if (!MemCmp(path, "/sys/", 5)) + return FS_TYPE_SYSTEM; + return FileSystem.root_fs_type; +} + +@dir_entry* @filesystem_get_files_9p(U8* path) +{ + return @plan9fs_get_files(path); +} + +@dir_entry* @filesystem_get_files_redsea(U8* path) +{ + CDirEntry* de = FilesFind(path); + CDirEntry* tmpde = NULL; + @dir_entry* entries = NULL; + @dir_entry* entry = NULL; + @dir_entry* new = NULL; + if (de) { + entries = CAlloc(sizeof(@dir_entry)); + entry = entries; + tmpde = de; + while (tmpde) { + new = CAlloc(sizeof(@dir_entry)); + entry->next = new; + + StrCpy(&new->name, &tmpde->name); + StrCpy(&new->uid, + "templeos"); // No file ownership in TempleOS + StrCpy(&new->gid, + "templeos"); // No file ownership in TempleOS + new->size = tmpde->size; + new->type = T(IsDir(tmpde->full_name), 1, 0); + + entry = new; + tmpde = tmpde->next; + } + DirTreeDel(de); + return entries; + } + return NULL; +} + +@dir_entry* @filesystem_get_files(U8* path) +{ + if (!path) + return NULL; + U8 buf[512]; + I64 type = @filesystem_get_type(path); + switch (type) { + case FS_TYPE_SYSTEM: + SysHlt; + break; + case FS_TYPE_REDSEA: + StrPrint(&buf, "%c:%s", ToUpper(path[12]), path + 13); + if (buf[StrLen(&buf) - 1] == ':') + buf[StrLen(&buf)] = '/'; + if (buf[StrLen(&buf) - 1] == '/') + buf[StrLen(&buf)] = '.'; + return @filesystem_get_files_redsea(&buf); + break; + case FS_TYPE_9P: + return @filesystem_get_files_9p(path); + break; + default: + break; + } + return NULL; +} + +U8* @filesystem_get_file_extension(U8* path) +{ + return (StrLastOcc(path, ".") + 1); +} + +Bool @filesystem_path_exists(U8* opath) +{ + if (!opath) + return FALSE; + U8 buf[512]; + U8* path = @filesystem_resolve_path(opath); + I64 type = @filesystem_get_type(path); + switch (type) { + case FS_TYPE_SYSTEM: + return NULL; + SysHlt; + break; + case FS_TYPE_REDSEA: + StrPrint(&buf, "%c:%s", ToUpper(path[12]), path + 13); + if (buf[StrLen(&buf) - 1] == ':') + buf[StrLen(&buf)] = '/'; + if (buf[StrLen(&buf) - 1] == '/') + buf[StrLen(&buf)] = '.'; + Free(path); + return FileFind(&buf); + break; + case FS_TYPE_9P: + return NULL; + Free(path); + return @plan9fs_file_find(path); + break; + default: + break; + } + return NULL; +} + +U8* @filesystem_read_file(U8* path, I64* size) +{ + if (!path) + return FALSE; + U8 buf[512]; + I64 type = @filesystem_get_type(path); + switch (type) { + case FS_TYPE_SYSTEM: + SysHlt; + break; + case FS_TYPE_REDSEA: + StrPrint(&buf, "%c:%s", ToUpper(path[12]), path + 13); + return FileRead(&buf, size); + break; + case FS_TYPE_9P: + return @plan9fs_read_file(path, size); + break; + default: + break; + } + return NULL; +} + +I64 @filesystem_write_file(U8* path, U8* buffer, I64 size) +{ + if (!path || !buffer || !size) + return FALSE; + U8 buf[512]; + I64 type = @filesystem_get_type(path); + switch (type) { + case FS_TYPE_SYSTEM: + SysHlt; + break; + case FS_TYPE_REDSEA: + StrPrint(&buf, "%c:%s", ToUpper(path[12]), path + 13); + return FileWrite(&buf, buffer, size); + break; + case FS_TYPE_9P: + return @plan9fs_write_file(path, buffer, size); + break; + default: + break; + } + return NULL; +} + +FileSystem.GetFiles = &@filesystem_get_files; +FileSystem.GetFileExtension = &@filesystem_get_file_extension; +FileSystem.PathExists = &@filesystem_path_exists; +FileSystem.ReadFile = &@filesystem_read_file; +FileSystem.WriteFile = &@filesystem_write_file; + +"filesystem "; \ No newline at end of file diff --git a/System/Libraries/Function.HC b/System/Libraries/Function.HC new file mode 100644 index 0000000..d66c443 --- /dev/null +++ b/System/Libraries/Function.HC @@ -0,0 +1,28 @@ +U0 @function_insert_call(U32 from, U32 to) +{ + *(from(U8*)) = 0xE8; + *((from + 1)(I32*)) = to - from - 5; +} + +U0 @function_patch(U32 from, U32 to) +{ + *(from(U8*)) = 0xE9; + *((from + 1)(I32*)) = to - from - 5; +} + +class @function +{ + U0(*InsertCall) + (U32 from, U32 to); + U0(*Patch) + (U32 from, U32 to); +}; + +@function Function; +Function.InsertCall = &@function_insert_call; +Function.Patch = &@function_patch; + +// usage: Function.InsertCall(addr, &func); +// usage: Function.Patch(&old_func, &new_func); + +"function "; \ No newline at end of file diff --git a/System/Libraries/Graphics2D.HC b/System/Libraries/Graphics2D.HC new file mode 100644 index 0000000..82aa7d0 --- /dev/null +++ b/System/Libraries/Graphics2D.HC @@ -0,0 +1,1428 @@ +class Context2D { + I64 width; + I64 height; + I64 bpp; + U32* fb; +}; + +class Bounds2D { + I64 x1; + I64 y1; + I64 x2; + I64 y2; +}; + +U32 Color(I64 r, I64 g, I64 b, I64 a = 255) +{ + U32 c; + c.u8[0] = b; + c.u8[1] = g; + c.u8[2] = r; + c.u8[3] = a; + return c; +} + +U32 ColorHSVToRGB(I64 hue, I64 saturation, I64 value) +{ + if (!(0 <= hue < 360)) + hue = 0; + if (!(0 <= saturation <= 100)) + saturation = 100; + if (!(0 <= value <= 100)) + value = 100; + + F64 s = saturation / 100.0; + F64 v = value / 100.0; + + F64 c = v * s; + F64 x = c * (1 - Abs(((hue / 60.0) % 2) - 1)); + F64 m = v - c; + + F64 r, g, b; + switch (hue) { + case 0...59: + r = c; + g = x; + b = 0; + break; + case 60...119: + r = x; + g = c; + b = 0; + break; + case 120...179: + r = 0; + g = c; + b = x; + break; + case 180...239: + r = 0; + g = x; + b = c; + break; + case 240...299: + r = x; + g = 0; + b = c; + break; + case 300...359: + r = c; + g = 0; + b = x; + break; + } + + return Color(ToI64((r + m) * 255), ToI64((g + m) * 255), ToI64((b + m) * 255)); +} + +U0 ColorRGBToHSV(U32 color, I64* hue, I64* saturation, I64* value) +{ + if (!hue || !saturation || !value) + return; + + F64 r = color.u8[2] / 255.0; + F64 g = color.u8[1] / 255.0; + F64 b = color.u8[0] / 255.0; + + F64 cMax = Max(r, Max(g, b)); + F64 cMin = Min(r, Min(g, b)); + + F64 delta = cMax - cMin; + + if (delta == 0) + *hue = 0; + else if (cMax == r) + *hue = 60 * (((g - b) / delta) % 6); + else if (cMax == g) + *hue = 60 * (((b - r) / delta) + 2); + else + *hue = 60 * (((r - g) / delta) + 4); + + if (cMax != 0) + *saturation = (delta / cMax) * 100; + else + *saturation = 0; + *value = cMax * 100; +} + +/* + * ISO Latin-1 Font + * + * Copyright (c) 2000 + * Ka-Ping Yee <ping@lfw.org> + * + * This font may be freely used for any purpose. + */ + +/* + * adjusted 'A' 'V' to improve their dense appearance (ie. lightened) + * adjusted 'i' 'l' to improve their flow within a word (ie. widened) + * adjusted 'E' 'F' '#' + */ + +U8 console_font[256 * 16] = { + /* 0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 1 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 2 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 3 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 4 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 5 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 6 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 8 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 9 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 10 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 11 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 12 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 13 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 14 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 15 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 16 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 17 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 18 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 19 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 21 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 22 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 23 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 24 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 25 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 26 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 28 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 29 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 30 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 31 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 32 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 33 */ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + /* 34 */ 0x00, 0x00, 0x6c, 0x6c, 0x36, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 35 */ 0x00, 0x00, 0x00, 0x36, 0x36, 0x7f, 0x36, 0x36, + 0x7f, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 36 */ 0x00, 0x08, 0x08, 0x3e, 0x6b, 0x0b, 0x0b, 0x3e, + 0x68, 0x68, 0x6b, 0x3e, 0x08, 0x08, 0x00, 0x00, + /* 37 */ 0x00, 0x00, 0x00, 0x33, 0x13, 0x18, 0x08, 0x0c, + 0x04, 0x06, 0x32, 0x33, 0x00, 0x00, 0x00, 0x00, + /* 38 */ 0x00, 0x00, 0x1c, 0x36, 0x36, 0x1c, 0x6c, 0x3e, + 0x33, 0x33, 0x7b, 0xce, 0x00, 0x00, 0x00, 0x00, + /* 39 */ 0x00, 0x00, 0x18, 0x18, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 40 */ 0x00, 0x00, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, + /* 41 */ 0x00, 0x00, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x18, 0x18, 0x0c, 0x00, 0x00, 0x00, + /* 42 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x1c, 0x7f, + 0x1c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 43 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, + 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 44 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x0c, 0x00, 0x00, 0x00, + /* 45 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 46 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + /* 47 */ 0x00, 0x00, 0x60, 0x20, 0x30, 0x10, 0x18, 0x08, + 0x0c, 0x04, 0x06, 0x02, 0x03, 0x00, 0x00, 0x00, + /* 48 */ 0x00, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x6b, 0x6b, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 49 */ 0x00, 0x00, 0x18, 0x1e, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + /* 50 */ 0x00, 0x00, 0x3e, 0x63, 0x60, 0x60, 0x30, 0x18, + 0x0c, 0x06, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x00, + /* 51 */ 0x00, 0x00, 0x3e, 0x63, 0x60, 0x60, 0x3c, 0x60, + 0x60, 0x60, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 52 */ 0x00, 0x00, 0x30, 0x38, 0x3c, 0x36, 0x33, 0x7f, + 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, + /* 53 */ 0x00, 0x00, 0x7f, 0x03, 0x03, 0x3f, 0x60, 0x60, + 0x60, 0x60, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 54 */ 0x00, 0x00, 0x3c, 0x06, 0x03, 0x03, 0x3f, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 55 */ 0x00, 0x00, 0x7f, 0x60, 0x30, 0x30, 0x18, 0x18, + 0x18, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, + /* 56 */ 0x00, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x3e, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 57 */ 0x00, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x7e, 0x60, + 0x60, 0x60, 0x30, 0x1e, 0x00, 0x00, 0x00, 0x00, + /* 58 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + /* 59 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x0c, 0x00, 0x00, 0x00, + /* 60 */ 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x06, + 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, + /* 61 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, + 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 62 */ 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x60, + 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00, + /* 63 */ 0x00, 0x00, 0x3e, 0x63, 0x60, 0x30, 0x30, 0x18, + 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + /* 64 */ 0x00, 0x00, 0x3c, 0x66, 0x73, 0x7b, 0x6b, 0x6b, + 0x7b, 0x33, 0x06, 0x3c, 0x00, 0x00, 0x00, 0x00, + /* 65 */ 0x00, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x63, + 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 66 */ 0x00, 0x00, 0x3f, 0x63, 0x63, 0x63, 0x3f, 0x63, + 0x63, 0x63, 0x63, 0x3f, 0x00, 0x00, 0x00, 0x00, + /* 67 */ 0x00, 0x00, 0x3c, 0x66, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, + /* 68 */ 0x00, 0x00, 0x1f, 0x33, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x33, 0x1f, 0x00, 0x00, 0x00, 0x00, + /* 69 */ 0x00, 0x00, 0x7f, 0x03, 0x03, 0x03, 0x3f, 0x03, + 0x03, 0x03, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x00, + /* 70 */ 0x00, 0x00, 0x7f, 0x03, 0x03, 0x03, 0x3f, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, + /* 71 */ 0x00, 0x00, 0x3c, 0x66, 0x03, 0x03, 0x03, 0x73, + 0x63, 0x63, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00, + /* 72 */ 0x00, 0x00, 0x63, 0x63, 0x63, 0x63, 0x7f, 0x63, + 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 73 */ 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + /* 74 */ 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x00, + /* 75 */ 0x00, 0x00, 0x63, 0x33, 0x1b, 0x0f, 0x07, 0x07, + 0x0f, 0x1b, 0x33, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 76 */ 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x00, + /* 77 */ 0x00, 0x00, 0x63, 0x63, 0x77, 0x7f, 0x7f, 0x6b, + 0x6b, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 78 */ 0x00, 0x00, 0x63, 0x63, 0x67, 0x6f, 0x6f, 0x7b, + 0x7b, 0x73, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 79 */ 0x00, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 80 */ 0x00, 0x00, 0x3f, 0x63, 0x63, 0x63, 0x63, 0x3f, + 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, + /* 81 */ 0x00, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x6f, 0x7b, 0x3e, 0x30, 0x60, 0x00, 0x00, + /* 82 */ 0x00, 0x00, 0x3f, 0x63, 0x63, 0x63, 0x63, 0x3f, + 0x1b, 0x33, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 83 */ 0x00, 0x00, 0x3e, 0x63, 0x03, 0x03, 0x0e, 0x38, + 0x60, 0x60, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 84 */ 0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + /* 85 */ 0x00, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 86 */ 0x00, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x36, + 0x36, 0x1c, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x00, + /* 87 */ 0x00, 0x00, 0x63, 0x63, 0x6b, 0x6b, 0x6b, 0x6b, + 0x7f, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, + /* 88 */ 0x00, 0x00, 0x63, 0x63, 0x36, 0x36, 0x1c, 0x1c, + 0x36, 0x36, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 89 */ 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + /* 90 */ 0x00, 0x00, 0x7f, 0x30, 0x30, 0x18, 0x18, 0x0c, + 0x0c, 0x06, 0x06, 0x7f, 0x00, 0x00, 0x00, 0x00, + /* 91 */ 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00, + /* 92 */ 0x00, 0x00, 0x03, 0x02, 0x06, 0x04, 0x0c, 0x08, + 0x18, 0x10, 0x30, 0x20, 0x60, 0x00, 0x00, 0x00, + /* 93 */ 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00, + /* 94 */ 0x00, 0x08, 0x1c, 0x36, 0x63, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 95 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + /* 96 */ 0x00, 0x00, 0x0c, 0x0c, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 97 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x60, 0x7e, + 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00, 0x00, + /* 98 */ 0x00, 0x00, 0x03, 0x03, 0x03, 0x3b, 0x67, 0x63, + 0x63, 0x63, 0x67, 0x3b, 0x00, 0x00, 0x00, 0x00, + /* 99 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x63, 0x03, + 0x03, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 100 */ 0x00, 0x00, 0x60, 0x60, 0x60, 0x6e, 0x73, 0x63, + 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00, 0x00, + /* 101 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x63, 0x63, + 0x7f, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 102 */ 0x00, 0x00, 0x3c, 0x66, 0x06, 0x1f, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, + /* 103 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x73, 0x63, + 0x63, 0x63, 0x73, 0x6e, 0x60, 0x63, 0x3e, 0x00, + /* 104 */ 0x00, 0x00, 0x03, 0x03, 0x03, 0x3b, 0x67, 0x63, + 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 105 */ 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x38, 0x00, 0x00, 0x00, 0x00, + /* 106 */ 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x1e, 0x00, + /* 107 */ 0x00, 0x00, 0x03, 0x03, 0x03, 0x63, 0x33, 0x1b, + 0x0f, 0x1f, 0x33, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 108 */ 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x38, 0x00, 0x00, 0x00, 0x00, + /* 109 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x6b, 0x6b, + 0x6b, 0x6b, 0x6b, 0x6b, 0x00, 0x00, 0x00, 0x00, + /* 110 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x67, 0x63, + 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 111 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 112 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x67, 0x63, + 0x63, 0x63, 0x67, 0x3b, 0x03, 0x03, 0x03, 0x00, + /* 113 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x73, 0x63, + 0x63, 0x63, 0x73, 0x6e, 0x60, 0xe0, 0x60, 0x00, + /* 114 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x67, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, + /* 115 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x63, 0x0e, + 0x38, 0x60, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 116 */ 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x3e, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x38, 0x00, 0x00, 0x00, 0x00, + /* 117 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00, 0x00, + /* 118 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x36, + 0x36, 0x1c, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x00, + /* 119 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x6b, 0x6b, + 0x6b, 0x3e, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, + /* 120 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x36, 0x1c, + 0x1c, 0x1c, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 121 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x36, + 0x36, 0x1c, 0x1c, 0x0c, 0x0c, 0x06, 0x03, 0x00, + /* 122 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x60, 0x30, + 0x18, 0x0c, 0x06, 0x7f, 0x00, 0x00, 0x00, 0x00, + /* 123 */ 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, + 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, + /* 124 */ 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, + /* 125 */ 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, + 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, + /* 126 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 127 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 128 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 129 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 130 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 131 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 132 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 133 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 134 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 135 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 137 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 138 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 139 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 140 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 141 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 142 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 143 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 144 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 145 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 146 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 147 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 148 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 149 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 150 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 151 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 152 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 153 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 154 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 155 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 156 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 157 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 158 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 159 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 160 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 161 */ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, + /* 162 */ 0x00, 0x00, 0x00, 0x08, 0x08, 0x3e, 0x6b, 0x0b, + 0x0b, 0x0b, 0x6b, 0x3e, 0x08, 0x08, 0x00, 0x00, + /* 163 */ 0x00, 0x00, 0x1c, 0x36, 0x06, 0x06, 0x1f, 0x06, + 0x06, 0x07, 0x6f, 0x3b, 0x00, 0x00, 0x00, 0x00, + /* 164 */ 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0x66, 0x66, + 0x66, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 165 */ 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x7e, + 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + /* 166 */ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + /* 167 */ 0x00, 0x3c, 0x66, 0x0c, 0x1e, 0x33, 0x63, 0x66, + 0x3c, 0x18, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x00, + /* 168 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 169 */ 0x00, 0x00, 0x3c, 0x42, 0x99, 0xa5, 0x85, 0xa5, + 0x99, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 170 */ 0x00, 0x1e, 0x30, 0x3e, 0x33, 0x3b, 0x36, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 171 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x36, 0x1b, + 0x1b, 0x36, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 172 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x60, + 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 173 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 174 */ 0x00, 0x00, 0x3c, 0x42, 0x9d, 0xa5, 0x9d, 0xa5, + 0xa5, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 175 */ 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 176 */ 0x00, 0x00, 0x1c, 0x36, 0x36, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 177 */ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, + 0x18, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 178 */ 0x00, 0x1e, 0x33, 0x18, 0x0c, 0x06, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 179 */ 0x00, 0x1e, 0x33, 0x18, 0x30, 0x33, 0x1e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 180 */ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 181 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x76, 0x6e, 0x06, 0x06, 0x03, 0x00, + /* 182 */ 0x00, 0x00, 0x7e, 0x2f, 0x2f, 0x2f, 0x2e, 0x28, + 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, + /* 183 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 184 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x1e, 0x00, + /* 185 */ 0x00, 0x0c, 0x0e, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 186 */ 0x00, 0x1e, 0x33, 0x33, 0x33, 0x33, 0x1e, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 187 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x36, 0x6c, + 0x6c, 0x36, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 188 */ 0x00, 0x10, 0x1c, 0x18, 0x18, 0x18, 0x00, 0x7f, + 0x00, 0x18, 0x1c, 0x1a, 0x3e, 0x18, 0x00, 0x00, + /* 189 */ 0x00, 0x10, 0x1c, 0x18, 0x18, 0x18, 0x00, 0x7f, + 0x00, 0x1c, 0x36, 0x18, 0x0c, 0x3e, 0x00, 0x00, + /* 190 */ 0x00, 0x1c, 0x36, 0x18, 0x36, 0x1c, 0x00, 0x7f, + 0x00, 0x18, 0x1c, 0x1a, 0x3e, 0x18, 0x00, 0x00, + /* 191 */ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x0c, + 0x0c, 0x06, 0x06, 0x03, 0x63, 0x3e, 0x00, 0x00, + /* 192 */ 0x0c, 0x18, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x63, + 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 193 */ 0x18, 0x0c, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x63, + 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 194 */ 0x08, 0x14, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x63, + 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 195 */ 0x6e, 0x3b, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x63, + 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 196 */ 0x36, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x63, + 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 197 */ 0x1c, 0x36, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x63, + 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 198 */ 0x00, 0x00, 0xfe, 0x33, 0x33, 0x33, 0xff, 0x33, + 0x33, 0x33, 0x33, 0xf3, 0x00, 0x00, 0x00, 0x00, + /* 199 */ 0x00, 0x00, 0x3c, 0x66, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x66, 0x3c, 0x18, 0x30, 0x1e, 0x00, + /* 200 */ 0x0c, 0x18, 0x7f, 0x03, 0x03, 0x03, 0x3f, 0x03, + 0x03, 0x03, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x00, + /* 201 */ 0x18, 0x0c, 0x7f, 0x03, 0x03, 0x03, 0x3f, 0x03, + 0x03, 0x03, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x00, + /* 202 */ 0x08, 0x14, 0x7f, 0x03, 0x03, 0x03, 0x3f, 0x03, + 0x03, 0x03, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x00, + /* 203 */ 0x36, 0x00, 0x7f, 0x03, 0x03, 0x03, 0x3f, 0x03, + 0x03, 0x03, 0x03, 0x7f, 0x00, 0x00, 0x00, 0x00, + /* 204 */ 0x0c, 0x18, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + /* 205 */ 0x30, 0x18, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + /* 206 */ 0x18, 0x24, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + /* 207 */ 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + /* 208 */ 0x00, 0x00, 0x1e, 0x36, 0x66, 0x66, 0x6f, 0x66, + 0x66, 0x66, 0x36, 0x1e, 0x00, 0x00, 0x00, 0x00, + /* 209 */ 0x6e, 0x3b, 0x63, 0x63, 0x67, 0x6f, 0x6f, 0x7b, + 0x7b, 0x73, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 210 */ 0x06, 0x0c, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 211 */ 0x30, 0x18, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 212 */ 0x08, 0x14, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 213 */ 0x6e, 0x3b, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 214 */ 0x36, 0x00, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 215 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0x18, + 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 216 */ 0x00, 0x20, 0x3e, 0x73, 0x73, 0x6b, 0x6b, 0x6b, + 0x6b, 0x67, 0x67, 0x3e, 0x02, 0x00, 0x00, 0x00, + /* 217 */ 0x0c, 0x18, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 218 */ 0x18, 0x0c, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 219 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + /* 220 */ 0x36, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 221 */ 0x30, 0x18, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + /* 222 */ 0x00, 0x00, 0x0f, 0x06, 0x3e, 0x66, 0x66, 0x66, + 0x66, 0x3e, 0x06, 0x0f, 0x00, 0x00, 0x00, 0x00, + /* 223 */ 0x00, 0x00, 0x1e, 0x33, 0x33, 0x1b, 0x33, 0x63, + 0x63, 0x63, 0x63, 0x3b, 0x00, 0x00, 0x00, 0x00, + /* 224 */ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x3e, 0x60, 0x7e, + 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00, 0x00, + /* 225 */ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x3e, 0x60, 0x7e, + 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00, 0x00, + /* 226 */ 0x00, 0x08, 0x1c, 0x36, 0x00, 0x3e, 0x60, 0x7e, + 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00, 0x00, + /* 227 */ 0x00, 0x00, 0x6e, 0x3b, 0x00, 0x3e, 0x60, 0x7e, + 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00, 0x00, + /* 228 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x3e, 0x60, 0x7e, + 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00, 0x00, + /* 229 */ 0x00, 0x1c, 0x36, 0x1c, 0x00, 0x3e, 0x60, 0x7e, + 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00, 0x00, + /* 230 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xdb, 0xd8, + 0xfe, 0x1b, 0xdb, 0x76, 0x00, 0x00, 0x00, 0x00, + /* 231 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x63, 0x03, + 0x03, 0x03, 0x63, 0x3e, 0x18, 0x30, 0x1e, 0x00, + /* 232 */ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x3e, 0x63, 0x63, + 0x7f, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 233 */ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x3e, 0x63, 0x63, + 0x7f, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 234 */ 0x00, 0x08, 0x1c, 0x36, 0x00, 0x3e, 0x63, 0x63, + 0x7f, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 235 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x3e, 0x63, 0x63, + 0x7f, 0x03, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 236 */ 0x00, 0x06, 0x0c, 0x18, 0x00, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x38, 0x00, 0x00, 0x00, 0x00, + /* 237 */ 0x00, 0x18, 0x0c, 0x06, 0x00, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x38, 0x00, 0x00, 0x00, 0x00, + /* 238 */ 0x00, 0x08, 0x1c, 0x36, 0x00, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x38, 0x00, 0x00, 0x00, 0x00, + /* 239 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x38, 0x00, 0x00, 0x00, 0x00, + /* 240 */ 0x00, 0x00, 0x2c, 0x18, 0x34, 0x60, 0x7c, 0x66, + 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, + /* 241 */ 0x00, 0x00, 0x6e, 0x3b, 0x00, 0x3b, 0x67, 0x63, + 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, + /* 242 */ 0x00, 0x06, 0x0c, 0x18, 0x00, 0x3e, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 243 */ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x3e, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 244 */ 0x00, 0x08, 0x1c, 0x36, 0x00, 0x3e, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 245 */ 0x00, 0x00, 0x6e, 0x3b, 0x00, 0x3e, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 246 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x3e, 0x63, 0x63, + 0x63, 0x63, 0x63, 0x3e, 0x00, 0x00, 0x00, 0x00, + /* 247 */ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, + 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + /* 248 */ 0x00, 0x00, 0x00, 0x00, 0x20, 0x3e, 0x73, 0x6b, + 0x6b, 0x6b, 0x67, 0x3e, 0x02, 0x00, 0x00, 0x00, + /* 249 */ 0x00, 0x06, 0x0c, 0x18, 0x00, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00, 0x00, + /* 250 */ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00, 0x00, + /* 251 */ 0x00, 0x08, 0x1c, 0x36, 0x00, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00, 0x00, + /* 252 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x63, 0x63, 0x63, + 0x63, 0x63, 0x73, 0x6e, 0x00, 0x00, 0x00, 0x00, + /* 253 */ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x63, 0x63, 0x36, + 0x36, 0x1c, 0x1c, 0x0c, 0x0c, 0x06, 0x03, 0x00, + /* 254 */ 0x00, 0x00, 0x0f, 0x06, 0x06, 0x3e, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x0f, 0x00, + /* 255 */ 0x00, 0x00, 0x36, 0x36, 0x00, 0x63, 0x63, 0x36, + 0x36, 0x1c, 0x1c, 0x0c, 0x0c, 0x06, 0x03, 0x00 +}; + +Context2D* NewContext2D(I64 width, I64 height, + I64 bpp = 32) +{ // Create new Context2D. + switch (bpp) { + case 32: + break; + default: + return NULL; + break; + } + Context2D* ctx = CAlloc(sizeof(Context2D)); + ctx->width = width; + ctx->height = height; + ctx->bpp = bpp; + ctx->fb = CAlloc((width * height) * bpp / 8); + return ctx; +} + +U0 DelContext2D(Context2D* ctx) +{ + if (!ctx) { + return; + } + Free(ctx->fb); + Free(ctx); +} + +U0 Fill2D(Context2D* ctx, U32 color = 0) +{ // Fill a Context2D with color. + MemSetU32(ctx->fb, color, ctx->width * ctx->height); + return; +} + +U32 Peek2D(Context2D* ctx, I64 x, I64 y) +{ // Return RGBA value for pixel. + if (x < 0 || x > ctx->width - 1 || y < 0 || y > ctx->height - 1) + return Color(255, 255, 255); + return ctx->fb[(ctx->width * y) + x]; +} + +U0 Plot2D(Context2D* ctx, I64 x, I64 y, + U32 color) +{ // Plot a pixel with clipping. + if (x < 0 || x > ctx->width - 1 || y < 0 || y > ctx->height - 1) + return; + ctx->fb[(ctx->width * y) + x] = color; +} + +U0 VLine2D(Context2D* ctx, I64 x, I64 y, I64 y2, + U32 color) +{ // Draw a vertical line. + if (x > ctx->width || y > ctx->height) + return; + if (y2 < y) + return; + while (y < y2 + 1) { + Plot2D(ctx, x, y, color); + y++; + } +} + +U0 HLine2D(Context2D* ctx, I64 x, I64 y, I64 x2, + U32 color) +{ // Draw a horizontal line. + if (x2 < x) + return; + I64 width = x2 - x; + + MemSetU32(ctx->fb + (y * ctx->width) + x, color, + T(x + width > ctx->width, ctx->width - x, width)); +} + +U0 Line2D(Context2D* ctx, I64 x1, I64 y1, I64 x2, I64 y2, + U32 color) +{ // Draw an arbitrary line using Bresenham's algorithm. + x1 = Max(0, x1); + y1 = Max(0, y1); + x2 = Min(ctx->width, x2); + y2 = Min(ctx->height, y2); + if (x1 == x2) { + VLine2D(ctx, x1, y1, y2, color); + return; + } + if (y1 == y2) { + HLine2D(ctx, x1, y1, x2, color); + return; + } + I64 dx, sx, dy, sy; + I64 err, e2; + dx = Abs(x2 - x1); + sx = T(x1 < x2, 1, -1); + dy = -Abs(y2 - y1); + sy = T(y1 < y2, 1, -1); + err = dx + dy; + while (1) { + Plot2D(ctx, x1, y1, color); + if (x2 == x1 && y2 == y1) + break; + e2 = 2 * err; + if (e2 >= dy) { + err += dy; + x1 += sx; + } + if (e2 <= dx) { + err += dx; + y1 += sy; + } + } +} + +Context2D* MirroredHorz2D(Context2D* src) +{ + if (!src) + return NULL; + Context2D* dst = NewContext2D(src->width, src->height); + I64 x, y; + for (y = 0; y < src->height; y++) + for (x = src->width - 1; x > -1; x--) + Plot2D(dst, (src->width - 1) - x, y, Peek2D(src, x, y)); + return dst; +} + +Context2D* MirroredVert2D(Context2D* src) +{ + if (!src) + return NULL; + Context2D* dst = NewContext2D(src->width, src->height); + I64 x, y; + for (x = 0; x < src->width; x++) + for (y = src->height - 1; y > -1; y--) + Plot2D(dst, x, (src->height - 1) - y, Peek2D(src, x, y)); + return dst; +} + +I64 Blend2D(F64 alpha, F64 value1, F64 value2) +{ + return ToI64((1 - alpha) * value1 + alpha * value2); +} + +U0 Blot2D(Context2D* dst, I64 x, I64 y, Context2D* src) +{ + if (!src || !dst) + return; + I64 xx, yy; + I64 src_col, dst_col; + F64 alpha; + for (yy = 0; yy < src->height; yy++) { + for (xx = 0; xx < src->width; xx++) { + src_col = Peek2D(src, xx, yy); + dst_col = Peek2D(dst, x + xx, y + yy); + alpha = src_col.u8[3] / 128; // FIXME: Alpha blending not working correctly. + Plot2D(dst, x + xx, y + yy, Blend2D(alpha, dst_col, src_col)); + } + } +} + +U0 @patch_blend_rect_2d(U64 addr_start, I64 size, U64 jmp_offset, + U64 table_offset) +{ + U8* patch_ptr = addr_start; + I64 i; + for (i = 0; (addr_start + table_offset - i) % 16; i++) { + patch_ptr[jmp_offset]--; + } + if (i) + MemCpy(addr_start + table_offset - i, addr_start + table_offset, + size - table_offset); +} + +U0 BlendRect2D(Context2D* rect, Context2D* ctx) +{ + U64 reg R10 d = ctx->fb; + U64 reg R11 s1 = rect->fb; + U64 reg R14 s2 = ctx->fb; + I64 reg RSI w = ctx->width; + I64 reg RDI h = ctx->height; + no_warn d, s1, s2, w, h; + asm { + MOV RAX, R10 + MOV RDX, R11 + MOV RCX, R14 + DU8 + 0x0f, 0xaf, 0xf7, 0xc1, 0xfe, 0x02, 0xeb, 0x7f, + 0x66, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x1f, 0x40, 0x00, 0x90, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x03, + 0x80, 0x03, 0x80, 0x07, 0x80, 0x07, 0x80, 0x0b, + 0x80, 0x0b, 0x80, 0x0f, 0x80, 0x0f, 0x80, 0x00, + 0x80, 0x02, 0x80, 0x04, 0x80, 0x06, 0x80, 0x08, + 0x80, 0x0a, 0x80, 0x0c, 0x80, 0x0e, 0x80, 0x01, + 0x80, 0x03, 0x80, 0x05, 0x80, 0x07, 0x80, 0x09, + 0x80, 0x0b, 0x80, 0x0d, 0x80, 0x0f, 0x80, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, + 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x0f, + 0x10, 0x0a, 0x0f, 0x10, 0x11, 0x66, 0x0f, 0x6f, + 0xd9, 0x66, 0x0f, 0x38, 0x00, 0x1d, 0x8d, 0xff, + 0xff, 0xff, 0x66, 0x0f, 0x6f, 0xe3, 0x66, 0x0f, + 0xef, 0x25, 0xb1, 0xff, 0xff, 0xff, 0x66, 0x0f, + 0x6f, 0xe9, 0x66, 0x0f, 0x6f, 0xf2, 0x66, 0x0f, + 0x38, 0x00, 0x0d, 0x80, 0xff, 0xff, 0xff, 0x66, + 0x0f, 0xd5, 0xcb, 0x66, 0x0f, 0x38, 0x00, 0x15, + 0x73, 0xff, 0xff, 0xff, 0x66, 0x0f, 0xd5, 0xd4, + 0x66, 0x0f, 0x38, 0x00, 0x2d, 0x76, 0xff, 0xff, + 0xff, 0x66, 0x0f, 0xd5, 0xeb, 0x66, 0x0f, 0xfd, + 0xd1, 0x66, 0x0f, 0xe4, 0x15, 0x86, 0xff, 0xff, + 0xff, 0x66, 0x0f, 0x38, 0x00, 0x35, 0x5d, 0xff, + 0xff, 0xff, 0x66, 0x0f, 0xd5, 0xf4, 0x66, 0x0f, + 0xfd, 0xf5, 0x66, 0x0f, 0xe4, 0x35, 0x6d, 0xff, + 0xff, 0xff, 0x66, 0x0f, 0x71, 0xf6, 0x08, 0x66, + 0x0f, 0xeb, 0xd6, 0x66, 0x0f, 0xeb, 0x15, 0x6c, + 0xff, 0xff, 0xff, 0x0f, 0x11, 0x10, 0x48, 0x83, + 0xc2, 0x10, 0x48, 0x83, 0xc1, 0x10, 0x48, 0x83, + 0xc0, 0x10, 0xff, 0xce, 0x0f, 0x85, 0x65, 0xff, + 0xff, 0xff, 0x90; + } +} + +@patch_blend_rect_2d(&BlendRect2D, sizeof(BlendRect2D), 0x3D, 0x5D); + +U0 CopyRect2D(Context2D* ctx, I64 x, I64 y, + Context2D* rect) +{ // Copy rect with clipping. + if (x > ctx->width - 1 || y > ctx->height - 1) + return; + U8* ctx_pos = ctx->fb; + U8* rect_pos = rect->fb; + I64 rect_row = 0; + I64 rect_y_ofs = 0; + I64 rect_x_ofs = 0; + I64 clip_y = 0; + U8* rect_line; + I64 bpp = 32 / 8; + + // Handle horizontal clipping left + while (x < 0) { + rect_x_ofs++; + x++; + } + + // Handle vertical clipping top + while (y < 0) { + rect_pos += (rect->width) * bpp; + rect_y_ofs++; + y++; + } + + // default, clip line to copy as width-left off screen + rect_line = rect->width - rect_x_ofs; + + if (-rect_x_ofs + x + rect->width >= ctx->width) { + rect_line -= ((-rect_x_ofs + x + rect->width) - ctx->width); + } + + rect_pos += (rect_x_ofs)*bpp; + clip_y = y; + while (rect_row < (rect->height - rect_y_ofs) && clip_y < ctx->height) { + MemCpyU32(ctx_pos + (y * ((ctx->width) * bpp)) + (x * bpp), rect_pos, + (rect_line)); + ctx_pos += (ctx->width) * bpp; + rect_pos += (rect->width) * bpp; + clip_y++; + rect_row++; + } +} + +U0 @graphics2d_get_gradient_steps(U32 start, U32 end, U32* gradient) +{ + I64 a2 = start.u8[3]; + I64 r2 = start.u8[2]; + I64 g2 = start.u8[1]; + I64 b2 = start.u8[0]; + I64 a1 = end.u8[3]; + I64 r1 = end.u8[2]; + I64 g1 = end.u8[1]; + I64 b1 = end.u8[0]; + I64 i; + F64 c = 1.0; + for (i = 0; i < 256; i++) { + gradient[i] = Color(r1 / 255.0 * c + r2 / 255.0 * (255 - c), + g1 / 255.0 * c + g2 / 255.0 * (255 - c), + b1 / 255.0 * c + b2 / 255.0 * (255 - c), + a1 / 255.0 * c + a2 / 255.0 * (255 - c)); + c += 1.0; + } +} + +U0 HGradientRect2D(Context2D* ctx, I64 x, I64 y, I64 w, I64 h, U32 from, + U32 to) +{ + U32 gradient[256]; + F64 gradient_index; + I64 xx; + @graphics2d_get_gradient_steps(from, to, &gradient); + for (xx = 0; xx < w; xx++) { + gradient_index = ToF64(256.0 / ToF64(w)) * ToF64(xx); + Line2D(ctx, x + xx, y, x + xx, y + h - 1, gradient[ToI64(gradient_index)]); + } +} + +U0 Rect2D(Context2D* ctx, I64 x, I64 y, I64 w, I64 h, + U32 color) +{ // Draw a rectangle fill. + Context2D* tmpctx = NewContext2D(Max(4, w), Max(4, h)); + Fill2D(tmpctx, color); + CopyRect2D(ctx, x, y, tmpctx); + DelContext2D(tmpctx); +} + +U0 ConsolePrint2D(Context2D* ctx, I64 x, I64 y, + U32 color = Color(255, 255, 255), U32 colorbg = 0, U8* fmt, + ...) +{ // Print formatted string using console font. + Bool skip; + U8* buf = StrPrintJoin(NULL, fmt, argc, argv); + U8* str = buf; + I64 orig_x = x; + I64 xx, yy; + U64* chr = console_font; + while (*str) { + skip = FALSE; + if (*str == '\n') { + skip = TRUE; + y += 16; + x = orig_x - 8; + } + for (yy = 0; yy < 16; yy++) { + for (xx = 0; xx < 8; xx++) { + if (chr[(*str) * 2].u8[yy] & 1 << xx == 1 << xx && !skip) + Plot2D(ctx, x + xx, y + yy, color); + else + Plot2D(ctx, x + xx, y + yy, colorbg); + } + } + x += 8; + str++; + } + Free(buf); +} + +U0 PutChar2D(Context2D* ctx, BitmapFont* font, I64 x, I64 y, + U32 color = Color(0, 0, 0), I64 char) +{ + if (!ctx) + return; + I64 xx; + I64 yy; + I64 char_index = 0; + while (char != font->char_map[char_index]) + char_index++; + + for (yy = 0; yy < 16; yy++) { + for (xx = 0; xx < 16; xx++) { + if (font->bitmap[(char_index * 16) + yy] & 0x8000 >> xx == 0x8000 >> xx && char != ' ') { + Plot2D(ctx, x + xx, y + yy, color); + } + } + } +} + +I64 PutS2D(Context2D* ctx, BitmapFont* font, I64 x, I64 y, + U32 color = Color(0, 0, 0), I64 max_width = -1, U8* buf) +{ + U8* str = buf; + + I64 origin_x; + I64 origin_y; + I64 xx, yy; + Bool char_space; + + I64 char_index; + I64 insert_space; + I64 pass; + + origin_x = x; + origin_y = y; + if (max_width > -1) + max_width = Min(ctx->width, max_width); + + for (pass = 0; pass < 2; pass++) { + x = origin_x; + y = origin_y; + str = buf; + while (*str) { + char_space = FALSE; + switch (*str) { + case '\n': + x = origin_x; + if (font->line_height) + y += Min(16, font->line_height); + else + y += 16; + goto @print2d_next_char; + break; + case ' ': + char_space = TRUE; + break; + default: + break; + } + char_index = 0; + while (*str != font->char_map[char_index]) + char_index++; + insert_space = 0; + for (yy = 0; yy < 16; yy++) { + for (xx = 0; xx < 16; xx++) { + if (font->bitmap[(char_index * 16) + yy] & 0x8000 >> xx == 0x8000 >> xx && !char_space) { + insert_space = Max(xx, insert_space); + if (pass && ctx) + Plot2D(ctx, x + xx, y + yy, color); + } + } + } + if (char_space) + insert_space = 4; + @print2d_next_char : str++; + if (str > buf && str[-1] != '\n') { + if (*str) { + x += insert_space + 2; + } else { + x += insert_space; + } + } + if (max_width == -1) { + } else if (x > max_width) { + StrCpy(&str[-4], "..."); + break; + } + } + } + return x; +} + +I64 Print2D(Context2D* ctx, BitmapFont* font, I64 x, I64 y, + U32 color = Color(0, 0, 0), I64 max_width = -1, U8* fmt, + ...) +{ // Print formatted string using BitmapFont. + U8* buf; + if (argc) + buf = StrPrintJoin(NULL, fmt, argc, argv); + else + buf = StrNew(fmt); + I64 retval = PutS2D(ctx, font, x, y, color, max_width, buf); + Free(buf); + return retval; +} + +Context2D* FastBoxBlur2D(Context2D* img, I64 radius) +{ + /* + Algorithm by Wojciech Jarosz, Implementation by Ferris Ateniese + http://elynxsdk.free.fr/ext-docs/Blur/Fast_box_blur.pdf + https://gist.github.com/LionRoar/12d625bee5882abb339dc7102ad6fe32#file-fastboxblur-cs + */ + I64 kSize = radius; + I64 c, i, j, x, y; + I64 bpp = 32; + no_warn bpp; + U32 tmpColor, tmp_nColor, tmp_pColor, plot_color; + F64 hSum[4]; + F64 tSum[4]; + F64 iAvg[4]; + + if (kSize % 2 == 0) + kSize++; + + Context2D* Hblur = NewContext2D(img->width, img->height); + MemCpyU32(Hblur->fb, img->fb, img->width * img->height); + + F64 Avg = 1.0 / kSize; + + for (j = 0; j < img->height; j++) { + for (c = 0; c < 4; c++) { + hSum[c] = 0.0; + iAvg[c] = 0.0; + } + for (x = 0; x < kSize; x++) { + tmpColor = Peek2D(img, x, j); + hSum[3] += tmpColor.u8[3]; + hSum[2] += tmpColor.u8[2]; + hSum[1] += tmpColor.u8[1]; + hSum[0] += tmpColor.u8[0]; + } + iAvg[3] = hSum[3] * Avg; + iAvg[2] = hSum[2] * Avg; + iAvg[1] = hSum[1] * Avg; + iAvg[0] = hSum[0] * Avg; + for (i = 0; i < img->width; i++) { + if (i - kSize / 2 >= 0 && i + 1 + kSize / 2 < img->width) { + tmp_pColor = Peek2D(img, i - kSize / 2, j); + hSum[3] -= tmp_pColor.u8[3]; + hSum[2] -= tmp_pColor.u8[2]; + hSum[1] -= tmp_pColor.u8[1]; + hSum[0] -= tmp_pColor.u8[0]; + tmp_nColor = Peek2D(img, i + 1 + kSize / 2, j); + hSum[3] += tmp_nColor.u8[3]; + hSum[2] += tmp_nColor.u8[2]; + hSum[1] += tmp_nColor.u8[1]; + hSum[0] += tmp_nColor.u8[0]; + iAvg[3] = hSum[3] * Avg; + iAvg[2] = hSum[2] * Avg; + iAvg[1] = hSum[1] * Avg; + iAvg[0] = hSum[0] * Avg; + } + plot_color.u8[3] = ToI64(iAvg[3]); + plot_color.u8[2] = ToI64(iAvg[2]); + plot_color.u8[1] = ToI64(iAvg[1]); + plot_color.u8[0] = ToI64(iAvg[0]); + Plot2D(Hblur, i, j, plot_color); + } + } + + Context2D* total = NewContext2D(Hblur->width, Hblur->height); + MemCpyU32(total->fb, Hblur->fb, Hblur->width * Hblur->height); + + for (i = 0; i < Hblur->width; i++) { + for (c = 0; c < 4; c++) { + tSum[c] = 0.0; + iAvg[c] = 0.0; + } + for (y = 0; y < kSize; y++) { + tmpColor = Peek2D(Hblur, i, y); + tSum[3] += tmpColor.u8[3]; + tSum[2] += tmpColor.u8[2]; + tSum[1] += tmpColor.u8[1]; + tSum[0] += tmpColor.u8[0]; + } + iAvg[3] = tSum[3] * Avg; + iAvg[2] = tSum[2] * Avg; + iAvg[1] = tSum[1] * Avg; + iAvg[0] = tSum[0] * Avg; + for (j = 0; j < Hblur->height; j++) { + if (j - kSize / 2 >= 0 && j + 1 + kSize / 2 < Hblur->height) { + tmp_pColor = Peek2D(Hblur, i, j - kSize / 2); + tSum[3] -= tmp_pColor.u8[3]; + tSum[2] -= tmp_pColor.u8[2]; + tSum[1] -= tmp_pColor.u8[1]; + tSum[0] -= tmp_pColor.u8[0]; + tmp_nColor = Peek2D(Hblur, i, j + 1 + kSize / 2); + + tSum[3] += tmp_nColor.u8[3]; + tSum[2] += tmp_nColor.u8[2]; + tSum[1] += tmp_nColor.u8[1]; + tSum[0] += tmp_nColor.u8[0]; + iAvg[3] = tSum[3] * Avg; + iAvg[2] = tSum[2] * Avg; + iAvg[1] = tSum[1] * Avg; + iAvg[0] = tSum[0] * Avg; + } + plot_color.u8[3] = ToI64(iAvg[3]); + plot_color.u8[2] = ToI64(iAvg[2]); + plot_color.u8[1] = ToI64(iAvg[1]); + plot_color.u8[0] = ToI64(iAvg[0]); + Plot2D(total, i, j, plot_color); + } + } + DelContext2D(Hblur); + return total; +} + +U8 @scale2d_get_byte(I64 value, I64 n) { return (value >> (n * 8) & 0xFF); } + +U32 @scale2d_get_pixel(Context2D* img, I64 x, I64 y) +{ + return img->fb[(y * img->width) + x]; +} + +F64 @scale2d_lerp(F64 s, F64 e, F64 t) { return s + (e - s) * t; } + +F64 @scale2d_blerp(F64 c00, F64 c10, F64 c01, F64 c11, F64 tx, F64 ty) +{ + return @scale2d_lerp(@scale2d_lerp(c00, c10, tx), @scale2d_lerp(c01, c11, tx), + ty); +} + +U0 @scale2d_put_pixel(Context2D* img, I64 x, I64 y, U32 color) +{ + img->fb[(y * img->width) + x] = color; +} + +I64 X1Pos2D(Context2D* src) +{ + I64 x = 0; + I64 y = 0; + U32 color; + while (x < src->width) { + y = 0; + while (y < src->height) { + color = Peek2D(src, x, y); + if (color.u8[3]) + return x; + y++; + } + x++; + } + return -1; +} + +I64 Y1Pos2D(Context2D* src) +{ + I64 x = 0; + I64 y = 0; + U32 color; + while (y < src->height) { + x = 0; + while (x < src->width) { + color = Peek2D(src, x, y); + if (color.u8[3]) + return y; + x++; + } + y++; + } + return -1; +} + +I64 X2Pos2D(Context2D* src) +{ + I64 x = src->width - 1; + I64 y = src->height - 1; + U32 color; + while (x > -1) { + y = src->height - 1; + while (y > -1) { + color = Peek2D(src, x, y); + if (color.u8[3]) + return x; + y--; + } + x--; + } + return -1; +} + +I64 Y2Pos2D(Context2D* src) +{ + I64 x = src->width - 1; + I64 y = src->height - 1; + U32 color; + while (y > -1) { + x = src->width - 1; + while (x > -1) { + color = Peek2D(src, x, y); + if (color.u8[3]) + return y; + x--; + } + y--; + } + return -1; +} + +Context2D* ClipToRect2D(Context2D* src) +{ + I64 x1, y1, x2, y2; + x1 = X1Pos2D(src); + y1 = Y1Pos2D(src); + x2 = X2Pos2D(src); + y2 = Y2Pos2D(src); + Context2D* dst = NewContext2D(x2 - x1, y2 - y1); + CopyRect2D(dst, -x1, -y1, src); + return dst; +} + +Context2D* Scale2D(Context2D* src, F64 scale_x, F64 scale_y) +{ + I64 newWidth = ToI64(src->width * scale_x); + I64 newHeight = ToI64(src->height * scale_y); + Context2D* dst = NewContext2D(newWidth, newHeight); + I64 x, y; + F64 fw, fh; + F64 gx; + F64 gy; + I64 gxi; + I64 gyi; + U32 result; + U32 c00; + U32 c10; + U32 c01; + U32 c11; + U64 i; + fw = ToF64(newWidth); + fh = ToF64(newHeight); + for (x = 0, y = 0; y < newHeight; x++) { + if (x > newWidth) { + x = 0; + y++; + } + gx = x / fw * (src->width - 1); + gy = y / fh * (src->height - 1); + gxi = ToI64(gx); + gyi = ToI64(gy); + result = 0; + c00 = @scale2d_get_pixel(src, gxi, gyi); + c10 = @scale2d_get_pixel(src, gxi + 1, gyi); + c01 = @scale2d_get_pixel(src, gxi, gyi + 1); + c11 = @scale2d_get_pixel(src, gxi + 1, gyi + 1); + for (i = 0; i < 4; i++) { + result.u8[i] = ToI64( + @scale2d_blerp(@scale2d_get_byte(c00, i), @scale2d_get_byte(c10, i), + @scale2d_get_byte(c01, i), @scale2d_get_byte(c11, i), + gx - gxi, gy - gyi) + << (8 * i)); + } + @scale2d_put_pixel(dst, x, y, result); + } + return dst; +} + +Context2D* Rotate2D(Context2D* src, F64 angle) +{ // FIXME: This is just awful... + Context2D* dst = NewContext2D(src->width * 4, src->height * 4); + Fill2D(dst, 0); + CDC* dc[4]; + CSprite* s[4]; + I64 i, x, y; + U32 color; + for (i = 0; i < 4; i++) { + dc[i] = DCNew(src->width * 4, src->height * 4); + } + for (y = 0; y < src->height; y++) { + for (x = 0; x < src->width; x++) { + color = Peek2D(src, x, y); + for (i = 0; i < 4; i++) { + dc[i]->color = Min(color.u8[i], 254); + GrPlot(dc[i], x, y); + } + } + } + for (i = 0; i < 4; i++) { + s[i] = DC2Sprite(dc[i]); + DCFill(dc[i], 0); + Sprite3ZB(dc[i], src->width * 2, src->height * 2, 0, s[i], + angle * 0.017499999999); + } + for (y = 0; y < src->height * 4; y++) { + for (x = 0; x < src->width * 4; x++) { + for (i = 0; i < 4; i++) { + color.u8[i] = GrPeek(dc[i], x, y); + } + Plot2D(dst, x, y, color); + } + } + for (i = 0; i < 4; i++) { + DCDel(dc[i]); + Free(s[i]); + } + Context2D* dst2 = ClipToRect2D(dst); + DelContext2D(dst); + return dst2; +} + +class @graphics2d +{ + Context2D* fb; + + Context2D* (*FrameBufferContext2D)(); + U0(*Init) + (); + U0(*Flip) + (Context2D * ctx); +}; + +@graphics2d Graphics2D; + +U0 @graphics2d_init() +{ + Graphics2D.fb = CAlloc(sizeof(Context2D)); + Graphics2D.fb->width = Display.width; + Graphics2D.fb->height = Display.height; + Graphics2D.fb->bpp = Display.bpp; + Graphics2D.fb->fb = Display.fb; + Fill2D(Graphics2D.fb, 0x0); +} + +U0 @graphics2d_flip(Context2D* ctx) +{ + MemCpyU32(Graphics2D.fb->fb, ctx->fb, Display.width * Display.height); +} + +Context2D @graphics2d_get_framebuffer_context2d() { return Graphics2D.fb; } + +Graphics2D.FrameBufferContext2D = &@graphics2d_get_framebuffer_context2d; +Graphics2D.Init = &@graphics2d_init; +Graphics2D.Flip = &@graphics2d_flip; + +"graphics2d "; \ No newline at end of file diff --git a/System/Libraries/Gui.HC b/System/Libraries/Gui.HC new file mode 100644 index 0000000..1c2f34c --- /dev/null +++ b/System/Libraries/Gui.HC @@ -0,0 +1,398 @@ +extern class Widget; +extern class Window; + +#define WIN_FLAGS_NULL 0x0 +#define WIN_FLAGS_NO_REINDEX 0x1 // Wallpaper, taskbar, etc. +#define WIN_FLAGS_RESIZABLE 0x2 +#define WIN_FLAGS_MOVABLE 0x4 +#define WIN_FLAGS_ICON 0x8 +#define WIN_FLAGS_TITLE_BAR 0x10 +#define WIN_FLAGS_MIN_BUTTON 0x20 +#define WIN_FLAGS_MAX_BUTTON 0x40 +#define WIN_FLAGS_CLOSE_BUTTON 0x80 + +#define WIN_FLAGS_MINIMIZED 0x100 +#define WIN_FLAGS_MAXIMIZED 0x200 +#define WIN_FLAGS_HIDDEN 0x400 +#define WIN_FLAGS_NOHILIGHT 0x800 + +#define WIN_FLAGS_SKIP 0x1000 +#define WIN_FLAGS_NOFILL 0x2000 +#define WIN_FLAGS_MENU 0x4000 + +#define WIN_FLAGS_MAX 0x10000 + +#define WIN_SIGNATURE 0x1596e3c1c62c34b929d75cded8c0 + +#define WIN_FLAGS_DEFAULT \ + (WIN_FLAGS_RESIZABLE | WIN_FLAGS_MOVABLE | WIN_FLAGS_ICON | WIN_FLAGS_TITLE_BAR | WIN_FLAGS_MIN_BUTTON | WIN_FLAGS_MAX_BUTTON | WIN_FLAGS_CLOSE_BUTTON) + +class @widget_callbacks +{ + U0 (*change)(Widget* widget); + U0 (*clicked)(Widget* widget); + U0 (*repaint)(Widget* widget); +}; + +class @widget_origin +{ + I64 x; + I64 y; + I64 width; + I64 height; + I64 mouse_x; + I64 mouse_y; +}; + +class Widget { + Bool change; + I64 id; + I64 type; + I64 x; + I64 y; + I64 width; + I64 height; + I64 opacity; + U64 flags; + U8* tag; + Widget* echo; + Window* parent_win; + Context2D* backing_store; + Context2D* pointer; + @widget_callbacks callback; + @widget_origin origin; +}; + +class @window_widgets_list +{ + @window_widgets_list* prev; + @window_widgets_list* next; + Widget* widget; +}; + +class @window_origin +{ + I64 x; + I64 y; + I64 width; + I64 height; + I64 mouse_x; + I64 mouse_y; +}; + +class @window_position +{ + I64 x; + I64 y; +} + +class @window_buttons +{ + Bool minimize; + Bool maximize; + Bool close; +}; + +class @window_callbacks +{ + U0 (*minimize)(Window* win); + U0 (*maximize)(Window* win); + U0 (*mouseat)(Window* win); + U0 (*keypress)(Window* win, I64 key); + U0 (*repaint)(Window* win); + U0 (*close)(Window* win); +}; + +class @window_mouse +{ + I64 x; + I64 y; + Bool left; + Bool right; +}; + +class @window_event +{ // FIXME: Better name? + I64 x; + I64 y; + Bool left; + Bool right; +}; + +class Window { + U64 signature; + Bool alpha; + Bool refresh; + Bool repainting; + CTask* client; + I64 x; + I64 y; + I64 width; + I64 height; + I64 opacity; + U64 flags; + U8 title[512]; + I64 title_bar_x; + I64 title_bar_width; + I64 min_width; + I64 min_height; + Context2D* icon; + Context2D* backing_store; + Context2D* pointer; + Context2D* render_ctx; + Context2D* resize_ctx; + Widget* mouse_down_widget; + Widget* focused_widget; + Widget* hovered_widget; + @window_buttons button; + @window_callbacks callback; + @window_origin origin; + @window_mouse mouse; + @window_event left_btn_down; // FIXME: put these in a Window.event.xxx class? + @window_event left_btn_up; + @window_event right_btn_down; + @window_event right_btn_up; + @window_widgets_list* widget; +}; + +class @gui_widget +{ + Bool (*IsHovered)(Window* win, Widget* widget); + U0 (*SetCallback)(Widget* widget, U8* name, U64 callback); + U0 (*SetEcho)(Widget* widget, Widget* echo); + U0 (*SetFont)(Widget* widget, U8* font_name); + U0 (*SetMousePointer)(Widget* widget, Context2D* pointer); + U0 (*ClearMousePointer)(Widget* widget); + U0 (*SetOpacity)(Widget* widget, I64 opacity); + U0 (*SetText)(Widget* widget, U8* text); +}; + +class @gui_window +{ + U0 (*Center)(Window* win, Bool horz = TRUE, Bool vert = TRUE); + U0 (*DisableAlphaChannel)(Window* win); + U0 (*EnableAlphaChannel)(Window* win); + U0 (*Hide)(Window* win); + Bool (*IsHovered)(Window* win); + Bool (*IsVisible)(Window* win); + U0 (*SetCallback)(Window* win, U8* name, U64 callback); + U0 (*SetFocus)(Window* win); + U0 (*SetIcon)(Window* win, Context2D* icon); + U0 (*SetMousePointer)(Window* win, Context2D* pointer); + U0 (*ClearMousePointer)(Window* win); + U0 (*SetOpacity)(Window* win, I64 opacity); + U0 (*SetTitle)(Window* win, U8* text); + U0 (*SetPosition)(Window* win, I64 x, I64 y); + U0 (*SetZIndex)(Window* win, I64 index); + U0 (*Show)(Window* win); + U0 (*Refresh)(Window* win); +}; + +class @gui +{ + @gui_widget Widget; + @gui_window Window; + U0 (*App)(); + Widget* (*InitWidget)(Widget* widget, Window* win, I64 type, I64 x, I64 y, + I64 width, I64 height); + Widget* (*CreateWidget)(Window* win, I64 type, I64 x, I64 y, I64 width, + I64 height); +}; + +@gui Gui; + +I64 @gui_app_header_size; +U8* @gui_app_header_data = FileRead("M:/Include/Gui.HC", &@gui_app_header_size); + +U0 @gui_app() +{ + CDoc* @gui_app_header_doc = DocNew; + DocLoad(@gui_app_header_doc, @gui_app_header_data, @gui_app_header_size); + ExeDoc(@gui_app_header_doc); +} + +Bool @gui_window_flag_is_set(Window* win, U64 flag) +{ + if (!win) + return FALSE; + if (win->flags & flag == flag) + return TRUE; + return FALSE; +} + +Bool @gui_window_is_hovered(Window* win) +{ + if (Mouse.x > win->x && Mouse.x < win->x + win->width && Mouse.y > win->y && Mouse.y < win->y + win->height) + return TRUE; + return FALSE; +} + +Bool @gui_window_is_visible(Window* win) +{ + if (!win) + return NULL; + return !@gui_window_flag_is_set(win, WIN_FLAGS_HIDDEN); +} + +U0 @gui_widget_destroy(Widget* widget) +{ + Window* win = widget->parent_win; + @window_widgets_list* widgets = win->widget; + @window_widgets_list* prev; + @window_widgets_list* next; + while (widgets) { + if (widgets->widget == widget) { + prev = widgets->prev; + next = widgets->next; + if (prev) + prev->next = next; + if (next) + next->prev = prev; + // FIXME: Free widget and child data + widget->type = NULL; + } + widgets = widgets->next; + } +} + +U0 @gui_widget_repaint(Window* win, Widget* widget, I64 type) { } + +U0 @gui_window_repaint(Window* win, I64 type) +{ + @system_log(Fs, "Repainting window 0x%08x [%s]", win, win->title); +} + +U0 @gui_window_center(Window* win, Bool horz = TRUE, Bool vert = TRUE) +{ + if (!win) + return; + I64 x = win->x; + I64 y = win->y; + if (horz) + x = (Display.Width() / 2) - (win->width / 2); + if (vert) + y = (Display.Height() / 2) - (win->height / 2); + win->x = x; + win->y = y; +} + +U0 @gui_window_set_position(Window* win, I64 x, I64 y) +{ + if (!win) + return; + win->x = x; + win->y = y; +} + +U0 @gui_window_set_icon(Window* win, Context2D* icon) +{ + if (!win || !icon) + return; + Bool refresh = FALSE; + if (win->icon != icon) + refresh = TRUE; + win->icon = icon; + if (refresh) + Gui.Window.Refresh(win); +} + +U0 @gui_window_set_mouse_pointer(Window* win, Context2D* pointer) +{ + if (!win) + return; + win->pointer = pointer; +} + +U0 @gui_window_clear_mouse_pointer(Window* win) +{ + if (!win) + return; + win->pointer = NULL; +} + +U0 @gui_window_set_opacity(Window* win, I64 opacity) +{ + if (!win) + return; + Bool refresh = FALSE; + if (win->opacity != opacity) + refresh = TRUE; + win->opacity = ClampI64(opacity, 0, 255); + if (refresh) + Gui.Window.Refresh(win); +} + +U0 @gui_window_set_title(Window* win, U8* text) +{ + if (!win || !text) + return; + if (!StrLen(text)) + return; + if (StrLen(text) > 511) { + MemCpy(&win->title, text, 512); + win->title[511] = NULL; + return; + } + StrCpy(&win->title, text); + Gui.Window.Refresh(win); +} + +U0 @gui_window_callback_close(Window* win) { } + +U0 @gui_window_callback_maximize(Window* win) +{ + win->flags |= WIN_FLAGS_MAXIMIZED; +} + +U0 @gui_window_callback_minimize(Window* win) +{ + win->flags |= WIN_FLAGS_MINIMIZED; +} + +U0 @gui_window_disable_alpha_channel(Window* win) { win->alpha = FALSE; } + +U0 @gui_window_enable_alpha_channel(Window* win) { win->alpha = TRUE; } + +U0 @gui_window_hide(Window* win) { win->flags |= WIN_FLAGS_HIDDEN; } + +U0 @gui_window_show(Window* win) +{ + win->flags &= ~WIN_FLAGS_HIDDEN; + win->flags &= ~WIN_FLAGS_MINIMIZED; +} + +U0 @gui_window_set_callback(Window* win, U8* name, U64 callback) +{ + if (!win || !name || !callback) + return; + if (!StrCmp(name, "minimize")) + win->callback.minimize = callback; + if (!StrCmp(name, "maximize")) + win->callback.maximize = callback; + if (!StrCmp(name, "mouseat")) + win->callback.mouseat = callback; + if (!StrCmp(name, "keypress")) + win->callback.keypress = callback; + if (!StrCmp(name, "repaint")) + win->callback.repaint = callback; + if (!StrCmp(name, "close")) + win->callback.close = callback; +} + +Gui.App = &@gui_app; +Gui.Window.Center = &@gui_window_center; +Gui.Window.DisableAlphaChannel = &@gui_window_disable_alpha_channel; +Gui.Window.EnableAlphaChannel = &@gui_window_enable_alpha_channel; +Gui.Window.Hide = &@gui_window_hide; +Gui.Window.IsHovered = &@gui_window_is_hovered; +Gui.Window.IsVisible = &@gui_window_is_visible; +Gui.Window.SetCallback = &@gui_window_set_callback; +Gui.Window.SetIcon = &@gui_window_set_icon; +Gui.Window.SetMousePointer = &@gui_window_set_mouse_pointer; +Gui.Window.ClearMousePointer = &@gui_window_clear_mouse_pointer; +Gui.Window.SetOpacity = &@gui_window_set_opacity; +Gui.Window.SetTitle = &@gui_window_set_title; +Gui.Window.SetPosition = &@gui_window_set_position; +Gui.Window.Show = &@gui_window_show; + +"gui "; \ No newline at end of file diff --git a/System/Libraries/Http.HC b/System/Libraries/Http.HC new file mode 100644 index 0000000..8f289f2 --- /dev/null +++ b/System/Libraries/Http.HC @@ -0,0 +1,628 @@ +#define HTTP_TMP_DIRECTORY "B:/Tmp" +#define HTTP_CACHE_DIRECTORY "B:/Tmp/Cache" +#define HTTP_FETCH_BUFFER_SIZE 1024 << 15 + +#define SEDECIM_USER_AGENT_STRING "Mozilla/5.0 (compatible; Sedecim/1.0; TempleOS) (KHTML, like Gecko)" + +class @http_buffer +{ + I64 length; + U8* data; +}; + +class @http_status +{ + U8* protocol; + I64 code; + U8* text; +}; + +class @http_response +{ + I64 state; + TlsSocket* s; + @http_status status; + JsonObject* headers; + @http_buffer body; + Bool headers_parsed; +}; + +class @http_url +{ + U8* scheme; + U8* host; + I64 port; + U8* path; + U8* query; + U8* fragment; +}; + +class @http_request +{ + @http_url* url; + U8* buf; + U8* data; + I64 type; + JsonObject* headers; + @http_response* response; +}; + +#define HttpResponse @http_response +#define HttpUrl @http_url + +#define HTTP_FETCH_BUFFER_SIZE 16777216 + +#define HTTP_PARSE_SCHEME 0 +#define HTTP_PARSE_SCHEME_FS 1 +#define HTTP_PARSE_HOST 2 +#define HTTP_PARSE_PORT 3 +#define HTTP_PARSE_PATH 4 +#define HTTP_PARSE_QUERY 5 +#define HTTP_PARSE_FRAGMENT 6 + +#define HTTP_MIN_REQUEST_BUFFER_SIZE 16384 +#define HTTP_PARSE_URL_FIFO_SIZE 1024 + +#define HTTP_REQ_GET 0 +#define HTTP_REQ_HEAD 1 +#define HTTP_REQ_POST 2 +#define HTTP_REQ_PUT 3 + +#define HTTP_STATE_UNSENT 0 +#define HTTP_STATE_OPENED 1 +#define HTTP_STATE_HEADERS_RECEIVED 2 +#define HTTP_STATE_LOADING 3 +#define HTTP_STATE_DONE 4 + +U8* @http_string_from_fifo(CFifoU8* f) +{ + U8 ch; + I64 i = 0; + U8* str = CAlloc(FifoU8Cnt(f) + 1, erythros_mem_task); + while (FifoU8Cnt(f)) { + FifoU8Rem(f, &ch); + str[i] = ch; + i++; + } + FifoU8Flush(f); + return str; +} + +U0 @http_free_url(@http_url* url) +{ + if (!url) + return; + if (url->scheme) + Free(url->scheme); + if (url->host) + Free(url->host); + if (url->path) + Free(url->path); + if (url->query) + Free(url->query); + if (url->fragment) + Free(url->fragment); + Free(url); +} + +U0 @http_free_response(@http_response* resp) +{ + if (!resp) + return; + // FIXME: Free response headers JSON object + Free(resp); +} + +@http_url* @http_parse_url(U8* str) +{ + if (!str) + return NULL; + U8* buf = NULL; + U8 hex[3]; + I64 i = 0; + I64 state = HTTP_PARSE_SCHEME; + CFifoU8* consume_fifo = FifoU8New(HTTP_PARSE_URL_FIFO_SIZE, erythros_mem_task); + @http_url* url = CAlloc(sizeof(@http_url), erythros_mem_task); + while (1) { + switch (str[i]) { + case 0: + switch (state) { + case HTTP_PARSE_HOST: + url->host = @http_string_from_fifo(consume_fifo); + url->path = StrNew("/", erythros_mem_task); + goto done_parsing_url; + break; + case HTTP_PARSE_PORT: + buf = @http_string_from_fifo(consume_fifo); + url->port = Str2I64(buf); + Free(buf); + url->path = StrNew("/", erythros_mem_task); + goto done_parsing_url; + break; + case HTTP_PARSE_PATH: + url->path = @http_string_from_fifo(consume_fifo); + goto done_parsing_url; + break; + case HTTP_PARSE_QUERY: + url->query = @http_string_from_fifo(consume_fifo); + goto done_parsing_url; + break; + case HTTP_PARSE_FRAGMENT: + url->fragment = @http_string_from_fifo(consume_fifo); + goto done_parsing_url; + break; + default: + goto done_parsing_url; + break; + } + break; + case '#': + switch (state) { + case HTTP_PARSE_PATH: + url->path = @http_string_from_fifo(consume_fifo); + FifoU8Ins(consume_fifo, str[i]); + state = HTTP_PARSE_FRAGMENT; + break; + case HTTP_PARSE_QUERY: + url->query = @http_string_from_fifo(consume_fifo); + FifoU8Ins(consume_fifo, str[i]); + state = HTTP_PARSE_FRAGMENT; + break; + } + break; + case '?': + switch (state) { + case HTTP_PARSE_PATH: + url->path = @http_string_from_fifo(consume_fifo); + FifoU8Ins(consume_fifo, str[i]); + state = HTTP_PARSE_QUERY; + break; + } + break; + case '/': + switch (state) { + case HTTP_PARSE_SCHEME: + state = HTTP_PARSE_SCHEME_FS; + goto keep_consuming_url_chars; + break; + case HTTP_PARSE_SCHEME_FS: + FifoU8Ins(consume_fifo, str[i]); + url->scheme = @http_string_from_fifo(consume_fifo); + if (!StrCmp(url->scheme, "http://")) + url->port = 80; + if (!StrCmp(url->scheme, "https://")) + url->port = 443; + state = HTTP_PARSE_HOST; + break; + case HTTP_PARSE_HOST: + url->host = @http_string_from_fifo(consume_fifo); + FifoU8Ins(consume_fifo, str[i]); + state = HTTP_PARSE_PATH; + break; + case HTTP_PARSE_PORT: + buf = @http_string_from_fifo(consume_fifo); + url->port = Str2I64(buf); + Free(buf); + FifoU8Ins(consume_fifo, str[i]); + state = HTTP_PARSE_PATH; + break; + case HTTP_PARSE_PATH: + goto keep_consuming_url_chars; + break; + } + break; + case ':': + switch (state) { + case HTTP_PARSE_SCHEME: + case HTTP_PARSE_PATH: + case HTTP_PARSE_QUERY: + case HTTP_PARSE_FRAGMENT: + goto keep_consuming_url_chars; + break; + case HTTP_PARSE_HOST: + url->host = @http_string_from_fifo(consume_fifo); + state = HTTP_PARSE_PORT; + break; + } + break; + default: + keep_consuming_url_chars: + switch (state) { + case HTTP_PARSE_PATH: + case HTTP_PARSE_QUERY: + switch (str[i]) { + case '0' ... '9': + case 'A' ... 'Z': + case 'a' ... 'z': + case '?': + case '&': + case '/': + case '=': + // !'()*-._~ + case '!': + case '\'': + case '(': + case ')': + case '*': + case '-': + case '.': + case '_': + case '~': + case '%': + FifoU8Ins(consume_fifo, str[i]); + break; + default: + FifoU8Ins(consume_fifo, '%'); + StrPrint(hex, "%02X", str[i]); + FifoU8Ins(consume_fifo, hex[0]); + FifoU8Ins(consume_fifo, hex[1]); + break; + } + break; + default: + FifoU8Ins(consume_fifo, str[i]); + break; + } + break; + } + i++; + } +done_parsing_url: + FifoU8Flush(consume_fifo); + FifoU8Del(consume_fifo); + return url; +} + +U0 @http_parse_response_headers(@http_response* resp, U8* buffer, I64 length) +{ + if (!resp || !buffer || !length) + return; + U64 response_data_ptr = StrFind("\r\n\r\n", buffer); + if (!response_data_ptr) + return; + resp->body.data = response_data_ptr + 4; + resp->body.data[-4] = NULL; + JsonObject* headers = Json.CreateObject(erythros_mem_task); + U8** lines = NULL; + I64 lines_count = 0; + I64 i; + I64 j; + U8* key_ptr = NULL; + U8* value_ptr = NULL; + lines = String.Split(buffer, '\n', &lines_count); + + U8* resp_protocol = lines[0]; + U8* resp_status_code = StrFind(" ", resp_protocol) + 1; + U8* resp_text = StrFind(" ", resp_status_code + 1); + (*StrFind(" ", resp_protocol)) = NULL; + (*StrFind(" ", resp_status_code)) = NULL; + + resp->status.protocol = StrNew(resp_protocol, erythros_mem_task); + resp->status.code = Str2I64(resp_status_code); + resp->status.text = StrNew(resp_text, erythros_mem_task); + + for (i = 1; i < lines_count; i++) { + for (j = 0; j < StrLen(lines[i]); j++) { + if (lines[i][j] == ':' && lines[i][j + 1] == ' ') { + lines[i][j] = NULL; + key_ptr = lines[i]; + value_ptr = lines[i] + j + 2; + (*StrFind("\r", value_ptr)) = NULL; + headers->set(key_ptr, value_ptr, JSON_STRING); + goto @http_next_header_line; + } + } + @http_next_header_line: + } + resp->headers = headers; + resp->headers_parsed = TRUE; +} + +Bool @http_detect_response_headers(U8* buf, I64 len) +{ + if (len < 4) + return FALSE; + I64 i; + for (i = 0; i < len - 4; i++) { + if (!MemCmp(buf + i, "\r\n\r\n", 4)) + return TRUE; + } + return FALSE; +} + +I64 @http_req(@http_request* req) +{ + if (!req) + return NULL; + if (!req->url || !req->buf || !req->response) + return NULL; + if (!req->url->scheme || !req->url->host || !req->url->path) + return NULL; + if (req->type == HTTP_REQ_POST && !req->data) + return NULL; + if (req->type == HTTP_REQ_PUT && !req->data) + return NULL; + + @http_response* resp = req->response; + + U8* buf = NULL; + U8* headers_buf = ""; + I64 cnt = 1; + I64 len = NULL; + + buf = CAlloc(HTTP_MIN_REQUEST_BUFFER_SIZE, erythros_mem_task); + if (req->headers) { + headers_buf = CAlloc(HTTP_MIN_REQUEST_BUFFER_SIZE, erythros_mem_task); + JsonKey* key = req->headers->keys; + while (key) { + StrPrint(headers_buf + StrLen(headers_buf), "%s: %s\r\n", key->name, key->value); + key = key->next; + } + } + + switch (req->type) { + case HTTP_REQ_GET: + StrPrint(buf, + "GET %s%s HTTP/1.0\r\n" + "Host: %s\r\n" + "%s" + "User-Agent: " SEDECIM_USER_AGENT_STRING + "\r\n\r\n", + req->url->path, req->url->query, req->url->host, headers_buf); + break; + case HTTP_REQ_HEAD: + StrPrint(buf, + "HEAD %s%s HTTP/1.0\r\n" + "Host: %s\r\n" + "%s" + "User-Agent: " SEDECIM_USER_AGENT_STRING + "\r\n\r\n", + req->url->path, req->url->query, req->url->host, headers_buf); + break; + case HTTP_REQ_POST: + StrPrint(buf, + "POST %s%s HTTP/1.0\r\n" + "Host: %s\r\n" + "%s" + "User-Agent: " SEDECIM_USER_AGENT_STRING + "\r\n" + "Content-Length: %d\r\n\r\n", + req->url->path, req->url->query, req->url->host, headers_buf, + StrLen(req->data)); + StrPrint(buf + StrLen(buf), req->data); + break; + case HTTP_REQ_PUT: + StrPrint(buf, + "PUT %s%s HTTP/1.0\r\n" + "Host: %s\r\n" + "%s" + "User-Agent: " SEDECIM_USER_AGENT_STRING + "\r\n" + "Content-Length: %d\r\n\r\n", + req->url->path, req->url->query, req->url->host, headers_buf, + StrLen(req->data)); + StrPrint(buf + StrLen(buf), req->data); + break; + } + + TlsSocket* s = NULL; + resp->s = NULL; + + if (!StrCmp(req->url->scheme, "http://")) { + s = @tcp_socket_create(req->url->host, req->url->port); + resp->s = s; + while (s->state != TCP_SOCKET_STATE_ESTABLISHED) + Sleep(1); + } + + if (!StrCmp(req->url->scheme, "https://")) { + s = @tls_socket_create(req->url->host, req->url->port); + resp->s = s; + while (!@tls_established(s->ctx)) + Sleep(1); + } + + resp->state = HTTP_STATE_OPENED; + s->send(buf, StrLen(buf)); + while (cnt || s->state != TCP_SOCKET_STATE_CLOSED) { + cnt = s->receive(req->buf + len, 1024); + len += cnt; + switch (resp->state) { + case HTTP_STATE_LOADING: + resp->body.length += cnt; + break; + case HTTP_STATE_HEADERS_RECEIVED: + resp->body.length = (req->buf + len) - resp->body.data; + resp->state = HTTP_STATE_LOADING; + break; + case HTTP_STATE_OPENED: + if (@http_detect_response_headers(req->buf, len)) { + @http_parse_response_headers(resp, req->buf, len); + resp->state = HTTP_STATE_HEADERS_RECEIVED; + } + break; + } + Sleep(1); + } + if (!resp->headers_parsed) + @http_parse_response_headers(resp, req->buf, len); + resp->state = HTTP_STATE_DONE; + req->buf[len] = NULL; + Free(buf); + if (StrLen(headers_buf) > 0) { + Free(headers_buf); + } + s->close(); + resp->s = NULL; + Free(req); + return len; +} + +Bool @http_scheme_is_https(@http_url* url) +{ + if (!url || !url->scheme) + return FALSE; + return !MemCmp(url->scheme, "https", 5); +} + +@http_response* @http_get(@http_url* url, U8* buf, U64 return_req = NULL, JsonObject* headers = NULL) +{ + @http_response* resp = CAlloc(sizeof(@http_response), erythros_mem_task); + @http_request* req = CAlloc(sizeof(@http_request), erythros_mem_task); + if (return_req) + MemCpy(return_req, &req, sizeof(U64)); + req->url = url; + req->buf = buf; + req->type = HTTP_REQ_GET; + req->headers = headers; + req->response = resp; + Spawn(&@http_req, req, "HTTPGetRequest"); + return resp; +} + +@http_response* @http_head(@http_url* url, U8* buf, JsonObject* headers = NULL) +{ + @http_response* resp = CAlloc(sizeof(@http_response), erythros_mem_task); + @http_request* req = CAlloc(sizeof(@http_request), erythros_mem_task); + req->url = url; + req->buf = buf; + req->type = HTTP_REQ_HEAD; + req->headers = headers; + req->response = resp; + Spawn(&@http_req, req, "HTTPHeadRequest"); + return resp; +} + +@http_response* @http_post(@http_url* url, U8* buf, U8* data, JsonObject* headers = NULL) +{ + @http_response* resp = CAlloc(sizeof(@http_response), erythros_mem_task); + @http_request* req = CAlloc(sizeof(@http_request), erythros_mem_task); + req->url = url; + req->buf = buf; + req->type = HTTP_REQ_POST; + req->headers = headers; + req->data = data; + req->response = resp; + Spawn(&@http_req, req, "HTTPPostRequest"); + return resp; +} + +@http_response* @http_put(@http_url* url, U8* buf, U8* data, JsonObject* headers = NULL) +{ + @http_response* resp = CAlloc(sizeof(@http_response), erythros_mem_task); + @http_request* req = CAlloc(sizeof(@http_request), erythros_mem_task); + req->url = url; + req->buf = buf; + req->type = HTTP_REQ_PUT; + req->headers = headers; + req->data = data; + req->response = resp; + Spawn(&@http_req, req, "HTTPPutRequest"); + return resp; +} + +class @http +{ + @http_response* (*Get)(@http_url* url, U8* buf, U64* req = NULL, JsonObject* headers = NULL); + @http_response* (*Head)(@http_url* url, U8* buf, JsonObject* headers = NULL); + @http_response* (*Post)(@http_url* url, U8* buf, U8* data, JsonObject* headers = NULL); + @http_response* (*Put)(@http_url* url, U8* buf, U8* data, JsonObject* headers = NULL); +}; + +@http Http; + +Http.Get = &@http_get; +Http.Head = &@http_head; +Http.Post = &@http_post; +Http.Put = &@http_put; + +Bool @http_is_resource_cached(U8* src, U8* cache_directory = HTTP_CACHE_DIRECTORY) +{ + U8 buf[512]; + U8* src_md5 = md5_string(src, StrLen(src)); + StrCpy(buf, cache_directory); + StrPrint(buf + StrLen(buf), "/%s", src_md5); + Free(src_md5); + return FileFind(buf); +} + +U0 @http_cache_resource(U8* src, U8* data, I64 size, U8* cache_directory = HTTP_CACHE_DIRECTORY) +{ + U8 buf[512]; + U8* src_md5 = md5_string(src, StrLen(src)); + StrCpy(buf, cache_directory); + StrPrint(buf + StrLen(buf), "/%s", src_md5); + Free(src_md5); + FileWrite(buf, data, size); +} + +U8* @http_get_cached_resource_filename(U8* src, U8* cache_directory = HTTP_CACHE_DIRECTORY) +{ + U8* buf = CAlloc(512, erythros_mem_task); + U8* src_md5 = md5_string(src, StrLen(src)); + StrCpy(buf, cache_directory); + StrPrint(buf + StrLen(buf), "/%s", src_md5); + Free(src_md5); + return buf; +} + +U0 @http_init_tmp_and_cache_directories() +{ + if (!FileFind(HTTP_TMP_DIRECTORY)) + DirMk(HTTP_TMP_DIRECTORY); + if (!FileFind(HTTP_CACHE_DIRECTORY)) + DirMk(HTTP_CACHE_DIRECTORY); +} + +@http_response* fetch(U8* url_string, U8* fetch_buffer) +{ + if (!url_string || !fetch_buffer) + return NULL; + HttpUrl* url = @http_parse_url(url_string); + if (!url) + return NULL; + @http_response* resp = Http.Get(url, fetch_buffer); + while (resp->state != HTTP_STATE_DONE) + Sleep(1); + return resp; +} + +I64 curl(U8* url_string) +{ + if (!url_string) + return 0; + U8* fetch_buffer = CAlloc(HTTP_FETCH_BUFFER_SIZE, erythros_mem_task); + @http_response* resp = fetch(url_string, fetch_buffer); + if (!resp) + return 0; + if (resp->body.length) { + U8* buf = resp->body.data; + while (*buf) { + if (*buf == '\d') + "\d\d"; + else + "%c", *buf; + ++buf; + } + "\n"; + } + Free(fetch_buffer); + return resp->body.length; +} + +I64 download(U8* path, U8* url_string) +{ + if (!path || !url_string) + return 0; + U8* fetch_buffer = CAlloc(HTTP_FETCH_BUFFER_SIZE, erythros_mem_task); + @http_response* resp = fetch(url_string, fetch_buffer); + if (!resp) + return 0; + if (resp->body.length) { + FileWrite(path, resp->body.data, resp->body.length); + } + Free(fetch_buffer); + return resp->body.length; +} + +"http "; diff --git a/System/Libraries/Image.HC b/System/Libraries/Image.HC new file mode 100644 index 0000000..09d172e --- /dev/null +++ b/System/Libraries/Image.HC @@ -0,0 +1,55 @@ +class @image +{ + Context2D* (*FileToContext2D)(U8* filepath); + Context2D* (*BufferToContext2D)(U8* buffer, I64 size); +}; + +@image Image; + +Context2D* @image_buffer_to_context2d(U8* buffer, I64 size) +{ + if (!buffer || !size) { + return NULL; + } + I32 x; + I32 y; + I32 comp; + I32 code = @stbi_info_from_memory(buffer, size, &x, &y, &comp); + if (code != 1) { + return NULL; + } + U8* pixels = @stbi_load_from_memory(buffer, size, &x, &y, &comp, 4); + if (!pixels) { + return NULL; + } + Context2D* ctx = CAlloc(sizeof(Context2D)); + ctx->width = x; + ctx->height = y; + ctx->bpp = 32; + ctx->fb = pixels; + I64 i; + for (i = 0; i < x * y; i++) { + ctx->fb(U32*)[i] = @image_pixel_flip_rgb_bgr(ctx->fb(U32*)[i]); + } + return ctx; +} + +Context2D* @image_file_to_context2d(U8* filepath) +{ + if (!FileFind(filepath)) { + return NULL; + } + I64 size = NULL; + U8* buffer = FileRead(filepath, &size); + if (!buffer || !size) { + return NULL; + } + Context2D* ctx = @image_buffer_to_context2d(buffer, size); + Free(buffer); + return ctx; +} + +Image.FileToContext2D = &@image_file_to_context2d; +Image.BufferToContext2D = &@image_buffer_to_context2d; + +"image "; diff --git a/System/Libraries/Ipc.HC b/System/Libraries/Ipc.HC new file mode 100644 index 0000000..cf6550a --- /dev/null +++ b/System/Libraries/Ipc.HC @@ -0,0 +1,54 @@ +#define ipc user_data.u32[0] +#define IPC_QUEUE_SIZE 1024 +#define IPC_ENQUEUE_LIMIT 16 + +class IpcMessage { + CTask* client; + I64 type; + U64 payload; + I64 i64; +}; + +class @ipc +{ + U0 (*InitQueue)(CTask* task); + IpcMessage* (*MsgRecv)(); + U0 (*MsgSend)(CTask* task, IpcMessage* msg); +}; + +U0 @ipc_queue_init(CTask* task) +{ // Initialize a task's IpcMessage Queue + MemSetU32(task->pad, 0, 1); + if (!task->ipc) { + task->ipc = FifoI64New(IPC_QUEUE_SIZE, task->code_heap); + } +} + +IpcMessage* @ipc_msg_recv() +{ // Receive a IpcMessage from current task's + // message queue. + U64 msg_ptr; + if (!FifoI64Cnt(Fs->ipc)) + return FALSE; + FifoI64Rem(Fs->ipc, &msg_ptr); + return msg_ptr; +} + +U0 @ipc_msg_send( + CTask* task, + IpcMessage* msg) +{ // Send a IpcMessage to a task (client or server) + if (FifoI64Cnt(task->ipc) > IPC_ENQUEUE_LIMIT) { + Free(msg); + return; + } + FifoI64Ins(task->ipc, msg); +} + +@ipc Ipc; + +Ipc.InitQueue = &@ipc_queue_init; +Ipc.MsgRecv = &@ipc_msg_recv; +Ipc.MsgSend = &@ipc_msg_send; + +"ipc "; diff --git a/System/Libraries/Json.HC b/System/Libraries/Json.HC new file mode 100644 index 0000000..4d432fb --- /dev/null +++ b/System/Libraries/Json.HC @@ -0,0 +1,1550 @@ +#define JSON_SAME -1 +#define JSON_UNDEFINED 0 +#define JSON_OBJECT 1 +#define JSON_ARRAY 2 +#define JSON_STRING 3 +#define JSON_NUMBER 4 +#define JSON_BOOLEAN 5 +#define JSON_NULL 6 +#define JSON_HTML 7 + +#define JSON_ELEMENT_IS_KEY 1 +#define JSON_ELEMENT_IS_ITEM 2 + +#define JSON_STATE_OBJECT_OR_ARRAY 0 + +#define JSON_STATE_OBJECT 100 +#define JSON_STATE_OBJECT_KEY 101 +#define JSON_STATE_OBJECT_SEPARATOR 102 +#define JSON_STATE_OBJECT_TYPE 103 +#define JSON_STATE_OBJECT_NEXT 104 + +#define JSON_STATE_OBJECT_OBJECT 105 +#define JSON_STATE_OBJECT_ARRAY 106 +#define JSON_STATE_OBJECT_STRING 107 +#define JSON_STATE_OBJECT_NUMBER 108 +#define JSON_STATE_OBJECT_BOOLEAN 109 +#define JSON_STATE_OBJECT_NULL 110 + +#define JSON_STATE_ARRAY 200 +#define JSON_STATE_ARRAY_TYPE 201 +#define JSON_STATE_ARRAY_NEXT 202 + +#define JSON_STATE_ARRAY_OBJECT 203 +#define JSON_STATE_ARRAY_ARRAY 204 +#define JSON_STATE_ARRAY_STRING 205 +#define JSON_STATE_ARRAY_NUMBER 206 +#define JSON_STATE_ARRAY_BOOLEAN 207 +#define JSON_STATE_ARRAY_NULL 208 + +#define JSON_PARSER_FIFO_SIZE 32768 + +#define JSON_WRAPPER_MAGIC_NUMBER 0xDEADC0DEDEADC0DE + +#define JSON_SIG 0xFABACEAE + +class @json_stringify_string +{ + I64 length; + U8* value; + I64 capacity; + CTask* mem_task; +} + +class @json_element +{ + U32 sig; + @json_element* prev; + @json_element* next; + I64 type; +}; + +class @json_key : @json_element +{ + U8* name; + U64 value; +}; + +class @json_item : @json_element { U64 value; }; + +class @json_object : @json_element +{ + I64 length; + @json_key* keys; + CTask* mem_task; +}; + +class @json_array : @json_element +{ + I64 length; + @json_item* items; + @json_item* last_item; + CTask* mem_task; +}; + +extern class @json_callable_object; + +class @json_callable_array : @json_array +{ + U64 (*@)(I64 index, Bool return_item = FALSE); + @json_callable_array* (*a)(I64 index, Bool return_item = FALSE); + @json_callable_object* (*o)(I64 index, Bool return_item = FALSE); + U0 (*append)(U64 value, I64 type = NULL); + Bool (*contains)(U64 value, I64 type = NULL, Bool match_case = FALSE); + U0 (*insert)(I64 index, U64 value, I64 type = NULL); + U0 (*prepend)(U64 value, I64 type = NULL); + U0 (*remove)(I64 index); +}; + +class @json_callable_object : @json_object +{ + U64 (*@)(U8* key, Bool return_key = FALSE); + @json_callable_array* (*a)(U8* key, Bool return_key = FALSE); + @json_callable_object* (*o)(U8* key, Bool return_key = FALSE); + U0 (*set)(U8* key, U64 value, I64 type = JSON_SAME); + U0 (*unset)(U8* key); +}; + +class @json_parser +{ + U8* stream; + U8 token; + CFifoU8* consumed; + I64 pos; + I64 state; + Bool debug; + CTask* mem_task; +}; + +#define JsonArray @json_callable_array +#define JsonElement @json_element +#define JsonItem @json_item +#define JsonKey @json_key +#define JsonObject @json_callable_object + +U0 @json_debug_parser_state(@json_parser* parser) +{ + switch (parser->state) { + case JSON_STATE_OBJECT: + "JSON_STATE_OBJECT\n"; + break; + case JSON_STATE_OBJECT_KEY: + "JSON_STATE_OBJECT_KEY\n"; + break; + case JSON_STATE_OBJECT_SEPARATOR: + "JSON_STATE_OBJECT_SEPARATOR\n"; + break; + case JSON_STATE_OBJECT_TYPE: + "JSON_STATE_OBJECT_TYPE\n"; + break; + case JSON_STATE_OBJECT_NEXT: + "JSON_STATE_OBJECT_NEXT\n"; + break; + case JSON_STATE_OBJECT_STRING: + "JSON_STATE_OBJECT_STRING\n"; + break; + case JSON_STATE_OBJECT_NUMBER: + "JSON_STATE_OBJECT_NUMBER\n"; + break; + case JSON_STATE_ARRAY: + "JSON_STATE_ARRAY\n"; + break; + case JSON_STATE_ARRAY_TYPE: + "JSON_STATE_ARRAY_TYPE\n"; + break; + case JSON_STATE_ARRAY_NEXT: + "JSON_STATE_ARRAY_NEXT\n"; + break; + case JSON_STATE_ARRAY_STRING: + "JSON_STATE_ARRAY_STRING\n"; + break; + case JSON_STATE_ARRAY_NUMBER: + "JSON_STATE_ARRAY_NUMBER\n"; + break; + } +} + +@json_item* @json_create_item(U64 value, I64 type = NULL, CTask* mem_task) +{ + @json_item* item = CAlloc(sizeof(@json_item), mem_task); + item->sig = JSON_SIG; + item->type = type; + if (!item->type) { + if (value(@json_element*)->sig == JSON_SIG) { + item->type = value(@json_element*)->type; + } else if (value > 0x1000) { + item->type = JSON_STRING; + } else { + item->type = JSON_BOOLEAN; + value = value != 0; + } + } + if (item->type == JSON_STRING) + item->value = StrNew(value, mem_task); + else + item->value = value; + return item; +} + +U0 @json_append_item(@json_array* arr, U64 value, I64 type = NULL) +{ + if (!arr) + return; + if (arr->type != JSON_ARRAY) + return; + @json_item* append_item = @json_create_item(value, type, arr->mem_task); + @json_item* item = arr->last_item; + if (!item) { + append_item->prev = NULL; + append_item->next = NULL; + arr->items = append_item; + arr->last_item = append_item; + arr->length++; + return; + } + item->next = append_item; + append_item->prev = item; + arr->last_item = append_item; + arr->length++; +} + +U8* @json_string_from_fifo(CFifoU8* f, CTask* mem_task) +{ + U8 ch; + I64 i = 0; + U8* str = CAlloc(FifoU8Cnt(f) + 1, mem_task); + while (FifoU8Cnt(f)) { + FifoU8Rem(f, &ch); + str[i] = ch; + i++; + } + FifoU8Flush(f); + return str; +} + +U0 @json_insert_key(@json_object* obj, @json_key* key) +{ + if (!obj) + return; + if (!obj->keys) { + obj->keys = key; + obj->length++; + return; + } + @json_key* k = obj->keys; + while (k->next) + k = k->next; + k->next = key; + key->prev = k; + obj->length++; +} + +U0 @json_rstrip(U8* str) +{ + if (!str || !StrLen(str)) + return; + I64 r_pos = StrLen(str) - 1; + while (str[r_pos] == ' ' || str[r_pos] == '\r' || str[r_pos] == '\n' || str[r_pos] == '\t') { + str[r_pos] = NULL; + --r_pos; + } +} + +extern @json_element* @json_parse_object_or_array(@json_parser* parser); + +I64 @json_unescape_char(I64 escape_ch) +{ + I64 return_ch = escape_ch; + + // FIXME: unicode + switch (escape_ch) { + case 'b': + return_ch = 0x08; + break; + case 'f': + return_ch = 0x0c; + break; + case 'n': + return_ch = 0x0a; + break; + case 'r': + return_ch = 0x0d; + break; + case 't': + return_ch = 0x09; + break; + default: + break; + } + + return return_ch; +} + +U0 @json_parse_object(@json_parser* parser, @json_object* obj) +{ + @json_key* key = NULL; + while (1) { + switch (parser->stream[parser->pos]) { + case '\\': + // NOTE: We keep escaped unicode in its original form, and let the program ingesting the JSON handle the UTF-8 conversion. + if (parser->state == JSON_STATE_OBJECT_STRING) { + if (parser->stream[parser->pos + 1] == 'u') { + FifoU8Ins(parser->consumed, '\\'); + } else { + FifoU8Ins(parser->consumed, @json_unescape_char(parser->stream[++parser->pos])); + } + } + break; + case '}': + switch (parser->state) { + case JSON_STATE_OBJECT_KEY: + case JSON_STATE_OBJECT_STRING: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_OBJECT_NUMBER: + key->value = @json_string_from_fifo(parser->consumed, parser->mem_task); + @json_rstrip(key->value); + key->value = Str2F64(key->value); + @json_insert_key(obj, key); + return; + break; + case JSON_STATE_OBJECT_BOOLEAN: + key->value = @json_string_from_fifo(parser->consumed, parser->mem_task); + @json_rstrip(key->value); + if (StrCmp("true", key->value) && StrCmp("false", key->value)) { + PrintErr("@json_parse_object: Illegal boolean value at position %d", + parser->pos); + while (1) + Sleep(1); + } + if (!StrCmp("true", key->value)) + key->value = TRUE; + else + key->value = FALSE; + @json_insert_key(obj, key); + return; + break; + case JSON_STATE_OBJECT_NULL: + key->value = @json_string_from_fifo(parser->consumed, parser->mem_task); + @json_rstrip(key->value); + if (StrCmp("null", key->value)) { + PrintErr("@json_parse_object: Illegal null value at position %d", + parser->pos); + while (1) + Sleep(1); + } + key->value = NULL; + @json_insert_key(obj, key); + return; + break; + case JSON_STATE_OBJECT: + case JSON_STATE_OBJECT_NEXT: + return; + break; + } + break; + case ',': + switch (parser->state) { + case JSON_STATE_OBJECT_KEY: + case JSON_STATE_OBJECT_STRING: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_OBJECT_NUMBER: + key->value = @json_string_from_fifo(parser->consumed, parser->mem_task); + key->value = Str2F64(key->value); + @json_insert_key(obj, key); + parser->state = JSON_STATE_OBJECT; + break; + case JSON_STATE_OBJECT_BOOLEAN: + key->value = @json_string_from_fifo(parser->consumed, parser->mem_task); + @json_rstrip(key->value); + if (StrCmp("true", key->value) && StrCmp("false", key->value)) { + PrintErr("@json_parse_object: Illegal boolean value at position %d", + parser->pos); + while (1) + Sleep(1); + } + if (!StrCmp("true", key->value)) + key->value = TRUE; + else + key->value = FALSE; + @json_insert_key(obj, key); + parser->state = JSON_STATE_OBJECT; + break; + case JSON_STATE_OBJECT_NULL: + key->value = @json_string_from_fifo(parser->consumed, parser->mem_task); + @json_rstrip(key->value); + if (StrCmp("null", key->value)) { + PrintErr("@json_parse_object: Illegal null value at position %d", + parser->pos); + while (1) + Sleep(1); + } + key->value = NULL; + @json_insert_key(obj, key); + parser->state = JSON_STATE_OBJECT; + break; + case JSON_STATE_OBJECT_NEXT: + parser->state = JSON_STATE_OBJECT; + break; + } + break; + case ':': + switch (parser->state) { + case JSON_STATE_OBJECT_KEY: + case JSON_STATE_OBJECT_STRING: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_OBJECT_SEPARATOR: + parser->state = JSON_STATE_OBJECT_TYPE; + break; + } + break; + case '[': + switch (parser->state) { + case JSON_STATE_OBJECT_KEY: + case JSON_STATE_OBJECT_STRING: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_OBJECT_TYPE: + key->type = JSON_ARRAY; + key->value = @json_parse_object_or_array(parser); + @json_insert_key(obj, key); + parser->state = JSON_STATE_OBJECT_NEXT; + break; + } + break; + case '{': + switch (parser->state) { + case JSON_STATE_OBJECT_KEY: + case JSON_STATE_OBJECT_STRING: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_OBJECT_TYPE: + key->type = JSON_OBJECT; + key->value = @json_parse_object_or_array(parser); + @json_insert_key(obj, key); + parser->state = JSON_STATE_OBJECT_NEXT; + break; + } + break; + case '"': + switch (parser->state) { + case JSON_STATE_OBJECT_STRING: + key->value = @json_string_from_fifo(parser->consumed, parser->mem_task); + @json_insert_key(obj, key); + parser->state = JSON_STATE_OBJECT_NEXT; + break; + case JSON_STATE_OBJECT_TYPE: + key->type = JSON_STRING; + parser->state = JSON_STATE_OBJECT_STRING; + break; + case JSON_STATE_OBJECT_KEY: + key->name = @json_string_from_fifo(parser->consumed, parser->mem_task); + parser->state = JSON_STATE_OBJECT_SEPARATOR; + break; + case JSON_STATE_OBJECT: + key = CAlloc(sizeof(@json_key), parser->mem_task); + key->sig = JSON_SIG; + parser->state = JSON_STATE_OBJECT_KEY; + break; + } + break; + case '-': + case '0' ... '9': + case '.': + switch (parser->state) { + case JSON_STATE_OBJECT_KEY: + case JSON_STATE_OBJECT_STRING: + case JSON_STATE_OBJECT_NUMBER: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_OBJECT_TYPE: + key->type = JSON_NUMBER; + parser->state = JSON_STATE_OBJECT_NUMBER; + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + } + break; + case 't': + case 'f': + switch (parser->state) { + case JSON_STATE_OBJECT_KEY: + case JSON_STATE_OBJECT_STRING: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_OBJECT_TYPE: + key->type = JSON_BOOLEAN; + parser->state = JSON_STATE_OBJECT_BOOLEAN; + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + } + break; + case 'n': + switch (parser->state) { + case JSON_STATE_OBJECT_KEY: + case JSON_STATE_OBJECT_STRING: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_OBJECT_TYPE: + key->type = JSON_NULL; + parser->state = JSON_STATE_OBJECT_NULL; + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + } + break; + default: + switch (parser->state) { + case JSON_STATE_OBJECT_KEY: + case JSON_STATE_OBJECT_STRING: + case JSON_STATE_OBJECT_BOOLEAN: + case JSON_STATE_OBJECT_NULL: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + } + break; + } + if (parser->debug) { + @json_debug_parser_state(parser); + "Object: %08X, Pos: %d, Token: %c\n", obj, parser->pos, + parser->stream[parser->pos]; + Sleep(50); + } + parser->pos++; + } +} + +U0 @json_parse_array(@json_parser* parser, @json_array* arr) +{ + U64 value = NULL; + while (1) { + if (parser->state == JSON_STATE_ARRAY) { + switch (parser->stream[parser->pos]) { + case 0: + PrintErr("@json_parse_array: Malformed array"); + while (1) + Sleep(1); + break; + case ']': + return; + break; + } + parser->state = JSON_STATE_ARRAY_TYPE; + } + switch (parser->stream[parser->pos]) { + case '\\': + // NOTE: We keep escaped unicode in its original form, and let the program ingesting the JSON handle the UTF-8 conversion. + if (parser->state == JSON_STATE_ARRAY_STRING) { + if (parser->stream[parser->pos + 1] == 'u') { + FifoU8Ins(parser->consumed, '\\'); + } else { + FifoU8Ins(parser->consumed, @json_unescape_char(parser->stream[++parser->pos])); + } + } + break; + case ']': + switch (parser->state) { + case JSON_STATE_ARRAY_STRING: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_ARRAY_NUMBER: + value = @json_string_from_fifo(parser->consumed, parser->mem_task); + @json_rstrip(value); + value = Str2F64(value); + @json_append_item(arr, value, JSON_NUMBER); + return; + break; + case JSON_STATE_ARRAY_BOOLEAN: + value = @json_string_from_fifo(parser->consumed, parser->mem_task); + @json_rstrip(value); + if (StrCmp("true", value) && StrCmp("false", value)) { + PrintErr("@json_parse_array: Illegal boolean value at position %d", + parser->pos); + while (1) + Sleep(1); + } + if (!StrCmp("true", value)) + value = TRUE; + else + value = FALSE; + @json_append_item(arr, value, JSON_BOOLEAN); + break; + case JSON_STATE_ARRAY_NULL: + value = @json_string_from_fifo(parser->consumed, parser->mem_task); + @json_rstrip(value); + if (StrCmp("null", value)) { + PrintErr("@json_parse_array: Illegal null value at position %d", + parser->pos); + while (1) + Sleep(1); + } + value = NULL; + @json_append_item(arr, value, JSON_NULL); + break; + case JSON_STATE_ARRAY: + case JSON_STATE_ARRAY_NEXT: + return; + break; + } + break; + case ',': + switch (parser->state) { + case JSON_STATE_ARRAY_STRING: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_ARRAY_NUMBER: + value = @json_string_from_fifo(parser->consumed, parser->mem_task); + value = Str2F64(value); + @json_append_item(arr, value, JSON_NUMBER); + parser->state = JSON_STATE_ARRAY; + break; + case JSON_STATE_ARRAY_BOOLEAN: + value = @json_string_from_fifo(parser->consumed, parser->mem_task); + @json_rstrip(value); + if (StrCmp("true", value) && StrCmp("false", value)) { + PrintErr("@json_parse_array: Illegal boolean value at position %d", + parser->pos); + while (1) + Sleep(1); + } + if (!StrCmp("true", value)) + value = TRUE; + else + value = FALSE; + @json_append_item(arr, value, JSON_BOOLEAN); + parser->state = JSON_STATE_ARRAY; + break; + case JSON_STATE_ARRAY_NULL: + value = @json_string_from_fifo(parser->consumed, parser->mem_task); + @json_rstrip(value); + if (StrCmp("null", value)) { + PrintErr("@json_parse_array: Illegal null value at position %d", + parser->pos); + while (1) + Sleep(1); + } + value = NULL; + @json_append_item(arr, value, JSON_NULL); + parser->state = JSON_STATE_ARRAY; + break; + case JSON_STATE_ARRAY_NEXT: + parser->state = JSON_STATE_ARRAY; + break; + } + break; + case '[': + switch (parser->state) { + case JSON_STATE_ARRAY_STRING: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_ARRAY_TYPE: + value = @json_parse_object_or_array(parser); + @json_append_item(arr, value, JSON_ARRAY); + parser->state = JSON_STATE_ARRAY_NEXT; + break; + } + break; + case '{': + switch (parser->state) { + case JSON_STATE_ARRAY_STRING: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_ARRAY_TYPE: + value = @json_parse_object_or_array(parser); + @json_append_item(arr, value, JSON_OBJECT); + parser->state = JSON_STATE_ARRAY_NEXT; + break; + } + break; + case '"': + switch (parser->state) { + case JSON_STATE_ARRAY_STRING: + value = @json_string_from_fifo(parser->consumed, parser->mem_task); + @json_append_item(arr, value, JSON_STRING); + parser->state = JSON_STATE_ARRAY_NEXT; + break; + case JSON_STATE_ARRAY_TYPE: + parser->state = JSON_STATE_ARRAY_STRING; + break; + } + break; + case '-': + case '0' ... '9': + case '.': + switch (parser->state) { + case JSON_STATE_ARRAY_STRING: + case JSON_STATE_ARRAY_NUMBER: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_ARRAY_TYPE: + parser->state = JSON_STATE_ARRAY_NUMBER; + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + } + break; + case 't': + case 'f': + switch (parser->state) { + case JSON_STATE_ARRAY_STRING: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_ARRAY_TYPE: + parser->state = JSON_STATE_ARRAY_BOOLEAN; + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + } + break; + case 'n': + switch (parser->state) { + case JSON_STATE_ARRAY_STRING: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + case JSON_STATE_OBJECT_TYPE: + parser->state = JSON_STATE_ARRAY_NULL; + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + } + break; + default: + switch (parser->state) { + case JSON_STATE_ARRAY_STRING: + case JSON_STATE_ARRAY_BOOLEAN: + case JSON_STATE_ARRAY_NULL: + FifoU8Ins(parser->consumed, parser->stream[parser->pos]); + break; + } + break; + } + if (parser->debug) { + @json_debug_parser_state(parser); + "Array: %08X, Pos: %d, Token: %c\n", arr, parser->pos, + parser->stream[parser->pos]; + Sleep(50); + } + parser->pos++; + } +} + +extern @json_callable_array* @json_create_callable_array(@json_array* arr); +extern @json_callable_object* @json_create_callable_object(@json_object* obj); + +@json_element* @json_parse_object_or_array(@json_parser* parser) +{ + @json_element* el = CAlloc(sizeof(@json_array), parser->mem_task); + el->sig = JSON_SIG; + while (1) { + switch (parser->stream[parser->pos]) { + case 0: + return el; + break; + case ' ': + case '\r': + case '\n': + case '\t': + break; + case '{': + el->type = JSON_OBJECT; + el(@json_object*)->mem_task = parser->mem_task; + parser->pos++; + parser->state = JSON_STATE_OBJECT; + @json_parse_object(parser, el); + return @json_create_callable_object(el); + break; + case '[': + el->type = JSON_ARRAY; + el(@json_array*)->mem_task = parser->mem_task; + parser->pos++; + parser->state = JSON_STATE_ARRAY; + @json_parse_array(parser, el); + return @json_create_callable_array(el); + break; + default: + PrintErr("@json_parse_object_or_array: Invalid token: '%c'", parser->stream[parser->pos]); + while (1) { + Sleep(1); + }; + break; + } + parser->pos++; + Sleep(1); + } +} + +@json_element* @json_parse(U8* str, CTask* mem_task) +{ + if (!str || !mem_task) { + return NULL; + } + @json_parser* parser = CAlloc(sizeof(@json_parser), mem_task); + parser->mem_task = mem_task; + parser->consumed = FifoU8New(JSON_PARSER_FIFO_SIZE, parser->mem_task); + parser->stream = str; + return @json_parse_object_or_array(parser); +} + +U0 @json_prepend_item(@json_array* arr, U64 value, I64 type) +{ + if (!arr) + return; + if (arr->type != JSON_ARRAY) + return; + @json_item* prepend_item = @json_create_item(value, type, arr->mem_task); + @json_item* items = arr->items; + arr->items = prepend_item; + arr->items->next = items; + arr->length++; +} + +U0 @json_insert_item(@json_array* arr, I64 index, U64 value, I64 type) +{ + if (!arr) + return; + if (arr->type != JSON_ARRAY) + return; + if (index <= 0) { + @json_prepend_item(arr, value, type); + return; + } + if (index >= arr->length) { + @json_append_item(arr, value, type); + return; + } + @json_item* insert_item = @json_create_item(value, type, arr->mem_task); + @json_item* insert_at_item = arr->items; + @json_item* insert_after_item = NULL; + I64 i; + for (i = 0; i < index; i++) + insert_at_item = insert_at_item->next; + insert_after_item = insert_at_item->prev; + insert_after_item->next = insert_item; + insert_item->prev = insert_after_item; + insert_item->next = insert_at_item; + insert_at_item->prev = insert_item; + arr->length++; +} + +U0 @json_stringify_check_capacity(@json_stringify_string* str) +{ + if (str->length >= str->capacity) { + str->capacity *= 2; + U8* new_value = CAlloc(str->capacity * 2, str->mem_task); + MemCpy(new_value, str->value, str->length); + str->value = new_value; + } +} + +U0 @json_stringify_append_char(@json_stringify_string* str, U8 char) +{ + // FIXME: unicode + switch (char) { + case '\\': + str->value[str->length++] = '\\'; + str->value[str->length++] = '\\'; + break; + case 0x08: + str->value[str->length++] = '\\'; + str->value[str->length++] = 'b'; + break; + case 0x0c: + str->value[str->length++] = '\\'; + str->value[str->length++] = 'f'; + break; + case 0x0a: + str->value[str->length++] = '\\'; + str->value[str->length++] = 'n'; + break; + case 0x0d: + str->value[str->length++] = '\\'; + str->value[str->length++] = 'r'; + break; + case 0x09: + str->value[str->length++] = '\\'; + str->value[str->length++] = 't'; + break; + default: + str->value[str->length++] = char; + break; + } + str->value[str->length] = NULL; + @json_stringify_check_capacity(str); +} + +U0 @json_stringify_append_char_escape_quotes(@json_stringify_string* str, U8 char) +{ + // FIXME: unicode + switch (char) { + case '"': + str->value[str->length++] = '\\'; + str->value[str->length++] = '"'; + break; + case '\\': + str->value[str->length++] = '\\'; + str->value[str->length++] = '\\'; + break; + case 0x08: + str->value[str->length++] = '\\'; + str->value[str->length++] = 'b'; + break; + case 0x0c: + str->value[str->length++] = '\\'; + str->value[str->length++] = 'f'; + break; + case 0x0a: + str->value[str->length++] = '\\'; + str->value[str->length++] = 'n'; + break; + case 0x0d: + str->value[str->length++] = '\\'; + str->value[str->length++] = 'r'; + break; + case 0x09: + str->value[str->length++] = '\\'; + str->value[str->length++] = 't'; + break; + default: + str->value[str->length++] = char; + break; + } + str->value[str->length] = NULL; + @json_stringify_check_capacity(str); +} + +U0 @json_stringify_append_str(@json_stringify_string* str, U8* str2) +{ + while (*str2) { + // NOTE: We keep escaped unicode in its original form, and let the program ingesting the JSON handle the UTF-8 conversion. + if (*str2 == '\\' && *(str2 + 1) == 'u') { + str->value[str->length++] = '\\'; + str->value[str->length++] = 'u'; + str->value[str->length] = NULL; + str2++; + } else { + @json_stringify_append_char_escape_quotes(str, *str2); + } + str2++; + @json_stringify_check_capacity(str); + } +} + +U0 @json_stringify_append_number(@json_stringify_string* str, F64 num) +{ + U8 buf[256]; + MemSet(buf, 0, 256); + StrPrint(buf, "%.6f", num); + I64 i = StrLen(buf) - 1; + while (buf[i] == '0') { + buf[i] = NULL; + i--; + } + i = StrLen(buf) - 1; + if (buf[i] == '.') + buf[i] = NULL; + @json_stringify_append_str(str, buf); +} + +extern U0 @json_stringify_object_or_array(@json_stringify_string* str, @json_element* el); + +U0 @json_stringify_object(@json_stringify_string* str, @json_object* obj) +{ + @json_stringify_append_char(str, '{'); + @json_key* key = obj->keys; + while (key) { + @json_stringify_append_char(str, '"'); + @json_stringify_append_str(str, key->name); + @json_stringify_append_char(str, '"'); + @json_stringify_append_char(str, ':'); + switch (key->type) { + case JSON_OBJECT: + case JSON_ARRAY: + @json_stringify_object_or_array(str, key->value); + break; + case JSON_STRING: + @json_stringify_append_char(str, '"'); + @json_stringify_append_str(str, key->value); + @json_stringify_append_char(str, '"'); + break; + case JSON_NUMBER: + @json_stringify_append_number(str, key->value); + break; + case JSON_BOOLEAN: + @json_stringify_append_str(str, @t(key->value, "true", "false")); + break; + case JSON_NULL: + @json_stringify_append_str(str, "null"); + break; + default: + PrintErr("@json_stringify_object: Invalid element type: %d", key->type); + while (1) { + Sleep(1); + }; + } + if (key->next) + @json_stringify_append_char(str, ','); + key = key->next; + } + @json_stringify_append_char(str, '}'); +} + +U0 @json_stringify_array(@json_stringify_string* str, @json_array* arr) +{ + @json_stringify_append_char(str, '['); + @json_item* item = arr->items; + while (item) { + switch (item->type) { + case JSON_OBJECT: + case JSON_ARRAY: + @json_stringify_object_or_array(str, item->value); + break; + case JSON_STRING: + @json_stringify_append_char(str, '"'); + @json_stringify_append_str(str, item->value); + @json_stringify_append_char(str, '"'); + break; + case JSON_NUMBER: + @json_stringify_append_number(str, item->value); + break; + case JSON_BOOLEAN: + @json_stringify_append_str(str, @t(item->value, "true", "false")); + break; + case JSON_NULL: + @json_stringify_append_str(str, "null"); + break; + default: + PrintErr("@json_stringify_array: Invalid element type: %d", item->type); + while (1) { + Sleep(1); + }; + } + if (item->next) + @json_stringify_append_char(str, ','); + item = item->next; + } + @json_stringify_append_char(str, ']'); +} + +U0 @json_stringify_object_or_array(@json_stringify_string* str, @json_element* el) +{ + while (el) { + switch (el->type) { + case JSON_OBJECT: + @json_stringify_object(str, el); + break; + case JSON_ARRAY: + @json_stringify_array(str, el); + break; + default: + PrintErr("@json_stringify_object_or_array: Invalid element type: %d", el->type); + while (1) { + Sleep(1); + }; + break; + } + el = el->next; + } +} + +U8* @json_stringify(@json_element* el, CTask* mem_task) +{ + if (!el || !mem_task) { + return NULL; + } + @json_stringify_string* str = CAlloc(sizeof(@json_stringify_string), mem_task); + str->mem_task = mem_task; + str->capacity = 256; + str->value = CAlloc(str->capacity * 2, str->mem_task); + @json_stringify_object_or_array(str, el); + return str->value; +} + +U64 @json_get(@json_object* obj, U8* key, Bool return_key = FALSE) +{ + if (!obj || !key) + return NULL; + if (!obj->keys || obj->type != JSON_OBJECT) + return NULL; + @json_key* iter_key = obj->keys; + while (iter_key) { + if (!StrICmp(iter_key->name, key)) + if (return_key) + return iter_key; + else + return iter_key->value; + iter_key = iter_key->next; + } + return NULL; +} + +U0 @json_set(@json_object* obj, U8* key, U64 value, I64 type = JSON_SAME) +{ + if (!obj || !key || !type) + return; + if (obj->type != JSON_OBJECT) + return; + @json_key* iter_key = obj->keys; + while (iter_key) { + if (!StrCmp(iter_key->name, key)) { + if (type != JSON_SAME) + iter_key->type = type; + iter_key->value = value; + return; + } + iter_key = iter_key->next; + } + @json_key* new_key = CAlloc(sizeof(@json_key), obj->mem_task); + new_key->sig = JSON_SIG; + new_key->name = StrNew(key, obj->mem_task); + new_key->type = type; + if (new_key->type == JSON_STRING) + new_key->value = StrNew(value, obj->mem_task); + else + new_key->value = value; + @json_insert_key(obj, new_key); +} + +U0 @json_unset(@json_object* obj, U8* key) +{ + if (!obj || !key) + return; + if (obj->type != JSON_OBJECT) + return; + @json_key* iter_key = obj->keys; + @json_key* prev_key = NULL; + @json_key* next_key = NULL; + while (iter_key) { + if (!StrCmp(iter_key->name, key)) { + prev_key = iter_key->prev; + next_key = iter_key->next; + if (prev_key) + prev_key->next = next_key; + if (next_key) + next_key->prev = prev_key; + return; + } + iter_key = iter_key->next; + } +} + +U64 @json_callable_object_get_wrapper_function(U8* key, Bool return_key = FALSE) +{ + return @json_get(JSON_WRAPPER_MAGIC_NUMBER, key, return_key); +} + +U0 @json_callable_object_set_wrapper_function(U8* key, U64 value, I64 type = JSON_SAME) +{ + @json_set(JSON_WRAPPER_MAGIC_NUMBER, key, value, type); +} + +U0 @json_callable_object_unset_wrapper_function(U8* key) +{ + @json_unset(JSON_WRAPPER_MAGIC_NUMBER, key); +} + +@json_callable_object* @json_create_callable_object(@json_object* obj) +{ + @json_callable_object* cobj = CAlloc(sizeof(@json_callable_object), obj->mem_task); + MemCpy(cobj, obj, sizeof(@json_object)); + + // Create a copy of function and patch Get + U64 a; + I64 code_size = MSize(&@json_callable_object_get_wrapper_function); + cobj->@ = CAlloc(code_size, obj->mem_task->code_heap); + MemCpy(cobj->@, &@json_callable_object_get_wrapper_function, code_size); + + a = cobj->@; + a += 0x13; + MemSetI64(a, cobj, 1); + + a = cobj->@; + a += 0x1c; + @patch_call_rel32(a, &@json_get); + + // Create a copy of function and patch Set + code_size = MSize(&@json_callable_object_set_wrapper_function); + cobj->set = CAlloc(code_size, obj->mem_task->code_heap); + MemCpy(cobj->set, &@json_callable_object_set_wrapper_function, code_size); + + a = cobj->set; + a += 0x1a; + MemSetI64(a, cobj, 1); + + a = cobj->set; + a += 0x23; + @patch_call_rel32(a, &@json_set); + + // Create a copy of function and patch Unset + code_size = MSize(&@json_callable_object_unset_wrapper_function); + cobj->unset = CAlloc(code_size, obj->mem_task->code_heap); + MemCpy(cobj->unset, &@json_callable_object_unset_wrapper_function, code_size); + + a = cobj->unset; + a += 0x0c; + MemSetI64(a, cobj, 1); + + a = cobj->unset; + a += 0x15; + @patch_call_rel32(a, &@json_unset); + + cobj->a = cobj->@; + cobj->o = cobj->@; + + return cobj; +} + +@json_callable_object* @json_create_object(CTask* mem_task) +{ + if (!mem_task) { + return NULL; + } + @json_object* obj = CAlloc(sizeof(@json_object), mem_task); + obj->mem_task = mem_task; + obj->sig = JSON_SIG; + obj->type = JSON_OBJECT; + return @json_create_callable_object(obj); +} + +U64 @json_array_index(@json_array* arr, I64 index, Bool return_item = FALSE) +{ + if (!arr) + return NULL; + if (arr->type != JSON_ARRAY) + return NULL; + if (index < 0) + return NULL; + if (!arr->length) + return NULL; + if (index > 0 && index > arr->length - 1) + return NULL; + @json_item* item = arr->items; + if (!item) + return NULL; + I64 i; + for (i = 0; i < index; i++) + item = item->next; + if (return_item) + return item; + else + return item->value; +} + +Bool @json_array_contains(@json_array* arr, U64 value, I64 type = NULL, Bool match_case = FALSE) +{ + if (!arr) + return FALSE; + if (arr->type != JSON_ARRAY) + return FALSE; + if (!arr->length) + return FALSE; + + if (!type) { + if (value > 0x1000) { + type = JSON_STRING; + } else { + type = JSON_BOOLEAN; + } + } + + I64 i; + @json_item* item = NULL; + for (i = 0; i < arr->length; i++) { + item = @json_array_index(arr, i, TRUE); + if (item->type == type) { + switch (type) { + case JSON_STRING: + if (match_case) { + if (!StrCmp(value, item->value)) { + return TRUE; + } + } else { + if (!StrICmp(value, item->value)) { + return TRUE; + } + } + break; + case JSON_BOOLEAN: + case JSON_NULL: + case JSON_NUMBER: + if (item->value == value) { + return TRUE; + } + break; + default: + break; + } + } + } + return FALSE; +} + +U0 @json_remove_item(@json_array* arr, I64 index) +{ + if (!arr) + return; + if (arr->type != JSON_ARRAY) + return; + if (index < 0) + return; + if (!arr->length) + return; + if (index > 0 && index > arr->length - 1) + return; + @json_item* item = arr->items; + if (!item) + return; + @json_item* prev_item = NULL; + @json_item* next_item = NULL; + I64 i; + for (i = 0; i < index; i++) + item = item->next; + if (!index) { + arr->items = item->next; + goto @json_remove_item_final; + } + prev_item = item->prev; + next_item = item->next; + if (arr->last_item == item) + arr->last_item = item->prev; + prev_item->next = next_item; + if (next_item) + next_item->prev = prev_item; + @json_remove_item_final : --arr->length; + if (!arr->length) + arr->last_item = NULL; +} + +U64 @json_callable_array_index_wrapper_function(I64 index, Bool return_item = FALSE) +{ + return @json_array_index(JSON_WRAPPER_MAGIC_NUMBER, index, return_item); +} + +U0 @json_callable_array_append_wrapper_function(U64 value, I64 type = NULL) +{ + @json_append_item(JSON_WRAPPER_MAGIC_NUMBER, value, type); +} + +Bool @json_callable_array_contains_wrapper_function(U64 value, I64 type = NULL, Bool match_case = FALSE) +{ + return @json_array_contains(JSON_WRAPPER_MAGIC_NUMBER, value, type, match_case); +} + +U0 @json_callable_array_insert_wrapper_function(I64 index, U64 value, I64 type = NULL) +{ + @json_insert_item(JSON_WRAPPER_MAGIC_NUMBER, index, value, type); +} + +U0 @json_callable_array_prepend_wrapper_function(U64 value, I64 type = NULL) +{ + @json_prepend_item(JSON_WRAPPER_MAGIC_NUMBER, value, type); +} + +U0 @json_callable_array_remove_wrapper_function(I64 index) +{ + @json_remove_item(JSON_WRAPPER_MAGIC_NUMBER, index); +} + +@json_callable_array* @json_create_callable_array(@json_array* arr) +{ + // Alloc callable object and copy instance + @json_callable_array* carr = CAlloc(sizeof(@json_callable_array), arr->mem_task); + MemCpy(carr, arr, sizeof(@json_array)); + + // Create a copy of function and patch Index + U64 a; + I64 code_size = MSize(&@json_callable_array_index_wrapper_function); + carr->@ = CAlloc(code_size, arr->mem_task->code_heap); + MemCpy(carr->@, &@json_callable_array_index_wrapper_function, code_size); + + a = carr->@; + a += 0x13; + MemSetI64(a, carr, 1); + + a = carr->@; + a += 0x1c; + @patch_call_rel32(a, &@json_array_index); + + carr->a = carr->@; + carr->o = carr->@; + + // Create a copy of function and patch Append + code_size = MSize(&@json_callable_array_append_wrapper_function); + carr->append = CAlloc(code_size, arr->mem_task->code_heap); + MemCpy(carr->append, &@json_callable_array_append_wrapper_function, code_size); + + a = carr->append; + a += 0x12; + MemSetI64(a, carr, 1); + + a = carr->append; + a += 0x1b; + @patch_call_rel32(a, &@json_append_item); + + // Create a copy of function and patch Contains + code_size = MSize(&@json_callable_array_contains_wrapper_function); + carr->contains = CAlloc(code_size, arr->mem_task->code_heap); + MemCpy(carr->contains, &@json_callable_array_contains_wrapper_function, code_size); + + a = carr->contains; + a += 0x1b; + MemSetI64(a, carr, 1); + + a = carr->contains; + a += 0x24; + @patch_call_rel32(a, &@json_array_contains); + + // Create a copy of function and patch Prepend + code_size = MSize(&@json_callable_array_prepend_wrapper_function); + carr->prepend = CAlloc(code_size, arr->mem_task->code_heap); + MemCpy(carr->prepend, &@json_callable_array_prepend_wrapper_function, code_size); + + a = carr->prepend; + a += 0x12; + MemSetI64(a, carr, 1); + + a = carr->prepend; + a += 0x1b; + @patch_call_rel32(a, &@json_prepend_item); + + // Create a copy of function and patch Insert + code_size = MSize(&@json_callable_array_insert_wrapper_function); + carr->insert = CAlloc(code_size, arr->mem_task->code_heap); + MemCpy(carr->insert, &@json_callable_array_insert_wrapper_function, code_size); + + a = carr->insert; + a += 0x1a; + MemSetI64(a, carr, 1); + + a = carr->insert; + a += 0x23; + @patch_call_rel32(a, &@json_insert_item); + + // Create a copy of function and patch Remove + code_size = MSize(&@json_callable_array_remove_wrapper_function); + carr->remove = CAlloc(code_size, arr->mem_task->code_heap); + MemCpy(carr->remove, &@json_callable_array_remove_wrapper_function, code_size); + + a = carr->remove; + a += 0x0c; + MemSetI64(a, carr, 1); + + a = carr->remove; + a += 0x15; + @patch_call_rel32(a, &@json_remove_item); + + return carr; +} + +@json_array* @json_create_array(CTask* mem_task) +{ + if (!mem_task) { + return NULL; + } + @json_array* arr = CAlloc(sizeof(@json_array), mem_task); + arr->mem_task = mem_task; + arr->sig = JSON_SIG; + arr->type = JSON_ARRAY; + return @json_create_callable_array(arr); +} + +U64 @json_parse_file(U8* path, CTask* mem_task) +{ + if (!path || !mem_task || !FileFind(path)) { + return NULL; + } + U64 res = NULL; + U8* json_string = FileRead(path); + if (json_string) { + res = @json_parse(json_string, mem_task); + } + return res; +} + +U0 @json_dump_to_file(U8* path, @json_element* el, CTask* mem_task) +{ + if (!path || !el || !mem_task) + return; + U8* json_string = @json_stringify(el, mem_task); + FileWrite(path, json_string, StrLen(json_string)); +} + +@json_array* @json_element_value_as_array(@json_element* el, CTask* mem_task, I64 key_or_item) +{ + if (!el || !mem_task || !key_or_item) { + return NULL; + } + switch (el->type) { + case JSON_ARRAY: + switch (key_or_item) { + case JSON_ELEMENT_IS_ITEM: + return el(@json_item*)->value; + case JSON_ELEMENT_IS_KEY: + return el(@json_key*)->value; + default: + return NULL; + } + break; + default: + break; + } + @json_array* arr = CAlloc(sizeof(@json_array), mem_task); + arr->mem_task = mem_task; + arr->sig = JSON_SIG; + arr->type = JSON_ARRAY; + switch (key_or_item) { + case JSON_ELEMENT_IS_ITEM: + @json_append_item(arr, el(@json_item*)->value, el->type); + break; + case JSON_ELEMENT_IS_KEY: + @json_append_item(arr, el(@json_key*)->value, el->type); + break; + default: + break; + } + return @json_create_callable_array(arr); +} + +@json_array* @json_item_value_as_array(@json_item* item, CTask* mem_task) +{ + return @json_element_value_as_array(item, mem_task, JSON_ELEMENT_IS_ITEM); +} + +@json_array* @json_key_value_as_array(@json_key* key, CTask* mem_task) +{ + return @json_element_value_as_array(key, mem_task, JSON_ELEMENT_IS_KEY); +} + +@json_element* @json_clone(@json_element* el, CTask* mem_task) +{ + if (!el || !mem_task) { + return NULL; + } + U8* tmp = @json_stringify(el, mem_task); + if (!tmp) { + return NULL; + } + return @json_parse(tmp, mem_task); +} + +class @json +{ + @json_element* (*Clone)(@json_element* el, CTask* mem_task); + @json_array* (*CreateArray)(CTask* mem_task); + @json_object* (*CreateObject)(CTask* mem_task); + U0 (*DumpToFile)(U8* path, @json_element* el, CTask* mem_task); + @json_array* (*KeyValueAsArray)(@json_key* key, CTask* mem_task); + @json_array* (*ItemValueAsArray)(@json_item* item, CTask* mem_task); + @json_element* (*Parse)(U8* str, CTask* mem_task); + U64 (*ParseFile)(U8* path, CTask* mem_task); + U8* (*Stringify)(@json_element* el, CTask* mem_task); +}; + +@json Json; +Json.Clone = &@json_clone; +Json.CreateArray = &@json_create_array; +Json.CreateObject = &@json_create_object; +Json.DumpToFile = &@json_dump_to_file; +Json.ItemValueAsArray = &@json_item_value_as_array; +Json.KeyValueAsArray = &@json_key_value_as_array; +Json.Parse = &@json_parse; +Json.ParseFile = &@json_parse_file; +Json.Stringify = &@json_stringify; + +"json "; diff --git a/System/Libraries/RawText.HC b/System/Libraries/RawText.HC new file mode 100644 index 0000000..5055c51 --- /dev/null +++ b/System/Libraries/RawText.HC @@ -0,0 +1,104 @@ +I64 @rawtext_output_port = NULL; + +U0 @rawtext_detect_qemu() +{ + CRAXRBCRCXRDX res; + CPUId(0x40000000, &res); + if (res.rbx == 'KVMK') + @rawtext_output_port = 0xe9; +} + +U0 @rawtext_detect_vbox() +{ + I64 res = PCIClassFind(0x088000, 0); + if (res >= 0) + @rawtext_output_port = 0x504; +} + +U0 @dbg_put_char(I64 ch) +{ + OutU8(@rawtext_output_port, ch); + if (!System.text_mode) + return; + Context2D* fb = Graphics2D.FrameBufferContext2D(); + text.raw_flags &= ~RWF_SHOW_DOLLAR; + if (ch > '~' && ch != 219) + ch = ' '; + I64 row, col; + if (!(text.raw_flags & RWF_SHOW_DOLLAR)) { + if (ch == '$$') { + if (text.raw_flags & RWF_IN_DOLLAR) { + text.raw_flags &= ~RWF_IN_DOLLAR; + if (!(text.raw_flags & RWF_LAST_DOLLAR)) { + text.raw_flags &= ~RWF_LAST_DOLLAR; + return; + } + } else { + text.raw_flags |= RWF_IN_DOLLAR | RWF_LAST_DOLLAR; + return; + } + } + text.raw_flags &= ~RWF_LAST_DOLLAR; + if (text.raw_flags & RWF_IN_DOLLAR) + return; + } + if (ch == '\t') { + @dbg_put_char(CH_SPACE); + while (text.raw_col & 7) + @dbg_put_char(CH_SPACE); + } else if (ch == CH_BACKSPACE) { + text.raw_col--; + @dbg_put_char(CH_SPACE); + text.raw_col--; + } else if (ch == '\n') { + @dbg_put_char(CH_SPACE); + while (text.raw_col % text.cols) + @dbg_put_char(CH_SPACE); + } else if (Bt(char_bmp_displayable, ch)) { + row = text.raw_col / text.cols % text.rows; + col = text.raw_col % text.cols; + if (text.raw_flags & RWF_SCROLL && text.raw_col && !row && !col) { + CopyRect2D(fb, 0, -16, fb); + Rect2D(fb, 0, Display.Height() - 16, Display.Width(), 16, 0x0); + text.raw_col -= text.cols; + row = text.rows - 1; + } + ConsolePrint2D(fb, col * 8, row * 16, , , "%c", ch); + text.raw_col++; + } +} + +Bool @kd_raw_putkey(I64 ch, I64) +{ + if (IsRaw) { + @dbg_put_char(ch); + return TRUE; + } else + return FALSE; +} + +Bool @kd_raw_puts(U8* st) +{ + I64 ch; + if (IsRaw) { + while (ch = *st++) + @dbg_put_char(ch); + return TRUE; + } else + return FALSE; +} + +U0 @rawdr_dummy(CTask*) { } + +CKeyDevEntry* tmp_kde = keydev.put_key_head; +while (tmp_kde->put_s != &KDRawPutS) + tmp_kde = tmp_kde->next; +tmp_kde->put_key = &@kd_raw_putkey; +tmp_kde->put_s = &@kd_raw_puts; + +Function.Patch(&RawDr, &@rawdr_dummy); + +@rawtext_detect_qemu; +@rawtext_detect_vbox; + +"rawtext "; \ No newline at end of file diff --git a/System/Libraries/Rsa.HC b/System/Libraries/Rsa.HC new file mode 100644 index 0000000..0b81bcf --- /dev/null +++ b/System/Libraries/Rsa.HC @@ -0,0 +1,46 @@ +Silent(1); // This is needed to suppress "Function should return val" warnings for wrappers to non-HolyC functions + +I64 @rsa_import(U8* der_bytes, I64 der_len, U64 key) +{ + U64 reg RDI rdi = der_bytes; + U64 reg RSI rsi = der_len; + U64 reg RDX rdx = key; + no_warn rdi, rsi, rdx; + asm { + MOV RAX, RSA_IMPORT + CALL RAX + } +} + +I64 @rsa_create_signature(U8* sig, I64* siglen, U8* hash, I64 hashlen, U64 key) +{ + U64 reg RDI rdi = sig; + U64 reg RSI rsi = siglen; + U64 reg RDX rdx = hash; + U64 reg RCX rcx = hashlen; + U64 reg R8 r8 = key; + no_warn rdi, rsi, rdx, rcx, r8; + asm { + MOV RAX, RSA_CREATE_SIGNATURE + CALL RAX + } +} + +I64 @rsa_verify_signature(U8* sig, I64 siglen, U8* hash, I64 hashlen, I32* stat, U64 key) +{ + U64 reg RDI rdi = sig; + U64 reg RSI rsi = siglen; + U64 reg RDX rdx = hash; + U64 reg RCX rcx = hashlen; + U64 reg R8 r8 = stat; + U64 reg R9 r9 = key; + no_warn rdi, rsi, rdx, rcx, r8, r9; + asm { + MOV RAX, RSA_VERIFY_SIGNATURE + CALL RAX + } +} + +Silent(0); + +"rsa "; diff --git a/System/Libraries/Session.HC b/System/Libraries/Session.HC new file mode 100644 index 0000000..ecf3191 --- /dev/null +++ b/System/Libraries/Session.HC @@ -0,0 +1,8 @@ +class @session +{ + U8 home[4096]; + U8 hostname[256]; + @user user; +}; + +"session "; \ No newline at end of file diff --git a/System/Libraries/Sha256.HC b/System/Libraries/Sha256.HC new file mode 100644 index 0000000..71e80b2 --- /dev/null +++ b/System/Libraries/Sha256.HC @@ -0,0 +1,235 @@ +#define CHUNK_SIZE 64 +#define TOTAL_LEN_LEN 8 + +/* + * ABOUT bool: this file does not use bool in order to be as pre-C99 compatible + * as possible. + */ + +/* + * Comments from pseudo-code at https://en.wikipedia.org/wiki/SHA-2 are + * reproduced here. When useful for clarification, portions of the pseudo-code + * are reproduced here too. + */ + +/* + * Initialize array of round constants: + * (first 32 bits of the fractional parts of the cube roots of the first 64 + * primes 2..311): + */ +U32 k[64] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, + 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, + 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, + 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, + 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, + 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +}; + +U32 _h[8] = { 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 }; + +class buffer_state { + U8* p; + I32 len; + I32 total_len; + I32 single_one_delivered; /* bool */ + I32 total_len_delivered; /* bool */ +}; + +U32 right_rot(U32 value, U32 count) +{ + /* + * Defined behaviour in standard C for all count where 0 < count < 32, + * which is what we need here. + */ + return value >> count | value << (32 - count); +} + +U0 init_buf_state(buffer_state* state, U8* input, I32 len) +{ + state->p = input; + state->len = len; + state->total_len = len; + state->single_one_delivered = 0; + state->total_len_delivered = 0; +} + +/* Return value: bool */ +I32 calc_chunk(U8* chunk, buffer_state* state) +{ + I32 space_in_chunk; + + if (state->total_len_delivered) { + return 0; + } + + if (state->len >= CHUNK_SIZE) { + MemCpy(chunk, state->p, CHUNK_SIZE); + state->p += CHUNK_SIZE; + state->len -= CHUNK_SIZE; + return 1; + } + + MemCpy(chunk, state->p, state->len); + chunk += state->len; + space_in_chunk = CHUNK_SIZE - state->len; + state->p += state->len; + state->len = 0; + + /* If we are here, space_in_chunk is one at minimum. */ + if (!state->single_one_delivered) { + *chunk++ = 0x80; + space_in_chunk -= 1; + state->single_one_delivered = 1; + } + + /* + * Now: + * - either there is enough space left for the total length, and we can + * conclude, + * - or there is too little space left, and we have to pad the rest of this + * chunk with zeroes. In the latter case, we will conclude at the next + * invokation of this function. + */ + if (space_in_chunk >= TOTAL_LEN_LEN) { + I32 left = space_in_chunk - TOTAL_LEN_LEN; + I32 len = state->total_len; + I32 i; + MemSet(chunk, 0x00, left); + chunk += left; + + /* Storing of len * 8 as a big endian 64-bit without overflow. */ + chunk[7] = (len << 3); + len >>= 5; + for (i = 6; i >= 0; i--) { + chunk[i] = len; + len >>= 8; + } + state->total_len_delivered = 1; + } else { + MemSet(chunk, 0x00, space_in_chunk); + } + + return 1; +} + +/* + * Limitations: + * - Since input is a pointer in RAM, the data to hash should be in RAM, which + * could be a problem for large data sizes. + * - SHA algorithms theoretically operate on bit strings. However, this + * implementation has no support for bit string lengths that are not multiples + * of eight, and it really operates on arrays of bytes. In particular, the len + * parameter is a number of bytes. + */ +U0 calc_sha_256(U8* hash, U8* input, I32 len) +{ + /* + * Note 1: All integers (expect indexes) are 32-bit U32 integers and addition + * is calculated modulo 2^32. Note 2: For each round, there is one round + * constant k[i] and one entry in the message schedule array w[i], 0 = i = 63 + * Note 3: The compression function uses 8 working variables, a through h + * Note 4: Big-endian convention is used when expressing the constants in this + * pseudocode, and when parsing message block data from bytes to words, for + * example, the first word of the input message "abc" after padding is + * 0x61626380 + */ + + /* + * Initialize hash values: + * (first 32 bits of the fractional parts of the square roots of the first 8 + * primes 2..19): + */ + + U32 h[8]; + U32 i, j; + MemCpy(h, _h, sizeof(U32) * 8); + + /* 512-bit chunks is what we will operate on. */ + U8 chunk[64]; + + buffer_state state; + + init_buf_state(&state, input, len); + + while (calc_chunk(chunk, &state)) { + U32 ah[8]; + + U8* p = chunk; + + /* Initialize working variables to current hash value: */ + for (i = 0; i < 8; i++) + ah[i] = h[i]; + + /* Compression function main loop: */ + for (i = 0; i < 4; i++) { + /* + * The w-array is really w[64], but since we only need + * 16 of them at a time, we save stack by calculating + * 16 at a time. + * + * This optimization was not there initially and the + * rest of the comments about w[64] are kept in their + * initial state. + */ + + /* + * create a 64-entry message schedule array w[0..63] of 32-bit words + * (The initial values in w[0..63] don't matter, so many implementations + * zero them here) copy chunk into first 16 words w[0..15] of the message + * schedule array + */ + U32 w[16]; + + U32 s0, s1; + + for (j = 0; j < 16; j++) { + if (i == 0) { + w[j] = p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; + p += 4; + } else { + /* Extend the first 16 words into the remaining 48 words w[16..63] of + * the message schedule array: */ + s0 = right_rot(w[(j + 1) & 0xf], 7) ^ right_rot(w[(j + 1) & 0xf], 18) ^ (w[(j + 1) & 0xf] >> 3); + s1 = right_rot(w[(j + 14) & 0xf], 17) ^ right_rot(w[(j + 14) & 0xf], 19) ^ (w[(j + 14) & 0xf] >> 10); + w[j] = w[j] + s0 + w[(j + 9) & 0xf] + s1; + } + s1 = right_rot(ah[4], 6) ^ right_rot(ah[4], 11) ^ right_rot(ah[4], 25); + U32 ch = (ah[4] & ah[5]) ^ (~ah[4] & ah[6]); + U32 temp1 = ah[7] + s1 + ch + k[i << 4 | j] + w[j]; + s0 = right_rot(ah[0], 2) ^ right_rot(ah[0], 13) ^ right_rot(ah[0], 22); + U32 maj = (ah[0] & ah[1]) ^ (ah[0] & ah[2]) ^ (ah[1] & ah[2]); + U32 temp2 = s0 + maj; + + ah[7] = ah[6]; + ah[6] = ah[5]; + ah[5] = ah[4]; + ah[4] = ah[3] + temp1; + ah[3] = ah[2]; + ah[2] = ah[1]; + ah[1] = ah[0]; + ah[0] = temp1 + temp2; + } + } + + /* Add the compressed chunk to the current hash value: */ + for (i = 0; i < 8; i++) + h[i] += ah[i]; + } + + /* Produce the final hash value (big-endian): */ + for (i = 0, j = 0; i < 8; i++) { + hash[j++] = (h[i] >> 24); + hash[j++] = (h[i] >> 16); + hash[j++] = (h[i] >> 8); + hash[j++] = h[i]; + } +} + +"sha256 "; diff --git a/System/Libraries/Shell.HC b/System/Libraries/Shell.HC new file mode 100644 index 0000000..7c5b9c1 --- /dev/null +++ b/System/Libraries/Shell.HC @@ -0,0 +1,52 @@ +#define SHELL_HISTORY_LIMIT 1025 +#define SHELL_INPUT_FIFO_SIZE 65536 + +class @shell_env_var +{ + @shell_env_var* prev; + @shell_env_var* next; + U8 key[256]; + U8 value[1024]; +}; + +class @shell_autocomplete +{ + I64 depth; + I64 length[8]; + U8*** entries; +}; + +class @shell_history +{ + I64 index; + I64 limit; + I64 pos; + U8** entries; +}; + +class @shell_readline +{ + @shell_autocomplete autocomplete; + @shell_history history; +}; + +class @shell +{ + CFifoU8* input; + CFifoU8* output; + CTask* task; + Bool break; + Bool exit; + I64 answer; + @shell_env_var* env; + @shell_history history; + @shell_readline readline; + @session* session; + U8 cwd[4096]; + U8 PS1[512]; + U8 PS2[512]; + U8 PS3[512]; + U8 PS4[512]; +}; + +"shell "; \ No newline at end of file diff --git a/System/Libraries/Stdio.HC b/System/Libraries/Stdio.HC new file mode 100644 index 0000000..877719c --- /dev/null +++ b/System/Libraries/Stdio.HC @@ -0,0 +1,155 @@ +class @stdio +{ + U0 (*ReadLine)(@shell* sh, U8* str); + U0 (*WriteLine)(@shell* sh, U8* fmt, ...); +}; + +U0 @stdio_write_line(@shell* sh, U8* fmt, ...) +{ + if (!sh) + return; + if (!fmt || !sh->output) + return; + U8* buf; + if (argc) { + buf = StrPrintJoin(NULL, fmt, argc, argv); + } else { + buf = StrNew(fmt, erythros_mem_task); + } + I64 i; + for (i = 0; i < StrLen(buf); i++) + FifoU8Ins(sh->output, buf[i]); + Free(buf); +} + +I64 @stdio_handle_control_chars(@shell* sh) +{ + if (!FifoU8Cnt(sh->input)) + return 0; + U8 char; + FifoU8Rem(sh->input, &char); + switch (char) { + case '[': + if (!FifoU8Cnt(sh->input)) + return 0; + FifoU8Rem(sh->input, &char); + switch (char) { + case 'A': + return SC_CURSOR_UP; + break; + case 'B': + return SC_CURSOR_DOWN; + break; + case 'D': + return SC_CURSOR_LEFT; + break; + case 'C': + return SC_CURSOR_RIGHT; + break; + default: + return 0; + break; + } + break; + default: + return 0; + break; + } +} + +U0 @stdio_read_line_history_back(@shell* sh, I64 pos) +{ + if (sh->history.index < 0) + sh->history.index = 0; + while (pos > 0) { + FifoU8Ins(sh->input, '\x8'); + pos--; + } + U8* char = sh->history.entries[sh->history.index]; + while (*char) + FifoU8Ins(sh->input, *char ++); + if (sh->history.index > -1) { + sh->history.index--; + } +} + +U0 @stdio_read_line_history_fwd(@shell* sh, I64 pos) +{ + if (sh->history.index < sh->history.pos) { + sh->history.index++; + } + if (sh->history.index > sh->history.pos) + sh->history.index = sh->history.pos; + while (pos > 0) { + FifoU8Ins(sh->input, '\x8'); + pos--; + } + U8* char = sh->history.entries[sh->history.index]; + while (*char) + FifoU8Ins(sh->input, *char ++); +} + +U0 @stdio_read_line(@shell* sh, U8* str) +{ + U8 char = NULL; + U8 line[4096]; + I64 pos = 0; + if (!str || !sh) + return; + sh->history.index = sh->history.pos - 1; + while (char != '\x3' && char != '\n') { + while (FifoU8Cnt(sh->input)) { + FifoU8Rem(sh->input, &char); + switch (char) { + case 3: + @stdio_write_line(sh, "^C"); + break; + case 8: + if (pos > 0) { + line[StrLen(line) - 1] = NULL; + FifoU8Ins(sh->output, '\x8'); + pos--; + } else + FifoU8Ins(sh->output, '\x7'); + break; + case 13: + break; + case 27: + switch (@stdio_handle_control_chars(sh)) { + case SC_CURSOR_UP: + @stdio_read_line_history_back(sh, pos); + break; + case SC_CURSOR_DOWN: + @stdio_read_line_history_fwd(sh, pos); + break; + default: + break; + } + break; + case 32...127: + line[pos] = char; + FifoU8Ins(sh->output, char); + pos++; + break; + }; + } + Sleep(1); + } + line[pos] = NULL; + switch (char) { + case '\x3': + StrCpy(str, ""); + break; + case '\n': + StrCpy(str, &line); + break; + }; + FifoU8Ins(sh->output, '\n'); +} + +@stdio Stdio; + +Stdio.ReadLine = &@stdio_read_line; +Stdio.WriteLine = &@stdio_write_line; + +"stdio "; \ No newline at end of file diff --git a/System/Libraries/String.HC b/System/Libraries/String.HC new file mode 100644 index 0000000..bca0e71 --- /dev/null +++ b/System/Libraries/String.HC @@ -0,0 +1,171 @@ +#define TRIM_BOTH 0 +#define TRIM_LEFT 1 +#define TRIM_RIGHT 2 + +U0 @string_append(U8* dst, U8* fmt, ...) +{ + U8* buf; + if (argc) { + buf = StrPrintJoin(NULL, fmt, argc, argv); + } else { + buf = StrNew(fmt, erythros_mem_task); + } + U8* src = buf; + StrCpy(dst + StrLen(dst), src); + Free(buf); +} + +Bool @string_is_number(U8* s) +{ + while (*s) { + switch (*s) { + case '-': + case '.': + case '0' ... '9': + break; + default: + return FALSE; + break; + } + s++; + } + return TRUE; +} + +Bool @string_begins_with(U8* fragment, U8* str) +{ + if (!fragment || !str) + return FALSE; + if (StrLen(fragment) > StrLen(str)) + return FALSE; + return !MemCmp(fragment, str, StrLen(fragment)); +} + +Bool @string_ends_with(U8* fragment, U8* str) +{ + if (!fragment || !str) + return FALSE; + if (StrLen(fragment) > StrLen(str)) + return FALSE; + return !MemCmp(fragment, str + StrLen(str) - StrLen(fragment), StrLen(fragment)); +} + +U8* @string_replace(U8* s, U8* oldW, U8* newW) +{ + if (!StrFind(oldW, s)) { + return StrNew(s, erythros_mem_task); + } + U8* result; + I64 i, cnt = 0; + I64 newWlen = StrLen(newW); + I64 oldWlen = StrLen(oldW); + for (i = 0; s[i] != NULL; i++) { + if (StrFind(oldW, &s[i]) == &s[i]) { + cnt++; + + i += oldWlen - 1; + } + } + result = MAlloc(i + cnt * (newWlen - oldWlen) + 1, erythros_mem_task); + i = 0; + while (*s) { + if (StrFind(oldW, s) == s) { + StrCpy(&result[i], newW); + i += newWlen; + s += oldWlen; + } else + result[i++] = *s++; + } + result[i] = NULL; + return result; +} + +U8** @string_split(U8* s, U8 ch = '\n', I64* cnt) +{ + U8 check_buf[4]; + StrPrint(check_buf, "%c", ch); + if (!StrFind(check_buf, s)) { + U8** same_arr = CAlloc(sizeof(U8*) * 1, erythros_mem_task); + same_arr[0] = s; + *cnt = 1; + return same_arr; + } + U8* p = s; + cnt[0] = 0; + while (*p) { + if (*p == ch) + cnt[0]++; + p++; + } + if (!(cnt[0])) + return NULL; + cnt[0]++; + I64 i = -1; + U8** arr = CAlloc(sizeof(U8*) * cnt[0], erythros_mem_task); + p = s; + while (*p) { + if (*p == ch || i < 0) { + i++; + arr[i] = p; + if (*p == ch) { + arr[i]++; + *p = NULL; + } + } + p++; + } + return arr; +} + +Bool @string_trim_ch(U8 s_ch, U8 trim_ch) +{ + if (!s_ch) { + return FALSE; + } + if (!trim_ch) { + return (s_ch == ' ' || s_ch == '\r' || s_ch == '\n' || s_ch == '\t'); + } else { + return (s_ch == trim_ch); + } +} + +U0 @string_trim(U8* s, U8 ch = NULL, I64 mode = TRIM_BOTH) +{ + Bool trim_ch = @string_trim_ch(*s, ch); + if (mode == TRIM_BOTH || mode == TRIM_LEFT) { + while (trim_ch) { + StrCpy(s, s + 1); + trim_ch = @string_trim_ch(*s, ch); + } + } + trim_ch = @string_trim_ch(s[StrLen(s) - 1], ch); + if (mode == TRIM_BOTH || mode == TRIM_RIGHT) { + while (trim_ch) { + s[StrLen(s) - 1] = NULL; + trim_ch = @string_trim_ch(s[StrLen(s) - 1], ch); + } + } +} + +class @string +{ + U0(*Append) + (U8 * dst, U8 * fmt, ...); + Bool (*BeginsWith)(U8* fragment, U8* str); + Bool (*EndsWith)(U8* fragment, U8* str); + Bool (*IsNumber)(U8* s); + U8* (*Replace)(U8* s, U8* oldW, U8* newW); + U8** (*Split)(U8* s, U8 ch = '\n', I64 * cnt); + U0 (*Trim)(U8* s, U8 ch = NULL, I64 mode = TRIM_BOTH); +}; + +@string String; +String.Append = &@string_append; +String.BeginsWith = &@string_begins_with; +String.EndsWith = &@string_ends_with; +String.IsNumber = &@string_is_number; +String.Replace = &@string_replace; +String.Split = &@string_split; +String.Trim = &@string_trim; + +"string "; diff --git a/System/Libraries/System.HC b/System/Libraries/System.HC new file mode 100644 index 0000000..3ad4085 --- /dev/null +++ b/System/Libraries/System.HC @@ -0,0 +1,104 @@ +class @system +{ + Bool text_mode; + CFifoI64* log_fifo; + U8* build_info; + U8* (*BuildInfo)(); + U0 (*Init)(); + U0 (*Log)(CTask* task, U8* fmt, ...); + U0 (*PowerOff)(); +}; + +@system System; + +U0 @system_lex_warn(CCmpCtrl* cc, + U8* str = NULL) +{ // Print warn msg, then, LexPutPos(). + if (!MemCmp(str, "Assign U0 ", 10)) + return; // suppress "Assign U0 " warnings + if (str) + PrintWarn(str); + if (cc->htc.fun) { + "in fun '%s'.\n", cc->htc.fun->str; + if (IsRaw) + "%s\n", cc->htc.fun->src_link; + else { + "$LK,\"%s\"$\n", cc->htc.fun->src_link; + AdamErr("%s\n", cc->htc.fun->src_link); + } + } else + LexPutPos(cc); + cc->warning_cnt++; +} + +U0 @system_print_warn(U8* fmt, ...) +{ // Print "Warn:" and msg in blinking red. + if (!MemCmp(fmt, "Unused var", 10)) + return; // suppress "Unused var" warnings + if (!MemCmp(fmt, "Using 64-bit reg var.", 21)) + return; // suppress "Using 64-bit reg var." warnings + U8* buf = StrPrintJoin(NULL, fmt, argc, argv); + GetOutOfDollar; + "%,p %,p %,p %,p " ST_WARN_ST "%s", Caller, Caller(2), Caller(3), Caller(4), + buf; + Free(buf); +} + +@patch_jmp_rel32(&LexWarn, &@system_lex_warn); +@patch_jmp_rel32(&PrintWarn, &@system_print_warn); + +U8* @system_build_info() { return System.build_info; } + +U0 @system_log(CTask* task, U8* fmt, ...) +{ + U8* buf = StrPrintJoin(NULL, fmt, argc, argv); + U8* str = buf; + U32 color; + MemCpyU32(&color, &task->task_name, 1); + if (!color) { + color = RandU32 * 1048576; + MemCpyU32(&task->pad, &color, 1); + } + U8* log_msg = MAlloc(1024); + StrPrint(log_msg, "[\x1b[38;2;%d;%d;%dm%16s\x1b[0m] %s\n", + color.u8[3] << 5 & 0xFF, color.u8[2] << 4 & 0xFF, + color.u8[1] << 3 & 0xFF, Fs->task_name, buf); + FifoI64Ins(System.log_fifo, log_msg); + Free(buf); +} + +U0 @system_log_task() +{ + I64 log_msg; + while (1) { + while (FifoI64Cnt(System.log_fifo)) { + FifoI64Rem(System.log_fifo, &log_msg); + "%s", log_msg; + Free(log_msg); + } + Sleep(1); + } +} + +U0 @system_power_off() +{ + OutU16(0x4004, 0x3400); + OutU16(0x0604, 0x2000); + OutU16(0xB004, 0x2000); +} + +U0 @system_init() +{ + System.build_info = FileRead("build_info.TXT"); + System.log_fifo = FifoI64New(1024); + Spawn(&@system_log_task, , , T(mp_cnt, 1, 0)); +} + +System.BuildInfo = &@system_build_info; +System.Init = &@system_init; +System.Log = &@system_log; +System.PowerOff = &@system_power_off; + +System.Init(); + +"system "; \ No newline at end of file diff --git a/System/Libraries/Theme.HC b/System/Libraries/Theme.HC new file mode 100644 index 0000000..6e194f1 --- /dev/null +++ b/System/Libraries/Theme.HC @@ -0,0 +1,49 @@ +class @theme_colors +{ + U32 active_border; + U32 hilight; +}; + +class @theme_window +{ + I64 min_width; + I64 min_height; +}; + +class @theme_bitmap_fonts +{ + BitmapFont* menu; + BitmapFont* monospace; + BitmapFont* sans; +} + +class @theme_pointers +{ + Context2D* pointer; + Context2D* pen; + Context2D* move; + Context2D* link; + AnimationContext2D* wait; + Context2D* horz; + Context2D* vert; + Context2D* text; + Context2D* cross; + Context2D* dgn1; + Context2D* dgn2; + Context2D* help; + Context2D* alternate; + Context2D* unavailable; +}; + +class @theme +{ + U8* path; + @theme_colors color; + @theme_bitmap_fonts font; + @theme_pointers pointer; + @theme_window window; + Context2D* wallpaper; + U0 (*window_repaint)(Window* win, I64 type); +}; + +"theme "; \ No newline at end of file diff --git a/System/Libraries/Tlse.HC b/System/Libraries/Tlse.HC new file mode 100644 index 0000000..62fb3d3 --- /dev/null +++ b/System/Libraries/Tlse.HC @@ -0,0 +1,115 @@ +#define TLS_V12 0x0303 + +Silent(1); // This is needed to suppress "Function should return val" warnings for wrappers to non-HolyC functions + +U64 @tls_create_context(U8 is_server, U16 version) +{ + U64 reg RDI rdi = is_server; + U64 reg RSI rsi = version; + no_warn rdi, rsi; + asm { + MOV RAX, TLS_CREATE_CONTEXT + CALL RAX + } +} + +I32 @tls_sni_set(U64 context, U8* sni) +{ + U64 reg RDI rdi = context; + U64 reg RSI rsi = sni; + no_warn rdi, rsi; + asm { + MOV RAX, TLS_SNI_SET + CALL RAX + } +} + +I32 @tls_client_connect(U64 context) +{ + U64 reg RDI rdi = context; + no_warn rdi; + asm { + MOV RAX, TLS_CLIENT_CONNECT + CALL RAX + } +} + +U8* @tls_get_write_buffer(U64 context, U32* outlen) +{ + U64 reg RDI rdi = context; + U64 reg RSI rsi = outlen; + no_warn rdi, rsi; + asm { + MOV RAX, TLS_GET_WRITE_BUFFER + CALL RAX + } +} + +U0 @tls_buffer_clear(U64 context) +{ + U64 reg RDI rdi = context; + no_warn rdi; + asm { + MOV RAX, TLS_BUFFER_CLEAR + CALL RAX + } +} + +I32 @tls_connection_status(U64 context) +{ + U64 reg RDI rdi = context; + no_warn rdi; + asm { + MOV RAX, TLS_CONNECTION_STATUS + CALL RAX + } +} + +U0 @tls_consume_stream(U64 context, U8* buf, I32 buf_len, U64 certificate_verify) +{ + U64 reg RDI rdi = context; + U64 reg RSI rsi = buf; + U64 reg RDX rdx = buf_len; + U64 reg RCX rcx = certificate_verify; + no_warn rdi, rsi, rdx, rcx; + asm { + MOV RAX, TLS_CONSUME_STREAM + CALL RAX + } +} + +I32 @tls_read(U64 context, U8* buf, U32 size) +{ + U64 reg RDI rdi = context; + U64 reg RSI rsi = buf; + U64 reg RDX rdx = size; + no_warn rdi, rsi, rdx; + asm { + MOV RAX, TLS_READ + CALL RAX + } +} + +I32 @tls_write(U64 context, U8* data, U32 len) +{ + U64 reg RDI rdi = context; + U64 reg RSI rsi = data; + U64 reg RDX rdx = len; + no_warn rdi, rsi, rdx; + asm { + MOV RAX, TLS_WRITE + CALL RAX + } +} + +I32 @tls_established(U64 context) +{ + U64 reg RDI rdi = context; + no_warn rdi; + asm { + MOV RAX, TLS_ESTABLISHED + CALL RAX + } +} + +Silent(0); diff --git a/System/Libraries/User.HC b/System/Libraries/User.HC new file mode 100644 index 0000000..6a44a69 --- /dev/null +++ b/System/Libraries/User.HC @@ -0,0 +1,10 @@ +class @user +{ + I64 uid; + U8 name[256]; + U8 fullname[256]; + U8 passwd[256]; + U8 groups[256]; +} + +"user "; \ No newline at end of file diff --git a/System/Libraries/Widget.HC b/System/Libraries/Widget.HC new file mode 100644 index 0000000..a516505 --- /dev/null +++ b/System/Libraries/Widget.HC @@ -0,0 +1,834 @@ +#define TextInputWidget BitmapFontTextInputWidget +#define TextLabelWidget BitmapFontTextLabelWidget + +#define WIDGET_TYPE_NULL 0 +#define WIDGET_TYPE_BUTTON 1 +#define WIDGET_TYPE_CHECKBOX 2 +#define WIDGET_TYPE_RADIO 3 +#define WIDGET_TYPE_INPUT 4 +#define WIDGET_TYPE_LABEL 5 +#define WIDGET_TYPE_CONTEXT2D 6 +#define WIDGET_TYPE_TTF_INPUT 7 +#define WIDGET_TYPE_TTF_LABEL 8 +#define WIDGET_TYPE_HORZ_SLIDER 9 +#define WIDGET_TYPE_VERT_SLIDER 10 +#define WIDGET_TYPE_TERMINAL 11 +#define WIDGET_TYPE_HORZ_SCROLLBAR 12 +#define WIDGET_TYPE_VERT_SCROLLBAR 13 +#define WIDGET_TYPE_MENU_ITEM 14 +#define WIDGET_TYPE_LISTVIEW 15 + +#define TERMINAL_MAX_COLS 1920 / 8 + +#define TERMINAL_STATE_OUTPUT 0 +#define TERMINAL_STATE_CONSUME_BEGIN 1 +#define TERMINAL_STATE_CONSUME_CTRL_SEQ 2 +#define TERMINAL_STATE_CONSUME_OS_CMD 3 +#define TERMINAL_STATE_CONSUME_END 99 + +asm { +TERMINAL_COLOR_TABLE:: +DU32 0xff000000, 0xff800000, 0xff008000, 0xff808000, 0xff000080, 0xff800080, 0xff008080, 0xffc0c0c0, 0xff808080, 0xffff0000, 0xff00ff00, 0xffffff00, 0xff0000ff, 0xffff00ff, 0xff00ffff, 0xffffffff, 0xff000000, 0xff00005f, 0xff000087, 0xff0000af, 0xff0000d7, 0xff0000ff, 0xff005f00, 0xff005f5f, 0xff005f87, 0xff005faf, 0xff005fd7, 0xff005fff, 0xff008700, 0xff00875f, 0xff008787, 0xff0087af, 0xff0087d7, 0xff0087ff, 0xff00af00, 0xff00af5f, 0xff00af87, 0xff00afaf, 0xff00afd7, 0xff00afff, 0xff00d700, 0xff00d75f, 0xff00d787, 0xff00d7af, 0xff00d7d7, 0xff00d7ff, 0xff00ff00, 0xff00ff5f, 0xff00ff87, 0xff00ffaf, 0xff00ffd7, 0xff00ffff, 0xff5f0000, 0xff5f005f, 0xff5f0087, 0xff5f00af, 0xff5f00d7, 0xff5f00ff, 0xff5f5f00, 0xff5f5f5f, 0xff5f5f87, 0xff5f5faf, 0xff5f5fd7, 0xff5f5fff, 0xff5f8700, 0xff5f875f, 0xff5f8787, 0xff5f87af, 0xff5f87d7, 0xff5f87ff, 0xff5faf00, 0xff5faf5f, 0xff5faf87, 0xff5fafaf, 0xff5fafd7, 0xff5fafff, 0xff5fd700, 0xff5fd75f, 0xff5fd787, 0xff5fd7af, 0xff5fd7d7, 0xff5fd7ff, 0xff5fff00, 0xff5fff5f, 0xff5fff87, 0xff5fffaf, 0xff5fffd7, 0xff5fffff, 0xff870000, 0xff87005f, 0xff870087, 0xff8700af, 0xff8700d7, 0xff8700ff, 0xff875f00, 0xff875f5f, 0xff875f87, 0xff875faf, 0xff875fd7, 0xff875fff, 0xff878700, 0xff87875f, 0xff878787, 0xff8787af, 0xff8787d7, 0xff8787ff, 0xff87af00, 0xff87af5f, 0xff87af87, 0xff87afaf, 0xff87afd7, 0xff87afff, 0xff87d700, 0xff87d75f, 0xff87d787, 0xff87d7af, 0xff87d7d7, 0xff87d7ff, 0xff87ff00, 0xff87ff5f, 0xff87ff87, 0xff87ffaf, 0xff87ffd7, 0xff87ffff, 0xffaf0000, 0xffaf005f, 0xffaf0087, 0xffaf00af, 0xffaf00d7, 0xffaf00ff, 0xffaf5f00, 0xffaf5f5f, 0xffaf5f87, 0xffaf5faf, 0xffaf5fd7, 0xffaf5fff, 0xffaf8700, 0xffaf875f, 0xffaf8787, 0xffaf87af, 0xffaf87d7, 0xffaf87ff, 0xffafaf00, 0xffafaf5f, 0xffafaf87, 0xffafafaf, 0xffafafd7, 0xffafafff, 0xffafd700, 0xffafd75f, 0xffafd787, 0xffafd7af, 0xffafd7d7, 0xffafd7ff, 0xffafff00, 0xffafff5f, 0xffafff87, 0xffafffaf, 0xffafffd7, 0xffafffff, 0xffd70000, 0xffd7005f, 0xffd70087, 0xffd700af, 0xffd700d7, 0xffd700ff, 0xffd75f00, 0xffd75f5f, 0xffd75f87, 0xffd75faf, 0xffd75fd7, 0xffd75fff, 0xffd78700, 0xffd7875f, 0xffd78787, 0xffd787af, 0xffd787d7, 0xffd787ff, 0xffd7af00, 0xffd7af5f, 0xffd7af87, 0xffd7afaf, 0xffd7afd7, 0xffd7afff, 0xffd7d700, 0xffd7d75f, 0xffd7d787, 0xffd7d7af, 0xffd7d7d7, 0xffd7d7ff, 0xffd7ff00, 0xffd7ff5f, 0xffd7ff87, 0xffd7ffaf, 0xffd7ffd7, 0xffd7ffff, 0xffff0000, 0xffff005f, 0xffff0087, 0xffff00af, 0xffff00d7, 0xffff00ff, 0xffff5f00, 0xffff5f5f, 0xffff5f87, 0xffff5faf, 0xffff5fd7, 0xffff5fff, 0xffff8700, 0xffff875f, 0xffff8787, 0xffff87af, 0xffff87d7, 0xffff87ff, 0xffffaf00, 0xffffaf5f, 0xffffaf87, 0xffffafaf, 0xffffafd7, 0xffffafff, 0xffffd700, 0xffffd75f, 0xffffd787, 0xffffd7af, 0xffffd7d7, 0xffffd7ff, 0xffffff00, 0xffffff5f, 0xffffff87, 0xffffffaf, 0xffffffd7, 0xffffffff, 0xff080808, 0xff121212, 0xff1c1c1c, 0xff262626, 0xff303030, 0xff3a3a3a, 0xff444444, 0xff4e4e4e, 0xff585858, 0xff626262, 0xff6c6c6c, 0xff767676, 0xff808080, 0xff8a8a8a, 0xff949494, 0xff9e9e9e, 0xffa8a8a8, 0xffb2b2b2, 0xffbcbcbc, 0xffc6c6c6, 0xffd0d0d0, 0xffdadada, 0xffe4e4e4, 0xffeeeeee; +} + +U8 widget_self_set1[0x1F] = { 0x55, 0x48, 0x8B, 0xEC, 0x56, 0x48, 0x8B, 0x75, + 0x10, 0x56, 0x48, 0xBB, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x53, 0xE8, 0x0, 0x0, + 0x0, 0x0, 0x5E, 0x5D, 0xC2, 0x08, 0x0 }; + +class ButtonWidget : Widget { + BitmapFont* font; + U8 text[1024]; + Context2D* image; + U32 color; +}; + +class MenuItemWidget : Widget { + BitmapFont* font; + U8 text[128]; + Context2D* icon; + U32 color; + U8* path; + Window* submenu; +}; + +class Context2DWidget : Widget { + Bool fast_copy; + Context2D* ctx; +}; + +class CheckBoxWidget : Widget { + Bool checked; +}; + +class RadioButtonWidget : Widget { + I64 group; + Bool selected; +}; + +class @terminal_widget_attr +{ + Bool bold; + Bool underline; + Bool blink; + Bool negative; + Bool invisible; +} + +class @terminal_widget_col +{ + U32 background; + U32 foreground; + U8 char; +}; + +class @terminal_widget_color +{ + U32 background; + U32 foreground; + U32 cursor; +}; + +class @terminal_widget_cursor +{ + I64 x; + I64 y; + Bool hidden; +}; + +class @terminal_widget_row +{ + @terminal_widget_col col[TERMINAL_MAX_COLS]; +}; + +class @terminal_widget_scroll +{ + I64 x; + I64 y; +}; + +class @terminal_widget_size +{ + I64 rows; + I64 cols; +}; + +class @terminal_widget_stored +{ + @terminal_widget_attr attr; + @terminal_widget_color color; + @terminal_widget_cursor cursor; +}; + +class TerminalWidget : Widget { + CFifoU8* input; + CFifoU8* output; + Bool refresh; + U8 consumed_chars[256]; + I64 state; + I64 last_fg_color_set; + @terminal_widget_attr attr; + @terminal_widget_color color; + @terminal_widget_cursor cursor; + @terminal_widget_row* row; + @terminal_widget_scroll scroll; + @terminal_widget_scroll max; + @terminal_widget_size size; + @terminal_widget_stored stored; +}; + +class BitmapFontTextInputWidget : Widget { + BitmapFont* font; + Bool blink; + Bool in_drag; + Bool is_password; + I64 cursor_index; + I64 mouse_drag_origin_x; + I64 mouse_drag_index; + I64 selected_region_start; + I64 selected_region_end; + I64 x_offset; + U32 color; + U8 text[1024]; + U8 password[1024]; + U0 (*SetFont)(U8* font); + U0 (*SetText)(U8* text); +} + +class BitmapFontTextLabelWidget : Widget { + BitmapFont* font; + U32 color; + U8 text[1024]; + U0 (*SetFont)(U8* font); + U0 (*SetText)(U8* text); +}; + +class TrueTypeTextInputWidget : Widget { + U8* font; + U32 color; + U32 bgcolor; + I64 size; + U8* text; + U8* prev_text; +}; + +class TrueTypeTextLabelWidget : Widget { + U8* font; + U32 color; + U32 bgcolor; + I64 size; + U8* text; + U8* prev_text; +}; + +class HorizontalSliderWidget : Widget { + Bool in_drag; + I64 scroll; + I64 max; + I64 value; +}; + +class VerticalSliderWidget : Widget { + Bool in_drag; + I64 scroll; + I64 max; + I64 value; +}; + +class HorizontalScrollBarWidget : Widget { + Bool in_drag; + I64 scroll; + I64 max; + I64 value; +}; + +class VerticalScrollBarWidget : Widget { + Bool in_drag; + I64 scroll; + I64 length; + I64 max; + I64 value; +}; + +class @list_view_item +{ + @list_view_item* prev; + @list_view_item* next; + Context2D* icon; + U8 text[1024]; +}; + +class ListViewWidget : Widget { + BitmapFont* font; + U32 color; + @list_view_item* items; +}; + +U0 @gui_widget_set_echo(Widget* widget, U8* echo) +{ + if (!widget || !echo) + return; + widget->echo = echo; +} + +U0 @gui_widget_set_font(Widget* widget, U8* font_name) +{ + if (!widget || !font_name) + return; + if (!StrLen(font_name)) + return; + switch (widget->type) { + case WIDGET_TYPE_BUTTON: + widget(ButtonWidget*)->font = BitmapFonts.GetByName(font_name); + break; + case WIDGET_TYPE_INPUT: + widget(BitmapFontTextInputWidget*)->font = BitmapFonts.GetByName(font_name); + break; + case WIDGET_TYPE_LABEL: + widget(BitmapFontTextLabelWidget*)->font = BitmapFonts.GetByName(font_name); + break; + case WIDGET_TYPE_LISTVIEW: + widget(ListViewWidget*)->font = BitmapFonts.GetByName(font_name); + break; + default: + break; + } +} + +U0 @gui_widget_set_mouse_pointer(Widget* widget, Context2D* pointer) +{ + if (!widget) + return; + widget->pointer = pointer; +} + +U0 @gui_widget_clear_mouse_pointer(Widget* widget) +{ + if (!widget) + return; + widget->pointer = NULL; +} + +U0 @gui_widget_set_opacity(Widget* widget, I64 opacity) +{ + if (!widget) + return; + widget->opacity = ClampI64(opacity, 0, 255); +} + +U0 @gui_widget_set_callback(Widget* widget, U8* name, U64 callback) +{ + if (!widget || !name || !callback) + return; + if (!StrCmp(name, "change")) + widget->callback.change = callback; + if (!StrCmp(name, "clicked")) + widget->callback.clicked = callback; + if (!StrCmp(name, "repaint")) + widget->callback.repaint = callback; +} + +U0 @gui_widget_set_text(Widget* widget, U8* text) +{ + if (!widget) + return; + switch (widget->type) { + case WIDGET_TYPE_BUTTON: + StrCpy(&widget(ButtonWidget*)->text, text); + break; + case WIDGET_TYPE_INPUT: + StrCpy(&widget(TextInputWidget*)->text, text); + break; + case WIDGET_TYPE_LABEL: + StrCpy(&widget(TextLabelWidget*)->text, text); + break; + case WIDGET_TYPE_MENU_ITEM: + StrCpy(&widget(MenuItemWidget*)->text, text); + break; + default: + break; + } +} + +Bool @widget_is_hovered(I64 x, I64 y, Widget* widget) +{ + if (Mouse.x > x && Mouse.x < x + widget->width && Mouse.y > y && Mouse.y < y + widget->height) + return TRUE; + return FALSE; +} + +Bool @gui_widget_is_hovered(Window* win, Widget* widget) +{ + return @widget_is_hovered(win->x + widget->x, win->y + widget->y, widget); +} + +U0 @widget_add_widget_to_list(Window* win, Widget* widget) +{ + if (!win || !widget) + return; + @window_widgets_list* widgets_list = win->widget; + while (widgets_list->next) { + widgets_list = widgets_list->next; + } + @window_widgets_list* widget_list_item = CAlloc(sizeof(@window_widgets_list)); + widget_list_item->widget = widget; + widget_list_item->prev = widgets_list; + widgets_list->next = widget_list_item; +} + +U0 @widget_input_backspace(BitmapFontTextInputWidget* widget) +{ + I64 i; + I64 len = StrLen(&widget->text); + for (i = widget->cursor_index - 1; i < len; i++) { + widget->text[i] = widget->text[i + 1]; + } +} + +U0 @widget_input_clear_selected_region(BitmapFontTextInputWidget* widget) +{ + widget->selected_region_start = -1; + widget->selected_region_end = -1; +} +Bool @widget_input_delete_selected_region(BitmapFontTextInputWidget* widget) +{ + I64 i; + I64 j; + if (widget->selected_region_start != -1 && widget->selected_region_end != -1) { + j = widget->selected_region_start; + for (i = widget->selected_region_end + 1; i < StrLen(&widget->text) + 1; + i++) { + widget->text[j++] = widget->text[i]; + } + widget->text[j] = NULL; + widget->cursor_index = widget->selected_region_start; + @widget_input_clear_selected_region(widget); + return TRUE; + } + return FALSE; +} + +U0 @widget_input_delete_at_cursor(BitmapFontTextInputWidget* widget) +{ + I64 i; + I64 len = StrLen(&widget->text); + for (i = widget->cursor_index; i < len; i++) + widget->text[i] = widget->text[i + 1]; + @widget_input_clear_selected_region(widget); +} + +U0 @widget_input_insert_char(BitmapFontTextInputWidget* widget, I64 char) +{ + U8 buf[1024]; + U8* pos; + I64 i, j, k; + j = 0; + for (i = widget->cursor_index; i < StrLen(&widget->text); i++) { + buf[j++] = widget->text[i]; + } + buf[j] = NULL; + for (i = widget->cursor_index; i < 1024; i++) { + widget->text[i] = NULL; + } + widget->text[StrLen(&widget->text)] = char; + pos = &buf; + while (*pos) { + widget->text[StrLen(&widget->text)] = *pos; + pos++; + } + @widget_input_clear_selected_region(widget); + widget->cursor_index++; +} + +U0 @widget_input_insert_scancode(BitmapFontTextInputWidget* widget, I64 key) +{ + U8 buf[1024]; + U8* pos; + I64 i, j, k; + j = 0; + for (i = widget->cursor_index; i < StrLen(&widget->text); i++) { + buf[j++] = widget->text[i]; + } + buf[j] = NULL; + for (i = widget->cursor_index; i < 1024; i++) { + widget->text[i] = NULL; + } + if (!Bt(kbd.down_bitmap, SC_SHIFT)) + widget->text[StrLen(&widget->text)] = NORMAL_KEY_SCAN_DECODE_TABLE(U8*)[key]; + else + widget->text[StrLen(&widget->text)] = SHIFT_KEY_SCAN_DECODE_TABLE(U8*)[key]; + pos = &buf; + while (*pos) { + widget->text[StrLen(&widget->text)] = *pos; + pos++; + } + @widget_input_clear_selected_region(widget); + widget->cursor_index++; +} + +U0 @widget_input_insert_text(BitmapFontTextInputWidget* widget, U8* text) +{ + while (*text) { + @widget_input_insert_char(widget, *text); + text++; + } +} + +Bool @widget_input_handle_key(BitmapFontTextInputWidget* widget) +{ + I64 key = Keyboard.active_key; + I64 tS = Keyboard.active_key_tS; + if (widget->cursor_index > StrLen(&widget->text) || widget->cursor_index < 0) + widget->cursor_index = 0; + if (widget->selected_region_start > widget->selected_region_end) { + @widget_input_clear_selected_region(widget); + } + if (key && tS != Keyboard.last_key_tS) { + switch (key) { + case SC_DELETE: + if (widget->selected_region_start != -1 && widget->selected_region_end != -1) { + @widget_input_delete_selected_region(widget); + } else { + @widget_input_delete_at_cursor(widget); + } + break; + case SC_HOME: + if (Bt(kbd.down_bitmap, SC_SHIFT) && widget->selected_region_start) { + widget->selected_region_start = 0; + if (widget->selected_region_end == -1) + widget->selected_region_end = widget->cursor_index - 1; + } else { + @widget_input_clear_selected_region(widget); + widget->cursor_index = 0; + } + break; + case SC_CURSOR_LEFT: + /* + "widget->selected_region_start : %d \n", widget->selected_region_start; + "widget->selected_region_end : %d \n", widget->selected_region_end; + "widget->cursor_index : %d \n", widget->cursor_index; + */ + if (widget->cursor_index) + widget->cursor_index--; + if (!Bt(kbd.down_bitmap, SC_SHIFT)) { + if (widget->selected_region_start != -1) + widget->cursor_index = widget->selected_region_start; + @widget_input_clear_selected_region(widget); + } else { + if (Bt(kbd.down_bitmap, SC_CTRL) && widget->selected_region_start) { + widget->selected_region_start = 0; + if (widget->selected_region_end == -1) + widget->selected_region_end = widget->cursor_index; + break; + } + switch (widget->selected_region_start) { + case -1: + widget->selected_region_start = widget->cursor_index; + widget->selected_region_end = widget->cursor_index; + break; + // case 0: + // break; + default: + if (widget->cursor_index > widget->selected_region_start) { + widget->selected_region_end = widget->cursor_index - 1; + } else { + widget->selected_region_start = widget->cursor_index; + if (widget->selected_region_start == widget->selected_region_end) { + @widget_input_clear_selected_region(widget); + } + } + break; + } + } + break; + case SC_END: + if (Bt(kbd.down_bitmap, SC_SHIFT)) { + widget->selected_region_start = widget->cursor_index; + widget->selected_region_end = StrLen(&widget->text) - 1; + } else { + @widget_input_clear_selected_region(widget); + widget->cursor_index = StrLen(&widget->text); + } + break; + case SC_CURSOR_RIGHT: + /* + "widget->selected_region_start : %d \n", widget->selected_region_start; + "widget->selected_region_end : %d \n", widget->selected_region_end; + "widget->cursor_index : %d \n", widget->cursor_index; + */ + if (!Bt(kbd.down_bitmap, SC_SHIFT)) { + if (widget->selected_region_end != -1) + widget->cursor_index = widget->selected_region_end; + @widget_input_clear_selected_region(widget); + } else { + if (Bt(kbd.down_bitmap, SC_CTRL)) { + widget->selected_region_start = widget->cursor_index; + widget->selected_region_end = StrLen(&widget->text) - 1; + break; + } + switch (widget->selected_region_start) { + case -1: + widget->selected_region_start = widget->cursor_index; + widget->selected_region_end = widget->cursor_index; + break; + default: + if (widget->cursor_index == widget->selected_region_start) { + widget->selected_region_start = widget->cursor_index + 1; + } else + widget->selected_region_end = widget->cursor_index; + break; + } + } + if (widget->cursor_index < StrLen(&widget->text)) + widget->cursor_index++; + break; + + case SC_BACKSPACE: + if (@widget_input_delete_selected_region(widget)) + return TRUE; + if (widget->cursor_index < 1) + break; + @widget_input_backspace(widget); + @widget_input_clear_selected_region(widget); + widget->cursor_index--; + break; + + case 0x02 ... 0x0D: + case 0x10 ... 0x1B: + case 0x1E ... 0x29: + case 0x2B ... 0x35: + case 0x39: + if (Bt(kbd.down_bitmap, SC_CTRL)) { + switch (ScanCode2Char(key)) { + case 'a': + if (StrLen(&widget->text)) { + widget->selected_region_start = 0; + widget->selected_region_end = StrLen(&widget->text) - 1; + } + break; + case 'c': + case 'x': + if (widget->selected_region_start != -1 && widget->selected_region_end != -1) { + U64 pos = &widget->text; + pos += widget->selected_region_start; + U8* text = StrNew(pos); + text[widget->selected_region_end - widget->selected_region_start + 1] = NULL; + Clipboard.Insert(CLIP_TYPE_TEXT, text); + if (ScanCode2Char(key) == 'x') + @widget_input_delete_selected_region(widget); + } + break; + case 'v': + // FIXME: Clipboard.Paste? + if (Clipboard.length) { + @widget_input_delete_selected_region(widget); + if (Clipboard.items->prev) { + if (Clipboard.items->prev->item->type == CLIP_TYPE_TEXT) { + @widget_input_insert_text( + widget, + Clipboard.items->prev->item(ClipboardTextItem*)->text); + } + } + } + break; + } + break; + } + @widget_input_delete_selected_region(widget); + @widget_input_insert_scancode(widget, key); + break; + default: + //@widget_input_delete_selected_region(widget); + break; + }; + return TRUE; + } + return FALSE; +} + +Widget* @widget_create_widget(Window* win, I64 type, I64 x, I64 y, I64 width, + I64 height) +{ + if (!win || !type) + return NULL; + + I64 size_of_widget; + Widget* widget; + + switch (type) { + case WIDGET_TYPE_NULL: + return NULL; + case WIDGET_TYPE_BUTTON: + size_of_widget = sizeof(ButtonWidget) * 2; + goto @widget_create_set_values; + case WIDGET_TYPE_CHECKBOX: + size_of_widget = sizeof(CheckBoxWidget) * 2; + goto @widget_create_set_values; + case WIDGET_TYPE_TERMINAL: + size_of_widget = sizeof(TerminalWidget) * 2; + goto @widget_create_set_values; + case WIDGET_TYPE_RADIO: + size_of_widget = sizeof(RadioButtonWidget) * 2; + goto @widget_create_set_values; + case WIDGET_TYPE_INPUT: + size_of_widget = sizeof(TextInputWidget) * 2; + goto @widget_create_set_values; + case WIDGET_TYPE_LABEL: + size_of_widget = sizeof(TextLabelWidget) * 2; + goto @widget_create_set_values; + case WIDGET_TYPE_LISTVIEW: + size_of_widget = sizeof(ListViewWidget) * 2; + goto @widget_create_set_values; + case WIDGET_TYPE_MENU_ITEM: + size_of_widget = sizeof(MenuItemWidget) * 2; + goto @widget_create_set_values; + case WIDGET_TYPE_TTF_LABEL: + size_of_widget = sizeof(TrueTypeTextLabelWidget) * 2; + goto @widget_create_set_values; + case WIDGET_TYPE_CONTEXT2D: + size_of_widget = sizeof(Context2DWidget) * 2; + goto @widget_create_set_values; + case WIDGET_TYPE_HORZ_SLIDER: + size_of_widget = sizeof(HorizontalSliderWidget) * 2; + goto @widget_create_set_values; + case WIDGET_TYPE_VERT_SLIDER: + size_of_widget = sizeof(VerticalSliderWidget) * 2; + goto @widget_create_set_values; + case WIDGET_TYPE_HORZ_SCROLLBAR: + size_of_widget = sizeof(HorizontalScrollBarWidget) * 2; + goto @widget_create_set_values; + case WIDGET_TYPE_VERT_SCROLLBAR: + size_of_widget = sizeof(VerticalScrollBarWidget) * 2; + goto @widget_create_set_values; + default: + return NULL; + } + @widget_create_set_values : widget = CAlloc(size_of_widget); + widget->type = type; + widget->x = x; + widget->y = y; + widget->width = width; + widget->height = height; + widget->parent_win = win; + + switch (type) { + case WIDGET_TYPE_TERMINAL: + widget(TerminalWidget*)->backing_store = NewContext2D(Display.Width(), Display.Height()); + widget(TerminalWidget*)->input = FifoU8New(65536); + widget(TerminalWidget*)->color.background = Color(0, 0, 0); + widget(TerminalWidget*)->color.foreground = Color(217, 217, 217); + widget(TerminalWidget*)->color.cursor = Color(217, 217, 0); + widget(TerminalWidget*)->row = CAlloc(sizeof(@terminal_widget_row) * 2000); + break; + case WIDGET_TYPE_INPUT: + widget(TextInputWidget*)->color = Color(0, 0, 0); + widget(TextInputWidget*)->cursor_index = -1; + widget(TextInputWidget*)->mouse_drag_index = -1; + widget(TextInputWidget*)->selected_region_start = -1; + widget(TextInputWidget*)->selected_region_end = -1; + break; + case WIDGET_TYPE_LABEL: + widget(TextLabelWidget*)->color = Color(0, 0, 0); + widget(TextLabelWidget*)->SetText = CAlloc(0x1F, Fs->code_heap); + I32 addr = widget(TextLabelWidget*)->SetText; + MemCpy(addr, widget_self_set1, 0x1F); + MemCpy(addr + 12, &widget, 8); + Function.InsertCall(addr + 21, Gui.Widget.SetText); + break; + case WIDGET_TYPE_LISTVIEW: + widget(ListViewWidget*)->color = Color(0, 0, 0); + widget(ListViewWidget*)->items = CAlloc(sizeof(@list_view_item)); + break; + } + + @widget_add_widget_to_list(win, widget); + return widget; +} + +U0 @widget_init_widget(Widget* widget, Window* win, I64 type, I64 x, I64 y, + I64 width, I64 height) +{ + if (!win || !widget || !type) + return; + + I64 size_of_widget = 0; + I32 addr = NULL; + + switch (type) { + case WIDGET_TYPE_NULL: + return; + case WIDGET_TYPE_BUTTON: + size_of_widget = sizeof(ButtonWidget); + break; + case WIDGET_TYPE_CHECKBOX: + size_of_widget = sizeof(CheckBoxWidget); + break; + case WIDGET_TYPE_TERMINAL: + size_of_widget = sizeof(TerminalWidget); + break; + case WIDGET_TYPE_RADIO: + size_of_widget = sizeof(RadioButtonWidget); + break; + case WIDGET_TYPE_INPUT: + size_of_widget = sizeof(TextInputWidget); + break; + case WIDGET_TYPE_LABEL: + size_of_widget = sizeof(TextLabelWidget); + break; + case WIDGET_TYPE_LISTVIEW: + size_of_widget = sizeof(ListViewWidget); + break; + case WIDGET_TYPE_MENU_ITEM: + size_of_widget = sizeof(MenuItemWidget); + break; + case WIDGET_TYPE_TTF_LABEL: + size_of_widget = sizeof(TrueTypeTextLabelWidget); + break; + case WIDGET_TYPE_CONTEXT2D: + size_of_widget = sizeof(Context2DWidget); + break; + case WIDGET_TYPE_HORZ_SLIDER: + size_of_widget = sizeof(HorizontalSliderWidget); + break; + case WIDGET_TYPE_VERT_SLIDER: + size_of_widget = sizeof(VerticalSliderWidget); + break; + case WIDGET_TYPE_HORZ_SCROLLBAR: + size_of_widget = sizeof(HorizontalScrollBarWidget); + break; + case WIDGET_TYPE_VERT_SCROLLBAR: + size_of_widget = sizeof(VerticalScrollBarWidget); + break; + default: + break; + } + + MemSet(widget, NULL, size_of_widget); + + widget->type = type; + widget->x = x; + widget->y = y; + widget->width = width; + widget->height = height; + widget->parent_win = win; + + switch (type) { + case WIDGET_TYPE_TERMINAL: + widget(TerminalWidget*)->backing_store = NewContext2D(Display.Width(), Display.Height()); + widget(TerminalWidget*)->input = FifoU8New(65536); + widget(TerminalWidget*)->color.background = Color(0, 0, 0); + widget(TerminalWidget*)->color.foreground = Color(217, 217, 217); + widget(TerminalWidget*)->color.cursor = Color(217, 217, 0); + widget(TerminalWidget*)->row = CAlloc(sizeof(@terminal_widget_row) * 2000); + break; + case WIDGET_TYPE_INPUT: + widget(TextInputWidget*)->color = Color(0, 0, 0); + widget(TextInputWidget*)->cursor_index = -1; + widget(TextInputWidget*)->mouse_drag_index = -1; + widget(TextInputWidget*)->selected_region_start = -1; + widget(TextInputWidget*)->selected_region_end = -1; + widget(TextInputWidget*)->color = Color(0, 0, 0); + widget(TextInputWidget*)->SetText = CAlloc(0x1F, Fs->code_heap); + addr = widget(TextInputWidget*)->SetFont; + MemCpy(addr, widget_self_set1, 0x1F); + MemCpy(addr + 12, &widget, 8); + Function.InsertCall(addr + 21, Gui.Widget.SetFont); + addr = widget(TextInputWidget*)->SetText; + MemCpy(addr, widget_self_set1, 0x1F); + MemCpy(addr + 12, &widget, 8); + Function.InsertCall(addr + 21, Gui.Widget.SetText); + break; + case WIDGET_TYPE_LABEL: + widget(TextLabelWidget*)->color = Color(0, 0, 0); + widget(TextLabelWidget*)->SetText = CAlloc(0x1F, Fs->code_heap); + addr = widget(TextLabelWidget*)->SetFont; + MemCpy(addr, widget_self_set1, 0x1F); + MemCpy(addr + 12, &widget, 8); + Function.InsertCall(addr + 21, Gui.Widget.SetFont); + addr = widget(TextLabelWidget*)->SetText; + MemCpy(addr, widget_self_set1, 0x1F); + MemCpy(addr + 12, &widget, 8); + Function.InsertCall(addr + 21, Gui.Widget.SetText); + break; + case WIDGET_TYPE_LISTVIEW: + widget(ListViewWidget*)->color = Color(0, 0, 0); + widget(ListViewWidget*)->items = CAlloc(sizeof(@list_view_item)); + break; + } + + @widget_add_widget_to_list(win, widget); +} + +Gui.CreateWidget = &@widget_create_widget; +Gui.InitWidget = &@widget_init_widget; + +Gui.Widget.IsHovered = &@gui_widget_is_hovered; +Gui.Widget.SetCallback = &@gui_widget_set_callback; +Gui.Widget.SetEcho = &@gui_widget_set_echo; +Gui.Widget.SetFont = &@gui_widget_set_font; +Gui.Widget.SetMousePointer = &@gui_widget_set_mouse_pointer; +Gui.Widget.ClearMousePointer = &@gui_widget_clear_mouse_pointer; +Gui.Widget.SetOpacity = &@gui_widget_set_opacity; +Gui.Widget.SetText = &@gui_widget_set_text; + +"widget "; \ No newline at end of file diff --git a/System/MakeSystem.HC b/System/MakeSystem.HC new file mode 100644 index 0000000..6d9d815 --- /dev/null +++ b/System/MakeSystem.HC @@ -0,0 +1,103 @@ +/* clang-format off */ + +DocMax(adam_task); +WinMax(adam_task); +WinToTop(adam_task); + +#include "Setup/Environment"; + +// Erythros system drivers +"drivers: { "; +#include "Drivers/Audio"; +#include "Drivers/Display"; +#include "Drivers/Mouse"; +#include "Drivers/Pci"; +#include "Drivers/Virtio-blk"; +#include "Drivers/VMSVGA"; +#include "Drivers/VMwareTools"; +#include "Drivers/AC97"; +"}\n"; + +// FFI support files +#include "FFI/Base"; +#include "FFI/LibC"; +#include "FFI/New"; +#include "FFI/ELF64"; + +// stb_image library +#include "Utilities/Image"; +load_elf("M:/build/bin/image"); + +// Jakt support files +#include "Jakt/OS"; +#include "Jakt/IOPort"; +#include "Jakt/PCI"; +#include "Jakt/Time"; + +#include "Libraries/Tlse"; +load_elf("M:/build/bin/tlse"); + +// Networking APIs +#include "Api/Dns.HC"; +#include "Api/Icmp.HC"; +#include "Api/Ipv4.HC"; +#include "Api/MD5.HC"; +#include "Api/NetInfo.HC"; +#include "Api/Tcp.HC"; +#include "Api/Tls.HC"; + +// Erythros system libraries +"libraries: { "; +#include "Libraries/Function"; +#include "Libraries/Base64"; +#include "Libraries/String"; +#include "Libraries/BitmapFont"; +#include "Libraries/Display"; +#include "Libraries/FileSystem"; +#include "Libraries/Graphics2D"; +#include "Libraries/Animation2D"; +#include "Libraries/Image"; +#include "Libraries/Json"; +#include "Libraries/Rsa"; +#include "Libraries/Sha256"; +#include "Libraries/System"; +#include "Libraries/RawText"; +#include "Libraries/User"; +#include "Libraries/Session"; +#include "Libraries/Shell"; +#include "Libraries/Stdio"; +#include "Libraries/Http"; +#include "Libraries/Audio"; +#include "Libraries/Gui"; +#include "Libraries/Ipc"; +#include "Libraries/Clipboard"; +#include "Libraries/Widget"; +#include "Libraries/Theme"; +"}\n"; + +@http_init_tmp_and_cache_directories; + +load_elf("M:/build/bin/net"); + +// Networking Utilities +#include "Utilities/Dns"; +#include "Utilities/NetRep"; +#include "Utilities/Ping"; +#include "Utilities/Time"; + +Spawn(_start, , "Net Task"); + +TimeSync; + +#include "Core/Compositor"; +#include "Core/FileSystem"; +#include "Core/Menu"; +#include "Core/MessageBox"; +#include "Core/Shell"; +#include "Core/ShellCommands"; +#include "Core/SystemTray"; +#include "Core/SystemStarter"; + +#include "Setup/Init"; + +/* clang-format on */ diff --git a/System/Setup/Environment.HC b/System/Setup/Environment.HC new file mode 100644 index 0000000..506a661 --- /dev/null +++ b/System/Setup/Environment.HC @@ -0,0 +1,229 @@ +AutoComplete(0); + +#define include_noreindex #include + +I64 tos_nist_offset = 5603; // UTC -4 + +#define NIST_TIME_OFFSET (tos_nist_offset - local_time_offset / CDATE_FREQ) + +public +I64 CDate2Unix(CDate dt) +{ // TempleOS datetime to Unix timestamp. + return ToI64((dt - Str2Date("1/1/1970")) / CDATE_FREQ + NIST_TIME_OFFSET); +} + +public +CDate Unix2CDate(I64 timestamp) +{ // Unix timestamp to TempleOS datetime. + return (timestamp - NIST_TIME_OFFSET) * CDATE_FREQ + Str2Date("1/1/1970"); +} + +// FIXME: Put these in a "Builtin" library? +U0 FifoU8Cpy(CFifoU8* f, U8* s) +{ + if (!f || !s) + return; + while (*s) + FifoU8Ins(f, *s++); +} +Bool KeyDown(I64 sc) return Bt(kbd.down_bitmap, sc); +I64 T(Bool _condition, I64 _true, I64 _false) +{ + if (_condition) + return _true; + return _false; +} + +asm + { +_MEMCPY_U16:: + PUSH RBP + MOV RBP,RSP + PUSH RSI + PUSH RDI + CLD + MOV RDI,U64 SF_ARG1[RBP] + MOV RSI,U64 SF_ARG2[RBP] + MOV RCX,U64 SF_ARG3[RBP] + REP_MOVSW + MOV RAX,RDI + POP RDI + POP RSI + POP RBP + RET1 24 +_MEMCPY_U32:: + PUSH RBP + MOV RBP,RSP + PUSH RSI + PUSH RDI + CLD + MOV RDI,U64 SF_ARG1[RBP] + MOV RSI,U64 SF_ARG2[RBP] + MOV RCX,U64 SF_ARG3[RBP] + REP_MOVSD + MOV RAX,RDI + POP RDI + POP RSI + POP RBP + RET1 24 +_MEMCPY_U64:: + PUSH RBP + MOV RBP,RSP + PUSH RSI + PUSH RDI + CLD + MOV RDI,U64 SF_ARG1[RBP] + MOV RSI,U64 SF_ARG2[RBP] + MOV RCX,U64 SF_ARG3[RBP] + REP_MOVSQ + MOV RAX,RDI + POP RDI + POP RSI + POP RBP + RET1 24 + } + +public _extern _MEMCPY_U16 U16* MemCpyU16(U16* dst, U16* src, I64 cnt); +public +_extern _MEMCPY_U32 U32* MemCpyU32(U32* dst, U32* src, I64 cnt); +public +_extern _MEMCPY_U64 U64* MemCpyU64(U64* dst, U64* src, I64 cnt); + +I64 @lerp(U32 val, U32 mx1, U32 mx2) +{ + F64 r = (val & mx1) / ToF64(mx1); + return ToI64(r * mx2); +} + +U0 @patch_call_rel32(U32 from, U32 to) +{ + *(from(U8*)) = 0xE8; + *((from + 1)(I32*)) = to - from - 5; +} + +U0 @patch_jmp_rel32(U32 from, U32 to) +{ + *(from(U8*)) = 0xE9; + *((from + 1)(I32*)) = to - from - 5; +} + +CMemBlk* ShrinkMemBlkByPags(CMemBlk* from, I64 count) +{ + from->pags -= count; + U64 to = from; + to += count * MEM_PAG_SIZE; + MemCpy(to, from, MEM_PAG_SIZE); + return to; +} + +U0 @sse_enable() +{ + /* clang-format off */ + asm + { + MOV_EAX_CR0 + AND AX, 0xFFFB // clear coprocessor emulation CR0.EM + OR AX, 0x2 // set coprocessor monitoring CR0.MP + MOV_CR0_EAX + MOV_EAX_CR4 + OR AX, 3 << 9 // set CR4.OSFXSR and CR4.OSXMMEXCPT at the same time + MOV_CR4_EAX + } + /* clang-format on */ +} + +U0 @sse_enable_on_all_cores() +{ + I64 i; + for (i = 1; i < mp_cnt; i++) + Spawn(&@sse_enable, , , i); +} + +I64 @t(Bool _condition, I64 _true, I64 _false) +{ + if (_condition) + return _true; + return _false; +} + +U0 @erythros_mem_task_loop() +{ + while (1) { + Sleep(1); + }; +} + +// Before doing anything else, we: + +// 1. Mark memory in code heap below 0x1000000 as used. +sys_code_bp->mem_free_lst->next->pags = 0; + +// 2. Free up 64MB at bottom of code heap for non-HolyC programs +sys_code_bp->mem_free_lst = ShrinkMemBlkByPags(sys_code_bp->mem_free_lst, 131072); + +// 3. Enable SSE +@sse_enable; + +// 4. Init mem_tasks + +CTask* erythros_mem_task = Spawn(&@erythros_mem_task_loop, , "ErythrosMemTask"); + +#define MALLOC_MEM_TASK_COUNT 4 +CTask** malloc_mem_task = CAlloc(sizeof(CTask*) * MALLOC_MEM_TASK_COUNT, erythros_mem_task); +I64 malloc_current_mem_task = 0; + +U0 @malloc_mem_tasks_init() +{ + U8* scratch_buffer[64]; + I64 i; + for (i = 0; i < MALLOC_MEM_TASK_COUNT; i++) { + StrPrint(scratch_buffer, "ErythrosMallocTask%d", i); + malloc_mem_task[i] = Spawn(&@erythros_mem_task_loop, , scratch_buffer); + } +} + +@malloc_mem_tasks_init; + +U0 dd() { DocDump(adam_task->put_doc); } +//@patch_jmp_rel32(&Fault2, &Reboot); // Reboot instead of crashing to the debugger +U0 NoBeep(I8, Bool) {}; +@patch_jmp_rel32(&Beep, &NoBeep); // Don't delay on beep when entering debugger + +Bool BlkDevLock2(CBlkDev* bd) +{ + BlkDevChk(bd); + while (bd->lock_fwding) + bd = bd->lock_fwding; + if (!Bt(&bd->locked_flags, BDlf_LOCKED) || bd->owning_task != Fs) { + while (LBts(&bd->locked_flags, BDlf_LOCKED)) + Sleep(Rand * 10); + bd->owning_task = Fs; + return TRUE; + } else + return FALSE; +} + +Bool DrvLock2(CDrv* dv) +{ + DrvChk(dv); + BlkDevLock2(dv->bd); + if (!Bt(&dv->locked_flags, DVlf_LOCKED) || dv->owning_task != Fs) { + while (LBts(&dv->locked_flags, DVlf_LOCKED)) + Sleep(Rand * 10); + dv->owning_task = Fs; + return TRUE; + } else + return FALSE; +} + +@patch_jmp_rel32(&BlkDevLock, &BlkDevLock2); // Patch BlkDevLock so we don't deadlock on multiple tasks reading from virtio disk +@patch_jmp_rel32(&DrvLock, &DrvLock2); // Patch DrvLock so we don't deadlock on multiple tasks reading from virtio disk + +U0 @erythros_mem_task_loop() +{ + while (1) { + Sleep(1); + }; +} + +CTask* erythros_mem_task = Spawn(&@erythros_mem_task_loop, , "ErythrosMemTask"); diff --git a/System/Setup/Init.HC b/System/Setup/Init.HC new file mode 100644 index 0000000..8738cef --- /dev/null +++ b/System/Setup/Init.HC @@ -0,0 +1,65 @@ + +// Save pointer to TempleOS system-wide (CTRL-ALT) callbacks +U64 tos_fp_cbs_enabled = keydev.fp_ctrl_alt_cbs; +U64 tos_fp_cbs_disabled = CAlloc(0xD0); + +U0 @erythros_init() +{ + I64 err = 0; + + // Initialize Display + if (!Display.Driver()) { + err = Display.Init(1920, 1080, 32, FB_VMSVGA); + } + + if (err) { + DocClear(Fs->put_doc); + "No supported display device found."; + while (1) { + Sleep(1); + }; + } + + // Initialize Mouse + Mouse.Init(); + Spawn(Mouse.Task, , "Mouse"); + + // Enable debug output + Raw(ON); + DocDump(adam_task->put_doc); + + // Disable TempleOS system-wide (CTRL-ALT) callbacks + keydev.fp_ctrl_alt_cbs = tos_fp_cbs_disabled; + + // Suspend TempleOS Window Manager task + Suspend(sys_winmgr_task); + + // Reassign VGA writes to a random buffer to avoid collision with SVGA FB + text.vga_alias = MAlloc(1048576, adam_task); + + // Initialize Graphics2D Library + Graphics2D.Init(); + + "\x1b[2J\x1b[H"; + //"%s\n", System.BuildInfo(); + + switch (Display.Driver()) { + case FB_VMSVGA: + "Display driver is: VMSVGA\n"; + break; + } + + // Initialize FileSystem + // FileSystem.Init(); + + // Initialize Compositor + Compositor.Init(); + + // Spawn Compositor + Spawn(Compositor.Task, , "Compositor"); + + // Spawn SystemStarter + Spawn(SystemStarter.Task, , "SystemStarter", 1); +} + +@erythros_init; diff --git a/System/Shell/Commands/aplay.HC b/System/Shell/Commands/aplay.HC new file mode 100644 index 0000000..274c4b2 --- /dev/null +++ b/System/Shell/Commands/aplay.HC @@ -0,0 +1,35 @@ +I64 @shell_cmd_aplay(@shell* sh, I64 argc, U8** argv) +{ + U8 buf[512]; + if (argc < 2) { + StrPrint(&buf, "Error reading file %s\n", argv[1]); + Stdio.WriteLine(sh, "Usage: aplay [OPTION]... [FILE]...\n"); + return 1; + } + I64 i; + I64 size; + Sound* snd; + U8* filename = NULL; + for (i = 1; i < argc; i++) { + filename = @shell_expand_relative_path(sh, argv[i]); + System.Log(Fs, "filename: %s", filename); + if (FileSystem.PathExists(filename)) { + snd = Audio.SoundFromFile(filename); + if (!snd) { + StrPrint(&buf, "%s: Error playing audio file\n", filename); + Stdio.WriteLine(sh, &buf); + Free(filename); + return 1; + } + Audio.PlaySound(snd); + Audio.FreeSound(snd); + Free(filename); + } else { + StrPrint(&buf, "%s: No such file or directory\n", filename); + Stdio.WriteLine(sh, &buf); + Free(filename); + return 1; + } + } + return 0; +} \ No newline at end of file diff --git a/System/Shell/Commands/cat.HC b/System/Shell/Commands/cat.HC new file mode 100644 index 0000000..4d4c9fc --- /dev/null +++ b/System/Shell/Commands/cat.HC @@ -0,0 +1,19 @@ +I64 @shell_cmd_cat(@shell* sh, I64 argc, U8** argv) +{ + if (argc < 2) + return 0; + I64 i; + I64 j; + I64 size = 0; + U8* filename = NULL; + U8* buf = NULL; + for (i = 1; i < argc; i++) { + filename = @shell_expand_relative_path(sh, argv[i]); + buf = FileSystem.ReadFile(filename, &size); + for (j = 0; j < size; j++) + FifoU8Ins(sh->output, buf[j]); + Free(buf); + Free(filename); + } + return 0; +} \ No newline at end of file diff --git a/System/Shell/Commands/clear.HC b/System/Shell/Commands/clear.HC new file mode 100644 index 0000000..11afcf9 --- /dev/null +++ b/System/Shell/Commands/clear.HC @@ -0,0 +1,9 @@ +I64 @shell_cmd_clear(@shell* sh, I64 argc, U8** argv) +{ + if (argc > 1) { + Stdio.WriteLine(sh, "esh: clear: too many arguments\n"); + return 1; + } + Stdio.WriteLine(sh, "\x1b[2J\x1b[0;0H"); + return 0; +} \ No newline at end of file diff --git a/System/Shell/Commands/echo.HC b/System/Shell/Commands/echo.HC new file mode 100644 index 0000000..5cbe7d0 --- /dev/null +++ b/System/Shell/Commands/echo.HC @@ -0,0 +1,10 @@ +I64 @shell_cmd_echo(@shell* sh, I64 argc, U8** argv) +{ + I64 i; + for (i = 1; i < argc; i++) { + Stdio.WriteLine(sh, argv[i]); + Stdio.WriteLine(sh, " "); + } + Stdio.WriteLine(sh, "\n"); + return 0; +} \ No newline at end of file diff --git a/System/Shell/Commands/esh.HC b/System/Shell/Commands/esh.HC new file mode 100644 index 0000000..8d129aa --- /dev/null +++ b/System/Shell/Commands/esh.HC @@ -0,0 +1,5 @@ +I64 @shell_cmd_esh(@shell* sh, I64 argc, U8** argv) +{ + @shell_input_loop(sh); + return 0; +} \ No newline at end of file diff --git a/System/Shell/Commands/history.HC b/System/Shell/Commands/history.HC new file mode 100644 index 0000000..a9185a1 --- /dev/null +++ b/System/Shell/Commands/history.HC @@ -0,0 +1,14 @@ +I64 @shell_cmd_history(@shell* sh, I64 argc, U8** argv) +{ + I64 i; + I64 j; + U8 buf[512]; + for (i = 0; i < sh->history.pos; i++) { + StrPrint(&buf, "%05d %s\n", i + 1, sh->history.entries[i]); + j = 0; + while (buf[j] == '0') + buf[j++] = ' '; + Stdio.WriteLine(sh, &buf); + } + return 0; +} \ No newline at end of file diff --git a/System/Shell/Commands/ifconfig.HC b/System/Shell/Commands/ifconfig.HC new file mode 100644 index 0000000..3da268e --- /dev/null +++ b/System/Shell/Commands/ifconfig.HC @@ -0,0 +1,47 @@ +#define ETHERNET_FRAME_SIZE 1400 + +I64 @shell_cmd_ifconfig(@shell* sh, I64 argc, U8** argv) +{ + NetInfoRequest* req = @net_info_request; + + U64 en0_mac = req->mac_address; + U32 en0_addr = req->ipv4_address; + U32 en0_mask = req->ipv4_netmask; + U32 en0_bcast = req->ipv4_address | ~req->ipv4_netmask; + + U8 buf[512]; + + Stdio.WriteLine(sh, "en0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu %d\n", + ETHERNET_FRAME_SIZE - 18); + + Stdio.WriteLine(sh, + " inet %d.%d.%d.%d netmask %d.%d.%d.%d broadcast " + "%d.%d.%d.%d\n", + en0_addr.u8[3], en0_addr.u8[2], en0_addr.u8[1], en0_addr.u8[0], + en0_mask.u8[3], en0_mask.u8[2], en0_mask.u8[1], en0_mask.u8[0], + en0_bcast.u8[3], en0_bcast.u8[2], en0_bcast.u8[1], en0_bcast.u8[0]); + + Stdio.WriteLine(sh, + " ether %02x:%02x:%02x:%02x:%02x:%02x txqueuelen 0 " + "(Ethernet)\n", + en0_mac.u8[5], en0_mac.u8[4], en0_mac.u8[3], en0_mac.u8[2], en0_mac.u8[1], + en0_mac.u8[0]); + + Stdio.WriteLine(sh, " RX packets %d bytes %d\n", req->rx_frames, + req->rx_bytes); + + Stdio.WriteLine(sh, " RX errors %d dropped %d overruns %d frame %d\n", 0, + 0, 0, 0); // TODO + + Stdio.WriteLine(sh, " TX packets %d bytes %d\n", req->tx_frames, + req->tx_bytes); + + Stdio.WriteLine(sh, + " TX errors %d dropped %d overruns %d carrier %d " + "collisions %d\n", + 0, 0, 0, 0, 0); // TODO + + Stdio.WriteLine(sh, "\n"); + + return 0; +} \ No newline at end of file diff --git a/System/Shell/Commands/ls.HC b/System/Shell/Commands/ls.HC new file mode 100644 index 0000000..4b19a44 --- /dev/null +++ b/System/Shell/Commands/ls.HC @@ -0,0 +1,70 @@ +#define @shell_cmd_ls_opt_a 0 +#define @shell_cmd_ls_opt_l 1 + +I64 @shell_cmd_ls_output(@shell* sh, U8* arg_path, I64 flags) +{ + U8 buf[512]; + U8* path = @shell_expand_relative_path(sh, arg_path); + if (!FileSystem.PathExists(path)) { + StrPrint(&buf, "ls: cannot access '%s': No such file or directory\n", path); + Stdio.WriteLine(sh, &buf); + Free(path); + return 2; + } + @dir_entry* tmpf = NULL; + @dir_entry* tmpf2 = NULL; + tmpf = FileSystem.GetFiles(path); + if (tmpf) + while (tmpf) { + if (tmpf->type == DE_TYPE_DIR) { + StrCpy(&buf, "\x1b[1;34m"); + Stdio.WriteLine(sh, &buf); + } + StrPrint(&buf, "%s\x1b[0m %u\n", &tmpf->name, tmpf->size); + Stdio.WriteLine(sh, &buf); + tmpf2 = tmpf; + tmpf = tmpf->next; + Free(tmpf2); + } + Free(path); + return 0; +} + +I64 @shell_cmd_ls(@shell* sh, I64 argc, U8** argv) +{ + U8 buf[512]; + U8* options_list = "al"; + U64 options_err = NULL; + I64 dir_cnt = 0; + I64 flags = NULL; + I64 rval = 0; + I64 i; + switch (@shell_parse_opts(sh, options_list, argc, argv, &flags, &options_err, + TRUE)) { + case SHELL_OPTS_ERR_INVALID_OPT: + StrPrint(&buf, "ls: invalid option -- '%s'\n", options_err); + Stdio.WriteLine(sh, &buf); + break; + default: + break; + } + if (options_err) { + Free(options_err); + return 2; + } + + for (i = 1; i < argc; i++) + if (argv[i][0] != '-') + dir_cnt++; + + if (!dir_cnt) { + return @shell_cmd_ls_output(sh, &sh->cwd, flags); + } else { + for (i = 1; i < argc; i++) + if (argv[i][0] != '-') { + rval = Max(rval, @shell_cmd_ls_output(sh, argv[i], flags)); + } + } + + return rval; +} \ No newline at end of file diff --git a/System/Shell/Commands/nslookup.HC b/System/Shell/Commands/nslookup.HC new file mode 100644 index 0000000..ee71f71 --- /dev/null +++ b/System/Shell/Commands/nslookup.HC @@ -0,0 +1,32 @@ +I64 @shell_cmd_nslookup(@shell* sh, I64 argc, U8** argv) +{ + if (argc < 2) { + // TODO: Interactive mode + return 0; + } + if (argc > 2) { + // TODO: Server argument + } + + NetInfoRequest* req = @net_info_request; + U32 resolver_ip = req->dns_server_address; + Free(req); + + Stdio.WriteLine(sh, "Server: %d.%d.%d.%d\n", resolver_ip.u8[3], + resolver_ip.u8[2], resolver_ip.u8[1], resolver_ip.u8[0]); + + Stdio.WriteLine(sh, "Address: %d.%d.%d.%d#53\n\n", resolver_ip.u8[3], + resolver_ip.u8[2], resolver_ip.u8[1], resolver_ip.u8[0]); + + U32 res_ip = @dns_query(argv[1]); + + if (res_ip == U32_MAX) { + Stdio.WriteLine(sh, "** server can't find %s: NXDOMAIN\n\n", argv[1]); + return 1; + } + Stdio.WriteLine(sh, "Non-authoritative answer:\n"); + Stdio.WriteLine(sh, "Name: %s\n", argv[1]); + Stdio.WriteLine(sh, "Address: %d.%d.%d.%d\n\n", res_ip.u8[3], res_ip.u8[2], + res_ip.u8[1], res_ip.u8[0]); + return 0; +} \ No newline at end of file diff --git a/System/Shell/Commands/open.HC b/System/Shell/Commands/open.HC new file mode 100644 index 0000000..e763db1 --- /dev/null +++ b/System/Shell/Commands/open.HC @@ -0,0 +1,8 @@ +I64 @shell_cmd_open(@shell* sh, I64 argc, U8** argv) +{ + if (argc < 2) { + Stdio.WriteLine(sh, "open: path required\n"); + return 1; + } + return @systemstarter_open(sh, argc, argv); +} \ No newline at end of file diff --git a/System/Shell/Commands/ping.HC b/System/Shell/Commands/ping.HC new file mode 100644 index 0000000..854a676 --- /dev/null +++ b/System/Shell/Commands/ping.HC @@ -0,0 +1,58 @@ +I64 @shell_cmd_ping(@shell* sh, I64 argc, U8** argv) +{ + if (argc < 2) { + Stdio.WriteLine(sh, "ping: usage error: Destination address required\n"); + return 1; + } + U8* host = argv[1]; + if (!host || !StrLen(host)) { + Stdio.WriteLine(sh, "Invalid host specified\n"); + return PING_ERR_INVALID_HOST; + } + I64 count = 4; + + U32 addr = @dns_query(host); + if (addr == U32_MAX) { + Stdio.WriteLine(sh, "Host not found\n"); + return PING_ERR_HOST_NOT_FOUND; + } + + U16 iden = (RandU16 * SysTimerRead) & 0xFFFF; + I64 start_jiffies; + U32 reply = NULL; + I64 res = 0; + U16 seq = 0; + I64 loss = 0; + + IcmpRequest* request = CAlloc(sizeof(IcmpRequest), Fs->code_heap); + + Stdio.WriteLine(sh, "PING %s (%d.%d.%d.%d): %d data bytes\n", + host, addr.u8[3], addr.u8[2], addr.u8[1], addr.u8[0], PING_PAYLOAD_SIZE); + + I64 i; + for (i = 0; i < count; i++) { + start_jiffies = cnts.jiffies; + reply = @icmp_echo_request(addr, iden, seq, request, i); + if (!reply) { + Stdio.WriteLine(sh, "Request timeout for icmp_seq %d\n", seq); + ++loss; + res = 1; + } else { + Stdio.WriteLine(sh, "%d bytes from %d.%d.%d.%d: icmp_seq=%d ttl=%d time=%d ms\n", + reply.u16[1], addr.u8[3], addr.u8[2], addr.u8[1], addr.u8[0], seq, reply.u16[0], cnts.jiffies - start_jiffies); + } + while (cnts.jiffies < start_jiffies + 1000 && i < (count - 1)) + Sleep(1); + ++seq; + } + + Free(request); + + Stdio.WriteLine(sh, "--- %d.%d.%d.%d ping statistics ---\n", addr.u8[3], addr.u8[2], addr.u8[1], addr.u8[0]); + Stdio.WriteLine(sh, "%d packets transmitted, %d packets received, %0f", + seq, seq - loss, (loss * 1.0 / seq * 1.0) * 100); + Stdio.WriteLine(sh, "%c", 37); + Stdio.WriteLine(sh, " packet loss\n"); + + return res; +} diff --git a/System/Shell/Commands/poweroff.HC b/System/Shell/Commands/poweroff.HC new file mode 100644 index 0000000..7e0073a --- /dev/null +++ b/System/Shell/Commands/poweroff.HC @@ -0,0 +1,5 @@ +I64 @shell_cmd_poweroff(@shell* sh, I64 argc, U8** argv) +{ + System.PowerOff(); + return 0; +} \ No newline at end of file diff --git a/System/Shell/Commands/pwd.HC b/System/Shell/Commands/pwd.HC new file mode 100644 index 0000000..460cbad --- /dev/null +++ b/System/Shell/Commands/pwd.HC @@ -0,0 +1,7 @@ +I64 @shell_cmd_pwd(@shell* sh, I64 argc, U8** argv) +{ + U8 buf[512]; + StrPrint(&buf, "%s\n", &sh->cwd); + Stdio.WriteLine(sh, &buf); + return 0; +} \ No newline at end of file diff --git a/System/Shell/Commands/reboot.HC b/System/Shell/Commands/reboot.HC new file mode 100644 index 0000000..2bec99a --- /dev/null +++ b/System/Shell/Commands/reboot.HC @@ -0,0 +1,5 @@ +I64 @shell_cmd_reboot(@shell* sh, I64 argc, U8** argv) +{ + Reboot; + return 0; +} \ No newline at end of file diff --git a/System/Shell/Commands/sh.HC b/System/Shell/Commands/sh.HC new file mode 100644 index 0000000..b564a59 --- /dev/null +++ b/System/Shell/Commands/sh.HC @@ -0,0 +1,4 @@ +I64 @shell_cmd_sh(@shell* sh, I64 argc, U8** argv) +{ + return @shell_cmd_esh(sh, argc, argv); +} \ No newline at end of file diff --git a/System/Shell/Commands/uname.HC b/System/Shell/Commands/uname.HC new file mode 100644 index 0000000..900254d --- /dev/null +++ b/System/Shell/Commands/uname.HC @@ -0,0 +1,81 @@ +#define @shell_cmd_uname_opt_s 0 +#define @shell_cmd_uname_opt_n 1 +#define @shell_cmd_uname_opt_r 2 +#define @shell_cmd_uname_opt_v 3 +#define @shell_cmd_uname_opt_m 4 +#define @shell_cmd_uname_opt_p 5 +#define @shell_cmd_uname_opt_i 6 +#define @shell_cmd_uname_opt_o 7 +#define @shell_cmd_uname_opt_a 8 + +I64 @shell_cmd_uname(@shell* sh, I64 argc, U8** argv) +{ + I64 i; + CDateStruct* ds = CAlloc(sizeof(CDateStruct)); + Date2Struct(ds, sys_compile_time); + U8* options_list = "snrvmpioa"; + U64 options_err = NULL; + U8* ds_m = "JanFebMarAprMayJunJulAugSepOctNovDec"; + U8* ds_d = "SunMonTueWedThuFriSat"; + U8* ds_mm = " "; + U8* ds_dd = " "; + U8 buf[512]; + I64 flags = NULL; + StrCpy(&buf, ""); + if (argc < 2) + flags |= 1 << @shell_cmd_uname_opt_s; + switch ( + @shell_parse_opts(sh, options_list, argc, argv, &flags, &options_err)) { + case SHELL_OPTS_ERR_INVALID_OPT: + StrPrint(&buf, "uname: invalid option -- '%s'\n", options_err); + Stdio.WriteLine(sh, &buf); + break; + case SHELL_OPTS_ERR_EXTRA_OPD: + StrPrint(&buf, "uname: extra operand '%s'\n", options_err); + Stdio.WriteLine(sh, &buf); + break; + default: + break; + } + if (options_err) { + Free(options_err); + Free(ds); + return 1; + } + if (flags & 1 << @shell_cmd_uname_opt_a) + flags = 0x01FF; // Set all options. + for (i = 0; i < 8; i++) { + switch (flags & 1 << i) { + case 1 << @shell_cmd_uname_opt_s: + String.Append(&buf, Define("DD_OS_NAME_VERSION")); + *StrLastOcc(&buf, "V") = NULL; + break; + case 1 << @shell_cmd_uname_opt_n: + String.Append(&buf, "%s ", &sh->session->hostname); + break; + case 1 << @shell_cmd_uname_opt_r: + String.Append(&buf, "%1.2f ", sys_os_version); + break; + case 1 << @shell_cmd_uname_opt_v: + MemCpy(ds_mm, ds_m + ((ds->mon - 1) * 3), 3); + MemCpy(ds_dd, ds_d + (ds->day_of_week * 3), 3); + String.Append(&buf, "%s %s %d %02d:%02d:%02d UTC %d ", ds_dd, ds_mm, + ds->day_of_mon, ds->hour, ds->min, ds->sec, ds->year); + break; + case 1 << @shell_cmd_uname_opt_m: + case 1 << @shell_cmd_uname_opt_p: + case 1 << @shell_cmd_uname_opt_i: + String.Append(&buf, "x86_64 "); + break; + case 1 << @shell_cmd_uname_opt_o: + String.Append(&buf, "Erythros "); + break; + default: + break; + } + } + Stdio.WriteLine(sh, &buf); + Stdio.WriteLine(sh, "\n"); + Free(ds); + return 0; +} \ No newline at end of file diff --git a/System/Shell/Commands/whoami.HC b/System/Shell/Commands/whoami.HC new file mode 100644 index 0000000..5474528 --- /dev/null +++ b/System/Shell/Commands/whoami.HC @@ -0,0 +1,28 @@ +I64 @shell_cmd_whoami(@shell* sh, I64 argc, U8** argv) +{ + U8* options_list = ""; + U64 options_err = NULL; + I64 flags = NULL; + I64 res = 0; + U8 buf[512]; + switch ( + @shell_parse_opts(sh, options_list, argc, argv, &flags, &options_err)) { + case SHELL_OPTS_ERR_INVALID_OPT: + StrPrint(&buf, "uname: unrecognized option -- '%s'\n", options_err); + Stdio.WriteLine(sh, &buf); + res = 1; + break; + case SHELL_OPTS_ERR_EXTRA_OPD: + StrPrint(&buf, "uname: extra operand '%s'\n", options_err); + Stdio.WriteLine(sh, &buf); + res = 1; + break; + default: + Stdio.WriteLine(sh, &sh->session->user.name); + Stdio.WriteLine(sh, "\n"); + break; + } + if (options_err) + Free(options_err); + return res; +} \ No newline at end of file diff --git a/System/Shell/Commands/wpset.HC b/System/Shell/Commands/wpset.HC new file mode 100644 index 0000000..85b46c0 --- /dev/null +++ b/System/Shell/Commands/wpset.HC @@ -0,0 +1,24 @@ +I64 @shell_cmd_wpset(@shell* sh, I64 argc, U8** argv) +{ + U8 buf[512]; + if (argc < 2) { + return 0; + } + I64 size = 0; + U64 fbuf = FileSystem.ReadFile(argv[1], &size); + if (!fbuf) { + StrPrint(&buf, "Error reading file %s\n", argv[1]); + Stdio.WriteLine(sh, &buf); + return 1; + } + Context2D* new = Image.BufferToContext2D(fbuf, size); + Free(fbuf); + if (!new) { + StrPrint(&buf, "Error in Image.BufferToContext2D\n"); + Stdio.WriteLine(sh, &buf); + return 1; + } + Compositor.SetWallpaper(new); + DelContext2D(new); + return 0; +} \ No newline at end of file diff --git a/System/Utilities/Dns.HC b/System/Utilities/Dns.HC new file mode 100644 index 0000000..42c97a7 --- /dev/null +++ b/System/Utilities/Dns.HC @@ -0,0 +1,10 @@ +U0 DnsQuery(U8* host) +{ + U32 result = @dns_query(host); + if (result == U32_MAX) { + "Error looking up host %s\n", host; + return; + } + "Query for %s: %d.%d.%d.%d\n", host, result.u8[3], result.u8[2], result.u8[1], + result.u8[0]; +} diff --git a/System/Utilities/Image.HC b/System/Utilities/Image.HC new file mode 100644 index 0000000..c7383e2 --- /dev/null +++ b/System/Utilities/Image.HC @@ -0,0 +1,414 @@ +Silent(1); // This is needed to suppress "Function should return val" warnings for wrappers to non-HolyC functions + +// class @image +// { +// CDC* (*FromBuffer)(U8* buffer, I64 len); +// CDC* (*Load)(U8* filename); +// CDC* (*Write)(U8* filename, CDC* dc); +// }; +// +// @image Image; + +class @image_frame +{ + CDC* dc; + CSprite* sprite; + I64 delay; +}; + +class @image_collection +{ + @image_frame** frames; + I64 count; + I64 current; + I64 jiffies; + I64 index; + @image_collection* next; +}; + +I64 @image_cbgr24_to_4_bit(CBGR24* ptr, Bool dither_probability) +{ + I64 res, k; + if (dither_probability) { + k = RandU32; + if (SqrI64(ptr->r) + SqrI64(ptr->g) + SqrI64(ptr->b) >= 3 * SqrI64(k.u8[0])) + res = 8; + else + res = 0; + if (ptr->r >= k.u8[1]) + res |= RED; + if (ptr->g >= k.u8[2]) + res |= GREEN; + if (ptr->b >= k.u8[3]) + res |= BLUE; + } else { + if (SqrI64(ptr->r) + SqrI64(ptr->g) + SqrI64(ptr->b) >= SqrI64(0x80)) { + res = 8; + if (ptr->r >= 0x80) + res |= RED; + if (ptr->g >= 0x80) + res |= GREEN; + if (ptr->b >= 0x80) + res |= BLUE; + } else { + res = 0; + if (ptr->r >= 0x40) + res |= RED; + if (ptr->g >= 0x40) + res |= GREEN; + if (ptr->b >= 0x40) + res |= BLUE; + } + } + return res; +} + +#define IMAGE_DITHER_NONE 0 +#define IMAGE_DITHER_NATIVE 1 +#define IMAGE_DITHER_FLOYDSTEINBERG 2 + +U0 @image_render_4bit_floydstein(U8* buffer, I32 width, I32 height) +{ + U64 reg RDI rdi = buffer; + U64 reg RSI rsi = width; + U64 reg RDX rdx = height; + no_warn rdi, rsi, rdx; + asm { + MOV RAX, RENDER_4BIT_FLOYDSTEIN + CALL RAX + } +} + +CDC* @image_render_16color_native(U8* pixels, I32 x, I32 y, Bool dither) +{ + I64 i; + I64 j; + I64 cnt = 0; + CBGR24 cbgr24; + CDC* dc = DCNew(x, y); + for (i = 0; i < y; i++) + for (j = 0; j < x; j++) { + cbgr24.r = pixels[cnt]; + cbgr24.g = pixels[cnt + 1]; + cbgr24.b = pixels[cnt + 2]; + if (!pixels[cnt + 3]) + dc->color = TRANSPARENT; + else + dc->color = @image_cbgr24_to_4_bit(&cbgr24, dither); + GrPlot(dc, j, y - i - 1); + cnt += 4; + } + return dc; +} + +CBGR24 @image_palette_std[COLORS_NUM] = { + 0x000000, 0x0000AA, 0x00AA00, 0x00AAAA, + 0xAA0000, 0xAA00AA, 0xAA5500, 0xAAAAAA, + 0x555555, 0x5555FF, 0x55FF55, 0x55FFFF, + 0xFF5555, 0xFF55FF, 0xFFFF55, 0xFFFFFF +}; + +CBGR24 @image_dif_rgb(CBGR24 from, CBGR24 to) +{ + CBGR24 dif; + dif.r = to.r - from.r; + dif.g = to.g - from.g; + dif.b = to.b - from.b; + return dif; +} + +F64 @image_dist_rgb(CBGR24 from, CBGR24 to) +{ + CBGR24 dif = @image_dif_rgb(from, to); + F64 dist = dif.r * dif.r + dif.g * dif.g + dif.b * dif.b; + return dist; +} + +I64 @image_get_4bit_color(CBGR24* cbgr24) +{ + F64 dist = -1, tempDist; + I64 i; + I64 color = TRANSPARENT; + for (i = 0; i < COLORS_NUM; i++) { + tempDist = @image_dist_rgb(*cbgr24, @image_palette_std[i]); + if (tempDist < dist || dist < 0) { + dist = tempDist; + color = i; + } + } + return color; +} + +CDC* @image_render_16color_floydsteinberg(U8* pixels, I32 width, I32 height) +{ + @image_render_4bit_floydstein(pixels, width, height); + I64 i; + I64 j; + I64 cnt = 0; + CBGR24 cbgr24; + CDC* dc = DCNew(width, height); + for (i = 0; i < height; i++) + for (j = 0; j < width; j++) { + cbgr24.r = pixels[cnt]; + cbgr24.g = pixels[cnt + 1]; + cbgr24.b = pixels[cnt + 2]; + if (!pixels[cnt + 3]) + dc->color = TRANSPARENT; + else + dc->color = @image_get_4bit_color(&cbgr24); + GrPlot(dc, j, height - i - 1); + cnt += 4; + } + return dc; +} + +CDC* @image_generate_dc_from_pixels(U8* pixels, I32 width, I32 height, Bool dither = IMAGE_DITHER_FLOYDSTEINBERG) +{ + switch (dither) { + case IMAGE_DITHER_NONE: + case IMAGE_DITHER_NATIVE: + return @image_render_16color_native(pixels, width, height, dither); + break; + case IMAGE_DITHER_FLOYDSTEINBERG: + return @image_render_16color_floydsteinberg(pixels, width, height); + break; + default: + break; + } + return NULL; +} + +U8* @image_load_gif_from_memory(U8* buffer, I64 len, I64** delays, I64* x, I64* y, + I64* z) +{ + U64 reg RDI rdi = buffer; + U64 reg RSI rsi = len; + U64 reg RDX rdx = delays; + U64 reg RCX rcx = x; + U64 reg R8 r8 = y; + U64 reg R9 r9 = z; + no_warn rdi, rsi, rdx, rcx, r8, r9; + asm { + MOV RAX, IMAGE_LOAD_GIF_FROM_MEMORY + CALL RAX + } +} + +U8* @stbi_failure_reason() +{ + asm { + MOV RAX, STBI_FAILURE_REASON + CALL RAX + } +} + +I32 @stbi_info_from_memory(U8* buffer, I64 len, I64* x, I64* y, I64* comp) +{ + U64 reg RDI rdi = buffer; + U64 reg RSI rsi = len; + U64 reg RDX rdx = x; + U64 reg RCX rcx = y; + U64 reg R8 r8 = comp; + no_warn rdi, rsi, rdx, rcx, r8; + asm { + MOV RAX, STBI_INFO_FROM_MEMORY + CALL RAX + } +} + +U8* @stbi_load_from_memory(U8* buffer, I64 len, I64* x, I64* y, + I64* channels_in_file, I64 desired_channels) +{ + U64 reg RDI rdi = buffer; + U64 reg RSI rsi = len; + U64 reg RDX rdx = x; + U64 reg RCX rcx = y; + U64 reg R8 r8 = channels_in_file; + U64 reg R9 r9 = desired_channels; + no_warn rdi, rsi, rdx, rcx, r8, r9; + asm { + MOV RAX, STBI_LOAD_FROM_MEMORY + CALL RAX + } +} + +U32* @stbi_write_png_to_mem(U32* pixels, I32 stride_bytes, I32 x, I32 y, I32 n, I32* out_len) +{ + U64 reg RDI rdi = pixels; + U64 reg RSI rsi = stride_bytes; + U64 reg RDX rdx = x; + U64 reg RCX rcx = y; + U64 reg R8 r8 = n; + U64 reg R9 r9 = out_len; + no_warn rdi, rsi, rdx, rcx, r8, r9; + asm { + MOV RAX, STBI_WRITE_PNG_TO_MEM + CALL RAX + } +} + +CDC* @image_load(U8* filename) +{ + if (!filename || !FileFind(filename)) { + // PrintErr("Image file not found.\n"); + return NULL; + } + I64 len; + I32 x; + I32 y; + I32 comp; + U8* buffer = FileRead(filename, &len); + I32 code = @stbi_info_from_memory(buffer, len, &x, &y, &comp); + if (code != 1) { + Free(buffer); + return NULL; + } + U8* pixels = @stbi_load_from_memory(buffer, len, &x, &y, &comp, 4); + Free(buffer); + CDC* dc = @image_generate_dc_from_pixels(pixels, x, y); + Free(pixels); + return dc; +} + +U32 @image_rgba_color_table[16] = { + 0xff000000, 0xffaa0000, 0xff00aa00, 0xffaaaa00, + 0xff0000aa, 0xffaa00aa, 0xff0055aa, 0xffaaaaaa, + 0xff555555, 0xffff5555, 0xff55ff55, 0xffffff55, + 0xff5555ff, 0xffff55ff, 0xff55ffff, 0xffffffff +}; + +U32 @image_get_rgba_color(I64 color) +{ + if (color > 15) + return 0; + return @image_rgba_color_table[color]; +} + +U32* @image_get_rgba_buffer_from_dc_body(CDC* dc) +{ + if (!dc) + return NULL; + U32* pixels = CAlloc((dc->width * dc->height) * 4, erythros_mem_task); + I64 x; + I64 y; + I64 p = 0; + for (y = 0; y < dc->height; y++) + for (x = 0; x < dc->width; x++) + pixels[p++] = @image_get_rgba_color(GrPeek(dc, x, y)); + return pixels; +} + +U0 @image_write(U8* filename, CDC* dc) +{ + if (!dc) { + PrintErr("Device context is NULL.\n"); + return; + } + I32 out_len; + U32* rgba_buffer = @image_get_rgba_buffer_from_dc_body(dc); + if (!rgba_buffer) { + PrintErr("RGBA buffer is NULL.\n"); + return; + } + U8* png_buffer = @stbi_write_png_to_mem(rgba_buffer, dc->width * 4, dc->width, dc->height, 4, &out_len); + if (!png_buffer) { + PrintErr("PNG buffer is NULL.\n"); + Free(rgba_buffer); + return; + } + FileWrite(filename, png_buffer, out_len); + Free(rgba_buffer); + Free(png_buffer); +} + +U32 @image_pixel_flip_rgb_bgr(U32 src) +{ + U32 dst; + dst.u8[0] = src.u8[2]; + dst.u8[1] = src.u8[1]; + dst.u8[2] = src.u8[0]; + dst.u8[3] = src.u8[3]; + return dst; +} + +CDC* @image_from_buffer(U8* buffer, I64 len) +{ + I32 x = 0; + I32 y = 0; + U8* pixels = NULL; + CDC* dc = NULL; + + I32 comp; + I32 code = @stbi_info_from_memory(buffer, len, &x, &y, &comp); + if (code != 1) { + return NULL; + } + pixels = @stbi_load_from_memory(buffer, len, &x, &y, &comp, 4); + if (!pixels) + PopUpOk(@stbi_failure_reason); + dc = @image_generate_dc_from_pixels(pixels, x, y); + Free(pixels); + return dc; +} + +@image_collection* @image_collection_from_buffer(U8* buffer, I64 len) +{ + I64 i; + I32* delays; + I32 x; + I32 y; + I32 z; + I32 comp; + I32 code = @stbi_info_from_memory(buffer, len, &x, &y, &comp); + if (code != 1) { + return NULL; + } + U64 pixels = @image_load_gif_from_memory(buffer, len, &delays, &x, &y, &z); + if (!pixels) + PopUpOk(@stbi_failure_reason); + if (!z) + return NULL; // no frames? + @image_collection* collection = CAlloc(sizeof(@image_collection), erythros_mem_task); + @image_frame* frame; + collection->frames = CAlloc(sizeof(@image_frame*) * z, erythros_mem_task); + collection->count = z; + for (i = 0; i < z; i++) { + frame = CAlloc(sizeof(@image_frame), erythros_mem_task); + frame->dc = @image_generate_dc_from_pixels(pixels, x, y); + frame->sprite = DC2Sprite(frame->dc); + frame->delay = delays[i]; + collection->frames[i] = frame; + pixels += (x * y) * 4; + } + return collection; +} + +// Image.FromBuffer = &@image_from_buffer; +// Image.Load = &@image_load; +// Image.Write = &@image_write; + +Silent(0); + +U0 Screenshot(U8* custom_filename = NULL, Bool output_filename_to_focus_task = FALSE) +{ + CDC* dc = DCScrnCapture; + U8 filename[256]; + CDateStruct ds; + if (custom_filename) + StrCpy(filename, custom_filename); + else { + Date2Struct(&ds, Now); + StrPrint(filename, "C:/Tmp/ScrnShots/%04d-%02d-%02d-%02d-%02d-%02d.png", ds.year, ds.mon, ds.day_of_mon, ds.hour, ds.min, ds.sec); + } + @image_write(filename, dc); + DCDel(dc); + if (output_filename_to_focus_task) + XTalk(sys_focus_task, filename); +}; + +U0 @screenshot_hotkey(I64) +{ + Screenshot("C:/Home/Screenshot.png", TRUE); +} + +CtrlAltCBSet('S', &@screenshot_hotkey, "", , FALSE); diff --git a/System/Utilities/NetRep.HC b/System/Utilities/NetRep.HC new file mode 100644 index 0000000..f56bacd --- /dev/null +++ b/System/Utilities/NetRep.HC @@ -0,0 +1,22 @@ +U0 NetRep() +{ + NetInfoRequest* req = @net_info_request; + "MAC address : %02x:%02x:%02x:%02x:%02x:%02x\n", req->mac_address.u8[5], req->mac_address.u8[4], + req->mac_address.u8[3], req->mac_address.u8[2], + req->mac_address.u8[1], req->mac_address.u8[0]; + "IPv4 address : %d.%d.%d.%d\n", req->ipv4_address.u8[3], req->ipv4_address.u8[2], + req->ipv4_address.u8[1], req->ipv4_address.u8[0]; + "IPv4 netmask : %d.%d.%d.%d\n", req->ipv4_netmask.u8[3], req->ipv4_netmask.u8[2], + req->ipv4_netmask.u8[1], req->ipv4_netmask.u8[0]; + "IPv4 network : %d.%d.%d.%d\n", req->ipv4_network.u8[3], req->ipv4_network.u8[2], + req->ipv4_network.u8[1], req->ipv4_network.u8[0]; + "IPv4 gateway : %d.%d.%d.%d\n", req->ipv4_gateway.u8[3], req->ipv4_gateway.u8[2], + req->ipv4_gateway.u8[1], req->ipv4_gateway.u8[0]; + "DNS server (port) : %d.%d.%d.%d (%d)\n", req->dns_server_address.u8[3], req->dns_server_address.u8[2], + req->dns_server_address.u8[1], req->dns_server_address.u8[0], req->dns_server_port; + "RX bytes : %d\n", req->rx_bytes; + "RX frames : %d\n", req->rx_frames; + "TX bytes : %d\n", req->tx_bytes; + "TX frames : %d\n", req->tx_frames; + Free(req); +} diff --git a/System/Utilities/Ping.HC b/System/Utilities/Ping.HC new file mode 100644 index 0000000..386c441 --- /dev/null +++ b/System/Utilities/Ping.HC @@ -0,0 +1,72 @@ +#define PING_ERR_INVALID_HOST 1 +#define PING_ERR_HOST_NOT_FOUND 2 + +#define PING_PAYLOAD_SIZE 56 + +I64 @ping_err(I64 code) +{ + switch (code) { + case PING_ERR_INVALID_HOST: + "Invalid host specified\n"; + return 1; + break; + case PING_ERR_HOST_NOT_FOUND: + "Host not found\n"; + return 2; + break; + default: + "Unspecified error\n"; + return -1; + } +} + +I64 Ping(U8* host, I64 count = 4) +{ + if (!host) + return @ping_err(PING_ERR_INVALID_HOST); + if (!StrLen(host)) + return @ping_err(PING_ERR_INVALID_HOST); + + U32 addr = @dns_query(host); + if (addr == U32_MAX) + return @ping_err(PING_ERR_HOST_NOT_FOUND); + + U16 iden = (RandU16 * SysTimerRead) & 0xFFFF; + I64 start_jiffies; + U32 reply = NULL; + I64 res = 0; + U16 seq = 0; + I64 loss = 0; + + IcmpRequest* request = CAlloc(sizeof(IcmpRequest), Fs->code_heap); + + "PING %s (%d.%d.%d.%d): %d data bytes\n", + host, addr.u8[3], addr.u8[2], addr.u8[1], addr.u8[0], PING_PAYLOAD_SIZE; + + I64 i; + for (i = 0; i < count; i++) { + start_jiffies = cnts.jiffies; + reply = @icmp_echo_request(addr, iden, seq, request, i); + if (!reply) { + "Request timeout for icmp_seq %d\n", seq; + ++loss; + res = 1; + } else { + "%d bytes from %d.%d.%d.%d: icmp_seq=%d ttl=%d time=%d ms\n", + reply.u16[1], addr.u8[3], addr.u8[2], addr.u8[1], addr.u8[0], seq, reply.u16[0], cnts.jiffies - start_jiffies; + } + while (cnts.jiffies < start_jiffies + 1000 && i < (count - 1)) + Sleep(1); + ++seq; + } + + Free(request); + + "--- %d.%d.%d.%d ping statistics ---\n", addr.u8[3], addr.u8[2], addr.u8[1], addr.u8[0]; + "%d packets transmitted, %d packets received, %0f", + seq, seq - loss, (loss * 1.0 / seq * 1.0) * 100; + PutChars(37); + " packet loss\n"; + + return res; +} \ No newline at end of file diff --git a/System/Utilities/Time.HC b/System/Utilities/Time.HC new file mode 100644 index 0000000..8025c76 --- /dev/null +++ b/System/Utilities/Time.HC @@ -0,0 +1,92 @@ +U0 @time_cmos_update_byte(I64 time_reg, I64 val) +{ + OutU8(0x70, time_reg); + OutU8(0x71, val); +} + +I64 @time_dec_to_bcd(I64 val) +{ + return (((val / 10) << 4) | (val % 10)); +} + +U0 @time_update(U8* date_str, I64 mS_delta, I64 hour_offset) +{ + no_warn mS_delta; + Bool is_bcd; + OutU8(0x70, 0x0B); + if (InU8(0x71) & 4) + is_bcd = FALSE; + else + is_bcd = TRUE; + + I64 date_argc; + U8** date_argv = String.Split(date_str, ' ', &date_argc); + + I64 month = DefineMatch(date_argv[2], "ST_MONTHS") + 1; + I64 day = Str2I64(date_argv[1]); + I64 year = Str2I64(date_argv[3] + 2); + I64 century = 20; + + date_argv[4][2] = NULL; + date_argv[4][5] = NULL; + + I64 hour = Str2I64(date_argv[4]); + I64 minute = Str2I64(date_argv[4] + 3); + I64 second = Str2I64(date_argv[4] + 6); + + // FIXME: Handle month boundaries, and 12 hour time + hour += hour_offset; + if (hour < 0) { + hour += 24; + --day; + } else if (hour > 23) { + hour -= 24; + ++day; + } + + if (is_bcd) { + century = @time_dec_to_bcd(century); + year = @time_dec_to_bcd(year); + month = @time_dec_to_bcd(month); + day = @time_dec_to_bcd(day); + hour = @time_dec_to_bcd(hour); + minute = @time_dec_to_bcd(minute); + second = @time_dec_to_bcd(second); + } + + @time_cmos_update_byte(0x32, century); + @time_cmos_update_byte(0x09, year); + @time_cmos_update_byte(0x08, month); + @time_cmos_update_byte(0x07, day); + @time_cmos_update_byte(0x04, hour); + @time_cmos_update_byte(0x02, minute); + @time_cmos_update_byte(0x00, second); +} + +I64 @time_tz_offset() +{ + return -4; +} + +U0 @time_query(Bool set = FALSE) +{ + U8 buf[1024]; + @http_url* url = @http_parse_url("http://time.google.com"); + @http_response* resp = Http.Head(url, &buf); + while (resp->state != HTTP_STATE_DONE) + Sleep(1); + I64 mS_delta = cnts.jiffies; + "Set current date and time to %s ", resp->headers->@("Date"); + if (!set) + set = YorN; + else + "\n"; + if (set) + @time_update(resp->headers->@("Date"), mS_delta, @time_tz_offset); +} + +U0 TimeSync() +{ + Sleep(500); + @time_query(1); +} diff --git a/scripts/build-all b/scripts/build-all new file mode 100755 index 0000000..1b99bfb --- /dev/null +++ b/scripts/build-all @@ -0,0 +1,191 @@ +#!/usr/bin/python3 +from pathlib import Path +import glob +import os +import subprocess +import sys +import time + +if len(sys.argv) < 2: + raise ValueError('wrong number of arguments') + +project_path = sys.argv[1] + '/' +project_name = project_path.rsplit('/')[-2] + +isoc_file = project_path + 'build/isoc/Erythros.ISO.C' +redsea_path = project_path + 'build/redsea' + +home_path = str(Path.home()) + '/' + +jakt_compiler_path = home_path + 'cloned/jakt/build/bin/jakt' +jakt_runtime_path = home_path + 'cloned/jakt/runtime' +jakt_lib_path = home_path + 'cloned/jakt/build/lib/x86_64-unknown-linux-unknown/' + +qemu_slipstream_iso_file = project_path + 'build/isoc/bootable.iso' +qemu_virtio_disk_path = home_path + 'erythros-virtio-disk.qcow2' + +qemu_bin_path = "qemu-system-x86_64" +qemu_display = "-display sdl,grab-mod=rctrl" + +templeos_iso_file = home_path + 'iso/TempleOS.ISO' + +qemu_run_cmd = qemu_bin_path + ' ' + qemu_display + ' -enable-kvm -smp cores=4 -m 8192 -netdev tap,id=mynet0,ifname=tap0,script=no,downscript=no -device ac97 -device virtio-net,netdev=mynet0 -drive file=' + qemu_virtio_disk_path + ',format=qcow2,if=none,index=0,media=disk,id=virtio-disk -device virtio-blk-pci,drive=virtio-disk -device vmmouse,i8042=i8042 -device vmware-svga -cdrom ' + qemu_slipstream_iso_file + ' -debugcon stdio -boot d' + +def clang_format_src_files(): + print("build-all: clang-format-src-files") + exclude_paths = ["stb_", "tlse", ".iso.c"] + format_file_extensions = [".c", ".cpp", ".h", ".hc"] + for src_file in glob.glob(project_path + "**", recursive=True): + exclude_file = False + for exclude_path in exclude_paths: + if src_file.lower().find(exclude_path) > 0: + exclude_file = True + if exclude_file: + continue + for format_file_extension in format_file_extensions: + if src_file.lower().endswith(format_file_extension): + print(src_file) + res = os.system('clang-format -i --style=file:' + project_path + '.clang-format ' + src_file) + if res: + raise ValueError("build-all: step 'clang-format-src-files' failed, error code " + str(res)) + +def refresh_build_path(): + print("build-all: refresh-build-path") + res = os.system('rm -rf ' + project_path + 'build && mkdir -p ' + project_path + 'build/bin && mkdir -p ' + project_path + 'build/isoc && mkdir -p ' + project_path + 'build/lib && mkdir -p ' + project_path + 'build/redsea') + if res: + raise ValueError("build-all: step 'refresh-build-path' failed, error code " + str(res)) + +def build_image(): + print("build-all: build-image") + build_specific_options = '-Wl,--section-start=.text=0x1004000 -Wl,--section-start=.plt=0x1002020 -no-pie' + res = os.system('cd ' + project_path + '&& cd src/image && gcc -o ../../build/bin/image ' + build_specific_options + ' -O0 -mno-mmx -mno-red-zone image.c') + if res: + raise ValueError("build-all: step 'build-image' failed, error code " + str(res)) + +def build_libtemple(): + print("build-all: build-libtemple") + res = os.system('cd ' + project_path + 'src/libtemple && g++ -c -o ../../build/libtemple.o libtemple.cpp && gcc -shared -o ../../build/lib/libtemple.so ../../build/libtemple.o && rm ' + project_path + 'build/libtemple.o') + if res: + raise ValueError("build-all: step 'build-libtemple' failed, error code " + str(res)) + +def build_tlse(): + print("build-all: build-tlse") + build_specific_options = '-Wl,--section-start=.text=0x1204000 -Wl,--section-start=.plt=0x1202020 -no-pie' + res = os.system('cd ' + project_path + '&& cd src/tlse && gcc -o ../../build/bin/tlse ' + build_specific_options + ' -O0 -mno-mmx -mno-red-zone -DTLS_AMALGAMATION tlse.c') + if res: + raise ValueError("build-all: step 'build-tlse' failed, error code " + str(res)) + +def transpile_net_to_sepples(): + print("build-all: transpile-net-to-sepples") + res = os.system('cd ' + project_path + 'src/net && ' + jakt_compiler_path + ' -S -R ' + jakt_runtime_path + ' -B ' + project_path + 'build/net -O net.jakt') + if res: + raise ValueError("build-all: step 'transpile-net-to-sepples' failed, error code " + str(res)) + +def build_net(): + print("build-all: build-net") + build_specific_options = '-Wno-invalid-offsetof -Wl,--section-start=.text=0x1404000 -Wl,--section-start=.plt=0x1402020 -no-pie' + res = os.system('cd ' + project_path + 'build/net && clang++-19 ' + build_specific_options + ' -O3 -I ' + jakt_runtime_path + ' -I ' + project_path + '/src/libtemple -fcolor-diagnostics -std=c++20 -fno-exceptions -Wno-user-defined-literals -Wno-deprecated-declarations -Wno-parentheses-equality -Wno-unqualified-std-cast-call -Wno-unknown-warning-option -Wno-int-to-pointer-cast -mno-red-zone -o ../bin/net *.cpp ../lib/libtemple.so ' + jakt_lib_path + 'libjakt_runtime_x86_64-unknown-linux-unknown.a ' + jakt_lib_path + 'libjakt_main_x86_64-unknown-linux-unknown.a && cd .. && rm -rf net') + if res: + raise ValueError("build-all: step 'build-net' failed, error code " + str(res)) + +def address_string_for_symbol(file, symbol): + p = subprocess.Popen('readelf -s --wide "' + file + '" | grep \'' + symbol + '$\' | awk \'{sub("000000000", "0x", $2); print $2}\'', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE) + return str(p.communicate()[0][:-1].decode(encoding='utf-8')) + +def image_hc_fixup(macro, symbol, image_bin_path, image_hc_path): + os.system('echo -e "#define ' + macro + ' ' + address_string_for_symbol(image_bin_path, symbol) + '\n" | cat - ' + image_hc_path + ' | sponge ' + image_hc_path) + return + +def tlse_hc_fixup(macro, symbol, tlse_bin_path, tlse_hc_path): + os.system('echo -e "#define ' + macro + ' ' + address_string_for_symbol(tlse_bin_path, symbol) + '\n" | cat - ' + tlse_hc_path + ' | sponge ' + tlse_hc_path) + return + +def generate_iso_c_file(): + print("build-all: generate-iso-c-file") + step_error_message = "build-all: step 'generate-iso-c-file' failed, error code " + + try: + os.remove(isoc_file) + except: + pass + res = os.system('isoc-mount --rw ' + isoc_file + ' ' + redsea_path) + if res: + raise ValueError(step_error_message + str(res)) + time.sleep(0.25) + + copy_files_cmd_line = 'rsync -av --inplace --progress ' + project_path + ' ' + redsea_path + copy_files_cmd_line += ' --exclude .clang-format' + copy_files_cmd_line += ' --exclude .git' + copy_files_cmd_line += ' --exclude .gitignore' + copy_files_cmd_line += ' --exclude .vscode' + copy_files_cmd_line += ' --exclude build/isoc' + copy_files_cmd_line += ' --exclude build/lib' + copy_files_cmd_line += ' --exclude build/redsea' + copy_files_cmd_line += ' --exclude scripts' + copy_files_cmd_line += ' --exclude src' + res = os.system(copy_files_cmd_line) + if res: + raise ValueError(step_error_message + str(res)) + + # Fixup addresses for Image.HC + image_bin_path = redsea_path + '/build/bin/image' + image_hc_path = redsea_path + '/System/Utilities/Image.HC' + + image_hc_fixup('IMAGE_LOAD_GIF_FROM_MEMORY', 'image_load_gif_from_memory', image_bin_path, image_hc_path) + image_hc_fixup('STBI_WRITE_PNG_TO_MEM', 'stbi_write_png_to_mem', image_bin_path, image_hc_path) + image_hc_fixup('STBI_LOAD_FROM_MEMORY', 'stbi_load_from_memory', image_bin_path, image_hc_path) + image_hc_fixup('STBI_INFO_FROM_MEMORY', 'stbi_info_from_memory', image_bin_path, image_hc_path) + image_hc_fixup('STBI_FAILURE_REASON', 'stbi_failure_reason', image_bin_path, image_hc_path) + image_hc_fixup('RENDER_4BIT_FLOYDSTEIN', 'render_4bit_floydstein', image_bin_path, image_hc_path) + + # Fixup addresses for Tlse.HC + + rsa_hc_path = redsea_path + '/System/Libraries/Rsa.HC' + tlse_bin_path = redsea_path + '/build/bin/tlse' + tlse_hc_path = redsea_path + '/System/Libraries/Tlse.HC' + + tlse_hc_fixup('RSA_IMPORT', 'rsa_import', tlse_bin_path, rsa_hc_path) + tlse_hc_fixup('RSA_CREATE_SIGNATURE', 'rsa_create_signature', tlse_bin_path, rsa_hc_path) + tlse_hc_fixup('RSA_VERIFY_SIGNATURE', 'rsa_verify_signature', tlse_bin_path, rsa_hc_path) + tlse_hc_fixup('TLS_CREATE_CONTEXT', 'tls_create_context', tlse_bin_path, tlse_hc_path) + tlse_hc_fixup('TLS_SNI_SET', 'tls_sni_set', tlse_bin_path, tlse_hc_path) + tlse_hc_fixup('TLS_CLIENT_CONNECT', 'tls_client_connect', tlse_bin_path, tlse_hc_path) + tlse_hc_fixup('TLS_CONNECTION_STATUS', 'tls_connection_status', tlse_bin_path, tlse_hc_path) + tlse_hc_fixup('TLS_GET_WRITE_BUFFER', 'tls_get_write_buffer', tlse_bin_path, tlse_hc_path) + tlse_hc_fixup('TLS_BUFFER_CLEAR', 'tls_buffer_clear', tlse_bin_path, tlse_hc_path) + tlse_hc_fixup('TLS_CONSUME_STREAM', 'tls_consume_stream', tlse_bin_path, tlse_hc_path) + tlse_hc_fixup('TLS_READ', 'tls_read', tlse_bin_path, tlse_hc_path) + tlse_hc_fixup('TLS_WRITE', 'tls_write', tlse_bin_path, tlse_hc_path) + tlse_hc_fixup('TLS_ESTABLISHED', 'tls_established', tlse_bin_path, tlse_hc_path) + time.sleep(0.25) + + res = os.system('sync && fusermount -u ' + redsea_path) + if res: + raise ValueError(step_error_message + str(res)) + time.sleep(0.25) + +def generate_slipstream_iso_file(): + print("build-all: generate-slipstream-iso-file") + res = os.system('templeos-slipstream ' + templeos_iso_file + ' ' + isoc_file + ' ' + qemu_slipstream_iso_file) + if res: + raise ValueError("build-all: step 'generate-slipstream-iso-file' failed, error code " + str(res)) + +def run(): + print("build-all: run") + res = os.system(qemu_run_cmd) + if res: + raise ValueError("build-all: step 'run' failed, error code " + str(res)) + +def build_all(): + clang_format_src_files() + refresh_build_path() + build_image() + build_libtemple() + build_tlse() + transpile_net_to_sepples() + build_net() + generate_iso_c_file() + generate_slipstream_iso_file() + run() + +build_all() \ No newline at end of file diff --git a/src/image/image.c b/src/image/image.c new file mode 100644 index 0000000..42f031c --- /dev/null +++ b/src/image/image.c @@ -0,0 +1,209 @@ +#define STBI_WRITE_NO_STDIO +#define STB_IMAGE_WRITE_STATIC +#define STB_IMAGE_WRITE_IMPLEMENTATION +#define STB_IMAGE_IMPLEMENTATION +#define STBI_NO_LINEAR +#define STBI_NO_STDIO +#define STBI_NO_SIMD +#define STBI_NO_HDR + +#include "stb_image.h" +#include "stb_image_write.h" + +int main() { return 0; } + +STBIDEF stbi_uc* image_load_gif_from_memory(stbi_uc const* buffer, int len, + int** delays, int* x, int* y, + int* z) +{ + int comp; + return stbi_load_gif_from_memory(buffer, len, delays, x, y, z, &comp, 4); +} + +/* dither.c: MIT License + +Copyright (c) 2016 jonmortiboy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +typedef struct RGB { + int r; + int g; + int b; +} RGB; + +int imgw, imgh; + +// Define the 4bit colour palette +int numCols = 16; +RGB cols4bit[] = { + { 0, 0, 0 }, { 0, 0, 170 }, { 0, 170, 0 }, { 0, 170, 170 }, + { 170, 0, 0 }, { 170, 0, 170 }, { 170, 85, 0 }, { 170, 170, 170 }, + { 85, 85, 85 }, { 85, 85, 255 }, { 85, 255, 85 }, { 85, 255, 255 }, + { 255, 85, 85 }, { 255, 85, 255 }, { 255, 255, 85 }, { 255, 255, 255 } +}; +RGB* cols = cols4bit; + +RGB getRGB(uint32_t* pixels, int x, int y); +void setRGB(uint32_t* pixels, int x, int y, RGB rgb); +RGB difRGB(RGB from, RGB to); +RGB addRGB(RGB a, RGB b); +RGB divRGB(RGB rgb, double d); +RGB mulRGB(RGB rgb, double d); +RGB nearestRGB(RGB rgb, RGB* rgbs, int numRGBs); +double distRGB(RGB from, RGB to); + +void render_4bit_floydstein(uint32_t* pixels, int width, int height); + +RGB getRGB(uint32_t* pixels, int x, int y) +{ + RGB rgb; + rgb.r = 0; + rgb.g = 0; + rgb.b = 0; + + if (x < 0 || x >= imgw || y < 0 || y >= imgh) + return rgb; + + rgb.r = (pixels[y * imgw + x] & 0xff); + rgb.g = (pixels[y * imgw + x] & 0xff00) >> 8; + rgb.b = (pixels[y * imgw + x] & 0xff0000) >> 16; + + return rgb; +} + +void setRGB(uint32_t* pixels, int x, int y, RGB rgb) +{ + if (x < 0 || x >= imgw || y < 0 || y >= imgh) + return; + + uint32_t alpha = pixels[y * imgw + x] & 0xff000000; + pixels[y * imgw + x] = alpha + (rgb.r) + (rgb.g << 8) + (rgb.b << 16); +} + +RGB difRGB(RGB from, RGB to) +{ + RGB dif; + dif.r = to.r - from.r; + dif.g = to.g - from.g; + dif.b = to.b - from.b; + + return dif; +} + +RGB addRGB(RGB a, RGB b) +{ + RGB sum; + sum.r = a.r + b.r; + sum.g = a.g + b.g; + sum.b = a.b + b.b; + + if (sum.r > 255) + sum.r = 255; + if (sum.r < 0) + sum.r = 0; + if (sum.g > 255) + sum.g = 255; + if (sum.g < 0) + sum.g = 0; + if (sum.b > 255) + sum.b = 255; + if (sum.b < 0) + sum.b = 0; + + return sum; +} + +RGB divRGB(RGB rgb, double d) +{ + RGB div; + div.r = (int)((double)rgb.r / d); + div.g = (int)((double)rgb.g / d); + div.b = (int)((double)rgb.b / d); + + return div; +} + +RGB mulRGB(RGB rgb, double d) +{ + RGB mul; + mul.r = (int)((double)rgb.r * d); + mul.g = (int)((double)rgb.g * d); + mul.b = (int)((double)rgb.b * d); + + return mul; +} + +double distRGB(RGB from, RGB to) +{ + RGB dif = difRGB(from, to); + double dist = dif.r * dif.r + dif.g * dif.g + dif.b * dif.b; + + return dist; +} + +RGB nearestRGB(RGB rgb, RGB rgbs[], int numRGBs) +{ + double dist = -1, tempDist; + RGB nearest; + + int i; + for (i = 0; i < numRGBs; i++) { + tempDist = distRGB(rgb, rgbs[i]); + + if (tempDist < dist || dist < 0) { + dist = tempDist; + nearest = rgbs[i]; + } + } + + return nearest; +} + +void render_4bit_floydstein(uint32_t* pixels, int width, int height) +{ + + int i, x, y; + imgw = width; + imgh = height; + RGB rgb, nearest, rgberror; + for (i = 0; i < imgw * imgh; i++) { + rgb = getRGB(pixels, i % imgw, i / imgw); + nearest = nearestRGB(rgb, cols, numCols); + + rgberror = difRGB(nearest, rgb); + rgberror = divRGB(rgberror, 16); + + x = i % imgw; + y = i / imgw; + + setRGB(pixels, x + 1, y, + addRGB(getRGB(pixels, x + 1, y), mulRGB(rgberror, 7))); + setRGB(pixels, x - 1, y + 1, + addRGB(getRGB(pixels, x - 1, y + 1), mulRGB(rgberror, 3))); + setRGB(pixels, x, y + 1, + addRGB(getRGB(pixels, x, y + 1), mulRGB(rgberror, 5))); + setRGB(pixels, x + 1, y + 1, + addRGB(getRGB(pixels, x + 1, y + 1), rgberror)); + + setRGB(pixels, i % imgw, i / imgw, nearest); + } +} \ No newline at end of file diff --git a/src/image/stb_image.h b/src/image/stb_image.h new file mode 100644 index 0000000..d152aa9 --- /dev/null +++ b/src/image/stb_image.h @@ -0,0 +1,8634 @@ +/* stb_image - v2.30 - public domain image loader - http://nothings.org/stb + no warranty implied; use at your own risk + + Do this: + #define STB_IMAGE_IMPLEMENTATION + before you include this file in *one* C or C++ file to create the implementation. + + // i.e. it should look like this: + #include ... + #include ... + #include ... + #define STB_IMAGE_IMPLEMENTATION + #include "stb_image.h" + + You can #define STBI_ASSERT(x) before the #include to avoid using assert.h. + And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using malloc,realloc,free + + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib) + PNG 1/2/4/8/16-bit-per-channel + + TGA (not sure what subset, if a subset) + BMP non-1bpp, non-RLE + PSD (composited view only, no extra channels, 8/16 bit-per-channel) + + GIF (*comp always reports as 4-channel) + HDR (radiance rgbE format) + PIC (Softimage PIC) + PNM (PPM and PGM binary only) + + Animated GIF still needs a proper API, but here's one way to do it: + http://gist.github.com/urraka/685d9a6340b26b830d49 + + - decode from memory or through FILE (define STBI_NO_STDIO to remove code) + - decode from arbitrary I/O callbacks + - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON) + + Full documentation under "DOCUMENTATION" below. + + +LICENSE + + See end of file for license information. + +RECENT REVISION HISTORY: + + 2.30 (2024-05-31) avoid erroneous gcc warning + 2.29 (2023-05-xx) optimizations + 2.28 (2023-01-29) many error fixes, security errors, just tons of stuff + 2.27 (2021-07-11) document stbi_info better, 16-bit PNM support, bug fixes + 2.26 (2020-07-13) many minor fixes + 2.25 (2020-02-02) fix warnings + 2.24 (2020-02-02) fix warnings; thread-local failure_reason and flip_vertically + 2.23 (2019-08-11) fix clang static analysis warning + 2.22 (2019-03-04) gif fixes, fix warnings + 2.21 (2019-02-25) fix typo in comment + 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs + 2.19 (2018-02-11) fix warning + 2.18 (2018-01-30) fix warnings + 2.17 (2018-01-29) bugfix, 1-bit BMP, 16-bitness query, fix warnings + 2.16 (2017-07-23) all functions have 16-bit variants; optimizations; bugfixes + 2.15 (2017-03-18) fix png-1,2,4; all Imagenet JPGs; no runtime SSE detection on GCC + 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs + 2.13 (2016-12-04) experimental 16-bit API, only for PNG so far; fixes + 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes + 2.11 (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64 + RGB-format JPEG; remove white matting in PSD; + allocate large structures on the stack; + correct channel count for PNG & BMP + 2.10 (2016-01-22) avoid warning introduced in 2.09 + 2.09 (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED + + See end of file for full revision history. + + + ============================ Contributors ========================= + + Image formats Extensions, features + Sean Barrett (jpeg, png, bmp) Jetro Lauha (stbi_info) + Nicolas Schulz (hdr, psd) Martin "SpartanJ" Golini (stbi_info) + Jonathan Dummer (tga) James "moose2000" Brown (iPhone PNG) + Jean-Marc Lienher (gif) Ben "Disch" Wenger (io callbacks) + Tom Seddon (pic) Omar Cornut (1/2/4-bit PNG) + Thatcher Ulrich (psd) Nicolas Guillemot (vertical flip) + Ken Miller (pgm, ppm) Richard Mitton (16-bit PSD) + github:urraka (animated gif) Junggon Kim (PNM comments) + Christopher Forseth (animated gif) Daniel Gibson (16-bit TGA) + socks-the-fox (16-bit PNG) + Jeremy Sawicki (handle all ImageNet JPGs) + Optimizations & bugfixes Mikhail Morozov (1-bit BMP) + Fabian "ryg" Giesen Anael Seghezzi (is-16-bit query) + Arseny Kapoulkine Simon Breuss (16-bit PNM) + John-Mark Allen + Carmelo J Fdez-Aguera + + Bug & warning fixes + Marc LeBlanc David Woo Guillaume George Martins Mozeiko + Christpher Lloyd Jerry Jansson Joseph Thomson Blazej Dariusz Roszkowski + Phil Jordan Dave Moore Roy Eltham + Hayaki Saito Nathan Reed Won Chun + Luke Graham Johan Duparc Nick Verigakis the Horde3D community + Thomas Ruf Ronny Chevalier github:rlyeh + Janez Zemva John Bartholomew Michal Cichon github:romigrou + Jonathan Blow Ken Hamada Tero Hanninen github:svdijk + Eugene Golushkov Laurent Gomila Cort Stratton github:snagar + Aruelien Pocheville Sergio Gonzalez Thibault Reuille github:Zelex + Cass Everitt Ryamond Barbiero github:grim210 + Paul Du Bois Engin Manap Aldo Culquicondor github:sammyhw + Philipp Wiesemann Dale Weiler Oriol Ferrer Mesia github:phprus + Josh Tobin Neil Bickford Matthew Gregan github:poppolopoppo + Julian Raschke Gregory Mullen Christian Floisand github:darealshinji + Baldur Karlsson Kevin Schmidt JR Smith github:Michaelangel007 + Brad Weinberger Matvey Cherevko github:mosra + Luca Sas Alexander Veselov Zack Middleton [reserved] + Ryan C. Gordon [reserved] [reserved] + DO NOT ADD YOUR NAME HERE + + Jacko Dirks + + To add your name to the credits, pick a random blank space in the middle and fill it. + 80% of merge conflicts on stb PRs are due to people adding their name at the end + of the credits. +*/ + +#ifndef STBI_INCLUDE_STB_IMAGE_H +# define STBI_INCLUDE_STB_IMAGE_H + +// DOCUMENTATION +// +// Limitations: +// - no 12-bit-per-channel JPEG +// - no JPEGs with arithmetic coding +// - GIF always returns *comp=4 +// +// Basic usage (see HDR discussion below for HDR usage): +// int x,y,n; +// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); +// // ... process data if not NULL ... +// // ... x = width, y = height, n = # 8-bit components per pixel ... +// // ... replace '0' with '1'..'4' to force that many components per pixel +// // ... but 'n' will always be the number that it would have been if you said 0 +// stbi_image_free(data); +// +// Standard parameters: +// int *x -- outputs image width in pixels +// int *y -- outputs image height in pixels +// int *channels_in_file -- outputs # of image components in image file +// int desired_channels -- if non-zero, # of image components requested in result +// +// The return value from an image loader is an 'unsigned char *' which points +// to the pixel data, or NULL on an allocation failure or if the image is +// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels, +// with each pixel consisting of N interleaved 8-bit components; the first +// pixel pointed to is top-left-most in the image. There is no padding between +// image scanlines or between pixels, regardless of format. The number of +// components N is 'desired_channels' if desired_channels is non-zero, or +// *channels_in_file otherwise. If desired_channels is non-zero, +// *channels_in_file has the number of components that _would_ have been +// output otherwise. E.g. if you set desired_channels to 4, you will always +// get RGBA output, but you can check *channels_in_file to see if it's trivially +// opaque because e.g. there were only 3 channels in the source image. +// +// An output image with N components has the following components interleaved +// in this order in each pixel: +// +// N=#comp components +// 1 grey +// 2 grey, alpha +// 3 red, green, blue +// 4 red, green, blue, alpha +// +// If image loading fails for any reason, the return value will be NULL, +// and *x, *y, *channels_in_file will be unchanged. The function +// stbi_failure_reason() can be queried for an extremely brief, end-user +// unfriendly explanation of why the load failed. Define STBI_NO_FAILURE_STRINGS +// to avoid compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly +// more user-friendly ones. +// +// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized. +// +// To query the width, height and component count of an image without having to +// decode the full file, you can use the stbi_info family of functions: +// +// int x,y,n,ok; +// ok = stbi_info(filename, &x, &y, &n); +// // returns ok=1 and sets x, y, n if image is a supported format, +// // 0 otherwise. +// +// Note that stb_image pervasively uses ints in its public API for sizes, +// including sizes of memory buffers. This is now part of the API and thus +// hard to change without causing breakage. As a result, the various image +// loaders all have certain limits on image size; these differ somewhat +// by format but generally boil down to either just under 2GB or just under +// 1GB. When the decoded image would be larger than this, stb_image decoding +// will fail. +// +// Additionally, stb_image will reject image files that have any of their +// dimensions set to a larger value than the configurable STBI_MAX_DIMENSIONS, +// which defaults to 2**24 = 16777216 pixels. Due to the above memory limit, +// the only way to have an image with such dimensions load correctly +// is for it to have a rather extreme aspect ratio. Either way, the +// assumption here is that such larger images are likely to be malformed +// or malicious. If you do need to load an image with individual dimensions +// larger than that, and it still fits in the overall size limit, you can +// #define STBI_MAX_DIMENSIONS on your own to be something larger. +// +// =========================================================================== +// +// UNICODE: +// +// If compiling for Windows and you wish to use Unicode filenames, compile +// with +// #define STBI_WINDOWS_UTF8 +// and pass utf8-encoded filenames. Call stbi_convert_wchar_to_utf8 to convert +// Windows wchar_t filenames to utf8. +// +// =========================================================================== +// +// Philosophy +// +// stb libraries are designed with the following priorities: +// +// 1. easy to use +// 2. easy to maintain +// 3. good performance +// +// Sometimes I let "good performance" creep up in priority over "easy to maintain", +// and for best performance I may provide less-easy-to-use APIs that give higher +// performance, in addition to the easy-to-use ones. Nevertheless, it's important +// to keep in mind that from the standpoint of you, a client of this library, +// all you care about is #1 and #3, and stb libraries DO NOT emphasize #3 above all. +// +// Some secondary priorities arise directly from the first two, some of which +// provide more explicit reasons why performance can't be emphasized. +// +// - Portable ("ease of use") +// - Small source code footprint ("easy to maintain") +// - No dependencies ("ease of use") +// +// =========================================================================== +// +// I/O callbacks +// +// I/O callbacks allow you to read from arbitrary sources, like packaged +// files or some other source. Data read from callbacks are processed +// through a small internal buffer (currently 128 bytes) to try to reduce +// overhead. +// +// The three functions you must define are "read" (reads some bytes of data), +// "skip" (skips some bytes of data), "eof" (reports if the stream is at the end). +// +// =========================================================================== +// +// SIMD support +// +// The JPEG decoder will try to automatically use SIMD kernels on x86 when +// supported by the compiler. For ARM Neon support, you must explicitly +// request it. +// +// (The old do-it-yourself SIMD API is no longer supported in the current +// code.) +// +// On x86, SSE2 will automatically be used when available based on a run-time +// test; if not, the generic C versions are used as a fall-back. On ARM targets, +// the typical path is to have separate builds for NEON and non-NEON devices +// (at least this is true for iOS and Android). Therefore, the NEON support is +// toggled by a build flag: define STBI_NEON to get NEON loops. +// +// If for some reason you do not want to use any of SIMD code, or if +// you have issues compiling it, you can disable it entirely by +// defining STBI_NO_SIMD. +// +// =========================================================================== +// +// HDR image support (disable by defining STBI_NO_HDR) +// +// stb_image supports loading HDR images in general, and currently the Radiance +// .HDR file format specifically. You can still load any file through the existing +// interface; if you attempt to load an HDR file, it will be automatically remapped +// to LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; +// both of these constants can be reconfigured through this interface: +// +// stbi_hdr_to_ldr_gamma(2.2f); +// stbi_hdr_to_ldr_scale(1.0f); +// +// (note, do not use _inverse_ constants; stbi_image will invert them +// appropriately). +// +// Additionally, there is a new, parallel interface for loading files as +// (linear) floats to preserve the full dynamic range: +// +// float *data = stbi_loadf(filename, &x, &y, &n, 0); +// +// If you load LDR images through this interface, those images will +// be promoted to floating point values, run through the inverse of +// constants corresponding to the above: +// +// stbi_ldr_to_hdr_scale(1.0f); +// stbi_ldr_to_hdr_gamma(2.2f); +// +// Finally, given a filename (or an open file or memory block--see header +// file for details) containing image data, you can query for the "most +// appropriate" interface to use (that is, whether the image is HDR or +// not), using: +// +// stbi_is_hdr(char *filename); +// +// =========================================================================== +// +// iPhone PNG support: +// +// We optionally support converting iPhone-formatted PNGs (which store +// premultiplied BGRA) back to RGB, even though they're internally encoded +// differently. To enable this conversion, call +// stbi_convert_iphone_png_to_rgb(1). +// +// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per +// pixel to remove any premultiplied alpha *only* if the image file explicitly +// says there's premultiplied data (currently only happens in iPhone images, +// and only if iPhone convert-to-rgb processing is on). +// +// =========================================================================== +// +// ADDITIONAL CONFIGURATION +// +// - You can suppress implementation of any of the decoders to reduce +// your code footprint by #defining one or more of the following +// symbols before creating the implementation. +// +// STBI_NO_JPEG +// STBI_NO_PNG +// STBI_NO_BMP +// STBI_NO_PSD +// STBI_NO_TGA +// STBI_NO_GIF +// STBI_NO_HDR +// STBI_NO_PIC +// STBI_NO_PNM (.ppm and .pgm) +// +// - You can request *only* certain decoders and suppress all other ones +// (this will be more forward-compatible, as addition of new decoders +// doesn't require you to disable them explicitly): +// +// STBI_ONLY_JPEG +// STBI_ONLY_PNG +// STBI_ONLY_BMP +// STBI_ONLY_PSD +// STBI_ONLY_TGA +// STBI_ONLY_GIF +// STBI_ONLY_HDR +// STBI_ONLY_PIC +// STBI_ONLY_PNM (.ppm and .pgm) +// +// - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still +// want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB +// +// - If you define STBI_MAX_DIMENSIONS, stb_image will reject images greater +// than that size (in either width or height) without further processing. +// This is to let programs in the wild set an upper bound to prevent +// denial-of-service attacks on untrusted data, as one could generate a +// valid image of gigantic dimensions and force stb_image to allocate a +// huge block of memory and spend disproportionate time decoding it. By +// default this is set to (1 << 24), which is 16777216, but that's still +// very big. + +# ifndef STBI_NO_STDIO +# include <stdio.h> +# endif // STBI_NO_STDIO + +# define STBI_VERSION 1 + +enum { + STBI_default = 0, // only used for desired_channels + + STBI_grey = 1, + STBI_grey_alpha = 2, + STBI_rgb = 3, + STBI_rgb_alpha = 4 +}; + +# include <stdlib.h> +typedef unsigned char stbi_uc; +typedef unsigned short stbi_us; + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef STBIDEF +# ifdef STB_IMAGE_STATIC +# define STBIDEF static +# else +# define STBIDEF extern +# endif +# endif + +////////////////////////////////////////////////////////////////////////////// +// +// PRIMARY API - works on images of any type +// + +// +// load image by filename, open file, or memory buffer +// + +typedef struct +{ + int (*read)(void* user, char* data, int size); // fill 'data' with 'size' bytes. return number of bytes actually read + void (*skip)(void* user, int n); // skip the next 'n' bytes, or 'unget' the last -n bytes if negative + int (*eof)(void* user); // returns nonzero if we are at end of file/data +} stbi_io_callbacks; + +//////////////////////////////////// +// +// 8-bits-per-channel interface +// + +STBIDEF stbi_uc* stbi_load_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* channels_in_file, int desired_channels); +STBIDEF stbi_uc* stbi_load_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* channels_in_file, int desired_channels); + +# ifndef STBI_NO_STDIO +STBIDEF stbi_uc* stbi_load(char const* filename, int* x, int* y, int* channels_in_file, int desired_channels); +STBIDEF stbi_uc* stbi_load_from_file(FILE* f, int* x, int* y, int* channels_in_file, int desired_channels); +// for stbi_load_from_file, file pointer is left pointing immediately after image +# endif + +# ifndef STBI_NO_GIF +STBIDEF stbi_uc* stbi_load_gif_from_memory(stbi_uc const* buffer, int len, int** delays, int* x, int* y, int* z, int* comp, int req_comp); +# endif + +# ifdef STBI_WINDOWS_UTF8 +STBIDEF int stbi_convert_wchar_to_utf8(char* buffer, size_t bufferlen, wchar_t const* input); +# endif + +//////////////////////////////////// +// +// 16-bits-per-channel interface +// + +STBIDEF stbi_us* stbi_load_16_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* channels_in_file, int desired_channels); +STBIDEF stbi_us* stbi_load_16_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* channels_in_file, int desired_channels); + +# ifndef STBI_NO_STDIO +STBIDEF stbi_us* stbi_load_16(char const* filename, int* x, int* y, int* channels_in_file, int desired_channels); +STBIDEF stbi_us* stbi_load_from_file_16(FILE* f, int* x, int* y, int* channels_in_file, int desired_channels); +# endif + +//////////////////////////////////// +// +// float-per-channel interface +// +# ifndef STBI_NO_LINEAR +STBIDEF float* stbi_loadf_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* channels_in_file, int desired_channels); +STBIDEF float* stbi_loadf_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* channels_in_file, int desired_channels); + +# ifndef STBI_NO_STDIO +STBIDEF float* stbi_loadf(char const* filename, int* x, int* y, int* channels_in_file, int desired_channels); +STBIDEF float* stbi_loadf_from_file(FILE* f, int* x, int* y, int* channels_in_file, int desired_channels); +# endif +# endif + +# ifndef STBI_NO_HDR +STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); +STBIDEF void stbi_hdr_to_ldr_scale(float scale); +# endif // STBI_NO_HDR + +# ifndef STBI_NO_LINEAR +STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); +STBIDEF void stbi_ldr_to_hdr_scale(float scale); +# endif // STBI_NO_LINEAR + +// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const* clbk, void* user); +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const* buffer, int len); +# ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr(char const* filename); +STBIDEF int stbi_is_hdr_from_file(FILE* f); +# endif // STBI_NO_STDIO + +// get a VERY brief reason for failure +// on most compilers (and ALL modern mainstream compilers) this is threadsafe +STBIDEF const char* stbi_failure_reason(void); + +// free the loaded image -- this is just free() +STBIDEF void stbi_image_free(void* retval_from_stbi_load); + +// get image dimensions & components without fully decoding +STBIDEF int stbi_info_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* comp); +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* comp); +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const* buffer, int len); +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const* clbk, void* user); + +# ifndef STBI_NO_STDIO +STBIDEF int stbi_info(char const* filename, int* x, int* y, int* comp); +STBIDEF int stbi_info_from_file(FILE* f, int* x, int* y, int* comp); +STBIDEF int stbi_is_16_bit(char const* filename); +STBIDEF int stbi_is_16_bit_from_file(FILE* f); +# endif + +// for image formats that explicitly notate that they have premultiplied alpha, +// we just return the colors as stored in the file. set this flag to force +// unpremultiplication. results are undefined if the unpremultiply overflow. +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); + +// indicate whether we should process iphone images back to canonical format, +// or just pass them through "as-is" +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); + +// flip the image vertically, so the first pixel in the output array is the bottom left +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip); + +// as above, but only applies to images loaded on the thread that calls the function +// this function is only available if your compiler supports thread-local variables; +// calling it will fail to link if your compiler doesn't +STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply); +STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert); +STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip); + +// ZLIB client - used by PNG, available for other purposes + +STBIDEF char* stbi_zlib_decode_malloc_guesssize(char const* buffer, int len, int initial_size, int* outlen); +STBIDEF char* stbi_zlib_decode_malloc_guesssize_headerflag(char const* buffer, int len, int initial_size, int* outlen, int parse_header); +STBIDEF char* stbi_zlib_decode_malloc(char const* buffer, int len, int* outlen); +STBIDEF int stbi_zlib_decode_buffer(char* obuffer, int olen, char const* ibuffer, int ilen); + +STBIDEF char* stbi_zlib_decode_noheader_malloc(char const* buffer, int len, int* outlen); +STBIDEF int stbi_zlib_decode_noheader_buffer(char* obuffer, int olen, char const* ibuffer, int ilen); + +# ifdef __cplusplus +} +# endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H + +#ifdef STB_IMAGE_IMPLEMENTATION + +# if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \ + || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \ + || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \ + || defined(STBI_ONLY_ZLIB) +# ifndef STBI_ONLY_JPEG +# define STBI_NO_JPEG +# endif +# ifndef STBI_ONLY_PNG +# define STBI_NO_PNG +# endif +# ifndef STBI_ONLY_BMP +# define STBI_NO_BMP +# endif +# ifndef STBI_ONLY_PSD +# define STBI_NO_PSD +# endif +# ifndef STBI_ONLY_TGA +# define STBI_NO_TGA +# endif +# ifndef STBI_ONLY_GIF +# define STBI_NO_GIF +# endif +# ifndef STBI_ONLY_HDR +# define STBI_NO_HDR +# endif +# ifndef STBI_ONLY_PIC +# define STBI_NO_PIC +# endif +# ifndef STBI_ONLY_PNM +# define STBI_NO_PNM +# endif +# endif + +# if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB) +# define STBI_NO_ZLIB +# endif + +# include <limits.h> +# include <stdarg.h> +# include <stddef.h> // ptrdiff_t on osx +# include <stdlib.h> +# include <string.h> + +# if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) +# include <math.h> // ldexp, pow +# endif + +# ifndef STBI_NO_STDIO +# include <stdio.h> +# endif + +# ifndef STBI_ASSERT +# include <assert.h> +# define STBI_ASSERT(x) assert(x) +# endif + +# ifdef __cplusplus +# define STBI_EXTERN extern "C" +# else +# define STBI_EXTERN extern +# endif + +# ifndef _MSC_VER +# ifdef __cplusplus +# define stbi_inline inline +# else +# define stbi_inline +# endif +# else +# define stbi_inline __forceinline +# endif + +# ifndef STBI_NO_THREAD_LOCALS +# if defined(__cplusplus) && __cplusplus >= 201103L +# define STBI_THREAD_LOCAL thread_local +# elif defined(__GNUC__) && __GNUC__ < 5 +# define STBI_THREAD_LOCAL __thread +# elif defined(_MSC_VER) +# define STBI_THREAD_LOCAL __declspec(thread) +# elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__) +# define STBI_THREAD_LOCAL _Thread_local +# endif + +# ifndef STBI_THREAD_LOCAL +# if defined(__GNUC__) +# define STBI_THREAD_LOCAL __thread +# endif +# endif +# endif + +# if defined(_MSC_VER) || defined(__SYMBIAN32__) +typedef unsigned short stbi__uint16; +typedef signed short stbi__int16; +typedef unsigned int stbi__uint32; +typedef signed int stbi__int32; +# else +# include <stdint.h> +typedef uint16_t stbi__uint16; +typedef int16_t stbi__int16; +typedef uint32_t stbi__uint32; +typedef int32_t stbi__int32; +# endif + +// should produce compiler error if size is wrong +typedef unsigned char validate_uint32[sizeof(stbi__uint32) == 4 ? 1 : -1]; + +# ifdef _MSC_VER +# define STBI_NOTUSED(v) (void)(v) +# else +# define STBI_NOTUSED(v) (void)sizeof(v) +# endif + +# ifdef _MSC_VER +# define STBI_HAS_LROTL +# endif + +# ifdef STBI_HAS_LROTL +# define stbi_lrot(x, y) _lrotl(x, y) +# else +# define stbi_lrot(x, y) (((x) << (y)) | ((x) >> (-(y) & 31))) +# endif + +# if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) +// ok +# elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) +// ok +# else +# error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." +# endif + +# ifndef STBI_MALLOC +# define STBI_MALLOC(sz) malloc(sz) +# define STBI_REALLOC(p, newsz) realloc(p, newsz) +# define STBI_FREE(p) free(p) +# endif + +# ifndef STBI_REALLOC_SIZED +# define STBI_REALLOC_SIZED(p, oldsz, newsz) STBI_REALLOC(p, newsz) +# endif + +// x86/x64 detection +# if defined(__x86_64__) || defined(_M_X64) +# define STBI__X64_TARGET +# elif defined(__i386) || defined(_M_IX86) +# define STBI__X86_TARGET +# endif + +# if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) +// gcc doesn't support sse2 intrinsics unless you compile with -msse2, +// which in turn means it gets to use SSE2 everywhere. This is unfortunate, +// but previous attempts to provide the SSE2 functions with runtime +// detection caused numerous issues. The way architecture extensions are +// exposed in GCC/Clang is, sadly, not really suited for one-file libs. +// New behavior: if compiled with -msse2, we use SSE2 without any +// detection; if not, we don't use it at all. +# define STBI_NO_SIMD +# endif + +# if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) +// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET +// +// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the +// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant. +// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not +// simultaneously enabling "-mstackrealign". +// +// See https://github.com/nothings/stb/issues/81 for more information. +// +// So default to no SSE2 on 32-bit MinGW. If you've read this far and added +// -mstackrealign to your build settings, feel free to #define STBI_MINGW_ENABLE_SSE2. +# define STBI_NO_SIMD +# endif + +# if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) +# define STBI_SSE2 +# include <emmintrin.h> + +# ifdef _MSC_VER + +# if _MSC_VER >= 1400 // not VC6 +# include <intrin.h> // __cpuid +static int stbi__cpuid3(void) +{ + int info[4]; + __cpuid(info, 1); + return info[3]; +} +# else +static int stbi__cpuid3(void) +{ + int res; + __asm { + mov eax,1 + cpuid + mov res,edx + } + return res; +} +# endif + +# define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name + +# if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + int info3 = stbi__cpuid3(); + return ((info3 >> 26) & 1) != 0; +} +# endif + +# else // assume GCC-style if not VC++ +# define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) + +# if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + // If we're even attempting to compile this on GCC/Clang, that means + // -msse2 is on, which means the compiler is allowed to use SSE2 + // instructions at will, and so are we. + return 1; +} +# endif + +# endif +# endif + +// ARM NEON +# if defined(STBI_NO_SIMD) && defined(STBI_NEON) +# undef STBI_NEON +# endif + +# ifdef STBI_NEON +# include <arm_neon.h> +# ifdef _MSC_VER +# define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name +# else +# define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) +# endif +# endif + +# ifndef STBI_SIMD_ALIGN +# define STBI_SIMD_ALIGN(type, name) type name +# endif + +# ifndef STBI_MAX_DIMENSIONS +# define STBI_MAX_DIMENSIONS (1 << 24) +# endif + +/////////////////////////////////////////////// +// +// stbi__context struct and start_xxx functions + +// stbi__context structure is our basic context used by all images, so it +// contains all the IO context, plus some basic image information +typedef struct +{ + stbi__uint32 img_x, img_y; + int img_n, img_out_n; + + stbi_io_callbacks io; + void* io_user_data; + + int read_from_callbacks; + int buflen; + stbi_uc buffer_start[128]; + int callback_already_read; + + stbi_uc *img_buffer, *img_buffer_end; + stbi_uc *img_buffer_original, *img_buffer_original_end; +} stbi__context; + +static void stbi__refill_buffer(stbi__context* s); + +// initialize a memory-decode context +static void stbi__start_mem(stbi__context* s, stbi_uc const* buffer, int len) +{ + s->io.read = NULL; + s->read_from_callbacks = 0; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = (stbi_uc*)buffer; + s->img_buffer_end = s->img_buffer_original_end = (stbi_uc*)buffer + len; +} + +// initialize a callback-based context +static void stbi__start_callbacks(stbi__context* s, stbi_io_callbacks* c, void* user) +{ + s->io = *c; + s->io_user_data = user; + s->buflen = sizeof(s->buffer_start); + s->read_from_callbacks = 1; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = s->buffer_start; + stbi__refill_buffer(s); + s->img_buffer_original_end = s->img_buffer_end; +} + +# ifndef STBI_NO_STDIO + +static int stbi__stdio_read(void* user, char* data, int size) +{ + return (int)fread(data, 1, size, (FILE*)user); +} + +static void stbi__stdio_skip(void* user, int n) +{ + int ch; + fseek((FILE*)user, n, SEEK_CUR); + ch = fgetc((FILE*)user); /* have to read a byte to reset feof()'s flag */ + if (ch != EOF) { + ungetc(ch, (FILE*)user); /* push byte back onto stream if valid. */ + } +} + +static int stbi__stdio_eof(void* user) +{ + return feof((FILE*)user) || ferror((FILE*)user); +} + +static stbi_io_callbacks stbi__stdio_callbacks = { + stbi__stdio_read, + stbi__stdio_skip, + stbi__stdio_eof, +}; + +static void stbi__start_file(stbi__context* s, FILE* f) +{ + stbi__start_callbacks(s, &stbi__stdio_callbacks, (void*)f); +} + +// static void stop_file(stbi__context *s) { } + +# endif // !STBI_NO_STDIO + +static void stbi__rewind(stbi__context* s) +{ + // conceptually rewind SHOULD rewind to the beginning of the stream, + // but we just rewind to the beginning of the initial buffer, because + // we only use it after doing 'test', which only ever looks at at most 92 bytes + s->img_buffer = s->img_buffer_original; + s->img_buffer_end = s->img_buffer_original_end; +} + +enum { + STBI_ORDER_RGB, + STBI_ORDER_BGR +}; + +typedef struct +{ + int bits_per_channel; + int num_channels; + int channel_order; +} stbi__result_info; + +# ifndef STBI_NO_JPEG +static int stbi__jpeg_test(stbi__context* s); +static void* stbi__jpeg_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); +static int stbi__jpeg_info(stbi__context* s, int* x, int* y, int* comp); +# endif + +# ifndef STBI_NO_PNG +static int stbi__png_test(stbi__context* s); +static void* stbi__png_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); +static int stbi__png_info(stbi__context* s, int* x, int* y, int* comp); +static int stbi__png_is16(stbi__context* s); +# endif + +# ifndef STBI_NO_BMP +static int stbi__bmp_test(stbi__context* s); +static void* stbi__bmp_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); +static int stbi__bmp_info(stbi__context* s, int* x, int* y, int* comp); +# endif + +# ifndef STBI_NO_TGA +static int stbi__tga_test(stbi__context* s); +static void* stbi__tga_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); +static int stbi__tga_info(stbi__context* s, int* x, int* y, int* comp); +# endif + +# ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context* s); +static void* stbi__psd_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri, int bpc); +static int stbi__psd_info(stbi__context* s, int* x, int* y, int* comp); +static int stbi__psd_is16(stbi__context* s); +# endif + +# ifndef STBI_NO_HDR +static int stbi__hdr_test(stbi__context* s); +static float* stbi__hdr_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); +static int stbi__hdr_info(stbi__context* s, int* x, int* y, int* comp); +# endif + +# ifndef STBI_NO_PIC +static int stbi__pic_test(stbi__context* s); +static void* stbi__pic_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); +static int stbi__pic_info(stbi__context* s, int* x, int* y, int* comp); +# endif + +# ifndef STBI_NO_GIF +static int stbi__gif_test(stbi__context* s); +static void* stbi__gif_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); +static void* stbi__load_gif_main(stbi__context* s, int** delays, int* x, int* y, int* z, int* comp, int req_comp); +static int stbi__gif_info(stbi__context* s, int* x, int* y, int* comp); +# endif + +# ifndef STBI_NO_PNM +static int stbi__pnm_test(stbi__context* s); +static void* stbi__pnm_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri); +static int stbi__pnm_info(stbi__context* s, int* x, int* y, int* comp); +static int stbi__pnm_is16(stbi__context* s); +# endif + +static +# ifdef STBI_THREAD_LOCAL + STBI_THREAD_LOCAL +# endif + char const* stbi__g_failure_reason; + +STBIDEF const char* stbi_failure_reason(void) +{ + return stbi__g_failure_reason; +} + +# ifndef STBI_NO_FAILURE_STRINGS +static int stbi__err(char const* str) +{ + stbi__g_failure_reason = str; + return 0; +} +# endif + +static void* stbi__malloc(size_t size) +{ + return STBI_MALLOC(size); +} + +// stb_image uses ints pervasively, including for offset calculations. +// therefore the largest decoded image size we can support with the +// current code, even on 64-bit targets, is INT_MAX. this is not a +// significant limitation for the intended use case. +// +// we do, however, need to make sure our size calculations don't +// overflow. hence a few helper functions for size calculations that +// multiply integers together, making sure that they're non-negative +// and no overflow occurs. + +// return 1 if the sum is valid, 0 on overflow. +// negative terms are considered invalid. +static int stbi__addsizes_valid(int a, int b) +{ + if (b < 0) + return 0; + // now 0 <= b <= INT_MAX, hence also + // 0 <= INT_MAX - b <= INTMAX. + // And "a + b <= INT_MAX" (which might overflow) is the + // same as a <= INT_MAX - b (no overflow) + return a <= INT_MAX - b; +} + +// returns 1 if the product is valid, 0 on overflow. +// negative factors are considered invalid. +static int stbi__mul2sizes_valid(int a, int b) +{ + if (a < 0 || b < 0) + return 0; + if (b == 0) + return 1; // mul-by-0 is always safe + // portable way to check for no overflows in a*b + return a <= INT_MAX / b; +} + +# if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow +static int stbi__mad2sizes_valid(int a, int b, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a * b, add); +} +# endif + +// returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow +static int stbi__mad3sizes_valid(int a, int b, int c, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a * b, c) && stbi__addsizes_valid(a * b * c, add); +} + +// returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't overflow +# if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a * b, c) && stbi__mul2sizes_valid(a * b * c, d) && stbi__addsizes_valid(a * b * c * d, add); +} +# endif + +# if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// mallocs with size overflow checking +static void* stbi__malloc_mad2(int a, int b, int add) +{ + if (!stbi__mad2sizes_valid(a, b, add)) + return NULL; + return stbi__malloc(a * b + add); +} +# endif + +static void* stbi__malloc_mad3(int a, int b, int c, int add) +{ + if (!stbi__mad3sizes_valid(a, b, c, add)) + return NULL; + return stbi__malloc(a * b * c + add); +} + +# if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static void* stbi__malloc_mad4(int a, int b, int c, int d, int add) +{ + if (!stbi__mad4sizes_valid(a, b, c, d, add)) + return NULL; + return stbi__malloc(a * b * c * d + add); +} +# endif + +// returns 1 if the sum of two signed ints is valid (between -2^31 and 2^31-1 inclusive), 0 on overflow. +static int stbi__addints_valid(int a, int b) +{ + if ((a >= 0) != (b >= 0)) + return 1; // a and b have different signs, so no overflow + if (a < 0 && b < 0) + return a >= INT_MIN - b; // same as a + b >= INT_MIN; INT_MIN - b cannot overflow since b < 0. + return a <= INT_MAX - b; +} + +// returns 1 if the product of two ints fits in a signed short, 0 on overflow. +static int stbi__mul2shorts_valid(int a, int b) +{ + if (b == 0 || b == -1) + return 1; // multiplication by 0 is always 0; check for -1 so SHRT_MIN/b doesn't overflow + if ((a >= 0) == (b >= 0)) + return a <= SHRT_MAX / b; // product is positive, so similar to mul2sizes_valid + if (b < 0) + return a <= SHRT_MIN / b; // same as a * b >= SHRT_MIN + return a >= SHRT_MIN / b; +} + +// stbi__err - error +// stbi__errpf - error returning pointer to float +// stbi__errpuc - error returning pointer to unsigned char + +# ifdef STBI_NO_FAILURE_STRINGS +# define stbi__err(x, y) 0 +# elif defined(STBI_FAILURE_USERMSG) +# define stbi__err(x, y) stbi__err(y) +# else +# define stbi__err(x, y) stbi__err(x) +# endif + +# define stbi__errpf(x, y) ((float*)(size_t)(stbi__err(x, y) ? NULL : NULL)) +# define stbi__errpuc(x, y) ((unsigned char*)(size_t)(stbi__err(x, y) ? NULL : NULL)) + +STBIDEF void stbi_image_free(void* retval_from_stbi_load) +{ + STBI_FREE(retval_from_stbi_load); +} + +# ifndef STBI_NO_LINEAR +static float* stbi__ldr_to_hdr(stbi_uc* data, int x, int y, int comp); +# endif + +# ifndef STBI_NO_HDR +static stbi_uc* stbi__hdr_to_ldr(float* data, int x, int y, int comp); +# endif + +static int stbi__vertically_flip_on_load_global = 0; + +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_global = flag_true_if_should_flip; +} + +# ifndef STBI_THREAD_LOCAL +# define stbi__vertically_flip_on_load stbi__vertically_flip_on_load_global +# else +static STBI_THREAD_LOCAL int stbi__vertically_flip_on_load_local, stbi__vertically_flip_on_load_set; + +STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_local = flag_true_if_should_flip; + stbi__vertically_flip_on_load_set = 1; +} + +# define stbi__vertically_flip_on_load (stbi__vertically_flip_on_load_set \ + ? stbi__vertically_flip_on_load_local \ + : stbi__vertically_flip_on_load_global) +# endif // STBI_THREAD_LOCAL + +static void* stbi__load_main(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri, int bpc) +{ + memset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields + ri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed + ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order + ri->num_channels = 0; + +// test the formats with a very explicit header first (at least a FOURCC +// or distinctive magic number first) +# ifndef STBI_NO_PNG + if (stbi__png_test(s)) + return stbi__png_load(s, x, y, comp, req_comp, ri); +# endif +# ifndef STBI_NO_BMP + if (stbi__bmp_test(s)) + return stbi__bmp_load(s, x, y, comp, req_comp, ri); +# endif +# ifndef STBI_NO_GIF + if (stbi__gif_test(s)) + return stbi__gif_load(s, x, y, comp, req_comp, ri); +# endif +# ifndef STBI_NO_PSD + if (stbi__psd_test(s)) + return stbi__psd_load(s, x, y, comp, req_comp, ri, bpc); +# else + STBI_NOTUSED(bpc); +# endif +# ifndef STBI_NO_PIC + if (stbi__pic_test(s)) + return stbi__pic_load(s, x, y, comp, req_comp, ri); +# endif + +// then the formats that can end up attempting to load with just 1 or 2 +// bytes matching expectations; these are prone to false positives, so +// try them later +# ifndef STBI_NO_JPEG + if (stbi__jpeg_test(s)) + return stbi__jpeg_load(s, x, y, comp, req_comp, ri); +# endif +# ifndef STBI_NO_PNM + if (stbi__pnm_test(s)) + return stbi__pnm_load(s, x, y, comp, req_comp, ri); +# endif + +# ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + float* hdr = stbi__hdr_load(s, x, y, comp, req_comp, ri); + return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } +# endif + +# ifndef STBI_NO_TGA + // test tga last because it's a crappy test! + if (stbi__tga_test(s)) + return stbi__tga_load(s, x, y, comp, req_comp, ri); +# endif + + return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt"); +} + +static stbi_uc* stbi__convert_16_to_8(stbi__uint16* orig, int w, int h, int channels) +{ + int i; + int img_len = w * h * channels; + stbi_uc* reduced; + + reduced = (stbi_uc*)stbi__malloc(img_len); + if (reduced == NULL) + return stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling + + STBI_FREE(orig); + return reduced; +} + +static stbi__uint16* stbi__convert_8_to_16(stbi_uc* orig, int w, int h, int channels) +{ + int i; + int img_len = w * h * channels; + stbi__uint16* enlarged; + + enlarged = (stbi__uint16*)stbi__malloc(img_len * 2); + if (enlarged == NULL) + return (stbi__uint16*)stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + enlarged[i] = (stbi__uint16)((orig[i] << 8) + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff + + STBI_FREE(orig); + return enlarged; +} + +static void stbi__vertical_flip(void* image, int w, int h, int bytes_per_pixel) +{ + return; + int row; + size_t bytes_per_row = (size_t)w * bytes_per_pixel; + stbi_uc temp[2048]; + stbi_uc* bytes = (stbi_uc*)image; + + for (row = 0; row < (h >> 1); row++) { + stbi_uc* row0 = bytes + row * bytes_per_row; + stbi_uc* row1 = bytes + (h - row - 1) * bytes_per_row; + // swap row0 with row1 + size_t bytes_left = bytes_per_row; + while (bytes_left) { + size_t bytes_copy = (bytes_left < sizeof(temp)) ? bytes_left : sizeof(temp); + memcpy(temp, row0, bytes_copy); + memcpy(row0, row1, bytes_copy); + memcpy(row1, temp, bytes_copy); + row0 += bytes_copy; + row1 += bytes_copy; + bytes_left -= bytes_copy; + } + } +} + +# ifndef STBI_NO_GIF +static void stbi__vertical_flip_slices(void* image, int w, int h, int z, int bytes_per_pixel) +{ + return; + int slice; + int slice_size = w * h * bytes_per_pixel; + + stbi_uc* bytes = (stbi_uc*)image; + for (slice = 0; slice < z; ++slice) { + stbi__vertical_flip(bytes, w, h, bytes_per_pixel); + bytes += slice_size; + } +} +# endif + +static unsigned char* stbi__load_and_postprocess_8bit(stbi__context* s, int* x, int* y, int* comp, int req_comp) +{ + stbi__result_info ri; + void* result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8); + + if (result == NULL) + return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 8) { + result = stbi__convert_16_to_8((stbi__uint16*)result, *x, *y, req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 8; + } + + // @TODO: move stbi__convert_format to here + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc)); + } + + return (unsigned char*)result; +} + +static stbi__uint16* stbi__load_and_postprocess_16bit(stbi__context* s, int* x, int* y, int* comp, int req_comp) +{ + stbi__result_info ri; + void* result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16); + + if (result == NULL) + return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 16) { + result = stbi__convert_8_to_16((stbi_uc*)result, *x, *y, req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 16; + } + + // @TODO: move stbi__convert_format16 to here + // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi__uint16)); + } + + return (stbi__uint16*)result; +} + +# if !defined(STBI_NO_HDR) && !defined(STBI_NO_LINEAR) +static void stbi__float_postprocess(float* result, int* x, int* y, int* comp, int req_comp) +{ + if (stbi__vertically_flip_on_load && result != NULL) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(float)); + } +} +# endif + +# ifndef STBI_NO_STDIO + +# if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, char const* str, int cbmb, wchar_t* widestr, int cchwide); +STBI_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, wchar_t const* widestr, int cchwide, char* str, int cbmb, char const* defchar, int* used_default); +# endif + +# if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBIDEF int stbi_convert_wchar_to_utf8(char* buffer, size_t bufferlen, wchar_t const* input) +{ + return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int)bufferlen, NULL, NULL); +} +# endif + +static FILE* stbi__fopen(char const* filename, char const* mode) +{ + FILE* f; +# if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) + wchar_t wMode[64]; + wchar_t wFilename[1024]; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename) / sizeof(*wFilename))) + return 0; + + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode) / sizeof(*wMode))) + return 0; + +# if defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != _wfopen_s(&f, wFilename, wMode)) + f = 0; +# else + f = _wfopen(wFilename, wMode); +# endif + +# elif defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != fopen_s(&f, filename, mode)) + f = 0; +# else + f = fopen(filename, mode); +# endif + return f; +} + +STBIDEF stbi_uc* stbi_load(char const* filename, int* x, int* y, int* comp, int req_comp) +{ + FILE* f = stbi__fopen(filename, "rb"); + unsigned char* result; + if (!f) + return stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file(f, x, y, comp, req_comp); + fclose(f); + return result; +} + +STBIDEF stbi_uc* stbi_load_from_file(FILE* f, int* x, int* y, int* comp, int req_comp) +{ + unsigned char* result; + stbi__context s; + stbi__start_file(&s, f); + result = stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, -(int)(s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi__uint16* stbi_load_from_file_16(FILE* f, int* x, int* y, int* comp, int req_comp) +{ + stbi__uint16* result; + stbi__context s; + stbi__start_file(&s, f); + result = stbi__load_and_postprocess_16bit(&s, x, y, comp, req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, -(int)(s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi_us* stbi_load_16(char const* filename, int* x, int* y, int* comp, int req_comp) +{ + FILE* f = stbi__fopen(filename, "rb"); + stbi__uint16* result; + if (!f) + return (stbi_us*)stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file_16(f, x, y, comp, req_comp); + fclose(f); + return result; +} + +# endif //! STBI_NO_STDIO + +STBIDEF stbi_us* stbi_load_16_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* channels_in_file, int desired_channels) +{ + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__load_and_postprocess_16bit(&s, x, y, channels_in_file, desired_channels); +} + +STBIDEF stbi_us* stbi_load_16_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* channels_in_file, int desired_channels) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks*)clbk, user); + return stbi__load_and_postprocess_16bit(&s, x, y, channels_in_file, desired_channels); +} + +STBIDEF stbi_uc* stbi_load_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); +} + +STBIDEF stbi_uc* stbi_load_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks*)clbk, user); + return stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); +} + +# ifndef STBI_NO_GIF +STBIDEF stbi_uc* stbi_load_gif_from_memory(stbi_uc const* buffer, int len, int** delays, int* x, int* y, int* z, int* comp, int req_comp) +{ + unsigned char* result; + stbi__context s; + stbi__start_mem(&s, buffer, len); + + result = (unsigned char*)stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp); + if (stbi__vertically_flip_on_load) { + stbi__vertical_flip_slices(result, *x, *y, *z, *comp); + } + + return result; +} +# endif + +# ifndef STBI_NO_LINEAR +static float* stbi__loadf_main(stbi__context* s, int* x, int* y, int* comp, int req_comp) +{ + unsigned char* data; +# ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + stbi__result_info ri; + float* hdr_data = stbi__hdr_load(s, x, y, comp, req_comp, &ri); + if (hdr_data) + stbi__float_postprocess(hdr_data, x, y, comp, req_comp); + return hdr_data; + } +# endif + data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp); + if (data) + return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return stbi__errpf("unknown image type", "Image not of any known type, or corrupt"); +} + +STBIDEF float* stbi_loadf_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__loadf_main(&s, x, y, comp, req_comp); +} + +STBIDEF float* stbi_loadf_from_callbacks(stbi_io_callbacks const* clbk, void* user, int* x, int* y, int* comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks*)clbk, user); + return stbi__loadf_main(&s, x, y, comp, req_comp); +} + +# ifndef STBI_NO_STDIO +STBIDEF float* stbi_loadf(char const* filename, int* x, int* y, int* comp, int req_comp) +{ + float* result; + FILE* f = stbi__fopen(filename, "rb"); + if (!f) + return stbi__errpf("can't fopen", "Unable to open file"); + result = stbi_loadf_from_file(f, x, y, comp, req_comp); + fclose(f); + return result; +} + +STBIDEF float* stbi_loadf_from_file(FILE* f, int* x, int* y, int* comp, int req_comp) +{ + stbi__context s; + stbi__start_file(&s, f); + return stbi__loadf_main(&s, x, y, comp, req_comp); +} +# endif // !STBI_NO_STDIO + +# endif // !STBI_NO_LINEAR + +// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is +// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always +// reports false! + +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const* buffer, int len) +{ +# ifndef STBI_NO_HDR + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__hdr_test(&s); +# else + STBI_NOTUSED(buffer); + STBI_NOTUSED(len); + return 0; +# endif +} + +# ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr(char const* filename) +{ + FILE* f = stbi__fopen(filename, "rb"); + int result = 0; + if (f) { + result = stbi_is_hdr_from_file(f); + fclose(f); + } + return result; +} + +STBIDEF int stbi_is_hdr_from_file(FILE* f) +{ +# ifndef STBI_NO_HDR + long pos = ftell(f); + int res; + stbi__context s; + stbi__start_file(&s, f); + res = stbi__hdr_test(&s); + fseek(f, pos, SEEK_SET); + return res; +# else + STBI_NOTUSED(f); + return 0; +# endif +} +# endif // !STBI_NO_STDIO + +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const* clbk, void* user) +{ +# ifndef STBI_NO_HDR + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks*)clbk, user); + return stbi__hdr_test(&s); +# else + STBI_NOTUSED(clbk); + STBI_NOTUSED(user); + return 0; +# endif +} + +# ifndef STBI_NO_LINEAR +static float stbi__l2h_gamma = 2.2f, stbi__l2h_scale = 1.0f; + +STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } +STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } +# endif + +static float stbi__h2l_gamma_i = 1.0f / 2.2f, stbi__h2l_scale_i = 1.0f; + +STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1 / gamma; } +STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1 / scale; } + +////////////////////////////////////////////////////////////////////////////// +// +// Common code used by all image loaders +// + +enum { + STBI__SCAN_load = 0, + STBI__SCAN_type, + STBI__SCAN_header +}; + +static void stbi__refill_buffer(stbi__context* s) +{ + int n = (s->io.read)(s->io_user_data, (char*)s->buffer_start, s->buflen); + s->callback_already_read += (int)(s->img_buffer - s->img_buffer_original); + if (n == 0) { + // at end of file, treat same as if from memory, but need to handle case + // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file + s->read_from_callbacks = 0; + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + 1; + *s->img_buffer = 0; + } else { + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + n; + } +} + +stbi_inline static stbi_uc stbi__get8(stbi__context* s) +{ + if (s->img_buffer < s->img_buffer_end) + return *s->img_buffer++; + if (s->read_from_callbacks) { + stbi__refill_buffer(s); + return *s->img_buffer++; + } + return 0; +} + +# if defined(STBI_NO_JPEG) && defined(STBI_NO_HDR) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +# else +stbi_inline static int stbi__at_eof(stbi__context* s) +{ + if (s->io.read) { + if (!(s->io.eof)(s->io_user_data)) + return 0; + // if feof() is true, check if buffer = end + // special case: we've only got the special 0 character at the end + if (s->read_from_callbacks == 0) + return 1; + } + + return s->img_buffer >= s->img_buffer_end; +} +# endif + +# if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) +// nothing +# else +static void stbi__skip(stbi__context* s, int n) +{ + if (n == 0) + return; // already there! + if (n < 0) { + s->img_buffer = s->img_buffer_end; + return; + } + if (s->io.read) { + int blen = (int)(s->img_buffer_end - s->img_buffer); + if (blen < n) { + s->img_buffer = s->img_buffer_end; + (s->io.skip)(s->io_user_data, n - blen); + return; + } + } + s->img_buffer += n; +} +# endif + +# if defined(STBI_NO_PNG) && defined(STBI_NO_TGA) && defined(STBI_NO_HDR) && defined(STBI_NO_PNM) +// nothing +# else +static int stbi__getn(stbi__context* s, stbi_uc* buffer, int n) +{ + if (s->io.read) { + int blen = (int)(s->img_buffer_end - s->img_buffer); + if (blen < n) { + int res, count; + + memcpy(buffer, s->img_buffer, blen); + + count = (s->io.read)(s->io_user_data, (char*)buffer + blen, n - blen); + res = (count == (n - blen)); + s->img_buffer = s->img_buffer_end; + return res; + } + } + + if (s->img_buffer + n <= s->img_buffer_end) { + memcpy(buffer, s->img_buffer, n); + s->img_buffer += n; + return 1; + } else + return 0; +} +# endif + +# if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +# else +static int stbi__get16be(stbi__context* s) +{ + int z = stbi__get8(s); + return (z << 8) + stbi__get8(s); +} +# endif + +# if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +# else +static stbi__uint32 stbi__get32be(stbi__context* s) +{ + stbi__uint32 z = stbi__get16be(s); + return (z << 16) + stbi__get16be(s); +} +# endif + +# if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) +// nothing +# else +static int stbi__get16le(stbi__context* s) +{ + int z = stbi__get8(s); + return z + (stbi__get8(s) << 8); +} +# endif + +# ifndef STBI_NO_BMP +static stbi__uint32 stbi__get32le(stbi__context* s) +{ + stbi__uint32 z = stbi__get16le(s); + z += (stbi__uint32)stbi__get16le(s) << 16; + return z; +} +# endif + +# define STBI__BYTECAST(x) ((stbi_uc)((x) & 255)) // truncate int to byte without warnings + +# if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +# else +////////////////////////////////////////////////////////////////////////////// +// +// generic converter from built-in img_n to req_comp +// individual types do this automatically as much as possible (e.g. jpeg +// does all cases internally since it needs to colorspace convert anyway, +// and it never has alpha, so very few cases ). png can automatically +// interleave an alpha=255 channel, but falls back to this for other cases +// +// assume data buffer is malloced, so malloc a new one and free that one +// only failure mode is malloc failing + +static stbi_uc stbi__compute_y(int r, int g, int b) +{ + return (stbi_uc)(((r * 77) + (g * 150) + (29 * b)) >> 8); +} +# endif + +# if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +# else +static unsigned char* stbi__convert_format(unsigned char* data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i, j; + unsigned char* good; + + if (req_comp == img_n) + return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (unsigned char*)stbi__malloc_mad3(req_comp, x, y, 0); + if (good == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + + for (j = 0; j < (int)y; ++j) { + unsigned char* src = data + j * x * img_n; + unsigned char* dest = good + j * x * req_comp; + +# define STBI__COMBO(a, b) ((a) * 8 + (b)) +# define STBI__CASE(a, b) \ + case STBI__COMBO(a, b): \ + for (i = x - 1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1, 2) + { + dest[0] = src[0]; + dest[1] = 255; + } + break; + STBI__CASE(1, 3) { dest[0] = dest[1] = dest[2] = src[0]; } + break; + STBI__CASE(1, 4) + { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = 255; + } + break; + STBI__CASE(2, 1) { dest[0] = src[0]; } + break; + STBI__CASE(2, 3) { dest[0] = dest[1] = dest[2] = src[0]; } + break; + STBI__CASE(2, 4) + { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = src[1]; + } + break; + STBI__CASE(3, 4) + { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + dest[3] = 255; + } + break; + STBI__CASE(3, 1) { dest[0] = stbi__compute_y(src[0], src[1], src[2]); } + break; + STBI__CASE(3, 2) + { + dest[0] = stbi__compute_y(src[0], src[1], src[2]); + dest[1] = 255; + } + break; + STBI__CASE(4, 1) { dest[0] = stbi__compute_y(src[0], src[1], src[2]); } + break; + STBI__CASE(4, 2) + { + dest[0] = stbi__compute_y(src[0], src[1], src[2]); + dest[1] = src[3]; + } + break; + STBI__CASE(4, 3) + { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + } + break; + default: + STBI_ASSERT(0); + STBI_FREE(data); + STBI_FREE(good); + return stbi__errpuc("unsupported", "Unsupported format conversion"); + } +# undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +# endif + +# if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +# else +static stbi__uint16 stbi__compute_y_16(int r, int g, int b) +{ + return (stbi__uint16)(((r * 77) + (g * 150) + (29 * b)) >> 8); +} +# endif + +# if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +# else +static stbi__uint16* stbi__convert_format16(stbi__uint16* data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i, j; + stbi__uint16* good; + + if (req_comp == img_n) + return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (stbi__uint16*)stbi__malloc(req_comp * x * y * 2); + if (good == NULL) { + STBI_FREE(data); + return (stbi__uint16*)stbi__errpuc("outofmem", "Out of memory"); + } + + for (j = 0; j < (int)y; ++j) { + stbi__uint16* src = data + j * x * img_n; + stbi__uint16* dest = good + j * x * req_comp; + +# define STBI__COMBO(a, b) ((a) * 8 + (b)) +# define STBI__CASE(a, b) \ + case STBI__COMBO(a, b): \ + for (i = x - 1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1, 2) + { + dest[0] = src[0]; + dest[1] = 0xffff; + } + break; + STBI__CASE(1, 3) { dest[0] = dest[1] = dest[2] = src[0]; } + break; + STBI__CASE(1, 4) + { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = 0xffff; + } + break; + STBI__CASE(2, 1) { dest[0] = src[0]; } + break; + STBI__CASE(2, 3) { dest[0] = dest[1] = dest[2] = src[0]; } + break; + STBI__CASE(2, 4) + { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = src[1]; + } + break; + STBI__CASE(3, 4) + { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + dest[3] = 0xffff; + } + break; + STBI__CASE(3, 1) { dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); } + break; + STBI__CASE(3, 2) + { + dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); + dest[1] = 0xffff; + } + break; + STBI__CASE(4, 1) { dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); } + break; + STBI__CASE(4, 2) + { + dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); + dest[1] = src[3]; + } + break; + STBI__CASE(4, 3) + { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + } + break; + default: + STBI_ASSERT(0); + STBI_FREE(data); + STBI_FREE(good); + return (stbi__uint16*)stbi__errpuc("unsupported", "Unsupported format conversion"); + } +# undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +# endif + +# ifndef STBI_NO_LINEAR +static float* stbi__ldr_to_hdr(stbi_uc* data, int x, int y, int comp) +{ + int i, k, n; + float* output; + if (!data) + return NULL; + output = (float*)stbi__malloc_mad4(x, y, comp, sizeof(float), 0); + if (output == NULL) { + STBI_FREE(data); + return stbi__errpf("outofmem", "Out of memory"); + } + // compute number of non-alpha components + if (comp & 1) + n = comp; + else + n = comp - 1; + for (i = 0; i < x * y; ++i) { + for (k = 0; k < n; ++k) { + output[i * comp + k] = (float)(pow(data[i * comp + k] / 255.0f, stbi__l2h_gamma) * stbi__l2h_scale); + } + } + if (n < comp) { + for (i = 0; i < x * y; ++i) { + output[i * comp + n] = data[i * comp + n] / 255.0f; + } + } + STBI_FREE(data); + return output; +} +# endif + +# ifndef STBI_NO_HDR +# define stbi__float2int(x) ((int)(x)) +static stbi_uc* stbi__hdr_to_ldr(float* data, int x, int y, int comp) +{ + int i, k, n; + stbi_uc* output; + if (!data) + return NULL; + output = (stbi_uc*)stbi__malloc_mad3(x, y, comp, 0); + if (output == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + // compute number of non-alpha components + if (comp & 1) + n = comp; + else + n = comp - 1; + for (i = 0; i < x * y; ++i) { + for (k = 0; k < n; ++k) { + float z = (float)pow(data[i * comp + k] * stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; + if (z < 0) + z = 0; + if (z > 255) + z = 255; + output[i * comp + k] = (stbi_uc)stbi__float2int(z); + } + if (k < comp) { + float z = data[i * comp + k] * 255 + 0.5f; + if (z < 0) + z = 0; + if (z > 255) + z = 255; + output[i * comp + k] = (stbi_uc)stbi__float2int(z); + } + } + STBI_FREE(data); + return output; +} +# endif + +////////////////////////////////////////////////////////////////////////////// +// +// "baseline" JPEG/JFIF decoder +// +// simple implementation +// - doesn't support delayed output of y-dimension +// - simple interface (only one output format: 8-bit interleaved RGB) +// - doesn't try to recover corrupt jpegs +// - doesn't allow partial loading, loading multiple at once +// - still fast on x86 (copying globals into locals doesn't help x86) +// - allocates lots of intermediate memory (full size of all components) +// - non-interleaved case requires this anyway +// - allows good upsampling (see next) +// high-quality +// - upsampled channels are bilinearly interpolated, even across blocks +// - quality integer IDCT derived from IJG's 'slow' +// performance +// - fast huffman; reasonable integer IDCT +// - some SIMD kernels for common paths on targets with SSE2/NEON +// - uses a lot of intermediate memory, could cache poorly + +# ifndef STBI_NO_JPEG + +// huffman decoding acceleration +# define FAST_BITS 9 // larger handles more cases; smaller stomps less cache + +typedef struct +{ + stbi_uc fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + stbi__uint16 code[256]; + stbi_uc values[256]; + stbi_uc size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' +} stbi__huffman; + +typedef struct +{ + stbi__context* s; + stbi__huffman huff_dc[4]; + stbi__huffman huff_ac[4]; + stbi__uint16 dequant[4][64]; + stbi__int16 fast_ac[4][1 << FAST_BITS]; + + // sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; + + // definition of jpeg image component + struct + { + int id; + int h, v; + int tq; + int hd, ha; + int dc_pred; + + int x, y, w2, h2; + stbi_uc* data; + void *raw_data, *raw_coeff; + stbi_uc* linebuf; + short* coeff; // progressive only + int coeff_w, coeff_h; // number of 8x8 coefficient blocks + } img_comp[4]; + + stbi__uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop + + int progressive; + int spec_start; + int spec_end; + int succ_high; + int succ_low; + int eob_run; + int jfif; + int app14_color_transform; // Adobe APP14 tag + int rgb; + + int scan_n, order[4]; + int restart_interval, todo; + + // kernels + void (*idct_block_kernel)(stbi_uc* out, int out_stride, short data[64]); + void (*YCbCr_to_RGB_kernel)(stbi_uc* out, stbi_uc const* y, stbi_uc const* pcb, stbi_uc const* pcr, int count, int step); + stbi_uc* (*resample_row_hv_2_kernel)(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs); +} stbi__jpeg; + +static int stbi__build_huffman(stbi__huffman* h, int* count) +{ + int i, j, k = 0; + unsigned int code; + // build size list for each symbol (from JPEG spec) + for (i = 0; i < 16; ++i) { + for (j = 0; j < count[i]; ++j) { + h->size[k++] = (stbi_uc)(i + 1); + if (k >= 257) + return stbi__err("bad size list", "Corrupt JPEG"); + } + } + h->size[k] = 0; + + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for (j = 1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) + h->code[k++] = (stbi__uint16)(code++); + if (code - 1 >= (1u << j)) + return stbi__err("bad code lengths", "Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16 - j); + code <<= 1; + } + h->maxcode[j] = 0xffffffff; + + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i = 0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS - s); + int m = 1 << (FAST_BITS - s); + for (j = 0; j < m; ++j) { + h->fast[c + j] = (stbi_uc)i; + } + } + } + return 1; +} + +// build a table that decodes both magnitude and value of small ACs in +// one go. +static void stbi__build_fast_ac(stbi__int16* fast_ac, stbi__huffman* h) +{ + int i; + for (i = 0; i < (1 << FAST_BITS); ++i) { + stbi_uc fast = h->fast[i]; + fast_ac[i] = 0; + if (fast < 255) { + int rs = h->values[fast]; + int run = (rs >> 4) & 15; + int magbits = rs & 15; + int len = h->size[fast]; + + if (magbits && len + magbits <= FAST_BITS) { + // magnitude code followed by receive_extend code + int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); + int m = 1 << (magbits - 1); + if (k < m) + k += (~0U << magbits) + 1; + // if the result is small enough, we can fit it in fast_ac table + if (k >= -128 && k <= 127) + fast_ac[i] = (stbi__int16)((k * 256) + (run * 16) + (len + magbits)); + } + } + } +} + +static void stbi__grow_buffer_unsafe(stbi__jpeg* j) +{ + do { + unsigned int b = j->nomore ? 0 : stbi__get8(j->s); + if (b == 0xff) { + int c = stbi__get8(j->s); + while (c == 0xff) + c = stbi__get8(j->s); // consume fill bytes + if (c != 0) { + j->marker = (unsigned char)c; + j->nomore = 1; + return; + } + } + j->code_buffer |= b << (24 - j->code_bits); + j->code_bits += 8; + } while (j->code_bits <= 24); +} + +// (1 << n) - 1 +static stbi__uint32 const stbi__bmask[17] = { 0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535 }; + +// decode a jpeg huffman value from the bitstream +stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg* j, stbi__huffman* h) +{ + unsigned int temp; + int c, k; + + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); + + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1); + k = h->fast[c]; + if (k < 255) { + int s = h->size[k]; + if (s > j->code_bits) + return -1; + j->code_buffer <<= s; + j->code_bits -= s; + return h->values[k]; + } + + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + temp = j->code_buffer >> 16; + for (k = FAST_BITS + 1;; ++k) + if (temp < h->maxcode[k]) + break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } + + if (k > j->code_bits) + return -1; + + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; + if (c < 0 || c >= 256) // symbol id out of bounds! + return -1; + STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); + + // convert the id to a symbol + j->code_bits -= k; + j->code_buffer <<= k; + return h->values[c]; +} + +// bias[n] = (-1<<n) + 1 +static int const stbi__jbias[16] = { 0, -1, -3, -7, -15, -31, -63, -127, -255, -511, -1023, -2047, -4095, -8191, -16383, -32767 }; + +// combined JPEG 'receive' and JPEG 'extend', since baseline +// always extends everything it receives. +stbi_inline static int stbi__extend_receive(stbi__jpeg* j, int n) +{ + unsigned int k; + int sgn; + if (j->code_bits < n) + stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) + return 0; // ran out of bits from stream, return 0s intead of continuing + + sgn = j->code_buffer >> 31; // sign bit always in MSB; 0 if MSB clear (positive), 1 if MSB set (negative) + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k + (stbi__jbias[n] & (sgn - 1)); +} + +// get some unsigned bits +stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg* j, int n) +{ + unsigned int k; + if (j->code_bits < n) + stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) + return 0; // ran out of bits from stream, return 0s intead of continuing + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k; +} + +stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg* j) +{ + unsigned int k; + if (j->code_bits < 1) + stbi__grow_buffer_unsafe(j); + if (j->code_bits < 1) + return 0; // ran out of bits from stream, return 0s intead of continuing + k = j->code_buffer; + j->code_buffer <<= 1; + --j->code_bits; + return k & 0x80000000; +} + +// given a value that's at position X in the zigzag stream, +// where does it appear in the 8x8 matrix coded as row-major? +static stbi_uc const stbi__jpeg_dezigzag[64 + 15] = { + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63 +}; + +// decode one 64-entry block-- +static int stbi__jpeg_decode_block(stbi__jpeg* j, short data[64], stbi__huffman* hdc, stbi__huffman* hac, stbi__int16* fac, int b, stbi__uint16* dequant) +{ + int diff, dc, k; + int t; + + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) + return stbi__err("bad huffman code", "Corrupt JPEG"); + + // 0 all the ac values now so we can do it 32-bits at a time + memset(data, 0, 64 * sizeof(data[0])); + + diff = t ? stbi__extend_receive(j, t) : 0; + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) + return stbi__err("bad delta", "Corrupt JPEG"); + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, dequant[0])) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + data[0] = (short)(dc * dequant[0]); + + // decode AC components, see JPEG spec + k = 1; + do { + unsigned int zig; + int c, r, s; + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + if (s > j->code_bits) + return stbi__err("bad huffman code", "Combined length longer than code bits available"); + j->code_buffer <<= s; + j->code_bits -= s; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)((r >> 8) * dequant[zig]); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) + return stbi__err("bad huffman code", "Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) + break; // end block + k += 16; + } else { + k += r; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)(stbi__extend_receive(j, s) * dequant[zig]); + } + } + } while (k < 64); + return 1; +} + +static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg* j, short data[64], stbi__huffman* hdc, int b) +{ + int diff, dc; + int t; + if (j->spec_end != 0) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); + + if (j->succ_high == 0) { + // first scan for DC coefficient, must be first + memset(data, 0, 64 * sizeof(data[0])); // 0 all the ac values now + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + diff = t ? stbi__extend_receive(j, t) : 0; + + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) + return stbi__err("bad delta", "Corrupt JPEG"); + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, 1 << j->succ_low)) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + data[0] = (short)(dc * (1 << j->succ_low)); + } else { + // refinement scan for DC coefficient + if (stbi__jpeg_get_bit(j)) + data[0] += (short)(1 << j->succ_low); + } + return 1; +} + +// @OPTIMIZE: store non-zigzagged during the decode passes, +// and only de-zigzag when dequantizing +static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg* j, short data[64], stbi__huffman* hac, stbi__int16* fac) +{ + int k; + if (j->spec_start == 0) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->succ_high == 0) { + int shift = j->succ_low; + + if (j->eob_run) { + --j->eob_run; + return 1; + } + + k = j->spec_start; + do { + unsigned int zig; + int c, r, s; + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + if (s > j->code_bits) + return stbi__err("bad huffman code", "Combined length longer than code bits available"); + j->code_buffer <<= s; + j->code_bits -= s; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)((r >> 8) * (1 << shift)); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) + return stbi__err("bad huffman code", "Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r); + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + --j->eob_run; + break; + } + k += 16; + } else { + k += r; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)(stbi__extend_receive(j, s) * (1 << shift)); + } + } + } while (k <= j->spec_end); + } else { + // refinement scan for these AC coefficients + + short bit = (short)(1 << j->succ_low); + + if (j->eob_run) { + --j->eob_run; + for (k = j->spec_start; k <= j->spec_end; ++k) { + short* p = &data[stbi__jpeg_dezigzag[k]]; + if (*p != 0) + if (stbi__jpeg_get_bit(j)) + if ((*p & bit) == 0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } + } else { + k = j->spec_start; + do { + int r, s; + int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh + if (rs < 0) + return stbi__err("bad huffman code", "Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r) - 1; + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + r = 64; // force end of block + } else { + // r=15 s=0 should write 16 0s, so we just do + // a run of 15 0s and then write s (which is 0), + // so we don't have to do anything special here + } + } else { + if (s != 1) + return stbi__err("bad huffman code", "Corrupt JPEG"); + // sign bit + if (stbi__jpeg_get_bit(j)) + s = bit; + else + s = -bit; + } + + // advance by r + while (k <= j->spec_end) { + short* p = &data[stbi__jpeg_dezigzag[k++]]; + if (*p != 0) { + if (stbi__jpeg_get_bit(j)) + if ((*p & bit) == 0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } else { + if (r == 0) { + *p = (short)s; + break; + } + --r; + } + } + } while (k <= j->spec_end); + } + } + return 1; +} + +// take a -128..127 value and stbi__clamp it and convert to 0..255 +stbi_inline static stbi_uc stbi__clamp(int x) +{ + // trick to use a single test to catch both cases + if ((unsigned int)x > 255) { + if (x < 0) + return 0; + if (x > 255) + return 255; + } + return (stbi_uc)x; +} + +# define stbi__f2f(x) ((int)(((x) * 4096 + 0.5))) +# define stbi__fsh(x) ((x) * 4096) + +// derived from jidctint -- DCT_ISLOW +# define STBI__IDCT_1D(s0, s1, s2, s3, s4, s5, s6, s7) \ + int t0, t1, t2, t3, p1, p2, p3, p4, p5, x0, x1, x2, x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2 + p3) * stbi__f2f(0.5411961f); \ + t2 = p1 + p3 * stbi__f2f(-1.847759065f); \ + t3 = p1 + p2 * stbi__f2f(0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = stbi__fsh(p2 + p3); \ + t1 = stbi__fsh(p2 - p3); \ + x0 = t0 + t3; \ + x3 = t0 - t3; \ + x1 = t1 + t2; \ + x2 = t1 - t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0 + t2; \ + p4 = t1 + t3; \ + p1 = t0 + t3; \ + p2 = t1 + t2; \ + p5 = (p3 + p4) * stbi__f2f(1.175875602f); \ + t0 = t0 * stbi__f2f(0.298631336f); \ + t1 = t1 * stbi__f2f(2.053119869f); \ + t2 = t2 * stbi__f2f(3.072711026f); \ + t3 = t3 * stbi__f2f(1.501321110f); \ + p1 = p5 + p1 * stbi__f2f(-0.899976223f); \ + p2 = p5 + p2 * stbi__f2f(-2.562915447f); \ + p3 = p3 * stbi__f2f(-1.961570560f); \ + p4 = p4 * stbi__f2f(-0.390180644f); \ + t3 += p1 + p4; \ + t2 += p2 + p3; \ + t1 += p2 + p4; \ + t0 += p1 + p3; + +static void stbi__idct_block(stbi_uc* out, int out_stride, short data[64]) +{ + int i, val[64], *v = val; + stbi_uc* o; + short* d = data; + + // columns + for (i = 0; i < 8; ++i, ++d, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[8] == 0 && d[16] == 0 && d[24] == 0 && d[32] == 0 + && d[40] == 0 && d[48] == 0 && d[56] == 0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0] * 4; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + STBI__IDCT_1D(d[0], d[8], d[16], d[24], d[32], d[40], d[48], d[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; + x1 += 512; + x2 += 512; + x3 += 512; + v[0] = (x0 + t3) >> 10; + v[56] = (x0 - t3) >> 10; + v[8] = (x1 + t2) >> 10; + v[48] = (x1 - t2) >> 10; + v[16] = (x2 + t1) >> 10; + v[40] = (x2 - t1) >> 10; + v[24] = (x3 + t0) >> 10; + v[32] = (x3 - t0) >> 10; + } + } + + for (i = 0, v = val, o = out; i < 8; ++i, v += 8, o += out_stride) { + // no fast case since the first 1D IDCT spread components out + STBI__IDCT_1D(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + // so we want to round that, which means adding 0.5 * 1<<17, + // aka 65536. Also, we'll end up with -128 to 127 that we want + // to encode as 0..255 by adding 128, so we'll add that before the shift + x0 += 65536 + (128 << 17); + x1 += 65536 + (128 << 17); + x2 += 65536 + (128 << 17); + x3 += 65536 + (128 << 17); + // tried computing the shifts into temps, or'ing the temps to see + // if any were out of range, but that was slower + o[0] = stbi__clamp((x0 + t3) >> 17); + o[7] = stbi__clamp((x0 - t3) >> 17); + o[1] = stbi__clamp((x1 + t2) >> 17); + o[6] = stbi__clamp((x1 - t2) >> 17); + o[2] = stbi__clamp((x2 + t1) >> 17); + o[5] = stbi__clamp((x2 - t1) >> 17); + o[3] = stbi__clamp((x3 + t0) >> 17); + o[4] = stbi__clamp((x3 - t0) >> 17); + } +} + +# ifdef STBI_SSE2 +// sse2 integer IDCT. not the fastest possible implementation but it +// produces bit-identical results to the generic C version so it's +// fully "transparent". +static void stbi__idct_simd(stbi_uc* out, int out_stride, short data[64]) +{ + // This is constructed to match our regular (generic) integer IDCT exactly. + __m128i row0, row1, row2, row3, row4, row5, row6, row7; + __m128i tmp; + +// dot product constant: even elems=x, odd elems=y +# define dct_const(x, y) _mm_setr_epi16((x), (y), (x), (y), (x), (y), (x), (y)) + +// out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) +// out(1) = c1[even]*x + c1[odd]*y +# define dct_rot(out0, out1, x, y, c0, c1) \ + __m128i c0##lo = _mm_unpacklo_epi16((x), (y)); \ + __m128i c0##hi = _mm_unpackhi_epi16((x), (y)); \ + __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ + __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ + __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ + __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) + +// out = in << 12 (in 16-bit, out 32-bit) +# define dct_widen(out, in) \ + __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ + __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) + +// wide add +# define dct_wadd(out, a, b) \ + __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_add_epi32(a##_h, b##_h) + +// wide sub +# define dct_wsub(out, a, b) \ + __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) + +// butterfly a/b, add bias, then shift by "s" and pack +# define dct_bfly32o(out0, out1, a, b, bias, s) \ + { \ + __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ + __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ + dct_wadd(sum, abiased, b); \ + dct_wsub(dif, abiased, b); \ + out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ + out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ + } + +// 8-bit interleave step (for transposes) +# define dct_interleave8(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi8(a, b); \ + b = _mm_unpackhi_epi8(tmp, b) + +// 16-bit interleave step (for transposes) +# define dct_interleave16(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi16(a, b); \ + b = _mm_unpackhi_epi16(tmp, b) + +# define dct_pass(bias, shift) \ + { \ + /* even part */ \ + dct_rot(t2e, t3e, row2, row6, rot0_0, rot0_1); \ + __m128i sum04 = _mm_add_epi16(row0, row4); \ + __m128i dif04 = _mm_sub_epi16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + dct_rot(y0o, y2o, row7, row3, rot2_0, rot2_1); \ + dct_rot(y1o, y3o, row5, row1, rot3_0, rot3_1); \ + __m128i sum17 = _mm_add_epi16(row1, row7); \ + __m128i sum35 = _mm_add_epi16(row3, row5); \ + dct_rot(y4o, y5o, sum17, sum35, rot1_0, rot1_1); \ + dct_wadd(x4, y0o, y4o); \ + dct_wadd(x5, y1o, y5o); \ + dct_wadd(x6, y2o, y5o); \ + dct_wadd(x7, y3o, y4o); \ + dct_bfly32o(row0, row7, x0, x7, bias, shift); \ + dct_bfly32o(row1, row6, x1, x6, bias, shift); \ + dct_bfly32o(row2, row5, x2, x5, bias, shift); \ + dct_bfly32o(row3, row4, x3, x4, bias, shift); \ + } + + __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); + __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f(0.765366865f), stbi__f2f(0.5411961f)); + __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f)); + __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); + __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f(0.298631336f), stbi__f2f(-1.961570560f)); + __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f(3.072711026f)); + __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f(2.053119869f), stbi__f2f(-0.390180644f)); + __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f(1.501321110f)); + + // rounding biases in column/row passes, see stbi__idct_block for explanation. + __m128i bias_0 = _mm_set1_epi32(512); + __m128i bias_1 = _mm_set1_epi32(65536 + (128 << 17)); + + // load + row0 = _mm_load_si128((__m128i const*)(data + 0 * 8)); + row1 = _mm_load_si128((__m128i const*)(data + 1 * 8)); + row2 = _mm_load_si128((__m128i const*)(data + 2 * 8)); + row3 = _mm_load_si128((__m128i const*)(data + 3 * 8)); + row4 = _mm_load_si128((__m128i const*)(data + 4 * 8)); + row5 = _mm_load_si128((__m128i const*)(data + 5 * 8)); + row6 = _mm_load_si128((__m128i const*)(data + 6 * 8)); + row7 = _mm_load_si128((__m128i const*)(data + 7 * 8)); + + // column pass + dct_pass(bias_0, 10); + + { + // 16bit 8x8 transpose pass 1 + dct_interleave16(row0, row4); + dct_interleave16(row1, row5); + dct_interleave16(row2, row6); + dct_interleave16(row3, row7); + + // transpose pass 2 + dct_interleave16(row0, row2); + dct_interleave16(row1, row3); + dct_interleave16(row4, row6); + dct_interleave16(row5, row7); + + // transpose pass 3 + dct_interleave16(row0, row1); + dct_interleave16(row2, row3); + dct_interleave16(row4, row5); + dct_interleave16(row6, row7); + } + + // row pass + dct_pass(bias_1, 17); + + { + // pack + __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 + __m128i p1 = _mm_packus_epi16(row2, row3); + __m128i p2 = _mm_packus_epi16(row4, row5); + __m128i p3 = _mm_packus_epi16(row6, row7); + + // 8bit 8x8 transpose pass 1 + dct_interleave8(p0, p2); // a0e0a1e1... + dct_interleave8(p1, p3); // c0g0c1g1... + + // transpose pass 2 + dct_interleave8(p0, p1); // a0c0e0g0... + dct_interleave8(p2, p3); // b0d0f0h0... + + // transpose pass 3 + dct_interleave8(p0, p2); // a0b0c0d0... + dct_interleave8(p1, p3); // a4b4c4d4... + + // store + _mm_storel_epi64((__m128i*)out, p0); + out += out_stride; + _mm_storel_epi64((__m128i*)out, _mm_shuffle_epi32(p0, 0x4e)); + out += out_stride; + _mm_storel_epi64((__m128i*)out, p2); + out += out_stride; + _mm_storel_epi64((__m128i*)out, _mm_shuffle_epi32(p2, 0x4e)); + out += out_stride; + _mm_storel_epi64((__m128i*)out, p1); + out += out_stride; + _mm_storel_epi64((__m128i*)out, _mm_shuffle_epi32(p1, 0x4e)); + out += out_stride; + _mm_storel_epi64((__m128i*)out, p3); + out += out_stride; + _mm_storel_epi64((__m128i*)out, _mm_shuffle_epi32(p3, 0x4e)); + } + +# undef dct_const +# undef dct_rot +# undef dct_widen +# undef dct_wadd +# undef dct_wsub +# undef dct_bfly32o +# undef dct_interleave8 +# undef dct_interleave16 +# undef dct_pass +} + +# endif // STBI_SSE2 + +# ifdef STBI_NEON + +// NEON integer IDCT. should produce bit-identical +// results to the generic C version. +static void stbi__idct_simd(stbi_uc* out, int out_stride, short data[64]) +{ + int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; + + int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); + int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); + int16x4_t rot0_2 = vdup_n_s16(stbi__f2f(0.765366865f)); + int16x4_t rot1_0 = vdup_n_s16(stbi__f2f(1.175875602f)); + int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); + int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); + int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); + int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); + int16x4_t rot3_0 = vdup_n_s16(stbi__f2f(0.298631336f)); + int16x4_t rot3_1 = vdup_n_s16(stbi__f2f(2.053119869f)); + int16x4_t rot3_2 = vdup_n_s16(stbi__f2f(3.072711026f)); + int16x4_t rot3_3 = vdup_n_s16(stbi__f2f(1.501321110f)); + +# define dct_long_mul(out, inq, coeff) \ + int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) + +# define dct_long_mac(out, acc, inq, coeff) \ + int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) + +# define dct_widen(out, inq) \ + int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ + int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) + +// wide add +# define dct_wadd(out, a, b) \ + int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vaddq_s32(a##_h, b##_h) + +// wide sub +# define dct_wsub(out, a, b) \ + int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vsubq_s32(a##_h, b##_h) + +// butterfly a/b, then shift using "shiftop" by "s" and pack +# define dct_bfly32o(out0, out1, a, b, shiftop, s) \ + { \ + dct_wadd(sum, a, b); \ + dct_wsub(dif, a, b); \ + out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ + out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ + } + +# define dct_pass(shiftop, shift) \ + { \ + /* even part */ \ + int16x8_t sum26 = vaddq_s16(row2, row6); \ + dct_long_mul(p1e, sum26, rot0_0); \ + dct_long_mac(t2e, p1e, row6, rot0_1); \ + dct_long_mac(t3e, p1e, row2, rot0_2); \ + int16x8_t sum04 = vaddq_s16(row0, row4); \ + int16x8_t dif04 = vsubq_s16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + int16x8_t sum15 = vaddq_s16(row1, row5); \ + int16x8_t sum17 = vaddq_s16(row1, row7); \ + int16x8_t sum35 = vaddq_s16(row3, row5); \ + int16x8_t sum37 = vaddq_s16(row3, row7); \ + int16x8_t sumodd = vaddq_s16(sum17, sum35); \ + dct_long_mul(p5o, sumodd, rot1_0); \ + dct_long_mac(p1o, p5o, sum17, rot1_1); \ + dct_long_mac(p2o, p5o, sum35, rot1_2); \ + dct_long_mul(p3o, sum37, rot2_0); \ + dct_long_mul(p4o, sum15, rot2_1); \ + dct_wadd(sump13o, p1o, p3o); \ + dct_wadd(sump24o, p2o, p4o); \ + dct_wadd(sump23o, p2o, p3o); \ + dct_wadd(sump14o, p1o, p4o); \ + dct_long_mac(x4, sump13o, row7, rot3_0); \ + dct_long_mac(x5, sump24o, row5, rot3_1); \ + dct_long_mac(x6, sump23o, row3, rot3_2); \ + dct_long_mac(x7, sump14o, row1, rot3_3); \ + dct_bfly32o(row0, row7, x0, x7, shiftop, shift); \ + dct_bfly32o(row1, row6, x1, x6, shiftop, shift); \ + dct_bfly32o(row2, row5, x2, x5, shiftop, shift); \ + dct_bfly32o(row3, row4, x3, x4, shiftop, shift); \ + } + + // load + row0 = vld1q_s16(data + 0 * 8); + row1 = vld1q_s16(data + 1 * 8); + row2 = vld1q_s16(data + 2 * 8); + row3 = vld1q_s16(data + 3 * 8); + row4 = vld1q_s16(data + 4 * 8); + row5 = vld1q_s16(data + 5 * 8); + row6 = vld1q_s16(data + 6 * 8); + row7 = vld1q_s16(data + 7 * 8); + + // add DC bias + row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); + + // column pass + dct_pass(vrshrn_n_s32, 10); + + // 16bit 8x8 transpose + { +// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. +// whether compilers actually get this is another story, sadly. +# define dct_trn16(x, y) \ + { \ + int16x8x2_t t = vtrnq_s16(x, y); \ + x = t.val[0]; \ + y = t.val[1]; \ + } +# define dct_trn32(x, y) \ + { \ + int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); \ + x = vreinterpretq_s16_s32(t.val[0]); \ + y = vreinterpretq_s16_s32(t.val[1]); \ + } +# define dct_trn64(x, y) \ + { \ + int16x8_t x0 = x; \ + int16x8_t y0 = y; \ + x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); \ + y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); \ + } + + // pass 1 + dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 + dct_trn16(row2, row3); + dct_trn16(row4, row5); + dct_trn16(row6, row7); + + // pass 2 + dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 + dct_trn32(row1, row3); + dct_trn32(row4, row6); + dct_trn32(row5, row7); + + // pass 3 + dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 + dct_trn64(row1, row5); + dct_trn64(row2, row6); + dct_trn64(row3, row7); + +# undef dct_trn16 +# undef dct_trn32 +# undef dct_trn64 + } + + // row pass + // vrshrn_n_s32 only supports shifts up to 16, we need + // 17. so do a non-rounding shift of 16 first then follow + // up with a rounding shift by 1. + dct_pass(vshrn_n_s32, 16); + + { + // pack and round + uint8x8_t p0 = vqrshrun_n_s16(row0, 1); + uint8x8_t p1 = vqrshrun_n_s16(row1, 1); + uint8x8_t p2 = vqrshrun_n_s16(row2, 1); + uint8x8_t p3 = vqrshrun_n_s16(row3, 1); + uint8x8_t p4 = vqrshrun_n_s16(row4, 1); + uint8x8_t p5 = vqrshrun_n_s16(row5, 1); + uint8x8_t p6 = vqrshrun_n_s16(row6, 1); + uint8x8_t p7 = vqrshrun_n_s16(row7, 1); + + // again, these can translate into one instruction, but often don't. +# define dct_trn8_8(x, y) \ + { \ + uint8x8x2_t t = vtrn_u8(x, y); \ + x = t.val[0]; \ + y = t.val[1]; \ + } +# define dct_trn8_16(x, y) \ + { \ + uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); \ + x = vreinterpret_u8_u16(t.val[0]); \ + y = vreinterpret_u8_u16(t.val[1]); \ + } +# define dct_trn8_32(x, y) \ + { \ + uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); \ + x = vreinterpret_u8_u32(t.val[0]); \ + y = vreinterpret_u8_u32(t.val[1]); \ + } + + // sadly can't use interleaved stores here since we only write + // 8 bytes to each scan line! + + // 8x8 8-bit transpose pass 1 + dct_trn8_8(p0, p1); + dct_trn8_8(p2, p3); + dct_trn8_8(p4, p5); + dct_trn8_8(p6, p7); + + // pass 2 + dct_trn8_16(p0, p2); + dct_trn8_16(p1, p3); + dct_trn8_16(p4, p6); + dct_trn8_16(p5, p7); + + // pass 3 + dct_trn8_32(p0, p4); + dct_trn8_32(p1, p5); + dct_trn8_32(p2, p6); + dct_trn8_32(p3, p7); + + // store + vst1_u8(out, p0); + out += out_stride; + vst1_u8(out, p1); + out += out_stride; + vst1_u8(out, p2); + out += out_stride; + vst1_u8(out, p3); + out += out_stride; + vst1_u8(out, p4); + out += out_stride; + vst1_u8(out, p5); + out += out_stride; + vst1_u8(out, p6); + out += out_stride; + vst1_u8(out, p7); + +# undef dct_trn8_8 +# undef dct_trn8_16 +# undef dct_trn8_32 + } + +# undef dct_long_mul +# undef dct_long_mac +# undef dct_widen +# undef dct_wadd +# undef dct_wsub +# undef dct_bfly32o +# undef dct_pass +} + +# endif // STBI_NEON + +# define STBI__MARKER_none 0xff +// if there's a pending marker from the entropy stream, return that +// otherwise, fetch from the stream and get a marker. if there's no +// marker, return 0xff, which is never a valid marker value +static stbi_uc stbi__get_marker(stbi__jpeg* j) +{ + stbi_uc x; + if (j->marker != STBI__MARKER_none) { + x = j->marker; + j->marker = STBI__MARKER_none; + return x; + } + x = stbi__get8(j->s); + if (x != 0xff) + return STBI__MARKER_none; + while (x == 0xff) + x = stbi__get8(j->s); // consume repeated 0xff fill bytes + return x; +} + +// in each scan, we'll have scan_n components, and the order +// of the components is specified by order[] +# define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) + +// after a restart interval, stbi__jpeg_reset the entropy decoder and +// the dc prediction +static void stbi__jpeg_reset(stbi__jpeg* j) +{ + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0; + j->marker = STBI__MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + j->eob_run = 0; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels +} + +static int stbi__parse_entropy_coded_data(stbi__jpeg* z) +{ + stbi__jpeg_reset(z); + if (!z->progressive) { + if (z->scan_n == 1) { + int i, j; + STBI_SIMD_ALIGN(short, data[64]); + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x + 7) >> 3; + int h = (z->img_comp[n].y + 7) >> 3; + for (j = 0; j < h; ++j) { + for (i = 0; i < w; ++i) { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc + z->img_comp[n].hd, z->huff_ac + ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) + return 0; + z->idct_block_kernel(z->img_comp[n].data + z->img_comp[n].w2 * j * 8 + i * 8, z->img_comp[n].w2, data); + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) + stbi__grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!STBI__RESTART(z->marker)) + return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i, j, k, x, y; + STBI_SIMD_ALIGN(short, data[64]); + for (j = 0; j < z->img_mcu_y; ++j) { + for (i = 0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k = 0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y = 0; y < z->img_comp[n].v; ++y) { + for (x = 0; x < z->img_comp[n].h; ++x) { + int x2 = (i * z->img_comp[n].h + x) * 8; + int y2 = (j * z->img_comp[n].v + y) * 8; + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc + z->img_comp[n].hd, z->huff_ac + ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) + return 0; + z->idct_block_kernel(z->img_comp[n].data + z->img_comp[n].w2 * y2 + x2, z->img_comp[n].w2, data); + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) + stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) + return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } else { + if (z->scan_n == 1) { + int i, j; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x + 7) >> 3; + int h = (z->img_comp[n].y + 7) >> 3; + for (j = 0; j < h; ++j) { + for (i = 0; i < w; ++i) { + short* data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + if (z->spec_start == 0) { + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } else { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha])) + return 0; + } + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) + stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) + return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i, j, k, x, y; + for (j = 0; j < z->img_mcu_y; ++j) { + for (i = 0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k = 0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y = 0; y < z->img_comp[n].v; ++y) { + for (x = 0; x < z->img_comp[n].h; ++x) { + int x2 = (i * z->img_comp[n].h + x); + int y2 = (j * z->img_comp[n].v + y); + short* data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w); + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) + stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) + return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } +} + +static void stbi__jpeg_dequantize(short* data, stbi__uint16* dequant) +{ + int i; + for (i = 0; i < 64; ++i) + data[i] *= dequant[i]; +} + +static void stbi__jpeg_finish(stbi__jpeg* z) +{ + if (z->progressive) { + // dequantize and idct the data + int i, j, n; + for (n = 0; n < z->s->img_n; ++n) { + int w = (z->img_comp[n].x + 7) >> 3; + int h = (z->img_comp[n].y + 7) >> 3; + for (j = 0; j < h; ++j) { + for (i = 0; i < w; ++i) { + short* data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); + z->idct_block_kernel(z->img_comp[n].data + z->img_comp[n].w2 * j * 8 + i * 8, z->img_comp[n].w2, data); + } + } + } + } +} + +static int stbi__process_marker(stbi__jpeg* z, int m) +{ + int L; + switch (m) { + case STBI__MARKER_none: // no marker found + return stbi__err("expected marker", "Corrupt JPEG"); + + case 0xDD: // DRI - specify restart interval + if (stbi__get16be(z->s) != 4) + return stbi__err("bad DRI len", "Corrupt JPEG"); + z->restart_interval = stbi__get16be(z->s); + return 1; + + case 0xDB: // DQT - define quantization table + L = stbi__get16be(z->s) - 2; + while (L > 0) { + int q = stbi__get8(z->s); + int p = q >> 4, sixteen = (p != 0); + int t = q & 15, i; + if (p != 0 && p != 1) + return stbi__err("bad DQT type", "Corrupt JPEG"); + if (t > 3) + return stbi__err("bad DQT table", "Corrupt JPEG"); + + for (i = 0; i < 64; ++i) + z->dequant[t][stbi__jpeg_dezigzag[i]] = (stbi__uint16)(sixteen ? stbi__get16be(z->s) : stbi__get8(z->s)); + L -= (sixteen ? 129 : 65); + } + return L == 0; + + case 0xC4: // DHT - define huffman table + L = stbi__get16be(z->s) - 2; + while (L > 0) { + stbi_uc* v; + int sizes[16], i, n = 0; + int q = stbi__get8(z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) + return stbi__err("bad DHT header", "Corrupt JPEG"); + for (i = 0; i < 16; ++i) { + sizes[i] = stbi__get8(z->s); + n += sizes[i]; + } + if (n > 256) + return stbi__err("bad DHT header", "Corrupt JPEG"); // Loop over i < n would write past end of values! + L -= 17; + if (tc == 0) { + if (!stbi__build_huffman(z->huff_dc + th, sizes)) + return 0; + v = z->huff_dc[th].values; + } else { + if (!stbi__build_huffman(z->huff_ac + th, sizes)) + return 0; + v = z->huff_ac[th].values; + } + for (i = 0; i < n; ++i) + v[i] = stbi__get8(z->s); + if (tc != 0) + stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); + L -= n; + } + return L == 0; + } + + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + L = stbi__get16be(z->s); + if (L < 2) { + if (m == 0xFE) + return stbi__err("bad COM len", "Corrupt JPEG"); + else + return stbi__err("bad APP len", "Corrupt JPEG"); + } + L -= 2; + + if (m == 0xE0 && L >= 5) { // JFIF APP0 segment + static unsigned char const tag[5] = { 'J', 'F', 'I', 'F', '\0' }; + int ok = 1; + int i; + for (i = 0; i < 5; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 5; + if (ok) + z->jfif = 1; + } else if (m == 0xEE && L >= 12) { // Adobe APP14 segment + static unsigned char const tag[6] = { 'A', 'd', 'o', 'b', 'e', '\0' }; + int ok = 1; + int i; + for (i = 0; i < 6; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 6; + if (ok) { + stbi__get8(z->s); // version + stbi__get16be(z->s); // flags0 + stbi__get16be(z->s); // flags1 + z->app14_color_transform = stbi__get8(z->s); // color transform + L -= 6; + } + } + + stbi__skip(z->s, L); + return 1; + } + + return stbi__err("unknown marker", "Corrupt JPEG"); +} + +// after we see SOS +static int stbi__process_scan_header(stbi__jpeg* z) +{ + int i; + int Ls = stbi__get16be(z->s); + z->scan_n = stbi__get8(z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int)z->s->img_n) + return stbi__err("bad SOS component count", "Corrupt JPEG"); + if (Ls != 6 + 2 * z->scan_n) + return stbi__err("bad SOS len", "Corrupt JPEG"); + for (i = 0; i < z->scan_n; ++i) { + int id = stbi__get8(z->s), which; + int q = stbi__get8(z->s); + for (which = 0; which < z->s->img_n; ++which) + if (z->img_comp[which].id == id) + break; + if (which == z->s->img_n) + return 0; // no match + z->img_comp[which].hd = q >> 4; + if (z->img_comp[which].hd > 3) + return stbi__err("bad DC huff", "Corrupt JPEG"); + z->img_comp[which].ha = q & 15; + if (z->img_comp[which].ha > 3) + return stbi__err("bad AC huff", "Corrupt JPEG"); + z->order[i] = which; + } + + { + int aa; + z->spec_start = stbi__get8(z->s); + z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 + aa = stbi__get8(z->s); + z->succ_high = (aa >> 4); + z->succ_low = (aa & 15); + if (z->progressive) { + if (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) + return stbi__err("bad SOS", "Corrupt JPEG"); + } else { + if (z->spec_start != 0) + return stbi__err("bad SOS", "Corrupt JPEG"); + if (z->succ_high != 0 || z->succ_low != 0) + return stbi__err("bad SOS", "Corrupt JPEG"); + z->spec_end = 63; + } + } + + return 1; +} + +static int stbi__free_jpeg_components(stbi__jpeg* z, int ncomp, int why) +{ + int i; + for (i = 0; i < ncomp; ++i) { + if (z->img_comp[i].raw_data) { + STBI_FREE(z->img_comp[i].raw_data); + z->img_comp[i].raw_data = NULL; + z->img_comp[i].data = NULL; + } + if (z->img_comp[i].raw_coeff) { + STBI_FREE(z->img_comp[i].raw_coeff); + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].coeff = 0; + } + if (z->img_comp[i].linebuf) { + STBI_FREE(z->img_comp[i].linebuf); + z->img_comp[i].linebuf = NULL; + } + } + return why; +} + +static int stbi__process_frame_header(stbi__jpeg* z, int scan) +{ + stbi__context* s = z->s; + int Lf, p, i, q, h_max = 1, v_max = 1, c; + Lf = stbi__get16be(s); + if (Lf < 11) + return stbi__err("bad SOF len", "Corrupt JPEG"); // JPEG + p = stbi__get8(s); + if (p != 8) + return stbi__err("only 8-bit", "JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = stbi__get16be(s); + if (s->img_y == 0) + return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG + s->img_x = stbi__get16be(s); + if (s->img_x == 0) + return stbi__err("0 width", "Corrupt JPEG"); // JPEG requires + if (s->img_y > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + c = stbi__get8(s); + if (c != 3 && c != 1 && c != 4) + return stbi__err("bad component count", "Corrupt JPEG"); + s->img_n = c; + for (i = 0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; + } + + if (Lf != 8 + 3 * s->img_n) + return stbi__err("bad SOF len", "Corrupt JPEG"); + + z->rgb = 0; + for (i = 0; i < s->img_n; ++i) { + static unsigned char const rgb[3] = { 'R', 'G', 'B' }; + z->img_comp[i].id = stbi__get8(s); + if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) + ++z->rgb; + q = stbi__get8(s); + z->img_comp[i].h = (q >> 4); + if (!z->img_comp[i].h || z->img_comp[i].h > 4) + return stbi__err("bad H", "Corrupt JPEG"); + z->img_comp[i].v = q & 15; + if (!z->img_comp[i].v || z->img_comp[i].v > 4) + return stbi__err("bad V", "Corrupt JPEG"); + z->img_comp[i].tq = stbi__get8(s); + if (z->img_comp[i].tq > 3) + return stbi__err("bad TQ", "Corrupt JPEG"); + } + + if (scan != STBI__SCAN_load) + return 1; + + if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) + return stbi__err("too large", "Image too large to decode"); + + for (i = 0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) + h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) + v_max = z->img_comp[i].v; + } + + // check that plane subsampling factors are integer ratios; our resamplers can't deal with fractional ratios + // and I've never seen a non-corrupted JPEG file actually use them + for (i = 0; i < s->img_n; ++i) { + if (h_max % z->img_comp[i].h != 0) + return stbi__err("bad H", "Corrupt JPEG"); + if (v_max % z->img_comp[i].v != 0) + return stbi__err("bad V", "Corrupt JPEG"); + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + // these sizes can't be more than 17 bits + z->img_mcu_x = (s->img_x + z->img_mcu_w - 1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h - 1) / z->img_mcu_h; + + for (i = 0; i < s->img_n; ++i) { + // number of effective pixels (e.g. for non-interleaved MCU) + z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max - 1) / h_max; + z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max - 1) / v_max; + // to simplify generation, we'll allocate enough memory to decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + // + // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier) + // so these muls can't overflow with 32-bit ints (which we require) + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].coeff = 0; + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].linebuf = NULL; + z->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15); + if (z->img_comp[i].raw_data == NULL) + return stbi__free_jpeg_components(z, i + 1, stbi__err("outofmem", "Out of memory")); + // align blocks for idct using mmx/sse + z->img_comp[i].data = (stbi_uc*)(((size_t)z->img_comp[i].raw_data + 15) & ~15); + if (z->progressive) { + // w2, h2 are multiples of 8 (see above) + z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; + z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; + z->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15); + if (z->img_comp[i].raw_coeff == NULL) + return stbi__free_jpeg_components(z, i + 1, stbi__err("outofmem", "Out of memory")); + z->img_comp[i].coeff = (short*)(((size_t)z->img_comp[i].raw_coeff + 15) & ~15); + } + } + + return 1; +} + +// use comparisons since in some cases we handle more than one case (e.g. SOF) +# define stbi__DNL(x) ((x) == 0xdc) +# define stbi__SOI(x) ((x) == 0xd8) +# define stbi__EOI(x) ((x) == 0xd9) +# define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) +# define stbi__SOS(x) ((x) == 0xda) + +# define stbi__SOF_progressive(x) ((x) == 0xc2) + +static int stbi__decode_jpeg_header(stbi__jpeg* z, int scan) +{ + int m; + z->jfif = 0; + z->app14_color_transform = -1; // valid values are 0,1,2 + z->marker = STBI__MARKER_none; // initialize cached marker to empty + m = stbi__get_marker(z); + if (!stbi__SOI(m)) + return stbi__err("no SOI", "Corrupt JPEG"); + if (scan == STBI__SCAN_type) + return 1; + m = stbi__get_marker(z); + while (!stbi__SOF(m)) { + if (!stbi__process_marker(z, m)) + return 0; + m = stbi__get_marker(z); + while (m == STBI__MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll scan + if (stbi__at_eof(z->s)) + return stbi__err("no SOF", "Corrupt JPEG"); + m = stbi__get_marker(z); + } + } + z->progressive = stbi__SOF_progressive(m); + if (!stbi__process_frame_header(z, scan)) + return 0; + return 1; +} + +static stbi_uc stbi__skip_jpeg_junk_at_end(stbi__jpeg* j) +{ + // some JPEGs have junk at end, skip over it but if we find what looks + // like a valid marker, resume there + while (!stbi__at_eof(j->s)) { + stbi_uc x = stbi__get8(j->s); + while (x == 0xff) { // might be a marker + if (stbi__at_eof(j->s)) + return STBI__MARKER_none; + x = stbi__get8(j->s); + if (x != 0x00 && x != 0xff) { + // not a stuffed zero or lead-in to another marker, looks + // like an actual marker, return it + return x; + } + // stuffed zero has x=0 now which ends the loop, meaning we go + // back to regular scan loop. + // repeated 0xff keeps trying to read the next byte of the marker. + } + } + return STBI__MARKER_none; +} + +// decode image to YCbCr format +static int stbi__decode_jpeg_image(stbi__jpeg* j) +{ + int m; + for (m = 0; m < 4; m++) { + j->img_comp[m].raw_data = NULL; + j->img_comp[m].raw_coeff = NULL; + } + j->restart_interval = 0; + if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) + return 0; + m = stbi__get_marker(j); + while (!stbi__EOI(m)) { + if (stbi__SOS(m)) { + if (!stbi__process_scan_header(j)) + return 0; + if (!stbi__parse_entropy_coded_data(j)) + return 0; + if (j->marker == STBI__MARKER_none) { + j->marker = stbi__skip_jpeg_junk_at_end(j); + // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 + } + m = stbi__get_marker(j); + if (STBI__RESTART(m)) + m = stbi__get_marker(j); + } else if (stbi__DNL(m)) { + int Ld = stbi__get16be(j->s); + stbi__uint32 NL = stbi__get16be(j->s); + if (Ld != 4) + return stbi__err("bad DNL len", "Corrupt JPEG"); + if (NL != j->s->img_y) + return stbi__err("bad DNL height", "Corrupt JPEG"); + m = stbi__get_marker(j); + } else { + if (!stbi__process_marker(j, m)) + return 1; + m = stbi__get_marker(j); + } + } + if (j->progressive) + stbi__jpeg_finish(j); + return 1; +} + +// static jfif-centered resampling (across block boundaries) + +typedef stbi_uc* (*resample_row_func)(stbi_uc* out, stbi_uc* in0, stbi_uc* in1, + int w, int hs); + +# define stbi__div4(x) ((stbi_uc)((x) >> 2)) + +static stbi_uc* resample_row_1(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs) +{ + STBI_NOTUSED(out); + STBI_NOTUSED(in_far); + STBI_NOTUSED(w); + STBI_NOTUSED(hs); + return in_near; +} + +static stbi_uc* stbi__resample_row_v_2(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs) +{ + // need to generate two samples vertically for every one in input + int i; + STBI_NOTUSED(hs); + for (i = 0; i < w; ++i) + out[i] = stbi__div4(3 * in_near[i] + in_far[i] + 2); + return out; +} + +static stbi_uc* stbi__resample_row_h_2(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs) +{ + // need to generate two samples horizontally for every one in input + int i; + stbi_uc* input = in_near; + + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = stbi__div4(input[0] * 3 + input[1] + 2); + for (i = 1; i < w - 1; ++i) { + int n = 3 * input[i] + 2; + out[i * 2 + 0] = stbi__div4(n + input[i - 1]); + out[i * 2 + 1] = stbi__div4(n + input[i + 1]); + } + out[i * 2 + 0] = stbi__div4(input[w - 2] * 3 + input[w - 1] + 2); + out[i * 2 + 1] = input[w - 1]; + + STBI_NOTUSED(in_far); + STBI_NOTUSED(hs); + + return out; +} + +# define stbi__div16(x) ((stbi_uc)((x) >> 4)) + +static stbi_uc* stbi__resample_row_hv_2(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i, t0, t1; + if (w == 1) { + out[0] = out[1] = stbi__div4(3 * in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3 * in_near[0] + in_far[0]; + out[0] = stbi__div4(t1 + 2); + for (i = 1; i < w; ++i) { + t0 = t1; + t1 = 3 * in_near[i] + in_far[i]; + out[i * 2 - 1] = stbi__div16(3 * t0 + t1 + 8); + out[i * 2] = stbi__div16(3 * t1 + t0 + 8); + } + out[w * 2 - 1] = stbi__div4(t1 + 2); + + STBI_NOTUSED(hs); + + return out; +} + +# if defined(STBI_SSE2) || defined(STBI_NEON) +static stbi_uc* stbi__resample_row_hv_2_simd(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i = 0, t0, t1; + + if (w == 1) { + out[0] = out[1] = stbi__div4(3 * in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3 * in_near[0] + in_far[0]; + // process groups of 8 pixels for as long as we can. + // note we can't handle the last pixel in a row in this loop + // because we need to handle the filter boundary conditions. + for (; i < ((w - 1) & ~7); i += 8) { +# if defined(STBI_SSE2) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + __m128i zero = _mm_setzero_si128(); + __m128i farb = _mm_loadl_epi64((__m128i*)(in_far + i)); + __m128i nearb = _mm_loadl_epi64((__m128i*)(in_near + i)); + __m128i farw = _mm_unpacklo_epi8(farb, zero); + __m128i nearw = _mm_unpacklo_epi8(nearb, zero); + __m128i diff = _mm_sub_epi16(farw, nearw); + __m128i nears = _mm_slli_epi16(nearw, 2); + __m128i curr = _mm_add_epi16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + __m128i prv0 = _mm_slli_si128(curr, 2); + __m128i nxt0 = _mm_srli_si128(curr, 2); + __m128i prev = _mm_insert_epi16(prv0, t1, 0); + __m128i next = _mm_insert_epi16(nxt0, 3 * in_near[i + 8] + in_far[i + 8], 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + __m128i bias = _mm_set1_epi16(8); + __m128i curs = _mm_slli_epi16(curr, 2); + __m128i prvd = _mm_sub_epi16(prev, curr); + __m128i nxtd = _mm_sub_epi16(next, curr); + __m128i curb = _mm_add_epi16(curs, bias); + __m128i even = _mm_add_epi16(prvd, curb); + __m128i odd = _mm_add_epi16(nxtd, curb); + + // interleave even and odd pixels, then undo scaling. + __m128i int0 = _mm_unpacklo_epi16(even, odd); + __m128i int1 = _mm_unpackhi_epi16(even, odd); + __m128i de0 = _mm_srli_epi16(int0, 4); + __m128i de1 = _mm_srli_epi16(int1, 4); + + // pack and write output + __m128i outv = _mm_packus_epi16(de0, de1); + _mm_storeu_si128((__m128i*)(out + i * 2), outv); +# elif defined(STBI_NEON) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + uint8x8_t farb = vld1_u8(in_far + i); + uint8x8_t nearb = vld1_u8(in_near + i); + int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); + int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); + int16x8_t curr = vaddq_s16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + int16x8_t prv0 = vextq_s16(curr, curr, 7); + int16x8_t nxt0 = vextq_s16(curr, curr, 1); + int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); + int16x8_t next = vsetq_lane_s16(3 * in_near[i + 8] + in_far[i + 8], nxt0, 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + int16x8_t curs = vshlq_n_s16(curr, 2); + int16x8_t prvd = vsubq_s16(prev, curr); + int16x8_t nxtd = vsubq_s16(next, curr); + int16x8_t even = vaddq_s16(curs, prvd); + int16x8_t odd = vaddq_s16(curs, nxtd); + + // undo scaling and round, then store with even/odd phases interleaved + uint8x8x2_t o; + o.val[0] = vqrshrun_n_s16(even, 4); + o.val[1] = vqrshrun_n_s16(odd, 4); + vst2_u8(out + i * 2, o); +# endif + + // "previous" value for next iter + t1 = 3 * in_near[i + 7] + in_far[i + 7]; + } + + t0 = t1; + t1 = 3 * in_near[i] + in_far[i]; + out[i * 2] = stbi__div16(3 * t1 + t0 + 8); + + for (++i; i < w; ++i) { + t0 = t1; + t1 = 3 * in_near[i] + in_far[i]; + out[i * 2 - 1] = stbi__div16(3 * t0 + t1 + 8); + out[i * 2] = stbi__div16(3 * t1 + t0 + 8); + } + out[w * 2 - 1] = stbi__div4(t1 + 2); + + STBI_NOTUSED(hs); + + return out; +} +# endif + +static stbi_uc* stbi__resample_row_generic(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, int w, int hs) +{ + // resample with nearest-neighbor + int i, j; + STBI_NOTUSED(in_far); + for (i = 0; i < w; ++i) + for (j = 0; j < hs; ++j) + out[i * hs + j] = in_near[i]; + return out; +} + +// this is a reduced-precision calculation of YCbCr-to-RGB introduced +// to make sure the code produces the same results in both SIMD and scalar +# define stbi__float2fixed(x) (((int)((x) * 4096.0f + 0.5f)) << 8) +static void stbi__YCbCr_to_RGB_row(stbi_uc* out, stbi_uc const* y, stbi_uc const* pcb, stbi_uc const* pcr, int count, int step) +{ + int i; + for (i = 0; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1 << 19); // rounding + int r, g, b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr * stbi__float2fixed(1.40200f); + g = y_fixed + (cr * -stbi__float2fixed(0.71414f)) + ((cb * -stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb * stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned)r > 255) { + if (r < 0) + r = 0; + else + r = 255; + } + if ((unsigned)g > 255) { + if (g < 0) + g = 0; + else + g = 255; + } + if ((unsigned)b > 255) { + if (b < 0) + b = 0; + else + b = 255; + } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} + +# if defined(STBI_SSE2) || defined(STBI_NEON) +static void stbi__YCbCr_to_RGB_simd(stbi_uc* out, stbi_uc const* y, stbi_uc const* pcb, stbi_uc const* pcr, int count, int step) +{ + int i = 0; + +# ifdef STBI_SSE2 + // step == 3 is pretty ugly on the final interleave, and i'm not convinced + // it's useful in practice (you wouldn't use it for textures, for example). + // so just accelerate step == 4 case. + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + __m128i signflip = _mm_set1_epi8(-0x80); + __m128i cr_const0 = _mm_set1_epi16((short)(1.40200f * 4096.0f + 0.5f)); + __m128i cr_const1 = _mm_set1_epi16(-(short)(0.71414f * 4096.0f + 0.5f)); + __m128i cb_const0 = _mm_set1_epi16(-(short)(0.34414f * 4096.0f + 0.5f)); + __m128i cb_const1 = _mm_set1_epi16((short)(1.77200f * 4096.0f + 0.5f)); + __m128i y_bias = _mm_set1_epi8((char)(unsigned char)128); + __m128i xw = _mm_set1_epi16(255); // alpha channel + + for (; i + 7 < count; i += 8) { + // load + __m128i y_bytes = _mm_loadl_epi64((__m128i*)(y + i)); + __m128i cr_bytes = _mm_loadl_epi64((__m128i*)(pcr + i)); + __m128i cb_bytes = _mm_loadl_epi64((__m128i*)(pcb + i)); + __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 + __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 + + // unpack to short (and left-shift cr, cb by 8) + __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); + __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); + __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); + + // color transform + __m128i yws = _mm_srli_epi16(yw, 4); + __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); + __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); + __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); + __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); + __m128i rws = _mm_add_epi16(cr0, yws); + __m128i gwt = _mm_add_epi16(cb0, yws); + __m128i bws = _mm_add_epi16(yws, cb1); + __m128i gws = _mm_add_epi16(gwt, cr1); + + // descale + __m128i rw = _mm_srai_epi16(rws, 4); + __m128i bw = _mm_srai_epi16(bws, 4); + __m128i gw = _mm_srai_epi16(gws, 4); + + // back to byte, set up for transpose + __m128i brb = _mm_packus_epi16(rw, bw); + __m128i gxb = _mm_packus_epi16(gw, xw); + + // transpose to interleave channels + __m128i t0 = _mm_unpacklo_epi8(brb, gxb); + __m128i t1 = _mm_unpackhi_epi8(brb, gxb); + __m128i o0 = _mm_unpacklo_epi16(t0, t1); + __m128i o1 = _mm_unpackhi_epi16(t0, t1); + + // store + _mm_storeu_si128((__m128i*)(out + 0), o0); + _mm_storeu_si128((__m128i*)(out + 16), o1); + out += 32; + } + } +# endif + +# ifdef STBI_NEON + // in this version, step=3 support would be easy to add. but is there demand? + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + uint8x8_t signflip = vdup_n_u8(0x80); + int16x8_t cr_const0 = vdupq_n_s16((short)(1.40200f * 4096.0f + 0.5f)); + int16x8_t cr_const1 = vdupq_n_s16(-(short)(0.71414f * 4096.0f + 0.5f)); + int16x8_t cb_const0 = vdupq_n_s16(-(short)(0.34414f * 4096.0f + 0.5f)); + int16x8_t cb_const1 = vdupq_n_s16((short)(1.77200f * 4096.0f + 0.5f)); + + for (; i + 7 < count; i += 8) { + // load + uint8x8_t y_bytes = vld1_u8(y + i); + uint8x8_t cr_bytes = vld1_u8(pcr + i); + uint8x8_t cb_bytes = vld1_u8(pcb + i); + int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); + int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); + + // expand to s16 + int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); + int16x8_t crw = vshll_n_s8(cr_biased, 7); + int16x8_t cbw = vshll_n_s8(cb_biased, 7); + + // color transform + int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); + int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); + int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); + int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); + int16x8_t rws = vaddq_s16(yws, cr0); + int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); + int16x8_t bws = vaddq_s16(yws, cb1); + + // undo scaling, round, convert to byte + uint8x8x4_t o; + o.val[0] = vqrshrun_n_s16(rws, 4); + o.val[1] = vqrshrun_n_s16(gws, 4); + o.val[2] = vqrshrun_n_s16(bws, 4); + o.val[3] = vdup_n_u8(255); + + // store, interleaving r/g/b/a + vst4_u8(out, o); + out += 8 * 4; + } + } +# endif + + for (; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1 << 19); // rounding + int r, g, b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr * stbi__float2fixed(1.40200f); + g = y_fixed + cr * -stbi__float2fixed(0.71414f) + ((cb * -stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb * stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned)r > 255) { + if (r < 0) + r = 0; + else + r = 255; + } + if ((unsigned)g > 255) { + if (g < 0) + g = 0; + else + g = 255; + } + if ((unsigned)b > 255) { + if (b < 0) + b = 0; + else + b = 255; + } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} +# endif + +// set up the kernels +static void stbi__setup_jpeg(stbi__jpeg* j) +{ + j->idct_block_kernel = stbi__idct_block; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; + +# ifdef STBI_SSE2 + if (stbi__sse2_available()) { + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; + } +# endif + +# ifdef STBI_NEON + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; +# endif +} + +// clean up the temporary component buffers +static void stbi__cleanup_jpeg(stbi__jpeg* j) +{ + stbi__free_jpeg_components(j, j->s->img_n, 0); +} + +typedef struct +{ + resample_row_func resample; + stbi_uc *line0, *line1; + int hs, vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on +} stbi__resample; + +// fast 0..255 * 0..255 => 0..255 rounded multiplication +static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y) +{ + unsigned int t = x * y + 128; + return (stbi_uc)((t + (t >> 8)) >> 8); +} + +static stbi_uc* load_jpeg_image(stbi__jpeg* z, int* out_x, int* out_y, int* comp, int req_comp) +{ + int n, decode_n, is_rgb; + z->s->img_n = 0; // make stbi__cleanup_jpeg safe + + // validate req_comp + if (req_comp < 0 || req_comp > 4) + return stbi__errpuc("bad req_comp", "Internal error"); + + // load a jpeg image from whichever source, but leave in YCbCr format + if (!stbi__decode_jpeg_image(z)) { + stbi__cleanup_jpeg(z); + return NULL; + } + + // determine actual number of components to generate + n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 + : 1; + + is_rgb = z->s->img_n == 3 && (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); + + if (z->s->img_n == 3 && n < 3 && !is_rgb) + decode_n = 1; + else + decode_n = z->s->img_n; + + // nothing to do if no components requested; check this now to avoid + // accessing uninitialized coutput[0] later + if (decode_n <= 0) { + stbi__cleanup_jpeg(z); + return NULL; + } + + // resample and color-convert + { + int k; + unsigned int i, j; + stbi_uc* output; + stbi_uc* coutput[4] = { NULL, NULL, NULL, NULL }; + + stbi__resample res_comp[4]; + + for (k = 0; k < decode_n; ++k) { + stbi__resample* r = &res_comp[k]; + + // allocate line buffer big enough for upsampling off the edges + // with upsample factor of 4 + z->img_comp[k].linebuf = (stbi_uc*)stbi__malloc(z->s->img_x + 3); + if (!z->img_comp[k].linebuf) { + stbi__cleanup_jpeg(z); + return stbi__errpuc("outofmem", "Out of memory"); + } + + r->hs = z->img_h_max / z->img_comp[k].h; + r->vs = z->img_v_max / z->img_comp[k].v; + r->ystep = r->vs >> 1; + r->w_lores = (z->s->img_x + r->hs - 1) / r->hs; + r->ypos = 0; + r->line0 = r->line1 = z->img_comp[k].data; + + if (r->hs == 1 && r->vs == 1) + r->resample = resample_row_1; + else if (r->hs == 1 && r->vs == 2) + r->resample = stbi__resample_row_v_2; + else if (r->hs == 2 && r->vs == 1) + r->resample = stbi__resample_row_h_2; + else if (r->hs == 2 && r->vs == 2) + r->resample = z->resample_row_hv_2_kernel; + else + r->resample = stbi__resample_row_generic; + } + + // can't error after this so, this is safe + output = (stbi_uc*)stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1); + if (!output) { + stbi__cleanup_jpeg(z); + return stbi__errpuc("outofmem", "Out of memory"); + } + + // now go ahead and resample + for (j = 0; j < z->s->img_y; ++j) { + stbi_uc* out = output + n * z->s->img_x * j; + for (k = 0; k < decode_n; ++k) { + stbi__resample* r = &res_comp[k]; + int y_bot = r->ystep >= (r->vs >> 1); + coutput[k] = r->resample(z->img_comp[k].linebuf, + y_bot ? r->line1 : r->line0, + y_bot ? r->line0 : r->line1, + r->w_lores, r->hs); + if (++r->ystep >= r->vs) { + r->ystep = 0; + r->line0 = r->line1; + if (++r->ypos < z->img_comp[k].y) + r->line1 += z->img_comp[k].w2; + } + } + if (n >= 3) { + stbi_uc* y = coutput[0]; + if (z->s->img_n == 3) { + if (is_rgb) { + for (i = 0; i < z->s->img_x; ++i) { + out[0] = y[i]; + out[1] = coutput[1][i]; + out[2] = coutput[2][i]; + out[3] = 255; + out += n; + } + } else { + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } + } else if (z->s->img_n == 4) { + if (z->app14_color_transform == 0) { // CMYK + for (i = 0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(coutput[0][i], m); + out[1] = stbi__blinn_8x8(coutput[1][i], m); + out[2] = stbi__blinn_8x8(coutput[2][i], m); + out[3] = 255; + out += n; + } + } else if (z->app14_color_transform == 2) { // YCCK + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + for (i = 0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(255 - out[0], m); + out[1] = stbi__blinn_8x8(255 - out[1], m); + out[2] = stbi__blinn_8x8(255 - out[2], m); + out += n; + } + } else { // YCbCr + alpha? Ignore the fourth channel for now + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } + } else + for (i = 0; i < z->s->img_x; ++i) { + out[0] = out[1] = out[2] = y[i]; + out[3] = 255; // not used if n==3 + out += n; + } + } else { + if (is_rgb) { + if (n == 1) + for (i = 0; i < z->s->img_x; ++i) + *out++ = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + else { + for (i = 0; i < z->s->img_x; ++i, out += 2) { + out[0] = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + out[1] = 255; + } + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 0) { + for (i = 0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + stbi_uc r = stbi__blinn_8x8(coutput[0][i], m); + stbi_uc g = stbi__blinn_8x8(coutput[1][i], m); + stbi_uc b = stbi__blinn_8x8(coutput[2][i], m); + out[0] = stbi__compute_y(r, g, b); + out[1] = 255; + out += n; + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 2) { + for (i = 0; i < z->s->img_x; ++i) { + out[0] = stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]); + out[1] = 255; + out += n; + } + } else { + stbi_uc* y = coutput[0]; + if (n == 1) + for (i = 0; i < z->s->img_x; ++i) + out[i] = y[i]; + else + for (i = 0; i < z->s->img_x; ++i) { + *out++ = y[i]; + *out++ = 255; + } + } + } + } + stbi__cleanup_jpeg(z); + *out_x = z->s->img_x; + *out_y = z->s->img_y; + if (comp) + *comp = z->s->img_n >= 3 ? 3 : 1; // report original components, not output + return output; + } +} + +static void* stbi__jpeg_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) +{ + unsigned char* result; + stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); + if (!j) + return stbi__errpuc("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + STBI_NOTUSED(ri); + j->s = s; + stbi__setup_jpeg(j); + result = load_jpeg_image(j, x, y, comp, req_comp); + STBI_FREE(j); + return result; +} + +static int stbi__jpeg_test(stbi__context* s) +{ + int r; + stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); + if (!j) + return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + j->s = s; + stbi__setup_jpeg(j); + r = stbi__decode_jpeg_header(j, STBI__SCAN_type); + stbi__rewind(s); + STBI_FREE(j); + return r; +} + +static int stbi__jpeg_info_raw(stbi__jpeg* j, int* x, int* y, int* comp) +{ + if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { + stbi__rewind(j->s); + return 0; + } + if (x) + *x = j->s->img_x; + if (y) + *y = j->s->img_y; + if (comp) + *comp = j->s->img_n >= 3 ? 3 : 1; + return 1; +} + +static int stbi__jpeg_info(stbi__context* s, int* x, int* y, int* comp) +{ + int result; + stbi__jpeg* j = (stbi__jpeg*)(stbi__malloc(sizeof(stbi__jpeg))); + if (!j) + return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + j->s = s; + result = stbi__jpeg_info_raw(j, x, y, comp); + STBI_FREE(j); + return result; +} +# endif + +// public domain zlib decode v0.2 Sean Barrett 2006-11-18 +// simple implementation +// - all input must be provided in an upfront buffer +// - all output is written to a single output buffer (can malloc/realloc) +// performance +// - fast huffman + +# ifndef STBI_NO_ZLIB + +// fast-way is faster to check than jpeg huffman, but slow way is slower +# define STBI__ZFAST_BITS 9 // accelerate all cases in default tables +# define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) +# define STBI__ZNSYMS 288 // number of symbols in literal/length alphabet + +// zlib-style huffman encoding +// (jpegs packs from left, zlib from right, so can't share code) +typedef struct +{ + stbi__uint16 fast[1 << STBI__ZFAST_BITS]; + stbi__uint16 firstcode[16]; + int maxcode[17]; + stbi__uint16 firstsymbol[16]; + stbi_uc size[STBI__ZNSYMS]; + stbi__uint16 value[STBI__ZNSYMS]; +} stbi__zhuffman; + +stbi_inline static int stbi__bitreverse16(int n) +{ + n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); + n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); + n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); + n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); + return n; +} + +stbi_inline static int stbi__bit_reverse(int v, int bits) +{ + STBI_ASSERT(bits <= 16); + // to bit reverse n bits, reverse 16 and shift + // e.g. 11 bits, bit reverse and shift away 5 + return stbi__bitreverse16(v) >> (16 - bits); +} + +static int stbi__zbuild_huffman(stbi__zhuffman* z, stbi_uc const* sizelist, int num) +{ + int i, k = 0; + int code, next_code[16], sizes[17]; + + // DEFLATE spec for generating codes + memset(sizes, 0, sizeof(sizes)); + memset(z->fast, 0, sizeof(z->fast)); + for (i = 0; i < num; ++i) + ++sizes[sizelist[i]]; + sizes[0] = 0; + for (i = 1; i < 16; ++i) + if (sizes[i] > (1 << i)) + return stbi__err("bad sizes", "Corrupt PNG"); + code = 0; + for (i = 1; i < 16; ++i) { + next_code[i] = code; + z->firstcode[i] = (stbi__uint16)code; + z->firstsymbol[i] = (stbi__uint16)k; + code = (code + sizes[i]); + if (sizes[i]) + if (code - 1 >= (1 << i)) + return stbi__err("bad codelengths", "Corrupt PNG"); + z->maxcode[i] = code << (16 - i); // preshift for inner loop + code <<= 1; + k += sizes[i]; + } + z->maxcode[16] = 0x10000; // sentinel + for (i = 0; i < num; ++i) { + int s = sizelist[i]; + if (s) { + int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; + stbi__uint16 fastv = (stbi__uint16)((s << 9) | i); + z->size[c] = (stbi_uc)s; + z->value[c] = (stbi__uint16)i; + if (s <= STBI__ZFAST_BITS) { + int j = stbi__bit_reverse(next_code[s], s); + while (j < (1 << STBI__ZFAST_BITS)) { + z->fast[j] = fastv; + j += (1 << s); + } + } + ++next_code[s]; + } + } + return 1; +} + +// zlib-from-memory implementation for PNG reading +// because PNG allows splitting the zlib stream arbitrarily, +// and it's annoying structurally to have PNG call ZLIB call PNG, +// we require PNG read all the IDATs and combine them into a single +// memory buffer + +typedef struct +{ + stbi_uc *zbuffer, *zbuffer_end; + int num_bits; + int hit_zeof_once; + stbi__uint32 code_buffer; + + char* zout; + char* zout_start; + char* zout_end; + int z_expandable; + + stbi__zhuffman z_length, z_distance; +} stbi__zbuf; + +stbi_inline static int stbi__zeof(stbi__zbuf* z) +{ + return (z->zbuffer >= z->zbuffer_end); +} + +stbi_inline static stbi_uc stbi__zget8(stbi__zbuf* z) +{ + return stbi__zeof(z) ? 0 : *z->zbuffer++; +} + +static void stbi__fill_bits(stbi__zbuf* z) +{ + do { + if (z->code_buffer >= (1U << z->num_bits)) { + z->zbuffer = z->zbuffer_end; /* treat this as EOF so we fail. */ + return; + } + z->code_buffer |= (unsigned int)stbi__zget8(z) << z->num_bits; + z->num_bits += 8; + } while (z->num_bits <= 24); +} + +stbi_inline static unsigned int stbi__zreceive(stbi__zbuf* z, int n) +{ + unsigned int k; + if (z->num_bits < n) + stbi__fill_bits(z); + k = z->code_buffer & ((1 << n) - 1); + z->code_buffer >>= n; + z->num_bits -= n; + return k; +} + +static int stbi__zhuffman_decode_slowpath(stbi__zbuf* a, stbi__zhuffman* z) +{ + int b, s, k; + // not resolved by fast table, so compute it the slow way + // use jpeg approach, which requires MSbits at top + k = stbi__bit_reverse(a->code_buffer, 16); + for (s = STBI__ZFAST_BITS + 1;; ++s) + if (k < z->maxcode[s]) + break; + if (s >= 16) + return -1; // invalid code! + // code size is s, so: + b = (k >> (16 - s)) - z->firstcode[s] + z->firstsymbol[s]; + if (b >= STBI__ZNSYMS) + return -1; // some data was corrupt somewhere! + if (z->size[b] != s) + return -1; // was originally an assert, but report failure instead. + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; +} + +stbi_inline static int stbi__zhuffman_decode(stbi__zbuf* a, stbi__zhuffman* z) +{ + int b, s; + if (a->num_bits < 16) { + if (stbi__zeof(a)) { + if (!a->hit_zeof_once) { + // This is the first time we hit eof, insert 16 extra padding btis + // to allow us to keep going; if we actually consume any of them + // though, that is invalid data. This is caught later. + a->hit_zeof_once = 1; + a->num_bits += 16; // add 16 implicit zero bits + } else { + // We already inserted our extra 16 padding bits and are again + // out, this stream is actually prematurely terminated. + return -1; + } + } else { + stbi__fill_bits(a); + } + } + b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; + if (b) { + s = b >> 9; + a->code_buffer >>= s; + a->num_bits -= s; + return b & 511; + } + return stbi__zhuffman_decode_slowpath(a, z); +} + +static int stbi__zexpand(stbi__zbuf* z, char* zout, int n) // need to make room for n bytes +{ + char* q; + unsigned int cur, limit, old_limit; + z->zout = zout; + if (!z->z_expandable) + return stbi__err("output buffer limit", "Corrupt PNG"); + cur = (unsigned int)(z->zout - z->zout_start); + limit = old_limit = (unsigned)(z->zout_end - z->zout_start); + if (UINT_MAX - cur < (unsigned)n) + return stbi__err("outofmem", "Out of memory"); + while (cur + n > limit) { + if (limit > UINT_MAX / 2) + return stbi__err("outofmem", "Out of memory"); + limit *= 2; + } + q = (char*)STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); + STBI_NOTUSED(old_limit); + if (q == NULL) + return stbi__err("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; +} + +static int const stbi__zlength_base[31] = { + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, + 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, + 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 +}; + +static int const stbi__zlength_extra[31] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0 }; + +static int const stbi__zdist_base[32] = { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0 }; + +static int const stbi__zdist_extra[32] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; + +static int stbi__parse_huffman_block(stbi__zbuf* a) +{ + char* zout = a->zout; + for (;;) { + int z = stbi__zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) + return stbi__err("bad huffman code", "Corrupt PNG"); // error in huffman codes + if (zout >= a->zout_end) { + if (!stbi__zexpand(a, zout, 1)) + return 0; + zout = a->zout; + } + *zout++ = (char)z; + } else { + stbi_uc* p; + int len, dist; + if (z == 256) { + a->zout = zout; + if (a->hit_zeof_once && a->num_bits < 16) { + // The first time we hit zeof, we inserted 16 extra zero bits into our bit + // buffer so the decoder can just do its speculative decoding. But if we + // actually consumed any of those bits (which is the case when num_bits < 16), + // the stream actually read past the end so it is malformed. + return stbi__err("unexpected end", "Corrupt PNG"); + } + return 1; + } + if (z >= 286) + return stbi__err("bad huffman code", "Corrupt PNG"); // per DEFLATE, length codes 286 and 287 must not appear in compressed data + z -= 257; + len = stbi__zlength_base[z]; + if (stbi__zlength_extra[z]) + len += stbi__zreceive(a, stbi__zlength_extra[z]); + z = stbi__zhuffman_decode(a, &a->z_distance); + if (z < 0 || z >= 30) + return stbi__err("bad huffman code", "Corrupt PNG"); // per DEFLATE, distance codes 30 and 31 must not appear in compressed data + dist = stbi__zdist_base[z]; + if (stbi__zdist_extra[z]) + dist += stbi__zreceive(a, stbi__zdist_extra[z]); + if (zout - a->zout_start < dist) + return stbi__err("bad dist", "Corrupt PNG"); + if (len > a->zout_end - zout) { + if (!stbi__zexpand(a, zout, len)) + return 0; + zout = a->zout; + } + p = (stbi_uc*)(zout - dist); + if (dist == 1) { // run of one byte; common in images. + stbi_uc v = *p; + if (len) { + do + *zout++ = v; + while (--len); + } + } else { + if (len) { + do + *zout++ = *p++; + while (--len); + } + } + } + } +} + +static int stbi__compute_huffman_codes(stbi__zbuf* a) +{ + static stbi_uc const length_dezigzag[19] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; + stbi__zhuffman z_codelength; + stbi_uc lencodes[286 + 32 + 137]; // padding for maximum single op + stbi_uc codelength_sizes[19]; + int i, n; + + int hlit = stbi__zreceive(a, 5) + 257; + int hdist = stbi__zreceive(a, 5) + 1; + int hclen = stbi__zreceive(a, 4) + 4; + int ntot = hlit + hdist; + + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i = 0; i < hclen; ++i) { + int s = stbi__zreceive(a, 3); + codelength_sizes[length_dezigzag[i]] = (stbi_uc)s; + } + if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) + return 0; + + n = 0; + while (n < ntot) { + int c = stbi__zhuffman_decode(a, &z_codelength); + if (c < 0 || c >= 19) + return stbi__err("bad codelengths", "Corrupt PNG"); + if (c < 16) + lencodes[n++] = (stbi_uc)c; + else { + stbi_uc fill = 0; + if (c == 16) { + c = stbi__zreceive(a, 2) + 3; + if (n == 0) + return stbi__err("bad codelengths", "Corrupt PNG"); + fill = lencodes[n - 1]; + } else if (c == 17) { + c = stbi__zreceive(a, 3) + 3; + } else if (c == 18) { + c = stbi__zreceive(a, 7) + 11; + } else { + return stbi__err("bad codelengths", "Corrupt PNG"); + } + if (ntot - n < c) + return stbi__err("bad codelengths", "Corrupt PNG"); + memset(lencodes + n, fill, c); + n += c; + } + } + if (n != ntot) + return stbi__err("bad codelengths", "Corrupt PNG"); + if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) + return 0; + if (!stbi__zbuild_huffman(&a->z_distance, lencodes + hlit, hdist)) + return 0; + return 1; +} + +static int stbi__parse_uncompressed_block(stbi__zbuf* a) +{ + stbi_uc header[4]; + int len, nlen, k; + if (a->num_bits & 7) + stbi__zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = (stbi_uc)(a->code_buffer & 255); // suppress MSVC run-time check + a->code_buffer >>= 8; + a->num_bits -= 8; + } + if (a->num_bits < 0) + return stbi__err("zlib corrupt", "Corrupt PNG"); + // now fill header the normal way + while (k < 4) + header[k++] = stbi__zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) + return stbi__err("zlib corrupt", "Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) + return stbi__err("read past buffer", "Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!stbi__zexpand(a, a->zout, len)) + return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; +} + +static int stbi__parse_zlib_header(stbi__zbuf* a) +{ + int cmf = stbi__zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = stbi__zget8(a); + if (stbi__zeof(a)) + return stbi__err("bad zlib header", "Corrupt PNG"); // zlib spec + if ((cmf * 256 + flg) % 31 != 0) + return stbi__err("bad zlib header", "Corrupt PNG"); // zlib spec + if (flg & 32) + return stbi__err("no preset dict", "Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) + return stbi__err("bad compression", "Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; +} + +static stbi_uc const stbi__zdefault_length[STBI__ZNSYMS] = { + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8 +}; +static stbi_uc const stbi__zdefault_distance[32] = { + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 +}; +/* +Init algorithm: +{ + int i; // use <= to match clearly with spec + for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; + for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; + for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; + for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; + + for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; +} +*/ + +static int stbi__parse_zlib(stbi__zbuf* a, int parse_header) +{ + int final, type; + if (parse_header) + if (!stbi__parse_zlib_header(a)) + return 0; + a->num_bits = 0; + a->code_buffer = 0; + a->hit_zeof_once = 0; + do { + final = stbi__zreceive(a, 1); + type = stbi__zreceive(a, 2); + if (type == 0) { + if (!stbi__parse_uncompressed_block(a)) + return 0; + } else if (type == 3) { + return 0; + } else { + if (type == 1) { + // use fixed code lengths + if (!stbi__zbuild_huffman(&a->z_length, stbi__zdefault_length, STBI__ZNSYMS)) + return 0; + if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) + return 0; + } else { + if (!stbi__compute_huffman_codes(a)) + return 0; + } + if (!stbi__parse_huffman_block(a)) + return 0; + } + } while (!final); + return 1; +} + +static int stbi__do_zlib(stbi__zbuf* a, char* obuf, int olen, int exp, int parse_header) +{ + a->zout_start = obuf; + a->zout = obuf; + a->zout_end = obuf + olen; + a->z_expandable = exp; + + return stbi__parse_zlib(a, parse_header); +} + +STBIDEF char* stbi_zlib_decode_malloc_guesssize(char const* buffer, int len, int initial_size, int* outlen) +{ + stbi__zbuf a; + char* p = (char*)stbi__malloc(initial_size); + if (p == NULL) + return NULL; + a.zbuffer = (stbi_uc*)buffer; + a.zbuffer_end = (stbi_uc*)buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { + if (outlen) + *outlen = (int)(a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF char* stbi_zlib_decode_malloc(char const* buffer, int len, int* outlen) +{ + return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); +} + +STBIDEF char* stbi_zlib_decode_malloc_guesssize_headerflag(char const* buffer, int len, int initial_size, int* outlen, int parse_header) +{ + stbi__zbuf a; + char* p = (char*)stbi__malloc(initial_size); + if (p == NULL) + return NULL; + a.zbuffer = (stbi_uc*)buffer; + a.zbuffer_end = (stbi_uc*)buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { + if (outlen) + *outlen = (int)(a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_buffer(char* obuffer, int olen, char const* ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc*)ibuffer; + a.zbuffer_end = (stbi_uc*)ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) + return (int)(a.zout - a.zout_start); + else + return -1; +} + +STBIDEF char* stbi_zlib_decode_noheader_malloc(char const* buffer, int len, int* outlen) +{ + stbi__zbuf a; + char* p = (char*)stbi__malloc(16384); + if (p == NULL) + return NULL; + a.zbuffer = (stbi_uc*)buffer; + a.zbuffer_end = (stbi_uc*)buffer + len; + if (stbi__do_zlib(&a, p, 16384, 1, 0)) { + if (outlen) + *outlen = (int)(a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_noheader_buffer(char* obuffer, int olen, char const* ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc*)ibuffer; + a.zbuffer_end = (stbi_uc*)ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) + return (int)(a.zout - a.zout_start); + else + return -1; +} +# endif + +// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 +// simple implementation +// - only 8-bit samples +// - no CRC checking +// - allocates lots of intermediate memory +// - avoids problem of streaming data between subsystems +// - avoids explicit window management +// performance +// - uses stb_zlib, a PD zlib implementation with fast huffman decoding + +# ifndef STBI_NO_PNG +typedef struct +{ + stbi__uint32 length; + stbi__uint32 type; +} stbi__pngchunk; + +static stbi__pngchunk stbi__get_chunk_header(stbi__context* s) +{ + stbi__pngchunk c; + c.length = stbi__get32be(s); + c.type = stbi__get32be(s); + return c; +} + +static int stbi__check_png_header(stbi__context* s) +{ + static stbi_uc const png_sig[8] = { 137, 80, 78, 71, 13, 10, 26, 10 }; + int i; + for (i = 0; i < 8; ++i) + if (stbi__get8(s) != png_sig[i]) + return stbi__err("bad png sig", "Not a PNG"); + return 1; +} + +typedef struct +{ + stbi__context* s; + stbi_uc *idata, *expanded, *out; + int depth; +} stbi__png; + +enum { + STBI__F_none = 0, + STBI__F_sub = 1, + STBI__F_up = 2, + STBI__F_avg = 3, + STBI__F_paeth = 4, + // synthetic filter used for first scanline to avoid needing a dummy row of 0s + STBI__F_avg_first +}; + +static stbi_uc first_row_filter[5] = { + STBI__F_none, + STBI__F_sub, + STBI__F_none, + STBI__F_avg_first, + STBI__F_sub // Paeth with b=c=0 turns out to be equivalent to sub +}; + +static int stbi__paeth(int a, int b, int c) +{ + // This formulation looks very different from the reference in the PNG spec, but is + // actually equivalent and has favorable data dependencies and admits straightforward + // generation of branch-free code, which helps performance significantly. + int thresh = c * 3 - (a + b); + int lo = a < b ? a : b; + int hi = a < b ? b : a; + int t0 = (hi <= thresh) ? lo : c; + int t1 = (thresh <= lo) ? hi : t0; + return t1; +} + +static stbi_uc const stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0, 0, 0, 0x01 }; + +// adds an extra all-255 alpha channel +// dest == src is legal +// img_n must be 1 or 3 +static void stbi__create_png_alpha_expand8(stbi_uc* dest, stbi_uc* src, stbi__uint32 x, int img_n) +{ + int i; + // must process data backwards since we allow dest==src + if (img_n == 1) { + for (i = x - 1; i >= 0; --i) { + dest[i * 2 + 1] = 255; + dest[i * 2 + 0] = src[i]; + } + } else { + STBI_ASSERT(img_n == 3); + for (i = x - 1; i >= 0; --i) { + dest[i * 4 + 3] = 255; + dest[i * 4 + 2] = src[i * 3 + 2]; + dest[i * 4 + 1] = src[i * 3 + 1]; + dest[i * 4 + 0] = src[i * 3 + 0]; + } + } +} + +// create the png data from post-deflated data +static int stbi__create_png_image_raw(stbi__png* a, stbi_uc* raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) +{ + int bytes = (depth == 16 ? 2 : 1); + stbi__context* s = a->s; + stbi__uint32 i, j, stride = x * out_n * bytes; + stbi__uint32 img_len, img_width_bytes; + stbi_uc* filter_buf; + int all_ok = 1; + int k; + int img_n = s->img_n; // copy it into a local for later + + int output_bytes = out_n * bytes; + int filter_bytes = img_n * bytes; + int width = x; + + STBI_ASSERT(out_n == s->img_n || out_n == s->img_n + 1); + a->out = (stbi_uc*)stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into + if (!a->out) + return stbi__err("outofmem", "Out of memory"); + + // note: error exits here don't need to clean up a->out individually, + // stbi__do_png always does on error. + if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) + return stbi__err("too large", "Corrupt PNG"); + img_width_bytes = (((img_n * x * depth) + 7) >> 3); + if (!stbi__mad2sizes_valid(img_width_bytes, y, img_width_bytes)) + return stbi__err("too large", "Corrupt PNG"); + img_len = (img_width_bytes + 1) * y; + + // we used to check for exact match between raw_len and img_len on non-interlaced PNGs, + // but issue #276 reported a PNG in the wild that had extra data at the end (all zeros), + // so just check for raw_len < img_len always. + if (raw_len < img_len) + return stbi__err("not enough pixels", "Corrupt PNG"); + + // Allocate two scan lines worth of filter workspace buffer. + filter_buf = (stbi_uc*)stbi__malloc_mad2(img_width_bytes, 2, 0); + if (!filter_buf) + return stbi__err("outofmem", "Out of memory"); + + // Filtering for low-bit-depth images + if (depth < 8) { + filter_bytes = 1; + width = img_width_bytes; + } + + for (j = 0; j < y; ++j) { + // cur/prior filter buffers alternate + stbi_uc* cur = filter_buf + (j & 1) * img_width_bytes; + stbi_uc* prior = filter_buf + (~j & 1) * img_width_bytes; + stbi_uc* dest = a->out + stride * j; + int nk = width * filter_bytes; + int filter = *raw++; + + // check filter type + if (filter > 4) { + all_ok = stbi__err("invalid filter", "Corrupt PNG"); + break; + } + + // if first row, use special filter that doesn't sample previous row + if (j == 0) + filter = first_row_filter[filter]; + + // perform actual filtering + switch (filter) { + case STBI__F_none: + memcpy(cur, raw, nk); + break; + case STBI__F_sub: + memcpy(cur, raw, filter_bytes); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + cur[k - filter_bytes]); + break; + case STBI__F_up: + for (k = 0; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + prior[k]); + break; + case STBI__F_avg: + for (k = 0; k < filter_bytes; ++k) + cur[k] = STBI__BYTECAST(raw[k] + (prior[k] >> 1)); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k - filter_bytes]) >> 1)); + break; + case STBI__F_paeth: + for (k = 0; k < filter_bytes; ++k) + cur[k] = STBI__BYTECAST(raw[k] + prior[k]); // prior[k] == stbi__paeth(0,prior[k],0) + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k - filter_bytes], prior[k], prior[k - filter_bytes])); + break; + case STBI__F_avg_first: + memcpy(cur, raw, filter_bytes); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + (cur[k - filter_bytes] >> 1)); + break; + } + + raw += nk; + + // expand decoded bits in cur to dest, also adding an extra alpha channel if desired + if (depth < 8) { + stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range + stbi_uc* in = cur; + stbi_uc* out = dest; + stbi_uc inb = 0; + stbi__uint32 nsmp = x * img_n; + + // expand bits to bytes first + if (depth == 4) { + for (i = 0; i < nsmp; ++i) { + if ((i & 1) == 0) + inb = *in++; + *out++ = scale * (inb >> 4); + inb <<= 4; + } + } else if (depth == 2) { + for (i = 0; i < nsmp; ++i) { + if ((i & 3) == 0) + inb = *in++; + *out++ = scale * (inb >> 6); + inb <<= 2; + } + } else { + STBI_ASSERT(depth == 1); + for (i = 0; i < nsmp; ++i) { + if ((i & 7) == 0) + inb = *in++; + *out++ = scale * (inb >> 7); + inb <<= 1; + } + } + + // insert alpha=255 values if desired + if (img_n != out_n) + stbi__create_png_alpha_expand8(dest, dest, x, img_n); + } else if (depth == 8) { + if (img_n == out_n) + memcpy(dest, cur, x * img_n); + else + stbi__create_png_alpha_expand8(dest, cur, x, img_n); + } else if (depth == 16) { + // convert the image data from big-endian to platform-native + stbi__uint16* dest16 = (stbi__uint16*)dest; + stbi__uint32 nsmp = x * img_n; + + if (img_n == out_n) { + for (i = 0; i < nsmp; ++i, ++dest16, cur += 2) + *dest16 = (cur[0] << 8) | cur[1]; + } else { + STBI_ASSERT(img_n + 1 == out_n); + if (img_n == 1) { + for (i = 0; i < x; ++i, dest16 += 2, cur += 2) { + dest16[0] = (cur[0] << 8) | cur[1]; + dest16[1] = 0xffff; + } + } else { + STBI_ASSERT(img_n == 3); + for (i = 0; i < x; ++i, dest16 += 4, cur += 6) { + dest16[0] = (cur[0] << 8) | cur[1]; + dest16[1] = (cur[2] << 8) | cur[3]; + dest16[2] = (cur[4] << 8) | cur[5]; + dest16[3] = 0xffff; + } + } + } + } + } + + STBI_FREE(filter_buf); + if (!all_ok) + return 0; + + return 1; +} + +static int stbi__create_png_image(stbi__png* a, stbi_uc* image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced) +{ + int bytes = (depth == 16 ? 2 : 1); + int out_bytes = out_n * bytes; + stbi_uc* final; + int p; + if (!interlaced) + return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color); + + // de-interlacing + final = (stbi_uc*)stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0); + if (!final) + return stbi__err("outofmem", "Out of memory"); + for (p = 0; p < 7; ++p) { + int xorig[] = { 0, 4, 0, 2, 0, 1, 0 }; + int yorig[] = { 0, 0, 4, 0, 2, 0, 1 }; + int xspc[] = { 8, 8, 4, 4, 2, 2, 1 }; + int yspc[] = { 8, 8, 8, 4, 4, 2, 2 }; + int i, j, x, y; + // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 + x = (a->s->img_x - xorig[p] + xspc[p] - 1) / xspc[p]; + y = (a->s->img_y - yorig[p] + yspc[p] - 1) / yspc[p]; + if (x && y) { + stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; + if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) { + STBI_FREE(final); + return 0; + } + for (j = 0; j < y; ++j) { + for (i = 0; i < x; ++i) { + int out_y = j * yspc[p] + yorig[p]; + int out_x = i * xspc[p] + xorig[p]; + memcpy(final + out_y * a->s->img_x * out_bytes + out_x * out_bytes, + a->out + (j * x + i) * out_bytes, out_bytes); + } + } + STBI_FREE(a->out); + image_data += img_len; + image_data_len -= img_len; + } + } + a->out = final; + + return 1; +} + +static int stbi__compute_transparency(stbi__png* z, stbi_uc tc[3], int out_n) +{ + stbi__context* s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc* p = z->out; + + // compute color-based transparency, assuming we've + // already got 255 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 255); + p += 2; + } + } else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__compute_transparency16(stbi__png* z, stbi__uint16 tc[3], int out_n) +{ + stbi__context* s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi__uint16* p = (stbi__uint16*)z->out; + + // compute color-based transparency, assuming we've + // already got 65535 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 65535); + p += 2; + } + } else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__expand_png_palette(stbi__png* a, stbi_uc* palette, int len, int pal_img_n) +{ + stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; + stbi_uc *p, *temp_out, *orig = a->out; + + p = (stbi_uc*)stbi__malloc_mad2(pixel_count, pal_img_n, 0); + if (p == NULL) + return stbi__err("outofmem", "Out of memory"); + + // between here and free(out) below, exitting would leak + temp_out = p; + + if (pal_img_n == 3) { + for (i = 0; i < pixel_count; ++i) { + int n = orig[i] * 4; + p[0] = palette[n]; + p[1] = palette[n + 1]; + p[2] = palette[n + 2]; + p += 3; + } + } else { + for (i = 0; i < pixel_count; ++i) { + int n = orig[i] * 4; + p[0] = palette[n]; + p[1] = palette[n + 1]; + p[2] = palette[n + 2]; + p[3] = palette[n + 3]; + p += 4; + } + } + STBI_FREE(a->out); + a->out = temp_out; + + STBI_NOTUSED(len); + + return 1; +} + +static int stbi__unpremultiply_on_load_global = 0; +static int stbi__de_iphone_flag_global = 0; + +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load_global = flag_true_if_should_unpremultiply; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag_global = flag_true_if_should_convert; +} + +# ifndef STBI_THREAD_LOCAL +# define stbi__unpremultiply_on_load stbi__unpremultiply_on_load_global +# define stbi__de_iphone_flag stbi__de_iphone_flag_global +# else +static STBI_THREAD_LOCAL int stbi__unpremultiply_on_load_local, stbi__unpremultiply_on_load_set; +static STBI_THREAD_LOCAL int stbi__de_iphone_flag_local, stbi__de_iphone_flag_set; + +STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load_local = flag_true_if_should_unpremultiply; + stbi__unpremultiply_on_load_set = 1; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag_local = flag_true_if_should_convert; + stbi__de_iphone_flag_set = 1; +} + +# define stbi__unpremultiply_on_load (stbi__unpremultiply_on_load_set \ + ? stbi__unpremultiply_on_load_local \ + : stbi__unpremultiply_on_load_global) +# define stbi__de_iphone_flag (stbi__de_iphone_flag_set \ + ? stbi__de_iphone_flag_local \ + : stbi__de_iphone_flag_global) +# endif // STBI_THREAD_LOCAL + +static void stbi__de_iphone(stbi__png* z) +{ + stbi__context* s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc* p = z->out; + + if (s->img_out_n == 3) { // convert bgr to rgb + for (i = 0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 3; + } + } else { + STBI_ASSERT(s->img_out_n == 4); + if (stbi__unpremultiply_on_load) { + // convert bgr to rgb and unpremultiply + for (i = 0; i < pixel_count; ++i) { + stbi_uc a = p[3]; + stbi_uc t = p[0]; + if (a) { + stbi_uc half = a / 2; + p[0] = (p[2] * 255 + half) / a; + p[1] = (p[1] * 255 + half) / a; + p[2] = (t * 255 + half) / a; + } else { + p[0] = p[2]; + p[2] = t; + } + p += 4; + } + } else { + // convert bgr to rgb + for (i = 0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 4; + } + } + } +} + +# define STBI__PNG_TYPE(a, b, c, d) (((unsigned)(a) << 24) + ((unsigned)(b) << 16) + ((unsigned)(c) << 8) + (unsigned)(d)) + +static int stbi__parse_png_file(stbi__png* z, int scan, int req_comp) +{ + stbi_uc palette[1024], pal_img_n = 0; + stbi_uc has_trans = 0, tc[3] = { 0 }; + stbi__uint16 tc16[3]; + stbi__uint32 ioff = 0, idata_limit = 0, i, pal_len = 0; + int first = 1, k, interlace = 0, color = 0, is_iphone = 0; + stbi__context* s = z->s; + + z->expanded = NULL; + z->idata = NULL; + z->out = NULL; + + if (!stbi__check_png_header(s)) + return 0; + + if (scan == STBI__SCAN_type) + return 1; + + for (;;) { + stbi__pngchunk c = stbi__get_chunk_header(s); + switch (c.type) { + case STBI__PNG_TYPE('C', 'g', 'B', 'I'): + is_iphone = 1; + stbi__skip(s, c.length); + break; + case STBI__PNG_TYPE('I', 'H', 'D', 'R'): { + int comp, filter; + if (!first) + return stbi__err("multiple IHDR", "Corrupt PNG"); + first = 0; + if (c.length != 13) + return stbi__err("bad IHDR len", "Corrupt PNG"); + s->img_x = stbi__get32be(s); + s->img_y = stbi__get32be(s); + if (s->img_y > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + z->depth = stbi__get8(s); + if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) + return stbi__err("1/2/4/8/16-bit only", "PNG not supported: 1/2/4/8/16-bit only"); + color = stbi__get8(s); + if (color > 6) + return stbi__err("bad ctype", "Corrupt PNG"); + if (color == 3 && z->depth == 16) + return stbi__err("bad ctype", "Corrupt PNG"); + if (color == 3) + pal_img_n = 3; + else if (color & 1) + return stbi__err("bad ctype", "Corrupt PNG"); + comp = stbi__get8(s); + if (comp) + return stbi__err("bad comp method", "Corrupt PNG"); + filter = stbi__get8(s); + if (filter) + return stbi__err("bad filter method", "Corrupt PNG"); + interlace = stbi__get8(s); + if (interlace > 1) + return stbi__err("bad interlace method", "Corrupt PNG"); + if (!s->img_x || !s->img_y) + return stbi__err("0-pixel image", "Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) + return stbi__err("too large", "Image too large to decode"); + } else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) + return stbi__err("too large", "Corrupt PNG"); + } + // even with SCAN_header, have to scan to see if we have a tRNS + break; + } + + case STBI__PNG_TYPE('P', 'L', 'T', 'E'): { + if (first) + return stbi__err("first not IHDR", "Corrupt PNG"); + if (c.length > 256 * 3) + return stbi__err("invalid PLTE", "Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) + return stbi__err("invalid PLTE", "Corrupt PNG"); + for (i = 0; i < pal_len; ++i) { + palette[i * 4 + 0] = stbi__get8(s); + palette[i * 4 + 1] = stbi__get8(s); + palette[i * 4 + 2] = stbi__get8(s); + palette[i * 4 + 3] = 255; + } + break; + } + + case STBI__PNG_TYPE('t', 'R', 'N', 'S'): { + if (first) + return stbi__err("first not IHDR", "Corrupt PNG"); + if (z->idata) + return stbi__err("tRNS after IDAT", "Corrupt PNG"); + if (pal_img_n) { + if (scan == STBI__SCAN_header) { + s->img_n = 4; + return 1; + } + if (pal_len == 0) + return stbi__err("tRNS before PLTE", "Corrupt PNG"); + if (c.length > pal_len) + return stbi__err("bad tRNS len", "Corrupt PNG"); + pal_img_n = 4; + for (i = 0; i < c.length; ++i) + palette[i * 4 + 3] = stbi__get8(s); + } else { + if (!(s->img_n & 1)) + return stbi__err("tRNS with alpha", "Corrupt PNG"); + if (c.length != (stbi__uint32)s->img_n * 2) + return stbi__err("bad tRNS len", "Corrupt PNG"); + has_trans = 1; + // non-paletted with tRNS = constant alpha. if header-scanning, we can stop now. + if (scan == STBI__SCAN_header) { + ++s->img_n; + return 1; + } + if (z->depth == 16) { + for (k = 0; k < s->img_n && k < 3; ++k) // extra loop test to suppress false GCC warning + tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is + } else { + for (k = 0; k < s->img_n && k < 3; ++k) + tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger + } + } + break; + } + + case STBI__PNG_TYPE('I', 'D', 'A', 'T'): { + if (first) + return stbi__err("first not IHDR", "Corrupt PNG"); + if (pal_img_n && !pal_len) + return stbi__err("no PLTE", "Corrupt PNG"); + if (scan == STBI__SCAN_header) { + // header scan definitely stops at first IDAT + if (pal_img_n) + s->img_n = pal_img_n; + return 1; + } + if (c.length > (1u << 30)) + return stbi__err("IDAT size limit", "IDAT section larger than 2^30 bytes"); + if ((int)(ioff + c.length) < (int)ioff) + return 0; + if (ioff + c.length > idata_limit) { + stbi__uint32 idata_limit_old = idata_limit; + stbi_uc* p; + if (idata_limit == 0) + idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + STBI_NOTUSED(idata_limit_old); + p = (stbi_uc*)STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); + if (p == NULL) + return stbi__err("outofmem", "Out of memory"); + z->idata = p; + } + if (!stbi__getn(s, z->idata + ioff, c.length)) + return stbi__err("outofdata", "Corrupt PNG"); + ioff += c.length; + break; + } + + case STBI__PNG_TYPE('I', 'E', 'N', 'D'): { + stbi__uint32 raw_len, bpl; + if (first) + return stbi__err("first not IHDR", "Corrupt PNG"); + if (scan != STBI__SCAN_load) + return 1; + if (z->idata == NULL) + return stbi__err("no IDAT", "Corrupt PNG"); + // initial guess for decoded data size to avoid unnecessary reallocs + bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component + raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; + z->expanded = (stbi_uc*)stbi_zlib_decode_malloc_guesssize_headerflag((char*)z->idata, ioff, raw_len, (int*)&raw_len, !is_iphone); + if (z->expanded == NULL) + return 0; // zlib should set error + STBI_FREE(z->idata); + z->idata = NULL; + if ((req_comp == s->img_n + 1 && req_comp != 3 && !pal_img_n) || has_trans) + s->img_out_n = s->img_n + 1; + else + s->img_out_n = s->img_n; + if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) + return 0; + if (has_trans) { + if (z->depth == 16) { + if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) + return 0; + } else { + if (!stbi__compute_transparency(z, tc, s->img_out_n)) + return 0; + } + } + if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) + stbi__de_iphone(z); + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) + s->img_out_n = req_comp; + if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) + return 0; + } else if (has_trans) { + // non-paletted image with tRNS -> source image has (constant) alpha + ++s->img_n; + } + STBI_FREE(z->expanded); + z->expanded = NULL; + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + return 1; + } + + default: + // if critical, fail + if (first) + return stbi__err("first not IHDR", "Corrupt PNG"); + if ((c.type & (1 << 29)) == 0) { +# ifndef STBI_NO_FAILURE_STRINGS + // not threadsafe + static char invalid_chunk[] = "XXXX PNG chunk not known"; + invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); + invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); + invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); + invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); +# endif + return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); + } + stbi__skip(s, c.length); + break; + } + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + } +} + +static void* stbi__do_png(stbi__png* p, int* x, int* y, int* n, int req_comp, stbi__result_info* ri) +{ + void* result = NULL; + if (req_comp < 0 || req_comp > 4) + return stbi__errpuc("bad req_comp", "Internal error"); + if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { + if (p->depth <= 8) + ri->bits_per_channel = 8; + else if (p->depth == 16) + ri->bits_per_channel = 16; + else + return stbi__errpuc("bad bits_per_channel", "PNG not supported: unsupported color depth"); + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s->img_out_n) { + if (ri->bits_per_channel == 8) + result = stbi__convert_format((unsigned char*)result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + else + result = stbi__convert_format16((stbi__uint16*)result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + p->s->img_out_n = req_comp; + if (result == NULL) + return result; + } + *x = p->s->img_x; + *y = p->s->img_y; + if (n) + *n = p->s->img_n; + } + STBI_FREE(p->out); + p->out = NULL; + STBI_FREE(p->expanded); + p->expanded = NULL; + STBI_FREE(p->idata); + p->idata = NULL; + + return result; +} + +static void* stbi__png_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) +{ + stbi__png p; + p.s = s; + return stbi__do_png(&p, x, y, comp, req_comp, ri); +} + +static int stbi__png_test(stbi__context* s) +{ + int r; + r = stbi__check_png_header(s); + stbi__rewind(s); + return r; +} + +static int stbi__png_info_raw(stbi__png* p, int* x, int* y, int* comp) +{ + if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { + stbi__rewind(p->s); + return 0; + } + if (x) + *x = p->s->img_x; + if (y) + *y = p->s->img_y; + if (comp) + *comp = p->s->img_n; + return 1; +} + +static int stbi__png_info(stbi__context* s, int* x, int* y, int* comp) +{ + stbi__png p; + p.s = s; + return stbi__png_info_raw(&p, x, y, comp); +} + +static int stbi__png_is16(stbi__context* s) +{ + stbi__png p; + p.s = s; + if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) + return 0; + if (p.depth != 16) { + stbi__rewind(p.s); + return 0; + } + return 1; +} +# endif + +// Microsoft/Windows BMP image + +# ifndef STBI_NO_BMP +static int stbi__bmp_test_raw(stbi__context* s) +{ + int r; + int sz; + if (stbi__get8(s) != 'B') + return 0; + if (stbi__get8(s) != 'M') + return 0; + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + stbi__get32le(s); // discard data offset + sz = stbi__get32le(s); + r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); + return r; +} + +static int stbi__bmp_test(stbi__context* s) +{ + int r = stbi__bmp_test_raw(s); + stbi__rewind(s); + return r; +} + +// returns 0..31 for the highest set bit +static int stbi__high_bit(unsigned int z) +{ + int n = 0; + if (z == 0) + return -1; + if (z >= 0x10000) { + n += 16; + z >>= 16; + } + if (z >= 0x00100) { + n += 8; + z >>= 8; + } + if (z >= 0x00010) { + n += 4; + z >>= 4; + } + if (z >= 0x00004) { + n += 2; + z >>= 2; + } + if (z >= 0x00002) { + n += 1; /* >>= 1;*/ + } + return n; +} + +static int stbi__bitcount(unsigned int a) +{ + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; +} + +// extract an arbitrarily-aligned N-bit value (N=bits) +// from v, and then make it 8-bits long and fractionally +// extend it to full full range. +static int stbi__shiftsigned(unsigned int v, int shift, int bits) +{ + static unsigned int mul_table[9] = { + 0, + 0xff /*0b11111111*/, + 0x55 /*0b01010101*/, + 0x49 /*0b01001001*/, + 0x11 /*0b00010001*/, + 0x21 /*0b00100001*/, + 0x41 /*0b01000001*/, + 0x81 /*0b10000001*/, + 0x01 /*0b00000001*/, + }; + static unsigned int shift_table[9] = { + 0, + 0, + 0, + 1, + 0, + 2, + 4, + 6, + 0, + }; + if (shift < 0) + v <<= -shift; + else + v >>= shift; + STBI_ASSERT(v < 256); + v >>= (8 - bits); + STBI_ASSERT(bits >= 0 && bits <= 8); + return (int)((unsigned)v * mul_table[bits]) >> shift_table[bits]; +} + +typedef struct +{ + int bpp, offset, hsz; + unsigned int mr, mg, mb, ma, all_a; + int extra_read; +} stbi__bmp_data; + +static int stbi__bmp_set_mask_defaults(stbi__bmp_data* info, int compress) +{ + // BI_BITFIELDS specifies masks explicitly, don't override + if (compress == 3) + return 1; + + if (compress == 0) { + if (info->bpp == 16) { + info->mr = 31u << 10; + info->mg = 31u << 5; + info->mb = 31u << 0; + } else if (info->bpp == 32) { + info->mr = 0xffu << 16; + info->mg = 0xffu << 8; + info->mb = 0xffu << 0; + info->ma = 0xffu << 24; + info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 + } else { + // otherwise, use defaults, which is all-0 + info->mr = info->mg = info->mb = info->ma = 0; + } + return 1; + } + return 0; // error +} + +static void* stbi__bmp_parse_header(stbi__context* s, stbi__bmp_data* info) +{ + int hsz; + if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') + return stbi__errpuc("not BMP", "Corrupt BMP"); + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + info->offset = stbi__get32le(s); + info->hsz = hsz = stbi__get32le(s); + info->mr = info->mg = info->mb = info->ma = 0; + info->extra_read = 14; + + if (info->offset < 0) + return stbi__errpuc("bad BMP", "bad BMP"); + + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) + return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); + if (hsz == 12) { + s->img_x = stbi__get16le(s); + s->img_y = stbi__get16le(s); + } else { + s->img_x = stbi__get32le(s); + s->img_y = stbi__get32le(s); + } + if (stbi__get16le(s) != 1) + return stbi__errpuc("bad BMP", "bad BMP"); + info->bpp = stbi__get16le(s); + if (hsz != 12) { + int compress = stbi__get32le(s); + if (compress == 1 || compress == 2) + return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); + if (compress >= 4) + return stbi__errpuc("BMP JPEG/PNG", "BMP type not supported: unsupported compression"); // this includes PNG/JPEG modes + if (compress == 3 && info->bpp != 16 && info->bpp != 32) + return stbi__errpuc("bad BMP", "bad BMP"); // bitfields requires 16 or 32 bits/pixel + stbi__get32le(s); // discard sizeof + stbi__get32le(s); // discard hres + stbi__get32le(s); // discard vres + stbi__get32le(s); // discard colorsused + stbi__get32le(s); // discard max important + if (hsz == 40 || hsz == 56) { + if (hsz == 56) { + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + } + if (info->bpp == 16 || info->bpp == 32) { + if (compress == 0) { + stbi__bmp_set_mask_defaults(info, compress); + } else if (compress == 3) { + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->extra_read += 12; + // not documented, but generated by photoshop and handled by mspaint + if (info->mr == info->mg && info->mg == info->mb) { + // ?!?!? + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else { + // V4/V5 header + int i; + if (hsz != 108 && hsz != 124) + return stbi__errpuc("bad BMP", "bad BMP"); + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->ma = stbi__get32le(s); + if (compress != 3) // override mr/mg/mb unless in BI_BITFIELDS mode, as per docs + stbi__bmp_set_mask_defaults(info, compress); + stbi__get32le(s); // discard color space + for (i = 0; i < 12; ++i) + stbi__get32le(s); // discard color space parameters + if (hsz == 124) { + stbi__get32le(s); // discard rendering intent + stbi__get32le(s); // discard offset of profile data + stbi__get32le(s); // discard size of profile data + stbi__get32le(s); // discard reserved + } + } + } + return (void*)1; +} + +static void* stbi__bmp_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) +{ + stbi_uc* out; + unsigned int mr = 0, mg = 0, mb = 0, ma = 0, all_a; + stbi_uc pal[256][4]; + int psize = 0, i, j, width; + int flip_vertically, pad, target; + stbi__bmp_data info; + STBI_NOTUSED(ri); + + info.all_a = 255; + if (stbi__bmp_parse_header(s, &info) == NULL) + return NULL; // error code already set + + flip_vertically = ((int)s->img_y) > 0; + s->img_y = abs((int)s->img_y); + + if (s->img_y > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + + mr = info.mr; + mg = info.mg; + mb = info.mb; + ma = info.ma; + all_a = info.all_a; + + if (info.hsz == 12) { + if (info.bpp < 24) + psize = (info.offset - info.extra_read - 24) / 3; + } else { + if (info.bpp < 16) + psize = (info.offset - info.extra_read - info.hsz) >> 2; + } + if (psize == 0) { + // accept some number of extra bytes after the header, but if the offset points either to before + // the header ends or implies a large amount of extra data, reject the file as malformed + int bytes_read_so_far = s->callback_already_read + (int)(s->img_buffer - s->img_buffer_original); + int header_limit = 1024; // max we actually read is below 256 bytes currently. + int extra_data_limit = 256 * 4; // what ordinarily goes here is a palette; 256 entries*4 bytes is its max size. + if (bytes_read_so_far <= 0 || bytes_read_so_far > header_limit) { + return stbi__errpuc("bad header", "Corrupt BMP"); + } + // we established that bytes_read_so_far is positive and sensible. + // the first half of this test rejects offsets that are either too small positives, or + // negative, and guarantees that info.offset >= bytes_read_so_far > 0. this in turn + // ensures the number computed in the second half of the test can't overflow. + if (info.offset < bytes_read_so_far || info.offset - bytes_read_so_far > extra_data_limit) { + return stbi__errpuc("bad offset", "Corrupt BMP"); + } else { + stbi__skip(s, info.offset - bytes_read_so_far); + } + } + + if (info.bpp == 24 && ma == 0xff000000) + s->img_n = 3; + else + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 + target = req_comp; + else + target = s->img_n; // if they want monochrome, we'll post-convert + + // sanity-check size + if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) + return stbi__errpuc("too large", "Corrupt BMP"); + + out = (stbi_uc*)stbi__malloc_mad3(target, s->img_x, s->img_y, 0); + if (!out) + return stbi__errpuc("outofmem", "Out of memory"); + if (info.bpp < 16) { + int z = 0; + if (psize == 0 || psize > 256) { + STBI_FREE(out); + return stbi__errpuc("invalid", "Corrupt BMP"); + } + for (i = 0; i < psize; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + if (info.hsz != 12) + stbi__get8(s); + pal[i][3] = 255; + } + stbi__skip(s, info.offset - info.extra_read - info.hsz - psize * (info.hsz == 12 ? 3 : 4)); + if (info.bpp == 1) + width = (s->img_x + 7) >> 3; + else if (info.bpp == 4) + width = (s->img_x + 1) >> 1; + else if (info.bpp == 8) + width = s->img_x; + else { + STBI_FREE(out); + return stbi__errpuc("bad bpp", "Corrupt BMP"); + } + pad = (-width) & 3; + if (info.bpp == 1) { + for (j = 0; j < (int)s->img_y; ++j) { + int bit_offset = 7, v = stbi__get8(s); + for (i = 0; i < (int)s->img_x; ++i) { + int color = (v >> bit_offset) & 0x1; + out[z++] = pal[color][0]; + out[z++] = pal[color][1]; + out[z++] = pal[color][2]; + if (target == 4) + out[z++] = 255; + if (i + 1 == (int)s->img_x) + break; + if ((--bit_offset) < 0) { + bit_offset = 7; + v = stbi__get8(s); + } + } + stbi__skip(s, pad); + } + } else { + for (j = 0; j < (int)s->img_y; ++j) { + for (i = 0; i < (int)s->img_x; i += 2) { + int v = stbi__get8(s), v2 = 0; + if (info.bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) + out[z++] = 255; + if (i + 1 == (int)s->img_x) + break; + v = (info.bpp == 8) ? stbi__get8(s) : v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) + out[z++] = 255; + } + stbi__skip(s, pad); + } + } + } else { + int rshift = 0, gshift = 0, bshift = 0, ashift = 0, rcount = 0, gcount = 0, bcount = 0, acount = 0; + int z = 0; + int easy = 0; + stbi__skip(s, info.offset - info.extra_read - info.hsz); + if (info.bpp == 24) + width = 3 * s->img_x; + else if (info.bpp == 16) + width = 2 * s->img_x; + else /* bpp = 32 and pad = 0 */ + width = 0; + pad = (-width) & 3; + if (info.bpp == 24) { + easy = 1; + } else if (info.bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) { + STBI_FREE(out); + return stbi__errpuc("bad masks", "Corrupt BMP"); + } + // right shift amt to put high bit in position #7 + rshift = stbi__high_bit(mr) - 7; + rcount = stbi__bitcount(mr); + gshift = stbi__high_bit(mg) - 7; + gcount = stbi__bitcount(mg); + bshift = stbi__high_bit(mb) - 7; + bcount = stbi__bitcount(mb); + ashift = stbi__high_bit(ma) - 7; + acount = stbi__bitcount(ma); + if (rcount > 8 || gcount > 8 || bcount > 8 || acount > 8) { + STBI_FREE(out); + return stbi__errpuc("bad masks", "Corrupt BMP"); + } + } + for (j = 0; j < (int)s->img_y; ++j) { + if (easy) { + for (i = 0; i < (int)s->img_x; ++i) { + unsigned char a; + out[z + 2] = stbi__get8(s); + out[z + 1] = stbi__get8(s); + out[z + 0] = stbi__get8(s); + z += 3; + a = (easy == 2 ? stbi__get8(s) : 255); + all_a |= a; + if (target == 4) + out[z++] = a; + } + } else { + int bpp = info.bpp; + for (i = 0; i < (int)s->img_x; ++i) { + stbi__uint32 v = (bpp == 16 ? (stbi__uint32)stbi__get16le(s) : stbi__get32le(s)); + unsigned int a; + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); + a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); + all_a |= a; + if (target == 4) + out[z++] = STBI__BYTECAST(a); + } + } + stbi__skip(s, pad); + } + } + + // if alpha channel is all 0s, replace with all 255s + if (target == 4 && all_a == 0) + for (i = 4 * s->img_x * s->img_y - 1; i >= 0; i -= 4) + out[i] = 255; + + if (flip_vertically) { + stbi_uc t; + for (j = 0; j < (int)s->img_y >> 1; ++j) { + stbi_uc* p1 = out + j * s->img_x * target; + stbi_uc* p2 = out + (s->img_y - 1 - j) * s->img_x * target; + for (i = 0; i < (int)s->img_x * target; ++i) { + t = p1[i]; + p1[i] = p2[i]; + p2[i] = t; + } + } + } + + if (req_comp && req_comp != target) { + out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); + if (out == NULL) + return out; // stbi__convert_format frees input on failure + } + + *x = s->img_x; + *y = s->img_y; + if (comp) + *comp = s->img_n; + return out; +} +# endif + +// Targa Truevision - TGA +// by Jonathan Dummer +# ifndef STBI_NO_TGA +// returns STBI_rgb or whatever, 0 on error +static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) +{ + // only RGB or RGBA (incl. 16bit) or grey allowed + if (is_rgb16) + *is_rgb16 = 0; + switch (bits_per_pixel) { + case 8: + return STBI_grey; + case 16: + if (is_grey) + return STBI_grey_alpha; + // fallthrough + case 15: + if (is_rgb16) + *is_rgb16 = 1; + return STBI_rgb; + case 24: // fallthrough + case 32: + return bits_per_pixel / 8; + default: + return 0; + } +} + +static int stbi__tga_info(stbi__context* s, int* x, int* y, int* comp) +{ + int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp; + int sz, tga_colormap_type; + stbi__get8(s); // discard Offset + tga_colormap_type = stbi__get8(s); // colormap type + if (tga_colormap_type > 1) { + stbi__rewind(s); + return 0; // only RGB or indexed allowed + } + tga_image_type = stbi__get8(s); // image type + if (tga_colormap_type == 1) { // colormapped (paletted) image + if (tga_image_type != 1 && tga_image_type != 9) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, 4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, 4); // skip image x and y origin + tga_colormap_bpp = sz; + } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE + if ((tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11)) { + stbi__rewind(s); + return 0; // only RGB or grey allowed, +/- RLE + } + stbi__skip(s, 9); // skip colormap specification and image x/y origin + tga_colormap_bpp = 0; + } + tga_w = stbi__get16le(s); + if (tga_w < 1) { + stbi__rewind(s); + return 0; // test width + } + tga_h = stbi__get16le(s); + if (tga_h < 1) { + stbi__rewind(s); + return 0; // test height + } + tga_bits_per_pixel = stbi__get8(s); // bits per pixel + stbi__get8(s); // ignore alpha bits + if (tga_colormap_bpp != 0) { + if ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { + // when using a colormap, tga_bits_per_pixel is the size of the indexes + // I don't think anything but 8 or 16bit indexes makes sense + stbi__rewind(s); + return 0; + } + tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); + } else { + tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL); + } + if (!tga_comp) { + stbi__rewind(s); + return 0; + } + if (x) + *x = tga_w; + if (y) + *y = tga_h; + if (comp) + *comp = tga_comp; + return 1; // seems to have passed everything +} + +static int stbi__tga_test(stbi__context* s) +{ + int res = 0; + int sz, tga_color_type; + stbi__get8(s); // discard Offset + tga_color_type = stbi__get8(s); // color type + if (tga_color_type > 1) + goto errorEnd; // only RGB or indexed allowed + sz = stbi__get8(s); // image type + if (tga_color_type == 1) { // colormapped (paletted) image + if (sz != 1 && sz != 9) + goto errorEnd; // colortype 1 demands image type 1 or 9 + stbi__skip(s, 4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) + goto errorEnd; + stbi__skip(s, 4); // skip image x and y origin + } else { // "normal" image w/o colormap + if ((sz != 2) && (sz != 3) && (sz != 10) && (sz != 11)) + goto errorEnd; // only RGB or grey allowed, +/- RLE + stbi__skip(s, 9); // skip colormap specification and image x/y origin + } + if (stbi__get16le(s) < 1) + goto errorEnd; // test width + if (stbi__get16le(s) < 1) + goto errorEnd; // test height + sz = stbi__get8(s); // bits per pixel + if ((tga_color_type == 1) && (sz != 8) && (sz != 16)) + goto errorEnd; // for colormapped images, bpp is size of an index + if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) + goto errorEnd; + + res = 1; // if we got this far, everything's good and we can return 1 instead of 0 + +errorEnd: + stbi__rewind(s); + return res; +} + +// read 16bit value and convert to 24bit RGB +static void stbi__tga_read_rgb16(stbi__context* s, stbi_uc* out) +{ + stbi__uint16 px = (stbi__uint16)stbi__get16le(s); + stbi__uint16 fiveBitMask = 31; + // we have 3 channels with 5bits each + int r = (px >> 10) & fiveBitMask; + int g = (px >> 5) & fiveBitMask; + int b = px & fiveBitMask; + // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later + out[0] = (stbi_uc)((r * 255) / 31); + out[1] = (stbi_uc)((g * 255) / 31); + out[2] = (stbi_uc)((b * 255) / 31); + + // some people claim that the most significant bit might be used for alpha + // (possibly if an alpha-bit is set in the "image descriptor byte") + // but that only made 16bit test images completely translucent.. + // so let's treat all 15 and 16bit TGAs as RGB with no alpha. +} + +static void* stbi__tga_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) +{ + // read in the TGA header stuff + int tga_offset = stbi__get8(s); + int tga_indexed = stbi__get8(s); + int tga_image_type = stbi__get8(s); + int tga_is_RLE = 0; + int tga_palette_start = stbi__get16le(s); + int tga_palette_len = stbi__get16le(s); + int tga_palette_bits = stbi__get8(s); + int tga_x_origin = stbi__get16le(s); + int tga_y_origin = stbi__get16le(s); + int tga_width = stbi__get16le(s); + int tga_height = stbi__get16le(s); + int tga_bits_per_pixel = stbi__get8(s); + int tga_comp, tga_rgb16 = 0; + int tga_inverted = stbi__get8(s); + // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) + // image data + unsigned char* tga_data; + unsigned char* tga_palette = NULL; + int i, j; + unsigned char raw_data[4] = { 0 }; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + STBI_NOTUSED(ri); + STBI_NOTUSED(tga_x_origin); // @TODO + STBI_NOTUSED(tga_y_origin); // @TODO + + if (tga_height > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (tga_width > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + + // do a tiny bit of precessing + if (tga_image_type >= 8) { + tga_image_type -= 8; + tga_is_RLE = 1; + } + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // If I'm paletted, then I'll use the number of bits from the palette + if (tga_indexed) + tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); + else + tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); + + if (!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency + return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); + + // tga info + *x = tga_width; + *y = tga_height; + if (comp) + *comp = tga_comp; + + if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) + return stbi__errpuc("too large", "Corrupt TGA"); + + tga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0); + if (!tga_data) + return stbi__errpuc("outofmem", "Out of memory"); + + // skip to the data's starting position (offset usually = 0) + stbi__skip(s, tga_offset); + + if (!tga_indexed && !tga_is_RLE && !tga_rgb16) { + for (i = 0; i < tga_height; ++i) { + int row = tga_inverted ? tga_height - i - 1 : i; + stbi_uc* tga_row = tga_data + row * tga_width * tga_comp; + stbi__getn(s, tga_row, tga_width * tga_comp); + } + } else { + // do I need to load a palette? + if (tga_indexed) { + if (tga_palette_len == 0) { /* you have to have at least one entry! */ + STBI_FREE(tga_data); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + + // any data to skip? (offset usually = 0) + stbi__skip(s, tga_palette_start); + // load the palette + tga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0); + if (!tga_palette) { + STBI_FREE(tga_data); + return stbi__errpuc("outofmem", "Out of memory"); + } + if (tga_rgb16) { + stbi_uc* pal_entry = tga_palette; + STBI_ASSERT(tga_comp == STBI_rgb); + for (i = 0; i < tga_palette_len; ++i) { + stbi__tga_read_rgb16(s, pal_entry); + pal_entry += tga_comp; + } + } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { + STBI_FREE(tga_data); + STBI_FREE(tga_palette); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + } + // load the data + for (i = 0; i < tga_width * tga_height; ++i) { + // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? + if (tga_is_RLE) { + if (RLE_count == 0) { + // yep, get the next byte as a RLE command + int RLE_cmd = stbi__get8(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } else if (!RLE_repeating) { + read_next_pixel = 1; + } + } else { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if (read_next_pixel) { + // load however much data we did have + if (tga_indexed) { + // read in index, then perform the lookup + int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); + if (pal_idx >= tga_palette_len) { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_comp; + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = tga_palette[pal_idx + j]; + } + } else if (tga_rgb16) { + STBI_ASSERT(tga_comp == STBI_rgb); + stbi__tga_read_rgb16(s, raw_data); + } else { + // read in the data raw + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = stbi__get8(s); + } + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + + // copy data + for (j = 0; j < tga_comp; ++j) + tga_data[i * tga_comp + j] = raw_data[j]; + + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if (tga_inverted) { + for (j = 0; j * 2 < tga_height; ++j) { + int index1 = j * tga_width * tga_comp; + int index2 = (tga_height - 1 - j) * tga_width * tga_comp; + for (i = tga_width * tga_comp; i > 0; --i) { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if (tga_palette != NULL) { + STBI_FREE(tga_palette); + } + } + + // swap RGB - if the source data was RGB16, it already is in the right order + if (tga_comp >= 3 && !tga_rgb16) { + unsigned char* tga_pixel = tga_data; + for (i = 0; i < tga_width * tga_height; ++i) { + unsigned char temp = tga_pixel[0]; + tga_pixel[0] = tga_pixel[2]; + tga_pixel[2] = temp; + tga_pixel += tga_comp; + } + } + + // convert to target component count + if (req_comp && req_comp != tga_comp) + tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); + + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = tga_x_origin = tga_y_origin = 0; + STBI_NOTUSED(tga_palette_start); + // OK, done + return tga_data; +} +# endif + +// ************************************************************************************************* +// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB + +# ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context* s) +{ + int r = (stbi__get32be(s) == 0x38425053); + stbi__rewind(s); + return r; +} + +static int stbi__psd_decode_rle(stbi__context* s, stbi_uc* p, int pixelCount) +{ + int count, nleft, len; + + count = 0; + while ((nleft = pixelCount - count) > 0) { + len = stbi__get8(s); + if (len == 128) { + // No-op. + } else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + if (len > nleft) + return 0; // corrupt data + count += len; + while (len) { + *p = stbi__get8(s); + p += 4; + len--; + } + } else if (len > 128) { + stbi_uc val; + // Next -len+1 bytes in the dest are replicated from next source byte. + // (Interpret len as a negative 8-bit int.) + len = 257 - len; + if (len > nleft) + return 0; // corrupt data + val = stbi__get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } + } + + return 1; +} + +static void* stbi__psd_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri, int bpc) +{ + int pixelCount; + int channelCount, compression; + int channel, i; + int bitdepth; + int w, h; + stbi_uc* out; + STBI_NOTUSED(ri); + + // Check identifier + if (stbi__get32be(s) != 0x38425053) // "8BPS" + return stbi__errpuc("not PSD", "Corrupt PSD image"); + + // Check file type version. + if (stbi__get16be(s) != 1) + return stbi__errpuc("wrong version", "Unsupported version of PSD image"); + + // Skip 6 reserved bytes. + stbi__skip(s, 6); + + // Read the number of channels (R, G, B, A, etc). + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) + return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); + + // Read the rows and columns of the image. + h = stbi__get32be(s); + w = stbi__get32be(s); + + if (h > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (w > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + + // Make sure the depth is 8 bits. + bitdepth = stbi__get16be(s); + if (bitdepth != 8 && bitdepth != 16) + return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 or 16 bit"); + + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (stbi__get16be(s) != 3) + return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); + + // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) + stbi__skip(s, stbi__get32be(s)); + + // Skip the image resources. (resolution, pen tool paths, etc) + stbi__skip(s, stbi__get32be(s)); + + // Skip the reserved data. + stbi__skip(s, stbi__get32be(s)); + + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = stbi__get16be(s); + if (compression > 1) + return stbi__errpuc("bad compression", "PSD has an unknown compression format"); + + // Check size + if (!stbi__mad3sizes_valid(4, w, h, 0)) + return stbi__errpuc("too large", "Corrupt PSD"); + + // Create the destination image. + + if (!compression && bitdepth == 16 && bpc == 16) { + out = (stbi_uc*)stbi__malloc_mad3(8, w, h, 0); + ri->bits_per_channel = 16; + } else + out = (stbi_uc*)stbi__malloc(4 * w * h); + + if (!out) + return stbi__errpuc("outofmem", "Out of memory"); + pixelCount = w * h; + + // Initialize the data to zero. + // memset( out, 0, pixelCount * 4 ); + + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. + // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. + // Else if n is 128, noop. + // Endloop + + // The RLE-compressed data is preceded by a 2-byte data count for each row in the data, + // which we're going to just skip. + stbi__skip(s, h * channelCount * 2); + + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc* p; + + p = out + channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++, p += 4) + *p = (channel == 3 ? 255 : 0); + } else { + // Read the RLE data. + if (!stbi__psd_decode_rle(s, p, pixelCount)) { + STBI_FREE(out); + return stbi__errpuc("corrupt", "bad RLE data"); + } + } + } + + } else { + // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) + // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + if (channel >= channelCount) { + // Fill this channel with default data. + if (bitdepth == 16 && bpc == 16) { + stbi__uint16* q = ((stbi__uint16*)out) + channel; + stbi__uint16 val = channel == 3 ? 65535 : 0; + for (i = 0; i < pixelCount; i++, q += 4) + *q = val; + } else { + stbi_uc* p = out + channel; + stbi_uc val = channel == 3 ? 255 : 0; + for (i = 0; i < pixelCount; i++, p += 4) + *p = val; + } + } else { + if (ri->bits_per_channel == 16) { // output bpc + stbi__uint16* q = ((stbi__uint16*)out) + channel; + for (i = 0; i < pixelCount; i++, q += 4) + *q = (stbi__uint16)stbi__get16be(s); + } else { + stbi_uc* p = out + channel; + if (bitdepth == 16) { // input bpc + for (i = 0; i < pixelCount; i++, p += 4) + *p = (stbi_uc)(stbi__get16be(s) >> 8); + } else { + for (i = 0; i < pixelCount; i++, p += 4) + *p = stbi__get8(s); + } + } + } + } + } + + // remove weird white matte from PSD + if (channelCount >= 4) { + if (ri->bits_per_channel == 16) { + for (i = 0; i < w * h; ++i) { + stbi__uint16* pixel = (stbi__uint16*)out + 4 * i; + if (pixel[3] != 0 && pixel[3] != 65535) { + float a = pixel[3] / 65535.0f; + float ra = 1.0f / a; + float inv_a = 65535.0f * (1 - ra); + pixel[0] = (stbi__uint16)(pixel[0] * ra + inv_a); + pixel[1] = (stbi__uint16)(pixel[1] * ra + inv_a); + pixel[2] = (stbi__uint16)(pixel[2] * ra + inv_a); + } + } + } else { + for (i = 0; i < w * h; ++i) { + unsigned char* pixel = out + 4 * i; + if (pixel[3] != 0 && pixel[3] != 255) { + float a = pixel[3] / 255.0f; + float ra = 1.0f / a; + float inv_a = 255.0f * (1 - ra); + pixel[0] = (unsigned char)(pixel[0] * ra + inv_a); + pixel[1] = (unsigned char)(pixel[1] * ra + inv_a); + pixel[2] = (unsigned char)(pixel[2] * ra + inv_a); + } + } + } + } + + // convert to desired output format + if (req_comp && req_comp != 4) { + if (ri->bits_per_channel == 16) + out = (stbi_uc*)stbi__convert_format16((stbi__uint16*)out, 4, req_comp, w, h); + else + out = stbi__convert_format(out, 4, req_comp, w, h); + if (out == NULL) + return out; // stbi__convert_format frees input on failure + } + + if (comp) + *comp = 4; + *y = h; + *x = w; + + return out; +} +# endif + +// ************************************************************************************************* +// Softimage PIC loader +// by Tom Seddon +// +// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format +// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ + +# ifndef STBI_NO_PIC +static int stbi__pic_is4(stbi__context* s, char const* str) +{ + int i; + for (i = 0; i < 4; ++i) + if (stbi__get8(s) != (stbi_uc)str[i]) + return 0; + + return 1; +} + +static int stbi__pic_test_core(stbi__context* s) +{ + int i; + + if (!stbi__pic_is4(s, "\x53\x80\xF6\x34")) + return 0; + + for (i = 0; i < 84; ++i) + stbi__get8(s); + + if (!stbi__pic_is4(s, "PICT")) + return 0; + + return 1; +} + +typedef struct +{ + stbi_uc size, type, channel; +} stbi__pic_packet; + +static stbi_uc* stbi__readval(stbi__context* s, int channel, stbi_uc* dest) +{ + int mask = 0x80, i; + + for (i = 0; i < 4; ++i, mask >>= 1) { + if (channel & mask) { + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", "PIC file too short"); + dest[i] = stbi__get8(s); + } + } + + return dest; +} + +static void stbi__copyval(int channel, stbi_uc* dest, stbi_uc const* src) +{ + int mask = 0x80, i; + + for (i = 0; i < 4; ++i, mask >>= 1) + if (channel & mask) + dest[i] = src[i]; +} + +static stbi_uc* stbi__pic_load_core(stbi__context* s, int width, int height, int* comp, stbi_uc* result) +{ + int act_comp = 0, num_packets = 0, y, chained; + stbi__pic_packet packets[10]; + + // this will (should...) cater for even some bizarre stuff like having data + // for the same channel in multiple packets. + do { + stbi__pic_packet* packet; + + if (num_packets == sizeof(packets) / sizeof(packets[0])) + return stbi__errpuc("bad format", "too many packets"); + + packet = &packets[num_packets++]; + + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + + act_comp |= packet->channel; + + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", "file too short (reading packets)"); + if (packet->size != 8) + return stbi__errpuc("bad format", "packet isn't 8bpp"); + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? + + for (y = 0; y < height; ++y) { + int packet_idx; + + for (packet_idx = 0; packet_idx < num_packets; ++packet_idx) { + stbi__pic_packet* packet = &packets[packet_idx]; + stbi_uc* dest = result + y * width * 4; + + switch (packet->type) { + default: + return stbi__errpuc("bad format", "packet has bad compression type"); + + case 0: { // uncompressed + int x; + + for (x = 0; x < width; ++x, dest += 4) + if (!stbi__readval(s, packet->channel, dest)) + return 0; + break; + } + + case 1: // Pure RLE + { + int left = width, i; + + while (left > 0) { + stbi_uc count, value[4]; + + count = stbi__get8(s); + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", "file too short (pure read count)"); + + if (count > left) + count = (stbi_uc)left; + + if (!stbi__readval(s, packet->channel, value)) + return 0; + + for (i = 0; i < count; ++i, dest += 4) + stbi__copyval(packet->channel, dest, value); + left -= count; + } + } break; + + case 2: { // Mixed RLE + int left = width; + while (left > 0) { + int count = stbi__get8(s), i; + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", "file too short (mixed read count)"); + + if (count >= 128) { // Repeated + stbi_uc value[4]; + + if (count == 128) + count = stbi__get16be(s); + else + count -= 127; + if (count > left) + return stbi__errpuc("bad file", "scanline overrun"); + + if (!stbi__readval(s, packet->channel, value)) + return 0; + + for (i = 0; i < count; ++i, dest += 4) + stbi__copyval(packet->channel, dest, value); + } else { // Raw + ++count; + if (count > left) + return stbi__errpuc("bad file", "scanline overrun"); + + for (i = 0; i < count; ++i, dest += 4) + if (!stbi__readval(s, packet->channel, dest)) + return 0; + } + left -= count; + } + break; + } + } + } + } + + return result; +} + +static void* stbi__pic_load(stbi__context* s, int* px, int* py, int* comp, int req_comp, stbi__result_info* ri) +{ + stbi_uc* result; + int i, x, y, internal_comp; + STBI_NOTUSED(ri); + + if (!comp) + comp = &internal_comp; + + for (i = 0; i < 92; ++i) + stbi__get8(s); + + x = stbi__get16be(s); + y = stbi__get16be(s); + + if (y > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (x > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", "file too short (pic header)"); + if (!stbi__mad3sizes_valid(x, y, 4, 0)) + return stbi__errpuc("too large", "PIC image too large to decode"); + + stbi__get32be(s); // skip `ratio' + stbi__get16be(s); // skip `fields' + stbi__get16be(s); // skip `pad' + + // intermediate buffer is RGBA + result = (stbi_uc*)stbi__malloc_mad3(x, y, 4, 0); + if (!result) + return stbi__errpuc("outofmem", "Out of memory"); + memset(result, 0xff, x * y * 4); + + if (!stbi__pic_load_core(s, x, y, comp, result)) { + STBI_FREE(result); + result = 0; + } + *px = x; + *py = y; + if (req_comp == 0) + req_comp = *comp; + result = stbi__convert_format(result, 4, req_comp, x, y); + + return result; +} + +static int stbi__pic_test(stbi__context* s) +{ + int r = stbi__pic_test_core(s); + stbi__rewind(s); + return r; +} +# endif + +// ************************************************************************************************* +// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb + +# ifndef STBI_NO_GIF +typedef struct +{ + stbi__int16 prefix; + stbi_uc first; + stbi_uc suffix; +} stbi__gif_lzw; + +typedef struct +{ + int w, h; + stbi_uc* out; // output buffer (always 4 components) + stbi_uc* background; // The current "background" as far as a gif is concerned + stbi_uc* history; + int flags, bgindex, ratio, transparent, eflags; + stbi_uc pal[256][4]; + stbi_uc lpal[256][4]; + stbi__gif_lzw codes[8192]; + stbi_uc* color_table; + int parse, step; + int lflags; + int start_x, start_y; + int max_x, max_y; + int cur_x, cur_y; + int line_size; + int delay; +} stbi__gif; + +static int stbi__gif_test_raw(stbi__context* s) +{ + int sz; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') + return 0; + sz = stbi__get8(s); + if (sz != '9' && sz != '7') + return 0; + if (stbi__get8(s) != 'a') + return 0; + return 1; +} + +static int stbi__gif_test(stbi__context* s) +{ + int r = stbi__gif_test_raw(s); + stbi__rewind(s); + return r; +} + +static void stbi__gif_parse_colortable(stbi__context* s, stbi_uc pal[256][4], int num_entries, int transp) +{ + int i; + for (i = 0; i < num_entries; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + pal[i][3] = transp == i ? 0 : 255; + } +} + +static int stbi__gif_header(stbi__context* s, stbi__gif* g, int* comp, int is_info) +{ + stbi_uc version; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') + return stbi__err("not GIF", "Corrupt GIF"); + + version = stbi__get8(s); + if (version != '7' && version != '9') + return stbi__err("not GIF", "Corrupt GIF"); + if (stbi__get8(s) != 'a') + return stbi__err("not GIF", "Corrupt GIF"); + + stbi__g_failure_reason = ""; + g->w = stbi__get16le(s); + g->h = stbi__get16le(s); + g->flags = stbi__get8(s); + g->bgindex = stbi__get8(s); + g->ratio = stbi__get8(s); + g->transparent = -1; + + if (g->w > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + if (g->h > STBI_MAX_DIMENSIONS) + return stbi__err("too large", "Very large image (corrupt?)"); + + if (comp != 0) + *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments + + if (is_info) + return 1; + + if (g->flags & 0x80) + stbi__gif_parse_colortable(s, g->pal, 2 << (g->flags & 7), -1); + + return 1; +} + +static int stbi__gif_info_raw(stbi__context* s, int* x, int* y, int* comp) +{ + stbi__gif* g = (stbi__gif*)stbi__malloc(sizeof(stbi__gif)); + if (!g) + return stbi__err("outofmem", "Out of memory"); + if (!stbi__gif_header(s, g, comp, 1)) { + STBI_FREE(g); + stbi__rewind(s); + return 0; + } + if (x) + *x = g->w; + if (y) + *y = g->h; + STBI_FREE(g); + return 1; +} + +static void stbi__out_gif_code(stbi__gif* g, stbi__uint16 code) +{ + stbi_uc *p, *c; + int idx; + + // recurse to decode the prefixes, since the linked-list is backwards, + // and working backwards through an interleaved image would be nasty + if (g->codes[code].prefix >= 0) + stbi__out_gif_code(g, g->codes[code].prefix); + + if (g->cur_y >= g->max_y) + return; + + idx = g->cur_x + g->cur_y; + p = &g->out[idx]; + g->history[idx / 4] = 1; + + c = &g->color_table[g->codes[code].suffix * 4]; + if (c[3] > 128) { // don't render transparent pixels; + p[0] = c[2]; + p[1] = c[1]; + p[2] = c[0]; + p[3] = c[3]; + } + g->cur_x += 4; + + if (g->cur_x >= g->max_x) { + g->cur_x = g->start_x; + g->cur_y += g->step; + + while (g->cur_y >= g->max_y && g->parse > 0) { + g->step = (1 << g->parse) * g->line_size; + g->cur_y = g->start_y + (g->step >> 1); + --g->parse; + } + } +} + +static stbi_uc* stbi__process_gif_raster(stbi__context* s, stbi__gif* g) +{ + stbi_uc lzw_cs; + stbi__int32 len, init_code; + stbi__uint32 first; + stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; + stbi__gif_lzw* p; + + lzw_cs = stbi__get8(s); + if (lzw_cs > 12) + return NULL; + clear = 1 << lzw_cs; + first = 1; + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + bits = 0; + valid_bits = 0; + for (init_code = 0; init_code < clear; init_code++) { + g->codes[init_code].prefix = -1; + g->codes[init_code].first = (stbi_uc)init_code; + g->codes[init_code].suffix = (stbi_uc)init_code; + } + + // support no starting clear code + avail = clear + 2; + oldcode = -1; + + len = 0; + for (;;) { + if (valid_bits < codesize) { + if (len == 0) { + len = stbi__get8(s); // start new block + if (len == 0) + return g->out; + } + --len; + bits |= (stbi__int32)stbi__get8(s) << valid_bits; + valid_bits += 8; + } else { + stbi__int32 code = bits & codemask; + bits >>= codesize; + valid_bits -= codesize; + // @OPTIMIZE: is there some way we can accelerate the non-clear path? + if (code == clear) { // clear code + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + avail = clear + 2; + oldcode = -1; + first = 0; + } else if (code == clear + 1) { // end of stream code + stbi__skip(s, len); + while ((len = stbi__get8(s)) > 0) + stbi__skip(s, len); + return g->out; + } else if (code <= avail) { + if (first) { + return stbi__errpuc("no clear code", "Corrupt GIF"); + } + + if (oldcode >= 0) { + p = &g->codes[avail++]; + if (avail > 8192) { + return stbi__errpuc("too many codes", "Corrupt GIF"); + } + + p->prefix = (stbi__int16)oldcode; + p->first = g->codes[oldcode].first; + p->suffix = (code == avail) ? p->first : g->codes[code].first; + } else if (code == avail) + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + + stbi__out_gif_code(g, (stbi__uint16)code); + + if ((avail & codemask) == 0 && avail <= 0x0FFF) { + codesize++; + codemask = (1 << codesize) - 1; + } + + oldcode = code; + } else { + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + } + } + } +} + +// this function is designed to support animated gifs, although stb_image doesn't support it +// two back is the image from two frames ago, used for a very specific disposal format +static stbi_uc* stbi__gif_load_next(stbi__context* s, stbi__gif* g, int* comp, int req_comp, stbi_uc* two_back) +{ + int dispose; + int first_frame; + int pi; + int pcount; + STBI_NOTUSED(req_comp); + + // on first frame, any non-written pixels get the background colour (non-transparent) + first_frame = 0; + if (g->out == 0) { + if (!stbi__gif_header(s, g, comp, 0)) + return 0; // stbi__g_failure_reason set by stbi__gif_header + if (!stbi__mad3sizes_valid(4, g->w, g->h, 0)) + return stbi__errpuc("too large", "GIF image is too large"); + pcount = g->w * g->h; + g->out = (stbi_uc*)stbi__malloc(4 * pcount); + g->background = (stbi_uc*)stbi__malloc(4 * pcount); + g->history = (stbi_uc*)stbi__malloc(pcount); + if (!g->out || !g->background || !g->history) + return stbi__errpuc("outofmem", "Out of memory"); + + // image is treated as "transparent" at the start - ie, nothing overwrites the current background; + // background colour is only used for pixels that are not rendered first frame, after that "background" + // color refers to the color that was there the previous frame. + memset(g->out, 0x00, 4 * pcount); + memset(g->background, 0x00, 4 * pcount); // state of the background (starts transparent) + memset(g->history, 0x00, pcount); // pixels that were affected previous frame + first_frame = 1; + } else { + // second frame - how do we dispose of the previous one? + dispose = (g->eflags & 0x1C) >> 2; + pcount = g->w * g->h; + + if ((dispose == 3) && (two_back == 0)) { + dispose = 2; // if I don't have an image to revert back to, default to the old background + } + + if (dispose == 3) { // use previous graphic + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy(&g->out[pi * 4], &two_back[pi * 4], 4); + } + } + } else if (dispose == 2) { + // restore what was changed last frame to background before that frame; + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy(&g->out[pi * 4], &g->background[pi * 4], 4); + } + } + } else { + // This is a non-disposal case eithe way, so just + // leave the pixels as is, and they will become the new background + // 1: do not dispose + // 0: not specified. + } + + // background is what out is after the undoing of the previou frame; + memcpy(g->background, g->out, 4 * g->w * g->h); + } + + // clear my history; + memset(g->history, 0x00, g->w * g->h); // pixels that were affected previous frame + + for (;;) { + int tag = stbi__get8(s); + switch (tag) { + case 0x2C: /* Image Descriptor */ + { + stbi__int32 x, y, w, h; + stbi_uc* o; + + x = stbi__get16le(s); + y = stbi__get16le(s); + w = stbi__get16le(s); + h = stbi__get16le(s); + if (((x + w) > (g->w)) || ((y + h) > (g->h))) + return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); + + g->line_size = g->w * 4; + g->start_x = x * 4; + g->start_y = y * g->line_size; + g->max_x = g->start_x + w * 4; + g->max_y = g->start_y + h * g->line_size; + g->cur_x = g->start_x; + g->cur_y = g->start_y; + + // if the width of the specified rectangle is 0, that means + // we may not see *any* pixels or the image is malformed; + // to make sure this is caught, move the current y down to + // max_y (which is what out_gif_code checks). + if (w == 0) + g->cur_y = g->max_y; + + g->lflags = stbi__get8(s); + + if (g->lflags & 0x40) { + g->step = 8 * g->line_size; // first interlaced spacing + g->parse = 3; + } else { + g->step = g->line_size; + g->parse = 0; + } + + if (g->lflags & 0x80) { + stbi__gif_parse_colortable(s, g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); + g->color_table = (stbi_uc*)g->lpal; + } else if (g->flags & 0x80) { + g->color_table = (stbi_uc*)g->pal; + } else + return stbi__errpuc("missing color table", "Corrupt GIF"); + + o = stbi__process_gif_raster(s, g); + if (!o) + return NULL; + + // if this was the first frame, + pcount = g->w * g->h; + if (first_frame && (g->bgindex > 0)) { + // if first frame, any pixel not drawn to gets the background color + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi] == 0) { + g->pal[g->bgindex][3] = 255; // just in case it was made transparent, undo that; It will be reset next frame if need be; + memcpy(&g->out[pi * 4], &g->pal[g->bgindex], 4); + } + } + } + + return o; + } + + case 0x21: // Comment Extension. + { + int len; + int ext = stbi__get8(s); + if (ext == 0xF9) { // Graphic Control Extension. + len = stbi__get8(s); + if (len == 4) { + g->eflags = stbi__get8(s); + g->delay = 10 * stbi__get16le(s); // delay - 1/100th of a second, saving as 1/1000ths. + + // unset old transparent + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 255; + } + if (g->eflags & 0x01) { + g->transparent = stbi__get8(s); + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 0; + } + } else { + // don't need transparent + stbi__skip(s, 1); + g->transparent = -1; + } + } else { + stbi__skip(s, len); + break; + } + } + while ((len = stbi__get8(s)) != 0) { + stbi__skip(s, len); + } + break; + } + + case 0x3B: // gif stream termination code + return (stbi_uc*)s; // using '1' causes warning on some compilers + + default: + return stbi__errpuc("unknown code", "Corrupt GIF"); + } + } +} + +static void* stbi__load_gif_main_outofmem(stbi__gif* g, stbi_uc* out, int** delays) +{ + STBI_FREE(g->out); + STBI_FREE(g->history); + STBI_FREE(g->background); + + if (out) + STBI_FREE(out); + if (delays && *delays) + STBI_FREE(*delays); + return stbi__errpuc("outofmem", "Out of memory"); +} + +static void* stbi__load_gif_main(stbi__context* s, int** delays, int* x, int* y, int* z, int* comp, int req_comp) +{ + if (stbi__gif_test(s)) { + int layers = 0; + stbi_uc* u = 0; + stbi_uc* out = 0; + stbi_uc* two_back = 0; + stbi__gif g; + int stride; + int out_size = 0; + int delays_size = 0; + + STBI_NOTUSED(out_size); + STBI_NOTUSED(delays_size); + + memset(&g, 0, sizeof(g)); + if (delays) { + *delays = 0; + } + + do { + u = stbi__gif_load_next(s, &g, comp, req_comp, two_back); + if (u == (stbi_uc*)s) + u = 0; // end of animated gif marker + + if (u) { + *x = g.w; + *y = g.h; + ++layers; + stride = g.w * g.h * 4; + + if (out) { + void* tmp = (stbi_uc*)STBI_REALLOC_SIZED(out, out_size, layers * stride); + if (!tmp) + return stbi__load_gif_main_outofmem(&g, out, delays); + else { + out = (stbi_uc*)tmp; + out_size = layers * stride; + } + + if (delays) { + int* new_delays = (int*)STBI_REALLOC_SIZED(*delays, delays_size, sizeof(int) * layers); + if (!new_delays) + return stbi__load_gif_main_outofmem(&g, out, delays); + *delays = new_delays; + delays_size = layers * sizeof(int); + } + } else { + out = (stbi_uc*)stbi__malloc(layers * stride); + if (!out) + return stbi__load_gif_main_outofmem(&g, out, delays); + out_size = layers * stride; + if (delays) { + *delays = (int*)stbi__malloc(layers * sizeof(int)); + if (!*delays) + return stbi__load_gif_main_outofmem(&g, out, delays); + delays_size = layers * sizeof(int); + } + } + memcpy(out + ((layers - 1) * stride), u, stride); + if (layers >= 2) { + two_back = out - 2 * stride; + } + + if (delays) { + (*delays)[layers - 1U] = g.delay; + } + } + } while (u != 0); + + // free temp buffer; + STBI_FREE(g.out); + STBI_FREE(g.history); + STBI_FREE(g.background); + + // do the final conversion after loading everything; + if (req_comp && req_comp != 4) + out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h); + + *z = layers; + return out; + } else { + return stbi__errpuc("not GIF", "Image was not as a gif type."); + } +} + +static void* stbi__gif_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) +{ + stbi_uc* u = 0; + stbi__gif g; + memset(&g, 0, sizeof(g)); + STBI_NOTUSED(ri); + + u = stbi__gif_load_next(s, &g, comp, req_comp, 0); + if (u == (stbi_uc*)s) + u = 0; // end of animated gif marker + if (u) { + *x = g.w; + *y = g.h; + + // moved conversion to after successful load so that the same + // can be done for multiple frames. + if (req_comp && req_comp != 4) + u = stbi__convert_format(u, 4, req_comp, g.w, g.h); + } else if (g.out) { + // if there was an error and we allocated an image buffer, free it! + STBI_FREE(g.out); + } + + // free buffers needed for multiple frame loading; + STBI_FREE(g.history); + STBI_FREE(g.background); + + return u; +} + +static int stbi__gif_info(stbi__context* s, int* x, int* y, int* comp) +{ + return stbi__gif_info_raw(s, x, y, comp); +} +# endif + +// ************************************************************************************************* +// Radiance RGBE HDR loader +// originally by Nicolas Schulz +# ifndef STBI_NO_HDR +static int stbi__hdr_test_core(stbi__context* s, char const* signature) +{ + int i; + for (i = 0; signature[i]; ++i) + if (stbi__get8(s) != signature[i]) + return 0; + stbi__rewind(s); + return 1; +} + +static int stbi__hdr_test(stbi__context* s) +{ + int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); + stbi__rewind(s); + if (!r) { + r = stbi__hdr_test_core(s, "#?RGBE\n"); + stbi__rewind(s); + } + return r; +} + +# define STBI__HDR_BUFLEN 1024 +static char* stbi__hdr_gettoken(stbi__context* z, char* buffer) +{ + int len = 0; + char c = '\0'; + + c = (char)stbi__get8(z); + + while (!stbi__at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == STBI__HDR_BUFLEN - 1) { + // flush to end of line + while (!stbi__at_eof(z) && stbi__get8(z) != '\n') + ; + break; + } + c = (char)stbi__get8(z); + } + + buffer[len] = 0; + return buffer; +} + +static void stbi__hdr_convert(float* output, stbi_uc* input, int req_comp) +{ + if (input[3] != 0) { + float f1; + // Exponent + f1 = (float)ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) + output[1] = 1; + if (req_comp == 4) + output[3] = 1; + } else { + switch (req_comp) { + case 4: + output[3] = 1; /* fallthrough */ + case 3: + output[0] = output[1] = output[2] = 0; + break; + case 2: + output[1] = 1; /* fallthrough */ + case 1: + output[0] = 0; + break; + } + } +} + +static float* stbi__hdr_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) +{ + char buffer[STBI__HDR_BUFLEN]; + char* token; + int valid = 0; + int width, height; + stbi_uc* scanline; + float* hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1, c2, z; + char const* headerToken; + STBI_NOTUSED(ri); + + // Check identifier + headerToken = stbi__hdr_gettoken(s, buffer); + if (strcmp(headerToken, "#?RADIANCE") != 0 && strcmp(headerToken, "#?RGBE") != 0) + return stbi__errpf("not HDR", "Corrupt HDR image"); + + // Parse header + for (;;) { + token = stbi__hdr_gettoken(s, buffer); + if (token[0] == 0) + break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) + valid = 1; + } + + if (!valid) + return stbi__errpf("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = stbi__hdr_gettoken(s, buffer); + if (strncmp(token, "-Y ", 3)) + return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = (int)strtol(token, &token, 10); + while (*token == ' ') + ++token; + if (strncmp(token, "+X ", 3)) + return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = (int)strtol(token, NULL, 10); + + if (height > STBI_MAX_DIMENSIONS) + return stbi__errpf("too large", "Very large image (corrupt?)"); + if (width > STBI_MAX_DIMENSIONS) + return stbi__errpf("too large", "Very large image (corrupt?)"); + + *x = width; + *y = height; + + if (comp) + *comp = 3; + if (req_comp == 0) + req_comp = 3; + + if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) + return stbi__errpf("too large", "HDR image is too large"); + + // Read data + hdr_data = (float*)stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0); + if (!hdr_data) + return stbi__errpf("outofmem", "Out of memory"); + + // Load image data + // image data is stored as some number of sca + if (width < 8 || width >= 32768) { + // Read flat data + for (j = 0; j < height; ++j) { + for (i = 0; i < width; ++i) { + stbi_uc rgbe[4]; + main_decode_loop: + stbi__getn(s, rgbe, 4); + stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); + } + } + } else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = stbi__get8(s); + c2 = stbi__get8(s); + len = stbi__get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + stbi_uc rgbe[4]; + rgbe[0] = (stbi_uc)c1; + rgbe[1] = (stbi_uc)c2; + rgbe[2] = (stbi_uc)len; + rgbe[3] = (stbi_uc)stbi__get8(s); + stbi__hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + STBI_FREE(scanline); + goto main_decode_loop; // yes, this makes no sense + } + len <<= 8; + len |= stbi__get8(s); + if (len != width) { + STBI_FREE(hdr_data); + STBI_FREE(scanline); + return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); + } + if (scanline == NULL) { + scanline = (stbi_uc*)stbi__malloc_mad2(width, 4, 0); + if (!scanline) { + STBI_FREE(hdr_data); + return stbi__errpf("outofmem", "Out of memory"); + } + } + + for (k = 0; k < 4; ++k) { + int nleft; + i = 0; + while ((nleft = width - i) > 0) { + count = stbi__get8(s); + if (count > 128) { + // Run + value = stbi__get8(s); + count -= 128; + if ((count == 0) || (count > nleft)) { + STBI_FREE(hdr_data); + STBI_FREE(scanline); + return stbi__errpf("corrupt", "bad RLE data in HDR"); + } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } else { + // Dump + if ((count == 0) || (count > nleft)) { + STBI_FREE(hdr_data); + STBI_FREE(scanline); + return stbi__errpf("corrupt", "bad RLE data in HDR"); + } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = stbi__get8(s); + } + } + } + for (i = 0; i < width; ++i) + stbi__hdr_convert(hdr_data + (j * width + i) * req_comp, scanline + i * 4, req_comp); + } + if (scanline) + STBI_FREE(scanline); + } + + return hdr_data; +} + +static int stbi__hdr_info(stbi__context* s, int* x, int* y, int* comp) +{ + char buffer[STBI__HDR_BUFLEN]; + char* token; + int valid = 0; + int dummy; + + if (!x) + x = &dummy; + if (!y) + y = &dummy; + if (!comp) + comp = &dummy; + + if (stbi__hdr_test(s) == 0) { + stbi__rewind(s); + return 0; + } + + for (;;) { + token = stbi__hdr_gettoken(s, buffer); + if (token[0] == 0) + break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) + valid = 1; + } + + if (!valid) { + stbi__rewind(s); + return 0; + } + token = stbi__hdr_gettoken(s, buffer); + if (strncmp(token, "-Y ", 3)) { + stbi__rewind(s); + return 0; + } + token += 3; + *y = (int)strtol(token, &token, 10); + while (*token == ' ') + ++token; + if (strncmp(token, "+X ", 3)) { + stbi__rewind(s); + return 0; + } + token += 3; + *x = (int)strtol(token, NULL, 10); + *comp = 3; + return 1; +} +# endif // STBI_NO_HDR + +# ifndef STBI_NO_BMP +static int stbi__bmp_info(stbi__context* s, int* x, int* y, int* comp) +{ + void* p; + stbi__bmp_data info; + + info.all_a = 255; + p = stbi__bmp_parse_header(s, &info); + if (p == NULL) { + stbi__rewind(s); + return 0; + } + if (x) + *x = s->img_x; + if (y) + *y = s->img_y; + if (comp) { + if (info.bpp == 24 && info.ma == 0xff000000) + *comp = 3; + else + *comp = info.ma ? 4 : 3; + } + return 1; +} +# endif + +# ifndef STBI_NO_PSD +static int stbi__psd_info(stbi__context* s, int* x, int* y, int* comp) +{ + int channelCount, dummy, depth; + if (!x) + x = &dummy; + if (!y) + y = &dummy; + if (!comp) + comp = &dummy; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind(s); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind(s); + return 0; + } + *y = stbi__get32be(s); + *x = stbi__get32be(s); + depth = stbi__get16be(s); + if (depth != 8 && depth != 16) { + stbi__rewind(s); + return 0; + } + if (stbi__get16be(s) != 3) { + stbi__rewind(s); + return 0; + } + *comp = 4; + return 1; +} + +static int stbi__psd_is16(stbi__context* s) +{ + int channelCount, depth; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind(s); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind(s); + return 0; + } + STBI_NOTUSED(stbi__get32be(s)); + STBI_NOTUSED(stbi__get32be(s)); + depth = stbi__get16be(s); + if (depth != 16) { + stbi__rewind(s); + return 0; + } + return 1; +} +# endif + +# ifndef STBI_NO_PIC +static int stbi__pic_info(stbi__context* s, int* x, int* y, int* comp) +{ + int act_comp = 0, num_packets = 0, chained, dummy; + stbi__pic_packet packets[10]; + + if (!x) + x = &dummy; + if (!y) + y = &dummy; + if (!comp) + comp = &dummy; + + if (!stbi__pic_is4(s, "\x53\x80\xF6\x34")) { + stbi__rewind(s); + return 0; + } + + stbi__skip(s, 88); + + *x = stbi__get16be(s); + *y = stbi__get16be(s); + if (stbi__at_eof(s)) { + stbi__rewind(s); + return 0; + } + if ((*x) != 0 && (1 << 28) / (*x) < (*y)) { + stbi__rewind(s); + return 0; + } + + stbi__skip(s, 8); + + do { + stbi__pic_packet* packet; + + if (num_packets == sizeof(packets) / sizeof(packets[0])) + return 0; + + packet = &packets[num_packets++]; + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + act_comp |= packet->channel; + + if (stbi__at_eof(s)) { + stbi__rewind(s); + return 0; + } + if (packet->size != 8) { + stbi__rewind(s); + return 0; + } + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); + + return 1; +} +# endif + +// ************************************************************************************************* +// Portable Gray Map and Portable Pixel Map loader +// by Ken Miller +// +// PGM: http://netpbm.sourceforge.net/doc/pgm.html +// PPM: http://netpbm.sourceforge.net/doc/ppm.html +// +// Known limitations: +// Does not support comments in the header section +// Does not support ASCII image data (formats P2 and P3) + +# ifndef STBI_NO_PNM + +static int stbi__pnm_test(stbi__context* s) +{ + char p, t; + p = (char)stbi__get8(s); + t = (char)stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; + } + return 1; +} + +static void* stbi__pnm_load(stbi__context* s, int* x, int* y, int* comp, int req_comp, stbi__result_info* ri) +{ + stbi_uc* out; + STBI_NOTUSED(ri); + + ri->bits_per_channel = stbi__pnm_info(s, (int*)&s->img_x, (int*)&s->img_y, (int*)&s->img_n); + if (ri->bits_per_channel == 0) + return 0; + + if (s->img_y > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) + return stbi__errpuc("too large", "Very large image (corrupt?)"); + + *x = s->img_x; + *y = s->img_y; + if (comp) + *comp = s->img_n; + + if (!stbi__mad4sizes_valid(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0)) + return stbi__errpuc("too large", "PNM too large"); + + out = (stbi_uc*)stbi__malloc_mad4(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0); + if (!out) + return stbi__errpuc("outofmem", "Out of memory"); + if (!stbi__getn(s, out, s->img_n * s->img_x * s->img_y * (ri->bits_per_channel / 8))) { + STBI_FREE(out); + return stbi__errpuc("bad PNM", "PNM file truncated"); + } + + if (req_comp && req_comp != s->img_n) { + if (ri->bits_per_channel == 16) { + out = (stbi_uc*)stbi__convert_format16((stbi__uint16*)out, s->img_n, req_comp, s->img_x, s->img_y); + } else { + out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); + } + if (out == NULL) + return out; // stbi__convert_format frees input on failure + } + return out; +} + +static int stbi__pnm_isspace(char c) +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; +} + +static void stbi__pnm_skip_whitespace(stbi__context* s, char* c) +{ + for (;;) { + while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) + *c = (char)stbi__get8(s); + + if (stbi__at_eof(s) || *c != '#') + break; + + while (!stbi__at_eof(s) && *c != '\n' && *c != '\r') + *c = (char)stbi__get8(s); + } +} + +static int stbi__pnm_isdigit(char c) +{ + return c >= '0' && c <= '9'; +} + +static int stbi__pnm_getinteger(stbi__context* s, char* c) +{ + int value = 0; + + while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { + value = value * 10 + (*c - '0'); + *c = (char)stbi__get8(s); + if ((value > 214748364) || (value == 214748364 && *c > '7')) + return stbi__err("integer parse overflow", "Parsing an integer in the PPM header overflowed a 32-bit int"); + } + + return value; +} + +static int stbi__pnm_info(stbi__context* s, int* x, int* y, int* comp) +{ + int maxv, dummy; + char c, p, t; + + if (!x) + x = &dummy; + if (!y) + y = &dummy; + if (!comp) + comp = &dummy; + + stbi__rewind(s); + + // Get identifier + p = (char)stbi__get8(s); + t = (char)stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; + } + + *comp = (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm + + c = (char)stbi__get8(s); + stbi__pnm_skip_whitespace(s, &c); + + *x = stbi__pnm_getinteger(s, &c); // read width + if (*x == 0) + return stbi__err("invalid width", "PPM image header had zero or overflowing width"); + stbi__pnm_skip_whitespace(s, &c); + + *y = stbi__pnm_getinteger(s, &c); // read height + if (*y == 0) + return stbi__err("invalid width", "PPM image header had zero or overflowing width"); + stbi__pnm_skip_whitespace(s, &c); + + maxv = stbi__pnm_getinteger(s, &c); // read max value + if (maxv > 65535) + return stbi__err("max value > 65535", "PPM image supports only 8-bit and 16-bit images"); + else if (maxv > 255) + return 16; + else + return 8; +} + +static int stbi__pnm_is16(stbi__context* s) +{ + if (stbi__pnm_info(s, NULL, NULL, NULL) == 16) + return 1; + return 0; +} +# endif + +static int stbi__info_main(stbi__context* s, int* x, int* y, int* comp) +{ +# ifndef STBI_NO_JPEG + if (stbi__jpeg_info(s, x, y, comp)) + return 1; +# endif + +# ifndef STBI_NO_PNG + if (stbi__png_info(s, x, y, comp)) + return 1; +# endif + +# ifndef STBI_NO_GIF + if (stbi__gif_info(s, x, y, comp)) + return 1; +# endif + +# ifndef STBI_NO_BMP + if (stbi__bmp_info(s, x, y, comp)) + return 1; +# endif + +# ifndef STBI_NO_PSD + if (stbi__psd_info(s, x, y, comp)) + return 1; +# endif + +# ifndef STBI_NO_PIC + if (stbi__pic_info(s, x, y, comp)) + return 1; +# endif + +# ifndef STBI_NO_PNM + if (stbi__pnm_info(s, x, y, comp)) + return 1; +# endif + +# ifndef STBI_NO_HDR + if (stbi__hdr_info(s, x, y, comp)) + return 1; +# endif + +// test tga last because it's a crappy test! +# ifndef STBI_NO_TGA + if (stbi__tga_info(s, x, y, comp)) + return 1; +# endif + return stbi__err("unknown image type", "Image not of any known type, or corrupt"); +} + +static int stbi__is_16_main(stbi__context* s) +{ +# ifndef STBI_NO_PNG + if (stbi__png_is16(s)) + return 1; +# endif + +# ifndef STBI_NO_PSD + if (stbi__psd_is16(s)) + return 1; +# endif + +# ifndef STBI_NO_PNM + if (stbi__pnm_is16(s)) + return 1; +# endif + return 0; +} + +# ifndef STBI_NO_STDIO +STBIDEF int stbi_info(char const* filename, int* x, int* y, int* comp) +{ + FILE* f = stbi__fopen(filename, "rb"); + int result; + if (!f) + return stbi__err("can't fopen", "Unable to open file"); + result = stbi_info_from_file(f, x, y, comp); + fclose(f); + return result; +} + +STBIDEF int stbi_info_from_file(FILE* f, int* x, int* y, int* comp) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__info_main(&s, x, y, comp); + fseek(f, pos, SEEK_SET); + return r; +} + +STBIDEF int stbi_is_16_bit(char const* filename) +{ + FILE* f = stbi__fopen(filename, "rb"); + int result; + if (!f) + return stbi__err("can't fopen", "Unable to open file"); + result = stbi_is_16_bit_from_file(f); + fclose(f); + return result; +} + +STBIDEF int stbi_is_16_bit_from_file(FILE* f) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__is_16_main(&s); + fseek(f, pos, SEEK_SET); + return r; +} +# endif // !STBI_NO_STDIO + +STBIDEF int stbi_info_from_memory(stbi_uc const* buffer, int len, int* x, int* y, int* comp) +{ + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__info_main(&s, x, y, comp); +} + +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const* c, void* user, int* x, int* y, int* comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks*)c, user); + return stbi__info_main(&s, x, y, comp); +} + +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const* buffer, int len) +{ + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__is_16_main(&s); +} + +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const* c, void* user) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks*)c, user); + return stbi__is_16_main(&s); +} + +#endif // STB_IMAGE_IMPLEMENTATION + +/* + revision history: + 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs + 2.19 (2018-02-11) fix warning + 2.18 (2018-01-30) fix warnings + 2.17 (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug + 1-bit BMP + *_is_16_bit api + avoid warnings + 2.16 (2017-07-23) all functions have 16-bit variants; + STBI_NO_STDIO works again; + compilation fixes; + fix rounding in unpremultiply; + optimize vertical flip; + disable raw_len validation; + documentation fixes + 2.15 (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode; + warning fixes; disable run-time SSE detection on gcc; + uniform handling of optional "return" values; + thread-safe initialization of zlib tables + 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs + 2.13 (2016-11-29) add 16-bit API, only supported for PNG right now + 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes + 2.11 (2016-04-02) allocate large structures on the stack + remove white matting for transparent PSD + fix reported channel count for PNG & BMP + re-enable SSE2 in non-gcc 64-bit + support RGB-formatted JPEG + read 16-bit PNGs (only as 8-bit) + 2.10 (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED + 2.09 (2016-01-16) allow comments in PNM files + 16-bit-per-pixel TGA (not bit-per-component) + info() for TGA could break due to .hdr handling + info() for BMP to shares code instead of sloppy parse + can use STBI_REALLOC_SIZED if allocator doesn't support realloc + code cleanup + 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA + 2.07 (2015-09-13) fix compiler warnings + partial animated GIF support + limited 16-bpc PSD support + #ifdef unused functions + bug with < 92 byte PIC,PNM,HDR,TGA + 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value + 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning + 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit + 2.03 (2015-04-12) extra corruption checking (mmozeiko) + stbi_set_flip_vertically_on_load (nguillemot) + fix NEON support; fix mingw support + 2.02 (2015-01-19) fix incorrect assert, fix warning + 2.01 (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2 + 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG + 2.00 (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg) + progressive JPEG (stb) + PGM/PPM support (Ken Miller) + STBI_MALLOC,STBI_REALLOC,STBI_FREE + GIF bugfix -- seemingly never worked + STBI_NO_*, STBI_ONLY_* + 1.48 (2014-12-14) fix incorrectly-named assert() + 1.47 (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb) + optimize PNG (ryg) + fix bug in interlaced PNG with user-specified channel count (stb) + 1.46 (2014-08-26) + fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG + 1.45 (2014-08-16) + fix MSVC-ARM internal compiler error by wrapping malloc + 1.44 (2014-08-07) + various warning fixes from Ronny Chevalier + 1.43 (2014-07-15) + fix MSVC-only compiler problem in code changed in 1.42 + 1.42 (2014-07-09) + don't define _CRT_SECURE_NO_WARNINGS (affects user code) + fixes to stbi__cleanup_jpeg path + added STBI_ASSERT to avoid requiring assert.h + 1.41 (2014-06-25) + fix search&replace from 1.36 that messed up comments/error messages + 1.40 (2014-06-22) + fix gcc struct-initialization warning + 1.39 (2014-06-15) + fix to TGA optimization when req_comp != number of components in TGA; + fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite) + add support for BMP version 5 (more ignored fields) + 1.38 (2014-06-06) + suppress MSVC warnings on integer casts truncating values + fix accidental rename of 'skip' field of I/O + 1.37 (2014-06-04) + remove duplicate typedef + 1.36 (2014-06-03) + convert to header file single-file library + if de-iphone isn't set, load iphone images color-swapped instead of returning NULL + 1.35 (2014-05-27) + various warnings + fix broken STBI_SIMD path + fix bug where stbi_load_from_file no longer left file pointer in correct place + fix broken non-easy path for 32-bit BMP (possibly never used) + TGA optimization by Arseny Kapoulkine + 1.34 (unknown) + use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case + 1.33 (2011-07-14) + make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements + 1.32 (2011-07-13) + support for "info" function for all supported filetypes (SpartanJ) + 1.31 (2011-06-20) + a few more leak fixes, bug in PNG handling (SpartanJ) + 1.30 (2011-06-11) + added ability to load files via callbacks to accomidate custom input streams (Ben Wenger) + removed deprecated format-specific test/load functions + removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway + error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha) + fix inefficiency in decoding 32-bit BMP (David Woo) + 1.29 (2010-08-16) + various warning fixes from Aurelien Pocheville + 1.28 (2010-08-01) + fix bug in GIF palette transparency (SpartanJ) + 1.27 (2010-08-01) + cast-to-stbi_uc to fix warnings + 1.26 (2010-07-24) + fix bug in file buffering for PNG reported by SpartanJ + 1.25 (2010-07-17) + refix trans_data warning (Won Chun) + 1.24 (2010-07-12) + perf improvements reading from files on platforms with lock-heavy fgetc() + minor perf improvements for jpeg + deprecated type-specific functions so we'll get feedback if they're needed + attempt to fix trans_data warning (Won Chun) + 1.23 fixed bug in iPhone support + 1.22 (2010-07-10) + removed image *writing* support + stbi_info support from Jetro Lauha + GIF support from Jean-Marc Lienher + iPhone PNG-extensions from James Brown + warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva) + 1.21 fix use of 'stbi_uc' in header (reported by jon blow) + 1.20 added support for Softimage PIC, by Tom Seddon + 1.19 bug in interlaced PNG corruption check (found by ryg) + 1.18 (2008-08-02) + fix a threading bug (local mutable static) + 1.17 support interlaced PNG + 1.16 major bugfix - stbi__convert_format converted one too many pixels + 1.15 initialize some fields for thread safety + 1.14 fix threadsafe conversion bug + header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance calc + 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free + 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR + 1.02 support for (subset of) HDR files, float interface for preferred access to them + 1.01 fix bug: possible bug in handling right-side up bmps... not sure + fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all + 1.00 interface to zlib that skips zlib header + 0.99 correct handling of alpha in palette + 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available + 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant + 0.50 (2006-11-19) + first released version +*/ + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ diff --git a/src/image/stb_image_write.h b/src/image/stb_image_write.h new file mode 100644 index 0000000..6ed3dd8 --- /dev/null +++ b/src/image/stb_image_write.h @@ -0,0 +1,1807 @@ +/* stb_image_write - v1.16 - public domain - http://nothings.org/stb + writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015 + no warranty implied; use at your own risk + + Before #including, + + #define STB_IMAGE_WRITE_IMPLEMENTATION + + in the file that you want to have the implementation. + + Will probably not work correctly with strict-aliasing optimizations. + +ABOUT: + + This header file is a library for writing images to C stdio or a callback. + + The PNG output is not optimal; it is 20-50% larger than the file + written by a decent optimizing implementation; though providing a custom + zlib compress function (see STBIW_ZLIB_COMPRESS) can mitigate that. + This library is designed for source code compactness and simplicity, + not optimal image file size or run-time performance. + +BUILDING: + + You can #define STBIW_ASSERT(x) before the #include to avoid using assert.h. + You can #define STBIW_MALLOC(), STBIW_REALLOC(), and STBIW_FREE() to replace + malloc,realloc,free. + You can #define STBIW_MEMMOVE() to replace memmove() + You can #define STBIW_ZLIB_COMPRESS to use a custom zlib-style compress function + for PNG compression (instead of the builtin one), it must have the following signature: + unsigned char * my_compress(unsigned char *data, int data_len, int *out_len, int quality); + The returned data will be freed with STBIW_FREE() (free() by default), + so it must be heap allocated with STBIW_MALLOC() (malloc() by default), + +UNICODE: + + If compiling for Windows and you wish to use Unicode filenames, compile + with + #define STBIW_WINDOWS_UTF8 + and pass utf8-encoded filenames. Call stbiw_convert_wchar_to_utf8 to convert + Windows wchar_t filenames to utf8. + +USAGE: + + There are five functions, one for each image file format: + + int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); + int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data); + int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data); + int stbi_write_jpg(char const *filename, int w, int h, int comp, const void *data, int quality); + int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data); + + void stbi_flip_vertically_on_write(int flag); // flag is non-zero to flip data vertically + + There are also five equivalent functions that use an arbitrary write function. You are + expected to open/close your file-equivalent before and after calling these: + + int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes); + int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); + int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); + int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data); + int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality); + + where the callback is: + void stbi_write_func(void *context, void *data, int size); + + You can configure it with these global variables: + int stbi_write_tga_with_rle; // defaults to true; set to 0 to disable RLE + int stbi_write_png_compression_level; // defaults to 8; set to higher for more compression + int stbi_write_force_png_filter; // defaults to -1; set to 0..5 to force a filter mode + + + You can define STBI_WRITE_NO_STDIO to disable the file variant of these + functions, so the library will not use stdio.h at all. However, this will + also disable HDR writing, because it requires stdio for formatted output. + + Each function returns 0 on failure and non-0 on success. + + The functions create an image file defined by the parameters. The image + is a rectangle of pixels stored from left-to-right, top-to-bottom. + Each pixel contains 'comp' channels of data stored interleaved with 8-bits + per channel, in the following order: 1=Y, 2=YA, 3=RGB, 4=RGBA. (Y is + monochrome color.) The rectangle is 'w' pixels wide and 'h' pixels tall. + The *data pointer points to the first byte of the top-left-most pixel. + For PNG, "stride_in_bytes" is the distance in bytes from the first byte of + a row of pixels to the first byte of the next row of pixels. + + PNG creates output files with the same number of components as the input. + The BMP format expands Y to RGB in the file format and does not + output alpha. + + PNG supports writing rectangles of data even when the bytes storing rows of + data are not consecutive in memory (e.g. sub-rectangles of a larger image), + by supplying the stride between the beginning of adjacent rows. The other + formats do not. (Thus you cannot write a native-format BMP through the BMP + writer, both because it is in BGR order and because it may have padding + at the end of the line.) + + PNG allows you to set the deflate compression level by setting the global + variable 'stbi_write_png_compression_level' (it defaults to 8). + + HDR expects linear float data. Since the format is always 32-bit rgb(e) + data, alpha (if provided) is discarded, and for monochrome data it is + replicated across all three channels. + + TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed + data, set the global variable 'stbi_write_tga_with_rle' to 0. + + JPEG does ignore alpha channels in input data; quality is between 1 and 100. + Higher quality looks better but results in a bigger image. + JPEG baseline (no JPEG progressive). + +CREDITS: + + + Sean Barrett - PNG/BMP/TGA + Baldur Karlsson - HDR + Jean-Sebastien Guay - TGA monochrome + Tim Kelsey - misc enhancements + Alan Hickman - TGA RLE + Emmanuel Julien - initial file IO callback implementation + Jon Olick - original jo_jpeg.cpp code + Daniel Gibson - integrate JPEG, allow external zlib + Aarni Koskela - allow choosing PNG filter + + bugfixes: + github:Chribba + Guillaume Chereau + github:jry2 + github:romigrou + Sergio Gonzalez + Jonas Karlsson + Filip Wasil + Thatcher Ulrich + github:poppolopoppo + Patrick Boettcher + github:xeekworx + Cap Petschulat + Simon Rodriguez + Ivan Tikhonov + github:ignotion + Adam Schackart + Andrew Kensler + +LICENSE + + See end of file for license information. + +*/ + +#ifndef INCLUDE_STB_IMAGE_WRITE_H +# define INCLUDE_STB_IMAGE_WRITE_H + +# include <stdlib.h> + +// if STB_IMAGE_WRITE_STATIC causes problems, try defining STBIWDEF to 'inline' or 'static inline' +# ifndef STBIWDEF +# ifdef STB_IMAGE_WRITE_STATIC +# define STBIWDEF static +# else +# ifdef __cplusplus +# define STBIWDEF extern "C" +# else +# define STBIWDEF extern +# endif +# endif +# endif + +# ifndef STB_IMAGE_WRITE_STATIC // C++ forbids static forward declarations +STBIWDEF int stbi_write_tga_with_rle; +STBIWDEF int stbi_write_png_compression_level; +STBIWDEF int stbi_write_force_png_filter; +# endif + +# ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_png(char const* filename, int w, int h, int comp, void const* data, int stride_in_bytes); +STBIWDEF int stbi_write_bmp(char const* filename, int w, int h, int comp, void const* data); +STBIWDEF int stbi_write_tga(char const* filename, int w, int h, int comp, void const* data); +STBIWDEF int stbi_write_hdr(char const* filename, int w, int h, int comp, float const* data); +STBIWDEF int stbi_write_jpg(char const* filename, int x, int y, int comp, void const* data, int quality); + +# ifdef STBIW_WINDOWS_UTF8 +STBIWDEF int stbiw_convert_wchar_to_utf8(char* buffer, size_t bufferlen, wchar_t const* input); +# endif +# endif + +typedef void stbi_write_func(void* context, void* data, int size); + +STBIWDEF int stbi_write_png_to_func(stbi_write_func* func, void* context, int w, int h, int comp, void const* data, int stride_in_bytes); +STBIWDEF int stbi_write_bmp_to_func(stbi_write_func* func, void* context, int w, int h, int comp, void const* data); +STBIWDEF int stbi_write_tga_to_func(stbi_write_func* func, void* context, int w, int h, int comp, void const* data); +STBIWDEF int stbi_write_hdr_to_func(stbi_write_func* func, void* context, int w, int h, int comp, float const* data); +STBIWDEF int stbi_write_jpg_to_func(stbi_write_func* func, void* context, int x, int y, int comp, void const* data, int quality); + +STBIWDEF void stbi_flip_vertically_on_write(int flip_boolean); + +#endif // INCLUDE_STB_IMAGE_WRITE_H + +#ifdef STB_IMAGE_WRITE_IMPLEMENTATION + +# ifdef _WIN32 +# ifndef _CRT_SECURE_NO_WARNINGS +# define _CRT_SECURE_NO_WARNINGS +# endif +# ifndef _CRT_NONSTDC_NO_DEPRECATE +# define _CRT_NONSTDC_NO_DEPRECATE +# endif +# endif + +# ifndef STBI_WRITE_NO_STDIO +# include <stdio.h> +# endif // STBI_WRITE_NO_STDIO + +# include <math.h> +# include <stdarg.h> +# include <stdlib.h> +# include <string.h> + +# if defined(STBIW_MALLOC) && defined(STBIW_FREE) && (defined(STBIW_REALLOC) || defined(STBIW_REALLOC_SIZED)) +// ok +# elif !defined(STBIW_MALLOC) && !defined(STBIW_FREE) && !defined(STBIW_REALLOC) && !defined(STBIW_REALLOC_SIZED) +// ok +# else +# error "Must define all or none of STBIW_MALLOC, STBIW_FREE, and STBIW_REALLOC (or STBIW_REALLOC_SIZED)." +# endif + +# ifndef STBIW_MALLOC +# define STBIW_MALLOC(sz) malloc(sz) +# define STBIW_REALLOC(p, newsz) realloc(p, newsz) +# define STBIW_FREE(p) free(p) +# endif + +# ifndef STBIW_REALLOC_SIZED +# define STBIW_REALLOC_SIZED(p, oldsz, newsz) STBIW_REALLOC(p, newsz) +# endif + +# ifndef STBIW_MEMMOVE +# define STBIW_MEMMOVE(a, b, sz) memmove(a, b, sz) +# endif + +# ifndef STBIW_ASSERT +# include <assert.h> +# define STBIW_ASSERT(x) assert(x) +# endif + +# define STBIW_UCHAR(x) (unsigned char)((x) & 0xff) + +# ifdef STB_IMAGE_WRITE_STATIC +static int stbi_write_png_compression_level = 8; +static int stbi_write_tga_with_rle = 1; +static int stbi_write_force_png_filter = -1; +# else +int stbi_write_png_compression_level = 8; +int stbi_write_tga_with_rle = 1; +int stbi_write_force_png_filter = -1; +# endif + +static int stbi__flip_vertically_on_write = 0; + +STBIWDEF void stbi_flip_vertically_on_write(int flag) +{ + stbi__flip_vertically_on_write = flag; +} + +typedef struct +{ + stbi_write_func* func; + void* context; + unsigned char buffer[64]; + int buf_used; +} stbi__write_context; + +// initialize a callback-based context +static void stbi__start_write_callbacks(stbi__write_context* s, stbi_write_func* c, void* context) +{ + s->func = c; + s->context = context; +} + +# ifndef STBI_WRITE_NO_STDIO + +static void stbi__stdio_write(void* context, void* data, int size) +{ + fwrite(data, 1, size, (FILE*)context); +} + +# if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8) +# ifdef __cplusplus +# define STBIW_EXTERN extern "C" +# else +# define STBIW_EXTERN extern +# endif +STBIW_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, char const* str, int cbmb, wchar_t* widestr, int cchwide); +STBIW_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, wchar_t const* widestr, int cchwide, char* str, int cbmb, char const* defchar, int* used_default); + +STBIWDEF int stbiw_convert_wchar_to_utf8(char* buffer, size_t bufferlen, wchar_t const* input) +{ + return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int)bufferlen, NULL, NULL); +} +# endif + +static FILE* stbiw__fopen(char const* filename, char const* mode) +{ + FILE* f; +# if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8) + wchar_t wMode[64]; + wchar_t wFilename[1024]; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename) / sizeof(*wFilename))) + return 0; + + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode) / sizeof(*wMode))) + return 0; + +# if defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != _wfopen_s(&f, wFilename, wMode)) + f = 0; +# else + f = _wfopen(wFilename, wMode); +# endif + +# elif defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != fopen_s(&f, filename, mode)) + f = 0; +# else + f = fopen(filename, mode); +# endif + return f; +} + +static int stbi__start_write_file(stbi__write_context* s, char const* filename) +{ + FILE* f = stbiw__fopen(filename, "wb"); + stbi__start_write_callbacks(s, stbi__stdio_write, (void*)f); + return f != NULL; +} + +static void stbi__end_write_file(stbi__write_context* s) +{ + fclose((FILE*)s->context); +} + +# endif // !STBI_WRITE_NO_STDIO + +typedef unsigned int stbiw_uint32; +typedef int stb_image_write_test[sizeof(stbiw_uint32) == 4 ? 1 : -1]; + +static void stbiw__writefv(stbi__write_context* s, char const* fmt, va_list v) +{ + while (*fmt) { + switch (*fmt++) { + case ' ': + break; + case '1': { + unsigned char x = STBIW_UCHAR(va_arg(v, int)); + s->func(s->context, &x, 1); + break; + } + case '2': { + int x = va_arg(v, int); + unsigned char b[2]; + b[0] = STBIW_UCHAR(x); + b[1] = STBIW_UCHAR(x >> 8); + s->func(s->context, b, 2); + break; + } + case '4': { + stbiw_uint32 x = va_arg(v, int); + unsigned char b[4]; + b[0] = STBIW_UCHAR(x); + b[1] = STBIW_UCHAR(x >> 8); + b[2] = STBIW_UCHAR(x >> 16); + b[3] = STBIW_UCHAR(x >> 24); + s->func(s->context, b, 4); + break; + } + default: + STBIW_ASSERT(0); + return; + } + } +} + +static void stbiw__writef(stbi__write_context* s, char const* fmt, ...) +{ + va_list v; + va_start(v, fmt); + stbiw__writefv(s, fmt, v); + va_end(v); +} + +static void stbiw__write_flush(stbi__write_context* s) +{ + if (s->buf_used) { + s->func(s->context, &s->buffer, s->buf_used); + s->buf_used = 0; + } +} + +static void stbiw__putc(stbi__write_context* s, unsigned char c) +{ + s->func(s->context, &c, 1); +} + +static void stbiw__write1(stbi__write_context* s, unsigned char a) +{ + if ((size_t)s->buf_used + 1 > sizeof(s->buffer)) + stbiw__write_flush(s); + s->buffer[s->buf_used++] = a; +} + +static void stbiw__write3(stbi__write_context* s, unsigned char a, unsigned char b, unsigned char c) +{ + int n; + if ((size_t)s->buf_used + 3 > sizeof(s->buffer)) + stbiw__write_flush(s); + n = s->buf_used; + s->buf_used = n + 3; + s->buffer[n + 0] = a; + s->buffer[n + 1] = b; + s->buffer[n + 2] = c; +} + +static void stbiw__write_pixel(stbi__write_context* s, int rgb_dir, int comp, int write_alpha, int expand_mono, unsigned char* d) +{ + unsigned char bg[3] = { 255, 0, 255 }, px[3]; + int k; + + if (write_alpha < 0) + stbiw__write1(s, d[comp - 1]); + + switch (comp) { + case 2: // 2 pixels = mono + alpha, alpha is written separately, so same as 1-channel case + case 1: + if (expand_mono) + stbiw__write3(s, d[0], d[0], d[0]); // monochrome bmp + else + stbiw__write1(s, d[0]); // monochrome TGA + break; + case 4: + if (!write_alpha) { + // composite against pink background + for (k = 0; k < 3; ++k) + px[k] = bg[k] + ((d[k] - bg[k]) * d[3]) / 255; + stbiw__write3(s, px[1 - rgb_dir], px[1], px[1 + rgb_dir]); + break; + } + /* FALLTHROUGH */ + case 3: + stbiw__write3(s, d[1 - rgb_dir], d[1], d[1 + rgb_dir]); + break; + } + if (write_alpha > 0) + stbiw__write1(s, d[comp - 1]); +} + +static void stbiw__write_pixels(stbi__write_context* s, int rgb_dir, int vdir, int x, int y, int comp, void* data, int write_alpha, int scanline_pad, int expand_mono) +{ + stbiw_uint32 zero = 0; + int i, j, j_end; + + if (y <= 0) + return; + + if (stbi__flip_vertically_on_write) + vdir *= -1; + + if (vdir < 0) { + j_end = -1; + j = y - 1; + } else { + j_end = y; + j = 0; + } + + for (; j != j_end; j += vdir) { + for (i = 0; i < x; ++i) { + unsigned char* d = (unsigned char*)data + (j * x + i) * comp; + stbiw__write_pixel(s, rgb_dir, comp, write_alpha, expand_mono, d); + } + stbiw__write_flush(s); + s->func(s->context, &zero, scanline_pad); + } +} + +static int stbiw__outfile(stbi__write_context* s, int rgb_dir, int vdir, int x, int y, int comp, int expand_mono, void* data, int alpha, int pad, char const* fmt, ...) +{ + if (y < 0 || x < 0) { + return 0; + } else { + va_list v; + va_start(v, fmt); + stbiw__writefv(s, fmt, v); + va_end(v); + stbiw__write_pixels(s, rgb_dir, vdir, x, y, comp, data, alpha, pad, expand_mono); + return 1; + } +} + +static int stbi_write_bmp_core(stbi__write_context* s, int x, int y, int comp, void const* data) +{ + if (comp != 4) { + // write RGB bitmap + int pad = (-x * 3) & 3; + return stbiw__outfile(s, -1, -1, x, y, comp, 1, (void*)data, 0, pad, + "11 4 22 4" + "4 44 22 444444", + 'B', 'M', 14 + 40 + (x * 3 + pad) * y, 0, 0, 14 + 40, // file header + 40, x, y, 1, 24, 0, 0, 0, 0, 0, 0); // bitmap header + } else { + // RGBA bitmaps need a v4 header + // use BI_BITFIELDS mode with 32bpp and alpha mask + // (straight BI_RGB with alpha mask doesn't work in most readers) + return stbiw__outfile(s, -1, -1, x, y, comp, 1, (void*)data, 1, 0, + "11 4 22 4" + "4 44 22 444444 4444 4 444 444 444 444", + 'B', 'M', 14 + 108 + x * y * 4, 0, 0, 14 + 108, // file header + 108, x, y, 1, 32, 3, 0, 0, 0, 0, 0, 0xff0000, 0xff00, 0xff, 0xff000000u, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); // bitmap V4 header + } +} + +STBIWDEF int stbi_write_bmp_to_func(stbi_write_func* func, void* context, int x, int y, int comp, void const* data) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_bmp_core(&s, x, y, comp, data); +} + +# ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_bmp(char const* filename, int x, int y, int comp, void const* data) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s, filename)) { + int r = stbi_write_bmp_core(&s, x, y, comp, data); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +# endif //! STBI_WRITE_NO_STDIO + +static int stbi_write_tga_core(stbi__write_context* s, int x, int y, int comp, void* data) +{ + int has_alpha = (comp == 2 || comp == 4); + int colorbytes = has_alpha ? comp - 1 : comp; + int format = colorbytes < 2 ? 3 : 2; // 3 color channels (RGB/RGBA) = 2, 1 color channel (Y/YA) = 3 + + if (y < 0 || x < 0) + return 0; + + if (!stbi_write_tga_with_rle) { + return stbiw__outfile(s, -1, -1, x, y, comp, 0, (void*)data, has_alpha, 0, + "111 221 2222 11", 0, 0, format, 0, 0, 0, 0, 0, x, y, (colorbytes + has_alpha) * 8, has_alpha * 8); + } else { + int i, j, k; + int jend, jdir; + + stbiw__writef(s, "111 221 2222 11", 0, 0, format + 8, 0, 0, 0, 0, 0, x, y, (colorbytes + has_alpha) * 8, has_alpha * 8); + + if (stbi__flip_vertically_on_write) { + j = 0; + jend = y; + jdir = 1; + } else { + j = y - 1; + jend = -1; + jdir = -1; + } + for (; j != jend; j += jdir) { + unsigned char* row = (unsigned char*)data + j * x * comp; + int len; + + for (i = 0; i < x; i += len) { + unsigned char* begin = row + i * comp; + int diff = 1; + len = 1; + + if (i < x - 1) { + ++len; + diff = memcmp(begin, row + (i + 1) * comp, comp); + if (diff) { + unsigned char const* prev = begin; + for (k = i + 2; k < x && len < 128; ++k) { + if (memcmp(prev, row + k * comp, comp)) { + prev += comp; + ++len; + } else { + --len; + break; + } + } + } else { + for (k = i + 2; k < x && len < 128; ++k) { + if (!memcmp(begin, row + k * comp, comp)) { + ++len; + } else { + break; + } + } + } + } + + if (diff) { + unsigned char header = STBIW_UCHAR(len - 1); + stbiw__write1(s, header); + for (k = 0; k < len; ++k) { + stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin + k * comp); + } + } else { + unsigned char header = STBIW_UCHAR(len - 129); + stbiw__write1(s, header); + stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin); + } + } + } + stbiw__write_flush(s); + } + return 1; +} + +STBIWDEF int stbi_write_tga_to_func(stbi_write_func* func, void* context, int x, int y, int comp, void const* data) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_tga_core(&s, x, y, comp, (void*)data); +} + +# ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_tga(char const* filename, int x, int y, int comp, void const* data) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s, filename)) { + int r = stbi_write_tga_core(&s, x, y, comp, (void*)data); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +# endif + +// ************************************************************************************************* +// Radiance RGBE HDR writer +// by Baldur Karlsson + +# define stbiw__max(a, b) ((a) > (b) ? (a) : (b)) + +# ifndef STBI_WRITE_NO_STDIO + +static void stbiw__linear_to_rgbe(unsigned char* rgbe, float* linear) +{ + int exponent; + float maxcomp = stbiw__max(linear[0], stbiw__max(linear[1], linear[2])); + + if (maxcomp < 1e-32f) { + rgbe[0] = rgbe[1] = rgbe[2] = rgbe[3] = 0; + } else { + float normalize = (float)frexp(maxcomp, &exponent) * 256.0f / maxcomp; + + rgbe[0] = (unsigned char)(linear[0] * normalize); + rgbe[1] = (unsigned char)(linear[1] * normalize); + rgbe[2] = (unsigned char)(linear[2] * normalize); + rgbe[3] = (unsigned char)(exponent + 128); + } +} + +static void stbiw__write_run_data(stbi__write_context* s, int length, unsigned char databyte) +{ + unsigned char lengthbyte = STBIW_UCHAR(length + 128); + STBIW_ASSERT(length + 128 <= 255); + s->func(s->context, &lengthbyte, 1); + s->func(s->context, &databyte, 1); +} + +static void stbiw__write_dump_data(stbi__write_context* s, int length, unsigned char* data) +{ + unsigned char lengthbyte = STBIW_UCHAR(length); + STBIW_ASSERT(length <= 128); // inconsistent with spec but consistent with official code + s->func(s->context, &lengthbyte, 1); + s->func(s->context, data, length); +} + +static void stbiw__write_hdr_scanline(stbi__write_context* s, int width, int ncomp, unsigned char* scratch, float* scanline) +{ + unsigned char scanlineheader[4] = { 2, 2, 0, 0 }; + unsigned char rgbe[4]; + float linear[3]; + int x; + + scanlineheader[2] = (width & 0xff00) >> 8; + scanlineheader[3] = (width & 0x00ff); + + /* skip RLE for images too small or large */ + if (width < 8 || width >= 32768) { + for (x = 0; x < width; x++) { + switch (ncomp) { + case 4: /* fallthrough */ + case 3: + linear[2] = scanline[x * ncomp + 2]; + linear[1] = scanline[x * ncomp + 1]; + linear[0] = scanline[x * ncomp + 0]; + break; + default: + linear[0] = linear[1] = linear[2] = scanline[x * ncomp + 0]; + break; + } + stbiw__linear_to_rgbe(rgbe, linear); + s->func(s->context, rgbe, 4); + } + } else { + int c, r; + /* encode into scratch buffer */ + for (x = 0; x < width; x++) { + switch (ncomp) { + case 4: /* fallthrough */ + case 3: + linear[2] = scanline[x * ncomp + 2]; + linear[1] = scanline[x * ncomp + 1]; + linear[0] = scanline[x * ncomp + 0]; + break; + default: + linear[0] = linear[1] = linear[2] = scanline[x * ncomp + 0]; + break; + } + stbiw__linear_to_rgbe(rgbe, linear); + scratch[x + width * 0] = rgbe[0]; + scratch[x + width * 1] = rgbe[1]; + scratch[x + width * 2] = rgbe[2]; + scratch[x + width * 3] = rgbe[3]; + } + + s->func(s->context, scanlineheader, 4); + + /* RLE each component separately */ + for (c = 0; c < 4; c++) { + unsigned char* comp = &scratch[width * c]; + + x = 0; + while (x < width) { + // find first run + r = x; + while (r + 2 < width) { + if (comp[r] == comp[r + 1] && comp[r] == comp[r + 2]) + break; + ++r; + } + if (r + 2 >= width) + r = width; + // dump up to first run + while (x < r) { + int len = r - x; + if (len > 128) + len = 128; + stbiw__write_dump_data(s, len, &comp[x]); + x += len; + } + // if there's a run, output it + if (r + 2 < width) { // same test as what we break out of in search loop, so only true if we break'd + // find next byte after run + while (r < width && comp[r] == comp[x]) + ++r; + // output run up to r + while (x < r) { + int len = r - x; + if (len > 127) + len = 127; + stbiw__write_run_data(s, len, comp[x]); + x += len; + } + } + } + } + } +} + +static int stbi_write_hdr_core(stbi__write_context* s, int x, int y, int comp, float* data) +{ + if (y <= 0 || x <= 0 || data == NULL) + return 0; + else { + // Each component is stored separately. Allocate scratch space for full output scanline. + unsigned char* scratch = (unsigned char*)STBIW_MALLOC(x * 4); + int i, len; + char buffer[128]; + char header[] = "#?RADIANCE\n# Written by stb_image_write.h\nFORMAT=32-bit_rle_rgbe\n"; + s->func(s->context, header, sizeof(header) - 1); + +# ifdef __STDC_LIB_EXT1__ + len = sprintf_s(buffer, sizeof(buffer), "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n", y, x); +# else + len = sprintf(buffer, "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n", y, x); +# endif + s->func(s->context, buffer, len); + + for (i = 0; i < y; i++) + stbiw__write_hdr_scanline(s, x, comp, scratch, data + comp * x * (stbi__flip_vertically_on_write ? y - 1 - i : i)); + STBIW_FREE(scratch); + return 1; + } +} + +STBIWDEF int stbi_write_hdr_to_func(stbi_write_func* func, void* context, int x, int y, int comp, float const* data) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_hdr_core(&s, x, y, comp, (float*)data); +} + +STBIWDEF int stbi_write_hdr(char const* filename, int x, int y, int comp, float const* data) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s, filename)) { + int r = stbi_write_hdr_core(&s, x, y, comp, (float*)data); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +# endif // STBI_WRITE_NO_STDIO + +////////////////////////////////////////////////////////////////////////////// +// +// PNG writer +// + +# ifndef STBIW_ZLIB_COMPRESS +// stretchy buffer; stbiw__sbpush() == vector<>::push_back() -- stbiw__sbcount() == vector<>::size() +# define stbiw__sbraw(a) ((int*)(void*)(a) - 2) +# define stbiw__sbm(a) stbiw__sbraw(a)[0] +# define stbiw__sbn(a) stbiw__sbraw(a)[1] + +# define stbiw__sbneedgrow(a, n) ((a) == 0 || stbiw__sbn(a) + n >= stbiw__sbm(a)) +# define stbiw__sbmaybegrow(a, n) (stbiw__sbneedgrow(a, (n)) ? stbiw__sbgrow(a, n) : 0) +# define stbiw__sbgrow(a, n) stbiw__sbgrowf((void**)&(a), (n), sizeof(*(a))) + +# define stbiw__sbpush(a, v) (stbiw__sbmaybegrow(a, 1), (a)[stbiw__sbn(a)++] = (v)) +# define stbiw__sbcount(a) ((a) ? stbiw__sbn(a) : 0) +# define stbiw__sbfree(a) ((a) ? STBIW_FREE(stbiw__sbraw(a)), 0 : 0) + +static void* stbiw__sbgrowf(void** arr, int increment, int itemsize) +{ + int m = *arr ? 2 * stbiw__sbm(*arr) + increment : increment + 1; + void* p = STBIW_REALLOC_SIZED(*arr ? stbiw__sbraw(*arr) : 0, *arr ? (stbiw__sbm(*arr) * itemsize + sizeof(int) * 2) : 0, itemsize * m + sizeof(int) * 2); + STBIW_ASSERT(p); + if (p) { + if (!*arr) + ((int*)p)[1] = 0; + *arr = (void*)((int*)p + 2); + stbiw__sbm(*arr) = m; + } + return *arr; +} + +static unsigned char* stbiw__zlib_flushf(unsigned char* data, unsigned int* bitbuffer, int* bitcount) +{ + while (*bitcount >= 8) { + stbiw__sbpush(data, STBIW_UCHAR(*bitbuffer)); + *bitbuffer >>= 8; + *bitcount -= 8; + } + return data; +} + +static int stbiw__zlib_bitrev(int code, int codebits) +{ + int res = 0; + while (codebits--) { + res = (res << 1) | (code & 1); + code >>= 1; + } + return res; +} + +static unsigned int stbiw__zlib_countm(unsigned char* a, unsigned char* b, int limit) +{ + int i; + for (i = 0; i < limit && i < 258; ++i) + if (a[i] != b[i]) + break; + return i; +} + +static unsigned int stbiw__zhash(unsigned char* data) +{ + stbiw_uint32 hash = data[0] + (data[1] << 8) + (data[2] << 16); + hash ^= hash << 3; + hash += hash >> 5; + hash ^= hash << 4; + hash += hash >> 17; + hash ^= hash << 25; + hash += hash >> 6; + return hash; +} + +# define stbiw__zlib_flush() (out = stbiw__zlib_flushf(out, &bitbuf, &bitcount)) +# define stbiw__zlib_add(code, codebits) \ + (bitbuf |= (code) << bitcount, bitcount += (codebits), stbiw__zlib_flush()) +# define stbiw__zlib_huffa(b, c) stbiw__zlib_add(stbiw__zlib_bitrev(b, c), c) +// default huffman tables +# define stbiw__zlib_huff1(n) stbiw__zlib_huffa(0x30 + (n), 8) +# define stbiw__zlib_huff2(n) stbiw__zlib_huffa(0x190 + (n) - 144, 9) +# define stbiw__zlib_huff3(n) stbiw__zlib_huffa(0 + (n) - 256, 7) +# define stbiw__zlib_huff4(n) stbiw__zlib_huffa(0xc0 + (n) - 280, 8) +# define stbiw__zlib_huff(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : (n) <= 255 ? stbiw__zlib_huff2(n) \ + : (n) <= 279 ? stbiw__zlib_huff3(n) \ + : stbiw__zlib_huff4(n)) +# define stbiw__zlib_huffb(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : stbiw__zlib_huff2(n)) + +# define stbiw__ZHASH 16384 + +# endif // STBIW_ZLIB_COMPRESS + +STBIWDEF unsigned char* stbi_zlib_compress(unsigned char* data, int data_len, int* out_len, int quality) +{ +# ifdef STBIW_ZLIB_COMPRESS + // user provided a zlib compress implementation, use that + return STBIW_ZLIB_COMPRESS(data, data_len, out_len, quality); +# else // use builtin + static unsigned short lengthc[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 259 }; + static unsigned char lengtheb[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 }; + static unsigned short distc[] = { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 32768 }; + static unsigned char disteb[] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; + unsigned int bitbuf = 0; + int i, j, bitcount = 0; + unsigned char* out = NULL; + unsigned char*** hash_table = (unsigned char***)STBIW_MALLOC(stbiw__ZHASH * sizeof(unsigned char**)); + if (hash_table == NULL) + return NULL; + if (quality < 5) + quality = 5; + + stbiw__sbpush(out, 0x78); // DEFLATE 32K window + stbiw__sbpush(out, 0x5e); // FLEVEL = 1 + stbiw__zlib_add(1, 1); // BFINAL = 1 + stbiw__zlib_add(1, 2); // BTYPE = 1 -- fixed huffman + + for (i = 0; i < stbiw__ZHASH; ++i) + hash_table[i] = NULL; + + i = 0; + while (i < data_len - 3) { + // hash next 3 bytes of data to be compressed + int h = stbiw__zhash(data + i) & (stbiw__ZHASH - 1), best = 3; + unsigned char* bestloc = 0; + unsigned char** hlist = hash_table[h]; + int n = stbiw__sbcount(hlist); + for (j = 0; j < n; ++j) { + if (hlist[j] - data > i - 32768) { // if entry lies within window + int d = stbiw__zlib_countm(hlist[j], data + i, data_len - i); + if (d >= best) { + best = d; + bestloc = hlist[j]; + } + } + } + // when hash table entry is too long, delete half the entries + if (hash_table[h] && stbiw__sbn(hash_table[h]) == 2 * quality) { + STBIW_MEMMOVE(hash_table[h], hash_table[h] + quality, sizeof(hash_table[h][0]) * quality); + stbiw__sbn(hash_table[h]) = quality; + } + stbiw__sbpush(hash_table[h], data + i); + + if (bestloc) { + // "lazy matching" - check match at *next* byte, and if it's better, do cur byte as literal + h = stbiw__zhash(data + i + 1) & (stbiw__ZHASH - 1); + hlist = hash_table[h]; + n = stbiw__sbcount(hlist); + for (j = 0; j < n; ++j) { + if (hlist[j] - data > i - 32767) { + int e = stbiw__zlib_countm(hlist[j], data + i + 1, data_len - i - 1); + if (e > best) { // if next match is better, bail on current match + bestloc = NULL; + break; + } + } + } + } + + if (bestloc) { + int d = (int)(data + i - bestloc); // distance back + STBIW_ASSERT(d <= 32767 && best <= 258); + for (j = 0; best > lengthc[j + 1] - 1; ++j) + ; + stbiw__zlib_huff(j + 257); + if (lengtheb[j]) + stbiw__zlib_add(best - lengthc[j], lengtheb[j]); + for (j = 0; d > distc[j + 1] - 1; ++j) + ; + stbiw__zlib_add(stbiw__zlib_bitrev(j, 5), 5); + if (disteb[j]) + stbiw__zlib_add(d - distc[j], disteb[j]); + i += best; + } else { + stbiw__zlib_huffb(data[i]); + ++i; + } + } + // write out final bytes + for (; i < data_len; ++i) + stbiw__zlib_huffb(data[i]); + stbiw__zlib_huff(256); // end of block + // pad with 0 bits to byte boundary + while (bitcount) + stbiw__zlib_add(0, 1); + + for (i = 0; i < stbiw__ZHASH; ++i) + (void)stbiw__sbfree(hash_table[i]); + STBIW_FREE(hash_table); + + // store uncompressed instead if compression was worse + if (stbiw__sbn(out) > data_len + 2 + ((data_len + 32766) / 32767) * 5) { + stbiw__sbn(out) = 2; // truncate to DEFLATE 32K window and FLEVEL = 1 + for (j = 0; j < data_len;) { + int blocklen = data_len - j; + if (blocklen > 32767) + blocklen = 32767; + stbiw__sbpush(out, data_len - j == blocklen); // BFINAL = ?, BTYPE = 0 -- no compression + stbiw__sbpush(out, STBIW_UCHAR(blocklen)); // LEN + stbiw__sbpush(out, STBIW_UCHAR(blocklen >> 8)); + stbiw__sbpush(out, STBIW_UCHAR(~blocklen)); // NLEN + stbiw__sbpush(out, STBIW_UCHAR(~blocklen >> 8)); + memcpy(out + stbiw__sbn(out), data + j, blocklen); + stbiw__sbn(out) += blocklen; + j += blocklen; + } + } + + { + // compute adler32 on input + unsigned int s1 = 1, s2 = 0; + int blocklen = (int)(data_len % 5552); + j = 0; + while (j < data_len) { + for (i = 0; i < blocklen; ++i) { + s1 += data[j + i]; + s2 += s1; + } + s1 %= 65521; + s2 %= 65521; + j += blocklen; + blocklen = 5552; + } + stbiw__sbpush(out, STBIW_UCHAR(s2 >> 8)); + stbiw__sbpush(out, STBIW_UCHAR(s2)); + stbiw__sbpush(out, STBIW_UCHAR(s1 >> 8)); + stbiw__sbpush(out, STBIW_UCHAR(s1)); + } + *out_len = stbiw__sbn(out); + // make returned pointer freeable + STBIW_MEMMOVE(stbiw__sbraw(out), out, *out_len); + return (unsigned char*)stbiw__sbraw(out); +# endif // STBIW_ZLIB_COMPRESS +} + +static unsigned int stbiw__crc32(unsigned char* buffer, int len) +{ +# ifdef STBIW_CRC32 + return STBIW_CRC32(buffer, len); +# else + static unsigned int crc_table[256] = { + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0eDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + }; + + unsigned int crc = ~0u; + int i; + for (i = 0; i < len; ++i) + crc = (crc >> 8) ^ crc_table[buffer[i] ^ (crc & 0xff)]; + return ~crc; +# endif +} + +# define stbiw__wpng4(o, a, b, c, d) ((o)[0] = STBIW_UCHAR(a), (o)[1] = STBIW_UCHAR(b), (o)[2] = STBIW_UCHAR(c), (o)[3] = STBIW_UCHAR(d), (o) += 4) +# define stbiw__wp32(data, v) stbiw__wpng4(data, (v) >> 24, (v) >> 16, (v) >> 8, (v)); +# define stbiw__wptag(data, s) stbiw__wpng4(data, s[0], s[1], s[2], s[3]) + +static void stbiw__wpcrc(unsigned char** data, int len) +{ + unsigned int crc = stbiw__crc32(*data - len - 4, len + 4); + stbiw__wp32(*data, crc); +} + +static unsigned char stbiw__paeth(int a, int b, int c) +{ + int p = a + b - c, pa = abs(p - a), pb = abs(p - b), pc = abs(p - c); + if (pa <= pb && pa <= pc) + return STBIW_UCHAR(a); + if (pb <= pc) + return STBIW_UCHAR(b); + return STBIW_UCHAR(c); +} + +// @OPTIMIZE: provide an option that always forces left-predict or paeth predict +static void stbiw__encode_png_line(unsigned char* pixels, int stride_bytes, int width, int height, int y, int n, int filter_type, signed char* line_buffer) +{ + static int mapping[] = { 0, 1, 2, 3, 4 }; + static int firstmap[] = { 0, 1, 0, 5, 6 }; + int* mymap = (y != 0) ? mapping : firstmap; + int i; + int type = mymap[filter_type]; + unsigned char* z = pixels + stride_bytes * (stbi__flip_vertically_on_write ? height - 1 - y : y); + int signed_stride = stbi__flip_vertically_on_write ? -stride_bytes : stride_bytes; + + if (type == 0) { + memcpy(line_buffer, z, width * n); + return; + } + + // first loop isn't optimized since it's just one pixel + for (i = 0; i < n; ++i) { + switch (type) { + case 1: + line_buffer[i] = z[i]; + break; + case 2: + line_buffer[i] = z[i] - z[i - signed_stride]; + break; + case 3: + line_buffer[i] = z[i] - (z[i - signed_stride] >> 1); + break; + case 4: + line_buffer[i] = (signed char)(z[i] - stbiw__paeth(0, z[i - signed_stride], 0)); + break; + case 5: + line_buffer[i] = z[i]; + break; + case 6: + line_buffer[i] = z[i]; + break; + } + } + switch (type) { + case 1: + for (i = n; i < width * n; ++i) + line_buffer[i] = z[i] - z[i - n]; + break; + case 2: + for (i = n; i < width * n; ++i) + line_buffer[i] = z[i] - z[i - signed_stride]; + break; + case 3: + for (i = n; i < width * n; ++i) + line_buffer[i] = z[i] - ((z[i - n] + z[i - signed_stride]) >> 1); + break; + case 4: + for (i = n; i < width * n; ++i) + line_buffer[i] = z[i] - stbiw__paeth(z[i - n], z[i - signed_stride], z[i - signed_stride - n]); + break; + case 5: + for (i = n; i < width * n; ++i) + line_buffer[i] = z[i] - (z[i - n] >> 1); + break; + case 6: + for (i = n; i < width * n; ++i) + line_buffer[i] = z[i] - stbiw__paeth(z[i - n], 0, 0); + break; + } +} + +STBIWDEF unsigned char* stbi_write_png_to_mem(unsigned char const* pixels, int stride_bytes, int x, int y, int n, int* out_len) +{ + int force_filter = stbi_write_force_png_filter; + int ctype[5] = { -1, 0, 4, 2, 6 }; + unsigned char sig[8] = { 137, 80, 78, 71, 13, 10, 26, 10 }; + unsigned char *out, *o, *filt, *zlib; + signed char* line_buffer; + int j, zlen; + + if (stride_bytes == 0) + stride_bytes = x * n; + + if (force_filter >= 5) { + force_filter = -1; + } + + filt = (unsigned char*)STBIW_MALLOC((x * n + 1) * y); + if (!filt) + return 0; + line_buffer = (signed char*)STBIW_MALLOC(x * n); + if (!line_buffer) { + STBIW_FREE(filt); + return 0; + } + for (j = 0; j < y; ++j) { + int filter_type; + if (force_filter > -1) { + filter_type = force_filter; + stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, force_filter, line_buffer); + } else { // Estimate the best filter by running through all of them: + int best_filter = 0, best_filter_val = 0x7fffffff, est, i; + for (filter_type = 0; filter_type < 5; filter_type++) { + stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, filter_type, line_buffer); + + // Estimate the entropy of the line using this filter; the less, the better. + est = 0; + for (i = 0; i < x * n; ++i) { + est += abs((signed char)line_buffer[i]); + } + if (est < best_filter_val) { + best_filter_val = est; + best_filter = filter_type; + } + } + if (filter_type != best_filter) { // If the last iteration already got us the best filter, don't redo it + stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, best_filter, line_buffer); + filter_type = best_filter; + } + } + // when we get here, filter_type contains the filter type, and line_buffer contains the data + filt[j * (x * n + 1)] = (unsigned char)filter_type; + STBIW_MEMMOVE(filt + j * (x * n + 1) + 1, line_buffer, x * n); + } + STBIW_FREE(line_buffer); + zlib = stbi_zlib_compress(filt, y * (x * n + 1), &zlen, stbi_write_png_compression_level); + STBIW_FREE(filt); + if (!zlib) + return 0; + + // each tag requires 12 bytes of overhead + out = (unsigned char*)STBIW_MALLOC(8 + 12 + 13 + 12 + zlen + 12); + if (!out) + return 0; + *out_len = 8 + 12 + 13 + 12 + zlen + 12; + + o = out; + STBIW_MEMMOVE(o, sig, 8); + o += 8; + stbiw__wp32(o, 13); // header length + stbiw__wptag(o, "IHDR"); + stbiw__wp32(o, x); + stbiw__wp32(o, y); + *o++ = 8; + *o++ = STBIW_UCHAR(ctype[n]); + *o++ = 0; + *o++ = 0; + *o++ = 0; + stbiw__wpcrc(&o, 13); + + stbiw__wp32(o, zlen); + stbiw__wptag(o, "IDAT"); + STBIW_MEMMOVE(o, zlib, zlen); + o += zlen; + STBIW_FREE(zlib); + stbiw__wpcrc(&o, zlen); + + stbiw__wp32(o, 0); + stbiw__wptag(o, "IEND"); + stbiw__wpcrc(&o, 0); + + STBIW_ASSERT(o == out + *out_len); + + return out; +} + +# ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_png(char const* filename, int x, int y, int comp, void const* data, int stride_bytes) +{ + FILE* f; + int len; + unsigned char* png = stbi_write_png_to_mem((unsigned char const*)data, stride_bytes, x, y, comp, &len); + if (png == NULL) + return 0; + + f = stbiw__fopen(filename, "wb"); + if (!f) { + STBIW_FREE(png); + return 0; + } + fwrite(png, 1, len, f); + fclose(f); + STBIW_FREE(png); + return 1; +} +# endif + +STBIWDEF int stbi_write_png_to_func(stbi_write_func* func, void* context, int x, int y, int comp, void const* data, int stride_bytes) +{ + int len; + unsigned char* png = stbi_write_png_to_mem((unsigned char const*)data, stride_bytes, x, y, comp, &len); + if (png == NULL) + return 0; + func(context, png, len); + STBIW_FREE(png); + return 1; +} + +/* *************************************************************************** + * + * JPEG writer + * + * This is based on Jon Olick's jo_jpeg.cpp: + * public domain Simple, Minimalistic JPEG writer - http://www.jonolick.com/code.html + */ + +static unsigned char const stbiw__jpg_ZigZag[] = { 0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, + 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63 }; + +static void stbiw__jpg_writeBits(stbi__write_context* s, int* bitBufP, int* bitCntP, unsigned short const* bs) +{ + int bitBuf = *bitBufP, bitCnt = *bitCntP; + bitCnt += bs[1]; + bitBuf |= bs[0] << (24 - bitCnt); + while (bitCnt >= 8) { + unsigned char c = (bitBuf >> 16) & 255; + stbiw__putc(s, c); + if (c == 255) { + stbiw__putc(s, 0); + } + bitBuf <<= 8; + bitCnt -= 8; + } + *bitBufP = bitBuf; + *bitCntP = bitCnt; +} + +static void stbiw__jpg_DCT(float* d0p, float* d1p, float* d2p, float* d3p, float* d4p, float* d5p, float* d6p, float* d7p) +{ + float d0 = *d0p, d1 = *d1p, d2 = *d2p, d3 = *d3p, d4 = *d4p, d5 = *d5p, d6 = *d6p, d7 = *d7p; + float z1, z2, z3, z4, z5, z11, z13; + + float tmp0 = d0 + d7; + float tmp7 = d0 - d7; + float tmp1 = d1 + d6; + float tmp6 = d1 - d6; + float tmp2 = d2 + d5; + float tmp5 = d2 - d5; + float tmp3 = d3 + d4; + float tmp4 = d3 - d4; + + // Even part + float tmp10 = tmp0 + tmp3; // phase 2 + float tmp13 = tmp0 - tmp3; + float tmp11 = tmp1 + tmp2; + float tmp12 = tmp1 - tmp2; + + d0 = tmp10 + tmp11; // phase 3 + d4 = tmp10 - tmp11; + + z1 = (tmp12 + tmp13) * 0.707106781f; // c4 + d2 = tmp13 + z1; // phase 5 + d6 = tmp13 - z1; + + // Odd part + tmp10 = tmp4 + tmp5; // phase 2 + tmp11 = tmp5 + tmp6; + tmp12 = tmp6 + tmp7; + + // The rotator is modified from fig 4-8 to avoid extra negations. + z5 = (tmp10 - tmp12) * 0.382683433f; // c6 + z2 = tmp10 * 0.541196100f + z5; // c2-c6 + z4 = tmp12 * 1.306562965f + z5; // c2+c6 + z3 = tmp11 * 0.707106781f; // c4 + + z11 = tmp7 + z3; // phase 5 + z13 = tmp7 - z3; + + *d5p = z13 + z2; // phase 6 + *d3p = z13 - z2; + *d1p = z11 + z4; + *d7p = z11 - z4; + + *d0p = d0; + *d2p = d2; + *d4p = d4; + *d6p = d6; +} + +static void stbiw__jpg_calcBits(int val, unsigned short bits[2]) +{ + int tmp1 = val < 0 ? -val : val; + val = val < 0 ? val - 1 : val; + bits[1] = 1; + while (tmp1 >>= 1) { + ++bits[1]; + } + bits[0] = val & ((1 << bits[1]) - 1); +} + +static int stbiw__jpg_processDU(stbi__write_context* s, int* bitBuf, int* bitCnt, float* CDU, int du_stride, float* fdtbl, int DC, unsigned short const HTDC[256][2], unsigned short const HTAC[256][2]) +{ + unsigned short const EOB[2] = { HTAC[0x00][0], HTAC[0x00][1] }; + unsigned short const M16zeroes[2] = { HTAC[0xF0][0], HTAC[0xF0][1] }; + int dataOff, i, j, n, diff, end0pos, x, y; + int DU[64]; + + // DCT rows + for (dataOff = 0, n = du_stride * 8; dataOff < n; dataOff += du_stride) { + stbiw__jpg_DCT(&CDU[dataOff], &CDU[dataOff + 1], &CDU[dataOff + 2], &CDU[dataOff + 3], &CDU[dataOff + 4], &CDU[dataOff + 5], &CDU[dataOff + 6], &CDU[dataOff + 7]); + } + // DCT columns + for (dataOff = 0; dataOff < 8; ++dataOff) { + stbiw__jpg_DCT(&CDU[dataOff], &CDU[dataOff + du_stride], &CDU[dataOff + du_stride * 2], &CDU[dataOff + du_stride * 3], &CDU[dataOff + du_stride * 4], + &CDU[dataOff + du_stride * 5], &CDU[dataOff + du_stride * 6], &CDU[dataOff + du_stride * 7]); + } + // Quantize/descale/zigzag the coefficients + for (y = 0, j = 0; y < 8; ++y) { + for (x = 0; x < 8; ++x, ++j) { + float v; + i = y * du_stride + x; + v = CDU[i] * fdtbl[j]; + // DU[stbiw__jpg_ZigZag[j]] = (int)(v < 0 ? ceilf(v - 0.5f) : floorf(v + 0.5f)); + // ceilf() and floorf() are C99, not C89, but I /think/ they're not needed here anyway? + DU[stbiw__jpg_ZigZag[j]] = (int)(v < 0 ? v - 0.5f : v + 0.5f); + } + } + + // Encode DC + diff = DU[0] - DC; + if (diff == 0) { + stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTDC[0]); + } else { + unsigned short bits[2]; + stbiw__jpg_calcBits(diff, bits); + stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTDC[bits[1]]); + stbiw__jpg_writeBits(s, bitBuf, bitCnt, bits); + } + // Encode ACs + end0pos = 63; + for (; (end0pos > 0) && (DU[end0pos] == 0); --end0pos) { + } + // end0pos = first element in reverse order !=0 + if (end0pos == 0) { + stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB); + return DU[0]; + } + for (i = 1; i <= end0pos; ++i) { + int startpos = i; + int nrzeroes; + unsigned short bits[2]; + for (; DU[i] == 0 && i <= end0pos; ++i) { + } + nrzeroes = i - startpos; + if (nrzeroes >= 16) { + int lng = nrzeroes >> 4; + int nrmarker; + for (nrmarker = 1; nrmarker <= lng; ++nrmarker) + stbiw__jpg_writeBits(s, bitBuf, bitCnt, M16zeroes); + nrzeroes &= 15; + } + stbiw__jpg_calcBits(DU[i], bits); + stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTAC[(nrzeroes << 4) + bits[1]]); + stbiw__jpg_writeBits(s, bitBuf, bitCnt, bits); + } + if (end0pos != 63) { + stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB); + } + return DU[0]; +} + +static int stbi_write_jpg_core(stbi__write_context* s, int width, int height, int comp, void const* data, int quality) +{ + // Constants that don't pollute global namespace + static unsigned char const std_dc_luminance_nrcodes[] = { 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }; + static unsigned char const std_dc_luminance_values[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; + static unsigned char const std_ac_luminance_nrcodes[] = { 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d }; + static unsigned char const std_ac_luminance_values[] = { + 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, + 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, + 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, + 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, + 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa + }; + static unsigned char const std_dc_chrominance_nrcodes[] = { 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }; + static unsigned char const std_dc_chrominance_values[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; + static unsigned char const std_ac_chrominance_nrcodes[] = { 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 }; + static unsigned char const std_ac_chrominance_values[] = { + 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, + 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, + 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, + 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa + }; + // Huffman tables + static unsigned short const YDC_HT[256][2] = { { 0, 2 }, { 2, 3 }, { 3, 3 }, { 4, 3 }, { 5, 3 }, { 6, 3 }, { 14, 4 }, { 30, 5 }, { 62, 6 }, { 126, 7 }, { 254, 8 }, { 510, 9 } }; + static unsigned short const UVDC_HT[256][2] = { { 0, 2 }, { 1, 2 }, { 2, 2 }, { 6, 3 }, { 14, 4 }, { 30, 5 }, { 62, 6 }, { 126, 7 }, { 254, 8 }, { 510, 9 }, { 1022, 10 }, { 2046, 11 } }; + static unsigned short const YAC_HT[256][2] = { + { 10, 4 }, { 0, 2 }, { 1, 2 }, { 4, 3 }, { 11, 4 }, { 26, 5 }, { 120, 7 }, { 248, 8 }, { 1014, 10 }, { 65410, 16 }, { 65411, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 12, 4 }, { 27, 5 }, { 121, 7 }, { 502, 9 }, { 2038, 11 }, { 65412, 16 }, { 65413, 16 }, { 65414, 16 }, { 65415, 16 }, { 65416, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 28, 5 }, { 249, 8 }, { 1015, 10 }, { 4084, 12 }, { 65417, 16 }, { 65418, 16 }, { 65419, 16 }, { 65420, 16 }, { 65421, 16 }, { 65422, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 58, 6 }, { 503, 9 }, { 4085, 12 }, { 65423, 16 }, { 65424, 16 }, { 65425, 16 }, { 65426, 16 }, { 65427, 16 }, { 65428, 16 }, { 65429, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 59, 6 }, { 1016, 10 }, { 65430, 16 }, { 65431, 16 }, { 65432, 16 }, { 65433, 16 }, { 65434, 16 }, { 65435, 16 }, { 65436, 16 }, { 65437, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 122, 7 }, { 2039, 11 }, { 65438, 16 }, { 65439, 16 }, { 65440, 16 }, { 65441, 16 }, { 65442, 16 }, { 65443, 16 }, { 65444, 16 }, { 65445, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 123, 7 }, { 4086, 12 }, { 65446, 16 }, { 65447, 16 }, { 65448, 16 }, { 65449, 16 }, { 65450, 16 }, { 65451, 16 }, { 65452, 16 }, { 65453, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 250, 8 }, { 4087, 12 }, { 65454, 16 }, { 65455, 16 }, { 65456, 16 }, { 65457, 16 }, { 65458, 16 }, { 65459, 16 }, { 65460, 16 }, { 65461, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 504, 9 }, { 32704, 15 }, { 65462, 16 }, { 65463, 16 }, { 65464, 16 }, { 65465, 16 }, { 65466, 16 }, { 65467, 16 }, { 65468, 16 }, { 65469, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 505, 9 }, { 65470, 16 }, { 65471, 16 }, { 65472, 16 }, { 65473, 16 }, { 65474, 16 }, { 65475, 16 }, { 65476, 16 }, { 65477, 16 }, { 65478, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 506, 9 }, { 65479, 16 }, { 65480, 16 }, { 65481, 16 }, { 65482, 16 }, { 65483, 16 }, { 65484, 16 }, { 65485, 16 }, { 65486, 16 }, { 65487, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 1017, 10 }, { 65488, 16 }, { 65489, 16 }, { 65490, 16 }, { 65491, 16 }, { 65492, 16 }, { 65493, 16 }, { 65494, 16 }, { 65495, 16 }, { 65496, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 1018, 10 }, { 65497, 16 }, { 65498, 16 }, { 65499, 16 }, { 65500, 16 }, { 65501, 16 }, { 65502, 16 }, { 65503, 16 }, { 65504, 16 }, { 65505, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 2040, 11 }, { 65506, 16 }, { 65507, 16 }, { 65508, 16 }, { 65509, 16 }, { 65510, 16 }, { 65511, 16 }, { 65512, 16 }, { 65513, 16 }, { 65514, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 65515, 16 }, { 65516, 16 }, { 65517, 16 }, { 65518, 16 }, { 65519, 16 }, { 65520, 16 }, { 65521, 16 }, { 65522, 16 }, { 65523, 16 }, { 65524, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 2041, 11 }, { 65525, 16 }, { 65526, 16 }, { 65527, 16 }, { 65528, 16 }, { 65529, 16 }, { 65530, 16 }, { 65531, 16 }, { 65532, 16 }, { 65533, 16 }, { 65534, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } + }; + static unsigned short const UVAC_HT[256][2] = { + { 0, 2 }, { 1, 2 }, { 4, 3 }, { 10, 4 }, { 24, 5 }, { 25, 5 }, { 56, 6 }, { 120, 7 }, { 500, 9 }, { 1014, 10 }, { 4084, 12 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 11, 4 }, { 57, 6 }, { 246, 8 }, { 501, 9 }, { 2038, 11 }, { 4085, 12 }, { 65416, 16 }, { 65417, 16 }, { 65418, 16 }, { 65419, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 26, 5 }, { 247, 8 }, { 1015, 10 }, { 4086, 12 }, { 32706, 15 }, { 65420, 16 }, { 65421, 16 }, { 65422, 16 }, { 65423, 16 }, { 65424, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 27, 5 }, { 248, 8 }, { 1016, 10 }, { 4087, 12 }, { 65425, 16 }, { 65426, 16 }, { 65427, 16 }, { 65428, 16 }, { 65429, 16 }, { 65430, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 58, 6 }, { 502, 9 }, { 65431, 16 }, { 65432, 16 }, { 65433, 16 }, { 65434, 16 }, { 65435, 16 }, { 65436, 16 }, { 65437, 16 }, { 65438, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 59, 6 }, { 1017, 10 }, { 65439, 16 }, { 65440, 16 }, { 65441, 16 }, { 65442, 16 }, { 65443, 16 }, { 65444, 16 }, { 65445, 16 }, { 65446, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 121, 7 }, { 2039, 11 }, { 65447, 16 }, { 65448, 16 }, { 65449, 16 }, { 65450, 16 }, { 65451, 16 }, { 65452, 16 }, { 65453, 16 }, { 65454, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 122, 7 }, { 2040, 11 }, { 65455, 16 }, { 65456, 16 }, { 65457, 16 }, { 65458, 16 }, { 65459, 16 }, { 65460, 16 }, { 65461, 16 }, { 65462, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 249, 8 }, { 65463, 16 }, { 65464, 16 }, { 65465, 16 }, { 65466, 16 }, { 65467, 16 }, { 65468, 16 }, { 65469, 16 }, { 65470, 16 }, { 65471, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 503, 9 }, { 65472, 16 }, { 65473, 16 }, { 65474, 16 }, { 65475, 16 }, { 65476, 16 }, { 65477, 16 }, { 65478, 16 }, { 65479, 16 }, { 65480, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 504, 9 }, { 65481, 16 }, { 65482, 16 }, { 65483, 16 }, { 65484, 16 }, { 65485, 16 }, { 65486, 16 }, { 65487, 16 }, { 65488, 16 }, { 65489, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 505, 9 }, { 65490, 16 }, { 65491, 16 }, { 65492, 16 }, { 65493, 16 }, { 65494, 16 }, { 65495, 16 }, { 65496, 16 }, { 65497, 16 }, { 65498, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 506, 9 }, { 65499, 16 }, { 65500, 16 }, { 65501, 16 }, { 65502, 16 }, { 65503, 16 }, { 65504, 16 }, { 65505, 16 }, { 65506, 16 }, { 65507, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 2041, 11 }, { 65508, 16 }, { 65509, 16 }, { 65510, 16 }, { 65511, 16 }, { 65512, 16 }, { 65513, 16 }, { 65514, 16 }, { 65515, 16 }, { 65516, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 16352, 14 }, { 65517, 16 }, { 65518, 16 }, { 65519, 16 }, { 65520, 16 }, { 65521, 16 }, { 65522, 16 }, { 65523, 16 }, { 65524, 16 }, { 65525, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + { 1018, 10 }, { 32707, 15 }, { 65526, 16 }, { 65527, 16 }, { 65528, 16 }, { 65529, 16 }, { 65530, 16 }, { 65531, 16 }, { 65532, 16 }, { 65533, 16 }, { 65534, 16 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } + }; + static int const YQT[] = { 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, + 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99 }; + static int const UVQT[] = { 17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 }; + static float const aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f, + 1.0f * 2.828427125f, 0.785694958f * 2.828427125f, 0.541196100f * 2.828427125f, 0.275899379f * 2.828427125f }; + + int row, col, i, k, subsample; + float fdtbl_Y[64], fdtbl_UV[64]; + unsigned char YTable[64], UVTable[64]; + + if (!data || !width || !height || comp > 4 || comp < 1) { + return 0; + } + + quality = quality ? quality : 90; + subsample = quality <= 90 ? 1 : 0; + quality = quality < 1 ? 1 : quality > 100 ? 100 + : quality; + quality = quality < 50 ? 5000 / quality : 200 - quality * 2; + + for (i = 0; i < 64; ++i) { + int uvti, yti = (YQT[i] * quality + 50) / 100; + YTable[stbiw__jpg_ZigZag[i]] = (unsigned char)(yti < 1 ? 1 : yti > 255 ? 255 + : yti); + uvti = (UVQT[i] * quality + 50) / 100; + UVTable[stbiw__jpg_ZigZag[i]] = (unsigned char)(uvti < 1 ? 1 : uvti > 255 ? 255 + : uvti); + } + + for (row = 0, k = 0; row < 8; ++row) { + for (col = 0; col < 8; ++col, ++k) { + fdtbl_Y[k] = 1 / (YTable[stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]); + fdtbl_UV[k] = 1 / (UVTable[stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]); + } + } + + // Write Headers + { + static unsigned char const head0[] = { 0xFF, 0xD8, 0xFF, 0xE0, 0, 0x10, 'J', 'F', 'I', 'F', 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0xFF, 0xDB, 0, 0x84, 0 }; + static unsigned char const head2[] = { 0xFF, 0xDA, 0, 0xC, 3, 1, 0, 2, 0x11, 3, 0x11, 0, 0x3F, 0 }; + unsigned char const head1[] = { 0xFF, 0xC0, 0, 0x11, 8, (unsigned char)(height >> 8), STBIW_UCHAR(height), (unsigned char)(width >> 8), STBIW_UCHAR(width), + 3, 1, (unsigned char)(subsample ? 0x22 : 0x11), 0, 2, 0x11, 1, 3, 0x11, 1, 0xFF, 0xC4, 0x01, 0xA2, 0 }; + s->func(s->context, (void*)head0, sizeof(head0)); + s->func(s->context, (void*)YTable, sizeof(YTable)); + stbiw__putc(s, 1); + s->func(s->context, UVTable, sizeof(UVTable)); + s->func(s->context, (void*)head1, sizeof(head1)); + s->func(s->context, (void*)(std_dc_luminance_nrcodes + 1), sizeof(std_dc_luminance_nrcodes) - 1); + s->func(s->context, (void*)std_dc_luminance_values, sizeof(std_dc_luminance_values)); + stbiw__putc(s, 0x10); // HTYACinfo + s->func(s->context, (void*)(std_ac_luminance_nrcodes + 1), sizeof(std_ac_luminance_nrcodes) - 1); + s->func(s->context, (void*)std_ac_luminance_values, sizeof(std_ac_luminance_values)); + stbiw__putc(s, 1); // HTUDCinfo + s->func(s->context, (void*)(std_dc_chrominance_nrcodes + 1), sizeof(std_dc_chrominance_nrcodes) - 1); + s->func(s->context, (void*)std_dc_chrominance_values, sizeof(std_dc_chrominance_values)); + stbiw__putc(s, 0x11); // HTUACinfo + s->func(s->context, (void*)(std_ac_chrominance_nrcodes + 1), sizeof(std_ac_chrominance_nrcodes) - 1); + s->func(s->context, (void*)std_ac_chrominance_values, sizeof(std_ac_chrominance_values)); + s->func(s->context, (void*)head2, sizeof(head2)); + } + + // Encode 8x8 macroblocks + { + static unsigned short const fillBits[] = { 0x7F, 7 }; + int DCY = 0, DCU = 0, DCV = 0; + int bitBuf = 0, bitCnt = 0; + // comp == 2 is grey+alpha (alpha is ignored) + int ofsG = comp > 2 ? 1 : 0, ofsB = comp > 2 ? 2 : 0; + unsigned char const* dataR = (unsigned char const*)data; + unsigned char const* dataG = dataR + ofsG; + unsigned char const* dataB = dataR + ofsB; + int x, y, pos; + if (subsample) { + for (y = 0; y < height; y += 16) { + for (x = 0; x < width; x += 16) { + float Y[256], U[256], V[256]; + for (row = y, pos = 0; row < y + 16; ++row) { + // row >= height => use last input row + int clamped_row = (row < height) ? row : height - 1; + int base_p = (stbi__flip_vertically_on_write ? (height - 1 - clamped_row) : clamped_row) * width * comp; + for (col = x; col < x + 16; ++col, ++pos) { + // if col >= width => use pixel from last input column + int p = base_p + ((col < width) ? col : (width - 1)) * comp; + float r = dataR[p], g = dataG[p], b = dataB[p]; + Y[pos] = +0.29900f * r + 0.58700f * g + 0.11400f * b - 128; + U[pos] = -0.16874f * r - 0.33126f * g + 0.50000f * b; + V[pos] = +0.50000f * r - 0.41869f * g - 0.08131f * b; + } + } + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y + 0, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y + 8, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y + 128, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y + 136, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); + + // subsample U,V + { + float subU[64], subV[64]; + int yy, xx; + for (yy = 0, pos = 0; yy < 8; ++yy) { + for (xx = 0; xx < 8; ++xx, ++pos) { + int j = yy * 32 + xx * 2; + subU[pos] = (U[j + 0] + U[j + 1] + U[j + 16] + U[j + 17]) * 0.25f; + subV[pos] = (V[j + 0] + V[j + 1] + V[j + 16] + V[j + 17]) * 0.25f; + } + } + DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subU, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); + DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subV, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); + } + } + } + } else { + for (y = 0; y < height; y += 8) { + for (x = 0; x < width; x += 8) { + float Y[64], U[64], V[64]; + for (row = y, pos = 0; row < y + 8; ++row) { + // row >= height => use last input row + int clamped_row = (row < height) ? row : height - 1; + int base_p = (stbi__flip_vertically_on_write ? (height - 1 - clamped_row) : clamped_row) * width * comp; + for (col = x; col < x + 8; ++col, ++pos) { + // if col >= width => use pixel from last input column + int p = base_p + ((col < width) ? col : (width - 1)) * comp; + float r = dataR[p], g = dataG[p], b = dataB[p]; + Y[pos] = +0.29900f * r + 0.58700f * g + 0.11400f * b - 128; + U[pos] = -0.16874f * r - 0.33126f * g + 0.50000f * b; + V[pos] = +0.50000f * r - 0.41869f * g - 0.08131f * b; + } + } + + DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y, 8, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, U, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); + DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, V, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); + } + } + } + + // Do the bit alignment of the EOI marker + stbiw__jpg_writeBits(s, &bitBuf, &bitCnt, fillBits); + } + + // EOI + stbiw__putc(s, 0xFF); + stbiw__putc(s, 0xD9); + + return 1; +} + +STBIWDEF int stbi_write_jpg_to_func(stbi_write_func* func, void* context, int x, int y, int comp, void const* data, int quality) +{ + stbi__write_context s = { 0 }; + stbi__start_write_callbacks(&s, func, context); + return stbi_write_jpg_core(&s, x, y, comp, (void*)data, quality); +} + +# ifndef STBI_WRITE_NO_STDIO +STBIWDEF int stbi_write_jpg(char const* filename, int x, int y, int comp, void const* data, int quality) +{ + stbi__write_context s = { 0 }; + if (stbi__start_write_file(&s, filename)) { + int r = stbi_write_jpg_core(&s, x, y, comp, data, quality); + stbi__end_write_file(&s); + return r; + } else + return 0; +} +# endif + +#endif // STB_IMAGE_WRITE_IMPLEMENTATION + +/* Revision history + 1.16 (2021-07-11) + make Deflate code emit uncompressed blocks when it would otherwise expand + support writing BMPs with alpha channel + 1.15 (2020-07-13) unknown + 1.14 (2020-02-02) updated JPEG writer to downsample chroma channels + 1.13 + 1.12 + 1.11 (2019-08-11) + + 1.10 (2019-02-07) + support utf8 filenames in Windows; fix warnings and platform ifdefs + 1.09 (2018-02-11) + fix typo in zlib quality API, improve STB_I_W_STATIC in C++ + 1.08 (2018-01-29) + add stbi__flip_vertically_on_write, external zlib, zlib quality, choose PNG filter + 1.07 (2017-07-24) + doc fix + 1.06 (2017-07-23) + writing JPEG (using Jon Olick's code) + 1.05 ??? + 1.04 (2017-03-03) + monochrome BMP expansion + 1.03 ??? + 1.02 (2016-04-02) + avoid allocating large structures on the stack + 1.01 (2016-01-16) + STBIW_REALLOC_SIZED: support allocators with no realloc support + avoid race-condition in crc initialization + minor compile issues + 1.00 (2015-09-14) + installable file IO function + 0.99 (2015-09-13) + warning fixes; TGA rle support + 0.98 (2015-04-08) + added STBIW_MALLOC, STBIW_ASSERT etc + 0.97 (2015-01-18) + fixed HDR asserts, rewrote HDR rle logic + 0.96 (2015-01-17) + add HDR output + fix monochrome BMP + 0.95 (2014-08-17) + add monochrome TGA output + 0.94 (2014-05-31) + rename private functions to avoid conflicts with stb_image.h + 0.93 (2014-05-27) + warning fixes + 0.92 (2010-08-01) + casts to unsigned char to fix warnings + 0.91 (2010-07-17) + first public release + 0.90 first internal release +*/ + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ diff --git a/src/libtemple/ioport.h b/src/libtemple/ioport.h new file mode 100644 index 0000000..69e69e3 --- /dev/null +++ b/src/libtemple/ioport.h @@ -0,0 +1,6 @@ +u8 ioport_read_u8(u16 address); +u16 ioport_read_u16(u16 address); +u32 ioport_read_u32(u16 address); +void ioport_write_u8(u16 address, u8 value); +void ioport_write_u16(u16 address, u16 value); +void ioport_write_u32(u16 address, u32 value); diff --git a/src/libtemple/libtemple.cpp b/src/libtemple/libtemple.cpp new file mode 100644 index 0000000..82ce415 --- /dev/null +++ b/src/libtemple/libtemple.cpp @@ -0,0 +1,77 @@ +unsigned long ioport_read_u8(unsigned short address) { return 0; } + +unsigned long ioport_read_u16(unsigned short address) { return 0; } + +unsigned long ioport_read_u32(unsigned short address) { return 0; } + +void ioport_write_u8(unsigned short address, unsigned char value) { } + +void ioport_write_u16(unsigned short address, unsigned short value) { } + +void ioport_write_u32(unsigned short address, unsigned int value) { } + +bool os_blink(char const* frequency_as_string) { return 0; } + +unsigned long os_call(unsigned long function_name, unsigned long arg) { return 0; } + +unsigned int os_device_calloc(unsigned int size) { return 0; } + +void os_exit() { } + +char const* os_file_picker(char const* path, char const* glob) { return 0; } + +char const* os_files_list(char const* path) { return 0; } + +bool os_is_vm() { return 0; } + +bool os_path_exists(char const* path) { return 0; } + +void os_pc_speaker(char const* frequency_as_string) { } + +unsigned long os_random() { return 0; } + +unsigned long os_read_entire_file(char const* filename, long* size) +{ + return 0; +} + +void os_screenshot() { } + +char const* os_to_uppercase(char const* input_string) { return 0; } + +void os_write_entire_file(char const* filename, unsigned char* buffer, + long size) { } + +long pci_find(long class_code) { return 0; } + +unsigned long pci_read_u8(long bus, long device, long fun, long offset) +{ + return 0; +} + +unsigned long pci_read_u16(long bus, long device, long fun, long offset) +{ + return 0; +} + +unsigned long pci_read_u32(long bus, long device, long fun, long offset) +{ + return 0; +} + +void pci_write_u8(long bus, long device, long fun, long offset, + unsigned char value) { } + +void pci_write_u16(long bus, long device, long fun, long offset, + unsigned short value) { } + +void pci_write_u32(long bus, long device, long fun, long offset, + unsigned int value) { } + +void time_busy(long duration) { } + +long time_jiffies() { return 0; } + +long time_now() { return 0; } + +void time_sleep(long duration) { } \ No newline at end of file diff --git a/src/libtemple/os.h b/src/libtemple/os.h new file mode 100644 index 0000000..24e489e --- /dev/null +++ b/src/libtemple/os.h @@ -0,0 +1,15 @@ +bool os_blink(char const* frequency_as_string); +unsigned long os_call(unsigned long function_name, unsigned long arg); +unsigned int os_device_calloc(unsigned int size); +void os_exit(); +char const* os_file_picker(char const* path, char const* glob); +char const* os_files_list(char const* path); +bool os_is_vm(); +bool os_path_exists(char const* path); +void os_pc_speaker(char const* frequency_as_string); +unsigned long os_random(); +u8* os_read_entire_file(char const* filename, i64* size); +void os_screenshot(); +char const* os_to_uppercase(char const* input_string); +void os_write_entire_file(char const* filename, unsigned char* buffer, + i64 size); \ No newline at end of file diff --git a/src/libtemple/pci.h b/src/libtemple/pci.h new file mode 100644 index 0000000..33d7fea --- /dev/null +++ b/src/libtemple/pci.h @@ -0,0 +1,10 @@ +long pci_find(long class_code); +unsigned long pci_read_u8(long bus, long device, long fun, long offset); +unsigned long pci_read_u16(long bus, long device, long fun, long offset); +unsigned long pci_read_u32(long bus, long device, long fun, long offset); +void pci_write_u8(long bus, long device, long fun, long offset, + unsigned char value); +void pci_write_u16(long bus, long device, long fun, long offset, + unsigned short value); +void pci_write_u32(long bus, long device, long fun, long offset, + unsigned int value); \ No newline at end of file diff --git a/src/libtemple/time.h b/src/libtemple/time.h new file mode 100644 index 0000000..e2fe7c4 --- /dev/null +++ b/src/libtemple/time.h @@ -0,0 +1,4 @@ +void time_busy(i64 duration); +i64 time_jiffies(); +i64 time_now(); +void time_sleep(i64 duration); \ No newline at end of file diff --git a/src/net/devices/virtio.h b/src/net/devices/virtio.h new file mode 100644 index 0000000..989e1d0 --- /dev/null +++ b/src/net/devices/virtio.h @@ -0,0 +1,28 @@ +struct virtio_queue_buf { + u64 address; + u32 length; + u16 flags; + u16 next; +}; +struct virtio_avail { + u16 flags; + u16 index; + u16 ring[256]; + u16 int_index; +}; +struct virtio_used_item { + u32 index; + u32 length; +}; +struct virtio_used { + u16 flags; + u16 index; + virtio_used_item ring[256]; + u16 int_index; +}; +struct virtio_queue { + virtio_queue_buf buffers[256]; + virtio_avail available; + u8 padding[3578]; + virtio_used used; +}; \ No newline at end of file diff --git a/src/net/devices/virtio.jakt b/src/net/devices/virtio.jakt new file mode 100644 index 0000000..647af28 --- /dev/null +++ b/src/net/devices/virtio.jakt @@ -0,0 +1,143 @@ +import relative parent::os::os { OS } +import relative parent::os::pci { PCI, PCIDevice } + +enum VirtIOConfig: u8 { + acknowledge = 1 + driver = 2 + driver_ok = 4 +} + +enum VirtIOReg: u16 { + host_features = 0 + guest_features = 4 + queue_page_frame_number = 8 + queue_size = 12 + queue_select = 14 + queue_notify = 16 + status = 18 + isr = 19 + config = 20 +} + +class VirtIO { + public pci_device: PCIDevice + public rq_index: i64 + public rq_size: u16 + public rq: u32 + public tq_size: u16 + public tq: u32 + public fn rx_frame(mut this) throws -> [u8] { + mut frame: [u8] = [] + mut queue_notify: bool = false + unsafe { + cpp { +" +#include <../../src/net/devices/virtio.h> +virtio_queue *rq = (virtio_queue*)this->rq; +i64 i = this->rq_index; +i64 used_index = rq->used.index; +if (used_index < i) + used_index += 0x10000; +if (used_index && i != used_index) { + virtio_used_item* item = rq->used.ring; + u8* buffer = (u8*)rq->buffers[item[i % 256].index + 1].address; + i64 length = item[i % 256].length - 10; + for (i64 j = 0; j < length; j++) + frame.push(buffer[j]); + this->rq_index = used_index % 0x10000; + rq->available.index++; + queue_notify = true; +} +" + } + } + if queue_notify { + .pci_device.io_write_u16(offset: VirtIOReg::queue_notify as! u16, value: 0) + } + return frame + } + public fn tx_frame(mut this, anon mut data: [u8]) throws { + mut size = data.size() + unsafe { + cpp { +" +#include <../../src/net/devices/virtio.h> +virtio_queue *tq = (virtio_queue*)this->tq; +int tq_idx = tq->available.index % 256; +int tq_idx2 = tq_idx % 128; +memset((u8*)tq->buffers[tq_idx2 * 2].address, 0, 10); +u8 *buffer = (u8*)tq->buffers[(tq_idx2 * 2) + 1].address; + for (int i = 0; i < size; i++) + buffer[i] = data[i]; +tq->buffers[tq_idx2 * 2].length = 10; +tq->buffers[tq_idx2 * 2].flags = 1; +tq->buffers[tq_idx2 * 2].next = (tq_idx2 * 2) + 1; +tq->buffers[(tq_idx2 * 2) + 1].length = size; +tq->buffers[(tq_idx2 * 2) + 1].flags = 0; +tq->buffers[(tq_idx2 * 2) + 1].next = 0; +tq->available.ring[tq_idx] = tq_idx2 * 2; +tq->available.index++; +" + } + } + .pci_device.io_write_u16(offset: VirtIOReg::queue_notify as! u16, value: 1) + } + fn reset_device(this) { + .pci_device.io_write_u8(offset: VirtIOReg::status as! u16, value: 0) + } + fn found_driver(this) throws { + .pci_device.io_write_u8(offset: VirtIOReg::status as! u16, + value: .pci_device.io_read_u8(VirtIOReg::status as! u16) | VirtIOConfig::acknowledge as! u8 | VirtIOConfig::driver as! u8) + } + fn setup_rx_queue(mut this) throws { + .pci_device.io_write_u16(offset: VirtIOReg::queue_select as! u16, value: 0) + .rq_size = .pci_device.io_read_u16(VirtIOReg::queue_size as! u16) + .rq = OS::device_calloc(16384) + .pci_device.io_write_u32(offset: VirtIOReg::queue_page_frame_number as! u16, value: .rq / 4096) + } + fn setup_tx_queue(mut this) throws { + .pci_device.io_write_u16(offset: VirtIOReg::queue_select as! u16, value: 1) + .tq_size = .pci_device.io_read_u16(VirtIOReg::queue_size as! u16) + .tq = OS::device_calloc(16384) + .pci_device.io_write_u32(offset: VirtIOReg::queue_page_frame_number as! u16, value: .tq / 4096) + } + fn init_queue_buffers(this) { + unsafe { + cpp { +" +#include <../../src/net/devices/virtio.h> +virtio_queue *rq = (virtio_queue*)this->rq; +virtio_queue *tq = (virtio_queue*)this->tq; +for (int i = 0; i < 128; i++) { + rq->buffers[i * 2].address = (u64)calloc(1, 16); + rq->buffers[i * 2].length = 10; + rq->buffers[i * 2].flags = 3; + rq->buffers[i * 2].next = (i * 2) + 1; + rq->buffers[(i * 2) + 1].address = (u64)calloc(1, 2048); + rq->buffers[(i * 2) + 1].length = 2048; + rq->buffers[(i * 2) + 1].flags = 2; + rq->buffers[(i * 2) + 1].next = 0; + rq->available.ring[i] = i * 2; + rq->available.ring[i + 128] = i * 2; + tq->buffers[i * 2].address = (u64)calloc(1, 16); + tq->buffers[(i * 2) + 1].address = (u64)calloc(1, 2048); +} +rq->available.index = 1; +" + } + } + } + fn init_ok(this) throws { + .pci_device.io_write_u8(offset: VirtIOReg::status as! u16, + value: .pci_device.io_read_u8(VirtIOReg::status as! u16) | VirtIOConfig::driver_ok as! u8) + .pci_device.io_write_u16(offset: VirtIOReg::queue_notify as! u16, value: 0) + } + public fn init(mut this) throws { + .reset_device() + .found_driver() + .setup_rx_queue() + .setup_tx_queue() + .init_queue_buffers() + .init_ok() + } +} \ No newline at end of file diff --git a/src/net/lib/json.jakt b/src/net/lib/json.jakt new file mode 100644 index 0000000..5cdd177 --- /dev/null +++ b/src/net/lib/json.jakt @@ -0,0 +1,350 @@ +/// Expect: +/// - output: "JsonValue::JsonArray([JsonValue::Object([\"id\": JsonValue::Number(0.5), \"displayName\": JsonValue::JsonString(\"Air\"), \"name\": JsonValue::JsonString(\"air\"), \"hardness\": JsonValue::Number(3.9), \"resistance\": JsonValue::Number(0), \"minStateId\": JsonValue::Number(0), \"maxStateId\": JsonValue::Number(0), \"states\": JsonValue::JsonArray([])])])\n" + +enum JsonValue { + Null + Bool(bool) + Number(f64) + // FIXME: This variant should be called String + JsonString(String) + // FIXME: This variant should be called Array + JsonArray([JsonValue]) + Object([String:JsonValue]) +} + +fn is_whitespace(anon c: u8) -> bool { + return match c { + b'\t' | b'\n' | b'\r' | b' ' => true + else => false + } +} + +class JsonParser { + input: String + index: usize + + public fn construct(input: String) throws -> JsonParser { + return JsonParser(input, index: 0) + } + + fn eof(this) -> bool { + return .index >= .input.length() + } + + public fn parse(mut this) throws -> JsonValue { + // FIXME: Jakt::JsonParser ignores trailing whitespace for some reason. + let value = .parse_helper() + if not .eof() { + // FIXME: "Didn't consume all input" + throw Error::from_errno(9000) + } + return value + } + + fn skip_whitespace(mut this) { + while not .eof() { + if not is_whitespace(.input.byte_at(.index)) { + break + } + .index++ + } + } + + fn consume_and_unescape_string(mut this) throws -> String { + if not .consume_specific(b'"') { + // FIXME: "Expected '"' + throw Error::from_errno(9007) + } + + mut builder = StringBuilder::create() + + loop { + mut ch = 0u8 + mut peek_index = .index + while peek_index < .input.length() { + ch = .input.byte_at(peek_index) + if ch == b'"' or ch == b'\\' { + break + } + // FIXME: This is is_ascii_c0_control() + if ch < 0x20 { + // FIXME: "Error while parsing string" + throw Error::from_errno(9008) + } + peek_index++ + } + + while peek_index != .index { + builder.append(.input.byte_at(.index)) + .index++ + } + + if .eof() { + break + } + + if ch == b'"' { + break + } + + if ch != b'\\' { + builder.append(.consume()) + continue + } + + .ignore() + + match .peek() { + b'"' | b'/' | b'\\' | b'n' | b'r' | b't' | b'b' | b'f' => { + let ch = .consume() + builder.append(match ch { + b'n' => b'\n' + b'r' => b'\r' + b't' => b'\t' + b'b' => b'\b' + b'f' => b'\f' + else => ch + }) + } + b'u' => { + eprintln("FIXME: Implement unicode literals") + abort() + } + else => { + // FIXME: "Error while parsing string" + throw Error::from_errno(9009) + } + } + } + + if not .consume_specific(b'"') { + // FIXME: "Expected '"'" + throw Error::from_errno(9010) + } + + return builder.to_string() + } + + fn ignore(mut this) { + .index++ + } + + fn peek(this) -> u8 { + if .eof() { + return 0 + } + return .input.byte_at(.index) + } + + fn consume(mut this) -> u8 { + let ch = .peek() + .index++ + return ch + } + + fn consume_specific(mut this, anon expected: u8) -> bool { + if .peek() != expected { + return false + } + .index++ + return true + } + + fn parse_helper(mut this) throws -> JsonValue { + .skip_whitespace() + return match .peek() { + b'{' => .parse_object() + b'[' => .parse_array() + b'"' => .parse_string() + b'-' => .parse_number() + b'0' | b'1' | b'2' | b'3' | b'4' | b'5' | b'6' | b'7' | b'8' | b'9' => .parse_number() + b'f' => .parse_false() + b't' => .parse_true() + b'n' => .parse_null() + else => .parse_failure(error_message: "Unexpected character") + } + } + + fn parse_failure(this, error_message: String) throws -> JsonValue { + throw Error::from_errno(9001) + } + + fn parse_array(mut this) throws -> JsonValue { + mut array: [JsonValue] = [] + if (not .consume_specific(b'[')) { + // Expected '[' + throw Error::from_errno(9014) + } + loop { + .skip_whitespace() + if .peek() == b']' { + break + } + array.push(.parse_helper()) + .skip_whitespace() + if .peek() == b']' { + break + } + if not .consume_specific(b',') { + // Expected ',' + throw Error::from_errno(9014) + } + .skip_whitespace() + if .peek() == b']' { + // Unexpected ']' + throw Error::from_errno(9014) + } + } + if not .consume_specific(b']') { + // Expected ']' + throw Error::from_errno(9015) + } + return JsonValue::JsonArray(array) + } + + fn parse_object(mut this) throws -> JsonValue { + if not .consume_specific(b'{') { + // FIXME: "Expected '{'" + throw Error::from_errno(9002) + } + + mut values: [String:JsonValue] = [:] + + loop { + .skip_whitespace() + if .peek() == b'}' { + break + } + .skip_whitespace() + let key = .consume_and_unescape_string() + .skip_whitespace() + if not .consume_specific(b':') { + // FIXME: "Expected ':'" + throw Error::from_errno(9003) + } + .skip_whitespace() + let value = .parse_helper() + // FIXME: This should say `values[key] = value`, but the compiler doesn't wrap it in TRY() + values.set(key, value) + .skip_whitespace() + if .peek() == b'}' { + break + } + if not .consume_specific(b',') { + // FIXME: "Expected ','" + throw Error::from_errno(9004) + } + .skip_whitespace() + if .peek() == b'}' { + // FIXME: "Unexpected '}'" + throw Error::from_errno(9005) + } + } + if not .consume_specific(b'}') { + // FIXME: "Expected '}'" + throw Error::from_errno(9006) + } + return JsonValue::Object(values) + } + + fn char_to_f64(anon num: u8) throws -> f64 { + // FIXME 1: Shouldn't need this function at all + // FIXME 2: Shouldn't need return in else branch + return match num { + 0u8 => 0.0 + 1u8 => 1.0 + 2u8 => 2.0 + 3u8 => 3.0 + 4u8 => 4.0 + 5u8 => 5.0 + 6u8 => 6.0 + 7u8 => 7.0 + 8u8 => 8.0 + 9u8 => 9.0 + else => { + // FIXME: "Unexpected number" + throw Error::from_errno(9017) + } + } + } + + fn parse_number(mut this) throws -> JsonValue { + // FIXME: This implementation doesn't match JsonParser.cpp + let is_negative = .consume_specific(b'-') + mut decimal_start_index: usize? = None + + mut value = 0.0 + + while not .eof() { + let ch = .peek() + if ch == b'.' { + if decimal_start_index.has_value() { + // FIXME: "Unexpected '.'" + throw Error::from_errno(9016) + } + decimal_start_index = .index++ + continue + } else if not (ch >= b'0' and ch <= b'9') { + break + } + + if not decimal_start_index.has_value() { + value *= 10.0 + value += char_to_f64(ch - b'0') + } else { + mut num = char_to_f64(ch - b'0') + // FIXME: This should really be: `value += pow(10, -decimal_place)*num`, but: there's no pow function and you can't multiply float by usize + let decimal_place = .index - decimal_start_index.value() + for i in 0..decimal_place { + num /= 10.0 + } + value += num + } + .index++ + } + + if is_negative { + value *= -1.0 + } + + return JsonValue::Number(value) + } + + fn parse_string(mut this) throws -> JsonValue { + return JsonValue::JsonString(.consume_and_unescape_string()) + } + + fn parse_false(mut this) throws -> JsonValue { + if (.consume() != b'f' or .consume() != b'a' or .consume() != b'l' or .consume() != b's' or .consume() != b'e') { + // FIXME: "Expected 'false'" + throw Error::from_errno(9011) + } + return JsonValue::Bool(false) + } + + fn parse_true(mut this) throws -> JsonValue { + if (.consume() != b't' or .consume() != b'r' or .consume() != b'u' or .consume() != b'e') { + // FIXME: "Expected 'true'" + throw Error::from_errno(9012) + } + return JsonValue::Bool(true) + } + + fn parse_null(mut this) throws -> JsonValue { + if (.consume() != b'n' or .consume() != b'u' or .consume() != b'l' or .consume() != b'l') { + // FIXME: "Expected 'null'" + throw Error::from_errno(9013) + } + return JsonValue::Null + } +} + +// fn parse_json(input: String) throws -> JsonValue { +// mut parser = JsonParser::construct(input) +// return parser.parse() +// } +// +// fn main() { +// let value = parse_json(input: "[{\"id\":0.5,\"displayName\":\"Air\",\"name\":\"air\",\"hardness\":3.9,\"resistance\":0,\"minStateId\":0,\"maxStateId\":0,\"states\":[]}]") +// println("{}", value) +// } \ No newline at end of file diff --git a/src/net/lib/util.jakt b/src/net/lib/util.jakt new file mode 100644 index 0000000..434158d --- /dev/null +++ b/src/net/lib/util.jakt @@ -0,0 +1,147 @@ +import relative parent::os::os { OS } + +struct Util { + fn get_address_u32_from_ipv4_u8_array(anon array: [u8]) -> u32 { + if array.size() != 4 { + return 0 + } + mut address: u32 = (array[3] as! u32 & 0xff) as! u32 + address += ((array[2] as! u32 & 0xff) << 8) as! u32 + address += ((array[1] as! u32 & 0xff) << 16) as! u32 + address += ((array[0] as! u32 & 0xff) << 24) as! u32 + return address + } + fn get_hexadecimal_string_from_ipv4_u8_array(anon array: [u8]) throws -> String { + mut s = StringBuilder::create() + unsafe { + cpp { + "char *chars = (char*)calloc(32, 1); + sprintf(chars, \"%02x%02x%02x%02x\", array[0], array[1], array[2], array[3]); + s.append_c_string(chars); + delete(chars);" + } + } + return s.to_string() + } + fn get_md5_string_from_string(anon s: String) throws -> String { + mut sb = StringBuilder::create() + unsafe { + cpp { + " + char* md5 = (char*)os_call((u64)\"@saubari_get_md5_string_from_string\", (u64)s.characters()); + sb.append_c_string(md5); + delete(md5); + " + } + } + return sb.to_string() + } + fn get_ipv4_u8_array_from_address_string(anon s: String) throws -> [u8] { + mut address: [u8] = [] + let octet_strings = s.split(c'.') + for octet_string in octet_strings { + unsafe { + cpp { + "auto value = octet_string.to_number<u32>(); + if (value.has_value()) { + auto result = value.release_value(); + address.push(result & 0xff); + }" + } + } + } + return address + } + fn get_ipv4_u8_array_from_address_u32(anon addr: u32) throws -> [u8] { + mut address: [u8] = [] + // let source_address: [u8] = [ipv4_packet[12], ipv4_packet[13], ipv4_packet[14], ipv4_packet[15]] + address.push(((addr >> 24) & 0xff) as! u8) + address.push(((addr >> 16) & 0xff) as! u8) + address.push(((addr >> 8) & 0xff) as! u8) + address.push((addr & 0xff) as! u8) + return address + } + fn get_string_from_u8_array(anon array: [u8]) throws -> String { + mut s = StringBuilder::create() + unsafe { + cpp { + "for (int i = 0; i < array.size(); i++) { + s.append(array[i]); + }" + } + } + return s.to_string() + } + fn get_u16_from_u8_array(anon array: [u8], anon offset: i64) -> u16{ + return (array[offset] as! u16 << 8) + array[offset + 1] as! u16 + } + fn get_u16_from_u8_arrayslice(anon array: ArraySlice<u8>, anon offset: i64) -> u16{ + return (array[offset] as! u16 << 8) + array[offset + 1] as! u16 + } + fn push_string_to_u8_array(anon mut array: [u8], anon s: String) throws { + for i in 0..s.length() { + unsafe { + cpp { + "array.push(s.characters()[i]);" + } + } + } + } + fn push_u16_to_u8_array(anon mut array: [u8], anon value: u16) throws { + array.push((value >> 8) as! u8) + array.push((value & 0xff) as! u8) + } + fn push_u32_to_u8_array(anon mut array: [u8], anon value: u32) throws { + mut val_u32_to_u8: u32 = 0 + val_u32_to_u8 = (value >> 24) & 0xff + array.push(val_u32_to_u8 as! u8) + val_u32_to_u8 = (value >> 16) & 0xff + array.push(val_u32_to_u8 as! u8) + val_u32_to_u8 = (value >> 8) & 0xff + array.push(val_u32_to_u8 as! u8) + array.push((value & 0xff) as! u8) + } + fn get_dictionary_from_json_file(anon json_file: String) throws -> [String:String] { + mut dictionary: [String:String] = Dictionary() + let json_bytes = OS::read_entire_file(json_file) + let json_string = get_string_from_u8_array(json_bytes) + unsafe { + cpp { + "auto json = JsonValue::from_string(json_string).value(); + auto const& object = json.as_object(); + object.for_each_member([&]([[maybe_unused]] auto& property_name, [[maybe_unused]] const JsonValue& property_value) { + dictionary.set(property_name, property_value.deprecated_to_byte_string()); + });" + } + } + return dictionary + } + fn get_dictionary_from_string(anon s: String) throws -> [String:String] { + mut dictionary: [String:String] = Dictionary() + unsafe { + cpp { + "auto json = JsonValue::from_string(s).value(); + auto const& object = json.as_object(); + object.for_each_member([&]([[maybe_unused]] auto& property_name, [[maybe_unused]] const JsonValue& property_value) { + dictionary.set(property_name, property_value.deprecated_to_byte_string()); + });" + } + } + return dictionary + } + fn string_from_file(anon filepath: String) throws -> String { + if filepath.is_empty() or not OS::path_exists(filepath) { + return "" + } + let array = OS::read_entire_file(filepath) + mut s = StringBuilder::create() + unsafe { + cpp { + "for (int i = 0; i < array.size(); i++) { + s.append(array[i]); + }" + } + } + return s.to_string() + } +} \ No newline at end of file diff --git a/src/net/net.jakt b/src/net/net.jakt new file mode 100644 index 0000000..b7bdec9 --- /dev/null +++ b/src/net/net.jakt @@ -0,0 +1,173 @@ +import devices::virtio { VirtIO, VirtIOReg } + +import lib::util { Util } + +import os::os { OS } +import os::pci { PCI, PCIDevice } +import os::time { Time } + +import tcpip { TCPIP } + +class NetDevices { + public virtio: VirtIO + public fn create(pci_device: PCIDevice) throws -> NetDevices { + return NetDevices( + virtio: VirtIO(pci_device, rq_index: 0, rq_size: 0, rq: 0, tq_size: 0, tq: 0) + ) + } +} + +class Net { + public device: NetDevices + public mac_address: [u8] + public tcpip: TCPIP + public pci_device: PCIDevice + public fn init(config: [String:String]) throws -> Net { + let pci_device = PCI::find_device_by_class_code(0x020000) + mut net = Net( + device: NetDevices::create(pci_device) + mac_address: [] + tcpip: TCPIP( + ipv4_address: Util::get_ipv4_u8_array_from_address_string(config["tcpip.ipv4_address"]) + ipv4_netmask: Util::get_ipv4_u8_array_from_address_string(config["tcpip.ipv4_netmask"]) + ipv4_network: Util::get_ipv4_u8_array_from_address_string(config["tcpip.ipv4_network"]) + ipv4_gateway: Util::get_ipv4_u8_array_from_address_string(config["tcpip.ipv4_gateway"]) + dns_server_address: Util::get_ipv4_u8_array_from_address_string(config["tcpip.ipv4_dns_server_address"]) + dns_server_port: config["tcpip.ipv4_dns_server_port"].to_number<u32>().value() as! u16 + mss_size: config["tcpip.mss_size"].to_number<u32>().value() as! u16 + tx_queue: [] + ttl: 64 + arp_cache: Dictionary() + bound_sockets: Dictionary() + dns_cache: Dictionary() + tcp_sessions: [] + pending_dns_lookups: Dictionary() + pending_dns_cached_entries: Dictionary() + pending_icmp_requests: Dictionary() + timestamp_last_arp_request: 0 + rx_bytes: 0 + rx_frames: 0 + tx_bytes: 0 + tx_frames: 0 + ) + pci_device + ) + if net.pci_device.vendor_id() == 0x1af4 and net.pci_device.device_id() == 0x1000 { + println("[net] Found device: virtio-net, QEMU") + for i in 0u16..6u16 { + net.mac_address.push(net.pci_device.io_read_u8(VirtIOReg::config as! u16 + i)) + } + net.device.virtio.init() + return net + } + println("[net] No supported vendor ids found") + OS::exit() + return net + } + fn process_ethernet_frame(mut this, anon frame: [u8]) throws { + let ethertype: u16 = (frame[12] as! u16 * 256) + frame[13] as! u16 + match ethertype { + 0x0806 => { + //println("ARP") + .tcpip.process_arp_packet(.mac_address, frame) + } + 0x0800 => { + //println("IPv4") + .tcpip.process_ipv4_packet(.mac_address, frame) + } + 0x86dd => { + //.tcpip.process_ipv6_packet(frame) + } + 0x8035 => { + //.tcpip.process_rarp_packet(frame) + } + else => { + // unsupported + } + } + } + public fn process_events(mut this) throws { + mut received_frame = .rx_frame() + if received_frame.size() > 0 { + .tcpip.rx_bytes += received_frame.size() as! u64 + .tcpip.rx_frames++ + .process_ethernet_frame(received_frame) + } + .tcpip.tcp_transmit_pending_data_for_existing_sessions() + for frame in .tcpip.tx_queue { + .tx_frame(frame) + } + if .tcpip.tx_queue.size() > 0 { + .tcpip.tx_queue.shrink(0) + } + .tcpip.tcp_process_bind_request() + .tcpip.tcp_process_client_socket_request(.mac_address) + .tcpip.tcp_process_client_received_data() + .tcpip.tcp_process_client_send_requests(.mac_address) + .tcpip.dns_process_client_request(.mac_address) + .tcpip.icmp_process_client_request(.mac_address) + .tcpip.netinfo_process_client_request(.mac_address) + } + fn rx_frame(mut this) throws -> [u8] { + mut frame: [u8] = [] + if .pci_device.vendor_id() == 0x1af4 and .pci_device.device_id() == 0x1000 { + frame = .device.virtio.rx_frame() + } + return frame + } + fn tx_frame(mut this, anon mut data: [u8]) throws { + if data.size() < 1 { + return + } + while data.size() < 60 { + data.push(0u8) + } + .tcpip.tx_bytes += data.size() as! u64 + .tcpip.tx_frames++ + if .pci_device.vendor_id() == 0x1af4 and .pci_device.device_id() == 0x1000 { + .device.virtio.tx_frame(data) + } + } +} + +fn main() { + println("$WW,1$") + mut config = Util::get_dictionary_from_json_file("M:/System/Config/Net.json") + mut net = Net::init(config) + + println("[net] PCI device is {}", net.pci_device) + print("[net] MAC address is ") + for i in 0u16..5u16 { + print("{:0>2x}:", net.mac_address[i]) + } + println("{:0>2x}", net.mac_address[5]) + print("[net] IPv4 address is ") + for i in 0u16..3u16 { + print("{:d}.", net.tcpip.ipv4_address[i]) + } + println("{:d}", net.tcpip.ipv4_address[3]) + println(" ") + + // Update the ARP cache entry for IPv4 gateway address + net.tcpip.send_arp_request(net.mac_address, net.tcpip.ipv4_gateway) + + mut prev_rx_frames = net.tcpip.rx_frames + mut prev_tx_frames = net.tcpip.tx_frames + mut prev_jiffies = Time::jiffies() + + while true { + net.process_events() + if (prev_rx_frames != net.tcpip.rx_frames) or (prev_tx_frames != net.tcpip.tx_frames) { + prev_rx_frames = net.tcpip.rx_frames + prev_tx_frames = net.tcpip.tx_frames + prev_jiffies = Time::jiffies() + } + if Time::jiffies() < prev_jiffies + 250 { + Time::sleep(0) + } else { + Time::sleep(1) + } + } + + OS::exit() +} \ No newline at end of file diff --git a/src/net/os/ioport.jakt b/src/net/os/ioport.jakt new file mode 100644 index 0000000..a01eaa2 --- /dev/null +++ b/src/net/os/ioport.jakt @@ -0,0 +1,29 @@ +import extern c "ioport.h" { + extern fn ioport_read_u8(address: u16) -> u8 + extern fn ioport_read_u16(address: u16) -> u16 + extern fn ioport_read_u32(address: u16) -> u32 + extern fn ioport_write_u8(address: u16, value: u8) + extern fn ioport_write_u16(address: u16, value: u16) + extern fn ioport_write_u32(address: u16, value: u32) +} + +struct IOPort { + fn read_u8(anon address: u16) throws -> u8 { + return ioport_read_u8(address) + } + fn read_u16(anon address: u16) throws -> u16 { + return ioport_read_u16(address) + } + fn read_u32(anon address: u16) throws -> u32 { + return ioport_read_u32(address) + } + fn write_u8(address: u16, value: u8) { + return ioport_write_u8(address, value) + } + fn write_u16(address: u16, value: u16) { + return ioport_write_u16(address, value) + } + fn write_u32(address: u16, value: u32) { + return ioport_write_u32(address, value) + } +} diff --git a/src/net/os/os.jakt b/src/net/os/os.jakt new file mode 100644 index 0000000..358ac9f --- /dev/null +++ b/src/net/os/os.jakt @@ -0,0 +1,154 @@ +import extern c "os.h" { + extern fn os_blink(frequency: raw c_char) -> bool + extern fn os_call(function_name: u64, arg: u64) -> u64 + extern fn os_device_calloc(size: u32) -> u32 + extern fn os_exit() + extern fn os_file_picker(path: raw c_char, glob: raw c_char) + extern fn os_files_list(path: raw c_char) + extern fn os_is_vm() -> bool + extern fn os_path_exists(anon path: raw c_char) -> bool + extern fn os_pc_speaker(frequency: raw c_char) + extern fn os_random() -> u64 + extern fn os_screenshot() + extern fn os_to_uppercase(anon input_string: raw c_char) -> raw c_char +} + +struct OS { + fn blink(frequency: f64 = 2.5) throws -> bool { + let frequency_as_string = format("{}", frequency) + return os_blink(frequency: frequency_as_string.c_string()) + } + fn call(anon function_name: String, anon arg: String) throws -> u64 { + mut res: u64 = 0 + unsafe { + cpp { + " + res = os_call((u64)function_name.characters(), (u64)arg.characters()); + " + } + } + return res + } + fn device_calloc(anon size: u32) throws -> u32 { + return os_device_calloc(size) + } + fn device_copy_buffer(anon buffer: [u8]) -> u32 { + mut address: u32 = 0 + mut size = buffer.size() + unsafe { + cpp { + "u8 *data = (u8*)os_device_calloc(size); + for (int i = 0; i < size; i++) + data[i] = buffer[i]; + address = (uintptr_t)data;" + } + } + return address + } + fn exit() { + os_exit() + } + fn file_picker(path: String, glob: String) throws -> String { + mut s = StringBuilder::create() + unsafe { + cpp { + "char const *chars = os_file_picker(path.characters(), glob.characters()); + s.append_c_string(chars); + delete(chars);" + } + } + return s.to_string() + } + fn files_list(path: String) throws -> [String] { + mut s = StringBuilder::create() + unsafe { + cpp { + "char const *chars = os_files_list(path.characters()); + if (chars) { + s.append_c_string(chars); + delete(chars); + }" + } + } + return s.to_string().split(c'|') + } + fn path_exists(anon path: String) -> bool { + return os_path_exists(path.c_string()) + } + fn is_vm() -> bool { + return os_is_vm() + } + fn pc_speaker(frequency: f64) throws { + let frequency_as_string = format("{}", frequency) + os_pc_speaker(frequency: frequency_as_string.c_string()) + } + fn put_char(ch: u8) { + unsafe { + cpp { + "putchar(ch);" + } + } + } + fn random() -> u64 { + return os_random() + } + fn read_entire_file(anon filename: String) throws -> [u8] { + mut size = 0 + mut buffer: [u8] = [] + unsafe { + cpp { + "u8 *data = os_read_entire_file(filename.characters(), &size); + for (int i = 0; i < size; i++) + buffer.push(data[i]); + free(data);" + } + } + return buffer + } + fn read_device_memory(address: u32, size: i64) throws -> [u8] { + mut buffer: [u8] = []; + unsafe { + cpp { + "u8 *device_memory = (u8*)address; + for (int i = 0; i < size; i++) + buffer.push(device_memory[i]);" + } + } + return buffer + } + fn read_u16_from_device_memory(anon address: u32) throws -> u16 { + mut value: u16 = 0 + unsafe { + cpp { + "value = *(u16*)address;" + } + } + return value + } + fn screenshot() { + os_screenshot() + } + fn to_uppercase(anon input_string: String) throws -> String { + mut s = StringBuilder::create() + unsafe { + cpp { + "char const *chars = os_to_uppercase(input_string.characters()); + s.append_c_string(chars); + delete(chars);" + } + } + return s.to_string() + } + fn write_entire_file(filename: String, buffer: [u8]) { + mut size = buffer.size() + unsafe { + cpp { + "unsigned char *data = (unsigned char *)malloc(size); + for (int i = 0; i < size; i++) + data[i] = buffer[i]; + os_write_entire_file(filename.characters(), data, size); + free(data);" + } + } + } +} diff --git a/src/net/os/pci.jakt b/src/net/os/pci.jakt new file mode 100644 index 0000000..6d15132 --- /dev/null +++ b/src/net/os/pci.jakt @@ -0,0 +1,103 @@ +import ioport { IOPort } + +import extern c "pci.h" { + extern fn pci_find(anon class_code: i64) -> i64 + extern fn pci_read_u8(anon bus: i64, anon device: i64, anon fun: i64, anon offset: i64) -> u8 + extern fn pci_read_u16(anon bus: i64, anon device: i64, anon fun: i64, anon offset: i64) -> u16 + extern fn pci_read_u32(anon bus: i64, anon device: i64, anon fun: i64, anon offset: i64) -> u32 + extern fn pci_write_u8(anon bus: i64, anon device: i64, anon fun: i64, anon offset: i64, anon value: u8) + extern fn pci_write_u16(anon bus: i64, anon device: i64, anon fun: i64, anon offset: i64, anon value: u16) + extern fn pci_write_u32(anon bus: i64, anon device: i64, anon fun: i64, anon offset: i64, anon value: u32) +} + +struct PCIDevice { + bus: i64 + device: i64 + fun: i64 + pci_vendor_id: u16 + pci_device_id: u16 + bar: [u32] + public fn enable_bus_master(mut this) { + .set_command(.command() | 0x4) + } + public fn read_u8(this, anon offset: i64) -> u8 { + return pci_read_u8(.bus, .device, .fun, offset) + } + public fn read_u16(this, anon offset: i64) -> u16 { + return pci_read_u16(.bus, .device, .fun, offset) + } + public fn read_u32(this, anon offset: i64) -> u32 { + return pci_read_u32(.bus, .device, .fun, offset) + } + public fn write_u8(this, offset: i64, value: u8) { + pci_write_u8(.bus, .device, .fun, offset, value) + } + public fn write_u16(this, offset: i64, value: u16) { + pci_write_u16(.bus, .device, .fun, offset, value) + } + public fn write_u32(this, offset: i64, value: u32) { + pci_write_u32(.bus, .device, .fun, offset, value) + } + public fn io_read_u8(this, anon offset: u16) throws -> u8 { + return IOPort::read_u8(.bar[0] as! u16 + offset) + } + public fn io_read_u16(this, anon offset: u16) throws -> u16 { + return IOPort::read_u16(.bar[0] as! u16 + offset) + } + public fn io_read_u32(this, anon offset: u16) throws -> u32 { + return IOPort::read_u32(.bar[0] as! u16 + offset) + } + public fn io_write_u8(this, offset: u16, value: u8) { + IOPort::write_u8(address: .bar[0] as! u16 + offset, value) + } + public fn io_write_u16(this, offset: u16, value: u16) { + IOPort::write_u16(address: .bar[0] as! u16 + offset, value) + } + public fn io_write_u32(this, offset: u16, value: u32) { + IOPort::write_u32(address: .bar[0] as! u16 + offset, value) + } + public fn vendor_id(this) -> u16 { + return .pci_vendor_id + } + public fn device_id(this) -> u16 { + return .pci_device_id + } + public fn command(this) -> u16 { + return pci_read_u16(.bus, .device, .fun, 0x4) + } + public fn set_command(this, anon value: u16) { + pci_write_u16(.bus, .device, .fun, offset: 0x4, value) + } + public fn status(this) -> u16 { + return pci_read_u16(.bus, .device, .fun, 0x6) + } +} + +fn lookup_bar(bus: i64, device: i64, fun: i64, anon index: i64) -> u32 { + if index < 0 or index > 5 { + return 0xFFFFFFFF + } + return pci_read_u32(bus, device, fun, 0x10 + (index * 4)) & 0xFFFFFFFC +} + +struct PCI { + public fn find_device_by_class_code(anon class_code: i64) throws -> PCIDevice { + let result = pci_find(class_code) + + if result < 0 { + eprintln("error: device not found") + throw Error::from_errno(1) + } + + let bus = (result >> 16) & 0xff + let device = (result >> 8) & 0xff + let fun = result & 0xff + let pci_vendor_id = pci_read_u16(bus, device, fun, 0x0) + let pci_device_id = pci_read_u16(bus, device, fun, 0x2) + mut bar: [u32] = [] + for i in 0..5 { + bar.push(lookup_bar(bus, device, fun, i)) + } + return PCIDevice(bus, device, fun, pci_vendor_id, pci_device_id, bar) + } +} diff --git a/src/net/os/time.jakt b/src/net/os/time.jakt new file mode 100644 index 0000000..c84daaa --- /dev/null +++ b/src/net/os/time.jakt @@ -0,0 +1,94 @@ +import extern c "time.h" { + extern fn time_busy(anon duration: i64) + extern fn time_jiffies() -> i64 + extern fn time_now() -> i64 + extern fn time_sleep(anon duration: i64) +} + +struct Time { + fn busy(anon duration: i64) { + time_busy(duration) + } + fn jiffies() throws -> i64 { + return time_jiffies() + } + fn now() throws -> i64 { + return time_now() + } + fn cdate_to_unix(anon cdate: i64) -> i64 { + // (cdate - Str2Date("1/1/1970") / CDATE_FREQ + NIST_TIME_OFFSET + return (cdate - 3090344933588992) / 49710 + 8575 + } + fn unix_to_cdate(anon unix: i64) -> i64 { + // (unix - NIST_TIME_OFFSET) * CDATE_FREQ + Str2Date("1/1/1970") + return (unix - 8575) * 49710 + 3090344933588992 + } + fn sleep(anon duration: i64) { + time_sleep(duration) + } + fn timestamp_from_unix(anon timestamp: i64) -> String { + + let SECS_PER_DAY = 86400 + let DAYS_PER_YEAR = 365 + let DAYS_PER_LYEAR = 366 + let DAYS_PER_LYEAR_PERIOD = 146097 + let YEARS_PER_LYEAR_PERIOD = 400 + + mut days = timestamp / SECS_PER_DAY + mut remainder = timestamp - (days * SECS_PER_DAY) + if timestamp < 0 and remainder == 0 { + days++ + remainder -= SECS_PER_DAY + } + + mut cur_year = 0 + mut months: [i64] = [] + mut tmp_days = 0 + + let month_tab = [ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 ] + let month_tab_leap = [ -1, 30, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 ] + + tmp_days = days; + if tmp_days >= DAYS_PER_LYEAR_PERIOD or tmp_days <= -DAYS_PER_LYEAR_PERIOD { + cur_year += YEARS_PER_LYEAR_PERIOD * (tmp_days / DAYS_PER_LYEAR_PERIOD); + tmp_days -= DAYS_PER_LYEAR_PERIOD * (tmp_days / DAYS_PER_LYEAR_PERIOD); + } + while tmp_days >= DAYS_PER_LYEAR { + cur_year++; + if cur_year % 4 == 0 { + tmp_days -= DAYS_PER_LYEAR; + } else { + tmp_days -= DAYS_PER_YEAR; + } + } + if cur_year % 4 == 0 { + months = month_tab_leap + } else { + months = month_tab + } + + mut i = 11 + while i > 0 { + if tmp_days > months[i] { + break; + } + i-- + } + + let year = 1970 + cur_year + let month = i + 1 + let day = tmp_days - months[i] + + let hours = remainder / 3600 + let minutes = (remainder - hours * 3600) / 60 + let seconds = remainder % 60 + + mut sb = StringBuilder::create() + sb.clear() + sb.appendff("{:0>4d}-{:0>2d}-{:0>2d}T{:0>2d}:{:0>2d}:{:0>2d}.000Z", year, month, day, hours, minutes, seconds) + return sb.to_string() + } + fn timestamp_from_cdate(anon cdate: i64) -> String { + return timestamp_from_unix(cdate_to_unix(cdate)) + } +} \ No newline at end of file diff --git a/src/net/tcpip.jakt b/src/net/tcpip.jakt new file mode 100644 index 0000000..af5bd76 --- /dev/null +++ b/src/net/tcpip.jakt @@ -0,0 +1,1675 @@ +import lib::util { Util } + +import os::os { OS } +import os::time { Time } + +struct IcmpRequest { + host: u64 + identifier: u64 + sequence_number: u64 + response_type_pointer: u64 +} + +enum TcpSessionState: i64 { + Idle = 0 + Established = 1 + Closed = 2 + Connecting = 4 +} + +struct TcpSession { + local_mac: [u8] + remote_mac: [u8] + local_address: [u8] + remote_address: [u8] + local_port: u16 + remote_port: u16 + local_sequence_number: u32 + acknowledgement_number: u32 + timestamp_last_echo_reply: u32 + timestamp_last_jiffies: i64 + timestamp_origin: i64 + last_window_size: u16 + last_tx_sequence_number: u32 + last_tx_was_acked: bool + tx_chunk_counter: i64 + state: TcpSessionState + pending_data_to_transmit: [u8] + received_data: [u8] + received_frames: [[u8]] + is_bound_socket: bool + socket: u64 +} + +enum TcpBindError: u64 { + BadRequest = 1 + SocketIsAlreadyBound = 2 +} + +class TCPIP { + public ipv4_address: [u8] + public ipv4_netmask: [u8] + public ipv4_network: [u8] + public ipv4_gateway: [u8] + public dns_server_address: [u8] + public dns_server_port: u16 + public mss_size: u16 + public tx_queue: [[u8]] + public ttl: u8 + public arp_cache: [String:[u8]] + public bound_sockets: [u16:u64] + public dns_cache: [String:[u8]] + public tcp_sessions: [TcpSession] + public pending_dns_lookups: [u16:u64] + public pending_dns_cached_entries: [u16:String] + public pending_icmp_requests: [u16:u64] + public timestamp_last_arp_request: i64 + public rx_bytes: u64 + public rx_frames: u64 + public tx_bytes: u64 + public tx_frames: u64 + fn calculate_header_checksum(this, anon mut packet: [u8], offset: i64, count: i64) -> u16 { + mut sum: i64 = 0 + for i in 0..count { + if (i & 1) == 1 { + sum += packet[offset + i] as! i64 + } else { + sum += (packet[offset + i] as! i64 * 256) + } + } + mut calculated_checksum: u16 = 0 + let overflowable_checksum: i64 = (sum & 0xffff) + (sum >> 16) + if overflowable_checksum < 65536 { + calculated_checksum = ~((sum & 0xffff) as! u16 + (sum >> 16) as! u16) + } else { + calculated_checksum = ~(unchecked_add <u16>((sum & 0xffff) as! u16, (sum >> 16) as! u16)) - 1 + } + return calculated_checksum + } + fn push_ethernet_header(this, mut packet: [u8], destination_mac: [u8], source_mac: [u8], ethertype: u16) throws { + for i in 0..6 { + packet.push(destination_mac[i]) + } + for i in 0..6 { + packet.push(source_mac[i]) + } + Util::push_u16_to_u8_array(packet, ethertype) + } + fn push_arp_packet(this, mut packet: [u8], opcode: u16, sender_mac: [u8], sender_ipv4: [u8], target_mac: [u8], target_ipv4: [u8]) throws { + let hardware_protocol_header_data: [u8] = [0x00, 0x01, 0x08, 0x00, 0x06, 0x04] + for i in 0..6 { + packet.push(hardware_protocol_header_data[i]) + } + Util::push_u16_to_u8_array(packet, opcode) + for i in 0..6 { + packet.push(sender_mac[i]) + } + for i in 0..4 { + packet.push(sender_ipv4[i]) + } + for i in 0..6 { + packet.push(target_mac[i]) + } + for i in 0..4 { + packet.push(target_ipv4[i]) + } + } + fn push_ipv4_header(this, mut packet: [u8], total_length: u16, flags: u8, protocol: u8, source_address: [u8], destination_address: [u8]) throws { + packet.push(0x45u8) // version & header length + packet.push(0x00u8) // differentiated services field + Util::push_u16_to_u8_array(packet, total_length) // total length of entire packet + let identification: u64 = OS::random() & 0xffff + Util::push_u16_to_u8_array(packet, identification as! u16) + packet.push(flags) + packet.push(0x00u8) // fragment size (unused) + packet.push(.ttl) // time-to-live + packet.push(protocol) // protocol number + Util::push_u16_to_u8_array(packet, 0 as! u16) // Checksum placeholder + for i in 0..4 { + packet.push(source_address[i]) + } + for i in 0..4 { + packet.push(destination_address[i]) + } + let checksum = .calculate_header_checksum(packet, offset: 14, count: 20) + packet[24] = (checksum >> 8) as! u8 + packet[25] = (checksum & 0xff) as! u8 + } + fn push_udp_header(this, mut packet: [u8], source_port: u16, destination_port: u16, length: i64) throws { + Util::push_u16_to_u8_array(packet, source_port) + Util::push_u16_to_u8_array(packet, destination_port) + Util::push_u16_to_u8_array(packet, length as! u16) + Util::push_u16_to_u8_array(packet, 0 as! u16) // Checksum placeholder + } + fn send_arp_reply(mut this, anon mac_address: [u8], anon sender_mac_address: [u8], anon sender_ipv4_address: [u8]) throws { + mut packet: [u8] = [] + .push_ethernet_header(packet, destination_mac: sender_mac_address, source_mac: mac_address, ethertype: 0x0806) + .push_arp_packet( + packet + opcode: 0x0002 + sender_mac: mac_address + sender_ipv4: .ipv4_address + target_mac: sender_mac_address + target_ipv4: sender_ipv4_address + ) + .tx_queue.push(packet) + } + public fn send_arp_request(mut this, anon mac_address: [u8], anon target_ipv4_address: [u8]) throws { + if .timestamp_last_arp_request > 0 and (.timestamp_last_arp_request + 5000) > Time::jiffies() { + return + } + mut packet: [u8] = [] + .push_ethernet_header(packet, destination_mac: [0xff, 0xff, 0xff, 0xff, 0xff, 0xff], source_mac: mac_address, ethertype: 0x0806) + .push_arp_packet( + packet + opcode: 0x0001 + sender_mac: mac_address + sender_ipv4: .ipv4_address + target_mac: [0x00, 0x00, 0x00, 0x00, 0x00, 0x00] + target_ipv4: target_ipv4_address + ) + .tx_queue.push(packet) + .timestamp_last_arp_request = Time::jiffies() + } + fn insert_arp_cache_entry(mut this, ipv4_address: [u8], mac_address: [u8]) throws { + .arp_cache[Util::get_hexadecimal_string_from_ipv4_u8_array(ipv4_address)] = mac_address + } + public fn process_arp_packet(mut this, anon mac_address: [u8], anon frame: [u8]) throws { + let arp_packet = frame[14..] + + let hardware_type = Util::get_u16_from_u8_arrayslice(arp_packet, 0) + let protocol_type = Util::get_u16_from_u8_arrayslice(arp_packet, 2) + let hardware_size = arp_packet[4] + let protocol_size = arp_packet[5] + let opcode = Util::get_u16_from_u8_arrayslice(arp_packet, 6) + + let sender_mac_address: [u8] = [arp_packet[8], arp_packet[9], arp_packet[10], + arp_packet[11], arp_packet[12], arp_packet[13]] + let sender_ipv4_address: [u8] = [arp_packet[14], arp_packet[15], arp_packet[16], arp_packet[17]] + + let target_mac_address: [u8] = [arp_packet[18], arp_packet[19], arp_packet[20], + arp_packet[21], arp_packet[22], arp_packet[23]] + let target_ipv4_address: [u8] = [arp_packet[24], arp_packet[25], arp_packet[26], arp_packet[27]] + + // If any of these mismatch, the packet is invalid + if hardware_type != 0x0001 or protocol_type != 0x0800 or + hardware_size != 6 or protocol_size != 4 { + return + } + + // Add the sender to ARP cache + .insert_arp_cache_entry(ipv4_address: sender_ipv4_address, mac_address: sender_mac_address) + //print("Updated ARP cache entry for {}: ", sender_ipv4_address) + //for i in 0..6 { + // print("{:0>2x}", sender_mac_address[i]) + // if (i < 5) { + // print(":") + // } + //} + //println(" ") + + match opcode { + 1 => { + // ARP request, check if our ipv4 address matches + for i in 0..4 { + if .ipv4_address[i] != target_ipv4_address[i] { + // doesn't match, break + break + } + } + // matches, send ARP reply + .send_arp_reply(mac_address, sender_mac_address, sender_ipv4_address) + } + else => { + // unsupported opcode, ignore + } + } + } + public fn send_dns_query(mut this, anon mac_address: [u8], anon query: String, anon pointer_to_u32: u64) throws { + + mut cached_result: u32 = 0 + if .dns_cache.contains(query) { + cached_result += (.dns_cache[query][0] as! u32 * (256 * 256 * 256) as! u32) + cached_result += (.dns_cache[query][1] as! u32 * (256 * 256) as! u32) + cached_result += (.dns_cache[query][2] as! u32 * 256 as! u32) + cached_result += .dns_cache[query][3] as! u32 + unsafe { + cpp { + "u32 *r = (u32*)pointer_to_u32; + r[0] = cached_result;" + } + } + return + } + + mut packet: [u8] = [] + mut dns_packet: [u8] = [] + + let transaction_id: u64 = OS::random() & 0xffff + Util::push_u16_to_u8_array(dns_packet, transaction_id as! u16) + + .pending_dns_lookups.set(transaction_id as! u16, pointer_to_u32) + .pending_dns_cached_entries.set(transaction_id as! u16, query) + + let dns_header_data: [u8] = [0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] + dns_packet.push_values(&dns_header_data) + + let segments = query.split(c'.') + for segment in segments { + dns_packet.push(segment.length() as! u8) + //println("segment_length: {} bytes", segment.length()) + unsafe { + cpp { + "const char *raw_string = segment.characters(); + for (int i = 0; i < segment.length(); i++) + dns_packet.push(raw_string[i]);" + } + } + } + dns_packet.push(0x00u8) + + let dns_footer_data: [u8] = [0x00, 0x01, 0x00, 0x01] + dns_packet.push_values(&dns_footer_data) + + let source_port: u16 = (OS::random() & 0xffff) as! u16 + let destination_port: u16 = .dns_server_port + + let destination_mac = .arp_cache[Util::get_hexadecimal_string_from_ipv4_u8_array(.ipv4_gateway)] + .push_ethernet_header(packet, destination_mac, source_mac: mac_address, ethertype: 0x0800) + .push_ipv4_header(packet, total_length: 28 + dns_packet.size() as! u16, flags: 0x00, protocol: 0x11, source_address: .ipv4_address, destination_address: .dns_server_address) + .push_udp_header(packet, source_port, destination_port, length: 8 + dns_packet.size() as! i64) + + packet.push_values(&dns_packet) + + // Calculate UDP checksum + + mut checksum_packet: [u8] = [] + // Source and destination IP + for i in 26..34 { + checksum_packet.push(packet[i]) + } + // Protocol + checksum_packet.push(0x00u8) + checksum_packet.push(0x11u8) + // UDP Packet length + let udp_packet_length: u16 = 8 + dns_packet.size() as! u16 + Util::push_u16_to_u8_array(checksum_packet, udp_packet_length) + // Source Port + Util::push_u16_to_u8_array(checksum_packet, source_port) + // Destination port + Util::push_u16_to_u8_array(checksum_packet, destination_port) + // UDP Packet length (again) + Util::push_u16_to_u8_array(checksum_packet, udp_packet_length) + // Data + checksum_packet.push_values(&dns_packet) + + let checksum = .calculate_header_checksum(checksum_packet, offset: 0, count: checksum_packet.size() as! i64) + packet[40] = (checksum >> 8) as! u8 + packet[41] = (checksum & 0xff) as! u8 + + .tx_queue.push(packet) + + } + public fn netinfo_process_client_request(mut this, anon mac_address: [u8]) throws { + unsafe { + cpp { + "u64 *request = (u64*)0x300030; + if (*request) { + int i = 0; + u64 *r = (u64*)*request; + + for (i = 0; i < 6; i++) { + r[0] = (r[0] << 8) | mac_address[i]; + if (i < 4) { + r[1] = (r[1] << 8) | this->ipv4_address[i]; + r[2] = (r[2] << 8) | this->ipv4_netmask[i]; + r[3] = (r[3] << 8) | this->ipv4_network[i]; + r[4] = (r[4] << 8) | this->ipv4_gateway[i]; + r[5] = (r[5] << 8) | this->dns_server_address[i]; + } + } + + r[6] = this->dns_server_port; + + r[7] = this->rx_bytes; + r[8] = this->rx_frames; + r[9] = this->tx_bytes; + r[10] = this->tx_frames; + + u32 *p = (u32*)r[11]; + p[0] = 1; // pointer_to_u32 + + *request = 0; + }" + } + } + } + + public fn icmp_process_client_request(mut this, anon mac_address: [u8]) throws { + mut did_receive_request = false + mut destination_mac: [u8] = [] + mut addr: u32 = 0 + mut iden: u64 = 0 + mut seq: u64 = 0 + mut pointer_to_u32: u64 = 0 + unsafe { + cpp { + "u64 *ls_request = (u64*)0x300020; + if (*ls_request) { + u64 *ls_r = (u64*)*ls_request; + addr = ls_r[0]; + }" + } + } + // FIXME: This will crash if we 1) Ping a host on the local subnet that does not exist, then 2) subsequently ping the gateway. + if (addr > 0) { + mut remote_address_hex_string = Util::get_hexadecimal_string_from_ipv4_u8_array(.ipv4_gateway) + if addr != Util::get_address_u32_from_ipv4_u8_array(.ipv4_gateway) { + if .is_local_ipv4_address(Util::get_ipv4_u8_array_from_address_u32(addr)) { + remote_address_hex_string = Util::get_hexadecimal_string_from_ipv4_u8_array(Util::get_ipv4_u8_array_from_address_u32(addr)) + if not .arp_cache.contains(remote_address_hex_string) { + // send arp request + //println("send arp request for: {}", remote_address_hex_string) + .send_arp_request(mac_address, Util::get_ipv4_u8_array_from_address_u32(addr)) + return + } + } + } + destination_mac = .arp_cache[remote_address_hex_string] + } else { + return + } + unsafe { + cpp { + "u64 *request = (u64*)0x300020; + if (*request) { + did_receive_request = true; + u64 *r = (u64*)*request; + addr = r[0]; + iden = r[1]; + seq = r[2]; + pointer_to_u32 = r[3]; + *request = 0; + }" + } + } + if (did_receive_request) { + .send_icmp_request(mac_address, destination_mac, addr, iden, seq, pointer_to_u32) + did_receive_request = false + } + } + + public fn dns_process_client_request(mut this, anon mac_address: [u8]) throws { + mut did_receive_request = false + mut request_is_ipv4_address = true + mut s = StringBuilder::create() + mut pointer_to_u32: u64 = 0 + unsafe { + cpp { + "u64 *request = (u64*)0x300010; + if (*request) { + did_receive_request = true; + u64 *r = (u64*)*request; + + char const *chars = (char const*)r[0]; + s.append_c_string(chars); + for (int i = 0; i < s.to_string().length(); i++) + if ((chars[i] < '0' || chars[i] > '9') && chars[i] != '.') + request_is_ipv4_address = false; + delete(chars); + + pointer_to_u32 = r[1]; + + *request = 0; + }" + } + } + if (did_receive_request) { + if (request_is_ipv4_address) { + let octets = s.to_string().split(c'.') + mut u32_address: u32 = 0 + u32_address += octets[3].to_number<u32>().value() + u32_address += octets[2].to_number<u32>().value() << 8 + u32_address += octets[1].to_number<u32>().value() << 16 + u32_address += octets[0].to_number<u32>().value() << 24 + unsafe { + cpp { + "u32 *r = (u32*)pointer_to_u32; + r[0] = u32_address;" + } + } + } else { + .send_dns_query(mac_address, s.to_string(), pointer_to_u32) + } + did_receive_request = false + } + } + fn send_icmp_request(mut this, anon mac_address: [u8], anon destination_mac: [u8], anon addr: u32, anon iden: u64, anon seq: u64, anon pointer_to_u32: u64) throws { + mut packet: [u8] = [] + + mut destination_address: [u8] = [] + Util::push_u32_to_u8_array(destination_address, addr) + + .pending_icmp_requests.set(iden as! u16, pointer_to_u32) + + let total_length: u16 = 84 + + .push_ethernet_header(packet, destination_mac, source_mac: mac_address, ethertype: 0x0800) + .push_ipv4_header(packet, total_length, flags: 0x40, protocol: 0x01, source_address: .ipv4_address, destination_address) + + packet.push(0x08u8) // type + for i in 0..3 { + packet.push(0x00u8) // code, checksum placeholder + } + + Util::push_u16_to_u8_array(packet, iden as! u16) + Util::push_u16_to_u8_array(packet, seq as! u16) + + for i in 0..8 { + packet.push(0x00u8) // FIXME: timestamp + } + + mut ch: u8 = 0x20 + for i in 0..48 { + packet.push(ch) // data + ch++ + } + + let checksum = .calculate_header_checksum(packet, offset: 34, count: packet.size() as! i64 - 34) + packet[36] = (checksum >> 8) as! u8 + packet[37] = (checksum & 0xff) as! u8 + + .tx_queue.push(packet) + } + fn process_icmp_reply(mut this, anon frame: [u8]) throws { + let iden = Util::get_u16_from_u8_array(frame, 38) + let ttl: u16 = frame[22] as! u16 + let payload_size: u16 = Util::get_u16_from_u8_array(frame, 16) - 20 + mut result: u32 = 0 + result = (payload_size as! u32) << 16 + result += ttl as! u32 + mut pointer_to_u32: u64 = 0 + if .pending_icmp_requests.contains(iden) { + pointer_to_u32 = .pending_icmp_requests[iden] + } + if pointer_to_u32 > 0 { + unsafe { + cpp { + "u32 *r = (u32*)pointer_to_u32; + r[0] = result;" + } + } + } + } + fn send_icmp_reply(mut this, anon mac_address: [u8], anon frame: [u8]) throws { + mut packet: [u8] = [] + let ipv4_packet = frame[14..] + let icmp_packet = frame[34..] + + mut destination_mac: [u8] = [] + for octet in frame[6..12] { + destination_mac.push(octet) + } + mut destination_address: [u8] = [] + for octet in ipv4_packet[12..16] { + destination_address.push(octet) + } + + .push_ethernet_header(packet, destination_mac, source_mac: mac_address, ethertype: 0x0800) + .push_ipv4_header(packet, total_length: frame.size() as! u16 - 14, flags: 0x40, protocol: 0x01, source_address: .ipv4_address, destination_address) + + for i in 0..4 { + packet.push(0x00u8) // type, code, checksum placeholder + } + for i in 4..8 { + packet.push(icmp_packet[i]) // identifier & sequence number + } + for i in 8..icmp_packet.size() { + packet.push(icmp_packet[i]) // data + } + let checksum = .calculate_header_checksum(packet, offset: 34, count: packet.size() as! i64 - 34) + packet[36] = (checksum >> 8) as! u8 + packet[37] = (checksum & 0xff) as! u8 + + .tx_queue.push(packet) + } + public fn process_icmp_packet(mut this, anon mac_address: [u8], anon frame: [u8]) throws { + let icmp_packet = frame[34..] + + let type = icmp_packet[0] + let code = icmp_packet[1] + let checksum: u16 = Util::get_u16_from_u8_arrayslice(icmp_packet, 2) + let identifier: u16 = Util::get_u16_from_u8_arrayslice(icmp_packet, 4) + let sequence_number: u16 = Util::get_u16_from_u8_arrayslice(icmp_packet, 6) + + match type { + 0 => { + // ICMP reply + .process_icmp_reply(frame) + } + 8 => { + // ICMP request, send ICMP reply + .send_icmp_reply(mac_address, frame) + } + else => { + // unsupported + } + } + } + fn tcp_is_fin(this, flags: u16) -> bool { + if (flags & 1) == 1 { + return true + } + return false + } + fn tcp_is_syn(this, flags: u16) -> bool { + if (flags & 2) == 2 { + return true + } + return false + } + fn tcp_is_reset(this, flags: u16) -> bool { + if (flags & 4) == 4 { + return true + } + return false + } + fn tcp_is_push(this, flags: u16) -> bool { + if (flags & 8) == 8 { + return true + } + return false + } + fn tcp_is_ack(this, flags: u16) -> bool { + if (flags & 16) == 16 { + return true + } + return false + } + fn tcp_is_urgent(this, flags: u16) -> bool { + if (flags & 32) == 32 { + return true + } + return false + } + fn tcp_syn_packet(mut this, anon mut session: TcpSession) throws { + mut packet: [u8] = [] + + let header_length: u16 = 40 + let flags: u16 = 0xa002 // SYN + + mut ipv4_total_length: u16 = 0 + ipv4_total_length += 20; // IPv4 + ipv4_total_length += header_length as! u16 // TCP + + .push_ethernet_header(packet, destination_mac: session.remote_mac, source_mac: session.local_mac, ethertype: 0x0800) + .push_ipv4_header(packet, total_length: ipv4_total_length, flags: 0x40, protocol: 0x06, source_address: session.local_address, destination_address: session.remote_address) + + // FIXME: put this into .push_tcp_header + + Util::push_u16_to_u8_array(packet, session.local_port) + Util::push_u16_to_u8_array(packet, session.remote_port) + Util::push_u32_to_u8_array(packet, session.local_sequence_number) + Util::push_u32_to_u8_array(packet, 0 as! u32) // Acknowledgement number + Util::push_u16_to_u8_array(packet, flags) + Util::push_u16_to_u8_array(packet, session.last_window_size) + Util::push_u16_to_u8_array(packet, 0 as! u16) // Checksum placeholder + Util::push_u16_to_u8_array(packet, 0 as! u16) // Urgent pointer + + mut tcp_options: [u8] = [0x02, 0x04] + Util::push_u16_to_u8_array(tcp_options, .mss_size) + Util::push_u32_to_u8_array(tcp_options, 0x0101080a) + packet.push_values(&tcp_options) + let timestamp: u32 = (session.timestamp_origin + (Time::jiffies() - session.timestamp_origin)) as! u32 + Util::push_u32_to_u8_array(packet, timestamp) + Util::push_u32_to_u8_array(packet, session.timestamp_last_echo_reply) + + packet.push(0x01u8) + packet.push(0x03u8) + packet.push(0x03u8) + packet.push(0x07u8) + + // Calculate TCP checksum + + mut checksum_packet: [u8] = [] + // Source and destination IP + for i in 26..34 { + checksum_packet.push(packet[i]) + } + // Protocol + checksum_packet.push(0x00u8) + checksum_packet.push(0x06u8) + // TCP Packet length + let tcp_packet_length: u16 = header_length as! u16 + Util::push_u16_to_u8_array(checksum_packet, tcp_packet_length) + + for i in 34..packet.size() { + checksum_packet.push(packet[i]) + } + + mut checksum = .calculate_header_checksum(checksum_packet, offset: 0, count: checksum_packet.size() as! i64) + packet[50] = (checksum >> 8) as! u8 + packet[51] = (checksum & 0xff) as! u8 + + .tx_queue.push(packet) + + } + fn tcp_psh_packet(mut this, anon mut session: TcpSession) throws { + mut packet: [u8] = [] + + let header_length: u16 = 32 + let flags: u16 = 0x8018 // PSH, ACK + + let maximum_payload_size_to_transmit: i64 = 1024 + mut payload_size: i64 = maximum_payload_size_to_transmit + let payload_offset: i64 = session.tx_chunk_counter * maximum_payload_size_to_transmit + if session.pending_data_to_transmit.size() as! i64 - payload_offset < maximum_payload_size_to_transmit { + payload_size = session.pending_data_to_transmit.size() as! i64 - payload_offset + } + + mut ipv4_total_length: u16 = 0 + ipv4_total_length += 20; // IPv4 + ipv4_total_length += header_length + payload_size as! u16 // TCP + + .push_ethernet_header(packet, destination_mac: session.remote_mac, source_mac: session.local_mac, ethertype: 0x0800) + .push_ipv4_header(packet, total_length: ipv4_total_length, flags: 0x40, protocol: 0x06, source_address: session.local_address, destination_address: session.remote_address) + + + // FIXME: put this into .push_tcp_header + + Util::push_u16_to_u8_array(packet, session.local_port) + Util::push_u16_to_u8_array(packet, session.remote_port) + Util::push_u32_to_u8_array(packet, session.local_sequence_number) + Util::push_u32_to_u8_array(packet, session.acknowledgement_number) + Util::push_u16_to_u8_array(packet, flags) + Util::push_u16_to_u8_array(packet, session.last_window_size) + Util::push_u16_to_u8_array(packet, 0 as! u16) // Checksum placeholder + Util::push_u16_to_u8_array(packet, 0 as! u16) // Urgent pointer + + mut tcp_options: [u8] = [0x01, 0x01, 0x08, 0x0a] + packet.push_values(&tcp_options) + + let timestamp: u32 = (session.timestamp_origin + (Time::jiffies() - session.timestamp_origin)) as! u32 + Util::push_u32_to_u8_array(packet, timestamp) + Util::push_u32_to_u8_array(packet, session.timestamp_last_echo_reply) + + for i in payload_offset..(payload_offset + payload_size) { + packet.push(session.pending_data_to_transmit[i]) + } + + // Calculate TCP checksum + + mut checksum_packet: [u8] = [] + // Source and destination IP + for i in 26..34 { + checksum_packet.push(packet[i]) + } + // Protocol + checksum_packet.push(0x00u8) + checksum_packet.push(0x06u8) + // TCP Packet length + let tcp_packet_length: u16 = header_length + payload_size as! u16 + Util::push_u16_to_u8_array(checksum_packet, tcp_packet_length) + + for i in 34..packet.size() { + checksum_packet.push(packet[i]) + } + + mut checksum = .calculate_header_checksum(checksum_packet, offset: 0, count: checksum_packet.size() as! i64) + packet[50] = (checksum >> 8) as! u8 + packet[51] = (checksum & 0xff) as! u8 + + .tx_queue.push(packet) + + } + public fn tcp_transmit_pending_data_for_existing_sessions(mut this) throws { + for i in 0..this.tcp_sessions.size() { + if .tcp_sessions[i].pending_data_to_transmit.size() > 0 { + if (.tcp_sessions[i].tx_chunk_counter == 0) or (.tcp_sessions[i].tx_chunk_counter > 0 and .tcp_sessions[i].last_tx_was_acked) { + let maximum_payload_size_to_transmit: i64 = 1024 + let payload_offset: i64 = .tcp_sessions[i].tx_chunk_counter * maximum_payload_size_to_transmit + mut truncated_packet: [u8] = [] + .tcp_psh_packet(.tcp_sessions[i]) + if (.tcp_sessions[i].pending_data_to_transmit.size() as! i64 - payload_offset >= maximum_payload_size_to_transmit) { + .tcp_sessions[i].last_tx_sequence_number = .tcp_sessions[i].local_sequence_number + maximum_payload_size_to_transmit as! u32 + .tcp_sessions[i].last_tx_was_acked = false + .tcp_sessions[i].tx_chunk_counter++ + } else { + // We have transmitted all of the pending data. + .tcp_sessions[i].pending_data_to_transmit.shrink(0) + .tcp_sessions[i].last_tx_sequence_number = 0 + .tcp_sessions[i].last_tx_was_acked = false + .tcp_sessions[i].tx_chunk_counter = 0 + } + } + } + } + } + fn tcp_ack_packet(mut this, anon mut session: TcpSession, anon frame: [u8], mut flags: u16) throws -> u32 { + mut packet: [u8] = [] + + let syn_ipv4_packet = frame[14..] + let syn_tcp_packet = frame[34..] + + // Swap source/destination ports + mut destination_port: u16 = Util::get_u16_from_u8_arrayslice(syn_tcp_packet, 0) + mut source_port: u16 = Util::get_u16_from_u8_arrayslice(syn_tcp_packet, 2) + + let header_length: u16 = ((syn_tcp_packet[12] as! u16) >> 4) * 4 + + flags += ((header_length / 4) << 12) + flags |= 16 // ACK + + mut sequence_number: u32 = session.local_sequence_number + mut acknowledgement_number: u32 = 0 + for i in 0..4 { + acknowledgement_number += (syn_tcp_packet[7 - i] as! u32) * match i { + 1 => 256 as! u32 + 2 => (256 * 256) as! u32 + 3 => (256 * 256 * 256) as! u32 + else => 1 as! u32 + } + } + + if (.tcp_is_syn(flags) or .tcp_is_fin(flags)) { + acknowledgement_number += 1 + } + if (.tcp_is_push(flags)) { + // advance ACK by number of bytes + flags -= 8 + } + acknowledgement_number += (syn_tcp_packet.size() as! u32 - header_length as! u32) + + let window_size: u16 = 0xffff + let urgent_pointer: u16 = Util::get_u16_from_u8_arrayslice(syn_tcp_packet, 18) + + mut destination_mac: [u8] = [] + for octet in frame[6..12] { + destination_mac.push(octet) + } + mut destination_address: [u8] = [] + for octet in syn_ipv4_packet[12..16] { + destination_address.push(octet) + } + + mut ipv4_total_length: u16 = 0 + ipv4_total_length += 20; // IPv4 + ipv4_total_length += header_length // TCP + + .push_ethernet_header(packet, destination_mac, source_mac: session.local_mac, ethertype: 0x0800) + .push_ipv4_header(packet, total_length: ipv4_total_length, flags: 0x40, protocol: 0x06, source_address: .ipv4_address, destination_address) + + // FIXME: put this into .push_tcp_header + + Util::push_u16_to_u8_array(packet, source_port) + Util::push_u16_to_u8_array(packet, destination_port) + Util::push_u32_to_u8_array(packet, sequence_number) + Util::push_u32_to_u8_array(packet, acknowledgement_number) + Util::push_u16_to_u8_array(packet, flags) + Util::push_u16_to_u8_array(packet, window_size) + Util::push_u16_to_u8_array(packet, 0 as! u16) // Checksum placeholder + Util::push_u16_to_u8_array(packet, urgent_pointer) + + mut tcp_options_offset = 20 + mut tcp_option_length = 0 + while tcp_options_offset < header_length as! i64 { + match syn_tcp_packet[tcp_options_offset] { + 0u8 => { + packet.push(0u8) + tcp_options_offset++ + } + 1u8 => { + packet.push(1u8) + tcp_options_offset++ + } + 8u8 => { + packet.push(8u8) + packet.push(10u8) + let timestamp: u32 = (session.timestamp_origin + (Time::jiffies() - session.timestamp_origin)) as! u32 + Util::push_u32_to_u8_array(packet, timestamp) + Util::push_u32_to_u8_array(packet, session.timestamp_last_echo_reply) + tcp_options_offset += 10 + } + else => { + packet.push(syn_tcp_packet[tcp_options_offset]) + packet.push(syn_tcp_packet[tcp_options_offset + 1]) + tcp_option_length = syn_tcp_packet[tcp_options_offset + 1] as! i64 + for i in 2..tcp_option_length { + packet.push(syn_tcp_packet[tcp_options_offset + i]) + } + tcp_options_offset += tcp_option_length + } + } + } + + // Calculate TCP checksum + + mut checksum_packet: [u8] = [] + // Source and destination IP + for i in 26..34 { + checksum_packet.push(packet[i]) + } + // Protocol + checksum_packet.push(0x00u8) + checksum_packet.push(0x06u8) + // TCP Packet length + let tcp_packet_length: u16 = 40 as! u16 + Util::push_u16_to_u8_array(checksum_packet, tcp_packet_length) + + for i in 34..packet.size() { + checksum_packet.push(packet[i]) + } + + mut checksum = .calculate_header_checksum(checksum_packet, offset: 0, count: checksum_packet.size() as! i64) + if (not .tcp_is_syn(flags)) { + checksum += 8 + } + packet[50] = (checksum >> 8) as! u8 + packet[51] = (checksum & 0xff) as! u8 + + .tx_queue.push(packet) + return acknowledgement_number + + } + fn tcp_synack_ack_packet(mut this, anon mut session: TcpSession, anon frame: [u8], mut flags: u16) throws -> u32 { + mut packet: [u8] = [] + + let syn_ipv4_packet = frame[14..] + let syn_tcp_packet = frame[34..] + + // Swap source/destination ports + mut destination_port: u16 = Util::get_u16_from_u8_arrayslice(syn_tcp_packet, 0) + mut source_port: u16 = Util::get_u16_from_u8_arrayslice(syn_tcp_packet, 2) + + let header_length: u16 = (20 + 12) as! u16 + + flags += ((header_length / 4) << 12) + flags |= 16 // ACK + + mut sequence_number: u32 = session.local_sequence_number + mut acknowledgement_number: u32 = 0 + for i in 0..4 { + acknowledgement_number += (syn_tcp_packet[7 - i] as! u32) * match i { + 1 => 256 as! u32 + 2 => (256 * 256) as! u32 + 3 => (256 * 256 * 256) as! u32 + else => 1 as! u32 + } + } + + acknowledgement_number += 1 + + let window_size: u16 = 0xffff + let urgent_pointer: u16 = Util::get_u16_from_u8_arrayslice(syn_tcp_packet, 18) + + mut destination_mac: [u8] = [] + for octet in frame[6..12] { + destination_mac.push(octet) + } + mut destination_address: [u8] = [] + for octet in syn_ipv4_packet[12..16] { + destination_address.push(octet) + } + + mut ipv4_total_length: u16 = 0 + ipv4_total_length += 20; // IPv4 + ipv4_total_length += header_length // TCP + + .push_ethernet_header(packet, destination_mac, source_mac: session.local_mac, ethertype: 0x0800) + .push_ipv4_header(packet, total_length: ipv4_total_length, flags: 0x40, protocol: 0x06, source_address: .ipv4_address, destination_address) + + // FIXME: put this into .push_tcp_header + + Util::push_u16_to_u8_array(packet, source_port) + Util::push_u16_to_u8_array(packet, destination_port) + Util::push_u32_to_u8_array(packet, sequence_number) + Util::push_u32_to_u8_array(packet, acknowledgement_number) + Util::push_u16_to_u8_array(packet, flags) + Util::push_u16_to_u8_array(packet, window_size) + Util::push_u16_to_u8_array(packet, 0 as! u16) // Checksum placeholder + Util::push_u16_to_u8_array(packet, urgent_pointer) + + // Options: NOP, NOP, Timestamp + packet.push(0x01u8) + packet.push(0x01u8) + Util::push_u16_to_u8_array(packet, 0x080a) + let timestamp: u32 = (session.timestamp_origin + (Time::jiffies() - session.timestamp_origin)) as! u32 + Util::push_u32_to_u8_array(packet, timestamp) + Util::push_u32_to_u8_array(packet, session.timestamp_last_echo_reply) + + // Calculate TCP checksum + + mut checksum_packet: [u8] = [] + // Source and destination IP + for i in 26..34 { + checksum_packet.push(packet[i]) + } + // Protocol + checksum_packet.push(0x00u8) + checksum_packet.push(0x06u8) + // TCP Packet length + let tcp_packet_length: u16 = 40 as! u16 + Util::push_u16_to_u8_array(checksum_packet, tcp_packet_length) + + for i in 34..packet.size() { + checksum_packet.push(packet[i]) + } + + mut checksum = .calculate_header_checksum(checksum_packet, offset: 0, count: checksum_packet.size() as! i64) + checksum += 8 + packet[50] = (checksum >> 8) as! u8 + packet[51] = (checksum & 0xff) as! u8 + + .tx_queue.push(packet) + return acknowledgement_number + + } + fn tcp_session_matches_current_session(mut this, anon session: TcpSession, anon local_address: [u8], anon remote_address: [u8], anon local_port: u16, anon remote_port: u16) -> bool { + if session.state as! i64 == TcpSessionState::Closed as! i64 { + return false + } + if (session.local_port != local_port) or (session.remote_port != remote_port) { + return false + } + for i in 0..4 { + if (session.local_address[i] != local_address[i]) { + return false + } + if (session.remote_address[i] != remote_address[i]) { + return false + } + } + return true + } + fn tcp_send(mut this, anon mut session: TcpSession, anon data: [u8]) throws { + session.pending_data_to_transmit.push_values(&data) + } + public fn tcp_process_client_send_requests(mut this, anon mac_address: [u8]) throws { + for i in 0..this.tcp_sessions.size() { + let socket = .tcp_sessions[i].socket + if socket > 0 { + mut data: [u8] = [] + unsafe { + cpp { + "u64 *s = (u64*)socket; + if (s[10] == 1) { + u8 *buffer = (u8*)s[7]; + for (int i=0; i < s[9]; i++) { + data.push(buffer[i]); + } + s[10] = 0; + }" + } + } + if data.size() > 0 { + .tcp_send(.tcp_sessions[i], data) + } + } + } + } + public fn tcp_process_client_received_data(mut this) throws { + for i in 0..this.tcp_sessions.size() { + mut session = .tcp_sessions[i] + let socket = session.socket + mut length = session.received_data.size() + mut max_length: usize = 0 + // s[4] = 0; // receive_buffer_size + if (socket > 0) { + unsafe { + cpp { + "u64 *s = (u64*)socket; + max_length = s[4];" + } + } + } + // FIXME: Should the client be responsible for malloc()ing the receive buffer? + if length > 65536 { + length = 65536 + } + if (length > max_length) { + length = max_length + } + if (socket > 0) and (length == 0) and (.tcp_sessions[i].state as! i64 == TcpSessionState::Closed as! i64) { + .tcp_update_socket_session_state(.tcp_sessions[i].state, .tcp_sessions[i].socket) + mut client_is_not_ready_to_receive_data = 0 + unsafe { + cpp { + "u64 *s = (u64*)socket; + client_is_not_ready_to_receive_data = s[6];" + } + } + let is_bound_socket = .tcp_sessions[i].is_bound_socket + if (not is_bound_socket and client_is_not_ready_to_receive_data == 0) or (is_bound_socket) { + // really close the connection + unsafe { + cpp { + "u64 *s = (u64*)socket; + s[5] = 0; + s[6] = 1; + if (s[3] > 0) + free((u8*)s[3]); + if (s[7] > 0) + free((u8*)s[7]); + " + } + } + .tcp_sessions[i].socket = 0 + } + } + if socket > 0 and length > 0 { + mut client_is_not_ready_to_receive_data = 0 + unsafe { + cpp { + "u64 *s = (u64*)socket; + client_is_not_ready_to_receive_data = s[6];" + } + } + if (client_is_not_ready_to_receive_data == 0) { + unsafe { + cpp { + "u64 *s = (u64*)socket; + u8 *buffer = (u8*)s[3]; + for (int i=0; i < length; i++) { + buffer[i] = session.received_data[i]; + } + s[5] = length; + s[6] = 1;" + } + } + if (length == session.received_data.size() as! usize) { + session.received_data.shrink(0) + } else { + mut remaining_received_data: [u8] = [] + for j in length..session.received_data.size() { + remaining_received_data.push(session.received_data[j]) + } + session.received_data.shrink(0) + for j in 0..remaining_received_data.size() { + session.received_data.push(remaining_received_data[j]) + } + } + } + } + } + } + fn tcp_is_next_frame(mut this, index: i64, frame: [u8]) throws -> bool { + let tcp_packet = frame[34..] + mut sequence_number: u32 = 0 + for o in 0..4 { + sequence_number += (tcp_packet[7 - o] as! u32) * match o { + 1 => 256 as! u32 + 2 => (256 * 256) as! u32 + 3 => (256 * 256 * 256) as! u32 + else => 1 as! u32 + } + } + if (.tcp_sessions[index].acknowledgement_number == 0) { + // session not established yet, we're (hopefully) in a SYN/ACK + return true + } + if (sequence_number == .tcp_sessions[index].acknowledgement_number) { + return true + } + return false + } + fn tcp_handle_received_frame(mut this, anon i: i64, anon frame: [u8]) throws { + let ipv4_packet = frame[14..] + let tcp_packet = frame[34..] + + let total_length = Util::get_u16_from_u8_arrayslice(ipv4_packet, 2) + 14 + + let source_address: [u8] = [ipv4_packet[12], ipv4_packet[13], ipv4_packet[14], ipv4_packet[15]] + let destination_address: [u8] = [ipv4_packet[16], ipv4_packet[17], ipv4_packet[18], ipv4_packet[19]] + + mut source_port: u16 = Util::get_u16_from_u8_arrayslice(tcp_packet, 0) + mut destination_port: u16 = Util::get_u16_from_u8_arrayslice(tcp_packet, 2) + + let header_length: u16 = ((tcp_packet[12] as! u16) >> 4) * 4 + let flags: u16 = Util::get_u16_from_u8_arrayslice(tcp_packet, 12) & 0xfff + + mut echo_reply: u32 = 0 + mut tcp_options_offset = 54 + + while tcp_options_offset < frame.size() as! i64 { + match frame[tcp_options_offset] { + 0u8 => { tcp_options_offset++ } + 1u8 => { tcp_options_offset++ } + 8u8 => { + tcp_options_offset++ + echo_reply += (frame[tcp_options_offset + 1] as! u32 * (256 * 256 * 256) as! u32) + echo_reply += (frame[tcp_options_offset + 2] as! u32 * (256 * 256) as! u32) + echo_reply += (frame[tcp_options_offset + 3] as! u32 * 256 as! u32) + echo_reply += frame[tcp_options_offset + 4] as! u32 + break + } + else => { tcp_options_offset += frame[tcp_options_offset + 1] as! i64 } + } + } + + if (flags & 0xff) != 0x10 { + // Received a packet with flags other than just ACK + for i in 0..this.tcp_sessions.size() { + if (.tcp_session_matches_current_session(.tcp_sessions[i], destination_address, source_address, destination_port, source_port)) { + mut received_data: [u8] = [] + for j in frame[(34u16 + header_length)..total_length] { + received_data.push(j) + } + for j in 0..received_data.size() { + .tcp_sessions[i].received_data.push(received_data[j]) + } + if (.tcp_is_fin(flags)) { + // Received request to close connection + //println("Closing connection to IPv4 address: {}", source_address) + if (.tcp_is_push(flags)) { + .tcp_sessions[i].acknowledgement_number = .tcp_ack_packet(.tcp_sessions[i], frame, flags: 9u16) + } else { + .tcp_sessions[i].acknowledgement_number = .tcp_ack_packet(.tcp_sessions[i], frame, flags: 1u16) + } + .tcp_sessions[i].state = TcpSessionState::Closed + } else if (.tcp_is_syn(flags)) and (.tcp_is_ack(flags)) { + // Received SYN, ACK + .tcp_sessions[i].timestamp_last_echo_reply = echo_reply + .tcp_sessions[i].timestamp_last_jiffies = Time::jiffies() + .tcp_sessions[i].local_sequence_number++ + .tcp_sessions[i].acknowledgement_number = .tcp_synack_ack_packet(.tcp_sessions[i], frame, flags: 0u16) + .tcp_sessions[i].state = TcpSessionState::Established + .tcp_update_socket_session_state(.tcp_sessions[i].state, .tcp_sessions[i].socket) + } else { + .tcp_sessions[i].timestamp_last_echo_reply = echo_reply + .tcp_sessions[i].timestamp_last_jiffies = Time::jiffies() + mut acknowledgement_number: u32 = 0 + for o in 0..4 { + acknowledgement_number += (tcp_packet[11 - o] as! u32) * match o { + 1 => 256 as! u32 + 2 => (256 * 256) as! u32 + 3 => (256 * 256 * 256) as! u32 + else => 1 as! u32 + } + } + .tcp_sessions[i].local_sequence_number = acknowledgement_number + if (.tcp_is_push(flags)) { + .tcp_sessions[i].acknowledgement_number = .tcp_ack_packet(.tcp_sessions[i], frame, flags: 8u16) + } else { + .tcp_sessions[i].acknowledgement_number = .tcp_ack_packet(.tcp_sessions[i], frame, flags: 0u16) + } + } + } + } + } else if (flags & 0xff) == 0x10 { + // Received a packet with flags == just ACK + for i in 0..this.tcp_sessions.size() { + if (.tcp_session_matches_current_session(.tcp_sessions[i], destination_address, source_address, destination_port, source_port)) { + mut received_data: [u8] = [] + for j in frame[(34u16 + header_length)..total_length] { + received_data.push(j) + } + for j in 0..received_data.size() { + .tcp_sessions[i].received_data.push(received_data[j]) + } + mut sequence_number: u32 = 0 + for o in 0..4 { + sequence_number += (tcp_packet[7 - o] as! u32) * match o { + 1 => 256 as! u32 + 2 => (256 * 256) as! u32 + 3 => (256 * 256 * 256) as! u32 + else => 1 as! u32 + } + } + mut acknowledgement_number: u32 = 0 + for o in 0..4 { + acknowledgement_number += (tcp_packet[11 - o] as! u32) * match o { + 1 => 256 as! u32 + 2 => (256 * 256) as! u32 + 3 => (256 * 256 * 256) as! u32 + else => 1 as! u32 + } + } + let window_size: u16 = 0xffff + if acknowledgement_number == .tcp_sessions[i].last_tx_sequence_number { + .tcp_sessions[i].last_tx_was_acked = true + } + .tcp_sessions[i].local_sequence_number = acknowledgement_number + if received_data.size() > 0 { + .tcp_sessions[i].acknowledgement_number = .tcp_ack_packet(.tcp_sessions[i], frame, flags: 0u16) + } else { + .tcp_sessions[i].acknowledgement_number = sequence_number + (received_data.size() as! u32) + } + .tcp_sessions[i].last_window_size = window_size + .tcp_sessions[i].timestamp_last_echo_reply = echo_reply + .tcp_sessions[i].timestamp_last_jiffies = Time::jiffies() + } + } + } + } + fn tcp_handle_received_frames(mut this, anon index: i64) throws { + mut unhandled_frames: [[u8]] = [] + for frame in .tcp_sessions[index].received_frames { + if .tcp_is_next_frame(index, frame) { + .tcp_handle_received_frame(index, frame) + } else { + unhandled_frames.push(frame) + } + } + .tcp_sessions[index].received_frames.shrink(0) + for frame in unhandled_frames { + .tcp_sessions[index].received_frames.push(frame) + } + } + fn process_udp_packet(mut this, anon mac_address: [u8], anon frame: [u8]) throws { + let ipv4_packet = frame[14..] + let udp_packet = frame[34..] + + let source_address: [u8] = [ipv4_packet[12], ipv4_packet[13], ipv4_packet[14], ipv4_packet[15]] + let destination_address: [u8] = [ipv4_packet[16], ipv4_packet[17], ipv4_packet[18], ipv4_packet[19]] + + mut source_port: u16 = Util::get_u16_from_u8_arrayslice(udp_packet, 0) + mut destination_port: u16 = Util::get_u16_from_u8_arrayslice(udp_packet, 2) + + if (Util::get_hexadecimal_string_from_ipv4_u8_array(source_address) == Util::get_hexadecimal_string_from_ipv4_u8_array(.dns_server_address)) and (source_port == .dns_server_port) { + let transaction_id: u16 = Util::get_u16_from_u8_arrayslice(udp_packet, 8) + let flags: u16 = Util::get_u16_from_u8_arrayslice(udp_packet, 10) + // questions : 12-13 + // answer_rrs: 14-15 + // authority_rrs: 16-17 + // additional_rrs: 18-19 + + if .pending_dns_lookups.contains(transaction_id) { + mut result: u32 = 0 + mut result_type: u16 = 0 + // skip over query data to get answer + mut response_pos = 20 + while (udp_packet[response_pos] > 0) { + response_pos += 1 + udp_packet[response_pos] as! i64 + } + response_pos += 5 // skip over null byte, type, class + response_pos += 2 // skip over answer: name + + result_type = 256 * udp_packet[response_pos] as! u16 + result_type += udp_packet[response_pos + 1] as! u16 + + mut pointer_to_u32 = .pending_dns_lookups[transaction_id] + mut cached_result: [u8] = [] + + match result_type { + 1 => { + // A record + response_pos += 10 + result += (udp_packet[response_pos] as! u32 * (256 * 256 * 256) as! u32) + result += (udp_packet[response_pos + 1] as! u32 * (256 * 256) as! u32) + result += (udp_packet[response_pos + 2] as! u32 * 256 as! u32) + result += udp_packet[response_pos + 3] as! u32 + cached_result.push(udp_packet[response_pos]) + cached_result.push(udp_packet[response_pos + 1]) + cached_result.push(udp_packet[response_pos + 2]) + cached_result.push(udp_packet[response_pos + 3]) + .dns_cache[.pending_dns_cached_entries[transaction_id]] = cached_result + } + 5 => { + // CNAME record + response_pos += 8 // skip over answer: type, class, ttl + let data_length = (256 * udp_packet[response_pos] as! i64) + udp_packet[response_pos + 1] as! i64 + response_pos += 2 + let data_pos = response_pos + mut pointer_pos = 0 + + mut s = StringBuilder::create() + mut length = 0 + + while (response_pos < data_pos + data_length) { + match udp_packet[response_pos] { + 0xc0 => { + response_pos++ + pointer_pos = 8 + udp_packet[response_pos++] as! i64 + while (udp_packet[pointer_pos] > 0) { + length = udp_packet[pointer_pos] as! i64 + pointer_pos++ + for i in 0..length { + s.append(udp_packet[pointer_pos++]) + } + if udp_packet[pointer_pos] > 0 { + s.append('.') + } + } + } + else => { + length = udp_packet[response_pos++] as! i64 + for i in 0..length { + s.append(udp_packet[response_pos++]) + } + if udp_packet[response_pos] > 0 { + s.append('.') + } + } + } + } + .send_dns_query(mac_address, s.to_string(), pointer_to_u32) + pointer_to_u32 = 0 + } + else => { + // Unsupported record + response_pos += 10 // skip over answer: type, class, ttl, data length + result = 0xFFFFFFFF + } + } + if pointer_to_u32 > 0 { + unsafe { + cpp { + "u32 *r = (u32*)pointer_to_u32; + r[0] = result;" + } + } + } + .pending_dns_lookups.remove(transaction_id) + } + } + + } + fn is_listening_port(this, anon port: u16) -> bool { + return .bound_sockets.contains(port) + } + fn process_tcp_packet(mut this, anon mac_address: [u8], anon frame: [u8]) throws { + let ipv4_packet = frame[14..] + let tcp_packet = frame[34..] + + let source_address: [u8] = [ipv4_packet[12], ipv4_packet[13], ipv4_packet[14], ipv4_packet[15]] + let destination_address: [u8] = [ipv4_packet[16], ipv4_packet[17], ipv4_packet[18], ipv4_packet[19]] + + mut source_port: u16 = Util::get_u16_from_u8_arrayslice(tcp_packet, 0) + mut destination_port: u16 = Util::get_u16_from_u8_arrayslice(tcp_packet, 2) + + let header_length: u16 = ((tcp_packet[12] as! u16) >> 4) * 4 + let flags: u16 = Util::get_u16_from_u8_arrayslice(tcp_packet, 12) & 0xfff + + mut echo_reply: u32 = 0 + mut tcp_options_offset = 54 + + while tcp_options_offset < frame.size() as! i64 { + match frame[tcp_options_offset] { + 0u8 => { tcp_options_offset++ } + 1u8 => { tcp_options_offset++ } + 8u8 => { + tcp_options_offset++ + echo_reply += (frame[tcp_options_offset + 1] as! u32 * (256 * 256 * 256) as! u32) + echo_reply += (frame[tcp_options_offset + 2] as! u32 * (256 * 256) as! u32) + echo_reply += (frame[tcp_options_offset + 3] as! u32 * 256 as! u32) + echo_reply += frame[tcp_options_offset + 4] as! u32 + break + } + else => { tcp_options_offset += frame[tcp_options_offset + 1] as! i64 } + } + } + + if .tcp_is_syn(flags) and not (.tcp_is_ack(flags)) and (.is_listening_port(destination_port)) { + // Received SYN, begin a new connection + mut remote_mac: [u8] = [] + for i in 6..12 { + remote_mac.push(frame[i]) + } + if .is_local_ipv4_address(source_address) { + if not .arp_cache.contains(Util::get_hexadecimal_string_from_ipv4_u8_array(source_address)) { + // send arp request + //println("send arp request for: {}", Util::get_hexadecimal_string_from_ipv4_u8_array(source_address)) + .send_arp_request(mac_address, source_address) + } + } + mut socket: u64 = 0 + let function: u64 = .bound_sockets[destination_port] + let source_address_u32 = Util::get_address_u32_from_ipv4_u8_array(source_address) + unsafe { + cpp { + " + u64* s = (u64*)calloc(256, 1); + + s[0] = source_address_u32; + s[1] = source_port; + s[2] = 1; // TCP_SOCKET_STATE_ESTABLISHED + s[3] = (u64)calloc(65536, 1); // receive_buffer_ptr + s[4] = 0; // receive_buffer_size + s[5] = 0; // receive_buffer_filled + s[6] = 0; // receive_buffer_kick + s[7] = (u64)calloc(65536, 1); // send_buffer_ptr + s[8] = 65536; // send_buffer_size + s[9] = 0; // send_buffer_filled + s[10] = 0; // send_buffer_kick + + socket = (u64)s; + if (function && socket) { + os_call(function, socket); + } + " + } + } + mut session = TcpSession( + local_mac: mac_address + remote_mac: remote_mac + local_address: destination_address + remote_address: source_address + local_port: destination_port + remote_port: source_port + local_sequence_number: (OS::random() & 0xffffffff) as! u32 + acknowledgement_number: 0 + timestamp_last_echo_reply: 0 + timestamp_last_jiffies: 0 + timestamp_origin: Time::jiffies() + last_window_size: 0 + last_tx_sequence_number: 0 + last_tx_was_acked: false + tx_chunk_counter: 0 + state: TcpSessionState::Established + pending_data_to_transmit: [] + received_data: [] + received_frames: [] + is_bound_socket: true + socket) + //println("Accepting connection from IPv4 address: {}", source_address) + session.timestamp_last_echo_reply = echo_reply + session.timestamp_last_jiffies = Time::jiffies() + session.acknowledgement_number = .tcp_ack_packet(session, frame, flags) + .tcp_sessions.push(session) + } else { + // Add packet to list to be processed + for i in 0..this.tcp_sessions.size() { + if (.tcp_session_matches_current_session(.tcp_sessions[i], destination_address, source_address, destination_port, source_port)) { + .tcp_sessions[i].received_frames.push(frame) + .tcp_handle_received_frames(i as! i64) + } + } + } + } + public fn process_ipv4_packet(mut this, anon mac_address: [u8], anon frame: [u8]) throws { + let ipv4_packet = frame[14..] + + let version = ipv4_packet[0] >> 4 + let header_length = (ipv4_packet[0] as! i64 & 0xf) * 4 + let dsf = ipv4_packet[1] + let total_length = Util::get_u16_from_u8_arrayslice(ipv4_packet, 2) + let identification = Util::get_u16_from_u8_arrayslice(ipv4_packet, 4) + let flags = ipv4_packet[6] + let ttl = ipv4_packet[8] + let protocol = ipv4_packet[9] + let checksum = Util::get_u16_from_u8_arrayslice(ipv4_packet, 10) + let source_address: [u8] = [ipv4_packet[12], ipv4_packet[13], ipv4_packet[14], ipv4_packet[15]] + let destination_address: [u8] = [ipv4_packet[16], ipv4_packet[17], ipv4_packet[18], ipv4_packet[19]] + + match protocol { + 1 => { + .process_icmp_packet(mac_address, frame) + } + 6 => { + .process_tcp_packet(mac_address, frame) + } + 17 => { + .process_udp_packet(mac_address, frame) + } + else => { + // unsupported + } + } + } + public fn set_ipv4_address(mut this, anon ipv4_address: [i64]) { + for i in 0..4 { + .ipv4_address[i] = ipv4_address[i] as! u8 + } + } + public fn set_ipv4_netmask(mut this, anon ipv4_netmask: [i64]) { + for i in 0..4 { + .ipv4_netmask[i] = ipv4_netmask[i] as! u8 + } + } + public fn set_ipv4_network(mut this, anon ipv4_network: [i64]) { + for i in 0..4 { + .ipv4_network[i] = ipv4_network[i] as! u8 + } + } + public fn set_ipv4_gateway(mut this, anon ipv4_gateway: [i64]) { + for i in 0..4 { + .ipv4_gateway[i] = ipv4_gateway[i] as! u8 + } + } + fn is_local_ipv4_address(this, anon check_ipv4_address: [u8]) -> bool { + let check_ipv4_address_u32 = Util::get_address_u32_from_ipv4_u8_array(check_ipv4_address) + let local_network_address_u32 = Util::get_address_u32_from_ipv4_u8_array(.ipv4_network) + let local_netmask_address_u32 = Util::get_address_u32_from_ipv4_u8_array(.ipv4_netmask) + // NOTE: The line below was added and the subsequent line was modified after jakt PR #1596 to suppress a warning from codegen output + // tcpip.cpp:2599:90: warning: & has lower precedence than ==; == will be evaluated first [-Wparentheses] + // 2599 | return (local_network_address_u32 & local_netmask_address_u32) == check_ipv4_address_u32 & local_netmask_address_u32; + // | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ + // tcpip.cpp:2599:90: note: place parentheses around the '==' expression to silence this warning + let check_ipv4_address_u32_and_with_netmask = check_ipv4_address_u32 & local_netmask_address_u32 + return (local_network_address_u32 & local_netmask_address_u32) == check_ipv4_address_u32_and_with_netmask + } + fn tcp_update_socket_session_state(mut this, anon state: TcpSessionState, anon socket: u64) throws { + unsafe { + cpp { + "u64 *s = (u64*)socket; + s[2] = (u64)state; + " + } + } + } + public fn tcp_process_bind_request(mut this) { + mut did_receive_request = false + mut port: u16 = 0 + mut function: u64 = 0 + mut response_code: u64 = 0 + unsafe { + cpp { + " + u64 *request = (u64*)0x300040; + if (*request) { + did_receive_request = true; + u64 *b = (u64*)*request; + port = b[0]; + function = b[1]; + } + " + } + } + if did_receive_request { + if .bound_sockets.contains(port) { + response_code = TcpBindError::SocketIsAlreadyBound as! u64 + } else if port < 1 or function < 1 { + response_code = TcpBindError::BadRequest as! u64 + } else { + .bound_sockets[port] = function + } + unsafe { + cpp { + " + u64 *request = (u64*)0x300040; + u64 *b = (u64*)*request; + b[2] = response_code; + *request = 0; + " + } + } + } + } + public fn tcp_process_client_socket_request(mut this, anon mac_address: [u8]) throws { + mut did_receive_request = false + mut remote_address: u32 = 0 + mut remote_port: u16 = 0 + mut session_remote_mac: [u8] = [] + mut socket: u64 = 0 + unsafe { + cpp { + "u64 *ls_request = (u64*)0x300000; + if (*ls_request) { + u64 *ls_s = (u64*)*ls_request; + remote_address = ls_s[0]; + }" + } + } + if (remote_address > 0) { + mut remote_address_hex_string = Util::get_hexadecimal_string_from_ipv4_u8_array(.ipv4_gateway) + if .is_local_ipv4_address(Util::get_ipv4_u8_array_from_address_u32(remote_address)) { + remote_address_hex_string = Util::get_hexadecimal_string_from_ipv4_u8_array(Util::get_ipv4_u8_array_from_address_u32(remote_address)) + if not .arp_cache.contains(remote_address_hex_string) { + // send arp request + //println("send arp request for: {}", remote_address_hex_string) + .send_arp_request(mac_address, Util::get_ipv4_u8_array_from_address_u32(remote_address)) + return + } + } + session_remote_mac = .arp_cache[remote_address_hex_string] + } else { + return + } + unsafe { + cpp { + "u64 *request = (u64*)0x300000; + if (*request) { + did_receive_request = true; + u64 *s = (u64*)*request; + + s[2] = 5; // TCP_SOCKET_STATE_IDLE + + s[3] = (u64)calloc(65536, 1); // receive_buffer_ptr + s[4] = 0; // receive_buffer_size + s[5] = 0; // receive_buffer_filled + s[6] = 1; // receive_buffer_kick + + s[7] = (u64)calloc(65536, 1); // send_buffer_ptr + s[8] = 65536; // send_buffer_size + s[9] = 0; // send_buffer_filled + s[10] = 0; // send_buffer_kick + + remote_address = s[0]; + remote_port = s[1]; + socket = (u64)s; + *request = 0; + }" + } + } + if (did_receive_request) { + let local_sequence_number: u32 = (OS::random() & 0xffffffff) as! u32 + + mut session = TcpSession( + local_mac: mac_address + remote_mac: session_remote_mac + local_address: .ipv4_address + remote_address: Util::get_ipv4_u8_array_from_address_u32(remote_address) + local_port: (OS::random() & 0xffff) as! u16 // FIXME + remote_port + local_sequence_number + acknowledgement_number: 0 + timestamp_last_echo_reply: 0 + timestamp_last_jiffies: Time::jiffies() + timestamp_origin: Time::jiffies() + last_window_size: 0xffff + last_tx_sequence_number: 0 + last_tx_was_acked: false + tx_chunk_counter: 0 + state: TcpSessionState::Connecting + pending_data_to_transmit: [] + received_data: [] + received_frames: [] + is_bound_socket: false + socket) + .tcp_syn_packet(session) + .tcp_update_socket_session_state(session.state, session.socket) + .tcp_sessions.push(session) + did_receive_request = false + } + } +} \ No newline at end of file diff --git a/src/tlse/LICENSE b/src/tlse/LICENSE new file mode 100644 index 0000000..6494b3d --- /dev/null +++ b/src/tlse/LICENSE @@ -0,0 +1,60 @@ +This software is available under your choice of one of the following licenses. +Choose whichever you prefer. + +=============================================================================== +License Choice 1 - The 2-Clause BSD License +=============================================================================== + +Copyright (c) 2016 - 2024, Eduard Suica +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=============================================================================== +License Choice 2 - Public Domain (Unlicense) +=============================================================================== + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to <http://unlicense.org/> + diff --git a/src/tlse/libtomcrypt.c b/src/tlse/libtomcrypt.c new file mode 100644 index 0000000..b6e9c33 --- /dev/null +++ b/src/tlse/libtomcrypt.c @@ -0,0 +1,34766 @@ +#define CRYPT 0x0117 +#define LTC_NO_ROLC + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://math.libtomcrypt.com + */ +#ifndef BN_H_ +#define BN_H_ + +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <limits.h> + +#if !(defined(LTM1) && defined(LTM2) && defined(LTM3)) + #if defined(LTM2) + #define LTM3 + #endif + #if defined(LTM1) + #define LTM2 + #endif + #define LTM1 + + #if defined(LTM_ALL) + #define BN_ERROR_C + #define BN_FAST_MP_INVMOD_C + #define BN_FAST_MP_MONTGOMERY_REDUCE_C + #define BN_FAST_S_MP_MUL_DIGS_C + #define BN_FAST_S_MP_MUL_HIGH_DIGS_C + #define BN_FAST_S_MP_SQR_C + #define BN_MP_2EXPT_C + #define BN_MP_ABS_C + #define BN_MP_ADD_C + #define BN_MP_ADD_D_C + #define BN_MP_ADDMOD_C + #define BN_MP_AND_C + #define BN_MP_CLAMP_C + #define BN_MP_CLEAR_C + #define BN_MP_CLEAR_MULTI_C + #define BN_MP_CMP_C + #define BN_MP_CMP_D_C + #define BN_MP_CMP_MAG_C + #define BN_MP_CNT_LSB_C + #define BN_MP_COPY_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_DIV_C + #define BN_MP_DIV_2_C + #define BN_MP_DIV_2D_C + #define BN_MP_DIV_3_C + #define BN_MP_DIV_D_C + #define BN_MP_DR_IS_MODULUS_C + #define BN_MP_DR_REDUCE_C + #define BN_MP_DR_SETUP_C + #define BN_MP_EXCH_C + #define BN_MP_EXPORT_C + #define BN_MP_EXPT_D_C + #define BN_MP_EXPT_D_EX_C + #define BN_MP_EXPTMOD_C + #define BN_MP_EXPTMOD_FAST_C + #define BN_MP_EXTEUCLID_C + #define BN_MP_FREAD_C + #define BN_MP_FWRITE_C + #define BN_MP_GCD_C + #define BN_MP_GET_INT_C + #define BN_MP_GET_LONG_C + #define BN_MP_GET_LONG_LONG_C + #define BN_MP_GROW_C + #define BN_MP_IMPORT_C + #define BN_MP_INIT_C + #define BN_MP_INIT_COPY_C + #define BN_MP_INIT_MULTI_C + #define BN_MP_INIT_SET_C + #define BN_MP_INIT_SET_INT_C + #define BN_MP_INIT_SIZE_C + #define BN_MP_INVMOD_C + #define BN_MP_INVMOD_SLOW_C + #define BN_MP_IS_SQUARE_C + #define BN_MP_JACOBI_C + #define BN_MP_KARATSUBA_MUL_C + #define BN_MP_KARATSUBA_SQR_C + #define BN_MP_LCM_C + #define BN_MP_LSHD_C + #define BN_MP_MOD_C + #define BN_MP_MOD_2D_C + #define BN_MP_MOD_D_C + #define BN_MP_MONTGOMERY_CALC_NORMALIZATION_C + #define BN_MP_MONTGOMERY_REDUCE_C + #define BN_MP_MONTGOMERY_SETUP_C + #define BN_MP_MUL_C + #define BN_MP_MUL_2_C + #define BN_MP_MUL_2D_C + #define BN_MP_MUL_D_C + #define BN_MP_MULMOD_C + #define BN_MP_N_ROOT_C + #define BN_MP_N_ROOT_EX_C + #define BN_MP_NEG_C + #define BN_MP_OR_C + #define BN_MP_PRIME_FERMAT_C + #define BN_MP_PRIME_IS_DIVISIBLE_C + #define BN_MP_PRIME_IS_PRIME_C + #define BN_MP_PRIME_MILLER_RABIN_C + #define BN_MP_PRIME_NEXT_PRIME_C + #define BN_MP_PRIME_RABIN_MILLER_TRIALS_C + #define BN_MP_PRIME_RANDOM_EX_C + #define BN_MP_RADIX_SIZE_C + #define BN_MP_RADIX_SMAP_C + #define BN_MP_RAND_C + #define BN_MP_READ_RADIX_C + #define BN_MP_READ_SIGNED_BIN_C + #define BN_MP_READ_UNSIGNED_BIN_C + #define BN_MP_REDUCE_C + #define BN_MP_REDUCE_2K_C + #define BN_MP_REDUCE_2K_L_C + #define BN_MP_REDUCE_2K_SETUP_C + #define BN_MP_REDUCE_2K_SETUP_L_C + #define BN_MP_REDUCE_IS_2K_C + #define BN_MP_REDUCE_IS_2K_L_C + #define BN_MP_REDUCE_SETUP_C + #define BN_MP_RSHD_C + #define BN_MP_SET_C + #define BN_MP_SET_INT_C + #define BN_MP_SET_LONG_C + #define BN_MP_SET_LONG_LONG_C + #define BN_MP_SHRINK_C + #define BN_MP_SIGNED_BIN_SIZE_C + #define BN_MP_SQR_C + #define BN_MP_SQRMOD_C + #define BN_MP_SQRT_C + #define BN_MP_SQRTMOD_PRIME_C + #define BN_MP_SUB_C + #define BN_MP_SUB_D_C + #define BN_MP_SUBMOD_C + #define BN_MP_TO_SIGNED_BIN_C + #define BN_MP_TO_SIGNED_BIN_N_C + #define BN_MP_TO_UNSIGNED_BIN_C + #define BN_MP_TO_UNSIGNED_BIN_N_C + #define BN_MP_TOOM_MUL_C + #define BN_MP_TOOM_SQR_C + #define BN_MP_TORADIX_C + #define BN_MP_TORADIX_N_C + #define BN_MP_UNSIGNED_BIN_SIZE_C + #define BN_MP_XOR_C + #define BN_MP_ZERO_C + #define BN_PRIME_TAB_C + #define BN_REVERSE_C + #define BN_S_MP_ADD_C + #define BN_S_MP_EXPTMOD_C + #define BN_S_MP_MUL_DIGS_C + #define BN_S_MP_MUL_HIGH_DIGS_C + #define BN_S_MP_SQR_C + #define BN_S_MP_SUB_C + #define BNCORE_C + #endif + + #if defined(BN_ERROR_C) + #define BN_MP_ERROR_TO_STRING_C + #endif + + #if defined(BN_FAST_MP_INVMOD_C) + #define BN_MP_ISEVEN_C + #define BN_MP_INIT_MULTI_C + #define BN_MP_COPY_C + #define BN_MP_MOD_C + #define BN_MP_SET_C + #define BN_MP_DIV_2_C + #define BN_MP_ISODD_C + #define BN_MP_SUB_C + #define BN_MP_CMP_C + #define BN_MP_ISZERO_C + #define BN_MP_CMP_D_C + #define BN_MP_ADD_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_FAST_MP_MONTGOMERY_REDUCE_C) + #define BN_MP_GROW_C + #define BN_MP_RSHD_C + #define BN_MP_CLAMP_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_FAST_S_MP_MUL_DIGS_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_FAST_S_MP_MUL_HIGH_DIGS_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_FAST_S_MP_SQR_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_2EXPT_C) + #define BN_MP_ZERO_C + #define BN_MP_GROW_C + #endif + + #if defined(BN_MP_ABS_C) + #define BN_MP_COPY_C + #endif + + #if defined(BN_MP_ADD_C) + #define BN_S_MP_ADD_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_MP_ADD_D_C) + #define BN_MP_GROW_C + #define BN_MP_SUB_D_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_ADDMOD_C) + #define BN_MP_INIT_C + #define BN_MP_ADD_C + #define BN_MP_CLEAR_C + #define BN_MP_MOD_C + #endif + + #if defined(BN_MP_AND_C) + #define BN_MP_INIT_COPY_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_CLAMP_C) + #endif + + #if defined(BN_MP_CLEAR_C) + #endif + + #if defined(BN_MP_CLEAR_MULTI_C) + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_CMP_C) + #define BN_MP_CMP_MAG_C + #endif + + #if defined(BN_MP_CMP_D_C) + #endif + + #if defined(BN_MP_CMP_MAG_C) + #endif + + #if defined(BN_MP_CNT_LSB_C) + #define BN_MP_ISZERO_C + #endif + + #if defined(BN_MP_COPY_C) + #define BN_MP_GROW_C + #endif + + #if defined(BN_MP_COUNT_BITS_C) + #endif + + #if defined(BN_MP_DIV_C) + #define BN_MP_ISZERO_C + #define BN_MP_CMP_MAG_C + #define BN_MP_COPY_C + #define BN_MP_ZERO_C + #define BN_MP_INIT_MULTI_C + #define BN_MP_SET_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_ABS_C + #define BN_MP_MUL_2D_C + #define BN_MP_CMP_C + #define BN_MP_SUB_C + #define BN_MP_ADD_C + #define BN_MP_DIV_2D_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_MULTI_C + #define BN_MP_INIT_SIZE_C + #define BN_MP_INIT_C + #define BN_MP_INIT_COPY_C + #define BN_MP_LSHD_C + #define BN_MP_RSHD_C + #define BN_MP_MUL_D_C + #define BN_MP_CLAMP_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_DIV_2_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_DIV_2D_C) + #define BN_MP_COPY_C + #define BN_MP_ZERO_C + #define BN_MP_INIT_C + #define BN_MP_MOD_2D_C + #define BN_MP_CLEAR_C + #define BN_MP_RSHD_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #endif + + #if defined(BN_MP_DIV_3_C) + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_DIV_D_C) + #define BN_MP_ISZERO_C + #define BN_MP_COPY_C + #define BN_MP_DIV_2D_C + #define BN_MP_DIV_3_C + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_DR_IS_MODULUS_C) + #endif + + #if defined(BN_MP_DR_REDUCE_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_MP_DR_SETUP_C) + #endif + + #if defined(BN_MP_EXCH_C) + #endif + + #if defined(BN_MP_EXPORT_C) + #define BN_MP_INIT_COPY_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_DIV_2D_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_EXPT_D_C) + #define BN_MP_EXPT_D_EX_C + #endif + + #if defined(BN_MP_EXPT_D_EX_C) + #define BN_MP_INIT_COPY_C + #define BN_MP_SET_C + #define BN_MP_MUL_C + #define BN_MP_CLEAR_C + #define BN_MP_SQR_C + #endif + + #if defined(BN_MP_EXPTMOD_C) + #define BN_MP_INIT_C + #define BN_MP_INVMOD_C + #define BN_MP_CLEAR_C + #define BN_MP_ABS_C + #define BN_MP_CLEAR_MULTI_C + #define BN_MP_REDUCE_IS_2K_L_C + #define BN_S_MP_EXPTMOD_C + #define BN_MP_DR_IS_MODULUS_C + #define BN_MP_REDUCE_IS_2K_C + #define BN_MP_ISODD_C + #define BN_MP_EXPTMOD_FAST_C + #endif + + #if defined(BN_MP_EXPTMOD_FAST_C) + #define BN_MP_COUNT_BITS_C + #define BN_MP_INIT_C + #define BN_MP_CLEAR_C + #define BN_MP_MONTGOMERY_SETUP_C + #define BN_FAST_MP_MONTGOMERY_REDUCE_C + #define BN_MP_MONTGOMERY_REDUCE_C + #define BN_MP_DR_SETUP_C + #define BN_MP_DR_REDUCE_C + #define BN_MP_REDUCE_2K_SETUP_C + #define BN_MP_REDUCE_2K_C + #define BN_MP_MONTGOMERY_CALC_NORMALIZATION_C + #define BN_MP_MULMOD_C + #define BN_MP_SET_C + #define BN_MP_MOD_C + #define BN_MP_COPY_C + #define BN_MP_SQR_C + #define BN_MP_MUL_C + #define BN_MP_EXCH_C + #endif + + #if defined(BN_MP_EXTEUCLID_C) + #define BN_MP_INIT_MULTI_C + #define BN_MP_SET_C + #define BN_MP_COPY_C + #define BN_MP_ISZERO_C + #define BN_MP_DIV_C + #define BN_MP_MUL_C + #define BN_MP_SUB_C + #define BN_MP_NEG_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_MP_FREAD_C) + #define BN_MP_ZERO_C + #define BN_MP_S_RMAP_C + #define BN_MP_MUL_D_C + #define BN_MP_ADD_D_C + #define BN_MP_CMP_D_C + #endif + + #if defined(BN_MP_FWRITE_C) + #define BN_MP_RADIX_SIZE_C + #define BN_MP_TORADIX_C + #endif + + #if defined(BN_MP_GCD_C) + #define BN_MP_ISZERO_C + #define BN_MP_ABS_C + #define BN_MP_INIT_COPY_C + #define BN_MP_CNT_LSB_C + #define BN_MP_DIV_2D_C + #define BN_MP_CMP_MAG_C + #define BN_MP_EXCH_C + #define BN_S_MP_SUB_C + #define BN_MP_MUL_2D_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_GET_INT_C) + #endif + + #if defined(BN_MP_GET_LONG_C) + #endif + + #if defined(BN_MP_GET_LONG_LONG_C) + #endif + + #if defined(BN_MP_GROW_C) + #endif + + #if defined(BN_MP_IMPORT_C) + #define BN_MP_ZERO_C + #define BN_MP_MUL_2D_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_INIT_C) + #endif + + #if defined(BN_MP_INIT_COPY_C) + #define BN_MP_INIT_SIZE_C + #define BN_MP_COPY_C + #endif + + #if defined(BN_MP_INIT_MULTI_C) + #define BN_MP_ERR_C + #define BN_MP_INIT_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_INIT_SET_C) + #define BN_MP_INIT_C + #define BN_MP_SET_C + #endif + + #if defined(BN_MP_INIT_SET_INT_C) + #define BN_MP_INIT_C + #define BN_MP_SET_INT_C + #endif + + #if defined(BN_MP_INIT_SIZE_C) + #define BN_MP_INIT_C + #endif + + #if defined(BN_MP_INVMOD_C) + #define BN_MP_ISZERO_C + #define BN_MP_ISODD_C + #define BN_FAST_MP_INVMOD_C + #define BN_MP_INVMOD_SLOW_C + #endif + + #if defined(BN_MP_INVMOD_SLOW_C) + #define BN_MP_ISZERO_C + #define BN_MP_INIT_MULTI_C + #define BN_MP_MOD_C + #define BN_MP_COPY_C + #define BN_MP_ISEVEN_C + #define BN_MP_SET_C + #define BN_MP_DIV_2_C + #define BN_MP_ISODD_C + #define BN_MP_ADD_C + #define BN_MP_SUB_C + #define BN_MP_CMP_C + #define BN_MP_CMP_D_C + #define BN_MP_CMP_MAG_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_MP_IS_SQUARE_C) + #define BN_MP_MOD_D_C + #define BN_MP_INIT_SET_INT_C + #define BN_MP_MOD_C + #define BN_MP_GET_INT_C + #define BN_MP_SQRT_C + #define BN_MP_SQR_C + #define BN_MP_CMP_MAG_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_JACOBI_C) + #define BN_MP_CMP_D_C + #define BN_MP_ISZERO_C + #define BN_MP_INIT_COPY_C + #define BN_MP_CNT_LSB_C + #define BN_MP_DIV_2D_C + #define BN_MP_MOD_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_KARATSUBA_MUL_C) + #define BN_MP_MUL_C + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_S_MP_ADD_C + #define BN_MP_ADD_C + #define BN_S_MP_SUB_C + #define BN_MP_LSHD_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_KARATSUBA_SQR_C) + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_MP_SQR_C + #define BN_S_MP_ADD_C + #define BN_S_MP_SUB_C + #define BN_MP_LSHD_C + #define BN_MP_ADD_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_LCM_C) + #define BN_MP_INIT_MULTI_C + #define BN_MP_GCD_C + #define BN_MP_CMP_MAG_C + #define BN_MP_DIV_C + #define BN_MP_MUL_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_MP_LSHD_C) + #define BN_MP_GROW_C + #define BN_MP_RSHD_C + #endif + + #if defined(BN_MP_MOD_C) + #define BN_MP_INIT_C + #define BN_MP_DIV_C + #define BN_MP_CLEAR_C + #define BN_MP_ISZERO_C + #define BN_MP_EXCH_C + #define BN_MP_ADD_C + #endif + + #if defined(BN_MP_MOD_2D_C) + #define BN_MP_ZERO_C + #define BN_MP_COPY_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_MOD_D_C) + #define BN_MP_DIV_D_C + #endif + + #if defined(BN_MP_MONTGOMERY_CALC_NORMALIZATION_C) + #define BN_MP_COUNT_BITS_C + #define BN_MP_2EXPT_C + #define BN_MP_SET_C + #define BN_MP_MUL_2_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_MP_MONTGOMERY_REDUCE_C) + #define BN_FAST_MP_MONTGOMERY_REDUCE_C + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #define BN_MP_RSHD_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_MP_MONTGOMERY_SETUP_C) + #endif + + #if defined(BN_MP_MUL_C) + #define BN_MP_TOOM_MUL_C + #define BN_MP_KARATSUBA_MUL_C + #define BN_FAST_S_MP_MUL_DIGS_C + #define BN_S_MP_MUL_C + #define BN_S_MP_MUL_DIGS_C + #endif + + #if defined(BN_MP_MUL_2_C) + #define BN_MP_GROW_C + #endif + + #if defined(BN_MP_MUL_2D_C) + #define BN_MP_COPY_C + #define BN_MP_GROW_C + #define BN_MP_LSHD_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_MUL_D_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_MULMOD_C) + #define BN_MP_INIT_C + #define BN_MP_MUL_C + #define BN_MP_CLEAR_C + #define BN_MP_MOD_C + #endif + + #if defined(BN_MP_N_ROOT_C) + #define BN_MP_N_ROOT_EX_C + #endif + + #if defined(BN_MP_N_ROOT_EX_C) + #define BN_MP_INIT_C + #define BN_MP_SET_C + #define BN_MP_COPY_C + #define BN_MP_EXPT_D_EX_C + #define BN_MP_MUL_C + #define BN_MP_SUB_C + #define BN_MP_MUL_D_C + #define BN_MP_DIV_C + #define BN_MP_CMP_C + #define BN_MP_SUB_D_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_NEG_C) + #define BN_MP_COPY_C + #define BN_MP_ISZERO_C + #endif + + #if defined(BN_MP_OR_C) + #define BN_MP_INIT_COPY_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_PRIME_FERMAT_C) + #define BN_MP_CMP_D_C + #define BN_MP_INIT_C + #define BN_MP_EXPTMOD_C + #define BN_MP_CMP_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_PRIME_IS_DIVISIBLE_C) + #define BN_MP_MOD_D_C + #endif + + #if defined(BN_MP_PRIME_IS_PRIME_C) + #define BN_MP_CMP_D_C + #define BN_MP_PRIME_IS_DIVISIBLE_C + #define BN_MP_INIT_C + #define BN_MP_SET_C + #define BN_MP_PRIME_MILLER_RABIN_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_PRIME_MILLER_RABIN_C) + #define BN_MP_CMP_D_C + #define BN_MP_INIT_COPY_C + #define BN_MP_SUB_D_C + #define BN_MP_CNT_LSB_C + #define BN_MP_DIV_2D_C + #define BN_MP_EXPTMOD_C + #define BN_MP_CMP_C + #define BN_MP_SQRMOD_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_PRIME_NEXT_PRIME_C) + #define BN_MP_CMP_D_C + #define BN_MP_SET_C + #define BN_MP_SUB_D_C + #define BN_MP_ISEVEN_C + #define BN_MP_MOD_D_C + #define BN_MP_INIT_C + #define BN_MP_ADD_D_C + #define BN_MP_PRIME_MILLER_RABIN_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_PRIME_RABIN_MILLER_TRIALS_C) + #endif + + #if defined(BN_MP_PRIME_RANDOM_EX_C) + #define BN_MP_READ_UNSIGNED_BIN_C + #define BN_MP_PRIME_IS_PRIME_C + #define BN_MP_SUB_D_C + #define BN_MP_DIV_2_C + #define BN_MP_MUL_2_C + #define BN_MP_ADD_D_C + #endif + + #if defined(BN_MP_RADIX_SIZE_C) + #define BN_MP_ISZERO_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_INIT_COPY_C + #define BN_MP_DIV_D_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_RADIX_SMAP_C) + #define BN_MP_S_RMAP_C + #endif + + #if defined(BN_MP_RAND_C) + #define BN_MP_ZERO_C + #define BN_MP_ADD_D_C + #define BN_MP_LSHD_C + #endif + + #if defined(BN_MP_READ_RADIX_C) + #define BN_MP_ZERO_C + #define BN_MP_S_RMAP_C + #define BN_MP_MUL_D_C + #define BN_MP_ADD_D_C + #define BN_MP_ISZERO_C + #endif + + #if defined(BN_MP_READ_SIGNED_BIN_C) + #define BN_MP_READ_UNSIGNED_BIN_C + #endif + + #if defined(BN_MP_READ_UNSIGNED_BIN_C) + #define BN_MP_GROW_C + #define BN_MP_ZERO_C + #define BN_MP_MUL_2D_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_REDUCE_C) + #define BN_MP_REDUCE_SETUP_C + #define BN_MP_INIT_COPY_C + #define BN_MP_RSHD_C + #define BN_MP_MUL_C + #define BN_S_MP_MUL_HIGH_DIGS_C + #define BN_FAST_S_MP_MUL_HIGH_DIGS_C + #define BN_MP_MOD_2D_C + #define BN_S_MP_MUL_DIGS_C + #define BN_MP_SUB_C + #define BN_MP_CMP_D_C + #define BN_MP_SET_C + #define BN_MP_LSHD_C + #define BN_MP_ADD_C + #define BN_MP_CMP_C + #define BN_S_MP_SUB_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_REDUCE_2K_C) + #define BN_MP_INIT_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_DIV_2D_C + #define BN_MP_MUL_D_C + #define BN_S_MP_ADD_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_REDUCE_2K_L_C) + #define BN_MP_INIT_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_DIV_2D_C + #define BN_MP_MUL_C + #define BN_S_MP_ADD_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_REDUCE_2K_SETUP_C) + #define BN_MP_INIT_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_2EXPT_C + #define BN_MP_CLEAR_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_MP_REDUCE_2K_SETUP_L_C) + #define BN_MP_INIT_C + #define BN_MP_2EXPT_C + #define BN_MP_COUNT_BITS_C + #define BN_S_MP_SUB_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_REDUCE_IS_2K_C) + #define BN_MP_REDUCE_2K_C + #define BN_MP_COUNT_BITS_C + #endif + + #if defined(BN_MP_REDUCE_IS_2K_L_C) + #endif + + #if defined(BN_MP_REDUCE_SETUP_C) + #define BN_MP_2EXPT_C + #define BN_MP_DIV_C + #endif + + #if defined(BN_MP_RSHD_C) + #define BN_MP_ZERO_C + #endif + + #if defined(BN_MP_SET_C) + #define BN_MP_ZERO_C + #endif + + #if defined(BN_MP_SET_INT_C) + #define BN_MP_ZERO_C + #define BN_MP_MUL_2D_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_SET_LONG_C) + #endif + + #if defined(BN_MP_SET_LONG_LONG_C) + #endif + + #if defined(BN_MP_SHRINK_C) + #endif + + #if defined(BN_MP_SIGNED_BIN_SIZE_C) + #define BN_MP_UNSIGNED_BIN_SIZE_C + #endif + + #if defined(BN_MP_SQR_C) + #define BN_MP_TOOM_SQR_C + #define BN_MP_KARATSUBA_SQR_C + #define BN_FAST_S_MP_SQR_C + #define BN_S_MP_SQR_C + #endif + + #if defined(BN_MP_SQRMOD_C) + #define BN_MP_INIT_C + #define BN_MP_SQR_C + #define BN_MP_CLEAR_C + #define BN_MP_MOD_C + #endif + + #if defined(BN_MP_SQRT_C) + #define BN_MP_N_ROOT_C + #define BN_MP_ISZERO_C + #define BN_MP_ZERO_C + #define BN_MP_INIT_COPY_C + #define BN_MP_RSHD_C + #define BN_MP_DIV_C + #define BN_MP_ADD_C + #define BN_MP_DIV_2_C + #define BN_MP_CMP_MAG_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_SQRTMOD_PRIME_C) + #define BN_MP_CMP_D_C + #define BN_MP_ZERO_C + #define BN_MP_JACOBI_C + #define BN_MP_INIT_MULTI_C + #define BN_MP_MOD_D_C + #define BN_MP_ADD_D_C + #define BN_MP_DIV_2_C + #define BN_MP_EXPTMOD_C + #define BN_MP_COPY_C + #define BN_MP_SUB_D_C + #define BN_MP_ISEVEN_C + #define BN_MP_SET_INT_C + #define BN_MP_SQRMOD_C + #define BN_MP_MULMOD_C + #define BN_MP_SET_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_MP_SUB_C) + #define BN_S_MP_ADD_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_MP_SUB_D_C) + #define BN_MP_GROW_C + #define BN_MP_ADD_D_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_SUBMOD_C) + #define BN_MP_INIT_C + #define BN_MP_SUB_C + #define BN_MP_CLEAR_C + #define BN_MP_MOD_C + #endif + + #if defined(BN_MP_TO_SIGNED_BIN_C) + #define BN_MP_TO_UNSIGNED_BIN_C + #endif + + #if defined(BN_MP_TO_SIGNED_BIN_N_C) + #define BN_MP_SIGNED_BIN_SIZE_C + #define BN_MP_TO_SIGNED_BIN_C + #endif + + #if defined(BN_MP_TO_UNSIGNED_BIN_C) + #define BN_MP_INIT_COPY_C + #define BN_MP_ISZERO_C + #define BN_MP_DIV_2D_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_TO_UNSIGNED_BIN_N_C) + #define BN_MP_UNSIGNED_BIN_SIZE_C + #define BN_MP_TO_UNSIGNED_BIN_C + #endif + + #if defined(BN_MP_TOOM_MUL_C) + #define BN_MP_INIT_MULTI_C + #define BN_MP_MOD_2D_C + #define BN_MP_COPY_C + #define BN_MP_RSHD_C + #define BN_MP_MUL_C + #define BN_MP_MUL_2_C + #define BN_MP_ADD_C + #define BN_MP_SUB_C + #define BN_MP_DIV_2_C + #define BN_MP_MUL_2D_C + #define BN_MP_MUL_D_C + #define BN_MP_DIV_3_C + #define BN_MP_LSHD_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_MP_TOOM_SQR_C) + #define BN_MP_INIT_MULTI_C + #define BN_MP_MOD_2D_C + #define BN_MP_COPY_C + #define BN_MP_RSHD_C + #define BN_MP_SQR_C + #define BN_MP_MUL_2_C + #define BN_MP_ADD_C + #define BN_MP_SUB_C + #define BN_MP_DIV_2_C + #define BN_MP_MUL_2D_C + #define BN_MP_MUL_D_C + #define BN_MP_DIV_3_C + #define BN_MP_LSHD_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_MP_TORADIX_C) + #define BN_MP_ISZERO_C + #define BN_MP_INIT_COPY_C + #define BN_MP_DIV_D_C + #define BN_MP_CLEAR_C + #define BN_MP_S_RMAP_C + #endif + + #if defined(BN_MP_TORADIX_N_C) + #define BN_MP_ISZERO_C + #define BN_MP_INIT_COPY_C + #define BN_MP_DIV_D_C + #define BN_MP_CLEAR_C + #define BN_MP_S_RMAP_C + #endif + + #if defined(BN_MP_UNSIGNED_BIN_SIZE_C) + #define BN_MP_COUNT_BITS_C + #endif + + #if defined(BN_MP_XOR_C) + #define BN_MP_INIT_COPY_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_ZERO_C) + #endif + + #if defined(BN_PRIME_TAB_C) + #endif + + #if defined(BN_REVERSE_C) + #endif + + #if defined(BN_S_MP_ADD_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_S_MP_EXPTMOD_C) + #define BN_MP_COUNT_BITS_C + #define BN_MP_INIT_C + #define BN_MP_CLEAR_C + #define BN_MP_REDUCE_SETUP_C + #define BN_MP_REDUCE_C + #define BN_MP_REDUCE_2K_SETUP_L_C + #define BN_MP_REDUCE_2K_L_C + #define BN_MP_MOD_C + #define BN_MP_COPY_C + #define BN_MP_SQR_C + #define BN_MP_MUL_C + #define BN_MP_SET_C + #define BN_MP_EXCH_C + #endif + + #if defined(BN_S_MP_MUL_DIGS_C) + #define BN_FAST_S_MP_MUL_DIGS_C + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_S_MP_MUL_HIGH_DIGS_C) + #define BN_FAST_S_MP_MUL_HIGH_DIGS_C + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_S_MP_SQR_C) + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_S_MP_SUB_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BNCORE_C) + #endif + + #ifdef LTM3 + #define LTM_LAST + #endif +/* super class file for PK algos */ + +/* default ... include all MPI */ +#define LTM_ALL + +/* RSA only (does not support DH/DSA/ECC) */ +/* #define SC_RSA_1 */ + +/* For reference.... On an Athlon64 optimizing for speed... + + LTM's mpi.o with all functions [striped] is 142KiB in size. + + */ + +/* Works for RSA only, mpi.o is 68KiB */ +#ifdef SC_RSA_1 + #define BN_MP_SHRINK_C + #define BN_MP_LCM_C + #define BN_MP_PRIME_RANDOM_EX_C + #define BN_MP_INVMOD_C + #define BN_MP_GCD_C + #define BN_MP_MOD_C + #define BN_MP_MULMOD_C + #define BN_MP_ADDMOD_C + #define BN_MP_EXPTMOD_C + #define BN_MP_SET_INT_C + #define BN_MP_INIT_MULTI_C + #define BN_MP_CLEAR_MULTI_C + #define BN_MP_UNSIGNED_BIN_SIZE_C + #define BN_MP_TO_UNSIGNED_BIN_C + #define BN_MP_MOD_D_C + #define BN_MP_PRIME_RABIN_MILLER_TRIALS_C + #define BN_REVERSE_C + #define BN_PRIME_TAB_C + +/* other modifiers */ + #define BN_MP_DIV_SMALL /* Slower division, not critical */ + +/* here we are on the last pass so we turn things off. The functions classes are still there + * but we remove them specifically from the build. This also invokes tweaks in functions + * like removing support for even moduli, etc... + */ + #ifdef LTM_LAST + #undef BN_MP_TOOM_MUL_C + #undef BN_MP_TOOM_SQR_C + #undef BN_MP_KARATSUBA_MUL_C + #undef BN_MP_KARATSUBA_SQR_C + #undef BN_MP_REDUCE_C + #undef BN_MP_REDUCE_SETUP_C + #undef BN_MP_DR_IS_MODULUS_C + #undef BN_MP_DR_SETUP_C + #undef BN_MP_DR_REDUCE_C + #undef BN_MP_REDUCE_IS_2K_C + #undef BN_MP_REDUCE_2K_SETUP_C + #undef BN_MP_REDUCE_2K_C + #undef BN_S_MP_EXPTMOD_C + #undef BN_MP_DIV_3_C + #undef BN_S_MP_MUL_HIGH_DIGS_C + #undef BN_FAST_S_MP_MUL_HIGH_DIGS_C + #undef BN_FAST_MP_INVMOD_C + +/* To safely undefine these you have to make sure your RSA key won't exceed the Comba threshold + * which is roughly 255 digits [7140 bits for 32-bit machines, 15300 bits for 64-bit machines] + * which means roughly speaking you can handle upto 2536-bit RSA keys with these defined without + * trouble. + */ + #undef BN_S_MP_MUL_DIGS_C + #undef BN_S_MP_SQR_C + #undef BN_MP_MONTGOMERY_REDUCE_C + #endif +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ +#if !(defined(LTM1) && defined(LTM2) && defined(LTM3)) + #if defined(LTM2) + #define LTM3 + #endif + #if defined(LTM1) + #define LTM2 + #endif + #define LTM1 + + #if defined(LTM_ALL) + #define BN_ERROR_C + #define BN_FAST_MP_INVMOD_C + #define BN_FAST_MP_MONTGOMERY_REDUCE_C + #define BN_FAST_S_MP_MUL_DIGS_C + #define BN_FAST_S_MP_MUL_HIGH_DIGS_C + #define BN_FAST_S_MP_SQR_C + #define BN_MP_2EXPT_C + #define BN_MP_ABS_C + #define BN_MP_ADD_C + #define BN_MP_ADD_D_C + #define BN_MP_ADDMOD_C + #define BN_MP_AND_C + #define BN_MP_CLAMP_C + #define BN_MP_CLEAR_C + #define BN_MP_CLEAR_MULTI_C + #define BN_MP_CMP_C + #define BN_MP_CMP_D_C + #define BN_MP_CMP_MAG_C + #define BN_MP_CNT_LSB_C + #define BN_MP_COPY_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_DIV_C + #define BN_MP_DIV_2_C + #define BN_MP_DIV_2D_C + #define BN_MP_DIV_3_C + #define BN_MP_DIV_D_C + #define BN_MP_DR_IS_MODULUS_C + #define BN_MP_DR_REDUCE_C + #define BN_MP_DR_SETUP_C + #define BN_MP_EXCH_C + #define BN_MP_EXPORT_C + #define BN_MP_EXPT_D_C + #define BN_MP_EXPT_D_EX_C + #define BN_MP_EXPTMOD_C + #define BN_MP_EXPTMOD_FAST_C + #define BN_MP_EXTEUCLID_C + #define BN_MP_FREAD_C + #define BN_MP_FWRITE_C + #define BN_MP_GCD_C + #define BN_MP_GET_INT_C + #define BN_MP_GET_LONG_C + #define BN_MP_GET_LONG_LONG_C + #define BN_MP_GROW_C + #define BN_MP_IMPORT_C + #define BN_MP_INIT_C + #define BN_MP_INIT_COPY_C + #define BN_MP_INIT_MULTI_C + #define BN_MP_INIT_SET_C + #define BN_MP_INIT_SET_INT_C + #define BN_MP_INIT_SIZE_C + #define BN_MP_INVMOD_C + #define BN_MP_INVMOD_SLOW_C + #define BN_MP_IS_SQUARE_C + #define BN_MP_JACOBI_C + #define BN_MP_KARATSUBA_MUL_C + #define BN_MP_KARATSUBA_SQR_C + #define BN_MP_LCM_C + #define BN_MP_LSHD_C + #define BN_MP_MOD_C + #define BN_MP_MOD_2D_C + #define BN_MP_MOD_D_C + #define BN_MP_MONTGOMERY_CALC_NORMALIZATION_C + #define BN_MP_MONTGOMERY_REDUCE_C + #define BN_MP_MONTGOMERY_SETUP_C + #define BN_MP_MUL_C + #define BN_MP_MUL_2_C + #define BN_MP_MUL_2D_C + #define BN_MP_MUL_D_C + #define BN_MP_MULMOD_C + #define BN_MP_N_ROOT_C + #define BN_MP_N_ROOT_EX_C + #define BN_MP_NEG_C + #define BN_MP_OR_C + #define BN_MP_PRIME_FERMAT_C + #define BN_MP_PRIME_IS_DIVISIBLE_C + #define BN_MP_PRIME_IS_PRIME_C + #define BN_MP_PRIME_MILLER_RABIN_C + #define BN_MP_PRIME_NEXT_PRIME_C + #define BN_MP_PRIME_RABIN_MILLER_TRIALS_C + #define BN_MP_PRIME_RANDOM_EX_C + #define BN_MP_RADIX_SIZE_C + #define BN_MP_RADIX_SMAP_C + #define BN_MP_RAND_C + #define BN_MP_READ_RADIX_C + #define BN_MP_READ_SIGNED_BIN_C + #define BN_MP_READ_UNSIGNED_BIN_C + #define BN_MP_REDUCE_C + #define BN_MP_REDUCE_2K_C + #define BN_MP_REDUCE_2K_L_C + #define BN_MP_REDUCE_2K_SETUP_C + #define BN_MP_REDUCE_2K_SETUP_L_C + #define BN_MP_REDUCE_IS_2K_C + #define BN_MP_REDUCE_IS_2K_L_C + #define BN_MP_REDUCE_SETUP_C + #define BN_MP_RSHD_C + #define BN_MP_SET_C + #define BN_MP_SET_INT_C + #define BN_MP_SET_LONG_C + #define BN_MP_SET_LONG_LONG_C + #define BN_MP_SHRINK_C + #define BN_MP_SIGNED_BIN_SIZE_C + #define BN_MP_SQR_C + #define BN_MP_SQRMOD_C + #define BN_MP_SQRT_C + #define BN_MP_SQRTMOD_PRIME_C + #define BN_MP_SUB_C + #define BN_MP_SUB_D_C + #define BN_MP_SUBMOD_C + #define BN_MP_TO_SIGNED_BIN_C + #define BN_MP_TO_SIGNED_BIN_N_C + #define BN_MP_TO_UNSIGNED_BIN_C + #define BN_MP_TO_UNSIGNED_BIN_N_C + #define BN_MP_TOOM_MUL_C + #define BN_MP_TOOM_SQR_C + #define BN_MP_TORADIX_C + #define BN_MP_TORADIX_N_C + #define BN_MP_UNSIGNED_BIN_SIZE_C + #define BN_MP_XOR_C + #define BN_MP_ZERO_C + #define BN_PRIME_TAB_C + #define BN_REVERSE_C + #define BN_S_MP_ADD_C + #define BN_S_MP_EXPTMOD_C + #define BN_S_MP_MUL_DIGS_C + #define BN_S_MP_MUL_HIGH_DIGS_C + #define BN_S_MP_SQR_C + #define BN_S_MP_SUB_C + #define BNCORE_C + #endif + + #if defined(BN_ERROR_C) + #define BN_MP_ERROR_TO_STRING_C + #endif + + #if defined(BN_FAST_MP_INVMOD_C) + #define BN_MP_ISEVEN_C + #define BN_MP_INIT_MULTI_C + #define BN_MP_COPY_C + #define BN_MP_MOD_C + #define BN_MP_SET_C + #define BN_MP_DIV_2_C + #define BN_MP_ISODD_C + #define BN_MP_SUB_C + #define BN_MP_CMP_C + #define BN_MP_ISZERO_C + #define BN_MP_CMP_D_C + #define BN_MP_ADD_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_FAST_MP_MONTGOMERY_REDUCE_C) + #define BN_MP_GROW_C + #define BN_MP_RSHD_C + #define BN_MP_CLAMP_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_FAST_S_MP_MUL_DIGS_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_FAST_S_MP_MUL_HIGH_DIGS_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_FAST_S_MP_SQR_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_2EXPT_C) + #define BN_MP_ZERO_C + #define BN_MP_GROW_C + #endif + + #if defined(BN_MP_ABS_C) + #define BN_MP_COPY_C + #endif + + #if defined(BN_MP_ADD_C) + #define BN_S_MP_ADD_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_MP_ADD_D_C) + #define BN_MP_GROW_C + #define BN_MP_SUB_D_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_ADDMOD_C) + #define BN_MP_INIT_C + #define BN_MP_ADD_C + #define BN_MP_CLEAR_C + #define BN_MP_MOD_C + #endif + + #if defined(BN_MP_AND_C) + #define BN_MP_INIT_COPY_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_CLAMP_C) + #endif + + #if defined(BN_MP_CLEAR_C) + #endif + + #if defined(BN_MP_CLEAR_MULTI_C) + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_CMP_C) + #define BN_MP_CMP_MAG_C + #endif + + #if defined(BN_MP_CMP_D_C) + #endif + + #if defined(BN_MP_CMP_MAG_C) + #endif + + #if defined(BN_MP_CNT_LSB_C) + #define BN_MP_ISZERO_C + #endif + + #if defined(BN_MP_COPY_C) + #define BN_MP_GROW_C + #endif + + #if defined(BN_MP_COUNT_BITS_C) + #endif + + #if defined(BN_MP_DIV_C) + #define BN_MP_ISZERO_C + #define BN_MP_CMP_MAG_C + #define BN_MP_COPY_C + #define BN_MP_ZERO_C + #define BN_MP_INIT_MULTI_C + #define BN_MP_SET_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_ABS_C + #define BN_MP_MUL_2D_C + #define BN_MP_CMP_C + #define BN_MP_SUB_C + #define BN_MP_ADD_C + #define BN_MP_DIV_2D_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_MULTI_C + #define BN_MP_INIT_SIZE_C + #define BN_MP_INIT_C + #define BN_MP_INIT_COPY_C + #define BN_MP_LSHD_C + #define BN_MP_RSHD_C + #define BN_MP_MUL_D_C + #define BN_MP_CLAMP_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_DIV_2_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_DIV_2D_C) + #define BN_MP_COPY_C + #define BN_MP_ZERO_C + #define BN_MP_INIT_C + #define BN_MP_MOD_2D_C + #define BN_MP_CLEAR_C + #define BN_MP_RSHD_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #endif + + #if defined(BN_MP_DIV_3_C) + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_DIV_D_C) + #define BN_MP_ISZERO_C + #define BN_MP_COPY_C + #define BN_MP_DIV_2D_C + #define BN_MP_DIV_3_C + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_DR_IS_MODULUS_C) + #endif + + #if defined(BN_MP_DR_REDUCE_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_MP_DR_SETUP_C) + #endif + + #if defined(BN_MP_EXCH_C) + #endif + + #if defined(BN_MP_EXPORT_C) + #define BN_MP_INIT_COPY_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_DIV_2D_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_EXPT_D_C) + #define BN_MP_EXPT_D_EX_C + #endif + + #if defined(BN_MP_EXPT_D_EX_C) + #define BN_MP_INIT_COPY_C + #define BN_MP_SET_C + #define BN_MP_MUL_C + #define BN_MP_CLEAR_C + #define BN_MP_SQR_C + #endif + + #if defined(BN_MP_EXPTMOD_C) + #define BN_MP_INIT_C + #define BN_MP_INVMOD_C + #define BN_MP_CLEAR_C + #define BN_MP_ABS_C + #define BN_MP_CLEAR_MULTI_C + #define BN_MP_REDUCE_IS_2K_L_C + #define BN_S_MP_EXPTMOD_C + #define BN_MP_DR_IS_MODULUS_C + #define BN_MP_REDUCE_IS_2K_C + #define BN_MP_ISODD_C + #define BN_MP_EXPTMOD_FAST_C + #endif + + #if defined(BN_MP_EXPTMOD_FAST_C) + #define BN_MP_COUNT_BITS_C + #define BN_MP_INIT_C + #define BN_MP_CLEAR_C + #define BN_MP_MONTGOMERY_SETUP_C + #define BN_FAST_MP_MONTGOMERY_REDUCE_C + #define BN_MP_MONTGOMERY_REDUCE_C + #define BN_MP_DR_SETUP_C + #define BN_MP_DR_REDUCE_C + #define BN_MP_REDUCE_2K_SETUP_C + #define BN_MP_REDUCE_2K_C + #define BN_MP_MONTGOMERY_CALC_NORMALIZATION_C + #define BN_MP_MULMOD_C + #define BN_MP_SET_C + #define BN_MP_MOD_C + #define BN_MP_COPY_C + #define BN_MP_SQR_C + #define BN_MP_MUL_C + #define BN_MP_EXCH_C + #endif + + #if defined(BN_MP_EXTEUCLID_C) + #define BN_MP_INIT_MULTI_C + #define BN_MP_SET_C + #define BN_MP_COPY_C + #define BN_MP_ISZERO_C + #define BN_MP_DIV_C + #define BN_MP_MUL_C + #define BN_MP_SUB_C + #define BN_MP_NEG_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_MP_FREAD_C) + #define BN_MP_ZERO_C + #define BN_MP_S_RMAP_C + #define BN_MP_MUL_D_C + #define BN_MP_ADD_D_C + #define BN_MP_CMP_D_C + #endif + + #if defined(BN_MP_FWRITE_C) + #define BN_MP_RADIX_SIZE_C + #define BN_MP_TORADIX_C + #endif + + #if defined(BN_MP_GCD_C) + #define BN_MP_ISZERO_C + #define BN_MP_ABS_C + #define BN_MP_INIT_COPY_C + #define BN_MP_CNT_LSB_C + #define BN_MP_DIV_2D_C + #define BN_MP_CMP_MAG_C + #define BN_MP_EXCH_C + #define BN_S_MP_SUB_C + #define BN_MP_MUL_2D_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_GET_INT_C) + #endif + + #if defined(BN_MP_GET_LONG_C) + #endif + + #if defined(BN_MP_GET_LONG_LONG_C) + #endif + + #if defined(BN_MP_GROW_C) + #endif + + #if defined(BN_MP_IMPORT_C) + #define BN_MP_ZERO_C + #define BN_MP_MUL_2D_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_INIT_C) + #endif + + #if defined(BN_MP_INIT_COPY_C) + #define BN_MP_INIT_SIZE_C + #define BN_MP_COPY_C + #endif + + #if defined(BN_MP_INIT_MULTI_C) + #define BN_MP_ERR_C + #define BN_MP_INIT_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_INIT_SET_C) + #define BN_MP_INIT_C + #define BN_MP_SET_C + #endif + + #if defined(BN_MP_INIT_SET_INT_C) + #define BN_MP_INIT_C + #define BN_MP_SET_INT_C + #endif + + #if defined(BN_MP_INIT_SIZE_C) + #define BN_MP_INIT_C + #endif + + #if defined(BN_MP_INVMOD_C) + #define BN_MP_ISZERO_C + #define BN_MP_ISODD_C + #define BN_FAST_MP_INVMOD_C + #define BN_MP_INVMOD_SLOW_C + #endif + + #if defined(BN_MP_INVMOD_SLOW_C) + #define BN_MP_ISZERO_C + #define BN_MP_INIT_MULTI_C + #define BN_MP_MOD_C + #define BN_MP_COPY_C + #define BN_MP_ISEVEN_C + #define BN_MP_SET_C + #define BN_MP_DIV_2_C + #define BN_MP_ISODD_C + #define BN_MP_ADD_C + #define BN_MP_SUB_C + #define BN_MP_CMP_C + #define BN_MP_CMP_D_C + #define BN_MP_CMP_MAG_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_MP_IS_SQUARE_C) + #define BN_MP_MOD_D_C + #define BN_MP_INIT_SET_INT_C + #define BN_MP_MOD_C + #define BN_MP_GET_INT_C + #define BN_MP_SQRT_C + #define BN_MP_SQR_C + #define BN_MP_CMP_MAG_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_JACOBI_C) + #define BN_MP_CMP_D_C + #define BN_MP_ISZERO_C + #define BN_MP_INIT_COPY_C + #define BN_MP_CNT_LSB_C + #define BN_MP_DIV_2D_C + #define BN_MP_MOD_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_KARATSUBA_MUL_C) + #define BN_MP_MUL_C + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_S_MP_ADD_C + #define BN_MP_ADD_C + #define BN_S_MP_SUB_C + #define BN_MP_LSHD_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_KARATSUBA_SQR_C) + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_MP_SQR_C + #define BN_S_MP_ADD_C + #define BN_S_MP_SUB_C + #define BN_MP_LSHD_C + #define BN_MP_ADD_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_LCM_C) + #define BN_MP_INIT_MULTI_C + #define BN_MP_GCD_C + #define BN_MP_CMP_MAG_C + #define BN_MP_DIV_C + #define BN_MP_MUL_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_MP_LSHD_C) + #define BN_MP_GROW_C + #define BN_MP_RSHD_C + #endif + + #if defined(BN_MP_MOD_C) + #define BN_MP_INIT_C + #define BN_MP_DIV_C + #define BN_MP_CLEAR_C + #define BN_MP_ISZERO_C + #define BN_MP_EXCH_C + #define BN_MP_ADD_C + #endif + + #if defined(BN_MP_MOD_2D_C) + #define BN_MP_ZERO_C + #define BN_MP_COPY_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_MOD_D_C) + #define BN_MP_DIV_D_C + #endif + + #if defined(BN_MP_MONTGOMERY_CALC_NORMALIZATION_C) + #define BN_MP_COUNT_BITS_C + #define BN_MP_2EXPT_C + #define BN_MP_SET_C + #define BN_MP_MUL_2_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_MP_MONTGOMERY_REDUCE_C) + #define BN_FAST_MP_MONTGOMERY_REDUCE_C + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #define BN_MP_RSHD_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_MP_MONTGOMERY_SETUP_C) + #endif + + #if defined(BN_MP_MUL_C) + #define BN_MP_TOOM_MUL_C + #define BN_MP_KARATSUBA_MUL_C + #define BN_FAST_S_MP_MUL_DIGS_C + #define BN_S_MP_MUL_C + #define BN_S_MP_MUL_DIGS_C + #endif + + #if defined(BN_MP_MUL_2_C) + #define BN_MP_GROW_C + #endif + + #if defined(BN_MP_MUL_2D_C) + #define BN_MP_COPY_C + #define BN_MP_GROW_C + #define BN_MP_LSHD_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_MUL_D_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_MULMOD_C) + #define BN_MP_INIT_C + #define BN_MP_MUL_C + #define BN_MP_CLEAR_C + #define BN_MP_MOD_C + #endif + + #if defined(BN_MP_N_ROOT_C) + #define BN_MP_N_ROOT_EX_C + #endif + + #if defined(BN_MP_N_ROOT_EX_C) + #define BN_MP_INIT_C + #define BN_MP_SET_C + #define BN_MP_COPY_C + #define BN_MP_EXPT_D_EX_C + #define BN_MP_MUL_C + #define BN_MP_SUB_C + #define BN_MP_MUL_D_C + #define BN_MP_DIV_C + #define BN_MP_CMP_C + #define BN_MP_SUB_D_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_NEG_C) + #define BN_MP_COPY_C + #define BN_MP_ISZERO_C + #endif + + #if defined(BN_MP_OR_C) + #define BN_MP_INIT_COPY_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_PRIME_FERMAT_C) + #define BN_MP_CMP_D_C + #define BN_MP_INIT_C + #define BN_MP_EXPTMOD_C + #define BN_MP_CMP_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_PRIME_IS_DIVISIBLE_C) + #define BN_MP_MOD_D_C + #endif + + #if defined(BN_MP_PRIME_IS_PRIME_C) + #define BN_MP_CMP_D_C + #define BN_MP_PRIME_IS_DIVISIBLE_C + #define BN_MP_INIT_C + #define BN_MP_SET_C + #define BN_MP_PRIME_MILLER_RABIN_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_PRIME_MILLER_RABIN_C) + #define BN_MP_CMP_D_C + #define BN_MP_INIT_COPY_C + #define BN_MP_SUB_D_C + #define BN_MP_CNT_LSB_C + #define BN_MP_DIV_2D_C + #define BN_MP_EXPTMOD_C + #define BN_MP_CMP_C + #define BN_MP_SQRMOD_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_PRIME_NEXT_PRIME_C) + #define BN_MP_CMP_D_C + #define BN_MP_SET_C + #define BN_MP_SUB_D_C + #define BN_MP_ISEVEN_C + #define BN_MP_MOD_D_C + #define BN_MP_INIT_C + #define BN_MP_ADD_D_C + #define BN_MP_PRIME_MILLER_RABIN_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_PRIME_RABIN_MILLER_TRIALS_C) + #endif + + #if defined(BN_MP_PRIME_RANDOM_EX_C) + #define BN_MP_READ_UNSIGNED_BIN_C + #define BN_MP_PRIME_IS_PRIME_C + #define BN_MP_SUB_D_C + #define BN_MP_DIV_2_C + #define BN_MP_MUL_2_C + #define BN_MP_ADD_D_C + #endif + + #if defined(BN_MP_RADIX_SIZE_C) + #define BN_MP_ISZERO_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_INIT_COPY_C + #define BN_MP_DIV_D_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_RADIX_SMAP_C) + #define BN_MP_S_RMAP_C + #endif + + #if defined(BN_MP_RAND_C) + #define BN_MP_ZERO_C + #define BN_MP_ADD_D_C + #define BN_MP_LSHD_C + #endif + + #if defined(BN_MP_READ_RADIX_C) + #define BN_MP_ZERO_C + #define BN_MP_S_RMAP_C + #define BN_MP_MUL_D_C + #define BN_MP_ADD_D_C + #define BN_MP_ISZERO_C + #endif + + #if defined(BN_MP_READ_SIGNED_BIN_C) + #define BN_MP_READ_UNSIGNED_BIN_C + #endif + + #if defined(BN_MP_READ_UNSIGNED_BIN_C) + #define BN_MP_GROW_C + #define BN_MP_ZERO_C + #define BN_MP_MUL_2D_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_REDUCE_C) + #define BN_MP_REDUCE_SETUP_C + #define BN_MP_INIT_COPY_C + #define BN_MP_RSHD_C + #define BN_MP_MUL_C + #define BN_S_MP_MUL_HIGH_DIGS_C + #define BN_FAST_S_MP_MUL_HIGH_DIGS_C + #define BN_MP_MOD_2D_C + #define BN_S_MP_MUL_DIGS_C + #define BN_MP_SUB_C + #define BN_MP_CMP_D_C + #define BN_MP_SET_C + #define BN_MP_LSHD_C + #define BN_MP_ADD_C + #define BN_MP_CMP_C + #define BN_S_MP_SUB_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_REDUCE_2K_C) + #define BN_MP_INIT_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_DIV_2D_C + #define BN_MP_MUL_D_C + #define BN_S_MP_ADD_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_REDUCE_2K_L_C) + #define BN_MP_INIT_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_DIV_2D_C + #define BN_MP_MUL_C + #define BN_S_MP_ADD_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_REDUCE_2K_SETUP_C) + #define BN_MP_INIT_C + #define BN_MP_COUNT_BITS_C + #define BN_MP_2EXPT_C + #define BN_MP_CLEAR_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_MP_REDUCE_2K_SETUP_L_C) + #define BN_MP_INIT_C + #define BN_MP_2EXPT_C + #define BN_MP_COUNT_BITS_C + #define BN_S_MP_SUB_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_REDUCE_IS_2K_C) + #define BN_MP_REDUCE_2K_C + #define BN_MP_COUNT_BITS_C + #endif + + #if defined(BN_MP_REDUCE_IS_2K_L_C) + #endif + + #if defined(BN_MP_REDUCE_SETUP_C) + #define BN_MP_2EXPT_C + #define BN_MP_DIV_C + #endif + + #if defined(BN_MP_RSHD_C) + #define BN_MP_ZERO_C + #endif + + #if defined(BN_MP_SET_C) + #define BN_MP_ZERO_C + #endif + + #if defined(BN_MP_SET_INT_C) + #define BN_MP_ZERO_C + #define BN_MP_MUL_2D_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_SET_LONG_C) + #endif + + #if defined(BN_MP_SET_LONG_LONG_C) + #endif + + #if defined(BN_MP_SHRINK_C) + #endif + + #if defined(BN_MP_SIGNED_BIN_SIZE_C) + #define BN_MP_UNSIGNED_BIN_SIZE_C + #endif + + #if defined(BN_MP_SQR_C) + #define BN_MP_TOOM_SQR_C + #define BN_MP_KARATSUBA_SQR_C + #define BN_FAST_S_MP_SQR_C + #define BN_S_MP_SQR_C + #endif + + #if defined(BN_MP_SQRMOD_C) + #define BN_MP_INIT_C + #define BN_MP_SQR_C + #define BN_MP_CLEAR_C + #define BN_MP_MOD_C + #endif + + #if defined(BN_MP_SQRT_C) + #define BN_MP_N_ROOT_C + #define BN_MP_ISZERO_C + #define BN_MP_ZERO_C + #define BN_MP_INIT_COPY_C + #define BN_MP_RSHD_C + #define BN_MP_DIV_C + #define BN_MP_ADD_C + #define BN_MP_DIV_2_C + #define BN_MP_CMP_MAG_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_SQRTMOD_PRIME_C) + #define BN_MP_CMP_D_C + #define BN_MP_ZERO_C + #define BN_MP_JACOBI_C + #define BN_MP_INIT_MULTI_C + #define BN_MP_MOD_D_C + #define BN_MP_ADD_D_C + #define BN_MP_DIV_2_C + #define BN_MP_EXPTMOD_C + #define BN_MP_COPY_C + #define BN_MP_SUB_D_C + #define BN_MP_ISEVEN_C + #define BN_MP_SET_INT_C + #define BN_MP_SQRMOD_C + #define BN_MP_MULMOD_C + #define BN_MP_SET_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_MP_SUB_C) + #define BN_S_MP_ADD_C + #define BN_MP_CMP_MAG_C + #define BN_S_MP_SUB_C + #endif + + #if defined(BN_MP_SUB_D_C) + #define BN_MP_GROW_C + #define BN_MP_ADD_D_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_MP_SUBMOD_C) + #define BN_MP_INIT_C + #define BN_MP_SUB_C + #define BN_MP_CLEAR_C + #define BN_MP_MOD_C + #endif + + #if defined(BN_MP_TO_SIGNED_BIN_C) + #define BN_MP_TO_UNSIGNED_BIN_C + #endif + + #if defined(BN_MP_TO_SIGNED_BIN_N_C) + #define BN_MP_SIGNED_BIN_SIZE_C + #define BN_MP_TO_SIGNED_BIN_C + #endif + + #if defined(BN_MP_TO_UNSIGNED_BIN_C) + #define BN_MP_INIT_COPY_C + #define BN_MP_ISZERO_C + #define BN_MP_DIV_2D_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_TO_UNSIGNED_BIN_N_C) + #define BN_MP_UNSIGNED_BIN_SIZE_C + #define BN_MP_TO_UNSIGNED_BIN_C + #endif + + #if defined(BN_MP_TOOM_MUL_C) + #define BN_MP_INIT_MULTI_C + #define BN_MP_MOD_2D_C + #define BN_MP_COPY_C + #define BN_MP_RSHD_C + #define BN_MP_MUL_C + #define BN_MP_MUL_2_C + #define BN_MP_ADD_C + #define BN_MP_SUB_C + #define BN_MP_DIV_2_C + #define BN_MP_MUL_2D_C + #define BN_MP_MUL_D_C + #define BN_MP_DIV_3_C + #define BN_MP_LSHD_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_MP_TOOM_SQR_C) + #define BN_MP_INIT_MULTI_C + #define BN_MP_MOD_2D_C + #define BN_MP_COPY_C + #define BN_MP_RSHD_C + #define BN_MP_SQR_C + #define BN_MP_MUL_2_C + #define BN_MP_ADD_C + #define BN_MP_SUB_C + #define BN_MP_DIV_2_C + #define BN_MP_MUL_2D_C + #define BN_MP_MUL_D_C + #define BN_MP_DIV_3_C + #define BN_MP_LSHD_C + #define BN_MP_CLEAR_MULTI_C + #endif + + #if defined(BN_MP_TORADIX_C) + #define BN_MP_ISZERO_C + #define BN_MP_INIT_COPY_C + #define BN_MP_DIV_D_C + #define BN_MP_CLEAR_C + #define BN_MP_S_RMAP_C + #endif + + #if defined(BN_MP_TORADIX_N_C) + #define BN_MP_ISZERO_C + #define BN_MP_INIT_COPY_C + #define BN_MP_DIV_D_C + #define BN_MP_CLEAR_C + #define BN_MP_S_RMAP_C + #endif + + #if defined(BN_MP_UNSIGNED_BIN_SIZE_C) + #define BN_MP_COUNT_BITS_C + #endif + + #if defined(BN_MP_XOR_C) + #define BN_MP_INIT_COPY_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_MP_ZERO_C) + #endif + + #if defined(BN_PRIME_TAB_C) + #endif + + #if defined(BN_REVERSE_C) + #endif + + #if defined(BN_S_MP_ADD_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BN_S_MP_EXPTMOD_C) + #define BN_MP_COUNT_BITS_C + #define BN_MP_INIT_C + #define BN_MP_CLEAR_C + #define BN_MP_REDUCE_SETUP_C + #define BN_MP_REDUCE_C + #define BN_MP_REDUCE_2K_SETUP_L_C + #define BN_MP_REDUCE_2K_L_C + #define BN_MP_MOD_C + #define BN_MP_COPY_C + #define BN_MP_SQR_C + #define BN_MP_MUL_C + #define BN_MP_SET_C + #define BN_MP_EXCH_C + #endif + + #if defined(BN_S_MP_MUL_DIGS_C) + #define BN_FAST_S_MP_MUL_DIGS_C + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_S_MP_MUL_HIGH_DIGS_C) + #define BN_FAST_S_MP_MUL_HIGH_DIGS_C + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_S_MP_SQR_C) + #define BN_MP_INIT_SIZE_C + #define BN_MP_CLAMP_C + #define BN_MP_EXCH_C + #define BN_MP_CLEAR_C + #endif + + #if defined(BN_S_MP_SUB_C) + #define BN_MP_GROW_C + #define BN_MP_CLAMP_C + #endif + + #if defined(BNCORE_C) + #endif + + #ifdef LTM3 + #define LTM_LAST + #endif +#else + #define LTM_LAST +#endif +#else + #define LTM_LAST +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* detect 64-bit mode if possible */ +#if defined(__x86_64__) + #if !(defined(MP_32BIT) || defined(MP_16BIT) || defined(MP_8BIT)) + #define MP_64BIT + #endif +#endif + +/* some default configurations. + * + * A "mp_digit" must be able to hold DIGIT_BIT + 1 bits + * A "mp_word" must be able to hold 2*DIGIT_BIT + 1 bits + * + * At the very least a mp_digit must be able to hold 7 bits + * [any size beyond that is ok provided it doesn't overflow the data type] + */ +#ifdef MP_8BIT +typedef uint8_t mp_digit; +typedef uint16_t mp_word; + #define MP_SIZEOF_MP_DIGIT 1 + #ifdef DIGIT_BIT + #error You must not define DIGIT_BIT when using MP_8BIT + #endif +#elif defined(MP_16BIT) +typedef uint16_t mp_digit; +typedef uint32_t mp_word; + #define MP_SIZEOF_MP_DIGIT 2 + #ifdef DIGIT_BIT + #error You must not define DIGIT_BIT when using MP_16BIT + #endif +#elif defined(MP_64BIT) +/* for GCC only on supported platforms */ + #ifndef CRYPT +typedef unsigned long long ulong64; +typedef signed long long long64; + #endif + +typedef uint64_t mp_digit; + #if defined(_WIN32) +typedef unsigned __int128 mp_word; + #elif defined(__GNUC__) +typedef unsigned long mp_word __attribute__ ((mode(TI))); + #else + +/* it seems you have a problem + * but we assume you can somewhere define your own uint128_t */ +typedef uint128_t mp_word; + #endif + + #define DIGIT_BIT 60 +#else +/* this is the default case, 28-bit digits */ + +/* this is to make porting into LibTomCrypt easier :-) */ + #ifndef CRYPT +typedef unsigned long long ulong64; +typedef signed long long long64; + #endif + +typedef uint32_t mp_digit; +typedef uint64_t mp_word; + + #ifdef MP_31BIT +/* this is an extension that uses 31-bit digits */ + #define DIGIT_BIT 31 + #else +/* default case is 28-bit digits, defines MP_28BIT as a handy macro to test */ + #define DIGIT_BIT 28 + #define MP_28BIT + #endif +#endif + +/* otherwise the bits per digit is calculated automatically from the size of a mp_digit */ +#ifndef DIGIT_BIT + #define DIGIT_BIT (((CHAR_BIT * MP_SIZEOF_MP_DIGIT) - 1)) /* bits per digit */ +typedef uint_least32_t mp_min_u32; +#else +typedef mp_digit mp_min_u32; +#endif + +/* platforms that can use a better rand function */ +#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) + #define MP_USE_ALT_RAND 1 +#endif + +/* use arc4random on platforms that support it */ +#ifdef MP_USE_ALT_RAND + #define MP_GEN_RANDOM() arc4random() +#else + #define MP_GEN_RANDOM() rand() +#endif + +#define MP_DIGIT_BIT DIGIT_BIT +#define MP_MASK ((((mp_digit)1) << ((mp_digit)DIGIT_BIT)) - ((mp_digit)1)) +#define MP_DIGIT_MAX MP_MASK + +/* equalities */ +#define MP_LT -1 /* less than */ +#define MP_EQ 0 /* equal to */ +#define MP_GT 1 /* greater than */ + +#define MP_ZPOS 0 /* positive integer */ +#define MP_NEG 1 /* negative */ + +#define MP_OKAY 0 /* ok result */ +#define MP_MEM -2 /* out of mem */ +#define MP_VAL -3 /* invalid input */ +#define MP_RANGE MP_VAL + +#define MP_YES 1 /* yes response */ +#define MP_NO 0 /* no response */ + +/* Primality generation flags */ +#define LTM_PRIME_BBS 0x0001 /* BBS style prime */ +#define LTM_PRIME_SAFE 0x0002 /* Safe prime (p-1)/2 == prime */ +#define LTM_PRIME_2MSB_ON 0x0008 /* force 2nd MSB to 1 */ + +typedef int mp_err; + +/* you'll have to tune these... */ +extern int KARATSUBA_MUL_CUTOFF, + KARATSUBA_SQR_CUTOFF, + TOOM_MUL_CUTOFF, + TOOM_SQR_CUTOFF; + +/* define this to use lower memory usage routines (exptmods mostly) */ +/* #define MP_LOW_MEM */ + +/* default precision */ +#ifndef MP_PREC + #ifndef MP_LOW_MEM + #define MP_PREC 32 /* default digits of precision */ + #else + #define MP_PREC 8 /* default digits of precision */ + #endif +#endif + +/* size of comba arrays, should be at least 2 * 2**(BITS_PER_WORD - BITS_PER_DIGIT*2) */ +#define MP_WARRAY (1 << (((sizeof(mp_word) * CHAR_BIT) - (2 * DIGIT_BIT)) + 1)) + +/* the infamous mp_int structure */ +typedef struct { + int used, alloc, sign; + mp_digit *dp; +} mp_int; + +/* callback for mp_prime_random, should fill dst with random bytes and return how many read [upto len] */ +typedef int ltm_prime_callback (unsigned char *dst, int len, void *dat); + + +#define USED(m) ((m)->used) +#define DIGIT(m, k) ((m)->dp[(k)]) +#define SIGN(m) ((m)->sign) + +/* error code to char* string */ +const char *mp_error_to_string(int code); + +/* ---> init and deinit bignum functions <--- */ +/* init a bignum */ +int mp_init(mp_int *a); + +/* free a bignum */ +void mp_clear(mp_int *a); + +/* init a null terminated series of arguments */ +int mp_init_multi(mp_int *mp, ...); + +/* clear a null terminated series of arguments */ +void mp_clear_multi(mp_int *mp, ...); + +/* exchange two ints */ +void mp_exch(mp_int *a, mp_int *b); + +/* shrink ram required for a bignum */ +int mp_shrink(mp_int *a); + +/* grow an int to a given size */ +int mp_grow(mp_int *a, int size); + +/* init to a given number of digits */ +int mp_init_size(mp_int *a, int size); + +/* ---> Basic Manipulations <--- */ +#define mp_iszero(a) (((a)->used == 0) ? MP_YES : MP_NO) +#define mp_iseven(a) ((((a)->used > 0) && (((a)->dp[0] & 1u) == 0u)) ? MP_YES : MP_NO) +#define mp_isodd(a) ((((a)->used > 0) && (((a)->dp[0] & 1u) == 1u)) ? MP_YES : MP_NO) +#define mp_isneg(a) (((a)->sign != MP_ZPOS) ? MP_YES : MP_NO) + +/* set to zero */ +void mp_zero(mp_int *a); + +/* set to a digit */ +void mp_set(mp_int *a, mp_digit b); + +/* set a 32-bit const */ +int mp_set_int(mp_int *a, unsigned long b); + +/* set a platform dependent unsigned long value */ +int mp_set_long(mp_int *a, unsigned long b); + +/* set a platform dependent unsigned long long value */ +int mp_set_long_long(mp_int *a, unsigned long long b); + +/* get a 32-bit value */ +unsigned long mp_get_int(mp_int *a); + +/* get a platform dependent unsigned long value */ +unsigned long mp_get_long(mp_int *a); + +/* get a platform dependent unsigned long long value */ +unsigned long long mp_get_long_long(mp_int *a); + +/* initialize and set a digit */ +int mp_init_set(mp_int *a, mp_digit b); + +/* initialize and set 32-bit value */ +int mp_init_set_int(mp_int *a, unsigned long b); + +/* copy, b = a */ +int mp_copy(mp_int *a, mp_int *b); + +/* inits and copies, a = b */ +int mp_init_copy(mp_int *a, mp_int *b); + +/* trim unused digits */ +void mp_clamp(mp_int *a); + +/* import binary data */ +int mp_import(mp_int *rop, size_t count, int order, size_t size, int endian, size_t nails, const void *op); + +/* export binary data */ +int mp_export(void *rop, size_t *countp, int order, size_t size, int endian, size_t nails, mp_int *op); + +/* ---> digit manipulation <--- */ + +/* right shift by "b" digits */ +void mp_rshd(mp_int *a, int b); + +/* left shift by "b" digits */ +int mp_lshd(mp_int *a, int b); + +/* c = a / 2**b, implemented as c = a >> b */ +int mp_div_2d(mp_int *a, int b, mp_int *c, mp_int *d); + +/* b = a/2 */ +int mp_div_2(mp_int *a, mp_int *b); + +/* c = a * 2**b, implemented as c = a << b */ +int mp_mul_2d(mp_int *a, int b, mp_int *c); + +/* b = a*2 */ +int mp_mul_2(mp_int *a, mp_int *b); + +/* c = a mod 2**b */ +int mp_mod_2d(mp_int *a, int b, mp_int *c); + +/* computes a = 2**b */ +int mp_2expt(mp_int *a, int b); + +/* Counts the number of lsbs which are zero before the first zero bit */ +int mp_cnt_lsb(mp_int *a); + +/* I Love Earth! */ + +/* makes a pseudo-random int of a given size */ +int mp_rand(mp_int *a, int digits); + +/* ---> binary operations <--- */ +/* c = a XOR b */ +int mp_xor(mp_int *a, mp_int *b, mp_int *c); + +/* c = a OR b */ +int mp_or(mp_int *a, mp_int *b, mp_int *c); + +/* c = a AND b */ +int mp_and(mp_int *a, mp_int *b, mp_int *c); + +/* ---> Basic arithmetic <--- */ + +/* b = -a */ +int mp_neg(mp_int *a, mp_int *b); + +/* b = |a| */ +int mp_abs(mp_int *a, mp_int *b); + +/* compare a to b */ +int mp_cmp(mp_int *a, mp_int *b); + +/* compare |a| to |b| */ +int mp_cmp_mag(mp_int *a, mp_int *b); + +/* c = a + b */ +int mp_add(mp_int *a, mp_int *b, mp_int *c); + +/* c = a - b */ +int mp_sub(mp_int *a, mp_int *b, mp_int *c); + +/* c = a * b */ +int mp_mul(mp_int *a, mp_int *b, mp_int *c); + +/* b = a*a */ +int mp_sqr(mp_int *a, mp_int *b); + +/* a/b => cb + d == a */ +int mp_div(mp_int *a, mp_int *b, mp_int *c, mp_int *d); + +/* c = a mod b, 0 <= c < b */ +int mp_mod(mp_int *a, mp_int *b, mp_int *c); + +/* ---> single digit functions <--- */ + +/* compare against a single digit */ +int mp_cmp_d(mp_int *a, mp_digit b); + +/* c = a + b */ +int mp_add_d(mp_int *a, mp_digit b, mp_int *c); + +/* c = a - b */ +int mp_sub_d(mp_int *a, mp_digit b, mp_int *c); + +/* c = a * b */ +int mp_mul_d(mp_int *a, mp_digit b, mp_int *c); + +/* a/b => cb + d == a */ +int mp_div_d(mp_int *a, mp_digit b, mp_int *c, mp_digit *d); + +/* a/3 => 3c + d == a */ +int mp_div_3(mp_int *a, mp_int *c, mp_digit *d); + +/* c = a**b */ +int mp_expt_d(mp_int *a, mp_digit b, mp_int *c); +int mp_expt_d_ex(mp_int *a, mp_digit b, mp_int *c, int fast); + +/* c = a mod b, 0 <= c < b */ +int mp_mod_d(mp_int *a, mp_digit b, mp_digit *c); + +/* ---> number theory <--- */ + +/* d = a + b (mod c) */ +int mp_addmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d); + +/* d = a - b (mod c) */ +int mp_submod(mp_int *a, mp_int *b, mp_int *c, mp_int *d); + +/* d = a * b (mod c) */ +int mp_mulmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d); + +/* c = a * a (mod b) */ +int mp_sqrmod(mp_int *a, mp_int *b, mp_int *c); + +/* c = 1/a (mod b) */ +int mp_invmod(mp_int *a, mp_int *b, mp_int *c); + +/* c = (a, b) */ +int mp_gcd(mp_int *a, mp_int *b, mp_int *c); + +/* produces value such that U1*a + U2*b = U3 */ +int mp_exteuclid(mp_int *a, mp_int *b, mp_int *U1, mp_int *U2, mp_int *U3); + +/* c = [a, b] or (a*b)/(a, b) */ +int mp_lcm(mp_int *a, mp_int *b, mp_int *c); + +/* finds one of the b'th root of a, such that |c|**b <= |a| + * + * returns error if a < 0 and b is even + */ +int mp_n_root(mp_int *a, mp_digit b, mp_int *c); +int mp_n_root_ex(mp_int *a, mp_digit b, mp_int *c, int fast); + +/* special sqrt algo */ +int mp_sqrt(mp_int *arg, mp_int *ret); + +/* special sqrt (mod prime) */ +int mp_sqrtmod_prime(mp_int *arg, mp_int *prime, mp_int *ret); + +/* is number a square? */ +int mp_is_square(mp_int *arg, int *ret); + +/* computes the jacobi c = (a | n) (or Legendre if b is prime) */ +int mp_jacobi(mp_int *a, mp_int *n, int *c); + +/* used to setup the Barrett reduction for a given modulus b */ +int mp_reduce_setup(mp_int *a, mp_int *b); + +/* Barrett Reduction, computes a (mod b) with a precomputed value c + * + * Assumes that 0 < a <= b*b, note if 0 > a > -(b*b) then you can merely + * compute the reduction as -1 * mp_reduce(mp_abs(a)) [pseudo code]. + */ +int mp_reduce(mp_int *a, mp_int *b, mp_int *c); + +/* setups the montgomery reduction */ +int mp_montgomery_setup(mp_int *a, mp_digit *mp); + +/* computes a = B**n mod b without division or multiplication useful for + * normalizing numbers in a Montgomery system. + */ +int mp_montgomery_calc_normalization(mp_int *a, mp_int *b); + +/* computes x/R == x (mod N) via Montgomery Reduction */ +int mp_montgomery_reduce(mp_int *a, mp_int *m, mp_digit mp); + +/* returns 1 if a is a valid DR modulus */ +int mp_dr_is_modulus(mp_int *a); + +/* sets the value of "d" required for mp_dr_reduce */ +void mp_dr_setup(mp_int *a, mp_digit *d); + +/* reduces a modulo b using the Diminished Radix method */ +int mp_dr_reduce(mp_int *a, mp_int *b, mp_digit mp); + +/* returns true if a can be reduced with mp_reduce_2k */ +int mp_reduce_is_2k(mp_int *a); + +/* determines k value for 2k reduction */ +int mp_reduce_2k_setup(mp_int *a, mp_digit *d); + +/* reduces a modulo b where b is of the form 2**p - k [0 <= a] */ +int mp_reduce_2k(mp_int *a, mp_int *n, mp_digit d); + +/* returns true if a can be reduced with mp_reduce_2k_l */ +int mp_reduce_is_2k_l(mp_int *a); + +/* determines k value for 2k reduction */ +int mp_reduce_2k_setup_l(mp_int *a, mp_int *d); + +/* reduces a modulo b where b is of the form 2**p - k [0 <= a] */ +int mp_reduce_2k_l(mp_int *a, mp_int *n, mp_int *d); + +/* d = a**b (mod c) */ +int mp_exptmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d); + +/* ---> Primes <--- */ + +/* number of primes */ +#ifdef MP_8BIT + #define PRIME_SIZE 31 +#else + #define PRIME_SIZE 256 +#endif + +/* table of first PRIME_SIZE primes */ +extern const mp_digit ltm_prime_tab[PRIME_SIZE]; + +/* result=1 if a is divisible by one of the first PRIME_SIZE primes */ +int mp_prime_is_divisible(mp_int *a, int *result); + +/* performs one Fermat test of "a" using base "b". + * Sets result to 0 if composite or 1 if probable prime + */ +int mp_prime_fermat(mp_int *a, mp_int *b, int *result); + +/* performs one Miller-Rabin test of "a" using base "b". + * Sets result to 0 if composite or 1 if probable prime + */ +int mp_prime_miller_rabin(mp_int *a, mp_int *b, int *result); + +/* This gives [for a given bit size] the number of trials required + * such that Miller-Rabin gives a prob of failure lower than 2^-96 + */ +int mp_prime_rabin_miller_trials(int size); + +/* performs t rounds of Miller-Rabin on "a" using the first + * t prime bases. Also performs an initial sieve of trial + * division. Determines if "a" is prime with probability + * of error no more than (1/4)**t. + * + * Sets result to 1 if probably prime, 0 otherwise + */ +int mp_prime_is_prime(mp_int *a, int t, int *result); + +/* finds the next prime after the number "a" using "t" trials + * of Miller-Rabin. + * + * bbs_style = 1 means the prime must be congruent to 3 mod 4 + */ +int mp_prime_next_prime(mp_int *a, int t, int bbs_style); + +/* makes a truly random prime of a given size (bytes), + * call with bbs = 1 if you want it to be congruent to 3 mod 4 + * + * You have to supply a callback which fills in a buffer with random bytes. "dat" is a parameter you can + * have passed to the callback (e.g. a state or something). This function doesn't use "dat" itself + * so it can be NULL + * + * The prime generated will be larger than 2^(8*size). + */ +#define mp_prime_random(a, t, size, bbs, cb, dat) mp_prime_random_ex(a, t, ((size) * 8) + 1, (bbs == 1) ? LTM_PRIME_BBS : 0, cb, dat) + +/* makes a truly random prime of a given size (bits), + * + * Flags are as follows: + * + * LTM_PRIME_BBS - make prime congruent to 3 mod 4 + * LTM_PRIME_SAFE - make sure (p-1)/2 is prime as well (implies LTM_PRIME_BBS) + * LTM_PRIME_2MSB_ON - make the 2nd highest bit one + * + * You have to supply a callback which fills in a buffer with random bytes. "dat" is a parameter you can + * have passed to the callback (e.g. a state or something). This function doesn't use "dat" itself + * so it can be NULL + * + */ +int mp_prime_random_ex(mp_int *a, int t, int size, int flags, ltm_prime_callback cb, void *dat); + +/* ---> radix conversion <--- */ +int mp_count_bits(mp_int *a); + +int mp_unsigned_bin_size(mp_int *a); +int mp_read_unsigned_bin(mp_int *a, const unsigned char *b, int c); +int mp_to_unsigned_bin(mp_int *a, unsigned char *b); +int mp_to_unsigned_bin_n(mp_int *a, unsigned char *b, unsigned long *outlen); + +int mp_signed_bin_size(mp_int *a); +int mp_read_signed_bin(mp_int *a, const unsigned char *b, int c); +int mp_to_signed_bin(mp_int *a, unsigned char *b); +int mp_to_signed_bin_n(mp_int *a, unsigned char *b, unsigned long *outlen); + +int mp_read_radix(mp_int *a, const char *str, int radix); +int mp_toradix(mp_int *a, char *str, int radix); +int mp_toradix_n(mp_int *a, char *str, int radix, int maxlen); +int mp_radix_size(mp_int *a, int radix, int *size); + +#ifndef LTM_NO_FILE +int mp_fread(mp_int *a, int radix, FILE *stream); +int mp_fwrite(mp_int *a, int radix, FILE *stream); +#endif + +#define mp_read_raw(mp, str, len) mp_read_signed_bin((mp), (str), (len)) +#define mp_raw_size(mp) mp_signed_bin_size(mp) +#define mp_toraw(mp, str) mp_to_signed_bin((mp), (str)) +#define mp_read_mag(mp, str, len) mp_read_unsigned_bin((mp), (str), (len)) +#define mp_mag_size(mp) mp_unsigned_bin_size(mp) +#define mp_tomag(mp, str) mp_to_unsigned_bin((mp), (str)) + +#define mp_tobinary(M, S) mp_toradix((M), (S), 2) +#define mp_tooctal(M, S) mp_toradix((M), (S), 8) +#define mp_todecimal(M, S) mp_toradix((M), (S), 10) +#define mp_tohex(M, S) mp_toradix((M), (S), 16) + +#ifdef __cplusplus +} +#endif +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://math.libtomcrypt.com + */ +#ifndef TOMMATH_PRIV_H_ +#define TOMMATH_PRIV_H_ + +#include <ctype.h> + +#define MIN(x, y) (((x) < (y)) ? (x) : (y)) + +#define MAX(x, y) (((x) > (y)) ? (x) : (y)) + +#ifdef __cplusplus +extern "C" { +/* C++ compilers don't like assigning void * to mp_digit * */ + #define OPT_CAST(x) (x *) + +#else + +/* C on the other hand doesn't care */ + #define OPT_CAST(x) +#endif + +/* define heap macros */ +#ifndef XMALLOC +/* default to libc stuff */ + #define XMALLOC malloc + #define XFREE free + #define XREALLOC realloc + #define XCALLOC calloc +#else +/* prototypes for our heap functions */ +extern void *XMALLOC(size_t n); +extern void *XREALLOC(void *p, size_t n); +extern void *XCALLOC(size_t n, size_t s); +extern void XFREE(void *p); +#endif + +/* lowlevel functions, do not call! */ +int s_mp_add(mp_int *a, mp_int *b, mp_int *c); +int s_mp_sub(mp_int *a, mp_int *b, mp_int *c); + +#define s_mp_mul(a, b, c) s_mp_mul_digs(a, b, c, (a)->used + (b)->used + 1) +int fast_s_mp_mul_digs(mp_int *a, mp_int *b, mp_int *c, int digs); +int s_mp_mul_digs(mp_int *a, mp_int *b, mp_int *c, int digs); +int fast_s_mp_mul_high_digs(mp_int *a, mp_int *b, mp_int *c, int digs); +int s_mp_mul_high_digs(mp_int *a, mp_int *b, mp_int *c, int digs); +int fast_s_mp_sqr(mp_int *a, mp_int *b); +int s_mp_sqr(mp_int *a, mp_int *b); +int mp_karatsuba_mul(mp_int *a, mp_int *b, mp_int *c); +int mp_toom_mul(mp_int *a, mp_int *b, mp_int *c); +int mp_karatsuba_sqr(mp_int *a, mp_int *b); +int mp_toom_sqr(mp_int *a, mp_int *b); +int fast_mp_invmod(mp_int *a, mp_int *b, mp_int *c); +int mp_invmod_slow(mp_int *a, mp_int *b, mp_int *c); +int fast_mp_montgomery_reduce(mp_int *x, mp_int *n, mp_digit rho); +int mp_exptmod_fast(mp_int *G, mp_int *X, mp_int *P, mp_int *Y, int redmode); +int s_mp_exptmod(mp_int *G, mp_int *X, mp_int *P, mp_int *Y, int redmode); +void bn_reverse(unsigned char *s, int len); + +extern const char *mp_s_rmap; + +/* Fancy macro to set an MPI from another type. + * There are several things assumed: + * x is the counter and unsigned + * a is the pointer to the MPI + * b is the original value that should be set in the MPI. + */ +#define MP_SET_XLONG(func_name, type) \ + int func_name(mp_int * a, type b) \ + { \ + unsigned int x; \ + int res; \ + \ + mp_zero(a); \ + \ + /* set four bits at a time */ \ + for (x = 0; x < (sizeof(type) * 2u); x++) { \ + /* shift the number up four bits */ \ + if ((res = mp_mul_2d(a, 4, a)) != MP_OKAY) { \ + return res; \ + } \ + \ + /* OR in the top four bits of the source */ \ + a->dp[0] |= (b >> ((sizeof(type) * 8u) - 4u)) & 15u; \ + \ + /* shift the source up to the next four bits */ \ + b <<= 4; \ + \ + /* ensure that digits are not clamped off */ \ + a->used += 1; \ + } \ + mp_clamp(a); \ + return MP_OKAY; \ + } + +#ifdef __cplusplus +} +#endif +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + +#define BN_FAST_MP_INVMOD_C +#ifdef BN_FAST_MP_INVMOD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* computes the modular inverse via binary extended euclidean algorithm, + * that is c = 1/a mod b + * + * Based on slow invmod except this is optimized for the case where b is + * odd as per HAC Note 14.64 on pp. 610 + */ +int fast_mp_invmod(mp_int *a, mp_int *b, mp_int *c) { + mp_int x, y, u, v, B, D; + int res, neg; + + /* 2. [modified] b must be odd */ + if (mp_iseven(b) == MP_YES) { + return MP_VAL; + } + + /* init all our temps */ + if ((res = mp_init_multi(&x, &y, &u, &v, &B, &D, NULL)) != MP_OKAY) { + return res; + } + + /* x == modulus, y == value to invert */ + if ((res = mp_copy(b, &x)) != MP_OKAY) { + goto LBL_ERR; + } + + /* we need y = |a| */ + if ((res = mp_mod(a, b, &y)) != MP_OKAY) { + goto LBL_ERR; + } + + /* 3. u=x, v=y, A=1, B=0, C=0,D=1 */ + if ((res = mp_copy(&x, &u)) != MP_OKAY) { + goto LBL_ERR; + } + if ((res = mp_copy(&y, &v)) != MP_OKAY) { + goto LBL_ERR; + } + mp_set(&D, 1); + +top: + /* 4. while u is even do */ + while (mp_iseven(&u) == MP_YES) { + /* 4.1 u = u/2 */ + if ((res = mp_div_2(&u, &u)) != MP_OKAY) { + goto LBL_ERR; + } + /* 4.2 if B is odd then */ + if (mp_isodd(&B) == MP_YES) { + if ((res = mp_sub(&B, &x, &B)) != MP_OKAY) { + goto LBL_ERR; + } + } + /* B = B/2 */ + if ((res = mp_div_2(&B, &B)) != MP_OKAY) { + goto LBL_ERR; + } + } + + /* 5. while v is even do */ + while (mp_iseven(&v) == MP_YES) { + /* 5.1 v = v/2 */ + if ((res = mp_div_2(&v, &v)) != MP_OKAY) { + goto LBL_ERR; + } + /* 5.2 if D is odd then */ + if (mp_isodd(&D) == MP_YES) { + /* D = (D-x)/2 */ + if ((res = mp_sub(&D, &x, &D)) != MP_OKAY) { + goto LBL_ERR; + } + } + /* D = D/2 */ + if ((res = mp_div_2(&D, &D)) != MP_OKAY) { + goto LBL_ERR; + } + } + + /* 6. if u >= v then */ + if (mp_cmp(&u, &v) != MP_LT) { + /* u = u - v, B = B - D */ + if ((res = mp_sub(&u, &v, &u)) != MP_OKAY) { + goto LBL_ERR; + } + + if ((res = mp_sub(&B, &D, &B)) != MP_OKAY) { + goto LBL_ERR; + } + } else { + /* v - v - u, D = D - B */ + if ((res = mp_sub(&v, &u, &v)) != MP_OKAY) { + goto LBL_ERR; + } + + if ((res = mp_sub(&D, &B, &D)) != MP_OKAY) { + goto LBL_ERR; + } + } + + /* if not zero goto step 4 */ + if (mp_iszero(&u) == MP_NO) { + goto top; + } + + /* now a = C, b = D, gcd == g*v */ + + /* if v != 1 then there is no inverse */ + if (mp_cmp_d(&v, 1) != MP_EQ) { + res = MP_VAL; + goto LBL_ERR; + } + + /* b is now the inverse */ + neg = a->sign; + while (D.sign == MP_NEG) { + if ((res = mp_add(&D, b, &D)) != MP_OKAY) { + goto LBL_ERR; + } + } + mp_exch(&D, c); + c->sign = neg; + res = MP_OKAY; + +LBL_ERR: mp_clear_multi(&x, &y, &u, &v, &B, &D, NULL); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_FAST_MP_MONTGOMERY_REDUCE_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* computes xR**-1 == x (mod N) via Montgomery Reduction + * + * This is an optimized implementation of montgomery_reduce + * which uses the comba method to quickly calculate the columns of the + * reduction. + * + * Based on Algorithm 14.32 on pp.601 of HAC. + */ +int fast_mp_montgomery_reduce(mp_int *x, mp_int *n, mp_digit rho) { + int ix, res, olduse; + mp_word W[MP_WARRAY]; + + /* get old used count */ + olduse = x->used; + + /* grow a as required */ + if (x->alloc < (n->used + 1)) { + if ((res = mp_grow(x, n->used + 1)) != MP_OKAY) { + return res; + } + } + + /* first we have to get the digits of the input into + * an array of double precision words W[...] + */ + { + mp_word *_W; + mp_digit *tmpx; + + /* alias for the W[] array */ + _W = W; + + /* alias for the digits of x*/ + tmpx = x->dp; + + /* copy the digits of a into W[0..a->used-1] */ + for (ix = 0; ix < x->used; ix++) { + *_W++ = *tmpx++; + } + + /* zero the high words of W[a->used..m->used*2] */ + for ( ; ix < ((n->used * 2) + 1); ix++) { + *_W++ = 0; + } + } + + /* now we proceed to zero successive digits + * from the least significant upwards + */ + for (ix = 0; ix < n->used; ix++) { + /* mu = ai * m' mod b + * + * We avoid a double precision multiplication (which isn't required) + * by casting the value down to a mp_digit. Note this requires + * that W[ix-1] have the carry cleared (see after the inner loop) + */ + mp_digit mu; + mu = (mp_digit)(((W[ix] & MP_MASK) * rho) & MP_MASK); + + /* a = a + mu * m * b**i + * + * This is computed in place and on the fly. The multiplication + * by b**i is handled by offseting which columns the results + * are added to. + * + * Note the comba method normally doesn't handle carries in the + * inner loop In this case we fix the carry from the previous + * column since the Montgomery reduction requires digits of the + * result (so far) [see above] to work. This is + * handled by fixing up one carry after the inner loop. The + * carry fixups are done in order so after these loops the + * first m->used words of W[] have the carries fixed + */ + { + int iy; + mp_digit *tmpn; + mp_word *_W; + + /* alias for the digits of the modulus */ + tmpn = n->dp; + + /* Alias for the columns set by an offset of ix */ + _W = W + ix; + + /* inner loop */ + for (iy = 0; iy < n->used; iy++) { + *_W++ += ((mp_word)mu) * ((mp_word) * tmpn++); + } + } + + /* now fix carry for next digit, W[ix+1] */ + W[ix + 1] += W[ix] >> ((mp_word)DIGIT_BIT); + } + + /* now we have to propagate the carries and + * shift the words downward [all those least + * significant digits we zeroed]. + */ + { + mp_digit *tmpx; + mp_word *_W, *_W1; + + /* nox fix rest of carries */ + + /* alias for current word */ + _W1 = W + ix; + + /* alias for next word, where the carry goes */ + _W = W + ++ix; + + for ( ; ix <= ((n->used * 2) + 1); ix++) { + *_W++ += *_W1++ >> ((mp_word)DIGIT_BIT); + } + + /* copy out, A = A/b**n + * + * The result is A/b**n but instead of converting from an + * array of mp_word to mp_digit than calling mp_rshd + * we just copy them in the right order + */ + + /* alias for destination word */ + tmpx = x->dp; + + /* alias for shifted double precision result */ + _W = W + n->used; + + for (ix = 0; ix < (n->used + 1); ix++) { + *tmpx++ = (mp_digit)(*_W++ & ((mp_word)MP_MASK)); + } + + /* zero oldused digits, if the input a was larger than + * m->used+1 we'll have to clear the digits + */ + for ( ; ix < olduse; ix++) { + *tmpx++ = 0; + } + } + + /* set the max used and clamp */ + x->used = n->used + 1; + mp_clamp(x); + + /* if A >= m then A = A - m */ + if (mp_cmp_mag(x, n) != MP_LT) { + return s_mp_sub(x, n, x); + } + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_FAST_S_MP_MUL_DIGS_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* Fast (comba) multiplier + * + * This is the fast column-array [comba] multiplier. It is + * designed to compute the columns of the product first + * then handle the carries afterwards. This has the effect + * of making the nested loops that compute the columns very + * simple and schedulable on super-scalar processors. + * + * This has been modified to produce a variable number of + * digits of output so if say only a half-product is required + * you don't have to compute the upper half (a feature + * required for fast Barrett reduction). + * + * Based on Algorithm 14.12 on pp.595 of HAC. + * + */ +int fast_s_mp_mul_digs(mp_int *a, mp_int *b, mp_int *c, int digs) { + int olduse, res, pa, ix, iz; + mp_digit W[MP_WARRAY]; + mp_word _W; + + /* grow the destination as required */ + if (c->alloc < digs) { + if ((res = mp_grow(c, digs)) != MP_OKAY) { + return res; + } + } + + /* number of output digits to produce */ + pa = MIN(digs, a->used + b->used); + + /* clear the carry */ + _W = 0; + for (ix = 0; ix < pa; ix++) { + int tx, ty; + int iy; + mp_digit *tmpx, *tmpy; + + /* get offsets into the two bignums */ + ty = MIN(b->used - 1, ix); + tx = ix - ty; + + /* setup temp aliases */ + tmpx = a->dp + tx; + tmpy = b->dp + ty; + + /* this is the number of times the loop will iterrate, essentially + while (tx++ < a->used && ty-- >= 0) { ... } + */ + iy = MIN(a->used - tx, ty + 1); + + /* execute loop */ + for (iz = 0; iz < iy; ++iz) { + _W += ((mp_word) * tmpx++) * ((mp_word) * tmpy--); + } + + /* store term */ + W[ix] = ((mp_digit)_W) & MP_MASK; + + /* make next carry */ + _W = _W >> ((mp_word)DIGIT_BIT); + } + + /* setup dest */ + olduse = c->used; + c->used = pa; + + { + mp_digit *tmpc; + tmpc = c->dp; + for (ix = 0; ix < (pa + 1); ix++) { + /* now extract the previous digit [below the carry] */ + *tmpc++ = W[ix]; + } + + /* clear unused digits [that existed in the old copy of c] */ + for ( ; ix < olduse; ix++) { + *tmpc++ = 0; + } + } + mp_clamp(c); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_FAST_S_MP_MUL_HIGH_DIGS_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* this is a modified version of fast_s_mul_digs that only produces + * output digits *above* digs. See the comments for fast_s_mul_digs + * to see how it works. + * + * This is used in the Barrett reduction since for one of the multiplications + * only the higher digits were needed. This essentially halves the work. + * + * Based on Algorithm 14.12 on pp.595 of HAC. + */ +int fast_s_mp_mul_high_digs(mp_int *a, mp_int *b, mp_int *c, int digs) { + int olduse, res, pa, ix, iz; + mp_digit W[MP_WARRAY]; + mp_word _W; + + /* grow the destination as required */ + pa = a->used + b->used; + if (c->alloc < pa) { + if ((res = mp_grow(c, pa)) != MP_OKAY) { + return res; + } + } + + /* number of output digits to produce */ + pa = a->used + b->used; + _W = 0; + for (ix = digs; ix < pa; ix++) { + int tx, ty, iy; + mp_digit *tmpx, *tmpy; + + /* get offsets into the two bignums */ + ty = MIN(b->used - 1, ix); + tx = ix - ty; + + /* setup temp aliases */ + tmpx = a->dp + tx; + tmpy = b->dp + ty; + + /* this is the number of times the loop will iterrate, essentially its + while (tx++ < a->used && ty-- >= 0) { ... } + */ + iy = MIN(a->used - tx, ty + 1); + + /* execute loop */ + for (iz = 0; iz < iy; iz++) { + _W += ((mp_word) * tmpx++) * ((mp_word) * tmpy--); + } + + /* store term */ + W[ix] = ((mp_digit)_W) & MP_MASK; + + /* make next carry */ + _W = _W >> ((mp_word)DIGIT_BIT); + } + + /* setup dest */ + olduse = c->used; + c->used = pa; + + { + mp_digit *tmpc; + + tmpc = c->dp + digs; + for (ix = digs; ix < pa; ix++) { + /* now extract the previous digit [below the carry] */ + *tmpc++ = W[ix]; + } + + /* clear unused digits [that existed in the old copy of c] */ + for ( ; ix < olduse; ix++) { + *tmpc++ = 0; + } + } + mp_clamp(c); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_FAST_S_MP_SQR_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* the jist of squaring... + * you do like mult except the offset of the tmpx [one that + * starts closer to zero] can't equal the offset of tmpy. + * So basically you set up iy like before then you min it with + * (ty-tx) so that it never happens. You double all those + * you add in the inner loop + + After that loop you do the squares and add them in. + */ + +int fast_s_mp_sqr(mp_int *a, mp_int *b) { + int olduse, res, pa, ix, iz; + mp_digit W[MP_WARRAY], *tmpx; + mp_word W1; + + /* grow the destination as required */ + pa = a->used + a->used; + if (b->alloc < pa) { + if ((res = mp_grow(b, pa)) != MP_OKAY) { + return res; + } + } + + /* number of output digits to produce */ + W1 = 0; + for (ix = 0; ix < pa; ix++) { + int tx, ty, iy; + mp_word _W; + mp_digit *tmpy; + + /* clear counter */ + _W = 0; + + /* get offsets into the two bignums */ + ty = MIN(a->used - 1, ix); + tx = ix - ty; + + /* setup temp aliases */ + tmpx = a->dp + tx; + tmpy = a->dp + ty; + + /* this is the number of times the loop will iterrate, essentially + while (tx++ < a->used && ty-- >= 0) { ... } + */ + iy = MIN(a->used - tx, ty + 1); + + /* now for squaring tx can never equal ty + * we halve the distance since they approach at a rate of 2x + * and we have to round because odd cases need to be executed + */ + iy = MIN(iy, ((ty - tx) + 1) >> 1); + + /* execute loop */ + for (iz = 0; iz < iy; iz++) { + _W += ((mp_word) * tmpx++) * ((mp_word) * tmpy--); + } + + /* double the inner product and add carry */ + _W = _W + _W + W1; + + /* even columns have the square term in them */ + if ((ix & 1) == 0) { + _W += ((mp_word)a->dp[ix >> 1]) * ((mp_word)a->dp[ix >> 1]); + } + + /* store it */ + W[ix] = (mp_digit)(_W & MP_MASK); + + /* make next carry */ + W1 = _W >> ((mp_word)DIGIT_BIT); + } + + /* setup dest */ + olduse = b->used; + b->used = a->used + a->used; + + { + mp_digit *tmpb; + tmpb = b->dp; + for (ix = 0; ix < pa; ix++) { + *tmpb++ = W[ix] & MP_MASK; + } + + /* clear unused digits [that existed in the old copy of c] */ + for ( ; ix < olduse; ix++) { + *tmpb++ = 0; + } + } + mp_clamp(b); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_2EXPT_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* computes a = 2**b + * + * Simple algorithm which zeroes the int, grows it then just sets one bit + * as required. + */ +int +mp_2expt(mp_int *a, int b) { + int res; + + /* zero a as per default */ + mp_zero(a); + + /* grow a to accomodate the single bit */ + if ((res = mp_grow(a, (b / DIGIT_BIT) + 1)) != MP_OKAY) { + return res; + } + + /* set the used count of where the bit will go */ + a->used = (b / DIGIT_BIT) + 1; + + /* put the single bit in its place */ + a->dp[b / DIGIT_BIT] = ((mp_digit)1) << (b % DIGIT_BIT); + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_ABS_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* b = |a| + * + * Simple function copies the input and fixes the sign to positive + */ +int +mp_abs(mp_int *a, mp_int *b) { + int res; + + /* copy a to b */ + if (a != b) { + if ((res = mp_copy(a, b)) != MP_OKAY) { + return res; + } + } + + /* force the sign of b to positive */ + b->sign = MP_ZPOS; + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_ADD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* high level addition (handles signs) */ +int mp_add(mp_int *a, mp_int *b, mp_int *c) { + int sa, sb, res; + + /* get sign of both inputs */ + sa = a->sign; + sb = b->sign; + + /* handle two cases, not four */ + if (sa == sb) { + /* both positive or both negative */ + /* add their magnitudes, copy the sign */ + c->sign = sa; + res = s_mp_add(a, b, c); + } else { + /* one positive, the other negative */ + /* subtract the one with the greater magnitude from */ + /* the one of the lesser magnitude. The result gets */ + /* the sign of the one with the greater magnitude. */ + if (mp_cmp_mag(a, b) == MP_LT) { + c->sign = sb; + res = s_mp_sub(b, a, c); + } else { + c->sign = sa; + res = s_mp_sub(a, b, c); + } + } + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_ADD_D_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* single digit addition */ +int +mp_add_d(mp_int *a, mp_digit b, mp_int *c) { + int res, ix, oldused; + mp_digit *tmpa, *tmpc, mu; + + /* grow c as required */ + if (c->alloc < (a->used + 1)) { + if ((res = mp_grow(c, a->used + 1)) != MP_OKAY) { + return res; + } + } + + /* if a is negative and |a| >= b, call c = |a| - b */ + if ((a->sign == MP_NEG) && ((a->used > 1) || (a->dp[0] >= b))) { + /* temporarily fix sign of a */ + a->sign = MP_ZPOS; + + /* c = |a| - b */ + res = mp_sub_d(a, b, c); + + /* fix sign */ + a->sign = c->sign = MP_NEG; + + /* clamp */ + mp_clamp(c); + + return res; + } + + /* old number of used digits in c */ + oldused = c->used; + + /* sign always positive */ + c->sign = MP_ZPOS; + + /* source alias */ + tmpa = a->dp; + + /* destination alias */ + tmpc = c->dp; + + /* if a is positive */ + if (a->sign == MP_ZPOS) { + /* add digit, after this we're propagating + * the carry. + */ + *tmpc = *tmpa++ + b; + mu = *tmpc >> DIGIT_BIT; + *tmpc++ &= MP_MASK; + + /* now handle rest of the digits */ + for (ix = 1; ix < a->used; ix++) { + *tmpc = *tmpa++ + mu; + mu = *tmpc >> DIGIT_BIT; + *tmpc++ &= MP_MASK; + } + /* set final carry */ + ix++; + *tmpc++ = mu; + + /* setup size */ + c->used = a->used + 1; + } else { + /* a was negative and |a| < b */ + c->used = 1; + + /* the result is a single digit */ + if (a->used == 1) { + *tmpc++ = b - a->dp[0]; + } else { + *tmpc++ = b; + } + + /* setup count so the clearing of oldused + * can fall through correctly + */ + ix = 1; + } + + /* now zero to oldused */ + while (ix++ < oldused) { + *tmpc++ = 0; + } + mp_clamp(c); + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_ADDMOD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* d = a + b (mod c) */ +int +mp_addmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d) { + int res; + mp_int t; + + if ((res = mp_init(&t)) != MP_OKAY) { + return res; + } + + if ((res = mp_add(a, b, &t)) != MP_OKAY) { + mp_clear(&t); + return res; + } + res = mp_mod(&t, c, d); + mp_clear(&t); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_AND_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* AND two ints together */ +int +mp_and(mp_int *a, mp_int *b, mp_int *c) { + int res, ix, px; + mp_int t, *x; + + if (a->used > b->used) { + if ((res = mp_init_copy(&t, a)) != MP_OKAY) { + return res; + } + px = b->used; + x = b; + } else { + if ((res = mp_init_copy(&t, b)) != MP_OKAY) { + return res; + } + px = a->used; + x = a; + } + + for (ix = 0; ix < px; ix++) { + t.dp[ix] &= x->dp[ix]; + } + + /* zero digits above the last from the smallest mp_int */ + for ( ; ix < t.used; ix++) { + t.dp[ix] = 0; + } + + mp_clamp(&t); + mp_exch(c, &t); + mp_clear(&t); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_CLAMP_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* trim unused digits + * + * This is used to ensure that leading zero digits are + * trimed and the leading "used" digit will be non-zero + * Typically very fast. Also fixes the sign if there + * are no more leading digits + */ +void +mp_clamp(mp_int *a) { + /* decrease used while the most significant digit is + * zero. + */ + while ((a->used > 0) && (a->dp[a->used - 1] == 0)) { + --(a->used); + } + + /* reset the sign flag if used == 0 */ + if (a->used == 0) { + a->sign = MP_ZPOS; + } +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_CLEAR_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* clear one (frees) */ +void +mp_clear(mp_int *a) { + int i; + + /* only do anything if a hasn't been freed previously */ + if (a->dp != NULL) { + /* first zero the digits */ + for (i = 0; i < a->used; i++) { + a->dp[i] = 0; + } + + /* free ram */ + XFREE(a->dp); + + /* reset members to make debugging easier */ + a->dp = NULL; + a->alloc = a->used = 0; + a->sign = MP_ZPOS; + } +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_CLEAR_MULTI_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ +#include <stdarg.h> + +void mp_clear_multi(mp_int *mp, ...) { + mp_int *next_mp = mp; + va_list args; + + va_start(args, mp); + while (next_mp != NULL) { + mp_clear(next_mp); + next_mp = va_arg(args, mp_int *); + } + va_end(args); +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_CMP_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* compare two ints (signed)*/ +int +mp_cmp(mp_int *a, mp_int *b) { + /* compare based on sign */ + if (a->sign != b->sign) { + if (a->sign == MP_NEG) { + return MP_LT; + } else { + return MP_GT; + } + } + + /* compare digits */ + if (a->sign == MP_NEG) { + /* if negative compare opposite direction */ + return mp_cmp_mag(b, a); + } else { + return mp_cmp_mag(a, b); + } +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_CMP_D_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* compare a digit */ +int mp_cmp_d(mp_int *a, mp_digit b) { + /* compare based on sign */ + if (a->sign == MP_NEG) { + return MP_LT; + } + + /* compare based on magnitude */ + if (a->used > 1) { + return MP_GT; + } + + /* compare the only digit of a to b */ + if (a->dp[0] > b) { + return MP_GT; + } else if (a->dp[0] < b) { + return MP_LT; + } else { + return MP_EQ; + } +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_CMP_MAG_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* compare maginitude of two ints (unsigned) */ +int mp_cmp_mag(mp_int *a, mp_int *b) { + int n; + mp_digit *tmpa, *tmpb; + + /* compare based on # of non-zero digits */ + if (a->used > b->used) { + return MP_GT; + } + + if (a->used < b->used) { + return MP_LT; + } + + /* alias for a */ + tmpa = a->dp + (a->used - 1); + + /* alias for b */ + tmpb = b->dp + (a->used - 1); + + /* compare based on digits */ + for (n = 0; n < a->used; ++n, --tmpa, --tmpb) { + if (*tmpa > *tmpb) { + return MP_GT; + } + + if (*tmpa < *tmpb) { + return MP_LT; + } + } + return MP_EQ; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_CNT_LSB_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +static const int lnz[16] = { + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 +}; + +/* Counts the number of lsbs which are zero before the first zero bit */ +int mp_cnt_lsb(mp_int *a) { + int x; + mp_digit q, qq; + + /* easy out */ + if (mp_iszero(a) == MP_YES) { + return 0; + } + + /* scan lower digits until non-zero */ + for (x = 0; (x < a->used) && (a->dp[x] == 0); x++) { + } + q = a->dp[x]; + x *= DIGIT_BIT; + + /* now scan this digit until a 1 is found */ + if ((q & 1) == 0) { + do { + qq = q & 15; + x += lnz[qq]; + q >>= 4; + } while (qq == 0); + } + return x; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_COPY_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* copy, b = a */ +int +mp_copy(mp_int *a, mp_int *b) { + int res, n; + + /* if dst == src do nothing */ + if (a == b) { + return MP_OKAY; + } + + /* grow dest */ + if (b->alloc < a->used) { + if ((res = mp_grow(b, a->used)) != MP_OKAY) { + return res; + } + } + + /* zero b and copy the parameters over */ + { + mp_digit *tmpa, *tmpb; + + /* pointer aliases */ + + /* source */ + tmpa = a->dp; + + /* destination */ + tmpb = b->dp; + + /* copy all the digits */ + for (n = 0; n < a->used; n++) { + *tmpb++ = *tmpa++; + } + + /* clear high digits */ + for ( ; n < b->used; n++) { + *tmpb++ = 0; + } + } + + /* copy used count and sign */ + b->used = a->used; + b->sign = a->sign; + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_COUNT_BITS_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* returns the number of bits in an int */ +int +mp_count_bits(mp_int *a) { + int r; + mp_digit q; + + /* shortcut */ + if (a->used == 0) { + return 0; + } + + /* get number of digits and add that */ + r = (a->used - 1) * DIGIT_BIT; + + /* take the last digit and count the bits in it */ + q = a->dp[a->used - 1]; + while (q > ((mp_digit)0)) { + ++r; + q >>= ((mp_digit)1); + } + return r; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_DIV_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + + #ifdef BN_MP_DIV_SMALL + +/* slower bit-bang division... also smaller */ +int mp_div(mp_int *a, mp_int *b, mp_int *c, mp_int *d) { + mp_int ta, tb, tq, q; + int res, n, n2; + + /* is divisor zero ? */ + if (mp_iszero(b) == MP_YES) { + return MP_VAL; + } + + /* if a < b then q=0, r = a */ + if (mp_cmp_mag(a, b) == MP_LT) { + if (d != NULL) { + res = mp_copy(a, d); + } else { + res = MP_OKAY; + } + if (c != NULL) { + mp_zero(c); + } + return res; + } + + /* init our temps */ + if ((res = mp_init_multi(&ta, &tb, &tq, &q, NULL)) != MP_OKAY) { + return res; + } + + + mp_set(&tq, 1); + n = mp_count_bits(a) - mp_count_bits(b); + if (((res = mp_abs(a, &ta)) != MP_OKAY) || + ((res = mp_abs(b, &tb)) != MP_OKAY) || + ((res = mp_mul_2d(&tb, n, &tb)) != MP_OKAY) || + ((res = mp_mul_2d(&tq, n, &tq)) != MP_OKAY)) { + goto LBL_ERR; + } + + while (n-- >= 0) { + if (mp_cmp(&tb, &ta) != MP_GT) { + if (((res = mp_sub(&ta, &tb, &ta)) != MP_OKAY) || + ((res = mp_add(&q, &tq, &q)) != MP_OKAY)) { + goto LBL_ERR; + } + } + if (((res = mp_div_2d(&tb, 1, &tb, NULL)) != MP_OKAY) || + ((res = mp_div_2d(&tq, 1, &tq, NULL)) != MP_OKAY)) { + goto LBL_ERR; + } + } + + /* now q == quotient and ta == remainder */ + n = a->sign; + n2 = (a->sign == b->sign) ? MP_ZPOS : MP_NEG; + if (c != NULL) { + mp_exch(c, &q); + c->sign = (mp_iszero(c) == MP_YES) ? MP_ZPOS : n2; + } + if (d != NULL) { + mp_exch(d, &ta); + d->sign = (mp_iszero(d) == MP_YES) ? MP_ZPOS : n; + } +LBL_ERR: + mp_clear_multi(&ta, &tb, &tq, &q, NULL); + return res; +} + + #else + +/* integer signed division. + * c*b + d == a [e.g. a/b, c=quotient, d=remainder] + * HAC pp.598 Algorithm 14.20 + * + * Note that the description in HAC is horribly + * incomplete. For example, it doesn't consider + * the case where digits are removed from 'x' in + * the inner loop. It also doesn't consider the + * case that y has fewer than three digits, etc.. + * + * The overall algorithm is as described as + * 14.20 from HAC but fixed to treat these cases. + */ +int mp_div(mp_int *a, mp_int *b, mp_int *c, mp_int *d) { + mp_int q, x, y, t1, t2; + int res, n, t, i, norm, neg; + + /* is divisor zero ? */ + if (mp_iszero(b) == MP_YES) { + return MP_VAL; + } + + /* if a < b then q=0, r = a */ + if (mp_cmp_mag(a, b) == MP_LT) { + if (d != NULL) { + res = mp_copy(a, d); + } else { + res = MP_OKAY; + } + if (c != NULL) { + mp_zero(c); + } + return res; + } + + if ((res = mp_init_size(&q, a->used + 2)) != MP_OKAY) { + return res; + } + q.used = a->used + 2; + + if ((res = mp_init(&t1)) != MP_OKAY) { + goto LBL_Q; + } + + if ((res = mp_init(&t2)) != MP_OKAY) { + goto LBL_T1; + } + + if ((res = mp_init_copy(&x, a)) != MP_OKAY) { + goto LBL_T2; + } + + if ((res = mp_init_copy(&y, b)) != MP_OKAY) { + goto LBL_X; + } + + /* fix the sign */ + neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG; + x.sign = y.sign = MP_ZPOS; + + /* normalize both x and y, ensure that y >= b/2, [b == 2**DIGIT_BIT] */ + norm = mp_count_bits(&y) % DIGIT_BIT; + if (norm < (int)(DIGIT_BIT - 1)) { + norm = (DIGIT_BIT - 1) - norm; + if ((res = mp_mul_2d(&x, norm, &x)) != MP_OKAY) { + goto LBL_Y; + } + if ((res = mp_mul_2d(&y, norm, &y)) != MP_OKAY) { + goto LBL_Y; + } + } else { + norm = 0; + } + + /* note hac does 0 based, so if used==5 then its 0,1,2,3,4, e.g. use 4 */ + n = x.used - 1; + t = y.used - 1; + + /* while (x >= y*b**n-t) do { q[n-t] += 1; x -= y*b**{n-t} } */ + if ((res = mp_lshd(&y, n - t)) != MP_OKAY) { /* y = y*b**{n-t} */ + goto LBL_Y; + } + + while (mp_cmp(&x, &y) != MP_LT) { + ++(q.dp[n - t]); + if ((res = mp_sub(&x, &y, &x)) != MP_OKAY) { + goto LBL_Y; + } + } + + /* reset y by shifting it back down */ + mp_rshd(&y, n - t); + + /* step 3. for i from n down to (t + 1) */ + for (i = n; i >= (t + 1); i--) { + if (i > x.used) { + continue; + } + + /* step 3.1 if xi == yt then set q{i-t-1} to b-1, + * otherwise set q{i-t-1} to (xi*b + x{i-1})/yt */ + if (x.dp[i] == y.dp[t]) { + q.dp[(i - t) - 1] = ((((mp_digit)1) << DIGIT_BIT) - 1); + } else { + mp_word tmp; + tmp = ((mp_word)x.dp[i]) << ((mp_word)DIGIT_BIT); + tmp |= ((mp_word)x.dp[i - 1]); + tmp /= ((mp_word)y.dp[t]); + if (tmp > (mp_word)MP_MASK) { + tmp = MP_MASK; + } + q.dp[(i - t) - 1] = (mp_digit)(tmp & (mp_word)(MP_MASK)); + } + + /* while (q{i-t-1} * (yt * b + y{t-1})) > + xi * b**2 + xi-1 * b + xi-2 + + do q{i-t-1} -= 1; + */ + q.dp[(i - t) - 1] = (q.dp[(i - t) - 1] + 1) & MP_MASK; + do { + q.dp[(i - t) - 1] = (q.dp[(i - t) - 1] - 1) & MP_MASK; + + /* find left hand */ + mp_zero(&t1); + t1.dp[0] = ((t - 1) < 0) ? 0 : y.dp[t - 1]; + t1.dp[1] = y.dp[t]; + t1.used = 2; + if ((res = mp_mul_d(&t1, q.dp[(i - t) - 1], &t1)) != MP_OKAY) { + goto LBL_Y; + } + + /* find right hand */ + t2.dp[0] = ((i - 2) < 0) ? 0 : x.dp[i - 2]; + t2.dp[1] = ((i - 1) < 0) ? 0 : x.dp[i - 1]; + t2.dp[2] = x.dp[i]; + t2.used = 3; + } while (mp_cmp_mag(&t1, &t2) == MP_GT); + + /* step 3.3 x = x - q{i-t-1} * y * b**{i-t-1} */ + if ((res = mp_mul_d(&y, q.dp[(i - t) - 1], &t1)) != MP_OKAY) { + goto LBL_Y; + } + + if ((res = mp_lshd(&t1, (i - t) - 1)) != MP_OKAY) { + goto LBL_Y; + } + + if ((res = mp_sub(&x, &t1, &x)) != MP_OKAY) { + goto LBL_Y; + } + + /* if x < 0 then { x = x + y*b**{i-t-1}; q{i-t-1} -= 1; } */ + if (x.sign == MP_NEG) { + if ((res = mp_copy(&y, &t1)) != MP_OKAY) { + goto LBL_Y; + } + if ((res = mp_lshd(&t1, (i - t) - 1)) != MP_OKAY) { + goto LBL_Y; + } + if ((res = mp_add(&x, &t1, &x)) != MP_OKAY) { + goto LBL_Y; + } + + q.dp[(i - t) - 1] = (q.dp[(i - t) - 1] - 1UL) & MP_MASK; + } + } + + /* now q is the quotient and x is the remainder + * [which we have to normalize] + */ + + /* get sign before writing to c */ + x.sign = (x.used == 0) ? MP_ZPOS : a->sign; + + if (c != NULL) { + mp_clamp(&q); + mp_exch(&q, c); + c->sign = neg; + } + + if (d != NULL) { + if ((res = mp_div_2d(&x, norm, &x, NULL)) != MP_OKAY) { + goto LBL_Y; + } + mp_exch(&x, d); + } + + res = MP_OKAY; + +LBL_Y: mp_clear(&y); +LBL_X: mp_clear(&x); +LBL_T2: mp_clear(&t2); +LBL_T1: mp_clear(&t1); +LBL_Q: mp_clear(&q); + return res; +} + #endif +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_DIV_2_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* b = a/2 */ +int mp_div_2(mp_int *a, mp_int *b) { + int x, res, oldused; + + /* copy */ + if (b->alloc < a->used) { + if ((res = mp_grow(b, a->used)) != MP_OKAY) { + return res; + } + } + + oldused = b->used; + b->used = a->used; + { + mp_digit r, rr, *tmpa, *tmpb; + + /* source alias */ + tmpa = a->dp + b->used - 1; + + /* dest alias */ + tmpb = b->dp + b->used - 1; + + /* carry */ + r = 0; + for (x = b->used - 1; x >= 0; x--) { + /* get the carry for the next iteration */ + rr = *tmpa & 1; + + /* shift the current digit, add in carry and store */ + *tmpb-- = (*tmpa-- >> 1) | (r << (DIGIT_BIT - 1)); + + /* forward carry to next iteration */ + r = rr; + } + + /* zero excess digits */ + tmpb = b->dp + b->used; + for (x = b->used; x < oldused; x++) { + *tmpb++ = 0; + } + } + b->sign = a->sign; + mp_clamp(b); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_DIV_2D_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* shift right by a certain bit count (store quotient in c, optional remainder in d) */ +int mp_div_2d(mp_int *a, int b, mp_int *c, mp_int *d) { + mp_digit D, r, rr; + int x, res; + mp_int t; + + + /* if the shift count is <= 0 then we do no work */ + if (b <= 0) { + res = mp_copy(a, c); + if (d != NULL) { + mp_zero(d); + } + return res; + } + + if ((res = mp_init(&t)) != MP_OKAY) { + return res; + } + + /* get the remainder */ + if (d != NULL) { + if ((res = mp_mod_2d(a, b, &t)) != MP_OKAY) { + mp_clear(&t); + return res; + } + } + + /* copy */ + if ((res = mp_copy(a, c)) != MP_OKAY) { + mp_clear(&t); + return res; + } + + /* shift by as many digits in the bit count */ + if (b >= (int)DIGIT_BIT) { + mp_rshd(c, b / DIGIT_BIT); + } + + /* shift any bit count < DIGIT_BIT */ + D = (mp_digit)(b % DIGIT_BIT); + if (D != 0) { + mp_digit *tmpc, mask, shift; + + /* mask */ + mask = (((mp_digit)1) << D) - 1; + + /* shift for lsb */ + shift = DIGIT_BIT - D; + + /* alias */ + tmpc = c->dp + (c->used - 1); + + /* carry */ + r = 0; + for (x = c->used - 1; x >= 0; x--) { + /* get the lower bits of this word in a temp */ + rr = *tmpc & mask; + + /* shift the current word and mix in the carry bits from the previous word */ + *tmpc = (*tmpc >> D) | (r << shift); + --tmpc; + + /* set the carry to the carry bits of the current word found above */ + r = rr; + } + } + mp_clamp(c); + if (d != NULL) { + mp_exch(&t, d); + } + mp_clear(&t); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_DIV_3_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* divide by three (based on routine from MPI and the GMP manual) */ +int +mp_div_3(mp_int *a, mp_int *c, mp_digit *d) { + mp_int q; + mp_word w, t; + mp_digit b; + int res, ix; + + /* b = 2**DIGIT_BIT / 3 */ + b = (((mp_word)1) << ((mp_word)DIGIT_BIT)) / ((mp_word)3); + + if ((res = mp_init_size(&q, a->used)) != MP_OKAY) { + return res; + } + + q.used = a->used; + q.sign = a->sign; + w = 0; + for (ix = a->used - 1; ix >= 0; ix--) { + w = (w << ((mp_word)DIGIT_BIT)) | ((mp_word)a->dp[ix]); + + if (w >= 3) { + /* multiply w by [1/3] */ + t = (w * ((mp_word)b)) >> ((mp_word)DIGIT_BIT); + + /* now subtract 3 * [w/3] from w, to get the remainder */ + w -= t + t + t; + + /* fixup the remainder as required since + * the optimization is not exact. + */ + while (w >= 3) { + t += 1; + w -= 3; + } + } else { + t = 0; + } + q.dp[ix] = (mp_digit)t; + } + + /* [optional] store the remainder */ + if (d != NULL) { + *d = (mp_digit)w; + } + + /* [optional] store the quotient */ + if (c != NULL) { + mp_clamp(&q); + mp_exch(&q, c); + } + mp_clear(&q); + + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_DIV_D_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +static int s_is_power_of_two(mp_digit b, int *p) { + int x; + + /* fast return if no power of two */ + if ((b == 0) || ((b & (b - 1)) != 0)) { + return 0; + } + + for (x = 0; x < DIGIT_BIT; x++) { + if (b == (((mp_digit)1) << x)) { + *p = x; + return 1; + } + } + return 0; +} + +/* single digit division (based on routine from MPI) */ +int mp_div_d(mp_int *a, mp_digit b, mp_int *c, mp_digit *d) { + mp_int q; + mp_word w; + mp_digit t; + int res, ix; + + /* cannot divide by zero */ + if (b == 0) { + return MP_VAL; + } + + /* quick outs */ + if ((b == 1) || (mp_iszero(a) == MP_YES)) { + if (d != NULL) { + *d = 0; + } + if (c != NULL) { + return mp_copy(a, c); + } + return MP_OKAY; + } + + /* power of two ? */ + if (s_is_power_of_two(b, &ix) == 1) { + if (d != NULL) { + *d = a->dp[0] & ((((mp_digit)1) << ix) - 1); + } + if (c != NULL) { + return mp_div_2d(a, ix, c, NULL); + } + return MP_OKAY; + } + + #ifdef BN_MP_DIV_3_C + /* three? */ + if (b == 3) { + return mp_div_3(a, c, d); + } + #endif + + /* no easy answer [c'est la vie]. Just division */ + if ((res = mp_init_size(&q, a->used)) != MP_OKAY) { + return res; + } + + q.used = a->used; + q.sign = a->sign; + w = 0; + for (ix = a->used - 1; ix >= 0; ix--) { + w = (w << ((mp_word)DIGIT_BIT)) | ((mp_word)a->dp[ix]); + + if (w >= b) { + t = (mp_digit)(w / b); + w -= ((mp_word)t) * ((mp_word)b); + } else { + t = 0; + } + q.dp[ix] = (mp_digit)t; + } + + if (d != NULL) { + *d = (mp_digit)w; + } + + if (c != NULL) { + mp_clamp(&q); + mp_exch(&q, c); + } + mp_clear(&q); + + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_DR_IS_MODULUS_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* determines if a number is a valid DR modulus */ +int mp_dr_is_modulus(mp_int *a) { + int ix; + + /* must be at least two digits */ + if (a->used < 2) { + return 0; + } + + /* must be of the form b**k - a [a <= b] so all + * but the first digit must be equal to -1 (mod b). + */ + for (ix = 1; ix < a->used; ix++) { + if (a->dp[ix] != MP_MASK) { + return 0; + } + } + return 1; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_DR_REDUCE_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* reduce "x" in place modulo "n" using the Diminished Radix algorithm. + * + * Based on algorithm from the paper + * + * "Generating Efficient Primes for Discrete Log Cryptosystems" + * Chae Hoon Lim, Pil Joong Lee, + * POSTECH Information Research Laboratories + * + * The modulus must be of a special format [see manual] + * + * Has been modified to use algorithm 7.10 from the LTM book instead + * + * Input x must be in the range 0 <= x <= (n-1)**2 + */ +int +mp_dr_reduce(mp_int *x, mp_int *n, mp_digit k) { + int err, i, m; + mp_word r; + mp_digit mu, *tmpx1, *tmpx2; + + /* m = digits in modulus */ + m = n->used; + + /* ensure that "x" has at least 2m digits */ + if (x->alloc < (m + m)) { + if ((err = mp_grow(x, m + m)) != MP_OKAY) { + return err; + } + } + +/* top of loop, this is where the code resumes if + * another reduction pass is required. + */ +top: + /* aliases for digits */ + /* alias for lower half of x */ + tmpx1 = x->dp; + + /* alias for upper half of x, or x/B**m */ + tmpx2 = x->dp + m; + + /* set carry to zero */ + mu = 0; + + /* compute (x mod B**m) + k * [x/B**m] inline and inplace */ + for (i = 0; i < m; i++) { + r = (((mp_word) * tmpx2++) * (mp_word)k) + *tmpx1 + mu; + *tmpx1++ = (mp_digit)(r & MP_MASK); + mu = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); + } + + /* set final carry */ + *tmpx1++ = mu; + + /* zero words above m */ + for (i = m + 1; i < x->used; i++) { + *tmpx1++ = 0; + } + + /* clamp, sub and return */ + mp_clamp(x); + + /* if x >= n then subtract and reduce again + * Each successive "recursion" makes the input smaller and smaller. + */ + if (mp_cmp_mag(x, n) != MP_LT) { + if ((err = s_mp_sub(x, n, x)) != MP_OKAY) { + return err; + } + goto top; + } + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_DR_SETUP_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* determines the setup value */ +void mp_dr_setup(mp_int *a, mp_digit *d) { + /* the casts are required if DIGIT_BIT is one less than + * the number of bits in a mp_digit [e.g. DIGIT_BIT==31] + */ + *d = (mp_digit)((((mp_word)1) << ((mp_word)DIGIT_BIT)) - + ((mp_word)a->dp[0])); +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_EXCH_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* swap the elements of two integers, for cases where you can't simply swap the + * mp_int pointers around + */ +void +mp_exch(mp_int *a, mp_int *b) { + mp_int t; + + t = *a; + *a = *b; + *b = t; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_EXPORT_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* based on gmp's mpz_export. + * see http://gmplib.org/manual/Integer-Import-and-Export.html + */ +int mp_export(void *rop, size_t *countp, int order, size_t size, + int endian, size_t nails, mp_int *op) { + int result; + size_t odd_nails, nail_bytes, i, j, bits, count; + unsigned char odd_nail_mask; + + mp_int t; + + if ((result = mp_init_copy(&t, op)) != MP_OKAY) { + return result; + } + + if (endian == 0) { + union { + unsigned int i; + char c[4]; + } lint; + lint.i = 0x01020304; + + endian = (lint.c[0] == 4) ? -1 : 1; + } + + odd_nails = (nails % 8); + odd_nail_mask = 0xff; + for (i = 0; i < odd_nails; ++i) { + odd_nail_mask ^= (1 << (7 - i)); + } + nail_bytes = nails / 8; + + bits = mp_count_bits(&t); + count = (bits / ((size * 8) - nails)) + (((bits % ((size * 8) - nails)) != 0) ? 1 : 0); + + for (i = 0; i < count; ++i) { + for (j = 0; j < size; ++j) { + unsigned char *byte = ( + (unsigned char *)rop + + (((order == -1) ? i : ((count - 1) - i)) * size) + + ((endian == -1) ? j : ((size - 1) - j)) + ); + + if (j >= (size - nail_bytes)) { + *byte = 0; + continue; + } + + *byte = (unsigned char)((j == ((size - nail_bytes) - 1)) ? (t.dp[0] & odd_nail_mask) : (t.dp[0] & 0xFF)); + + if ((result = mp_div_2d(&t, ((j == ((size - nail_bytes) - 1)) ? (8 - odd_nails) : 8), &t, NULL)) != MP_OKAY) { + mp_clear(&t); + return result; + } + } + } + + mp_clear(&t); + + if (countp != NULL) { + *countp = count; + } + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_EXPT_D_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* wrapper function for mp_expt_d_ex() */ +int mp_expt_d(mp_int *a, mp_digit b, mp_int *c) { + return mp_expt_d_ex(a, b, c, 0); +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_EXPT_D_EX_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* calculate c = a**b using a square-multiply algorithm */ +int mp_expt_d_ex(mp_int *a, mp_digit b, mp_int *c, int fast) { + int res; + unsigned int x; + + mp_int g; + + if ((res = mp_init_copy(&g, a)) != MP_OKAY) { + return res; + } + + /* set initial result */ + mp_set(c, 1); + + if (fast != 0) { + while (b > 0) { + /* if the bit is set multiply */ + if ((b & 1) != 0) { + if ((res = mp_mul(c, &g, c)) != MP_OKAY) { + mp_clear(&g); + return res; + } + } + + /* square */ + if (b > 1) { + if ((res = mp_sqr(&g, &g)) != MP_OKAY) { + mp_clear(&g); + return res; + } + } + + /* shift to next bit */ + b >>= 1; + } + } else { + for (x = 0; x < DIGIT_BIT; x++) { + /* square */ + if ((res = mp_sqr(c, c)) != MP_OKAY) { + mp_clear(&g); + return res; + } + + /* if the bit is set multiply */ + if ((b & (mp_digit)(((mp_digit)1) << (DIGIT_BIT - 1))) != 0) { + if ((res = mp_mul(c, &g, c)) != MP_OKAY) { + mp_clear(&g); + return res; + } + } + + /* shift to next bit */ + b <<= 1; + } + } /* if ... else */ + + mp_clear(&g); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_EXPTMOD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + + +/* this is a shell function that calls either the normal or Montgomery + * exptmod functions. Originally the call to the montgomery code was + * embedded in the normal function but that wasted alot of stack space + * for nothing (since 99% of the time the Montgomery code would be called) + */ +int mp_exptmod(mp_int *G, mp_int *X, mp_int *P, mp_int *Y) { + int dr; + + /* modulus P must be positive */ + if (P->sign == MP_NEG) { + return MP_VAL; + } + + /* if exponent X is negative we have to recurse */ + if (X->sign == MP_NEG) { + #ifdef BN_MP_INVMOD_C + mp_int tmpG, tmpX; + int err; + + /* first compute 1/G mod P */ + if ((err = mp_init(&tmpG)) != MP_OKAY) { + return err; + } + if ((err = mp_invmod(G, P, &tmpG)) != MP_OKAY) { + mp_clear(&tmpG); + return err; + } + + /* now get |X| */ + if ((err = mp_init(&tmpX)) != MP_OKAY) { + mp_clear(&tmpG); + return err; + } + if ((err = mp_abs(X, &tmpX)) != MP_OKAY) { + mp_clear_multi(&tmpG, &tmpX, NULL); + return err; + } + + /* and now compute (1/G)**|X| instead of G**X [X < 0] */ + err = mp_exptmod(&tmpG, &tmpX, P, Y); + mp_clear_multi(&tmpG, &tmpX, NULL); + return err; + #else + /* no invmod */ + return MP_VAL; + #endif + } + +/* modified diminished radix reduction */ + #if defined(BN_MP_REDUCE_IS_2K_L_C) && defined(BN_MP_REDUCE_2K_L_C) && defined(BN_S_MP_EXPTMOD_C) + if (mp_reduce_is_2k_l(P) == MP_YES) { + return s_mp_exptmod(G, X, P, Y, 1); + } + #endif + + #ifdef BN_MP_DR_IS_MODULUS_C + /* is it a DR modulus? */ + dr = mp_dr_is_modulus(P); + #else + /* default to no */ + dr = 0; + #endif + + #ifdef BN_MP_REDUCE_IS_2K_C + /* if not, is it a unrestricted DR modulus? */ + if (dr == 0) { + dr = mp_reduce_is_2k(P) << 1; + } + #endif + + /* if the modulus is odd or dr != 0 use the montgomery method */ + #ifdef BN_MP_EXPTMOD_FAST_C + if ((mp_isodd(P) == MP_YES) || (dr != 0)) { + return mp_exptmod_fast(G, X, P, Y, dr); + } else { + #endif + #ifdef BN_S_MP_EXPTMOD_C + /* otherwise use the generic Barrett reduction technique */ + return s_mp_exptmod(G, X, P, Y, 0); + #else + /* no exptmod for evens */ + return MP_VAL; + #endif + #ifdef BN_MP_EXPTMOD_FAST_C +} + #endif +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_EXPTMOD_FAST_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* computes Y == G**X mod P, HAC pp.616, Algorithm 14.85 + * + * Uses a left-to-right k-ary sliding window to compute the modular exponentiation. + * The value of k changes based on the size of the exponent. + * + * Uses Montgomery or Diminished Radix reduction [whichever appropriate] + */ + + #ifdef MP_LOW_MEM + #define TAB_SIZE 32 + #else + #define TAB_SIZE 256 + #endif + +int mp_exptmod_fast(mp_int *G, mp_int *X, mp_int *P, mp_int *Y, int redmode) { + mp_int M[TAB_SIZE], res; + mp_digit buf, mp; + int err, bitbuf, bitcpy, bitcnt, mode, digidx, x, y, winsize; + + /* use a pointer to the reduction algorithm. This allows us to use + * one of many reduction algorithms without modding the guts of + * the code with if statements everywhere. + */ + int (*redux)(mp_int *, mp_int *, mp_digit); + + /* find window size */ + x = mp_count_bits(X); + if (x <= 7) { + winsize = 2; + } else if (x <= 36) { + winsize = 3; + } else if (x <= 140) { + winsize = 4; + } else if (x <= 450) { + winsize = 5; + } else if (x <= 1303) { + winsize = 6; + } else if (x <= 3529) { + winsize = 7; + } else { + winsize = 8; + } + + #ifdef MP_LOW_MEM + if (winsize > 5) { + winsize = 5; + } + #endif + + /* init M array */ + /* init first cell */ + if ((err = mp_init(&M[1])) != MP_OKAY) { + return err; + } + + /* now init the second half of the array */ + for (x = 1 << (winsize - 1); x < (1 << winsize); x++) { + if ((err = mp_init(&M[x])) != MP_OKAY) { + for (y = 1 << (winsize - 1); y < x; y++) { + mp_clear(&M[y]); + } + mp_clear(&M[1]); + return err; + } + } + + /* determine and setup reduction code */ + if (redmode == 0) { + #ifdef BN_MP_MONTGOMERY_SETUP_C + /* now setup montgomery */ + if ((err = mp_montgomery_setup(P, &mp)) != MP_OKAY) { + goto LBL_M; + } + #else + err = MP_VAL; + goto LBL_M; + #endif + + /* automatically pick the comba one if available (saves quite a few calls/ifs) */ + #ifdef BN_FAST_MP_MONTGOMERY_REDUCE_C + if ((((P->used * 2) + 1) < MP_WARRAY) && + (P->used < (1 << ((CHAR_BIT * sizeof(mp_word)) - (2 * DIGIT_BIT))))) { + redux = fast_mp_montgomery_reduce; + } else + #endif + { + #ifdef BN_MP_MONTGOMERY_REDUCE_C + /* use slower baseline Montgomery method */ + redux = mp_montgomery_reduce; + #else + err = MP_VAL; + goto LBL_M; + #endif + } + } else if (redmode == 1) { + #if defined(BN_MP_DR_SETUP_C) && defined(BN_MP_DR_REDUCE_C) + /* setup DR reduction for moduli of the form B**k - b */ + mp_dr_setup(P, &mp); + redux = mp_dr_reduce; + #else + err = MP_VAL; + goto LBL_M; + #endif + } else { + #if defined(BN_MP_REDUCE_2K_SETUP_C) && defined(BN_MP_REDUCE_2K_C) + /* setup DR reduction for moduli of the form 2**k - b */ + if ((err = mp_reduce_2k_setup(P, &mp)) != MP_OKAY) { + goto LBL_M; + } + redux = mp_reduce_2k; + #else + err = MP_VAL; + goto LBL_M; + #endif + } + + /* setup result */ + if ((err = mp_init(&res)) != MP_OKAY) { + goto LBL_M; + } + + /* create M table + * + + * + * The first half of the table is not computed though accept for M[0] and M[1] + */ + + if (redmode == 0) { + #ifdef BN_MP_MONTGOMERY_CALC_NORMALIZATION_C + /* now we need R mod m */ + if ((err = mp_montgomery_calc_normalization(&res, P)) != MP_OKAY) { + goto LBL_RES; + } + #else + err = MP_VAL; + goto LBL_RES; + #endif + + /* now set M[1] to G * R mod m */ + if ((err = mp_mulmod(G, &res, P, &M[1])) != MP_OKAY) { + goto LBL_RES; + } + } else { + mp_set(&res, 1); + if ((err = mp_mod(G, P, &M[1])) != MP_OKAY) { + goto LBL_RES; + } + } + + /* compute the value at M[1<<(winsize-1)] by squaring M[1] (winsize-1) times */ + if ((err = mp_copy(&M[1], &M[1 << (winsize - 1)])) != MP_OKAY) { + goto LBL_RES; + } + + for (x = 0; x < (winsize - 1); x++) { + if ((err = mp_sqr(&M[1 << (winsize - 1)], &M[1 << (winsize - 1)])) != MP_OKAY) { + goto LBL_RES; + } + if ((err = redux(&M[1 << (winsize - 1)], P, mp)) != MP_OKAY) { + goto LBL_RES; + } + } + + /* create upper table */ + for (x = (1 << (winsize - 1)) + 1; x < (1 << winsize); x++) { + if ((err = mp_mul(&M[x - 1], &M[1], &M[x])) != MP_OKAY) { + goto LBL_RES; + } + if ((err = redux(&M[x], P, mp)) != MP_OKAY) { + goto LBL_RES; + } + } + + /* set initial mode and bit cnt */ + mode = 0; + bitcnt = 1; + buf = 0; + digidx = X->used - 1; + bitcpy = 0; + bitbuf = 0; + + for ( ; ; ) { + /* grab next digit as required */ + if (--bitcnt == 0) { + /* if digidx == -1 we are out of digits so break */ + if (digidx == -1) { + break; + } + /* read next digit and reset bitcnt */ + buf = X->dp[digidx--]; + bitcnt = (int)DIGIT_BIT; + } + + /* grab the next msb from the exponent */ + y = (mp_digit)(buf >> (DIGIT_BIT - 1)) & 1; + buf <<= (mp_digit)1; + + /* if the bit is zero and mode == 0 then we ignore it + * These represent the leading zero bits before the first 1 bit + * in the exponent. Technically this opt is not required but it + * does lower the # of trivial squaring/reductions used + */ + if ((mode == 0) && (y == 0)) { + continue; + } + + /* if the bit is zero and mode == 1 then we square */ + if ((mode == 1) && (y == 0)) { + if ((err = mp_sqr(&res, &res)) != MP_OKAY) { + goto LBL_RES; + } + if ((err = redux(&res, P, mp)) != MP_OKAY) { + goto LBL_RES; + } + continue; + } + + /* else we add it to the window */ + bitbuf |= (y << (winsize - ++bitcpy)); + mode = 2; + + if (bitcpy == winsize) { + /* ok window is filled so square as required and multiply */ + /* square first */ + for (x = 0; x < winsize; x++) { + if ((err = mp_sqr(&res, &res)) != MP_OKAY) { + goto LBL_RES; + } + if ((err = redux(&res, P, mp)) != MP_OKAY) { + goto LBL_RES; + } + } + + /* then multiply */ + if ((err = mp_mul(&res, &M[bitbuf], &res)) != MP_OKAY) { + goto LBL_RES; + } + if ((err = redux(&res, P, mp)) != MP_OKAY) { + goto LBL_RES; + } + + /* empty window and reset */ + bitcpy = 0; + bitbuf = 0; + mode = 1; + } + } + + /* if bits remain then square/multiply */ + if ((mode == 2) && (bitcpy > 0)) { + /* square then multiply if the bit is set */ + for (x = 0; x < bitcpy; x++) { + if ((err = mp_sqr(&res, &res)) != MP_OKAY) { + goto LBL_RES; + } + if ((err = redux(&res, P, mp)) != MP_OKAY) { + goto LBL_RES; + } + + /* get next bit of the window */ + bitbuf <<= 1; + if ((bitbuf & (1 << winsize)) != 0) { + /* then multiply */ + if ((err = mp_mul(&res, &M[1], &res)) != MP_OKAY) { + goto LBL_RES; + } + if ((err = redux(&res, P, mp)) != MP_OKAY) { + goto LBL_RES; + } + } + } + } + + if (redmode == 0) { + /* fixup result if Montgomery reduction is used + * recall that any value in a Montgomery system is + * actually multiplied by R mod n. So we have + * to reduce one more time to cancel out the factor + * of R. + */ + if ((err = redux(&res, P, mp)) != MP_OKAY) { + goto LBL_RES; + } + } + + /* swap res with Y */ + mp_exch(&res, Y); + err = MP_OKAY; +LBL_RES: mp_clear(&res); +LBL_M: + mp_clear(&M[1]); + for (x = 1 << (winsize - 1); x < (1 << winsize); x++) { + mp_clear(&M[x]); + } + return err; +} +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_EXTEUCLID_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* Extended euclidean algorithm of (a, b) produces + a*u1 + b*u2 = u3 + */ +int mp_exteuclid(mp_int *a, mp_int *b, mp_int *U1, mp_int *U2, mp_int *U3) { + mp_int u1, u2, u3, v1, v2, v3, t1, t2, t3, q, tmp; + int err; + + if ((err = mp_init_multi(&u1, &u2, &u3, &v1, &v2, &v3, &t1, &t2, &t3, &q, &tmp, NULL)) != MP_OKAY) { + return err; + } + + /* initialize, (u1,u2,u3) = (1,0,a) */ + mp_set(&u1, 1); + if ((err = mp_copy(a, &u3)) != MP_OKAY) { + goto _ERR; + } + + /* initialize, (v1,v2,v3) = (0,1,b) */ + mp_set(&v2, 1); + if ((err = mp_copy(b, &v3)) != MP_OKAY) { + goto _ERR; + } + + /* loop while v3 != 0 */ + while (mp_iszero(&v3) == MP_NO) { + /* q = u3/v3 */ + if ((err = mp_div(&u3, &v3, &q, NULL)) != MP_OKAY) { + goto _ERR; + } + + /* (t1,t2,t3) = (u1,u2,u3) - (v1,v2,v3)q */ + if ((err = mp_mul(&v1, &q, &tmp)) != MP_OKAY) { + goto _ERR; + } + if ((err = mp_sub(&u1, &tmp, &t1)) != MP_OKAY) { + goto _ERR; + } + if ((err = mp_mul(&v2, &q, &tmp)) != MP_OKAY) { + goto _ERR; + } + if ((err = mp_sub(&u2, &tmp, &t2)) != MP_OKAY) { + goto _ERR; + } + if ((err = mp_mul(&v3, &q, &tmp)) != MP_OKAY) { + goto _ERR; + } + if ((err = mp_sub(&u3, &tmp, &t3)) != MP_OKAY) { + goto _ERR; + } + + /* (u1,u2,u3) = (v1,v2,v3) */ + if ((err = mp_copy(&v1, &u1)) != MP_OKAY) { + goto _ERR; + } + if ((err = mp_copy(&v2, &u2)) != MP_OKAY) { + goto _ERR; + } + if ((err = mp_copy(&v3, &u3)) != MP_OKAY) { + goto _ERR; + } + + /* (v1,v2,v3) = (t1,t2,t3) */ + if ((err = mp_copy(&t1, &v1)) != MP_OKAY) { + goto _ERR; + } + if ((err = mp_copy(&t2, &v2)) != MP_OKAY) { + goto _ERR; + } + if ((err = mp_copy(&t3, &v3)) != MP_OKAY) { + goto _ERR; + } + } + + /* make sure U3 >= 0 */ + if (u3.sign == MP_NEG) { + if ((err = mp_neg(&u1, &u1)) != MP_OKAY) { + goto _ERR; + } + if ((err = mp_neg(&u2, &u2)) != MP_OKAY) { + goto _ERR; + } + if ((err = mp_neg(&u3, &u3)) != MP_OKAY) { + goto _ERR; + } + } + + /* copy result out */ + if (U1 != NULL) { + mp_exch(U1, &u1); + } + if (U2 != NULL) { + mp_exch(U2, &u2); + } + if (U3 != NULL) { + mp_exch(U3, &u3); + } + + err = MP_OKAY; +_ERR: mp_clear_multi(&u1, &u2, &u3, &v1, &v2, &v3, &t1, &t2, &t3, &q, &tmp, NULL); + return err; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_FREAD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* read a bigint from a file stream in ASCII */ +int mp_fread(mp_int *a, int radix, FILE *stream) { + int err, ch, neg, y; + + /* clear a */ + mp_zero(a); + + /* if first digit is - then set negative */ + ch = fgetc(stream); + if (ch == '-') { + neg = MP_NEG; + ch = fgetc(stream); + } else { + neg = MP_ZPOS; + } + + for ( ; ; ) { + /* find y in the radix map */ + for (y = 0; y < radix; y++) { + if (mp_s_rmap[y] == ch) { + break; + } + } + if (y == radix) { + break; + } + + /* shift up and add */ + if ((err = mp_mul_d(a, radix, a)) != MP_OKAY) { + return err; + } + if ((err = mp_add_d(a, y, a)) != MP_OKAY) { + return err; + } + + ch = fgetc(stream); + } + if (mp_cmp_d(a, 0) != MP_EQ) { + a->sign = neg; + } + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_FWRITE_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +int mp_fwrite(mp_int *a, int radix, FILE *stream) { + char *buf; + int err, len, x; + + if ((err = mp_radix_size(a, radix, &len)) != MP_OKAY) { + return err; + } + + buf = OPT_CAST(char) XMALLOC(len); + if (buf == NULL) { + return MP_MEM; + } + + if ((err = mp_toradix(a, buf, radix)) != MP_OKAY) { + XFREE(buf); + return err; + } + + for (x = 0; x < len; x++) { + if (fputc(buf[x], stream) == EOF) { + XFREE(buf); + return MP_VAL; + } + } + + XFREE(buf); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_GCD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* Greatest Common Divisor using the binary method */ +int mp_gcd(mp_int *a, mp_int *b, mp_int *c) { + mp_int u, v; + int k, u_lsb, v_lsb, res; + + /* either zero than gcd is the largest */ + if (mp_iszero(a) == MP_YES) { + return mp_abs(b, c); + } + if (mp_iszero(b) == MP_YES) { + return mp_abs(a, c); + } + + /* get copies of a and b we can modify */ + if ((res = mp_init_copy(&u, a)) != MP_OKAY) { + return res; + } + + if ((res = mp_init_copy(&v, b)) != MP_OKAY) { + goto LBL_U; + } + + /* must be positive for the remainder of the algorithm */ + u.sign = v.sign = MP_ZPOS; + + /* B1. Find the common power of two for u and v */ + u_lsb = mp_cnt_lsb(&u); + v_lsb = mp_cnt_lsb(&v); + k = MIN(u_lsb, v_lsb); + + if (k > 0) { + /* divide the power of two out */ + if ((res = mp_div_2d(&u, k, &u, NULL)) != MP_OKAY) { + goto LBL_V; + } + + if ((res = mp_div_2d(&v, k, &v, NULL)) != MP_OKAY) { + goto LBL_V; + } + } + + /* divide any remaining factors of two out */ + if (u_lsb != k) { + if ((res = mp_div_2d(&u, u_lsb - k, &u, NULL)) != MP_OKAY) { + goto LBL_V; + } + } + + if (v_lsb != k) { + if ((res = mp_div_2d(&v, v_lsb - k, &v, NULL)) != MP_OKAY) { + goto LBL_V; + } + } + + while (mp_iszero(&v) == MP_NO) { + /* make sure v is the largest */ + if (mp_cmp_mag(&u, &v) == MP_GT) { + /* swap u and v to make sure v is >= u */ + mp_exch(&u, &v); + } + + /* subtract smallest from largest */ + if ((res = s_mp_sub(&v, &u, &v)) != MP_OKAY) { + goto LBL_V; + } + + /* Divide out all factors of two */ + if ((res = mp_div_2d(&v, mp_cnt_lsb(&v), &v, NULL)) != MP_OKAY) { + goto LBL_V; + } + } + + /* multiply by 2**k which we divided out at the beginning */ + if ((res = mp_mul_2d(&u, k, c)) != MP_OKAY) { + goto LBL_V; + } + c->sign = MP_ZPOS; + res = MP_OKAY; +LBL_V: mp_clear(&u); +LBL_U: mp_clear(&v); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_GET_INT_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* get the lower 32-bits of an mp_int */ +unsigned long mp_get_int(mp_int *a) { + int i; + mp_min_u32 res; + + if (a->used == 0) { + return 0; + } + + /* get number of digits of the lsb we have to read */ + i = MIN(a->used, (int)(((sizeof(unsigned long) * CHAR_BIT) + DIGIT_BIT - 1) / DIGIT_BIT)) - 1; + + /* get most significant digit of result */ + res = DIGIT(a, i); + + while (--i >= 0) { + res = (res << DIGIT_BIT) | DIGIT(a, i); + } + + /* force result to 32-bits always so it is consistent on non 32-bit platforms */ + return res & 0xFFFFFFFFUL; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_GET_LONG_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* get the lower unsigned long of an mp_int, platform dependent */ +unsigned long mp_get_long(mp_int *a) { + int i; + unsigned long res; + + if (a->used == 0) { + return 0; + } + + /* get number of digits of the lsb we have to read */ + i = MIN(a->used, (int)(((sizeof(unsigned long) * CHAR_BIT) + DIGIT_BIT - 1) / DIGIT_BIT)) - 1; + + /* get most significant digit of result */ + res = DIGIT(a, i); + + #if (ULONG_MAX != 0xffffffffuL) || (DIGIT_BIT < 32) + while (--i >= 0) { + res = (res << DIGIT_BIT) | DIGIT(a, i); + } + #endif + return res; +} +#endif + + + +#ifdef BN_MP_GET_LONG_LONG_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* get the lower unsigned long long of an mp_int, platform dependent */ +unsigned long long mp_get_long_long(mp_int *a) { + int i; + unsigned long long res; + + if (a->used == 0) { + return 0; + } + + /* get number of digits of the lsb we have to read */ + i = MIN(a->used, (int)(((sizeof(unsigned long long) * CHAR_BIT) + DIGIT_BIT - 1) / DIGIT_BIT)) - 1; + + /* get most significant digit of result */ + res = DIGIT(a, i); + + #if DIGIT_BIT < 64 + while (--i >= 0) { + res = (res << DIGIT_BIT) | DIGIT(a, i); + } + #endif + return res; +} +#endif + + + +#ifdef BN_MP_GROW_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* grow as required */ +int mp_grow(mp_int *a, int size) { + int i; + mp_digit *tmp; + + /* if the alloc size is smaller alloc more ram */ + if (a->alloc < size) { + /* ensure there are always at least MP_PREC digits extra on top */ + size += (MP_PREC * 2) - (size % MP_PREC); + + /* reallocate the array a->dp + * + * We store the return in a temporary variable + * in case the operation failed we don't want + * to overwrite the dp member of a. + */ + tmp = OPT_CAST(mp_digit) XREALLOC(a->dp, sizeof(mp_digit) * size); + if (tmp == NULL) { + /* reallocation failed but "a" is still valid [can be freed] */ + return MP_MEM; + } + + /* reallocation succeeded so set a->dp */ + a->dp = tmp; + + /* zero excess digits */ + i = a->alloc; + a->alloc = size; + for ( ; i < a->alloc; i++) { + a->dp[i] = 0; + } + } + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_IMPORT_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* based on gmp's mpz_import. + * see http://gmplib.org/manual/Integer-Import-and-Export.html + */ +int mp_import(mp_int *rop, size_t count, int order, size_t size, + int endian, size_t nails, const void *op) { + int result; + size_t odd_nails, nail_bytes, i, j; + unsigned char odd_nail_mask; + + mp_zero(rop); + + if (endian == 0) { + union { + unsigned int i; + char c[4]; + } lint; + lint.i = 0x01020304; + + endian = (lint.c[0] == 4) ? -1 : 1; + } + + odd_nails = (nails % 8); + odd_nail_mask = 0xff; + for (i = 0; i < odd_nails; ++i) { + odd_nail_mask ^= (1 << (7 - i)); + } + nail_bytes = nails / 8; + + for (i = 0; i < count; ++i) { + for (j = 0; j < (size - nail_bytes); ++j) { + unsigned char byte = *( + (unsigned char *)op + + (((order == 1) ? i : ((count - 1) - i)) * size) + + ((endian == 1) ? (j + nail_bytes) : (((size - 1) - j) - nail_bytes)) + ); + + if ( + (result = mp_mul_2d(rop, ((j == 0) ? (8 - odd_nails) : 8), rop)) != MP_OKAY) { + return result; + } + + rop->dp[0] |= (j == 0) ? (byte & odd_nail_mask) : byte; + rop->used += 1; + } + } + + mp_clamp(rop); + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_INIT_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* init a new mp_int */ +int mp_init(mp_int *a) { + int i; + + /* allocate memory required and clear it */ + a->dp = OPT_CAST(mp_digit) XMALLOC(sizeof(mp_digit) * MP_PREC); + if (a->dp == NULL) { + return MP_MEM; + } + + /* set the digits to zero */ + for (i = 0; i < MP_PREC; i++) { + a->dp[i] = 0; + } + + /* set the used to zero, allocated digits to the default precision + * and sign to positive */ + a->used = 0; + a->alloc = MP_PREC; + a->sign = MP_ZPOS; + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_INIT_COPY_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* creates "a" then copies b into it */ +int mp_init_copy(mp_int *a, mp_int *b) { + int res; + + if ((res = mp_init_size(a, b->used)) != MP_OKAY) { + return res; + } + return mp_copy(b, a); +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_INIT_MULTI_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ +#include <stdarg.h> + +int mp_init_multi(mp_int *mp, ...) { + mp_err res = MP_OKAY; /* Assume ok until proven otherwise */ + int n = 0; /* Number of ok inits */ + mp_int *cur_arg = mp; + va_list args; + + va_start(args, mp); /* init args to next argument from caller */ + while (cur_arg != NULL) { + if (mp_init(cur_arg) != MP_OKAY) { + /* Oops - error! Back-track and mp_clear what we already + succeeded in init-ing, then return error. + */ + va_list clean_args; + + /* end the current list */ + va_end(args); + + /* now start cleaning up */ + cur_arg = mp; + va_start(clean_args, mp); + while (n-- != 0) { + mp_clear(cur_arg); + cur_arg = va_arg(clean_args, mp_int *); + } + va_end(clean_args); + res = MP_MEM; + break; + } + n++; + cur_arg = va_arg(args, mp_int *); + } + va_end(args); + return res; /* Assumed ok, if error flagged above. */ +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_INIT_SET_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* initialize and set a digit */ +int mp_init_set(mp_int *a, mp_digit b) { + int err; + + if ((err = mp_init(a)) != MP_OKAY) { + return err; + } + mp_set(a, b); + return err; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_INIT_SET_INT_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* initialize and set a digit */ +int mp_init_set_int(mp_int *a, unsigned long b) { + int err; + + if ((err = mp_init(a)) != MP_OKAY) { + return err; + } + return mp_set_int(a, b); +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_INIT_SIZE_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* init an mp_init for a given size */ +int mp_init_size(mp_int *a, int size) { + int x; + + /* pad size so there are always extra digits */ + size += (MP_PREC * 2) - (size % MP_PREC); + + /* alloc mem */ + a->dp = OPT_CAST(mp_digit) XMALLOC(sizeof(mp_digit) * size); + if (a->dp == NULL) { + return MP_MEM; + } + + /* set the members */ + a->used = 0; + a->alloc = size; + a->sign = MP_ZPOS; + + /* zero the digits */ + for (x = 0; x < size; x++) { + a->dp[x] = 0; + } + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_INVMOD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* hac 14.61, pp608 */ +int mp_invmod(mp_int *a, mp_int *b, mp_int *c) { + /* b cannot be negative */ + if ((b->sign == MP_NEG) || (mp_iszero(b) == MP_YES)) { + return MP_VAL; + } + + #ifdef BN_FAST_MP_INVMOD_C + /* if the modulus is odd we can use a faster routine instead */ + if (mp_isodd(b) == MP_YES) { + return fast_mp_invmod(a, b, c); + } + #endif + + #ifdef BN_MP_INVMOD_SLOW_C + return mp_invmod_slow(a, b, c); + #else + return MP_VAL; + #endif +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_INVMOD_SLOW_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* hac 14.61, pp608 */ +int mp_invmod_slow(mp_int *a, mp_int *b, mp_int *c) { + mp_int x, y, u, v, A, B, C, D; + int res; + + /* b cannot be negative */ + if ((b->sign == MP_NEG) || (mp_iszero(b) == MP_YES)) { + return MP_VAL; + } + + /* init temps */ + if ((res = mp_init_multi(&x, &y, &u, &v, + &A, &B, &C, &D, NULL)) != MP_OKAY) { + return res; + } + + /* x = a, y = b */ + if ((res = mp_mod(a, b, &x)) != MP_OKAY) { + goto LBL_ERR; + } + if ((res = mp_copy(b, &y)) != MP_OKAY) { + goto LBL_ERR; + } + + /* 2. [modified] if x,y are both even then return an error! */ + if ((mp_iseven(&x) == MP_YES) && (mp_iseven(&y) == MP_YES)) { + res = MP_VAL; + goto LBL_ERR; + } + + /* 3. u=x, v=y, A=1, B=0, C=0,D=1 */ + if ((res = mp_copy(&x, &u)) != MP_OKAY) { + goto LBL_ERR; + } + if ((res = mp_copy(&y, &v)) != MP_OKAY) { + goto LBL_ERR; + } + mp_set(&A, 1); + mp_set(&D, 1); + +top: + /* 4. while u is even do */ + while (mp_iseven(&u) == MP_YES) { + /* 4.1 u = u/2 */ + if ((res = mp_div_2(&u, &u)) != MP_OKAY) { + goto LBL_ERR; + } + /* 4.2 if A or B is odd then */ + if ((mp_isodd(&A) == MP_YES) || (mp_isodd(&B) == MP_YES)) { + /* A = (A+y)/2, B = (B-x)/2 */ + if ((res = mp_add(&A, &y, &A)) != MP_OKAY) { + goto LBL_ERR; + } + if ((res = mp_sub(&B, &x, &B)) != MP_OKAY) { + goto LBL_ERR; + } + } + /* A = A/2, B = B/2 */ + if ((res = mp_div_2(&A, &A)) != MP_OKAY) { + goto LBL_ERR; + } + if ((res = mp_div_2(&B, &B)) != MP_OKAY) { + goto LBL_ERR; + } + } + + /* 5. while v is even do */ + while (mp_iseven(&v) == MP_YES) { + /* 5.1 v = v/2 */ + if ((res = mp_div_2(&v, &v)) != MP_OKAY) { + goto LBL_ERR; + } + /* 5.2 if C or D is odd then */ + if ((mp_isodd(&C) == MP_YES) || (mp_isodd(&D) == MP_YES)) { + /* C = (C+y)/2, D = (D-x)/2 */ + if ((res = mp_add(&C, &y, &C)) != MP_OKAY) { + goto LBL_ERR; + } + if ((res = mp_sub(&D, &x, &D)) != MP_OKAY) { + goto LBL_ERR; + } + } + /* C = C/2, D = D/2 */ + if ((res = mp_div_2(&C, &C)) != MP_OKAY) { + goto LBL_ERR; + } + if ((res = mp_div_2(&D, &D)) != MP_OKAY) { + goto LBL_ERR; + } + } + + /* 6. if u >= v then */ + if (mp_cmp(&u, &v) != MP_LT) { + /* u = u - v, A = A - C, B = B - D */ + if ((res = mp_sub(&u, &v, &u)) != MP_OKAY) { + goto LBL_ERR; + } + + if ((res = mp_sub(&A, &C, &A)) != MP_OKAY) { + goto LBL_ERR; + } + + if ((res = mp_sub(&B, &D, &B)) != MP_OKAY) { + goto LBL_ERR; + } + } else { + /* v - v - u, C = C - A, D = D - B */ + if ((res = mp_sub(&v, &u, &v)) != MP_OKAY) { + goto LBL_ERR; + } + + if ((res = mp_sub(&C, &A, &C)) != MP_OKAY) { + goto LBL_ERR; + } + + if ((res = mp_sub(&D, &B, &D)) != MP_OKAY) { + goto LBL_ERR; + } + } + + /* if not zero goto step 4 */ + if (mp_iszero(&u) == MP_NO) + goto top; + + /* now a = C, b = D, gcd == g*v */ + + /* if v != 1 then there is no inverse */ + if (mp_cmp_d(&v, 1) != MP_EQ) { + res = MP_VAL; + goto LBL_ERR; + } + + /* if its too low */ + while (mp_cmp_d(&C, 0) == MP_LT) { + if ((res = mp_add(&C, b, &C)) != MP_OKAY) { + goto LBL_ERR; + } + } + + /* too big */ + while (mp_cmp_mag(&C, b) != MP_LT) { + if ((res = mp_sub(&C, b, &C)) != MP_OKAY) { + goto LBL_ERR; + } + } + + /* C is now the inverse */ + mp_exch(&C, c); + res = MP_OKAY; +LBL_ERR: mp_clear_multi(&x, &y, &u, &v, &A, &B, &C, &D, NULL); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_IS_SQUARE_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* Check if remainders are possible squares - fast exclude non-squares */ +static const char rem_128[128] = { + 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 +}; + +static const char rem_105[105] = { + 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, + 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1 +}; + +/* Store non-zero to ret if arg is square, and zero if not */ +int mp_is_square(mp_int *arg, int *ret) { + int res; + mp_digit c; + mp_int t; + unsigned long r; + + /* Default to Non-square :) */ + *ret = MP_NO; + + if (arg->sign == MP_NEG) { + return MP_VAL; + } + + /* digits used? (TSD) */ + if (arg->used == 0) { + return MP_OKAY; + } + + /* First check mod 128 (suppose that DIGIT_BIT is at least 7) */ + if (rem_128[127 & DIGIT(arg, 0)] == 1) { + return MP_OKAY; + } + + /* Next check mod 105 (3*5*7) */ + if ((res = mp_mod_d(arg, 105, &c)) != MP_OKAY) { + return res; + } + if (rem_105[c] == 1) { + return MP_OKAY; + } + + + if ((res = mp_init_set_int(&t, 11L * 13L * 17L * 19L * 23L * 29L * 31L)) != MP_OKAY) { + return res; + } + if ((res = mp_mod(arg, &t, &t)) != MP_OKAY) { + goto ERR; + } + r = mp_get_int(&t); + + /* Check for other prime modules, note it's not an ERROR but we must + * free "t" so the easiest way is to goto ERR. We know that res + * is already equal to MP_OKAY from the mp_mod call + */ + if (((1L << (r % 11)) & 0x5C4L) != 0L) goto ERR; + if (((1L << (r % 13)) & 0x9E4L) != 0L) goto ERR; + if (((1L << (r % 17)) & 0x5CE8L) != 0L) goto ERR; + if (((1L << (r % 19)) & 0x4F50CL) != 0L) goto ERR; + if (((1L << (r % 23)) & 0x7ACCA0L) != 0L) goto ERR; + if (((1L << (r % 29)) & 0xC2EDD0CL) != 0L) goto ERR; + if (((1L << (r % 31)) & 0x6DE2B848L) != 0L) goto ERR; + + /* Final check - is sqr(sqrt(arg)) == arg ? */ + if ((res = mp_sqrt(arg, &t)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sqr(&t, &t)) != MP_OKAY) { + goto ERR; + } + + *ret = (mp_cmp_mag(&t, arg) == MP_EQ) ? MP_YES : MP_NO; +ERR: mp_clear(&t); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_JACOBI_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* computes the jacobi c = (a | n) (or Legendre if n is prime) + * HAC pp. 73 Algorithm 2.149 + * HAC is wrong here, as the special case of (0 | 1) is not + * handled correctly. + */ +int mp_jacobi(mp_int *a, mp_int *n, int *c) { + mp_int a1, p1; + int k, s, r, res; + mp_digit residue; + + /* if n <= 0 return MP_VAL */ + if (mp_cmp_d(n, 0) != MP_GT) { + return MP_VAL; + } + + /* step 1. handle case of a == 0 */ + if (mp_iszero(a) == MP_YES) { + /* special case of a == 0 and n == 1 */ + if (mp_cmp_d(n, 1) == MP_EQ) { + *c = 1; + } else { + *c = 0; + } + return MP_OKAY; + } + + /* step 2. if a == 1, return 1 */ + if (mp_cmp_d(a, 1) == MP_EQ) { + *c = 1; + return MP_OKAY; + } + + /* default */ + s = 0; + + /* step 3. write a = a1 * 2**k */ + if ((res = mp_init_copy(&a1, a)) != MP_OKAY) { + return res; + } + + if ((res = mp_init(&p1)) != MP_OKAY) { + goto LBL_A1; + } + + /* divide out larger power of two */ + k = mp_cnt_lsb(&a1); + if ((res = mp_div_2d(&a1, k, &a1, NULL)) != MP_OKAY) { + goto LBL_P1; + } + + /* step 4. if e is even set s=1 */ + if ((k & 1) == 0) { + s = 1; + } else { + /* else set s=1 if p = 1/7 (mod 8) or s=-1 if p = 3/5 (mod 8) */ + residue = n->dp[0] & 7; + + if ((residue == 1) || (residue == 7)) { + s = 1; + } else if ((residue == 3) || (residue == 5)) { + s = -1; + } + } + + /* step 5. if p == 3 (mod 4) *and* a1 == 3 (mod 4) then s = -s */ + if (((n->dp[0] & 3) == 3) && ((a1.dp[0] & 3) == 3)) { + s = -s; + } + + /* if a1 == 1 we're done */ + if (mp_cmp_d(&a1, 1) == MP_EQ) { + *c = s; + } else { + /* n1 = n mod a1 */ + if ((res = mp_mod(n, &a1, &p1)) != MP_OKAY) { + goto LBL_P1; + } + if ((res = mp_jacobi(&p1, &a1, &r)) != MP_OKAY) { + goto LBL_P1; + } + *c = s * r; + } + + /* done */ + res = MP_OKAY; +LBL_P1: mp_clear(&p1); +LBL_A1: mp_clear(&a1); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_KARATSUBA_MUL_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* c = |a| * |b| using Karatsuba Multiplication using + * three half size multiplications + * + * Let B represent the radix [e.g. 2**DIGIT_BIT] and + * let n represent half of the number of digits in + * the min(a,b) + * + * a = a1 * B**n + a0 + * b = b1 * B**n + b0 + * + * Then, a * b => + a1b1 * B**2n + ((a1 + a0)(b1 + b0) - (a0b0 + a1b1)) * B + a0b0 + * + * Note that a1b1 and a0b0 are used twice and only need to be + * computed once. So in total three half size (half # of + * digit) multiplications are performed, a0b0, a1b1 and + * (a1+b1)(a0+b0) + * + * Note that a multiplication of half the digits requires + * 1/4th the number of single precision multiplications so in + * total after one call 25% of the single precision multiplications + * are saved. Note also that the call to mp_mul can end up back + * in this function if the a0, a1, b0, or b1 are above the threshold. + * This is known as divide-and-conquer and leads to the famous + * O(N**lg(3)) or O(N**1.584) work which is asymptopically lower than + * the standard O(N**2) that the baseline/comba methods use. + * Generally though the overhead of this method doesn't pay off + * until a certain size (N ~ 80) is reached. + */ +int mp_karatsuba_mul(mp_int *a, mp_int *b, mp_int *c) { + mp_int x0, x1, y0, y1, t1, x0y0, x1y1; + int B, err; + + /* default the return code to an error */ + err = MP_MEM; + + /* min # of digits */ + B = MIN(a->used, b->used); + + /* now divide in two */ + B = B >> 1; + + /* init copy all the temps */ + if (mp_init_size(&x0, B) != MP_OKAY) + goto ERR; + if (mp_init_size(&x1, a->used - B) != MP_OKAY) + goto X0; + if (mp_init_size(&y0, B) != MP_OKAY) + goto X1; + if (mp_init_size(&y1, b->used - B) != MP_OKAY) + goto Y0; + + /* init temps */ + if (mp_init_size(&t1, B * 2) != MP_OKAY) + goto Y1; + if (mp_init_size(&x0y0, B * 2) != MP_OKAY) + goto T1; + if (mp_init_size(&x1y1, B * 2) != MP_OKAY) + goto X0Y0; + + /* now shift the digits */ + x0.used = y0.used = B; + x1.used = a->used - B; + y1.used = b->used - B; + + { + int x; + mp_digit *tmpa, *tmpb, *tmpx, *tmpy; + + /* we copy the digits directly instead of using higher level functions + * since we also need to shift the digits + */ + tmpa = a->dp; + tmpb = b->dp; + + tmpx = x0.dp; + tmpy = y0.dp; + for (x = 0; x < B; x++) { + *tmpx++ = *tmpa++; + *tmpy++ = *tmpb++; + } + + tmpx = x1.dp; + for (x = B; x < a->used; x++) { + *tmpx++ = *tmpa++; + } + + tmpy = y1.dp; + for (x = B; x < b->used; x++) { + *tmpy++ = *tmpb++; + } + } + + /* only need to clamp the lower words since by definition the + * upper words x1/y1 must have a known number of digits + */ + mp_clamp(&x0); + mp_clamp(&y0); + + /* now calc the products x0y0 and x1y1 */ + /* after this x0 is no longer required, free temp [x0==t2]! */ + if (mp_mul(&x0, &y0, &x0y0) != MP_OKAY) + goto X1Y1; /* x0y0 = x0*y0 */ + if (mp_mul(&x1, &y1, &x1y1) != MP_OKAY) + goto X1Y1; /* x1y1 = x1*y1 */ + + /* now calc x1+x0 and y1+y0 */ + if (s_mp_add(&x1, &x0, &t1) != MP_OKAY) + goto X1Y1; /* t1 = x1 - x0 */ + if (s_mp_add(&y1, &y0, &x0) != MP_OKAY) + goto X1Y1; /* t2 = y1 - y0 */ + if (mp_mul(&t1, &x0, &t1) != MP_OKAY) + goto X1Y1; /* t1 = (x1 + x0) * (y1 + y0) */ + + /* add x0y0 */ + if (mp_add(&x0y0, &x1y1, &x0) != MP_OKAY) + goto X1Y1; /* t2 = x0y0 + x1y1 */ + if (s_mp_sub(&t1, &x0, &t1) != MP_OKAY) + goto X1Y1; /* t1 = (x1+x0)*(y1+y0) - (x1y1 + x0y0) */ + + /* shift by B */ + if (mp_lshd(&t1, B) != MP_OKAY) + goto X1Y1; /* t1 = (x0y0 + x1y1 - (x1-x0)*(y1-y0))<<B */ + if (mp_lshd(&x1y1, B * 2) != MP_OKAY) + goto X1Y1; /* x1y1 = x1y1 << 2*B */ + + if (mp_add(&x0y0, &t1, &t1) != MP_OKAY) + goto X1Y1; /* t1 = x0y0 + t1 */ + if (mp_add(&t1, &x1y1, c) != MP_OKAY) + goto X1Y1; /* t1 = x0y0 + t1 + x1y1 */ + + /* Algorithm succeeded set the return code to MP_OKAY */ + err = MP_OKAY; + +X1Y1: mp_clear(&x1y1); +X0Y0: mp_clear(&x0y0); +T1: mp_clear(&t1); +Y1: mp_clear(&y1); +Y0: mp_clear(&y0); +X1: mp_clear(&x1); +X0: mp_clear(&x0); +ERR: + return err; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_KARATSUBA_SQR_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* Karatsuba squaring, computes b = a*a using three + * half size squarings + * + * See comments of karatsuba_mul for details. It + * is essentially the same algorithm but merely + * tuned to perform recursive squarings. + */ +int mp_karatsuba_sqr(mp_int *a, mp_int *b) { + mp_int x0, x1, t1, t2, x0x0, x1x1; + int B, err; + + err = MP_MEM; + + /* min # of digits */ + B = a->used; + + /* now divide in two */ + B = B >> 1; + + /* init copy all the temps */ + if (mp_init_size(&x0, B) != MP_OKAY) + goto ERR; + if (mp_init_size(&x1, a->used - B) != MP_OKAY) + goto X0; + + /* init temps */ + if (mp_init_size(&t1, a->used * 2) != MP_OKAY) + goto X1; + if (mp_init_size(&t2, a->used * 2) != MP_OKAY) + goto T1; + if (mp_init_size(&x0x0, B * 2) != MP_OKAY) + goto T2; + if (mp_init_size(&x1x1, (a->used - B) * 2) != MP_OKAY) + goto X0X0; + + { + int x; + mp_digit *dst, *src; + + src = a->dp; + + /* now shift the digits */ + dst = x0.dp; + for (x = 0; x < B; x++) { + *dst++ = *src++; + } + + dst = x1.dp; + for (x = B; x < a->used; x++) { + *dst++ = *src++; + } + } + + x0.used = B; + x1.used = a->used - B; + + mp_clamp(&x0); + + /* now calc the products x0*x0 and x1*x1 */ + if (mp_sqr(&x0, &x0x0) != MP_OKAY) + goto X1X1; /* x0x0 = x0*x0 */ + if (mp_sqr(&x1, &x1x1) != MP_OKAY) + goto X1X1; /* x1x1 = x1*x1 */ + + /* now calc (x1+x0)**2 */ + if (s_mp_add(&x1, &x0, &t1) != MP_OKAY) + goto X1X1; /* t1 = x1 - x0 */ + if (mp_sqr(&t1, &t1) != MP_OKAY) + goto X1X1; /* t1 = (x1 - x0) * (x1 - x0) */ + + /* add x0y0 */ + if (s_mp_add(&x0x0, &x1x1, &t2) != MP_OKAY) + goto X1X1; /* t2 = x0x0 + x1x1 */ + if (s_mp_sub(&t1, &t2, &t1) != MP_OKAY) + goto X1X1; /* t1 = (x1+x0)**2 - (x0x0 + x1x1) */ + + /* shift by B */ + if (mp_lshd(&t1, B) != MP_OKAY) + goto X1X1; /* t1 = (x0x0 + x1x1 - (x1-x0)*(x1-x0))<<B */ + if (mp_lshd(&x1x1, B * 2) != MP_OKAY) + goto X1X1; /* x1x1 = x1x1 << 2*B */ + + if (mp_add(&x0x0, &t1, &t1) != MP_OKAY) + goto X1X1; /* t1 = x0x0 + t1 */ + if (mp_add(&t1, &x1x1, b) != MP_OKAY) + goto X1X1; /* t1 = x0x0 + t1 + x1x1 */ + + err = MP_OKAY; + +X1X1: mp_clear(&x1x1); +X0X0: mp_clear(&x0x0); +T2: mp_clear(&t2); +T1: mp_clear(&t1); +X1: mp_clear(&x1); +X0: mp_clear(&x0); +ERR: + return err; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_LCM_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* computes least common multiple as |a*b|/(a, b) */ +int mp_lcm(mp_int *a, mp_int *b, mp_int *c) { + int res; + mp_int t1, t2; + + + if ((res = mp_init_multi(&t1, &t2, NULL)) != MP_OKAY) { + return res; + } + + /* t1 = get the GCD of the two inputs */ + if ((res = mp_gcd(a, b, &t1)) != MP_OKAY) { + goto LBL_T; + } + + /* divide the smallest by the GCD */ + if (mp_cmp_mag(a, b) == MP_LT) { + /* store quotient in t2 such that t2 * b is the LCM */ + if ((res = mp_div(a, &t1, &t2, NULL)) != MP_OKAY) { + goto LBL_T; + } + res = mp_mul(b, &t2, c); + } else { + /* store quotient in t2 such that t2 * a is the LCM */ + if ((res = mp_div(b, &t1, &t2, NULL)) != MP_OKAY) { + goto LBL_T; + } + res = mp_mul(a, &t2, c); + } + + /* fix the sign to positive */ + c->sign = MP_ZPOS; + +LBL_T: + mp_clear_multi(&t1, &t2, NULL); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_LSHD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* shift left a certain amount of digits */ +int mp_lshd(mp_int *a, int b) { + int x, res; + + /* if its less than zero return */ + if (b <= 0) { + return MP_OKAY; + } + + /* grow to fit the new digits */ + if (a->alloc < (a->used + b)) { + if ((res = mp_grow(a, a->used + b)) != MP_OKAY) { + return res; + } + } + + { + mp_digit *top, *bottom; + + /* increment the used by the shift amount then copy upwards */ + a->used += b; + + /* top */ + top = a->dp + a->used - 1; + + /* base */ + bottom = (a->dp + a->used - 1) - b; + + /* much like mp_rshd this is implemented using a sliding window + * except the window goes the otherway around. Copying from + * the bottom to the top. see bn_mp_rshd.c for more info. + */ + for (x = a->used - 1; x >= b; x--) { + *top-- = *bottom--; + } + + /* zero the lower digits */ + top = a->dp; + for (x = 0; x < b; x++) { + *top++ = 0; + } + } + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_MOD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* c = a mod b, 0 <= c < b if b > 0, b < c <= 0 if b < 0 */ +int +mp_mod(mp_int *a, mp_int *b, mp_int *c) { + mp_int t; + int res; + + if ((res = mp_init(&t)) != MP_OKAY) { + return res; + } + + if ((res = mp_div(a, b, NULL, &t)) != MP_OKAY) { + mp_clear(&t); + return res; + } + + if ((mp_iszero(&t) != MP_NO) || (t.sign == b->sign)) { + res = MP_OKAY; + mp_exch(&t, c); + } else { + res = mp_add(b, &t, c); + } + + mp_clear(&t); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_MOD_2D_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* calc a value mod 2**b */ +int +mp_mod_2d(mp_int *a, int b, mp_int *c) { + int x, res; + + /* if b is <= 0 then zero the int */ + if (b <= 0) { + mp_zero(c); + return MP_OKAY; + } + + /* if the modulus is larger than the value than return */ + if (b >= (int)(a->used * DIGIT_BIT)) { + res = mp_copy(a, c); + return res; + } + + /* copy */ + if ((res = mp_copy(a, c)) != MP_OKAY) { + return res; + } + + /* zero digits above the last digit of the modulus */ + for (x = (b / DIGIT_BIT) + (((b % DIGIT_BIT) == 0) ? 0 : 1); x < c->used; x++) { + c->dp[x] = 0; + } + /* clear the digit that is not completely outside/inside the modulus */ + c->dp[b / DIGIT_BIT] &= + (mp_digit)((((mp_digit)1) << (((mp_digit)b) % DIGIT_BIT)) - ((mp_digit)1)); + mp_clamp(c); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_MOD_D_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +int +mp_mod_d(mp_int *a, mp_digit b, mp_digit *c) { + return mp_div_d(a, b, NULL, c); +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_MONTGOMERY_CALC_NORMALIZATION_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* + * shifts with subtractions when the result is greater than b. + * + * The method is slightly modified to shift B unconditionally upto just under + * the leading bit of b. This saves alot of multiple precision shifting. + */ +int mp_montgomery_calc_normalization(mp_int *a, mp_int *b) { + int x, bits, res; + + /* how many bits of last digit does b use */ + bits = mp_count_bits(b) % DIGIT_BIT; + + if (b->used > 1) { + if ((res = mp_2expt(a, ((b->used - 1) * DIGIT_BIT) + bits - 1)) != MP_OKAY) { + return res; + } + } else { + mp_set(a, 1); + bits = 1; + } + + + /* now compute C = A * B mod b */ + for (x = bits - 1; x < (int)DIGIT_BIT; x++) { + if ((res = mp_mul_2(a, a)) != MP_OKAY) { + return res; + } + if (mp_cmp_mag(a, b) != MP_LT) { + if ((res = s_mp_sub(a, b, a)) != MP_OKAY) { + return res; + } + } + } + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_MONTGOMERY_REDUCE_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* computes xR**-1 == x (mod N) via Montgomery Reduction */ +int +mp_montgomery_reduce(mp_int *x, mp_int *n, mp_digit rho) { + int ix, res, digs; + mp_digit mu; + + /* can the fast reduction [comba] method be used? + * + * Note that unlike in mul you're safely allowed *less* + * than the available columns [255 per default] since carries + * are fixed up in the inner loop. + */ + digs = (n->used * 2) + 1; + if ((digs < MP_WARRAY) && + (n->used < + (1 << ((CHAR_BIT * sizeof(mp_word)) - (2 * DIGIT_BIT))))) { + return fast_mp_montgomery_reduce(x, n, rho); + } + + /* grow the input as required */ + if (x->alloc < digs) { + if ((res = mp_grow(x, digs)) != MP_OKAY) { + return res; + } + } + x->used = digs; + + for (ix = 0; ix < n->used; ix++) { + /* mu = ai * rho mod b + * + * The value of rho must be precalculated via + * montgomery_setup() such that + * it equals -1/n0 mod b this allows the + * following inner loop to reduce the + * input one digit at a time + */ + mu = (mp_digit)(((mp_word)x->dp[ix] * (mp_word)rho) & MP_MASK); + + /* a = a + mu * m * b**i */ + { + int iy; + mp_digit *tmpn, *tmpx, u; + mp_word r; + + /* alias for digits of the modulus */ + tmpn = n->dp; + + /* alias for the digits of x [the input] */ + tmpx = x->dp + ix; + + /* set the carry to zero */ + u = 0; + + /* Multiply and add in place */ + for (iy = 0; iy < n->used; iy++) { + /* compute product and sum */ + r = ((mp_word)mu * (mp_word) * tmpn++) + + (mp_word)u + (mp_word) * tmpx; + + /* get carry */ + u = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); + + /* fix digit */ + *tmpx++ = (mp_digit)(r & ((mp_word)MP_MASK)); + } + /* At this point the ix'th digit of x should be zero */ + + + /* propagate carries upwards as required*/ + while (u != 0) { + *tmpx += u; + u = *tmpx >> DIGIT_BIT; + *tmpx++ &= MP_MASK; + } + } + } + + /* at this point the n.used'th least + * significant digits of x are all zero + * which means we can shift x to the + * right by n.used digits and the + * residue is unchanged. + */ + + /* x = x/b**n.used */ + mp_clamp(x); + mp_rshd(x, n->used); + + /* if x >= n then x = x - n */ + if (mp_cmp_mag(x, n) != MP_LT) { + return s_mp_sub(x, n, x); + } + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_MONTGOMERY_SETUP_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* setups the montgomery reduction stuff */ +int +mp_montgomery_setup(mp_int *n, mp_digit *rho) { + mp_digit x, b; + +/* fast inversion mod 2**k + * + * Based on the fact that + * + * XA = 1 (mod 2**n) => (X(2-XA)) A = 1 (mod 2**2n) + * => 2*X*A - X*X*A*A = 1 + * => 2*(1) - (1) = 1 + */ + b = n->dp[0]; + + if ((b & 1) == 0) { + return MP_VAL; + } + + x = (((b + 2) & 4) << 1) + b; /* here x*a==1 mod 2**4 */ + x *= 2 - (b * x); /* here x*a==1 mod 2**8 */ + #if !defined(MP_8BIT) + x *= 2 - (b * x); /* here x*a==1 mod 2**16 */ + #endif + #if defined(MP_64BIT) || !(defined(MP_8BIT) || defined(MP_16BIT)) + x *= 2 - (b * x); /* here x*a==1 mod 2**32 */ + #endif + #ifdef MP_64BIT + x *= 2 - (b * x); /* here x*a==1 mod 2**64 */ + #endif + + /* rho = -1/m mod b */ + *rho = (mp_digit)(((mp_word)1 << ((mp_word)DIGIT_BIT)) - x) & MP_MASK; + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_MUL_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* high level multiplication (handles sign) */ +int mp_mul(mp_int *a, mp_int *b, mp_int *c) { + int res, neg; + + neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG; + + /* use Toom-Cook? */ + #ifdef BN_MP_TOOM_MUL_C + if (MIN(a->used, b->used) >= TOOM_MUL_CUTOFF) { + res = mp_toom_mul(a, b, c); + } else + #endif + #ifdef BN_MP_KARATSUBA_MUL_C + /* use Karatsuba? */ + if (MIN(a->used, b->used) >= KARATSUBA_MUL_CUTOFF) { + res = mp_karatsuba_mul(a, b, c); + } else + #endif + { + /* can we use the fast multiplier? + * + * The fast multiplier can be used if the output will + * have less than MP_WARRAY digits and the number of + * digits won't affect carry propagation + */ + int digs = a->used + b->used + 1; + + #ifdef BN_FAST_S_MP_MUL_DIGS_C + if ((digs < MP_WARRAY) && + (MIN(a->used, b->used) <= + (1 << ((CHAR_BIT * sizeof(mp_word)) - (2 * DIGIT_BIT))))) { + res = fast_s_mp_mul_digs(a, b, c, digs); + } else + #endif + { + #ifdef BN_S_MP_MUL_DIGS_C + res = s_mp_mul(a, b, c); /* uses s_mp_mul_digs */ + #else + res = MP_VAL; + #endif + } + } + c->sign = (c->used > 0) ? neg : MP_ZPOS; + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_MUL_2_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* b = a*2 */ +int mp_mul_2(mp_int *a, mp_int *b) { + int x, res, oldused; + + /* grow to accomodate result */ + if (b->alloc < (a->used + 1)) { + if ((res = mp_grow(b, a->used + 1)) != MP_OKAY) { + return res; + } + } + + oldused = b->used; + b->used = a->used; + + { + mp_digit r, rr, *tmpa, *tmpb; + + /* alias for source */ + tmpa = a->dp; + + /* alias for dest */ + tmpb = b->dp; + + /* carry */ + r = 0; + for (x = 0; x < a->used; x++) { + /* get what will be the *next* carry bit from the + * MSB of the current digit + */ + rr = *tmpa >> ((mp_digit)(DIGIT_BIT - 1)); + + /* now shift up this digit, add in the carry [from the previous] */ + *tmpb++ = ((*tmpa++ << ((mp_digit)1)) | r) & MP_MASK; + + /* copy the carry that would be from the source + * digit into the next iteration + */ + r = rr; + } + + /* new leading digit? */ + if (r != 0) { + /* add a MSB which is always 1 at this point */ + *tmpb = 1; + ++(b->used); + } + + /* now zero any excess digits on the destination + * that we didn't write to + */ + tmpb = b->dp + b->used; + for (x = b->used; x < oldused; x++) { + *tmpb++ = 0; + } + } + b->sign = a->sign; + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_MUL_2D_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* shift left by a certain bit count */ +int mp_mul_2d(mp_int *a, int b, mp_int *c) { + mp_digit d; + int res; + + /* copy */ + if (a != c) { + if ((res = mp_copy(a, c)) != MP_OKAY) { + return res; + } + } + + if (c->alloc < (int)(c->used + (b / DIGIT_BIT) + 1)) { + if ((res = mp_grow(c, c->used + (b / DIGIT_BIT) + 1)) != MP_OKAY) { + return res; + } + } + + /* shift by as many digits in the bit count */ + if (b >= (int)DIGIT_BIT) { + if ((res = mp_lshd(c, b / DIGIT_BIT)) != MP_OKAY) { + return res; + } + } + + /* shift any bit count < DIGIT_BIT */ + d = (mp_digit)(b % DIGIT_BIT); + if (d != 0) { + mp_digit *tmpc, shift, mask, r, rr; + int x; + + /* bitmask for carries */ + mask = (((mp_digit)1) << d) - 1; + + /* shift for msbs */ + shift = DIGIT_BIT - d; + + /* alias */ + tmpc = c->dp; + + /* carry */ + r = 0; + for (x = 0; x < c->used; x++) { + /* get the higher bits of the current word */ + rr = (*tmpc >> shift) & mask; + + /* shift the current word and OR in the carry */ + *tmpc = ((*tmpc << d) | r) & MP_MASK; + ++tmpc; + + /* set the carry to the carry bits of the current word */ + r = rr; + } + + /* set final carry */ + if (r != 0) { + c->dp[(c->used)++] = r; + } + } + mp_clamp(c); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_MUL_D_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* multiply by a digit */ +int +mp_mul_d(mp_int *a, mp_digit b, mp_int *c) { + mp_digit u, *tmpa, *tmpc; + mp_word r; + int ix, res, olduse; + + /* make sure c is big enough to hold a*b */ + if (c->alloc < (a->used + 1)) { + if ((res = mp_grow(c, a->used + 1)) != MP_OKAY) { + return res; + } + } + + /* get the original destinations used count */ + olduse = c->used; + + /* set the sign */ + c->sign = a->sign; + + /* alias for a->dp [source] */ + tmpa = a->dp; + + /* alias for c->dp [dest] */ + tmpc = c->dp; + + /* zero carry */ + u = 0; + + /* compute columns */ + for (ix = 0; ix < a->used; ix++) { + /* compute product and carry sum for this term */ + r = (mp_word)u + ((mp_word) * tmpa++ *(mp_word)b); + + /* mask off higher bits to get a single digit */ + *tmpc++ = (mp_digit)(r & ((mp_word)MP_MASK)); + + /* send carry into next iteration */ + u = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); + } + + /* store final carry [if any] and increment ix offset */ + *tmpc++ = u; + ++ix; + + /* now zero digits above the top */ + while (ix++ < olduse) { + *tmpc++ = 0; + } + + /* set used count */ + c->used = a->used + 1; + mp_clamp(c); + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_MULMOD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* d = a * b (mod c) */ +int mp_mulmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d) { + int res; + mp_int t; + + if ((res = mp_init(&t)) != MP_OKAY) { + return res; + } + + if ((res = mp_mul(a, b, &t)) != MP_OKAY) { + mp_clear(&t); + return res; + } + res = mp_mod(&t, c, d); + mp_clear(&t); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_N_ROOT_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* wrapper function for mp_n_root_ex() + * computes c = (a)**(1/b) such that (c)**b <= a and (c+1)**b > a + */ +int mp_n_root(mp_int *a, mp_digit b, mp_int *c) { + return mp_n_root_ex(a, b, c, 0); +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_N_ROOT_EX_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* find the n'th root of an integer + * + * Result found such that (c)**b <= a and (c+1)**b > a + * + * This algorithm uses Newton's approximation + * x[i+1] = x[i] - f(x[i])/f'(x[i]) + * which will find the root in log(N) time where + * each step involves a fair bit. This is not meant to + * find huge roots [square and cube, etc]. + */ +int mp_n_root_ex(mp_int *a, mp_digit b, mp_int *c, int fast) { + mp_int t1, t2, t3; + int res, neg; + + /* input must be positive if b is even */ + if (((b & 1) == 0) && (a->sign == MP_NEG)) { + return MP_VAL; + } + + if ((res = mp_init(&t1)) != MP_OKAY) { + return res; + } + + if ((res = mp_init(&t2)) != MP_OKAY) { + goto LBL_T1; + } + + if ((res = mp_init(&t3)) != MP_OKAY) { + goto LBL_T2; + } + + /* if a is negative fudge the sign but keep track */ + neg = a->sign; + a->sign = MP_ZPOS; + + /* t2 = 2 */ + mp_set(&t2, 2); + + do { + /* t1 = t2 */ + if ((res = mp_copy(&t2, &t1)) != MP_OKAY) { + goto LBL_T3; + } + + /* t2 = t1 - ((t1**b - a) / (b * t1**(b-1))) */ + + /* t3 = t1**(b-1) */ + if ((res = mp_expt_d_ex(&t1, b - 1, &t3, fast)) != MP_OKAY) { + goto LBL_T3; + } + + /* numerator */ + /* t2 = t1**b */ + if ((res = mp_mul(&t3, &t1, &t2)) != MP_OKAY) { + goto LBL_T3; + } + + /* t2 = t1**b - a */ + if ((res = mp_sub(&t2, a, &t2)) != MP_OKAY) { + goto LBL_T3; + } + + /* denominator */ + /* t3 = t1**(b-1) * b */ + if ((res = mp_mul_d(&t3, b, &t3)) != MP_OKAY) { + goto LBL_T3; + } + + /* t3 = (t1**b - a)/(b * t1**(b-1)) */ + if ((res = mp_div(&t2, &t3, &t3, NULL)) != MP_OKAY) { + goto LBL_T3; + } + + if ((res = mp_sub(&t1, &t3, &t2)) != MP_OKAY) { + goto LBL_T3; + } + } while (mp_cmp(&t1, &t2) != MP_EQ); + + /* result can be off by a few so check */ + for ( ; ; ) { + if ((res = mp_expt_d_ex(&t1, b, &t2, fast)) != MP_OKAY) { + goto LBL_T3; + } + + if (mp_cmp(&t2, a) == MP_GT) { + if ((res = mp_sub_d(&t1, 1, &t1)) != MP_OKAY) { + goto LBL_T3; + } + } else { + break; + } + } + + /* reset the sign of a first */ + a->sign = neg; + + /* set the result */ + mp_exch(&t1, c); + + /* set the sign of the result */ + c->sign = neg; + + res = MP_OKAY; + +LBL_T3: mp_clear(&t3); +LBL_T2: mp_clear(&t2); +LBL_T1: mp_clear(&t1); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_NEG_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* b = -a */ +int mp_neg(mp_int *a, mp_int *b) { + int res; + + if (a != b) { + if ((res = mp_copy(a, b)) != MP_OKAY) { + return res; + } + } + + if (mp_iszero(b) != MP_YES) { + b->sign = (a->sign == MP_ZPOS) ? MP_NEG : MP_ZPOS; + } else { + b->sign = MP_ZPOS; + } + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_OR_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* OR two ints together */ +int mp_or(mp_int *a, mp_int *b, mp_int *c) { + int res, ix, px; + mp_int t, *x; + + if (a->used > b->used) { + if ((res = mp_init_copy(&t, a)) != MP_OKAY) { + return res; + } + px = b->used; + x = b; + } else { + if ((res = mp_init_copy(&t, b)) != MP_OKAY) { + return res; + } + px = a->used; + x = a; + } + + for (ix = 0; ix < px; ix++) { + t.dp[ix] |= x->dp[ix]; + } + mp_clamp(&t); + mp_exch(c, &t); + mp_clear(&t); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_PRIME_FERMAT_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* performs one Fermat test. + * + * If "a" were prime then b**a == b (mod a) since the order of + * the multiplicative sub-group would be phi(a) = a-1. That means + * it would be the same as b**(a mod (a-1)) == b**1 == b (mod a). + * + * Sets result to 1 if the congruence holds, or zero otherwise. + */ +int mp_prime_fermat(mp_int *a, mp_int *b, int *result) { + mp_int t; + int err; + + /* default to composite */ + *result = MP_NO; + + /* ensure b > 1 */ + if (mp_cmp_d(b, 1) != MP_GT) { + return MP_VAL; + } + + /* init t */ + if ((err = mp_init(&t)) != MP_OKAY) { + return err; + } + + /* compute t = b**a mod a */ + if ((err = mp_exptmod(b, a, a, &t)) != MP_OKAY) { + goto LBL_T; + } + + /* is it equal to b? */ + if (mp_cmp(&t, b) == MP_EQ) { + *result = MP_YES; + } + + err = MP_OKAY; +LBL_T: mp_clear(&t); + return err; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_PRIME_IS_DIVISIBLE_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* determines if an integers is divisible by one + * of the first PRIME_SIZE primes or not + * + * sets result to 0 if not, 1 if yes + */ +int mp_prime_is_divisible(mp_int *a, int *result) { + int err, ix; + mp_digit res; + + /* default to not */ + *result = MP_NO; + + for (ix = 0; ix < PRIME_SIZE; ix++) { + /* what is a mod LBL_prime_tab[ix] */ + if ((err = mp_mod_d(a, ltm_prime_tab[ix], &res)) != MP_OKAY) { + return err; + } + + /* is the residue zero? */ + if (res == 0) { + *result = MP_YES; + return MP_OKAY; + } + } + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_PRIME_IS_PRIME_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* performs a variable number of rounds of Miller-Rabin + * + * Probability of error after t rounds is no more than + + * + * Sets result to 1 if probably prime, 0 otherwise + */ +int mp_prime_is_prime(mp_int *a, int t, int *result) { + mp_int b; + int ix, err, res; + + /* default to no */ + *result = MP_NO; + + /* valid value of t? */ + if ((t <= 0) || (t > PRIME_SIZE)) { + return MP_VAL; + } + + /* is the input equal to one of the primes in the table? */ + for (ix = 0; ix < PRIME_SIZE; ix++) { + if (mp_cmp_d(a, ltm_prime_tab[ix]) == MP_EQ) { + *result = 1; + return MP_OKAY; + } + } + + /* first perform trial division */ + if ((err = mp_prime_is_divisible(a, &res)) != MP_OKAY) { + return err; + } + + /* return if it was trivially divisible */ + if (res == MP_YES) { + return MP_OKAY; + } + + /* now perform the miller-rabin rounds */ + if ((err = mp_init(&b)) != MP_OKAY) { + return err; + } + + for (ix = 0; ix < t; ix++) { + /* set the prime */ + mp_set(&b, ltm_prime_tab[ix]); + + if ((err = mp_prime_miller_rabin(a, &b, &res)) != MP_OKAY) { + goto LBL_B; + } + + if (res == MP_NO) { + goto LBL_B; + } + } + + /* passed the test */ + *result = MP_YES; +LBL_B: mp_clear(&b); + return err; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_PRIME_MILLER_RABIN_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* Miller-Rabin test of "a" to the base of "b" as described in + * HAC pp. 139 Algorithm 4.24 + * + * Sets result to 0 if definitely composite or 1 if probably prime. + * Randomly the chance of error is no more than 1/4 and often + * very much lower. + */ +int mp_prime_miller_rabin(mp_int *a, mp_int *b, int *result) { + mp_int n1, y, r; + int s, j, err; + + /* default */ + *result = MP_NO; + + /* ensure b > 1 */ + if (mp_cmp_d(b, 1) != MP_GT) { + return MP_VAL; + } + + /* get n1 = a - 1 */ + if ((err = mp_init_copy(&n1, a)) != MP_OKAY) { + return err; + } + if ((err = mp_sub_d(&n1, 1, &n1)) != MP_OKAY) { + goto LBL_N1; + } + + /* set 2**s * r = n1 */ + if ((err = mp_init_copy(&r, &n1)) != MP_OKAY) { + goto LBL_N1; + } + + /* count the number of least significant bits + * which are zero + */ + s = mp_cnt_lsb(&r); + + /* now divide n - 1 by 2**s */ + if ((err = mp_div_2d(&r, s, &r, NULL)) != MP_OKAY) { + goto LBL_R; + } + + /* compute y = b**r mod a */ + if ((err = mp_init(&y)) != MP_OKAY) { + goto LBL_R; + } + if ((err = mp_exptmod(b, &r, a, &y)) != MP_OKAY) { + goto LBL_Y; + } + + /* if y != 1 and y != n1 do */ + if ((mp_cmp_d(&y, 1) != MP_EQ) && (mp_cmp(&y, &n1) != MP_EQ)) { + j = 1; + /* while j <= s-1 and y != n1 */ + while ((j <= (s - 1)) && (mp_cmp(&y, &n1) != MP_EQ)) { + if ((err = mp_sqrmod(&y, a, &y)) != MP_OKAY) { + goto LBL_Y; + } + + /* if y == 1 then composite */ + if (mp_cmp_d(&y, 1) == MP_EQ) { + goto LBL_Y; + } + + ++j; + } + + /* if y != n1 then composite */ + if (mp_cmp(&y, &n1) != MP_EQ) { + goto LBL_Y; + } + } + + /* probably prime now */ + *result = MP_YES; +LBL_Y: mp_clear(&y); +LBL_R: mp_clear(&r); +LBL_N1: mp_clear(&n1); + return err; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_PRIME_NEXT_PRIME_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* finds the next prime after the number "a" using "t" trials + * of Miller-Rabin. + * + * bbs_style = 1 means the prime must be congruent to 3 mod 4 + */ +int mp_prime_next_prime(mp_int *a, int t, int bbs_style) { + int err, res = MP_NO, x, y; + mp_digit res_tab[PRIME_SIZE], step, kstep; + mp_int b; + + /* ensure t is valid */ + if ((t <= 0) || (t > PRIME_SIZE)) { + return MP_VAL; + } + + /* force positive */ + a->sign = MP_ZPOS; + + /* simple algo if a is less than the largest prime in the table */ + if (mp_cmp_d(a, ltm_prime_tab[PRIME_SIZE - 1]) == MP_LT) { + /* find which prime it is bigger than */ + for (x = PRIME_SIZE - 2; x >= 0; x--) { + if (mp_cmp_d(a, ltm_prime_tab[x]) != MP_LT) { + if (bbs_style == 1) { + /* ok we found a prime smaller or + * equal [so the next is larger] + * + * however, the prime must be + * congruent to 3 mod 4 + */ + if ((ltm_prime_tab[x + 1] & 3) != 3) { + /* scan upwards for a prime congruent to 3 mod 4 */ + for (y = x + 1; y < PRIME_SIZE; y++) { + if ((ltm_prime_tab[y] & 3) == 3) { + mp_set(a, ltm_prime_tab[y]); + return MP_OKAY; + } + } + } + } else { + mp_set(a, ltm_prime_tab[x + 1]); + return MP_OKAY; + } + } + } + /* at this point a maybe 1 */ + if (mp_cmp_d(a, 1) == MP_EQ) { + mp_set(a, 2); + return MP_OKAY; + } + /* fall through to the sieve */ + } + + /* generate a prime congruent to 3 mod 4 or 1/3 mod 4? */ + if (bbs_style == 1) { + kstep = 4; + } else { + kstep = 2; + } + + /* at this point we will use a combination of a sieve and Miller-Rabin */ + + if (bbs_style == 1) { + /* if a mod 4 != 3 subtract the correct value to make it so */ + if ((a->dp[0] & 3) != 3) { + if ((err = mp_sub_d(a, (a->dp[0] & 3) + 1, a)) != MP_OKAY) { + return err; + } + } + } else { + if (mp_iseven(a) == MP_YES) { + /* force odd */ + if ((err = mp_sub_d(a, 1, a)) != MP_OKAY) { + return err; + } + } + } + + /* generate the restable */ + for (x = 1; x < PRIME_SIZE; x++) { + if ((err = mp_mod_d(a, ltm_prime_tab[x], res_tab + x)) != MP_OKAY) { + return err; + } + } + + /* init temp used for Miller-Rabin Testing */ + if ((err = mp_init(&b)) != MP_OKAY) { + return err; + } + + for ( ; ; ) { + /* skip to the next non-trivially divisible candidate */ + step = 0; + do { + /* y == 1 if any residue was zero [e.g. cannot be prime] */ + y = 0; + + /* increase step to next candidate */ + step += kstep; + + /* compute the new residue without using division */ + for (x = 1; x < PRIME_SIZE; x++) { + /* add the step to each residue */ + res_tab[x] += kstep; + + /* subtract the modulus [instead of using division] */ + if (res_tab[x] >= ltm_prime_tab[x]) { + res_tab[x] -= ltm_prime_tab[x]; + } + + /* set flag if zero */ + if (res_tab[x] == 0) { + y = 1; + } + } + } while ((y == 1) && (step < ((((mp_digit)1) << DIGIT_BIT) - kstep))); + + /* add the step */ + if ((err = mp_add_d(a, step, a)) != MP_OKAY) { + goto LBL_ERR; + } + + /* if didn't pass sieve and step == MAX then skip test */ + if ((y == 1) && (step >= ((((mp_digit)1) << DIGIT_BIT) - kstep))) { + continue; + } + + /* is this prime? */ + for (x = 0; x < t; x++) { + mp_set(&b, ltm_prime_tab[x]); + if ((err = mp_prime_miller_rabin(a, &b, &res)) != MP_OKAY) { + goto LBL_ERR; + } + if (res == MP_NO) { + break; + } + } + + if (res == MP_YES) { + break; + } + } + + err = MP_OKAY; +LBL_ERR: + mp_clear(&b); + return err; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_PRIME_RABIN_MILLER_TRIALS_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + + +static const struct { + int k, t; +} sizes[] = { + { 128, 28 }, + { 256, 16 }, + { 384, 10 }, + { 512, 7 }, + { 640, 6 }, + { 768, 5 }, + { 896, 4 }, + { 1024, 4 } +}; + +/* returns # of RM trials required for a given bit size */ +int mp_prime_rabin_miller_trials(int size) { + int x; + + for (x = 0; x < (int)(sizeof(sizes) / (sizeof(sizes[0]))); x++) { + if (sizes[x].k == size) { + return sizes[x].t; + } else if (sizes[x].k > size) { + return (x == 0) ? sizes[0].t : sizes[x - 1].t; + } + } + return sizes[x - 1].t + 1; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_PRIME_RANDOM_EX_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* makes a truly random prime of a given size (bits), + * + * Flags are as follows: + * + * LTM_PRIME_BBS - make prime congruent to 3 mod 4 + * LTM_PRIME_SAFE - make sure (p-1)/2 is prime as well (implies LTM_PRIME_BBS) + * LTM_PRIME_2MSB_ON - make the 2nd highest bit one + * + * You have to supply a callback which fills in a buffer with random bytes. "dat" is a parameter you can + * have passed to the callback (e.g. a state or something). This function doesn't use "dat" itself + * so it can be NULL + * + */ + +/* This is possibly the mother of all prime generation functions, muahahahahaha! */ +int mp_prime_random_ex(mp_int *a, int t, int size, int flags, ltm_prime_callback cb, void *dat) { + unsigned char *tmp, maskAND, maskOR_msb, maskOR_lsb; + int res, err, bsize, maskOR_msb_offset; + + /* sanity check the input */ + if ((size <= 1) || (t <= 0)) { + return MP_VAL; + } + + /* LTM_PRIME_SAFE implies LTM_PRIME_BBS */ + if ((flags & LTM_PRIME_SAFE) != 0) { + flags |= LTM_PRIME_BBS; + } + + /* calc the byte size */ + bsize = (size >> 3) + ((size & 7) ? 1 : 0); + + /* we need a buffer of bsize bytes */ + tmp = OPT_CAST(unsigned char) XMALLOC(bsize); + if (tmp == NULL) { + return MP_MEM; + } + + /* calc the maskAND value for the MSbyte*/ + maskAND = ((size & 7) == 0) ? 0xFF : (0xFF >> (8 - (size & 7))); + + /* calc the maskOR_msb */ + maskOR_msb = 0; + maskOR_msb_offset = ((size & 7) == 1) ? 1 : 0; + if ((flags & LTM_PRIME_2MSB_ON) != 0) { + maskOR_msb |= 0x80 >> ((9 - size) & 7); + } + + /* get the maskOR_lsb */ + maskOR_lsb = 1; + if ((flags & LTM_PRIME_BBS) != 0) { + maskOR_lsb |= 3; + } + + do { + /* read the bytes */ + if (cb(tmp, bsize, dat) != bsize) { + err = MP_VAL; + goto error; + } + + /* work over the MSbyte */ + tmp[0] &= maskAND; + tmp[0] |= 1 << ((size - 1) & 7); + + /* mix in the maskORs */ + tmp[maskOR_msb_offset] |= maskOR_msb; + tmp[bsize - 1] |= maskOR_lsb; + + /* read it in */ + if ((err = mp_read_unsigned_bin(a, tmp, bsize)) != MP_OKAY) { + goto error; + } + + /* is it prime? */ + if ((err = mp_prime_is_prime(a, t, &res)) != MP_OKAY) { + goto error; + } + if (res == MP_NO) { + continue; + } + + if ((flags & LTM_PRIME_SAFE) != 0) { + /* see if (a-1)/2 is prime */ + if ((err = mp_sub_d(a, 1, a)) != MP_OKAY) { + goto error; + } + if ((err = mp_div_2(a, a)) != MP_OKAY) { + goto error; + } + + /* is it prime? */ + if ((err = mp_prime_is_prime(a, t, &res)) != MP_OKAY) { + goto error; + } + } + } while (res == MP_NO); + + if ((flags & LTM_PRIME_SAFE) != 0) { + /* restore a to the original value */ + if ((err = mp_mul_2(a, a)) != MP_OKAY) { + goto error; + } + if ((err = mp_add_d(a, 1, a)) != MP_OKAY) { + goto error; + } + } + + err = MP_OKAY; +error: + XFREE(tmp); + return err; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_RADIX_SIZE_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* returns size of ASCII reprensentation */ +int mp_radix_size(mp_int *a, int radix, int *size) { + int res, digs; + mp_int t; + mp_digit d; + + *size = 0; + + /* make sure the radix is in range */ + if ((radix < 2) || (radix > 64)) { + return MP_VAL; + } + + if (mp_iszero(a) == MP_YES) { + *size = 2; + return MP_OKAY; + } + + /* special case for binary */ + if (radix == 2) { + *size = mp_count_bits(a) + ((a->sign == MP_NEG) ? 1 : 0) + 1; + return MP_OKAY; + } + + /* digs is the digit count */ + digs = 0; + + /* if it's negative add one for the sign */ + if (a->sign == MP_NEG) { + ++digs; + } + + /* init a copy of the input */ + if ((res = mp_init_copy(&t, a)) != MP_OKAY) { + return res; + } + + /* force temp to positive */ + t.sign = MP_ZPOS; + + /* fetch out all of the digits */ + while (mp_iszero(&t) == MP_NO) { + if ((res = mp_div_d(&t, (mp_digit)radix, &t, &d)) != MP_OKAY) { + mp_clear(&t); + return res; + } + ++digs; + } + mp_clear(&t); + + /* return digs + 1, the 1 is for the NULL byte that would be required. */ + *size = digs + 1; + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_RADIX_SMAP_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* chars used in radix conversions */ +const char *mp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_RAND_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* makes a pseudo-random int of a given size */ +int +mp_rand(mp_int *a, int digits) { + int res; + mp_digit d; + + mp_zero(a); + if (digits <= 0) { + return MP_OKAY; + } + + /* first place a random non-zero digit */ + do { + d = ((mp_digit)abs(MP_GEN_RANDOM())) & MP_MASK; + } while (d == 0); + + if ((res = mp_add_d(a, d, a)) != MP_OKAY) { + return res; + } + + while (--digits > 0) { + if ((res = mp_lshd(a, 1)) != MP_OKAY) { + return res; + } + + if ((res = mp_add_d(a, ((mp_digit)abs(MP_GEN_RANDOM())), a)) != MP_OKAY) { + return res; + } + } + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_READ_RADIX_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* read a string [ASCII] in a given radix */ +int mp_read_radix(mp_int *a, const char *str, int radix) { + int y, res, neg; + char ch; + + /* zero the digit bignum */ + mp_zero(a); + + /* make sure the radix is ok */ + if ((radix < 2) || (radix > 64)) { + return MP_VAL; + } + + /* if the leading digit is a + * minus set the sign to negative. + */ + if (*str == '-') { + ++str; + neg = MP_NEG; + } else { + neg = MP_ZPOS; + } + + /* set the integer to the default of zero */ + mp_zero(a); + + /* process each digit of the string */ + while (*str != '\0') { + /* if the radix <= 36 the conversion is case insensitive + * this allows numbers like 1AB and 1ab to represent the same value + * [e.g. in hex] + */ + ch = (radix <= 36) ? (char)toupper((int)*str) : *str; + for (y = 0; y < 64; y++) { + if (ch == mp_s_rmap[y]) { + break; + } + } + + /* if the char was found in the map + * and is less than the given radix add it + * to the number, otherwise exit the loop. + */ + if (y < radix) { + if ((res = mp_mul_d(a, (mp_digit)radix, a)) != MP_OKAY) { + return res; + } + if ((res = mp_add_d(a, (mp_digit)y, a)) != MP_OKAY) { + return res; + } + } else { + break; + } + ++str; + } + + /* set the sign only if a != 0 */ + if (mp_iszero(a) != MP_YES) { + a->sign = neg; + } + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_READ_SIGNED_BIN_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* read signed bin, big endian, first byte is 0==positive or 1==negative */ +int mp_read_signed_bin(mp_int *a, const unsigned char *b, int c) { + int res; + + /* read magnitude */ + if ((res = mp_read_unsigned_bin(a, b + 1, c - 1)) != MP_OKAY) { + return res; + } + + /* first byte is 0 for positive, non-zero for negative */ + if (b[0] == 0) { + a->sign = MP_ZPOS; + } else { + a->sign = MP_NEG; + } + + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_READ_UNSIGNED_BIN_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* reads a unsigned char array, assumes the msb is stored first [big endian] */ +int mp_read_unsigned_bin(mp_int *a, const unsigned char *b, int c) { + int res; + + /* make sure there are at least two digits */ + if (a->alloc < 2) { + if ((res = mp_grow(a, 2)) != MP_OKAY) { + return res; + } + } + + /* zero the int */ + mp_zero(a); + + /* read the bytes in */ + while (c-- > 0) { + if ((res = mp_mul_2d(a, 8, a)) != MP_OKAY) { + return res; + } + + #ifndef MP_8BIT + a->dp[0] |= *b++; + a->used += 1; + #else + a->dp[0] = (*b & MP_MASK); + a->dp[1] |= ((*b++ >> 7U) & 1); + a->used += 2; + #endif + } + mp_clamp(a); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_REDUCE_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* reduces x mod m, assumes 0 < x < m**2, mu is + * precomputed via mp_reduce_setup. + * From HAC pp.604 Algorithm 14.42 + */ +int mp_reduce(mp_int *x, mp_int *m, mp_int *mu) { + mp_int q; + int res, um = m->used; + + /* q = x */ + if ((res = mp_init_copy(&q, x)) != MP_OKAY) { + return res; + } + + /* q1 = x / b**(k-1) */ + mp_rshd(&q, um - 1); + + /* according to HAC this optimization is ok */ + if (((mp_digit)um) > (((mp_digit)1) << (DIGIT_BIT - 1))) { + if ((res = mp_mul(&q, mu, &q)) != MP_OKAY) { + goto CLEANUP; + } + } else { + #ifdef BN_S_MP_MUL_HIGH_DIGS_C + if ((res = s_mp_mul_high_digs(&q, mu, &q, um)) != MP_OKAY) { + goto CLEANUP; + } + #elif defined(BN_FAST_S_MP_MUL_HIGH_DIGS_C) + if ((res = fast_s_mp_mul_high_digs(&q, mu, &q, um)) != MP_OKAY) { + goto CLEANUP; + } + #else + { + res = MP_VAL; + goto CLEANUP; + } + #endif + } + + /* q3 = q2 / b**(k+1) */ + mp_rshd(&q, um + 1); + + /* x = x mod b**(k+1), quick (no division) */ + if ((res = mp_mod_2d(x, DIGIT_BIT * (um + 1), x)) != MP_OKAY) { + goto CLEANUP; + } + + /* q = q * m mod b**(k+1), quick (no division) */ + if ((res = s_mp_mul_digs(&q, m, &q, um + 1)) != MP_OKAY) { + goto CLEANUP; + } + + /* x = x - q */ + if ((res = mp_sub(x, &q, x)) != MP_OKAY) { + goto CLEANUP; + } + + /* If x < 0, add b**(k+1) to it */ + if (mp_cmp_d(x, 0) == MP_LT) { + mp_set(&q, 1); + if ((res = mp_lshd(&q, um + 1)) != MP_OKAY) + goto CLEANUP; + if ((res = mp_add(x, &q, x)) != MP_OKAY) + goto CLEANUP; + } + + /* Back off if it's too big */ + while (mp_cmp(x, m) != MP_LT) { + if ((res = s_mp_sub(x, m, x)) != MP_OKAY) { + goto CLEANUP; + } + } + +CLEANUP: + mp_clear(&q); + + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_REDUCE_2K_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* reduces a modulo n where n is of the form 2**p - d */ +int mp_reduce_2k(mp_int *a, mp_int *n, mp_digit d) { + mp_int q; + int p, res; + + if ((res = mp_init(&q)) != MP_OKAY) { + return res; + } + + p = mp_count_bits(n); +top: + /* q = a/2**p, a = a mod 2**p */ + if ((res = mp_div_2d(a, p, &q, a)) != MP_OKAY) { + goto ERR; + } + + if (d != 1) { + /* q = q * d */ + if ((res = mp_mul_d(&q, d, &q)) != MP_OKAY) { + goto ERR; + } + } + + /* a = a + q */ + if ((res = s_mp_add(a, &q, a)) != MP_OKAY) { + goto ERR; + } + + if (mp_cmp_mag(a, n) != MP_LT) { + if ((res = s_mp_sub(a, n, a)) != MP_OKAY) { + goto ERR; + } + goto top; + } + +ERR: + mp_clear(&q); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_REDUCE_2K_L_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* reduces a modulo n where n is of the form 2**p - d + This differs from reduce_2k since "d" can be larger + than a single digit. + */ +int mp_reduce_2k_l(mp_int *a, mp_int *n, mp_int *d) { + mp_int q; + int p, res; + + if ((res = mp_init(&q)) != MP_OKAY) { + return res; + } + + p = mp_count_bits(n); +top: + /* q = a/2**p, a = a mod 2**p */ + if ((res = mp_div_2d(a, p, &q, a)) != MP_OKAY) { + goto ERR; + } + + /* q = q * d */ + if ((res = mp_mul(&q, d, &q)) != MP_OKAY) { + goto ERR; + } + + /* a = a + q */ + if ((res = s_mp_add(a, &q, a)) != MP_OKAY) { + goto ERR; + } + + if (mp_cmp_mag(a, n) != MP_LT) { + if ((res = s_mp_sub(a, n, a)) != MP_OKAY) { + goto ERR; + } + goto top; + } + +ERR: + mp_clear(&q); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_REDUCE_2K_SETUP_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* determines the setup value */ +int mp_reduce_2k_setup(mp_int *a, mp_digit *d) { + int res, p; + mp_int tmp; + + if ((res = mp_init(&tmp)) != MP_OKAY) { + return res; + } + + p = mp_count_bits(a); + if ((res = mp_2expt(&tmp, p)) != MP_OKAY) { + mp_clear(&tmp); + return res; + } + + if ((res = s_mp_sub(&tmp, a, &tmp)) != MP_OKAY) { + mp_clear(&tmp); + return res; + } + + *d = tmp.dp[0]; + mp_clear(&tmp); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_REDUCE_2K_SETUP_L_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* determines the setup value */ +int mp_reduce_2k_setup_l(mp_int *a, mp_int *d) { + int res; + mp_int tmp; + + if ((res = mp_init(&tmp)) != MP_OKAY) { + return res; + } + + if ((res = mp_2expt(&tmp, mp_count_bits(a))) != MP_OKAY) { + goto ERR; + } + + if ((res = s_mp_sub(&tmp, a, d)) != MP_OKAY) { + goto ERR; + } + +ERR: + mp_clear(&tmp); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_REDUCE_IS_2K_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* determines if mp_reduce_2k can be used */ +int mp_reduce_is_2k(mp_int *a) { + int ix, iy, iw; + mp_digit iz; + + if (a->used == 0) { + return MP_NO; + } else if (a->used == 1) { + return MP_YES; + } else if (a->used > 1) { + iy = mp_count_bits(a); + iz = 1; + iw = 1; + + /* Test every bit from the second digit up, must be 1 */ + for (ix = DIGIT_BIT; ix < iy; ix++) { + if ((a->dp[iw] & iz) == 0) { + return MP_NO; + } + iz <<= 1; + if (iz > (mp_digit)MP_MASK) { + ++iw; + iz = 1; + } + } + } + return MP_YES; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_REDUCE_IS_2K_L_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* determines if reduce_2k_l can be used */ +int mp_reduce_is_2k_l(mp_int *a) { + int ix, iy; + + if (a->used == 0) { + return MP_NO; + } else if (a->used == 1) { + return MP_YES; + } else if (a->used > 1) { + /* if more than half of the digits are -1 we're sold */ + for (iy = ix = 0; ix < a->used; ix++) { + if (a->dp[ix] == MP_MASK) { + ++iy; + } + } + return (iy >= (a->used / 2)) ? MP_YES : MP_NO; + } + return MP_NO; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_REDUCE_SETUP_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* pre-calculate the value required for Barrett reduction + * For a given modulus "b" it calulates the value required in "a" + */ +int mp_reduce_setup(mp_int *a, mp_int *b) { + int res; + + if ((res = mp_2expt(a, b->used * 2 * DIGIT_BIT)) != MP_OKAY) { + return res; + } + return mp_div(a, b, a, NULL); +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_RSHD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* shift right a certain amount of digits */ +void mp_rshd(mp_int *a, int b) { + int x; + + /* if b <= 0 then ignore it */ + if (b <= 0) { + return; + } + + /* if b > used then simply zero it and return */ + if (a->used <= b) { + mp_zero(a); + return; + } + + { + mp_digit *bottom, *top; + + /* shift the digits down */ + + /* bottom */ + bottom = a->dp; + + /* top [offset into digits] */ + top = a->dp + b; + + /* this is implemented as a sliding window where + * the window is b-digits long and digits from + * the top of the window are copied to the bottom + * + * e.g. + + b-2 | b-1 | b0 | b1 | b2 | ... | bb | ----> + /\ | ----> + **\-------------------/ ----> + */ + for (x = 0; x < (a->used - b); x++) { + *bottom++ = *top++; + } + + /* zero the top digits */ + for ( ; x < a->used; x++) { + *bottom++ = 0; + } + } + + /* remove excess digits */ + a->used -= b; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_SET_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* set to a digit */ +void mp_set(mp_int *a, mp_digit b) { + mp_zero(a); + a->dp[0] = b & MP_MASK; + a->used = (a->dp[0] != 0) ? 1 : 0; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_SET_INT_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* set a 32-bit const */ +int mp_set_int(mp_int *a, unsigned long b) { + int x, res; + + mp_zero(a); + + /* set four bits at a time */ + for (x = 0; x < 8; x++) { + /* shift the number up four bits */ + if ((res = mp_mul_2d(a, 4, a)) != MP_OKAY) { + return res; + } + + /* OR in the top four bits of the source */ + a->dp[0] |= (b >> 28) & 15; + + /* shift the source up to the next four bits */ + b <<= 4; + + /* ensure that digits are not clamped off */ + a->used += 1; + } + mp_clamp(a); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_SET_LONG_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* set a platform dependent unsigned long int */ +MP_SET_XLONG(mp_set_long, unsigned long) +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_SET_LONG_LONG_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* set a platform dependent unsigned long long int */ +MP_SET_XLONG(mp_set_long_long, unsigned long long) +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_SHRINK_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* shrink a bignum */ +int mp_shrink(mp_int *a) { + mp_digit *tmp; + int used = 1; + + if (a->used > 0) { + used = a->used; + } + + if (a->alloc != used) { + if ((tmp = OPT_CAST(mp_digit) XREALLOC(a->dp, sizeof(mp_digit) * used)) == NULL) { + return MP_MEM; + } + a->dp = tmp; + a->alloc = used; + } + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_SIGNED_BIN_SIZE_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* get the size for an signed equivalent */ +int mp_signed_bin_size(mp_int *a) { + return 1 + mp_unsigned_bin_size(a); +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_SQR_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* computes b = a*a */ +int +mp_sqr(mp_int *a, mp_int *b) { + int res; + + #ifdef BN_MP_TOOM_SQR_C + /* use Toom-Cook? */ + if (a->used >= TOOM_SQR_CUTOFF) { + res = mp_toom_sqr(a, b); + /* Karatsuba? */ + } else + #endif + #ifdef BN_MP_KARATSUBA_SQR_C + if (a->used >= KARATSUBA_SQR_CUTOFF) { + res = mp_karatsuba_sqr(a, b); + } else + #endif + { + #ifdef BN_FAST_S_MP_SQR_C + /* can we use the fast comba multiplier? */ + if ((((a->used * 2) + 1) < MP_WARRAY) && + (a->used < + (1 << (((sizeof(mp_word) * CHAR_BIT) - (2 * DIGIT_BIT)) - 1)))) { + res = fast_s_mp_sqr(a, b); + } else + #endif + { + #ifdef BN_S_MP_SQR_C + res = s_mp_sqr(a, b); + #else + res = MP_VAL; + #endif + } + } + b->sign = MP_ZPOS; + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_SQRMOD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* c = a * a (mod b) */ +int +mp_sqrmod(mp_int *a, mp_int *b, mp_int *c) { + int res; + mp_int t; + + if ((res = mp_init(&t)) != MP_OKAY) { + return res; + } + + if ((res = mp_sqr(a, &t)) != MP_OKAY) { + mp_clear(&t); + return res; + } + res = mp_mod(&t, b, c); + mp_clear(&t); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_SQRT_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* this function is less generic than mp_n_root, simpler and faster */ +int mp_sqrt(mp_int *arg, mp_int *ret) { + int res; + mp_int t1, t2; + + /* must be positive */ + if (arg->sign == MP_NEG) { + return MP_VAL; + } + + /* easy out */ + if (mp_iszero(arg) == MP_YES) { + mp_zero(ret); + return MP_OKAY; + } + + if ((res = mp_init_copy(&t1, arg)) != MP_OKAY) { + return res; + } + + if ((res = mp_init(&t2)) != MP_OKAY) { + goto E2; + } + + /* First approx. (not very bad for large arg) */ + mp_rshd(&t1, t1.used / 2); + + /* t1 > 0 */ + if ((res = mp_div(arg, &t1, &t2, NULL)) != MP_OKAY) { + goto E1; + } + if ((res = mp_add(&t1, &t2, &t1)) != MP_OKAY) { + goto E1; + } + if ((res = mp_div_2(&t1, &t1)) != MP_OKAY) { + goto E1; + } + /* And now t1 > sqrt(arg) */ + do { + if ((res = mp_div(arg, &t1, &t2, NULL)) != MP_OKAY) { + goto E1; + } + if ((res = mp_add(&t1, &t2, &t1)) != MP_OKAY) { + goto E1; + } + if ((res = mp_div_2(&t1, &t1)) != MP_OKAY) { + goto E1; + } + /* t1 >= sqrt(arg) >= t2 at this point */ + } while (mp_cmp_mag(&t1, &t2) == MP_GT); + + mp_exch(&t1, ret); + +E1: mp_clear(&t2); +E2: mp_clear(&t1); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_SQRTMOD_PRIME_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +/* Tonelli-Shanks algorithm + * https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm + * https://gmplib.org/list-archives/gmp-discuss/2013-April/005300.html + * + */ + +int mp_sqrtmod_prime(mp_int *n, mp_int *prime, mp_int *ret) { + int res, legendre; + mp_int t1, C, Q, S, Z, M, T, R, two; + mp_digit i; + + /* first handle the simple cases */ + if (mp_cmp_d(n, 0) == MP_EQ) { + mp_zero(ret); + return MP_OKAY; + } + if (mp_cmp_d(prime, 2) == MP_EQ) return MP_VAL; /* prime must be odd */ + if ((res = mp_jacobi(n, prime, &legendre)) != MP_OKAY) return res; + if (legendre == -1) return MP_VAL; /* quadratic non-residue mod prime */ + + if ((res = mp_init_multi(&t1, &C, &Q, &S, &Z, &M, &T, &R, &two, NULL)) != MP_OKAY) { + return res; + } + + /* SPECIAL CASE: if prime mod 4 == 3 + * compute directly: res = n^(prime+1)/4 mod prime + * Handbook of Applied Cryptography algorithm 3.36 + */ + if ((res = mp_mod_d(prime, 4, &i)) != MP_OKAY) goto cleanup; + if (i == 3) { + if ((res = mp_add_d(prime, 1, &t1)) != MP_OKAY) goto cleanup; + if ((res = mp_div_2(&t1, &t1)) != MP_OKAY) goto cleanup; + if ((res = mp_div_2(&t1, &t1)) != MP_OKAY) goto cleanup; + if ((res = mp_exptmod(n, &t1, prime, ret)) != MP_OKAY) goto cleanup; + res = MP_OKAY; + goto cleanup; + } + + /* NOW: Tonelli-Shanks algorithm */ + + /* factor out powers of 2 from prime-1, defining Q and S as: prime-1 = Q*2^S */ + if ((res = mp_copy(prime, &Q)) != MP_OKAY) goto cleanup; + if ((res = mp_sub_d(&Q, 1, &Q)) != MP_OKAY) goto cleanup; + /* Q = prime - 1 */ + mp_zero(&S); + /* S = 0 */ + while (mp_iseven(&Q) != MP_NO) { + if ((res = mp_div_2(&Q, &Q)) != MP_OKAY) goto cleanup; + /* Q = Q / 2 */ + if ((res = mp_add_d(&S, 1, &S)) != MP_OKAY) goto cleanup; + /* S = S + 1 */ + } + + /* find a Z such that the Legendre symbol (Z|prime) == -1 */ + if ((res = mp_set_int(&Z, 2)) != MP_OKAY) goto cleanup; + /* Z = 2 */ + while (1) { + if ((res = mp_jacobi(&Z, prime, &legendre)) != MP_OKAY) goto cleanup; + if (legendre == -1) break; + if ((res = mp_add_d(&Z, 1, &Z)) != MP_OKAY) goto cleanup; + /* Z = Z + 1 */ + } + + if ((res = mp_exptmod(&Z, &Q, prime, &C)) != MP_OKAY) goto cleanup; + /* C = Z ^ Q mod prime */ + if ((res = mp_add_d(&Q, 1, &t1)) != MP_OKAY) goto cleanup; + if ((res = mp_div_2(&t1, &t1)) != MP_OKAY) goto cleanup; + /* t1 = (Q + 1) / 2 */ + if ((res = mp_exptmod(n, &t1, prime, &R)) != MP_OKAY) goto cleanup; + /* R = n ^ ((Q + 1) / 2) mod prime */ + if ((res = mp_exptmod(n, &Q, prime, &T)) != MP_OKAY) goto cleanup; + /* T = n ^ Q mod prime */ + if ((res = mp_copy(&S, &M)) != MP_OKAY) goto cleanup; + /* M = S */ + if ((res = mp_set_int(&two, 2)) != MP_OKAY) goto cleanup; + + res = MP_VAL; + while (1) { + if ((res = mp_copy(&T, &t1)) != MP_OKAY) goto cleanup; + i = 0; + while (1) { + if (mp_cmp_d(&t1, 1) == MP_EQ) break; + if ((res = mp_exptmod(&t1, &two, prime, &t1)) != MP_OKAY) goto cleanup; + i++; + } + if (i == 0) { + if ((res = mp_copy(&R, ret)) != MP_OKAY) goto cleanup; + res = MP_OKAY; + goto cleanup; + } + if ((res = mp_sub_d(&M, i, &t1)) != MP_OKAY) goto cleanup; + if ((res = mp_sub_d(&t1, 1, &t1)) != MP_OKAY) goto cleanup; + if ((res = mp_exptmod(&two, &t1, prime, &t1)) != MP_OKAY) goto cleanup; + /* t1 = 2 ^ (M - i - 1) */ + if ((res = mp_exptmod(&C, &t1, prime, &t1)) != MP_OKAY) goto cleanup; + /* t1 = C ^ (2 ^ (M - i - 1)) mod prime */ + if ((res = mp_sqrmod(&t1, prime, &C)) != MP_OKAY) goto cleanup; + /* C = (t1 * t1) mod prime */ + if ((res = mp_mulmod(&R, &t1, prime, &R)) != MP_OKAY) goto cleanup; + /* R = (R * t1) mod prime */ + if ((res = mp_mulmod(&T, &C, prime, &T)) != MP_OKAY) goto cleanup; + /* T = (T * C) mod prime */ + mp_set(&M, i); + /* M = i */ + } + +cleanup: + mp_clear_multi(&t1, &C, &Q, &S, &Z, &M, &T, &R, &two, NULL); + return res; +} +#endif + + + +#ifdef BN_MP_SUB_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* high level subtraction (handles signs) */ +int +mp_sub(mp_int *a, mp_int *b, mp_int *c) { + int sa, sb, res; + + sa = a->sign; + sb = b->sign; + + if (sa != sb) { + /* subtract a negative from a positive, OR */ + /* subtract a positive from a negative. */ + /* In either case, ADD their magnitudes, */ + /* and use the sign of the first number. */ + c->sign = sa; + res = s_mp_add(a, b, c); + } else { + /* subtract a positive from a positive, OR */ + /* subtract a negative from a negative. */ + /* First, take the difference between their */ + /* magnitudes, then... */ + if (mp_cmp_mag(a, b) != MP_LT) { + /* Copy the sign from the first */ + c->sign = sa; + /* The first has a larger or equal magnitude */ + res = s_mp_sub(a, b, c); + } else { + /* The result has the *opposite* sign from */ + /* the first number. */ + c->sign = (sa == MP_ZPOS) ? MP_NEG : MP_ZPOS; + /* The second has a larger magnitude */ + res = s_mp_sub(b, a, c); + } + } + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_SUB_D_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* single digit subtraction */ +int +mp_sub_d(mp_int *a, mp_digit b, mp_int *c) { + mp_digit *tmpa, *tmpc, mu; + int res, ix, oldused; + + /* grow c as required */ + if (c->alloc < (a->used + 1)) { + if ((res = mp_grow(c, a->used + 1)) != MP_OKAY) { + return res; + } + } + + /* if a is negative just do an unsigned + * addition [with fudged signs] + */ + if (a->sign == MP_NEG) { + a->sign = MP_ZPOS; + res = mp_add_d(a, b, c); + a->sign = c->sign = MP_NEG; + + /* clamp */ + mp_clamp(c); + + return res; + } + + /* setup regs */ + oldused = c->used; + tmpa = a->dp; + tmpc = c->dp; + + /* if a <= b simply fix the single digit */ + if (((a->used == 1) && (a->dp[0] <= b)) || (a->used == 0)) { + if (a->used == 1) { + *tmpc++ = b - *tmpa; + } else { + *tmpc++ = b; + } + ix = 1; + + /* negative/1digit */ + c->sign = MP_NEG; + c->used = 1; + } else { + /* positive/size */ + c->sign = MP_ZPOS; + c->used = a->used; + + /* subtract first digit */ + *tmpc = *tmpa++ - b; + mu = *tmpc >> ((sizeof(mp_digit) * CHAR_BIT) - 1); + *tmpc++ &= MP_MASK; + + /* handle rest of the digits */ + for (ix = 1; ix < a->used; ix++) { + *tmpc = *tmpa++ - mu; + mu = *tmpc >> ((sizeof(mp_digit) * CHAR_BIT) - 1); + *tmpc++ &= MP_MASK; + } + } + + /* zero excess digits */ + while (ix++ < oldused) { + *tmpc++ = 0; + } + mp_clamp(c); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_SUBMOD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* d = a - b (mod c) */ +int +mp_submod(mp_int *a, mp_int *b, mp_int *c, mp_int *d) { + int res; + mp_int t; + + + if ((res = mp_init(&t)) != MP_OKAY) { + return res; + } + + if ((res = mp_sub(a, b, &t)) != MP_OKAY) { + mp_clear(&t); + return res; + } + res = mp_mod(&t, c, d); + mp_clear(&t); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_TO_SIGNED_BIN_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* store in signed [big endian] format */ +int mp_to_signed_bin(mp_int *a, unsigned char *b) { + int res; + + if ((res = mp_to_unsigned_bin(a, b + 1)) != MP_OKAY) { + return res; + } + b[0] = (a->sign == MP_ZPOS) ? (unsigned char)0 : (unsigned char)1; + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_TO_SIGNED_BIN_N_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* store in signed [big endian] format */ +int mp_to_signed_bin_n(mp_int *a, unsigned char *b, unsigned long *outlen) { + if (*outlen < (unsigned long)mp_signed_bin_size(a)) { + return MP_VAL; + } + *outlen = mp_signed_bin_size(a); + return mp_to_signed_bin(a, b); +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_TO_UNSIGNED_BIN_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* store in unsigned [big endian] format */ +int mp_to_unsigned_bin(mp_int *a, unsigned char *b) { + int x, res; + mp_int t; + + if ((res = mp_init_copy(&t, a)) != MP_OKAY) { + return res; + } + + x = 0; + while (mp_iszero(&t) == MP_NO) { + #ifndef MP_8BIT + b[x++] = (unsigned char)(t.dp[0] & 255); + #else + b[x++] = (unsigned char)(t.dp[0] | ((t.dp[1] & 0x01) << 7)); + #endif + if ((res = mp_div_2d(&t, 8, &t, NULL)) != MP_OKAY) { + mp_clear(&t); + return res; + } + } + bn_reverse(b, x); + mp_clear(&t); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_TOOM_MUL_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* multiplication using the Toom-Cook 3-way algorithm + * + * Much more complicated than Karatsuba but has a lower + * asymptotic running time of O(N**1.464). This algorithm is + * only particularly useful on VERY large inputs + * (we're talking 1000s of digits here...). + */ +int mp_toom_mul(mp_int *a, mp_int *b, mp_int *c) { + mp_int w0, w1, w2, w3, w4, tmp1, tmp2, a0, a1, a2, b0, b1, b2; + int res, B; + + /* init temps */ + if ((res = mp_init_multi(&w0, &w1, &w2, &w3, &w4, + &a0, &a1, &a2, &b0, &b1, + &b2, &tmp1, &tmp2, NULL)) != MP_OKAY) { + return res; + } + + /* B */ + B = MIN(a->used, b->used) / 3; + + /* a = a2 * B**2 + a1 * B + a0 */ + if ((res = mp_mod_2d(a, DIGIT_BIT * B, &a0)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_copy(a, &a1)) != MP_OKAY) { + goto ERR; + } + mp_rshd(&a1, B); + if ((res = mp_mod_2d(&a1, DIGIT_BIT * B, &a1)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_copy(a, &a2)) != MP_OKAY) { + goto ERR; + } + mp_rshd(&a2, B * 2); + + /* b = b2 * B**2 + b1 * B + b0 */ + if ((res = mp_mod_2d(b, DIGIT_BIT * B, &b0)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_copy(b, &b1)) != MP_OKAY) { + goto ERR; + } + mp_rshd(&b1, B); + (void)mp_mod_2d(&b1, DIGIT_BIT * B, &b1); + + if ((res = mp_copy(b, &b2)) != MP_OKAY) { + goto ERR; + } + mp_rshd(&b2, B * 2); + + /* w0 = a0*b0 */ + if ((res = mp_mul(&a0, &b0, &w0)) != MP_OKAY) { + goto ERR; + } + + /* w4 = a2 * b2 */ + if ((res = mp_mul(&a2, &b2, &w4)) != MP_OKAY) { + goto ERR; + } + + /* w1 = (a2 + 2(a1 + 2a0))(b2 + 2(b1 + 2b0)) */ + if ((res = mp_mul_2(&a0, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul_2(&tmp1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a2, &tmp1)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_mul_2(&b0, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp2, &b1, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul_2(&tmp2, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp2, &b2, &tmp2)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_mul(&tmp1, &tmp2, &w1)) != MP_OKAY) { + goto ERR; + } + + /* w3 = (a0 + 2(a1 + 2a2))(b0 + 2(b1 + 2b2)) */ + if ((res = mp_mul_2(&a2, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul_2(&tmp1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a0, &tmp1)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_mul_2(&b2, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp2, &b1, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul_2(&tmp2, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp2, &b0, &tmp2)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_mul(&tmp1, &tmp2, &w3)) != MP_OKAY) { + goto ERR; + } + + + /* w2 = (a2 + a1 + a0)(b2 + b1 + b0) */ + if ((res = mp_add(&a2, &a1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a0, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&b2, &b1, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp2, &b0, &tmp2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul(&tmp1, &tmp2, &w2)) != MP_OKAY) { + goto ERR; + } + + /* now solve the matrix + + 0 0 0 0 1 + 1 2 4 8 16 + 1 1 1 1 1 + 16 8 4 2 1 + 1 0 0 0 0 + + using 12 subtractions, 4 shifts, + 2 small divisions and 1 small multiplication + */ + + /* r1 - r4 */ + if ((res = mp_sub(&w1, &w4, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - r0 */ + if ((res = mp_sub(&w3, &w0, &w3)) != MP_OKAY) { + goto ERR; + } + /* r1/2 */ + if ((res = mp_div_2(&w1, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3/2 */ + if ((res = mp_div_2(&w3, &w3)) != MP_OKAY) { + goto ERR; + } + /* r2 - r0 - r4 */ + if ((res = mp_sub(&w2, &w0, &w2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w2, &w4, &w2)) != MP_OKAY) { + goto ERR; + } + /* r1 - r2 */ + if ((res = mp_sub(&w1, &w2, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - r2 */ + if ((res = mp_sub(&w3, &w2, &w3)) != MP_OKAY) { + goto ERR; + } + /* r1 - 8r0 */ + if ((res = mp_mul_2d(&w0, 3, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w1, &tmp1, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - 8r4 */ + if ((res = mp_mul_2d(&w4, 3, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w3, &tmp1, &w3)) != MP_OKAY) { + goto ERR; + } + /* 3r2 - r1 - r3 */ + if ((res = mp_mul_d(&w2, 3, &w2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w2, &w1, &w2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w2, &w3, &w2)) != MP_OKAY) { + goto ERR; + } + /* r1 - r2 */ + if ((res = mp_sub(&w1, &w2, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - r2 */ + if ((res = mp_sub(&w3, &w2, &w3)) != MP_OKAY) { + goto ERR; + } + /* r1/3 */ + if ((res = mp_div_3(&w1, &w1, NULL)) != MP_OKAY) { + goto ERR; + } + /* r3/3 */ + if ((res = mp_div_3(&w3, &w3, NULL)) != MP_OKAY) { + goto ERR; + } + + /* at this point shift W[n] by B*n */ + if ((res = mp_lshd(&w1, 1 * B)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_lshd(&w2, 2 * B)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_lshd(&w3, 3 * B)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_lshd(&w4, 4 * B)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_add(&w0, &w1, c)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&w2, &w3, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&w4, &tmp1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, c, c)) != MP_OKAY) { + goto ERR; + } + +ERR: + mp_clear_multi(&w0, &w1, &w2, &w3, &w4, + &a0, &a1, &a2, &b0, &b1, + &b2, &tmp1, &tmp2, NULL); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_TOOM_SQR_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* squaring using Toom-Cook 3-way algorithm */ +int +mp_toom_sqr(mp_int *a, mp_int *b) { + mp_int w0, w1, w2, w3, w4, tmp1, a0, a1, a2; + int res, B; + + /* init temps */ + if ((res = mp_init_multi(&w0, &w1, &w2, &w3, &w4, &a0, &a1, &a2, &tmp1, NULL)) != MP_OKAY) { + return res; + } + + /* B */ + B = a->used / 3; + + /* a = a2 * B**2 + a1 * B + a0 */ + if ((res = mp_mod_2d(a, DIGIT_BIT * B, &a0)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_copy(a, &a1)) != MP_OKAY) { + goto ERR; + } + mp_rshd(&a1, B); + if ((res = mp_mod_2d(&a1, DIGIT_BIT * B, &a1)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_copy(a, &a2)) != MP_OKAY) { + goto ERR; + } + mp_rshd(&a2, B * 2); + + /* w0 = a0*a0 */ + if ((res = mp_sqr(&a0, &w0)) != MP_OKAY) { + goto ERR; + } + + /* w4 = a2 * a2 */ + if ((res = mp_sqr(&a2, &w4)) != MP_OKAY) { + goto ERR; + } + + /* w1 = (a2 + 2(a1 + 2a0))**2 */ + if ((res = mp_mul_2(&a0, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul_2(&tmp1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a2, &tmp1)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_sqr(&tmp1, &w1)) != MP_OKAY) { + goto ERR; + } + + /* w3 = (a0 + 2(a1 + 2a2))**2 */ + if ((res = mp_mul_2(&a2, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_mul_2(&tmp1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a0, &tmp1)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_sqr(&tmp1, &w3)) != MP_OKAY) { + goto ERR; + } + + + /* w2 = (a2 + a1 + a0)**2 */ + if ((res = mp_add(&a2, &a1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, &a0, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sqr(&tmp1, &w2)) != MP_OKAY) { + goto ERR; + } + + /* now solve the matrix + + 0 0 0 0 1 + 1 2 4 8 16 + 1 1 1 1 1 + 16 8 4 2 1 + 1 0 0 0 0 + + using 12 subtractions, 4 shifts, 2 small divisions and 1 small multiplication. + */ + + /* r1 - r4 */ + if ((res = mp_sub(&w1, &w4, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - r0 */ + if ((res = mp_sub(&w3, &w0, &w3)) != MP_OKAY) { + goto ERR; + } + /* r1/2 */ + if ((res = mp_div_2(&w1, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3/2 */ + if ((res = mp_div_2(&w3, &w3)) != MP_OKAY) { + goto ERR; + } + /* r2 - r0 - r4 */ + if ((res = mp_sub(&w2, &w0, &w2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w2, &w4, &w2)) != MP_OKAY) { + goto ERR; + } + /* r1 - r2 */ + if ((res = mp_sub(&w1, &w2, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - r2 */ + if ((res = mp_sub(&w3, &w2, &w3)) != MP_OKAY) { + goto ERR; + } + /* r1 - 8r0 */ + if ((res = mp_mul_2d(&w0, 3, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w1, &tmp1, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - 8r4 */ + if ((res = mp_mul_2d(&w4, 3, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w3, &tmp1, &w3)) != MP_OKAY) { + goto ERR; + } + /* 3r2 - r1 - r3 */ + if ((res = mp_mul_d(&w2, 3, &w2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w2, &w1, &w2)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_sub(&w2, &w3, &w2)) != MP_OKAY) { + goto ERR; + } + /* r1 - r2 */ + if ((res = mp_sub(&w1, &w2, &w1)) != MP_OKAY) { + goto ERR; + } + /* r3 - r2 */ + if ((res = mp_sub(&w3, &w2, &w3)) != MP_OKAY) { + goto ERR; + } + /* r1/3 */ + if ((res = mp_div_3(&w1, &w1, NULL)) != MP_OKAY) { + goto ERR; + } + /* r3/3 */ + if ((res = mp_div_3(&w3, &w3, NULL)) != MP_OKAY) { + goto ERR; + } + + /* at this point shift W[n] by B*n */ + if ((res = mp_lshd(&w1, 1 * B)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_lshd(&w2, 2 * B)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_lshd(&w3, 3 * B)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_lshd(&w4, 4 * B)) != MP_OKAY) { + goto ERR; + } + + if ((res = mp_add(&w0, &w1, b)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&w2, &w3, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&w4, &tmp1, &tmp1)) != MP_OKAY) { + goto ERR; + } + if ((res = mp_add(&tmp1, b, b)) != MP_OKAY) { + goto ERR; + } + +ERR: + mp_clear_multi(&w0, &w1, &w2, &w3, &w4, &a0, &a1, &a2, &tmp1, NULL); + return res; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_TORADIX_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* stores a bignum as a ASCII string in a given radix (2..64) */ +int mp_toradix(mp_int *a, char *str, int radix) { + int res, digs; + mp_int t; + mp_digit d; + char *_s = str; + + /* check range of the radix */ + if ((radix < 2) || (radix > 64)) { + return MP_VAL; + } + + /* quick out if its zero */ + if (mp_iszero(a) == MP_YES) { + *str++ = '0'; + *str = '\0'; + return MP_OKAY; + } + + if ((res = mp_init_copy(&t, a)) != MP_OKAY) { + return res; + } + + /* if it is negative output a - */ + if (t.sign == MP_NEG) { + ++_s; + *str++ = '-'; + t.sign = MP_ZPOS; + } + + digs = 0; + while (mp_iszero(&t) == MP_NO) { + if ((res = mp_div_d(&t, (mp_digit)radix, &t, &d)) != MP_OKAY) { + mp_clear(&t); + return res; + } + *str++ = mp_s_rmap[d]; + ++digs; + } + + /* reverse the digits of the string. In this case _s points + * to the first digit [exluding the sign] of the number] + */ + bn_reverse((unsigned char *)_s, digs); + + /* append a NULL so the string is properly terminated */ + *str = '\0'; + + mp_clear(&t); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_UNSIGNED_BIN_SIZE_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* get the size for an unsigned equivalent */ +int mp_unsigned_bin_size(mp_int *a) { + int size = mp_count_bits(a); + + return (size / 8) + (((size & 7) != 0) ? 1 : 0); +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_XOR_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* XOR two ints together */ +int +mp_xor(mp_int *a, mp_int *b, mp_int *c) { + int res, ix, px; + mp_int t, *x; + + if (a->used > b->used) { + if ((res = mp_init_copy(&t, a)) != MP_OKAY) { + return res; + } + px = b->used; + x = b; + } else { + if ((res = mp_init_copy(&t, b)) != MP_OKAY) { + return res; + } + px = a->used; + x = a; + } + + for (ix = 0; ix < px; ix++) { + t.dp[ix] ^= x->dp[ix]; + } + mp_clamp(&t); + mp_exch(c, &t); + mp_clear(&t); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_MP_ZERO_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* set to zero */ +void mp_zero(mp_int *a) { + int n; + mp_digit *tmp; + + a->sign = MP_ZPOS; + a->used = 0; + + tmp = a->dp; + for (n = 0; n < a->alloc; n++) { + *tmp++ = 0; + } +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_PRIME_TAB_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ +const mp_digit ltm_prime_tab[] = { + 0x0002, 0x0003, 0x0005, 0x0007, 0x000B, 0x000D, 0x0011, 0x0013, + 0x0017, 0x001D, 0x001F, 0x0025, 0x0029, 0x002B, 0x002F, 0x0035, + 0x003B, 0x003D, 0x0043, 0x0047, 0x0049, 0x004F, 0x0053, 0x0059, + 0x0061, 0x0065, 0x0067, 0x006B, 0x006D, 0x0071, 0x007F, + #ifndef MP_8BIT + 0x0083, + 0x0089, 0x008B, 0x0095, 0x0097, 0x009D, 0x00A3, 0x00A7, 0x00AD, + 0x00B3, 0x00B5, 0x00BF, 0x00C1, 0x00C5, 0x00C7, 0x00D3, 0x00DF, + 0x00E3, 0x00E5, 0x00E9, 0x00EF, 0x00F1, 0x00FB, 0x0101, 0x0107, + 0x010D, 0x010F, 0x0115, 0x0119, 0x011B, 0x0125, 0x0133, 0x0137, + + 0x0139, 0x013D, 0x014B, 0x0151, 0x015B, 0x015D, 0x0161, 0x0167, + 0x016F, 0x0175, 0x017B, 0x017F, 0x0185, 0x018D, 0x0191, 0x0199, + 0x01A3, 0x01A5, 0x01AF, 0x01B1, 0x01B7, 0x01BB, 0x01C1, 0x01C9, + 0x01CD, 0x01CF, 0x01D3, 0x01DF, 0x01E7, 0x01EB, 0x01F3, 0x01F7, + 0x01FD, 0x0209, 0x020B, 0x021D, 0x0223, 0x022D, 0x0233, 0x0239, + 0x023B, 0x0241, 0x024B, 0x0251, 0x0257, 0x0259, 0x025F, 0x0265, + 0x0269, 0x026B, 0x0277, 0x0281, 0x0283, 0x0287, 0x028D, 0x0293, + 0x0295, 0x02A1, 0x02A5, 0x02AB, 0x02B3, 0x02BD, 0x02C5, 0x02CF, + + 0x02D7, 0x02DD, 0x02E3, 0x02E7, 0x02EF, 0x02F5, 0x02F9, 0x0301, + 0x0305, 0x0313, 0x031D, 0x0329, 0x032B, 0x0335, 0x0337, 0x033B, + 0x033D, 0x0347, 0x0355, 0x0359, 0x035B, 0x035F, 0x036D, 0x0371, + 0x0373, 0x0377, 0x038B, 0x038F, 0x0397, 0x03A1, 0x03A9, 0x03AD, + 0x03B3, 0x03B9, 0x03C7, 0x03CB, 0x03D1, 0x03D7, 0x03DF, 0x03E5, + 0x03F1, 0x03F5, 0x03FB, 0x03FD, 0x0407, 0x0409, 0x040F, 0x0419, + 0x041B, 0x0425, 0x0427, 0x042D, 0x043F, 0x0443, 0x0445, 0x0449, + 0x044F, 0x0455, 0x045D, 0x0463, 0x0469, 0x047F, 0x0481, 0x048B, + + 0x0493, 0x049D, 0x04A3, 0x04A9, 0x04B1, 0x04BD, 0x04C1, 0x04C7, + 0x04CD, 0x04CF, 0x04D5, 0x04E1, 0x04EB, 0x04FD, 0x04FF, 0x0503, + 0x0509, 0x050B, 0x0511, 0x0515, 0x0517, 0x051B, 0x0527, 0x0529, + 0x052F, 0x0551, 0x0557, 0x055D, 0x0565, 0x0577, 0x0581, 0x058F, + 0x0593, 0x0595, 0x0599, 0x059F, 0x05A7, 0x05AB, 0x05AD, 0x05B3, + 0x05BF, 0x05C9, 0x05CB, 0x05CF, 0x05D1, 0x05D5, 0x05DB, 0x05E7, + 0x05F3, 0x05FB, 0x0607, 0x060D, 0x0611, 0x0617, 0x061F, 0x0623, + 0x062B, 0x062F, 0x063D, 0x0641, 0x0647, 0x0649, 0x064D, 0x0653 + #endif +}; +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_REVERSE_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* reverse an array, used for radix code */ +void +bn_reverse(unsigned char *s, int len) { + int ix, iy; + unsigned char t; + + ix = 0; + iy = len - 1; + while (ix < iy) { + t = s[ix]; + s[ix] = s[iy]; + s[iy] = t; + ++ix; + --iy; + } +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_S_MP_ADD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* low level addition, based on HAC pp.594, Algorithm 14.7 */ +int +s_mp_add(mp_int *a, mp_int *b, mp_int *c) { + mp_int *x; + int olduse, res, min, max; + + /* find sizes, we let |a| <= |b| which means we have to sort + * them. "x" will point to the input with the most digits + */ + if (a->used > b->used) { + min = b->used; + max = a->used; + x = a; + } else { + min = a->used; + max = b->used; + x = b; + } + + /* init result */ + if (c->alloc < (max + 1)) { + if ((res = mp_grow(c, max + 1)) != MP_OKAY) { + return res; + } + } + + /* get old used digit count and set new one */ + olduse = c->used; + c->used = max + 1; + + { + mp_digit u, *tmpa, *tmpb, *tmpc; + int i; + + /* alias for digit pointers */ + + /* first input */ + tmpa = a->dp; + + /* second input */ + tmpb = b->dp; + + /* destination */ + tmpc = c->dp; + + /* zero the carry */ + u = 0; + for (i = 0; i < min; i++) { + /* Compute the sum at one digit, T[i] = A[i] + B[i] + U */ + *tmpc = *tmpa++ + *tmpb++ + u; + + /* U = carry bit of T[i] */ + u = *tmpc >> ((mp_digit)DIGIT_BIT); + + /* take away carry bit from T[i] */ + *tmpc++ &= MP_MASK; + } + + /* now copy higher words if any, that is in A+B + * if A or B has more digits add those in + */ + if (min != max) { + for ( ; i < max; i++) { + /* T[i] = X[i] + U */ + *tmpc = x->dp[i] + u; + + /* U = carry bit of T[i] */ + u = *tmpc >> ((mp_digit)DIGIT_BIT); + + /* take away carry bit from T[i] */ + *tmpc++ &= MP_MASK; + } + } + + /* add carry */ + *tmpc++ = u; + + /* clear digits above oldused */ + for (i = c->used; i < olduse; i++) { + *tmpc++ = 0; + } + } + + mp_clamp(c); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_S_MP_EXPTMOD_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +int s_mp_exptmod(mp_int *G, mp_int *X, mp_int *P, mp_int *Y, int redmode) { + mp_int M[TAB_SIZE], res, mu; + mp_digit buf; + int err, bitbuf, bitcpy, bitcnt, mode, digidx, x, y, winsize; + + int (*redux)(mp_int *, mp_int *, mp_int *); + + /* find window size */ + x = mp_count_bits(X); + if (x <= 7) { + winsize = 2; + } else if (x <= 36) { + winsize = 3; + } else if (x <= 140) { + winsize = 4; + } else if (x <= 450) { + winsize = 5; + } else if (x <= 1303) { + winsize = 6; + } else if (x <= 3529) { + winsize = 7; + } else { + winsize = 8; + } + + #ifdef MP_LOW_MEM + if (winsize > 5) { + winsize = 5; + } + #endif + + /* init M array */ + /* init first cell */ + if ((err = mp_init(&M[1])) != MP_OKAY) { + return err; + } + + /* now init the second half of the array */ + for (x = 1 << (winsize - 1); x < (1 << winsize); x++) { + if ((err = mp_init(&M[x])) != MP_OKAY) { + for (y = 1 << (winsize - 1); y < x; y++) { + mp_clear(&M[y]); + } + mp_clear(&M[1]); + return err; + } + } + + /* create mu, used for Barrett reduction */ + if ((err = mp_init(&mu)) != MP_OKAY) { + goto LBL_M; + } + + if (redmode == 0) { + if ((err = mp_reduce_setup(&mu, P)) != MP_OKAY) { + goto LBL_MU; + } + redux = mp_reduce; + } else { + if ((err = mp_reduce_2k_setup_l(P, &mu)) != MP_OKAY) { + goto LBL_MU; + } + redux = mp_reduce_2k_l; + } + + /* create M table + * + * The M table contains powers of the base, + * e.g. M[x] = G**x mod P + * + * The first half of the table is not + * computed though accept for M[0] and M[1] + */ + if ((err = mp_mod(G, P, &M[1])) != MP_OKAY) { + goto LBL_MU; + } + + /* compute the value at M[1<<(winsize-1)] by squaring + * M[1] (winsize-1) times + */ + if ((err = mp_copy(&M[1], &M[1 << (winsize - 1)])) != MP_OKAY) { + goto LBL_MU; + } + + for (x = 0; x < (winsize - 1); x++) { + /* square it */ + if ((err = mp_sqr(&M[1 << (winsize - 1)], + &M[1 << (winsize - 1)])) != MP_OKAY) { + goto LBL_MU; + } + + /* reduce modulo P */ + if ((err = redux(&M[1 << (winsize - 1)], P, &mu)) != MP_OKAY) { + goto LBL_MU; + } + } + + /* create upper table, that is M[x] = M[x-1] * M[1] (mod P) + * for x = (2**(winsize - 1) + 1) to (2**winsize - 1) + */ + for (x = (1 << (winsize - 1)) + 1; x < (1 << winsize); x++) { + if ((err = mp_mul(&M[x - 1], &M[1], &M[x])) != MP_OKAY) { + goto LBL_MU; + } + if ((err = redux(&M[x], P, &mu)) != MP_OKAY) { + goto LBL_MU; + } + } + + /* setup result */ + if ((err = mp_init(&res)) != MP_OKAY) { + goto LBL_MU; + } + mp_set(&res, 1); + + /* set initial mode and bit cnt */ + mode = 0; + bitcnt = 1; + buf = 0; + digidx = X->used - 1; + bitcpy = 0; + bitbuf = 0; + + for ( ; ; ) { + /* grab next digit as required */ + if (--bitcnt == 0) { + /* if digidx == -1 we are out of digits */ + if (digidx == -1) { + break; + } + /* read next digit and reset the bitcnt */ + buf = X->dp[digidx--]; + bitcnt = (int)DIGIT_BIT; + } + + /* grab the next msb from the exponent */ + y = (buf >> (mp_digit)(DIGIT_BIT - 1)) & 1; + buf <<= (mp_digit)1; + + /* if the bit is zero and mode == 0 then we ignore it + * These represent the leading zero bits before the first 1 bit + * in the exponent. Technically this opt is not required but it + * does lower the # of trivial squaring/reductions used + */ + if ((mode == 0) && (y == 0)) { + continue; + } + + /* if the bit is zero and mode == 1 then we square */ + if ((mode == 1) && (y == 0)) { + if ((err = mp_sqr(&res, &res)) != MP_OKAY) { + goto LBL_RES; + } + if ((err = redux(&res, P, &mu)) != MP_OKAY) { + goto LBL_RES; + } + continue; + } + + /* else we add it to the window */ + bitbuf |= (y << (winsize - ++bitcpy)); + mode = 2; + + if (bitcpy == winsize) { + /* ok window is filled so square as required and multiply */ + /* square first */ + for (x = 0; x < winsize; x++) { + if ((err = mp_sqr(&res, &res)) != MP_OKAY) { + goto LBL_RES; + } + if ((err = redux(&res, P, &mu)) != MP_OKAY) { + goto LBL_RES; + } + } + + /* then multiply */ + if ((err = mp_mul(&res, &M[bitbuf], &res)) != MP_OKAY) { + goto LBL_RES; + } + if ((err = redux(&res, P, &mu)) != MP_OKAY) { + goto LBL_RES; + } + + /* empty window and reset */ + bitcpy = 0; + bitbuf = 0; + mode = 1; + } + } + + /* if bits remain then square/multiply */ + if ((mode == 2) && (bitcpy > 0)) { + /* square then multiply if the bit is set */ + for (x = 0; x < bitcpy; x++) { + if ((err = mp_sqr(&res, &res)) != MP_OKAY) { + goto LBL_RES; + } + if ((err = redux(&res, P, &mu)) != MP_OKAY) { + goto LBL_RES; + } + + bitbuf <<= 1; + if ((bitbuf & (1 << winsize)) != 0) { + /* then multiply */ + if ((err = mp_mul(&res, &M[1], &res)) != MP_OKAY) { + goto LBL_RES; + } + if ((err = redux(&res, P, &mu)) != MP_OKAY) { + goto LBL_RES; + } + } + } + } + + mp_exch(&res, Y); + err = MP_OKAY; +LBL_RES: mp_clear(&res); +LBL_MU: mp_clear(&mu); +LBL_M: + mp_clear(&M[1]); + for (x = 1 << (winsize - 1); x < (1 << winsize); x++) { + mp_clear(&M[x]); + } + return err; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_S_MP_MUL_DIGS_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* multiplies |a| * |b| and only computes upto digs digits of result + * HAC pp. 595, Algorithm 14.12 Modified so you can control how + * many digits of output are created. + */ +int s_mp_mul_digs(mp_int *a, mp_int *b, mp_int *c, int digs) { + mp_int t; + int res, pa, pb, ix, iy; + mp_digit u; + mp_word r; + mp_digit tmpx, *tmpt, *tmpy; + + /* can we use the fast multiplier? */ + if (((digs) < MP_WARRAY) && + (MIN(a->used, b->used) < + (1 << ((CHAR_BIT * sizeof(mp_word)) - (2 * DIGIT_BIT))))) { + return fast_s_mp_mul_digs(a, b, c, digs); + } + + if ((res = mp_init_size(&t, digs)) != MP_OKAY) { + return res; + } + t.used = digs; + + /* compute the digits of the product directly */ + pa = a->used; + for (ix = 0; ix < pa; ix++) { + /* set the carry to zero */ + u = 0; + + /* limit ourselves to making digs digits of output */ + pb = MIN(b->used, digs - ix); + + /* setup some aliases */ + /* copy of the digit from a used within the nested loop */ + tmpx = a->dp[ix]; + + /* an alias for the destination shifted ix places */ + tmpt = t.dp + ix; + + /* an alias for the digits of b */ + tmpy = b->dp; + + /* compute the columns of the output and propagate the carry */ + for (iy = 0; iy < pb; iy++) { + /* compute the column as a mp_word */ + r = (mp_word) * tmpt + + ((mp_word)tmpx * (mp_word) * tmpy++) + + (mp_word)u; + + /* the new column is the lower part of the result */ + *tmpt++ = (mp_digit)(r & ((mp_word)MP_MASK)); + + /* get the carry word from the result */ + u = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); + } + /* set carry if it is placed below digs */ + if ((ix + iy) < digs) { + *tmpt = u; + } + } + + mp_clamp(&t); + mp_exch(&t, c); + + mp_clear(&t); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_S_MP_MUL_HIGH_DIGS_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* multiplies |a| * |b| and does not compute the lower digs digits + * [meant to get the higher part of the product] + */ +int +s_mp_mul_high_digs(mp_int *a, mp_int *b, mp_int *c, int digs) { + mp_int t; + int res, pa, pb, ix, iy; + mp_digit u; + mp_word r; + mp_digit tmpx, *tmpt, *tmpy; + + /* can we use the fast multiplier? */ + #ifdef BN_FAST_S_MP_MUL_HIGH_DIGS_C + if (((a->used + b->used + 1) < MP_WARRAY) && + (MIN(a->used, b->used) < (1 << ((CHAR_BIT * sizeof(mp_word)) - (2 * DIGIT_BIT))))) { + return fast_s_mp_mul_high_digs(a, b, c, digs); + } + #endif + + if ((res = mp_init_size(&t, a->used + b->used + 1)) != MP_OKAY) { + return res; + } + t.used = a->used + b->used + 1; + + pa = a->used; + pb = b->used; + for (ix = 0; ix < pa; ix++) { + /* clear the carry */ + u = 0; + + /* left hand side of A[ix] * B[iy] */ + tmpx = a->dp[ix]; + + /* alias to the address of where the digits will be stored */ + tmpt = &(t.dp[digs]); + + /* alias for where to read the right hand side from */ + tmpy = b->dp + (digs - ix); + + for (iy = digs - ix; iy < pb; iy++) { + /* calculate the double precision result */ + r = (mp_word) * tmpt + + ((mp_word)tmpx * (mp_word) * tmpy++) + + (mp_word)u; + + /* get the lower part */ + *tmpt++ = (mp_digit)(r & ((mp_word)MP_MASK)); + + /* carry the carry */ + u = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); + } + *tmpt = u; + } + mp_clamp(&t); + mp_exch(&t, c); + mp_clear(&t); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_S_MP_SQR_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* low level squaring, b = a*a, HAC pp.596-597, Algorithm 14.16 */ +int s_mp_sqr(mp_int *a, mp_int *b) { + mp_int t; + int res, ix, iy, pa; + mp_word r; + mp_digit u, tmpx, *tmpt; + + pa = a->used; + if ((res = mp_init_size(&t, (2 * pa) + 1)) != MP_OKAY) { + return res; + } + + /* default used is maximum possible size */ + t.used = (2 * pa) + 1; + + for (ix = 0; ix < pa; ix++) { + /* first calculate the digit at 2*ix */ + /* calculate double precision result */ + r = (mp_word)t.dp[2 * ix] + + ((mp_word)a->dp[ix] * (mp_word)a->dp[ix]); + + /* store lower part in result */ + t.dp[ix + ix] = (mp_digit)(r & ((mp_word)MP_MASK)); + + /* get the carry */ + u = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); + + /* left hand side of A[ix] * A[iy] */ + tmpx = a->dp[ix]; + + /* alias for where to store the results */ + tmpt = t.dp + ((2 * ix) + 1); + + for (iy = ix + 1; iy < pa; iy++) { + /* first calculate the product */ + r = ((mp_word)tmpx) * ((mp_word)a->dp[iy]); + + /* now calculate the double precision result, note we use + * addition instead of *2 since it's easier to optimize + */ + r = ((mp_word) * tmpt) + r + r + ((mp_word)u); + + /* store lower part */ + *tmpt++ = (mp_digit)(r & ((mp_word)MP_MASK)); + + /* get carry */ + u = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); + } + /* propagate upwards */ + while (u != ((mp_digit)0)) { + r = ((mp_word) * tmpt) + ((mp_word)u); + *tmpt++ = (mp_digit)(r & ((mp_word)MP_MASK)); + u = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); + } + } + + mp_clamp(&t); + mp_exch(&t, b); + mp_clear(&t); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BN_S_MP_SUB_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* low level subtraction (assumes |a| > |b|), HAC pp.595 Algorithm 14.9 */ +int +s_mp_sub(mp_int *a, mp_int *b, mp_int *c) { + int olduse, res, min, max; + + /* find sizes */ + min = b->used; + max = a->used; + + /* init result */ + if (c->alloc < max) { + if ((res = mp_grow(c, max)) != MP_OKAY) { + return res; + } + } + olduse = c->used; + c->used = max; + + { + mp_digit u, *tmpa, *tmpb, *tmpc; + int i; + + /* alias for digit pointers */ + tmpa = a->dp; + tmpb = b->dp; + tmpc = c->dp; + + /* set carry to zero */ + u = 0; + for (i = 0; i < min; i++) { + /* T[i] = A[i] - B[i] - U */ + *tmpc = (*tmpa++ - *tmpb++) - u; + + /* U = carry bit of T[i] + * Note this saves performing an AND operation since + * if a carry does occur it will propagate all the way to the + * MSB. As a result a single shift is enough to get the carry + */ + u = *tmpc >> ((mp_digit)((CHAR_BIT * sizeof(mp_digit)) - 1)); + + /* Clear carry from T[i] */ + *tmpc++ &= MP_MASK; + } + + /* now copy higher words if any, e.g. if A has more digits than B */ + for ( ; i < max; i++) { + /* T[i] = A[i] - U */ + *tmpc = *tmpa++ - u; + + /* U = carry bit of T[i] */ + u = *tmpc >> ((mp_digit)((CHAR_BIT * sizeof(mp_digit)) - 1)); + + /* Clear carry from T[i] */ + *tmpc++ &= MP_MASK; + } + + /* clear digits above used (since we may not have grown result above) */ + for (i = c->used; i < olduse; i++) { + *tmpc++ = 0; + } + } + + mp_clamp(c); + return MP_OKAY; +} +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + + +#ifdef BNCORE_C + +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org + */ + +/* Known optimal configurations + + CPU /Compiler /MUL CUTOFF/SQR CUTOFF + ------------------------------------------------------------- + Intel P4 Northwood /GCC v3.4.1 / 88/ 128/LTM 0.32 ;-) + AMD Athlon64 /GCC v3.4.4 / 80/ 120/LTM 0.35 + + */ + +int KARATSUBA_MUL_CUTOFF = 80, /* Min. number of digits before Karatsuba multiplication is used. */ + KARATSUBA_SQR_CUTOFF = 120, /* Min. number of digits before Karatsuba squaring is used. */ + + TOOM_MUL_CUTOFF = 350, /* no optimal values of these are known yet so set em high */ + TOOM_SQR_CUTOFF = 400; +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file crypt.c + Build strings, Tom St Denis + */ + +const char *crypt_build_settings = + "LibTomCrypt ""1.17"" (Tom St Denis, tomstdenis@gmail.com)\n" + "LibTomCrypt is public domain software.\n" + "Built on " __DATE__ " at " __TIME__ "\n\n\n" + "Endianess: " +#if defined(ENDIAN_NEUTRAL) + "neutral\n" +#elif defined(ENDIAN_LITTLE) + "little" + #if defined(ENDIAN_32BITWORD) + " (32-bit words)\n" + #else + " (64-bit words)\n" + #endif +#elif defined(ENDIAN_BIG) + "big" + #if defined(ENDIAN_32BITWORD) + " (32-bit words)\n" + #else + " (64-bit words)\n" + #endif +#endif + "Clean stack: " +#if defined(LTC_CLEAN_STACK) + "enabled\n" +#else + "disabled\n" +#endif + "Ciphers built-in:\n" +#if defined(LTC_BLOWFISH) + " Blowfish\n" +#endif +#if defined(LTC_RC2) + " LTC_RC2\n" +#endif +#if defined(LTC_RC5) + " LTC_RC5\n" +#endif +#if defined(LTC_RC6) + " LTC_RC6\n" +#endif +#if defined(LTC_SAFERP) + " Safer+\n" +#endif +#if defined(LTC_SAFER) + " Safer\n" +#endif +#if defined(LTC_RIJNDAEL) + " Rijndael\n" +#endif +#if defined(LTC_XTEA) + " LTC_XTEA\n" +#endif +#if defined(LTC_TWOFISH) + " Twofish " + #if defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_TABLES) && defined(LTC_TWOFISH_ALL_TABLES) + "(small, tables, all_tables)\n" + #elif defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_TABLES) + "(small, tables)\n" + #elif defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_ALL_TABLES) + "(small, all_tables)\n" + #elif defined(LTC_TWOFISH_TABLES) && defined(LTC_TWOFISH_ALL_TABLES) + "(tables, all_tables)\n" + #elif defined(LTC_TWOFISH_SMALL) + "(small)\n" + #elif defined(LTC_TWOFISH_TABLES) + "(tables)\n" + #elif defined(LTC_TWOFISH_ALL_TABLES) + "(all_tables)\n" + #else + "\n" + #endif +#endif +#if defined(LTC_DES) + " LTC_DES\n" +#endif +#if defined(LTC_CAST5) + " LTC_CAST5\n" +#endif +#if defined(LTC_NOEKEON) + " Noekeon\n" +#endif +#if defined(LTC_SKIPJACK) + " Skipjack\n" +#endif +#if defined(LTC_KHAZAD) + " Khazad\n" +#endif +#if defined(LTC_ANUBIS) + " Anubis " +#endif +#if defined(LTC_ANUBIS_TWEAK) + " (tweaked)" +#endif + "\n" +#if defined(LTC_KSEED) + " LTC_KSEED\n" +#endif +#if defined(LTC_KASUMI) + " KASUMI\n" +#endif + + "\nHashes built-in:\n" +#if defined(LTC_SHA512) + " LTC_SHA-512\n" +#endif +#if defined(LTC_SHA384) + " LTC_SHA-384\n" +#endif +#if defined(LTC_SHA256) + " LTC_SHA-256\n" +#endif +#if defined(LTC_SHA224) + " LTC_SHA-224\n" +#endif +#if defined(LTC_TIGER) + " LTC_TIGER\n" +#endif +#if defined(LTC_SHA1) + " LTC_SHA1\n" +#endif +#if defined(LTC_MD5) + " LTC_MD5\n" +#endif +#if defined(LTC_MD4) + " LTC_MD4\n" +#endif +#if defined(LTC_MD2) + " LTC_MD2\n" +#endif +#if defined(LTC_RIPEMD128) + " LTC_RIPEMD128\n" +#endif +#if defined(LTC_RIPEMD160) + " LTC_RIPEMD160\n" +#endif +#if defined(LTC_RIPEMD256) + " LTC_RIPEMD256\n" +#endif +#if defined(LTC_RIPEMD320) + " LTC_RIPEMD320\n" +#endif +#if defined(LTC_WHIRLPOOL) + " LTC_WHIRLPOOL\n" +#endif +#if defined(LTC_CHC_HASH) + " LTC_CHC_HASH \n" +#endif + + "\nBlock Chaining Modes:\n" +#if defined(LTC_CFB_MODE) + " CFB\n" +#endif +#if defined(LTC_OFB_MODE) + " OFB\n" +#endif +#if defined(LTC_ECB_MODE) + " ECB\n" +#endif +#if defined(LTC_CBC_MODE) + " CBC\n" +#endif +#if defined(LTC_CTR_MODE) + " CTR " +#endif +#if defined(LTC_CTR_OLD) + " (CTR_OLD) " +#endif + "\n" +#if defined(LRW_MODE) + " LRW_MODE" + #if defined(LRW_TABLES) + " (LRW_TABLES) " + #endif + "\n" +#endif +#if defined(LTC_F8_MODE) + " F8 MODE\n" +#endif +#if defined(LTC_XTS_MODE) + " LTC_XTS_MODE\n" +#endif + + "\nMACs:\n" +#if defined(LTC_HMAC) + " LTC_HMAC\n" +#endif +#if defined(LTC_OMAC) + " LTC_OMAC\n" +#endif +#if defined(LTC_PMAC) + " PMAC\n" +#endif +#if defined(LTC_PELICAN) + " LTC_PELICAN\n" +#endif +#if defined(LTC_XCBC) + " XCBC-MAC\n" +#endif +#if defined(LTC_F9_MODE) + " F9-MAC\n" +#endif + + "\nENC + AUTH modes:\n" +#if defined(LTC_EAX_MODE) + " LTC_EAX_MODE\n" +#endif +#if defined(LTC_OCB_MODE) + " LTC_OCB_MODE\n" +#endif +#if defined(LTC_CCM_MODE) + " LTC_CCM_MODE\n" +#endif +#if defined(LTC_GCM_MODE) + " LTC_GCM_MODE " +#endif +#if defined(LTC_GCM_TABLES) + " (LTC_GCM_TABLES) " +#endif + "\n" + + "\nPRNG:\n" +#if defined(LTC_YARROW) + " Yarrow\n" +#endif +#if defined(LTC_SPRNG) + " LTC_SPRNG\n" +#endif +#if defined(LTC_RC4) + " LTC_RC4\n" +#endif +#if defined(LTC_FORTUNA) + " Fortuna\n" +#endif +#if defined(LTC_SOBER128) + " LTC_SOBER128\n" +#endif + + "\nPK Algs:\n" +#if defined(LTC_MRSA) + " RSA \n" +#endif +#if defined(LTC_MECC) + " ECC\n" +#endif +#if defined(LTC_MDSA) + " DSA\n" +#endif +#if defined(MKAT) + " Katja\n" +#endif + + "\nCompiler:\n" +#if defined(WIN32) + " WIN32 platform detected.\n" +#endif +#if defined(__CYGWIN__) + " CYGWIN Detected.\n" +#endif +#if defined(__DJGPP__) + " DJGPP Detected.\n" +#endif +#if defined(_MSC_VER) + " MSVC compiler detected.\n" +#endif +#if defined(__GNUC__) + " GCC compiler detected.\n" +#endif +#if defined(INTEL_CC) + " Intel C Compiler detected.\n" +#endif +#if defined(__x86_64__) + " x86-64 detected.\n" +#endif +#if defined(LTC_PPC32) + " LTC_PPC32 defined \n" +#endif + + "\nVarious others: " +#if defined(LTC_BASE64) + " LTC_BASE64 " +#endif +#if defined(MPI) + " MPI " +#endif +#if defined(TRY_UNRANDOM_FIRST) + " TRY_UNRANDOM_FIRST " +#endif +#if defined(LTC_TEST) + " LTC_TEST " +#endif +#if defined(LTC_PKCS_1) + " LTC_PKCS#1 " +#endif +#if defined(LTC_PKCS_5) + " LTC_PKCS#5 " +#endif +#if defined(LTC_SMALL_CODE) + " LTC_SMALL_CODE " +#endif +#if defined(LTC_NO_FILE) + " LTC_NO_FILE " +#endif +#if defined(LTC_DER) + " LTC_DER " +#endif +#if defined(LTC_FAST) + " LTC_FAST " +#endif +#if defined(LTC_NO_FAST) + " LTC_NO_FAST " +#endif +#if defined(LTC_NO_BSWAP) + " LTC_NO_BSWAP " +#endif +#if defined(LTC_NO_ASM) + " LTC_NO_ASM " +#endif +#if defined(LTC_NO_TEST) + " LTC_NO_TEST " +#endif +#if defined(LTC_NO_TABLES) + " LTC_NO_TABLES " +#endif +#if defined(LTC_PTHREAD) + " LTC_PTHREAD " +#endif +#if defined(LTM_LTC_DESC) + " LTM_DESC " +#endif +#if defined(TFM_LTC_DESC) + " TFM_DESC " +#endif +#if defined(LTC_MECC_ACCEL) + " LTC_MECC_ACCEL " +#endif +#if defined(GMP_LTC_DESC) + " GMP_DESC " +#endif +#if defined(LTC_EASY) + " (easy) " +#endif +#if defined(LTC_MECC_FP) + " LTC_MECC_FP " +#endif +#if defined(LTC_ECC_SHAMIR) + " LTC_ECC_SHAMIR " +#endif + "\n" + "\n\n\n" +; + + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt.c,v $ */ +/* $Revision: 1.36 $ */ +/* $Date: 2007/05/12 14:46:12 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ +#include <signal.h> + +/** + @file crypt_argchk.c + Perform argument checking, Tom St Denis + */ + +#if (ARGTYPE == 0) +void crypt_argchk(char *v, char *s, int d) { + fprintf(stderr, "LTC_ARGCHK '%s' failure on line %d of file %s\n", + v, d, s); + (void)raise(SIGABRT); +} +#endif + +#ifndef TOMCRYPT_H_ +#define TOMCRYPT_H_ +#define USE_LTM +#define LTM_DESC +#define LTC_SHA1 +#include <assert.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <time.h> +#include <ctype.h> +#include <limits.h> + +/* use configuration data */ +#ifndef TOMCRYPT_CUSTOM_H_ +#define TOMCRYPT_CUSTOM_H_ + +/* macros for various libc functions you can change for embedded targets */ +#ifndef XMALLOC + #ifdef malloc + #define LTC_NO_PROTOTYPES + #endif + #define XMALLOC malloc +#endif +#ifndef XREALLOC + #ifdef realloc + #define LTC_NO_PROTOTYPES + #endif + #define XREALLOC realloc +#endif +#ifndef XCALLOC + #ifdef calloc + #define LTC_NO_PROTOTYPES + #endif + #define XCALLOC calloc +#endif +#ifndef XFREE + #ifdef free + #define LTC_NO_PROTOTYPES + #endif + #define XFREE free +#endif + +#ifndef XMEMSET + #ifdef memset + #define LTC_NO_PROTOTYPES + #endif + #define XMEMSET memset +#endif +#ifndef XMEMCPY + #ifdef memcpy + #define LTC_NO_PROTOTYPES + #endif + #define XMEMCPY memcpy +#endif +#ifndef XMEMCMP + #ifdef memcmp + #define LTC_NO_PROTOTYPES + #endif + #define XMEMCMP memcmp +#endif +#ifndef XSTRCMP + #ifdef strcmp + #define LTC_NO_PROTOTYPES + #endif + #define XSTRCMP strcmp +#endif + +#ifndef XCLOCK + #define XCLOCK clock +#endif +#ifndef XCLOCKS_PER_SEC + #define XCLOCKS_PER_SEC CLOCKS_PER_SEC +#endif + +#ifndef XQSORT + #ifdef qsort + #define LTC_NO_PROTOTYPES + #endif + #define XQSORT qsort +#endif + +/* Easy button? */ +#ifdef LTC_EASY + #define LTC_NO_CIPHERS + #define LTC_RIJNDAEL + #define LTC_BLOWFISH + #define LTC_DES + #define LTC_CAST5 + + #define LTC_NO_MODES + #define LTC_ECB_MODE + #define LTC_CBC_MODE + #define LTC_CTR_MODE + + #define LTC_NO_HASHES + #define LTC_SHA1 + #define LTC_SHA512 + #define LTC_SHA384 + #define LTC_SHA256 + #define LTC_SHA224 + + #define LTC_NO_MACS + #define LTC_HMAC + #define LTC_OMAC + #define LTC_CCM_MODE + + #define LTC_NO_PRNGS + #define LTC_SPRNG + #define LTC_YARROW + #define LTC_DEVRANDOM + #define TRY_URANDOM_FIRST + + #define LTC_NO_PK + #define LTC_MRSA + #define LTC_MECC +#endif + +/* Use small code where possible */ +/* #define LTC_SMALL_CODE */ + +/* Enable self-test test vector checking */ +#ifndef LTC_NO_TEST + #define LTC_TEST +#endif + +/* clean the stack of functions which put private information on stack */ +/* #define LTC_CLEAN_STACK */ + +/* disable all file related functions */ +/* #define LTC_NO_FILE */ + +/* disable all forms of ASM */ +/* #define LTC_NO_ASM */ + +/* disable FAST mode */ +/* #define LTC_NO_FAST */ + +/* disable BSWAP on x86 */ +/* #define LTC_NO_BSWAP */ + +/* ---> Symmetric Block Ciphers <--- */ +#ifndef LTC_NO_CIPHERS + + #define LTC_BLOWFISH + #define LTC_RC2 + #define LTC_RC5 + #define LTC_RC6 + #define LTC_SAFERP + #define LTC_RIJNDAEL + #define LTC_XTEA + +/* _TABLES tells it to use tables during setup, _SMALL means to use the smaller scheduled key format + * (saves 4KB of ram), _ALL_TABLES enables all tables during setup */ + #define LTC_TWOFISH + #ifndef LTC_NO_TABLES + #define LTC_TWOFISH_TABLES +/* #define LTC_TWOFISH_ALL_TABLES */ + #else + #define LTC_TWOFISH_SMALL + #endif +/* #define LTC_TWOFISH_SMALL */ +/* LTC_DES includes EDE triple-LTC_DES */ + #define LTC_DES + #define LTC_CAST5 + #define LTC_NOEKEON + #define LTC_SKIPJACK + #define LTC_SAFER + #define LTC_KHAZAD + #define LTC_ANUBIS + #define LTC_ANUBIS_TWEAK + #define LTC_KSEED + #define LTC_KASUMI +#endif /* LTC_NO_CIPHERS */ + + +/* ---> Block Cipher Modes of Operation <--- */ +#ifndef LTC_NO_MODES + + #define LTC_CFB_MODE + #define LTC_OFB_MODE + #define LTC_ECB_MODE + #define LTC_CBC_MODE + #define LTC_CTR_MODE + +/* F8 chaining mode */ + #define LTC_F8_MODE + +/* LRW mode */ + #define LTC_LRW_MODE + #ifndef LTC_NO_TABLES + +/* like GCM mode this will enable 16 8x128 tables [64KB] that make + * seeking very fast. + */ + #define LRW_TABLES + #endif + +/* XTS mode */ + #define LTC_XTS_MODE +#endif /* LTC_NO_MODES */ + +/* ---> One-Way Hash Functions <--- */ +#ifndef LTC_NO_HASHES + + #define LTC_CHC_HASH + #define LTC_WHIRLPOOL + #define LTC_SHA512 + #define LTC_SHA384 + #define LTC_SHA256 + #define LTC_SHA224 + #define LTC_TIGER + #define LTC_SHA1 + #define LTC_MD5 + #define LTC_MD4 + #define LTC_MD2 + #define LTC_RIPEMD128 + #define LTC_RIPEMD160 + #define LTC_RIPEMD256 + #define LTC_RIPEMD320 +#endif /* LTC_NO_HASHES */ + +/* ---> MAC functions <--- */ +#ifndef LTC_NO_MACS + + #define LTC_HMAC + #define LTC_OMAC + #define LTC_PMAC + #define LTC_XCBC + #define LTC_F9_MODE + #define LTC_PELICAN + + #if defined(LTC_PELICAN) && !defined(LTC_RIJNDAEL) + #error Pelican-MAC requires LTC_RIJNDAEL + #endif + +/* ---> Encrypt + Authenticate Modes <--- */ + + #define LTC_EAX_MODE + #if defined(LTC_EAX_MODE) && !(defined(LTC_CTR_MODE) && defined(LTC_OMAC)) + #error LTC_EAX_MODE requires CTR and LTC_OMAC mode + #endif + + #define LTC_OCB_MODE + #define LTC_CCM_MODE + #define LTC_GCM_MODE + +/* Use 64KiB tables */ + #ifndef LTC_NO_TABLES + #define LTC_GCM_TABLES + #endif + +/* USE SSE2? requires GCC works on x86_32 and x86_64*/ + #ifdef LTC_GCM_TABLES +/* #define LTC_GCM_TABLES_SSE2 */ + #endif +#endif /* LTC_NO_MACS */ + +/* Various tidbits of modern neatoness */ +#define LTC_BASE64 + +/* --> Pseudo Random Number Generators <--- */ +#ifndef LTC_NO_PRNGS + +/* Yarrow */ + #define LTC_YARROW +/* which descriptor of AES to use? */ +/* 0 = rijndael_enc 1 = aes_enc, 2 = rijndael [full], 3 = aes [full] */ + #define LTC_YARROW_AES 0 + + #if defined(LTC_YARROW) && !defined(LTC_CTR_MODE) + #error LTC_YARROW requires LTC_CTR_MODE chaining mode to be defined! + #endif + +/* a PRNG that simply reads from an available system source */ + #define LTC_SPRNG + +/* The LTC_RC4 stream cipher */ + #define LTC_RC4 + +/* Fortuna PRNG */ + #define LTC_FORTUNA +/* reseed every N calls to the read function */ + #define LTC_FORTUNA_WD 10 +/* number of pools (4..32) can save a bit of ram by lowering the count */ + #define LTC_FORTUNA_POOLS 32 + +/* Greg's LTC_SOBER128 PRNG ;-0 */ + #define LTC_SOBER128 + +/* the *nix style /dev/random device */ + #define LTC_DEVRANDOM +/* try /dev/urandom before trying /dev/random */ + #define TRY_URANDOM_FIRST +#endif /* LTC_NO_PRNGS */ + +/* ---> math provider? <--- */ +#ifndef LTC_NO_MATH + +/* LibTomMath */ +/* #define LTM_LTC_DESC */ + +/* TomsFastMath */ +/* #define TFM_LTC_DESC */ +#endif /* LTC_NO_MATH */ + +/* ---> Public Key Crypto <--- */ +#ifndef LTC_NO_PK + +/* Include RSA support */ + #define LTC_MRSA + +/* Include Katja (a Rabin variant like RSA) */ +/* #define MKAT */ + +/* Digital Signature Algorithm */ + #define LTC_MDSA + +/* ECC */ + #define LTC_MECC + +/* use Shamir's trick for point mul (speeds up signature verification) */ + #define LTC_ECC_SHAMIR + + #if defined(TFM_LTC_DESC) && defined(LTC_MECC) + #define LTC_MECC_ACCEL + #endif + +/* do we want fixed point ECC */ +/* #define LTC_MECC_FP */ + +/* Timing Resistant? */ +/* #define LTC_ECC_TIMING_RESISTANT */ +#endif /* LTC_NO_PK */ + +/* LTC_PKCS #1 (RSA) and #5 (Password Handling) stuff */ +#ifndef LTC_NO_PKCS + + #define LTC_PKCS_1 + #define LTC_PKCS_5 + +/* Include ASN.1 DER (required by DSA/RSA) */ + #define LTC_DER +#endif /* LTC_NO_PKCS */ + +/* cleanup */ + +#ifdef LTC_MECC +/* Supported ECC Key Sizes */ + #ifndef LTC_NO_CURVES + #define ECC112 + #define ECC128 + #define ECC160 + #define ECC192 + #define ECC224 + #define ECC256 + #define ECC384 + #define ECC521 + #endif +#endif + +#if defined(LTC_MECC) || defined(LTC_MRSA) || defined(LTC_MDSA) || defined(MKATJA) +/* Include the MPI functionality? (required by the PK algorithms) */ + #define MPI +#endif + +#ifdef LTC_MRSA + #define LTC_PKCS_1 +#endif + +#if defined(LTC_DER) && !defined(MPI) + #error ASN.1 DER requires MPI functionality +#endif + +#if (defined(LTC_MDSA) || defined(LTC_MRSA) || defined(LTC_MECC) || defined(MKATJA)) && !defined(LTC_DER) + #error PK requires ASN.1 DER functionality, make sure LTC_DER is enabled +#endif + +/* THREAD management */ +#ifdef LTC_PTHREAD + + #include <pthread.h> + + #define LTC_MUTEX_GLOBAL(x) pthread_mutex_t x = PTHREAD_MUTEX_INITIALIZER; + #define LTC_MUTEX_PROTO(x) extern pthread_mutex_t x; + #define LTC_MUTEX_TYPE(x) pthread_mutex_t x; + #define LTC_MUTEX_INIT(x) pthread_mutex_init(x, NULL); + #define LTC_MUTEX_LOCK(x) pthread_mutex_lock(x); + #define LTC_MUTEX_UNLOCK(x) pthread_mutex_unlock(x); + +#else + +/* default no functions */ + #define LTC_MUTEX_GLOBAL(x) + #define LTC_MUTEX_PROTO(x) + #define LTC_MUTEX_TYPE(x) + #define LTC_MUTEX_INIT(x) + #define LTC_MUTEX_LOCK(x) + #define LTC_MUTEX_UNLOCK(x) +#endif + +/* Debuggers */ + +/* define this if you use Valgrind, note: it CHANGES the way SOBER-128 and LTC_RC4 work (see the code) */ +/* #define LTC_VALGRIND */ +#endif + + + +/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_custom.h,v $ */ +/* $Revision: 1.73 $ */ +/* $Date: 2007/05/12 14:37:41 $ */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* version */ +#define CRYPT 0x0117 +#define SCRYPT "1.17" + +/* max size of either a cipher/hash block or symmetric key [largest of the two] */ +#define MAXBLOCKSIZE 128 + +/* descriptor table size */ + +/* error codes [will be expanded in future releases] */ +enum { + CRYPT_OK=0, /* Result OK */ + CRYPT_ERROR, /* Generic Error */ + CRYPT_NOP, /* Not a failure but no operation was performed */ + + CRYPT_INVALID_KEYSIZE, /* Invalid key size given */ + CRYPT_INVALID_ROUNDS, /* Invalid number of rounds */ + CRYPT_FAIL_TESTVECTOR, /* Algorithm failed test vectors */ + + CRYPT_BUFFER_OVERFLOW, /* Not enough space for output */ + CRYPT_INVALID_PACKET, /* Invalid input packet given */ + + CRYPT_INVALID_PRNGSIZE, /* Invalid number of bits for a PRNG */ + CRYPT_ERROR_READPRNG, /* Could not read enough from PRNG */ + + CRYPT_INVALID_CIPHER, /* Invalid cipher specified */ + CRYPT_INVALID_HASH, /* Invalid hash specified */ + CRYPT_INVALID_PRNG, /* Invalid PRNG specified */ + + CRYPT_MEM, /* Out of memory */ + + CRYPT_PK_TYPE_MISMATCH, /* Not equivalent types of PK keys */ + CRYPT_PK_NOT_PRIVATE, /* Requires a private PK key */ + + CRYPT_INVALID_ARG, /* Generic invalid argument */ + CRYPT_FILE_NOTFOUND, /* File Not Found */ + + CRYPT_PK_INVALID_TYPE, /* Invalid type of PK key */ + CRYPT_PK_INVALID_SYSTEM, /* Invalid PK system specified */ + CRYPT_PK_DUP, /* Duplicate key already in key ring */ + CRYPT_PK_NOT_FOUND, /* Key not found in keyring */ + CRYPT_PK_INVALID_SIZE, /* Invalid size input for PK parameters */ + + CRYPT_INVALID_PRIME_SIZE, /* Invalid size of prime requested */ + CRYPT_PK_INVALID_PADDING /* Invalid padding on input */ +}; + +/* This is the build config file. + * + * With this you can setup what to inlcude/exclude automatically during any build. Just comment + * out the line that #define's the word for the thing you want to remove. phew! + */ + +#ifndef TOMCRYPT_CFG_H +#define TOMCRYPT_CFG_H + +#if defined(_WIN32) || defined(_MSC_VER) + #define LTC_CALL __cdecl +#else + #ifndef LTC_CALL + #define LTC_CALL + #endif +#endif + +#ifndef LTC_EXPORT + #define LTC_EXPORT +#endif + +/* certain platforms use macros for these, making the prototypes broken */ +#ifndef LTC_NO_PROTOTYPES + +/* you can change how memory allocation works ... */ +LTC_EXPORT void *LTC_CALL XMALLOC(size_t n); +LTC_EXPORT void *LTC_CALL XREALLOC(void *p, size_t n); +LTC_EXPORT void *LTC_CALL XCALLOC(size_t n, size_t s); +LTC_EXPORT void LTC_CALL XFREE(void *p); + +LTC_EXPORT void LTC_CALL XQSORT(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); + + +/* change the clock function too */ +LTC_EXPORT clock_t LTC_CALL XCLOCK(void); + +/* various other functions */ +LTC_EXPORT void *LTC_CALL XMEMCPY(void *dest, const void *src, size_t n); +LTC_EXPORT int LTC_CALL XMEMCMP(const void *s1, const void *s2, size_t n); +LTC_EXPORT void *LTC_CALL XMEMSET(void *s, int c, size_t n); + +LTC_EXPORT int LTC_CALL XSTRCMP(const char *s1, const char *s2); +#endif + +/* type of argument checking, 0=default, 1=fatal and 2=error+continue, 3=nothing */ +#ifndef ARGTYPE + #define ARGTYPE 0 +#endif + +/* Controls endianess and size of registers. Leave uncommented to get platform neutral [slower] code + * + * Note: in order to use the optimized macros your platform must support unaligned 32 and 64 bit read/writes. + * The x86 platforms allow this but some others [ARM for instance] do not. On those platforms you **MUST** + * use the portable [slower] macros. + */ + +/* detect x86-32 machines somewhat */ +#if !defined(__STRICT_ANSI__) && (defined(INTEL_CC) || (defined(_MSC_VER) && defined(WIN32)) || (defined(__GNUC__) && (defined(__DJGPP__) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__i386__)))) + #define ENDIAN_LITTLE + #define ENDIAN_32BITWORD + #define LTC_FAST + #define LTC_FAST_TYPE unsigned long +#endif + +/* detects MIPS R5900 processors (PS2) */ +#if (defined(__R5900) || defined(R5900) || defined(__R5900__)) && (defined(_mips) || defined(__mips__) || defined(mips)) + #define ENDIAN_LITTLE + #define ENDIAN_64BITWORD +#endif + +/* detect amd64 */ +#if !defined(__STRICT_ANSI__) && defined(__x86_64__) + #define ENDIAN_LITTLE + #define ENDIAN_64BITWORD + #define LTC_FAST + #define LTC_FAST_TYPE unsigned long +#endif + +/* detect PPC32 */ +#if !defined(__STRICT_ANSI__) && defined(LTC_PPC32) + #define ENDIAN_BIG + #define ENDIAN_32BITWORD + #define LTC_FAST + #define LTC_FAST_TYPE unsigned long +#endif + +/* detect sparc and sparc64 */ +#if defined(__sparc__) + #define ENDIAN_BIG + #if defined(__arch64__) + #define ENDIAN_64BITWORD + #else + #define ENDIAN_32BITWORD + #endif +#endif + + +#ifdef LTC_NO_FAST + #ifdef LTC_FAST + #undef LTC_FAST + #endif +#endif + +/* No asm is a quick way to disable anything "not portable" */ +#ifdef LTC_NO_ASM + #undef ENDIAN_LITTLE + #undef ENDIAN_BIG + #undef ENDIAN_32BITWORD + #undef ENDIAN_64BITWORD + #undef LTC_FAST + #undef LTC_FAST_TYPE + #define LTC_NO_ROLC + #define LTC_NO_BSWAP +#endif + +/* #define ENDIAN_LITTLE */ +/* #define ENDIAN_BIG */ + +/* #define ENDIAN_32BITWORD */ +/* #define ENDIAN_64BITWORD */ + +#if (defined(ENDIAN_BIG) || defined(ENDIAN_LITTLE)) && !(defined(ENDIAN_32BITWORD) || defined(ENDIAN_64BITWORD)) + #error You must specify a word size as well as endianess in tomcrypt_cfg.h +#endif + +#if !(defined(ENDIAN_BIG) || defined(ENDIAN_LITTLE)) + #define ENDIAN_NEUTRAL +#endif +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_cfg.h,v $ */ +/* $Revision: 1.19 $ */ +/* $Date: 2006/12/04 02:19:48 $ */ + +/* fix for MSVC ...evil! */ +#ifdef _MSC_VER + #define CONST64(n) n ## ui64 +typedef unsigned __int64 ulong64; +#else + #define CONST64(n) n ## ULL +typedef unsigned long long ulong64; +#endif + +/* this is the "32-bit at least" data type + * Re-define it to suit your platform but it must be at least 32-bits + */ +#if defined(__x86_64__) || (defined(__sparc__) && defined(__arch64__)) +typedef unsigned ulong32; +#else +typedef unsigned long ulong32; +#endif + +/* ---- HELPER MACROS ---- */ +#ifdef ENDIAN_NEUTRAL + + #define STORE32L(x, y) \ + { (y)[3] = (unsigned char)(((x) >> 24) & 255); (y)[2] = (unsigned char)(((x) >> 16) & 255); \ + (y)[1] = (unsigned char)(((x) >> 8) & 255); (y)[0] = (unsigned char)((x) & 255); } + + #define LOAD32L(x, y) \ + { x = ((unsigned long)((y)[3] & 255) << 24) | \ + ((unsigned long)((y)[2] & 255) << 16) | \ + ((unsigned long)((y)[1] & 255) << 8) | \ + ((unsigned long)((y)[0] & 255)); } + + #define STORE64L(x, y) \ + { (y)[7] = (unsigned char)(((x) >> 56) & 255); (y)[6] = (unsigned char)(((x) >> 48) & 255); \ + (y)[5] = (unsigned char)(((x) >> 40) & 255); (y)[4] = (unsigned char)(((x) >> 32) & 255); \ + (y)[3] = (unsigned char)(((x) >> 24) & 255); (y)[2] = (unsigned char)(((x) >> 16) & 255); \ + (y)[1] = (unsigned char)(((x) >> 8) & 255); (y)[0] = (unsigned char)((x) & 255); } + + #define LOAD64L(x, y) \ + { x = (((ulong64)((y)[7] & 255)) << 56) | (((ulong64)((y)[6] & 255)) << 48) | \ + (((ulong64)((y)[5] & 255)) << 40) | (((ulong64)((y)[4] & 255)) << 32) | \ + (((ulong64)((y)[3] & 255)) << 24) | (((ulong64)((y)[2] & 255)) << 16) | \ + (((ulong64)((y)[1] & 255)) << 8) | (((ulong64)((y)[0] & 255))); } + + #define STORE32H(x, y) \ + { (y)[0] = (unsigned char)(((x) >> 24) & 255); (y)[1] = (unsigned char)(((x) >> 16) & 255); \ + (y)[2] = (unsigned char)(((x) >> 8) & 255); (y)[3] = (unsigned char)((x) & 255); } + + #define LOAD32H(x, y) \ + { x = ((unsigned long)((y)[0] & 255) << 24) | \ + ((unsigned long)((y)[1] & 255) << 16) | \ + ((unsigned long)((y)[2] & 255) << 8) | \ + ((unsigned long)((y)[3] & 255)); } + + #define STORE64H(x, y) \ + { (y)[0] = (unsigned char)(((x) >> 56) & 255); (y)[1] = (unsigned char)(((x) >> 48) & 255); \ + (y)[2] = (unsigned char)(((x) >> 40) & 255); (y)[3] = (unsigned char)(((x) >> 32) & 255); \ + (y)[4] = (unsigned char)(((x) >> 24) & 255); (y)[5] = (unsigned char)(((x) >> 16) & 255); \ + (y)[6] = (unsigned char)(((x) >> 8) & 255); (y)[7] = (unsigned char)((x) & 255); } + + #define LOAD64H(x, y) \ + { x = (((ulong64)((y)[0] & 255)) << 56) | (((ulong64)((y)[1] & 255)) << 48) | \ + (((ulong64)((y)[2] & 255)) << 40) | (((ulong64)((y)[3] & 255)) << 32) | \ + (((ulong64)((y)[4] & 255)) << 24) | (((ulong64)((y)[5] & 255)) << 16) | \ + (((ulong64)((y)[6] & 255)) << 8) | (((ulong64)((y)[7] & 255))); } +#endif /* ENDIAN_NEUTRAL */ + +#ifdef ENDIAN_LITTLE + + #if !defined(LTC_NO_BSWAP) && (defined(INTEL_CC) || (defined(__GNUC__) && (defined(__DJGPP__) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__i386__) || defined(__x86_64__)))) + + #define STORE32H(x, y) \ + asm __volatile__ ( \ + "bswapl %0 \n\t" \ + "movl %0,(%1)\n\t" \ + "bswapl %0 \n\t" \ + ::"r" (x), "r" (y)); + + #define LOAD32H(x, y) \ + asm __volatile__ ( \ + "movl (%1),%0\n\t" \ + "bswapl %0\n\t" \ + : "=r" (x) : "r" (y)); + + #else + + #define STORE32H(x, y) \ + { (y)[0] = (unsigned char)(((x) >> 24) & 255); (y)[1] = (unsigned char)(((x) >> 16) & 255); \ + (y)[2] = (unsigned char)(((x) >> 8) & 255); (y)[3] = (unsigned char)((x) & 255); } + + #define LOAD32H(x, y) \ + { x = ((unsigned long)((y)[0] & 255) << 24) | \ + ((unsigned long)((y)[1] & 255) << 16) | \ + ((unsigned long)((y)[2] & 255) << 8) | \ + ((unsigned long)((y)[3] & 255)); } + #endif + + +/* x86_64 processor */ + #if !defined(LTC_NO_BSWAP) && (defined(__GNUC__) && defined(__x86_64__)) + + #define STORE64H(x, y) \ + asm __volatile__ ( \ + "bswapq %0 \n\t" \ + "movq %0,(%1)\n\t" \ + "bswapq %0 \n\t" \ + ::"r" (x), "r" (y)); + + #define LOAD64H(x, y) \ + asm __volatile__ ( \ + "movq (%1),%0\n\t" \ + "bswapq %0\n\t" \ + : "=r" (x) : "r" (y)); + + #else + + #define STORE64H(x, y) \ + { (y)[0] = (unsigned char)(((x) >> 56) & 255); (y)[1] = (unsigned char)(((x) >> 48) & 255); \ + (y)[2] = (unsigned char)(((x) >> 40) & 255); (y)[3] = (unsigned char)(((x) >> 32) & 255); \ + (y)[4] = (unsigned char)(((x) >> 24) & 255); (y)[5] = (unsigned char)(((x) >> 16) & 255); \ + (y)[6] = (unsigned char)(((x) >> 8) & 255); (y)[7] = (unsigned char)((x) & 255); } + + #define LOAD64H(x, y) \ + { x = (((ulong64)((y)[0] & 255)) << 56) | (((ulong64)((y)[1] & 255)) << 48) | \ + (((ulong64)((y)[2] & 255)) << 40) | (((ulong64)((y)[3] & 255)) << 32) | \ + (((ulong64)((y)[4] & 255)) << 24) | (((ulong64)((y)[5] & 255)) << 16) | \ + (((ulong64)((y)[6] & 255)) << 8) | (((ulong64)((y)[7] & 255))); } + #endif + + #ifdef ENDIAN_32BITWORD + + #define STORE32L(x, y) \ + { ulong32 __t = (x); XMEMCPY(y, &__t, 4); } + + #define LOAD32L(x, y) \ + XMEMCPY(&(x), y, 4); + + #define STORE64L(x, y) \ + { (y)[7] = (unsigned char)(((x) >> 56) & 255); (y)[6] = (unsigned char)(((x) >> 48) & 255); \ + (y)[5] = (unsigned char)(((x) >> 40) & 255); (y)[4] = (unsigned char)(((x) >> 32) & 255); \ + (y)[3] = (unsigned char)(((x) >> 24) & 255); (y)[2] = (unsigned char)(((x) >> 16) & 255); \ + (y)[1] = (unsigned char)(((x) >> 8) & 255); (y)[0] = (unsigned char)((x) & 255); } + + #define LOAD64L(x, y) \ + { x = (((ulong64)((y)[7] & 255)) << 56) | (((ulong64)((y)[6] & 255)) << 48) | \ + (((ulong64)((y)[5] & 255)) << 40) | (((ulong64)((y)[4] & 255)) << 32) | \ + (((ulong64)((y)[3] & 255)) << 24) | (((ulong64)((y)[2] & 255)) << 16) | \ + (((ulong64)((y)[1] & 255)) << 8) | (((ulong64)((y)[0] & 255))); } + + #else /* 64-bit words then */ + + #define STORE32L(x, y) \ + { ulong32 __t = (x); XMEMCPY(y, &__t, 4); } + + #define LOAD32L(x, y) \ + { XMEMCPY(&(x), y, 4); x &= 0xFFFFFFFF; } + + #define STORE64L(x, y) \ + { ulong64 __t = (x); XMEMCPY(y, &__t, 8); } + + #define LOAD64L(x, y) \ + { XMEMCPY(&(x), y, 8); } + #endif /* ENDIAN_64BITWORD */ +#endif /* ENDIAN_LITTLE */ + +#ifdef ENDIAN_BIG + #define STORE32L(x, y) \ + { (y)[3] = (unsigned char)(((x) >> 24) & 255); (y)[2] = (unsigned char)(((x) >> 16) & 255); \ + (y)[1] = (unsigned char)(((x) >> 8) & 255); (y)[0] = (unsigned char)((x) & 255); } + + #define LOAD32L(x, y) \ + { x = ((unsigned long)((y)[3] & 255) << 24) | \ + ((unsigned long)((y)[2] & 255) << 16) | \ + ((unsigned long)((y)[1] & 255) << 8) | \ + ((unsigned long)((y)[0] & 255)); } + + #define STORE64L(x, y) \ + { (y)[7] = (unsigned char)(((x) >> 56) & 255); (y)[6] = (unsigned char)(((x) >> 48) & 255); \ + (y)[5] = (unsigned char)(((x) >> 40) & 255); (y)[4] = (unsigned char)(((x) >> 32) & 255); \ + (y)[3] = (unsigned char)(((x) >> 24) & 255); (y)[2] = (unsigned char)(((x) >> 16) & 255); \ + (y)[1] = (unsigned char)(((x) >> 8) & 255); (y)[0] = (unsigned char)((x) & 255); } + + #define LOAD64L(x, y) \ + { x = (((ulong64)((y)[7] & 255)) << 56) | (((ulong64)((y)[6] & 255)) << 48) | \ + (((ulong64)((y)[5] & 255)) << 40) | (((ulong64)((y)[4] & 255)) << 32) | \ + (((ulong64)((y)[3] & 255)) << 24) | (((ulong64)((y)[2] & 255)) << 16) | \ + (((ulong64)((y)[1] & 255)) << 8) | (((ulong64)((y)[0] & 255))); } + + #ifdef ENDIAN_32BITWORD + + #define STORE32H(x, y) \ + { ulong32 __t = (x); XMEMCPY(y, &__t, 4); } + + #define LOAD32H(x, y) \ + XMEMCPY(&(x), y, 4); + + #define STORE64H(x, y) \ + { (y)[0] = (unsigned char)(((x) >> 56) & 255); (y)[1] = (unsigned char)(((x) >> 48) & 255); \ + (y)[2] = (unsigned char)(((x) >> 40) & 255); (y)[3] = (unsigned char)(((x) >> 32) & 255); \ + (y)[4] = (unsigned char)(((x) >> 24) & 255); (y)[5] = (unsigned char)(((x) >> 16) & 255); \ + (y)[6] = (unsigned char)(((x) >> 8) & 255); (y)[7] = (unsigned char)((x) & 255); } + + #define LOAD64H(x, y) \ + { x = (((ulong64)((y)[0] & 255)) << 56) | (((ulong64)((y)[1] & 255)) << 48) | \ + (((ulong64)((y)[2] & 255)) << 40) | (((ulong64)((y)[3] & 255)) << 32) | \ + (((ulong64)((y)[4] & 255)) << 24) | (((ulong64)((y)[5] & 255)) << 16) | \ + (((ulong64)((y)[6] & 255)) << 8) | (((ulong64)((y)[7] & 255))); } + + #else /* 64-bit words then */ + + #define STORE32H(x, y) \ + { ulong32 __t = (x); XMEMCPY(y, &__t, 4); } + + #define LOAD32H(x, y) \ + { XMEMCPY(&(x), y, 4); x &= 0xFFFFFFFF; } + + #define STORE64H(x, y) \ + { ulong64 __t = (x); XMEMCPY(y, &__t, 8); } + + #define LOAD64H(x, y) \ + { XMEMCPY(&(x), y, 8); } + #endif /* ENDIAN_64BITWORD */ +#endif /* ENDIAN_BIG */ + +#define BSWAP(x) \ + (((x >> 24) & 0x000000FFUL) | ((x << 24) & 0xFF000000UL) | \ + ((x >> 8) & 0x0000FF00UL) | ((x << 8) & 0x00FF0000UL)) + + +/* 32-bit Rotates */ +#if defined(_MSC_VER) + +/* instrinsic rotate */ + #include <stdlib.h> + #pragma intrinsic(_lrotr,_lrotl) + #define ROR(x, n) _lrotr(x, n) + #define ROL(x, n) _lrotl(x, n) + #define RORc(x, n) _lrotr(x, n) + #define ROLc(x, n) _lrotl(x, n) + +#elif !defined(__STRICT_ANSI__) && defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && !defined(INTEL_CC) && !defined(LTC_NO_ASM) + +static inline unsigned ROL(unsigned word, int i) { + asm ("roll %%cl,%0" + : "=r" (word) + : "0" (word), "c" (i)); + return word; +} + +static inline unsigned ROR(unsigned word, int i) { + asm ("rorl %%cl,%0" + : "=r" (word) + : "0" (word), "c" (i)); + return word; +} + + #ifndef LTC_NO_ROLC + +static inline unsigned ROLc(unsigned word, const int i) { + asm ("roll %2,%0" + : "=r" (word) + : "0" (word), "I" (i)); + return word; +} + +static inline unsigned RORc(unsigned word, const int i) { + asm ("rorl %2,%0" + : "=r" (word) + : "0" (word), "I" (i)); + return word; +} + + #else + + #define ROLc ROL + #define RORc ROR + #endif + +#elif !defined(__STRICT_ANSI__) && defined(LTC_PPC32) + +static inline unsigned ROL(unsigned word, int i) { + asm ("rotlw %0,%0,%2" + : "=r" (word) + : "0" (word), "r" (i)); + return word; +} + +static inline unsigned ROR(unsigned word, int i) { + asm ("rotlw %0,%0,%2" + : "=r" (word) + : "0" (word), "r" (32 - i)); + return word; +} + + #ifndef LTC_NO_ROLC + +static inline unsigned ROLc(unsigned word, const int i) { + asm ("rotlwi %0,%0,%2" + : "=r" (word) + : "0" (word), "I" (i)); + return word; +} + +static inline unsigned RORc(unsigned word, const int i) { + asm ("rotrwi %0,%0,%2" + : "=r" (word) + : "0" (word), "I" (i)); + return word; +} + + #else + + #define ROLc ROL + #define RORc ROR + #endif + + +#else + +/* rotates the hard way */ + #define ROL(x, y) ((((unsigned long)(x) << (unsigned long)((y) & 31)) | (((unsigned long)(x) & 0xFFFFFFFFUL) >> (unsigned long)(32 - ((y) & 31)))) & 0xFFFFFFFFUL) + #define ROR(x, y) (((((unsigned long)(x) & 0xFFFFFFFFUL) >> (unsigned long)((y) & 31)) | ((unsigned long)(x) << (unsigned long)(32 - ((y) & 31)))) & 0xFFFFFFFFUL) + #define ROLc(x, y) ((((unsigned long)(x) << (unsigned long)((y) & 31)) | (((unsigned long)(x) & 0xFFFFFFFFUL) >> (unsigned long)(32 - ((y) & 31)))) & 0xFFFFFFFFUL) + #define RORc(x, y) (((((unsigned long)(x) & 0xFFFFFFFFUL) >> (unsigned long)((y) & 31)) | ((unsigned long)(x) << (unsigned long)(32 - ((y) & 31)))) & 0xFFFFFFFFUL) +#endif + + +/* 64-bit Rotates */ +#if !defined(__STRICT_ANSI__) && defined(__GNUC__) && defined(__x86_64__) && !defined(LTC_NO_ASM) + +static inline unsigned long ROL64(unsigned long word, int i) { + asm ("rolq %%cl,%0" + : "=r" (word) + : "0" (word), "c" (i)); + return word; +} + +static inline unsigned long ROR64(unsigned long word, int i) { + asm ("rorq %%cl,%0" + : "=r" (word) + : "0" (word), "c" (i)); + return word; +} + + #ifndef LTC_NO_ROLC + +static inline unsigned long ROL64c(unsigned long word, const int i) { + asm ("rolq %2,%0" + : "=r" (word) + : "0" (word), "J" (i)); + return word; +} + +static inline unsigned long ROR64c(unsigned long word, const int i) { + asm ("rorq %2,%0" + : "=r" (word) + : "0" (word), "J" (i)); + return word; +} + + #else /* LTC_NO_ROLC */ + + #define ROL64c ROL64 + #define ROR64c ROR64 + #endif + +#else /* Not x86_64 */ + + #define ROL64(x, y) \ + ((((x) << ((ulong64)(y) & 63)) | \ + (((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((ulong64)64 - ((y) & 63)))) & CONST64(0xFFFFFFFFFFFFFFFF)) + + #define ROR64(x, y) \ + (((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((ulong64)(y) & CONST64(63))) | \ + ((x) << ((ulong64)(64 - ((y) & CONST64(63)))))) & CONST64(0xFFFFFFFFFFFFFFFF)) + + #define ROL64c(x, y) \ + ((((x) << ((ulong64)(y) & 63)) | \ + (((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((ulong64)64 - ((y) & 63)))) & CONST64(0xFFFFFFFFFFFFFFFF)) + + #define ROR64c(x, y) \ + (((((x) & CONST64(0xFFFFFFFFFFFFFFFF)) >> ((ulong64)(y) & CONST64(63))) | \ + ((x) << ((ulong64)(64 - ((y) & CONST64(63)))))) & CONST64(0xFFFFFFFFFFFFFFFF)) +#endif + +#ifndef MAX + #define MAX(x, y) (((x) > (y)) ? (x) : (y)) +#endif + +#ifndef MIN + #define MIN(x, y) (((x) < (y)) ? (x) : (y)) +#endif + +/* extract a byte portably */ +#ifdef _MSC_VER + #define byte(x, n) ((unsigned char)((x) >> (8 * (n)))) +#else + #define byte(x, n) (((x) >> (8 * (n))) & 255) +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_macros.h,v $ */ +/* $Revision: 1.15 $ */ +/* $Date: 2006/11/29 23:43:57 $ */ + +/* ---- SYMMETRIC KEY STUFF ----- + * + * We put each of the ciphers scheduled keys in their own structs then we put all of + * the key formats in one union. This makes the function prototypes easier to use. + */ +#ifdef LTC_BLOWFISH +struct blowfish_key { + ulong32 S[4][256]; + ulong32 K[18]; +}; +#endif + +#ifdef LTC_RC5 +struct rc5_key { + int rounds; + ulong32 K[50]; +}; +#endif + +#ifdef LTC_RC6 +struct rc6_key { + ulong32 K[44]; +}; +#endif + +#ifdef LTC_SAFERP +struct saferp_key { + unsigned char K[33][16]; + long rounds; +}; +#endif + +#ifdef LTC_RIJNDAEL +struct rijndael_key { + ulong32 eK[60], dK[60]; + int Nr; +}; +#endif + +#ifdef LTC_KSEED +struct kseed_key { + ulong32 K[32], dK[32]; +}; +#endif + +#ifdef LTC_KASUMI +struct kasumi_key { + ulong32 KLi1[8], KLi2[8], + KOi1[8], KOi2[8], KOi3[8], + KIi1[8], KIi2[8], KIi3[8]; +}; +#endif + +#ifdef LTC_XTEA +struct xtea_key { + unsigned long A[32], B[32]; +}; +#endif + +#ifdef LTC_TWOFISH + #ifndef LTC_TWOFISH_SMALL +struct twofish_key { + ulong32 S[4][256], K[40]; +}; + #else +struct twofish_key { + ulong32 K[40]; + unsigned char S[32], start; +}; + #endif +#endif + +#ifdef LTC_SAFER + #define LTC_SAFER_K64_DEFAULT_NOF_ROUNDS 6 + #define LTC_SAFER_K128_DEFAULT_NOF_ROUNDS 10 + #define LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS 8 + #define LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS 10 + #define LTC_SAFER_MAX_NOF_ROUNDS 13 + #define LTC_SAFER_BLOCK_LEN 8 + #define LTC_SAFER_KEY_LEN (1 + LTC_SAFER_BLOCK_LEN * (1 + 2 * LTC_SAFER_MAX_NOF_ROUNDS)) +typedef unsigned char safer_block_t[LTC_SAFER_BLOCK_LEN]; +typedef unsigned char safer_key_t[LTC_SAFER_KEY_LEN]; +struct safer_key { + safer_key_t key; +}; +#endif + +#ifdef LTC_RC2 +struct rc2_key { + unsigned xkey[64]; +}; +#endif + +#ifdef LTC_DES +struct des_key { + ulong32 ek[32], dk[32]; +}; + +struct des3_key { + ulong32 ek[3][32], dk[3][32]; +}; +#endif + +#ifdef LTC_CAST5 +struct cast5_key { + ulong32 K[32], keylen; +}; +#endif + +#ifdef LTC_NOEKEON +struct noekeon_key { + ulong32 K[4], dK[4]; +}; +#endif + +#ifdef LTC_SKIPJACK +struct skipjack_key { + unsigned char key[10]; +}; +#endif + +#ifdef LTC_KHAZAD +struct khazad_key { + ulong64 roundKeyEnc[8 + 1]; + ulong64 roundKeyDec[8 + 1]; +}; +#endif + +#ifdef LTC_ANUBIS +struct anubis_key { + int keyBits; + int R; + ulong32 roundKeyEnc[18 + 1][4]; + ulong32 roundKeyDec[18 + 1][4]; +}; +#endif + +#ifdef LTC_MULTI2 +struct multi2_key { + int N; + ulong32 uk[8]; +}; +#endif + +typedef union Symmetric_key { +#ifdef LTC_DES + struct des_key des; + struct des3_key des3; +#endif +#ifdef LTC_RC2 + struct rc2_key rc2; +#endif +#ifdef LTC_SAFER + struct safer_key safer; +#endif +#ifdef LTC_TWOFISH + struct twofish_key twofish; +#endif +#ifdef LTC_BLOWFISH + struct blowfish_key blowfish; +#endif +#ifdef LTC_RC5 + struct rc5_key rc5; +#endif +#ifdef LTC_RC6 + struct rc6_key rc6; +#endif +#ifdef LTC_SAFERP + struct saferp_key saferp; +#endif +#ifdef LTC_RIJNDAEL + struct rijndael_key rijndael; +#endif +#ifdef LTC_XTEA + struct xtea_key xtea; +#endif +#ifdef LTC_CAST5 + struct cast5_key cast5; +#endif +#ifdef LTC_NOEKEON + struct noekeon_key noekeon; +#endif +#ifdef LTC_SKIPJACK + struct skipjack_key skipjack; +#endif +#ifdef LTC_KHAZAD + struct khazad_key khazad; +#endif +#ifdef LTC_ANUBIS + struct anubis_key anubis; +#endif +#ifdef LTC_KSEED + struct kseed_key kseed; +#endif +#ifdef LTC_KASUMI + struct kasumi_key kasumi; +#endif +#ifdef LTC_MULTI2 + struct multi2_key multi2; +#endif + void *data; +} symmetric_key; + +#ifdef LTC_ECB_MODE +/** A block cipher ECB structure */ +typedef struct { + /** The index of the cipher chosen */ + int cipher, + /** The block size of the given cipher */ + blocklen; + /** The scheduled key */ + symmetric_key key; +} symmetric_ECB; +#endif + +#ifdef LTC_CFB_MODE +/** A block cipher CFB structure */ +typedef struct { + /** The index of the cipher chosen */ + int cipher, + /** The block size of the given cipher */ + blocklen, + /** The padding offset */ + padlen; + /** The current IV */ + unsigned char IV[MAXBLOCKSIZE], + /** The pad used to encrypt/decrypt */ + pad[MAXBLOCKSIZE]; + /** The scheduled key */ + symmetric_key key; +} symmetric_CFB; +#endif + +#ifdef LTC_OFB_MODE +/** A block cipher OFB structure */ +typedef struct { + /** The index of the cipher chosen */ + int cipher, + /** The block size of the given cipher */ + blocklen, + /** The padding offset */ + padlen; + /** The current IV */ + unsigned char IV[MAXBLOCKSIZE]; + /** The scheduled key */ + symmetric_key key; +} symmetric_OFB; +#endif + +#ifdef LTC_CBC_MODE +/** A block cipher CBC structure */ +typedef struct { + /** The index of the cipher chosen */ + int cipher, + /** The block size of the given cipher */ + blocklen; + /** The current IV */ + unsigned char IV[MAXBLOCKSIZE]; + /** The scheduled key */ + symmetric_key key; +} symmetric_CBC; +#endif + + +#ifdef LTC_CTR_MODE +/** A block cipher CTR structure */ +typedef struct { + /** The index of the cipher chosen */ + int cipher, + /** The block size of the given cipher */ + blocklen, + /** The padding offset */ + padlen, + /** The mode (endianess) of the CTR, 0==little, 1==big */ + mode, + /** counter width */ + ctrlen; + + /** The counter */ + unsigned char ctr[MAXBLOCKSIZE], + /** The pad used to encrypt/decrypt */ + pad[MAXBLOCKSIZE]; + /** The scheduled key */ + symmetric_key key; +} symmetric_CTR; +#endif + + +#ifdef LTC_LRW_MODE +/** A LRW structure */ +typedef struct { + /** The index of the cipher chosen (must be a 128-bit block cipher) */ + int cipher; + + /** The current IV */ + unsigned char IV[16], + + /** the tweak key */ + tweak[16], + + /** The current pad, it's the product of the first 15 bytes against the tweak key */ + pad[16]; + + /** The scheduled symmetric key */ + symmetric_key key; + + #ifdef LRW_TABLES + /** The pre-computed multiplication table */ + unsigned char PC[16][256][16]; + #endif +} symmetric_LRW; +#endif + +#ifdef LTC_F8_MODE +/** A block cipher F8 structure */ +typedef struct { + /** The index of the cipher chosen */ + int cipher, + /** The block size of the given cipher */ + blocklen, + /** The padding offset */ + padlen; + /** The current IV */ + unsigned char IV[MAXBLOCKSIZE], + MIV[MAXBLOCKSIZE]; + /** Current block count */ + ulong32 blockcnt; + /** The scheduled key */ + symmetric_key key; +} symmetric_F8; +#endif + + +/** cipher descriptor table, last entry has "name == NULL" to mark the end of table */ +extern struct ltc_cipher_descriptor { + /** name of cipher */ + char *name; + /** internal ID */ + unsigned char ID; + /** min keysize (octets) */ + int min_key_length, + /** max keysize (octets) */ + max_key_length, + /** block size (octets) */ + block_length, + /** default number of rounds */ + default_rounds; + + /** Setup the cipher + @param key The input symmetric key + @param keylen The length of the input key (octets) + @param num_rounds The requested number of rounds (0==default) + @param skey [out] The destination of the scheduled key + @return CRYPT_OK if successful + */ + int (*setup)(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); + + /** Encrypt a block + @param pt The plaintext + @param ct [out] The ciphertext + @param skey The scheduled key + @return CRYPT_OK if successful + */ + int (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); + + /** Decrypt a block + @param ct The ciphertext + @param pt [out] The plaintext + @param skey The scheduled key + @return CRYPT_OK if successful + */ + int (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); + + /** Test the block cipher + @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled + */ + int (*test)(void); + + /** Terminate the context + @param skey The scheduled key + */ + void (*done)(symmetric_key *skey); + + /** Determine a key size + @param keysize [in/out] The size of the key desired and the suggested size + @return CRYPT_OK if successful + */ + int (*keysize)(int *keysize); + +/** Accelerators **/ + + /** Accelerated ECB encryption + @param pt Plaintext + @param ct Ciphertext + @param blocks The number of complete blocks to process + @param skey The scheduled key context + @return CRYPT_OK if successful + */ + int (*accel_ecb_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, symmetric_key *skey); + + /** Accelerated ECB decryption + @param pt Plaintext + @param ct Ciphertext + @param blocks The number of complete blocks to process + @param skey The scheduled key context + @return CRYPT_OK if successful + */ + int (*accel_ecb_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, symmetric_key *skey); + + /** Accelerated CBC encryption + @param pt Plaintext + @param ct Ciphertext + @param blocks The number of complete blocks to process + @param IV The initial value (input/output) + @param skey The scheduled key context + @return CRYPT_OK if successful + */ + int (*accel_cbc_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, symmetric_key *skey); + + /** Accelerated CBC decryption + @param pt Plaintext + @param ct Ciphertext + @param blocks The number of complete blocks to process + @param IV The initial value (input/output) + @param skey The scheduled key context + @return CRYPT_OK if successful + */ + int (*accel_cbc_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, symmetric_key *skey); + + /** Accelerated CTR encryption + @param pt Plaintext + @param ct Ciphertext + @param blocks The number of complete blocks to process + @param IV The initial value (input/output) + @param mode little or big endian counter (mode=0 or mode=1) + @param skey The scheduled key context + @return CRYPT_OK if successful + */ + int (*accel_ctr_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, int mode, symmetric_key *skey); + + /** Accelerated LRW + @param pt Plaintext + @param ct Ciphertext + @param blocks The number of complete blocks to process + @param IV The initial value (input/output) + @param tweak The LRW tweak + @param skey The scheduled key context + @return CRYPT_OK if successful + */ + int (*accel_lrw_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey); + + /** Accelerated LRW + @param ct Ciphertext + @param pt Plaintext + @param blocks The number of complete blocks to process + @param IV The initial value (input/output) + @param tweak The LRW tweak + @param skey The scheduled key context + @return CRYPT_OK if successful + */ + int (*accel_lrw_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey); + + /** Accelerated CCM packet (one-shot) + @param key The secret key to use + @param keylen The length of the secret key (octets) + @param uskey A previously scheduled key [optional can be NULL] + @param nonce The session nonce [use once] + @param noncelen The length of the nonce + @param header The header for the session + @param headerlen The length of the header (octets) + @param pt [out] The plaintext + @param ptlen The length of the plaintext (octets) + @param ct [out] The ciphertext + @param tag [out] The destination tag + @param taglen [in/out] The max size and resulting size of the authentication tag + @param direction Encrypt or Decrypt direction (0 or 1) + @return CRYPT_OK if successful + */ + int (*accel_ccm_memory)( + const unsigned char *key, unsigned long keylen, + symmetric_key *uskey, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *header, unsigned long headerlen, + unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen, + int direction); + + /** Accelerated GCM packet (one shot) + @param key The secret key + @param keylen The length of the secret key + @param IV The initial vector + @param IVlen The length of the initial vector + @param adata The additional authentication data (header) + @param adatalen The length of the adata + @param pt The plaintext + @param ptlen The length of the plaintext (ciphertext length is the same) + @param ct The ciphertext + @param tag [out] The MAC tag + @param taglen [in/out] The MAC tag length + @param direction Encrypt or Decrypt mode (GCM_ENCRYPT or GCM_DECRYPT) + @return CRYPT_OK on success + */ + int (*accel_gcm_memory)( + const unsigned char *key, unsigned long keylen, + const unsigned char *IV, unsigned long IVlen, + const unsigned char *adata, unsigned long adatalen, + unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen, + int direction); + + /** Accelerated one shot LTC_OMAC + @param key The secret key + @param keylen The key length (octets) + @param in The message + @param inlen Length of message (octets) + @param out [out] Destination for tag + @param outlen [in/out] Initial and final size of out + @return CRYPT_OK on success + */ + int (*omac_memory)( + const unsigned char *key, unsigned long keylen, + const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + + /** Accelerated one shot XCBC + @param key The secret key + @param keylen The key length (octets) + @param in The message + @param inlen Length of message (octets) + @param out [out] Destination for tag + @param outlen [in/out] Initial and final size of out + @return CRYPT_OK on success + */ + int (*xcbc_memory)( + const unsigned char *key, unsigned long keylen, + const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + + /** Accelerated one shot F9 + @param key The secret key + @param keylen The key length (octets) + @param in The message + @param inlen Length of message (octets) + @param out [out] Destination for tag + @param outlen [in/out] Initial and final size of out + @return CRYPT_OK on success + @remark Requires manual padding + */ + int (*f9_memory)( + const unsigned char *key, unsigned long keylen, + const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +} cipher_descriptor[]; + +#ifdef LTC_BLOWFISH +int blowfish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int blowfish_test(void); +void blowfish_done(symmetric_key *skey); +int blowfish_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor blowfish_desc; +#endif + +#ifdef LTC_RC5 +int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int rc5_test(void); +void rc5_done(symmetric_key *skey); +int rc5_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor rc5_desc; +#endif + +#ifdef LTC_RC6 +int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int rc6_test(void); +void rc6_done(symmetric_key *skey); +int rc6_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor rc6_desc; +#endif + +#ifdef LTC_RC2 +int rc2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int rc2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int rc2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int rc2_test(void); +void rc2_done(symmetric_key *skey); +int rc2_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor rc2_desc; +#endif + +#ifdef LTC_SAFERP +int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int saferp_test(void); +void saferp_done(symmetric_key *skey); +int saferp_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor saferp_desc; +#endif + +#ifdef LTC_SAFER +int safer_k64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int safer_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); +int safer_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key); +int safer_k64_test(void); +int safer_sk64_test(void); +int safer_sk128_test(void); +void safer_done(symmetric_key *skey); +int safer_64_keysize(int *keysize); +int safer_128_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor safer_k64_desc, safer_k128_desc, safer_sk64_desc, safer_sk128_desc; +#endif + +#ifdef LTC_RIJNDAEL + +/* make aes an alias */ + #define aes_setup rijndael_setup + #define aes_ecb_encrypt rijndael_ecb_encrypt + #define aes_ecb_decrypt rijndael_ecb_decrypt + #define aes_test rijndael_test + #define aes_done rijndael_done + #define aes_keysize rijndael_keysize + + #define aes_enc_setup rijndael_enc_setup + #define aes_enc_ecb_encrypt rijndael_enc_ecb_encrypt + #define aes_enc_keysize rijndael_enc_keysize + +int rijndael_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int rijndael_test(void); +void rijndael_done(symmetric_key *skey); +int rijndael_keysize(int *keysize); +int rijndael_enc_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int rijndael_enc_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +void rijndael_enc_done(symmetric_key *skey); +int rijndael_enc_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor rijndael_desc, aes_desc; +extern const struct ltc_cipher_descriptor rijndael_enc_desc, aes_enc_desc; +#endif + +#ifdef LTC_XTEA +int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int xtea_test(void); +void xtea_done(symmetric_key *skey); +int xtea_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor xtea_desc; +#endif + +#ifdef LTC_TWOFISH +int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int twofish_test(void); +void twofish_done(symmetric_key *skey); +int twofish_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor twofish_desc; +#endif + +#ifdef LTC_DES +int des_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int des_test(void); +void des_done(symmetric_key *skey); +int des_keysize(int *keysize); +int des3_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int des3_test(void); +void des3_done(symmetric_key *skey); +int des3_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor des_desc, des3_desc; +#endif + +#ifdef LTC_CAST5 +int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int cast5_test(void); +void cast5_done(symmetric_key *skey); +int cast5_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor cast5_desc; +#endif + +#ifdef LTC_NOEKEON +int noekeon_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int noekeon_test(void); +void noekeon_done(symmetric_key *skey); +int noekeon_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor noekeon_desc; +#endif + +#ifdef LTC_SKIPJACK +int skipjack_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int skipjack_test(void); +void skipjack_done(symmetric_key *skey); +int skipjack_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor skipjack_desc; +#endif + +#ifdef LTC_KHAZAD +int khazad_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int khazad_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int khazad_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int khazad_test(void); +void khazad_done(symmetric_key *skey); +int khazad_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor khazad_desc; +#endif + +#ifdef LTC_ANUBIS +int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int anubis_test(void); +void anubis_done(symmetric_key *skey); +int anubis_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor anubis_desc; +#endif + +#ifdef LTC_KSEED +int kseed_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int kseed_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int kseed_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int kseed_test(void); +void kseed_done(symmetric_key *skey); +int kseed_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor kseed_desc; +#endif + +#ifdef LTC_KASUMI +int kasumi_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int kasumi_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int kasumi_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int kasumi_test(void); +void kasumi_done(symmetric_key *skey); +int kasumi_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor kasumi_desc; +#endif + + +#ifdef LTC_MULTI2 +int multi2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int multi2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int multi2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int multi2_test(void); +void multi2_done(symmetric_key *skey); +int multi2_keysize(int *keysize); + +extern const struct ltc_cipher_descriptor multi2_desc; +#endif + +#ifdef LTC_ECB_MODE +int ecb_start(int cipher, const unsigned char *key, + int keylen, int num_rounds, symmetric_ECB *ecb); +int ecb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_ECB *ecb); +int ecb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_ECB *ecb); +int ecb_done(symmetric_ECB *ecb); +#endif + +#ifdef LTC_CFB_MODE +int cfb_start(int cipher, const unsigned char *IV, const unsigned char *key, + int keylen, int num_rounds, symmetric_CFB *cfb); +int cfb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CFB *cfb); +int cfb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CFB *cfb); +int cfb_getiv(unsigned char *IV, unsigned long *len, symmetric_CFB *cfb); +int cfb_setiv(const unsigned char *IV, unsigned long len, symmetric_CFB *cfb); +int cfb_done(symmetric_CFB *cfb); +#endif + +#ifdef LTC_OFB_MODE +int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key, + int keylen, int num_rounds, symmetric_OFB *ofb); +int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_OFB *ofb); +int ofb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_OFB *ofb); +int ofb_getiv(unsigned char *IV, unsigned long *len, symmetric_OFB *ofb); +int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb); +int ofb_done(symmetric_OFB *ofb); +#endif + +#ifdef LTC_CBC_MODE +int cbc_start(int cipher, const unsigned char *IV, const unsigned char *key, + int keylen, int num_rounds, symmetric_CBC *cbc); +int cbc_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CBC *cbc); +int cbc_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CBC *cbc); +int cbc_getiv(unsigned char *IV, unsigned long *len, symmetric_CBC *cbc); +int cbc_setiv(const unsigned char *IV, unsigned long len, symmetric_CBC *cbc); +int cbc_done(symmetric_CBC *cbc); +#endif + +#ifdef LTC_CTR_MODE + + #define CTR_COUNTER_LITTLE_ENDIAN 0x0000 + #define CTR_COUNTER_BIG_ENDIAN 0x1000 + #define LTC_CTR_RFC3686 0x2000 + +int ctr_start(int cipher, + const unsigned char *IV, + const unsigned char *key, int keylen, + int num_rounds, int ctr_mode, + symmetric_CTR *ctr); +int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CTR *ctr); +int ctr_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CTR *ctr); +int ctr_getiv(unsigned char *IV, unsigned long *len, symmetric_CTR *ctr); +int ctr_setiv(const unsigned char *IV, unsigned long len, symmetric_CTR *ctr); +int ctr_done(symmetric_CTR *ctr); +int ctr_test(void); +#endif + +#ifdef LTC_LRW_MODE + + #define LRW_ENCRYPT 0 + #define LRW_DECRYPT 1 + +int lrw_start(int cipher, + const unsigned char *IV, + const unsigned char *key, int keylen, + const unsigned char *tweak, + int num_rounds, + symmetric_LRW *lrw); +int lrw_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_LRW *lrw); +int lrw_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_LRW *lrw); +int lrw_getiv(unsigned char *IV, unsigned long *len, symmetric_LRW *lrw); +int lrw_setiv(const unsigned char *IV, unsigned long len, symmetric_LRW *lrw); +int lrw_done(symmetric_LRW *lrw); +int lrw_test(void); + +/* don't call */ +int lrw_process(const unsigned char *pt, unsigned char *ct, unsigned long len, int mode, symmetric_LRW *lrw); +#endif + +#ifdef LTC_F8_MODE +int f8_start(int cipher, const unsigned char *IV, + const unsigned char *key, int keylen, + const unsigned char *salt_key, int skeylen, + int num_rounds, symmetric_F8 *f8); +int f8_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_F8 *f8); +int f8_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_F8 *f8); +int f8_getiv(unsigned char *IV, unsigned long *len, symmetric_F8 *f8); +int f8_setiv(const unsigned char *IV, unsigned long len, symmetric_F8 *f8); +int f8_done(symmetric_F8 *f8); +int f8_test_mode(void); +#endif + +#ifdef LTC_XTS_MODE +typedef struct { + symmetric_key key1, key2; + int cipher; +} symmetric_xts; + +int xts_start(int cipher, + const unsigned char *key1, + const unsigned char *key2, + unsigned long keylen, + int num_rounds, + symmetric_xts *xts); + +int xts_encrypt( + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + const unsigned char *tweak, + symmetric_xts *xts); +int xts_decrypt( + const unsigned char *ct, unsigned long ptlen, + unsigned char *pt, + const unsigned char *tweak, + symmetric_xts *xts); + +void xts_done(symmetric_xts *xts); +int xts_test(void); +void xts_mult_x(unsigned char *I); +#endif + +int find_cipher(const char *name); +int find_cipher_any(const char *name, int blocklen, int keylen); +int find_cipher_id(unsigned char ID); +int register_cipher(const struct ltc_cipher_descriptor *cipher); +int unregister_cipher(const struct ltc_cipher_descriptor *cipher); +int cipher_is_valid(int idx); + +LTC_MUTEX_PROTO(ltc_cipher_mutex) + +/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_cipher.h,v $ */ +/* $Revision: 1.54 $ */ +/* $Date: 2007/05/12 14:37:41 $ */ + +#define LTC_SHA1 +/* ---- HASH FUNCTIONS ---- */ +#ifdef LTC_SHA512 +struct sha512_state { + ulong64 length, state[8]; + unsigned long curlen; + unsigned char buf[128]; +}; +#endif + +#ifdef LTC_SHA256 +struct sha256_state { + ulong64 length; + ulong32 state[8], curlen; + unsigned char buf[64]; +}; +#endif + +#ifdef LTC_SHA1 +struct sha1_state { + ulong64 length; + ulong32 state[5], curlen; + unsigned char buf[64]; +}; +#endif + +#ifdef LTC_MD5 +struct md5_state { + ulong64 length; + ulong32 state[4], curlen; + unsigned char buf[64]; +}; +#endif + +#ifdef LTC_MD4 +struct md4_state { + ulong64 length; + ulong32 state[4], curlen; + unsigned char buf[64]; +}; +#endif + +#ifdef LTC_TIGER +struct tiger_state { + ulong64 state[3], length; + unsigned long curlen; + unsigned char buf[64]; +}; +#endif + +#ifdef LTC_MD2 +struct md2_state { + unsigned char chksum[16], X[48], buf[16]; + unsigned long curlen; +}; +#endif + +#ifdef LTC_RIPEMD128 +struct rmd128_state { + ulong64 length; + unsigned char buf[64]; + ulong32 curlen, state[4]; +}; +#endif + +#ifdef LTC_RIPEMD160 +struct rmd160_state { + ulong64 length; + unsigned char buf[64]; + ulong32 curlen, state[5]; +}; +#endif + +#ifdef LTC_RIPEMD256 +struct rmd256_state { + ulong64 length; + unsigned char buf[64]; + ulong32 curlen, state[8]; +}; +#endif + +#ifdef LTC_RIPEMD320 +struct rmd320_state { + ulong64 length; + unsigned char buf[64]; + ulong32 curlen, state[10]; +}; +#endif + +#ifdef LTC_WHIRLPOOL +struct whirlpool_state { + ulong64 length, state[8]; + unsigned char buf[64]; + ulong32 curlen; +}; +#endif + +#ifdef LTC_CHC_HASH +struct chc_state { + ulong64 length; + unsigned char state[MAXBLOCKSIZE], buf[MAXBLOCKSIZE]; + ulong32 curlen; +}; +#endif + +typedef union Hash_state { + char dummy[1]; +#ifdef LTC_CHC_HASH + struct chc_state chc; +#endif +#ifdef LTC_WHIRLPOOL + struct whirlpool_state whirlpool; +#endif +#ifdef LTC_SHA512 + struct sha512_state sha512; +#endif +#ifdef LTC_SHA256 + struct sha256_state sha256; +#endif +#ifdef LTC_SHA1 + struct sha1_state sha1; +#endif +#ifdef LTC_MD5 + struct md5_state md5; +#endif +#ifdef LTC_MD4 + struct md4_state md4; +#endif +#ifdef LTC_MD2 + struct md2_state md2; +#endif +#ifdef LTC_TIGER + struct tiger_state tiger; +#endif +#ifdef LTC_RIPEMD128 + struct rmd128_state rmd128; +#endif +#ifdef LTC_RIPEMD160 + struct rmd160_state rmd160; +#endif +#ifdef LTC_RIPEMD256 + struct rmd256_state rmd256; +#endif +#ifdef LTC_RIPEMD320 + struct rmd320_state rmd320; +#endif + void *data; +} hash_state; + +/** hash descriptor */ +extern struct ltc_hash_descriptor { + /** name of hash */ + char *name; + /** internal ID */ + unsigned char ID; + /** Size of digest in octets */ + unsigned long hashsize; + /** Input block size in octets */ + unsigned long blocksize; + /** ASN.1 OID */ + unsigned long OID[16]; + /** Length of DER encoding */ + unsigned long OIDlen; + + /** Init a hash state + @param hash The hash to initialize + @return CRYPT_OK if successful + */ + int (*init)(hash_state *hash); + + /** Process a block of data + @param hash The hash state + @param in The data to hash + @param inlen The length of the data (octets) + @return CRYPT_OK if successful + */ + int (*process)(hash_state *hash, const unsigned char *in, unsigned long inlen); + + /** Produce the digest and store it + @param hash The hash state + @param out [out] The destination of the digest + @return CRYPT_OK if successful + */ + int (*done)(hash_state *hash, unsigned char *out); + + /** Self-test + @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled + */ + int (*test)(void); + + /* accelerated hmac callback: if you need to-do multiple packets just use the generic hmac_memory and provide a hash callback */ + int (*hmac_block)(const unsigned char *key, unsigned long keylen, + const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +} hash_descriptor[]; + +#ifdef LTC_CHC_HASH +int chc_register(int cipher); +int chc_init(hash_state *md); +int chc_process(hash_state *md, const unsigned char *in, unsigned long inlen); +int chc_done(hash_state *md, unsigned char *hash); +int chc_test(void); + +extern const struct ltc_hash_descriptor chc_desc; +#endif + +#ifdef LTC_WHIRLPOOL +int whirlpool_init(hash_state *md); +int whirlpool_process(hash_state *md, const unsigned char *in, unsigned long inlen); +int whirlpool_done(hash_state *md, unsigned char *hash); +int whirlpool_test(void); + +extern const struct ltc_hash_descriptor whirlpool_desc; +#endif + +#ifdef LTC_SHA512 +int sha512_init(hash_state *md); +int sha512_process(hash_state *md, const unsigned char *in, unsigned long inlen); +int sha512_done(hash_state *md, unsigned char *hash); +int sha512_test(void); + +extern const struct ltc_hash_descriptor sha512_desc; +#endif + +#ifdef LTC_SHA384 + #ifndef LTC_SHA512 + #error LTC_SHA512 is required for LTC_SHA384 + #endif +int sha384_init(hash_state *md); + + #define sha384_process sha512_process +int sha384_done(hash_state *md, unsigned char *hash); +int sha384_test(void); + +extern const struct ltc_hash_descriptor sha384_desc; +#endif + +#ifdef LTC_SHA256 +int sha256_init(hash_state *md); +int sha256_process(hash_state *md, const unsigned char *in, unsigned long inlen); +int sha256_done(hash_state *md, unsigned char *hash); +int sha256_test(void); + +extern const struct ltc_hash_descriptor sha256_desc; + + #ifdef LTC_SHA224 + #ifndef LTC_SHA256 + #error LTC_SHA256 is required for LTC_SHA224 + #endif +int sha224_init(hash_state *md); + + #define sha224_process sha256_process +int sha224_done(hash_state *md, unsigned char *hash); +int sha224_test(void); + +extern const struct ltc_hash_descriptor sha224_desc; + #endif +#endif + +#ifdef LTC_SHA1 +int sha1_init(hash_state *md); +int sha1_process(hash_state *md, const unsigned char *in, unsigned long inlen); +int sha1_done(hash_state *md, unsigned char *hash); +int sha1_test(void); + +extern const struct ltc_hash_descriptor sha1_desc; +#endif + +#ifdef LTC_MD5 +int md5_init(hash_state *md); +int md5_process(hash_state *md, const unsigned char *in, unsigned long inlen); +int md5_done(hash_state *md, unsigned char *hash); +int md5_test(void); + +extern const struct ltc_hash_descriptor md5_desc; +#endif + +#ifdef LTC_MD4 +int md4_init(hash_state *md); +int md4_process(hash_state *md, const unsigned char *in, unsigned long inlen); +int md4_done(hash_state *md, unsigned char *hash); +int md4_test(void); + +extern const struct ltc_hash_descriptor md4_desc; +#endif + +#ifdef LTC_MD2 +int md2_init(hash_state *md); +int md2_process(hash_state *md, const unsigned char *in, unsigned long inlen); +int md2_done(hash_state *md, unsigned char *hash); +int md2_test(void); + +extern const struct ltc_hash_descriptor md2_desc; +#endif + +#ifdef LTC_TIGER +int tiger_init(hash_state *md); +int tiger_process(hash_state *md, const unsigned char *in, unsigned long inlen); +int tiger_done(hash_state *md, unsigned char *hash); +int tiger_test(void); + +extern const struct ltc_hash_descriptor tiger_desc; +#endif + +#ifdef LTC_RIPEMD128 +int rmd128_init(hash_state *md); +int rmd128_process(hash_state *md, const unsigned char *in, unsigned long inlen); +int rmd128_done(hash_state *md, unsigned char *hash); +int rmd128_test(void); + +extern const struct ltc_hash_descriptor rmd128_desc; +#endif + +#ifdef LTC_RIPEMD160 +int rmd160_init(hash_state *md); +int rmd160_process(hash_state *md, const unsigned char *in, unsigned long inlen); +int rmd160_done(hash_state *md, unsigned char *hash); +int rmd160_test(void); + +extern const struct ltc_hash_descriptor rmd160_desc; +#endif + +#ifdef LTC_RIPEMD256 +int rmd256_init(hash_state *md); +int rmd256_process(hash_state *md, const unsigned char *in, unsigned long inlen); +int rmd256_done(hash_state *md, unsigned char *hash); +int rmd256_test(void); + +extern const struct ltc_hash_descriptor rmd256_desc; +#endif + +#ifdef LTC_RIPEMD320 +int rmd320_init(hash_state *md); +int rmd320_process(hash_state *md, const unsigned char *in, unsigned long inlen); +int rmd320_done(hash_state *md, unsigned char *hash); +int rmd320_test(void); + +extern const struct ltc_hash_descriptor rmd320_desc; +#endif + + +int find_hash(const char *name); +int find_hash_id(unsigned char ID); +int find_hash_oid(const unsigned long *ID, unsigned long IDlen); +int find_hash_any(const char *name, int digestlen); +int register_hash(const struct ltc_hash_descriptor *hash); +int unregister_hash(const struct ltc_hash_descriptor *hash); +int hash_is_valid(int idx); + +LTC_MUTEX_PROTO(ltc_hash_mutex) + +int hash_memory(int hash, + const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int hash_memory_multi(int hash, unsigned char *out, unsigned long *outlen, + const unsigned char *in, unsigned long inlen, ...); +int hash_filehandle(int hash, FILE *in, unsigned char *out, unsigned long *outlen); +int hash_file(int hash, const char *fname, unsigned char *out, unsigned long *outlen); + +/* a simple macro for making hash "process" functions */ +#define HASH_PROCESS(func_name, compress_name, state_var, block_size) \ + int func_name(hash_state * md, const unsigned char *in, unsigned long inlen) \ + { \ + unsigned long n; \ + int err; \ + LTC_ARGCHK(md != NULL); \ + LTC_ARGCHK(in != NULL); \ + if (md->state_var.curlen > sizeof(md->state_var.buf)) { \ + return CRYPT_INVALID_ARG; \ + } \ + while (inlen > 0) { \ + if (md->state_var.curlen == 0 && inlen >= block_size) { \ + if ((err = compress_name(md, (unsigned char *)in)) != CRYPT_OK) { \ + return err; \ + } \ + md->state_var.length += block_size * 8; \ + in += block_size; \ + inlen -= block_size; \ + } else { \ + n = MIN(inlen, (block_size - md->state_var.curlen)); \ + memcpy(md->state_var.buf + md->state_var.curlen, in, (size_t)n); \ + md->state_var.curlen += n; \ + in += n; \ + inlen -= n; \ + if (md->state_var.curlen == block_size) { \ + if ((err = compress_name(md, md->state_var.buf)) != CRYPT_OK) { \ + return err; \ + } \ + md->state_var.length += 8 * block_size; \ + md->state_var.curlen = 0; \ + } \ + } \ + } \ + return CRYPT_OK; \ + } + +/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_hash.h,v $ */ +/* $Revision: 1.22 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + +#ifdef LTC_HMAC +typedef struct Hmac_state { + hash_state md; + int hash; + hash_state hashstate; + unsigned char *key; +} hmac_state; + +int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned long keylen); +int hmac_process(hmac_state *hmac, const unsigned char *in, unsigned long inlen); +int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen); +int hmac_test(void); +int hmac_memory(int hash, + const unsigned char *key, unsigned long keylen, + const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int hmac_memory_multi(int hash, + const unsigned char *key, unsigned long keylen, + unsigned char *out, unsigned long *outlen, + const unsigned char *in, unsigned long inlen, ...); +int hmac_file(int hash, const char *fname, const unsigned char *key, + unsigned long keylen, + unsigned char *dst, unsigned long *dstlen); +#endif + +#ifdef LTC_OMAC + +typedef struct { + int cipher_idx, + buflen, + blklen; + unsigned char block[MAXBLOCKSIZE], + prev[MAXBLOCKSIZE], + Lu[2][MAXBLOCKSIZE]; + symmetric_key key; +} omac_state; + +int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned long keylen); +int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen); +int omac_done(omac_state *omac, unsigned char *out, unsigned long *outlen); +int omac_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int omac_memory_multi(int cipher, + const unsigned char *key, unsigned long keylen, + unsigned char *out, unsigned long *outlen, + const unsigned char *in, unsigned long inlen, ...); +int omac_file(int cipher, + const unsigned char *key, unsigned long keylen, + const char *filename, + unsigned char *out, unsigned long *outlen); +int omac_test(void); +#endif /* LTC_OMAC */ + +#ifdef LTC_PMAC + +typedef struct { + unsigned char Ls[32][MAXBLOCKSIZE], /* L shifted by i bits to the left */ + Li[MAXBLOCKSIZE], /* value of Li [current value, we calc from previous recall] */ + Lr[MAXBLOCKSIZE], /* L * x^-1 */ + block[MAXBLOCKSIZE], /* currently accumulated block */ + checksum[MAXBLOCKSIZE]; /* current checksum */ + + symmetric_key key; /* scheduled key for cipher */ + unsigned long block_index; /* index # for current block */ + int cipher_idx, /* cipher idx */ + block_len, /* length of block */ + buflen; /* number of bytes in the buffer */ +} pmac_state; + +int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned long keylen); +int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen); +int pmac_done(pmac_state *pmac, unsigned char *out, unsigned long *outlen); + +int pmac_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *msg, unsigned long msglen, + unsigned char *out, unsigned long *outlen); + +int pmac_memory_multi(int cipher, + const unsigned char *key, unsigned long keylen, + unsigned char *out, unsigned long *outlen, + const unsigned char *in, unsigned long inlen, ...); + +int pmac_file(int cipher, + const unsigned char *key, unsigned long keylen, + const char *filename, + unsigned char *out, unsigned long *outlen); + +int pmac_test(void); + +/* internal functions */ +int pmac_ntz(unsigned long x); +void pmac_shift_xor(pmac_state *pmac); +#endif /* PMAC */ + +#ifdef LTC_EAX_MODE + + #if !(defined(LTC_OMAC) && defined(LTC_CTR_MODE)) + #error LTC_EAX_MODE requires LTC_OMAC and CTR + #endif + +typedef struct { + unsigned char N[MAXBLOCKSIZE]; + symmetric_CTR ctr; + omac_state headeromac, ctomac; +} eax_state; + +int eax_init(eax_state *eax, int cipher, const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *header, unsigned long headerlen); + +int eax_encrypt(eax_state *eax, const unsigned char *pt, unsigned char *ct, unsigned long length); +int eax_decrypt(eax_state *eax, const unsigned char *ct, unsigned char *pt, unsigned long length); +int eax_addheader(eax_state *eax, const unsigned char *header, unsigned long length); +int eax_done(eax_state *eax, unsigned char *tag, unsigned long *taglen); + +int eax_encrypt_authenticate_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *header, unsigned long headerlen, + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen); + +int eax_decrypt_verify_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *header, unsigned long headerlen, + const unsigned char *ct, unsigned long ctlen, + unsigned char *pt, + unsigned char *tag, unsigned long taglen, + int *stat); + +int eax_test(void); +#endif /* EAX MODE */ + +#ifdef LTC_OCB_MODE +typedef struct { + unsigned char L[MAXBLOCKSIZE], /* L value */ + Ls[32][MAXBLOCKSIZE], /* L shifted by i bits to the left */ + Li[MAXBLOCKSIZE], /* value of Li [current value, we calc from previous recall] */ + Lr[MAXBLOCKSIZE], /* L * x^-1 */ + R[MAXBLOCKSIZE], /* R value */ + checksum[MAXBLOCKSIZE]; /* current checksum */ + + symmetric_key key; /* scheduled key for cipher */ + unsigned long block_index; /* index # for current block */ + int cipher, /* cipher idx */ + block_len; /* length of block */ +} ocb_state; + +int ocb_init(ocb_state *ocb, int cipher, + const unsigned char *key, unsigned long keylen, const unsigned char *nonce); + +int ocb_encrypt(ocb_state *ocb, const unsigned char *pt, unsigned char *ct); +int ocb_decrypt(ocb_state *ocb, const unsigned char *ct, unsigned char *pt); + +int ocb_done_encrypt(ocb_state *ocb, + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen); + +int ocb_done_decrypt(ocb_state *ocb, + const unsigned char *ct, unsigned long ctlen, + unsigned char *pt, + const unsigned char *tag, unsigned long taglen, int *stat); + +int ocb_encrypt_authenticate_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen); + +int ocb_decrypt_verify_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *nonce, + const unsigned char *ct, unsigned long ctlen, + unsigned char *pt, + const unsigned char *tag, unsigned long taglen, + int *stat); + +int ocb_test(void); + +/* internal functions */ +void ocb_shift_xor(ocb_state *ocb, unsigned char *Z); +int ocb_ntz(unsigned long x); +int s_ocb_done(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, unsigned char *tag, unsigned long *taglen, int mode); +#endif /* LTC_OCB_MODE */ + +#ifdef LTC_CCM_MODE + + #define CCM_ENCRYPT 0 + #define CCM_DECRYPT 1 + +int ccm_memory(int cipher, + const unsigned char *key, unsigned long keylen, + symmetric_key *uskey, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *header, unsigned long headerlen, + unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen, + int direction); + +int ccm_test(void); +#endif /* LTC_CCM_MODE */ + +#if defined(LRW_MODE) || defined(LTC_GCM_MODE) +void gcm_gf_mult(const unsigned char *a, const unsigned char *b, unsigned char *c); +#endif + + +/* table shared between GCM and LRW */ +#if defined(LTC_GCM_TABLES) || defined(LRW_TABLES) || ((defined(LTC_GCM_MODE) || defined(LTC_GCM_MODE)) && defined(LTC_FAST)) +extern const unsigned char gcm_shift_table[]; +#endif + +#ifdef LTC_GCM_MODE + + #define GCM_ENCRYPT 0 + #define GCM_DECRYPT 1 + + #define LTC_GCM_MODE_IV 0 + #define LTC_GCM_MODE_AAD 1 + #define LTC_GCM_MODE_TEXT 2 + +typedef struct { + symmetric_key K; + unsigned char H[16], /* multiplier */ + X[16], /* accumulator */ + Y[16], /* counter */ + Y_0[16], /* initial counter */ + buf[16]; /* buffer for stuff */ + + int cipher, /* which cipher */ + ivmode, /* Which mode is the IV in? */ + mode, /* mode the GCM code is in */ + buflen; /* length of data in buf */ + + ulong64 totlen, /* 64-bit counter used for IV and AAD */ + pttotlen; /* 64-bit counter for the PT */ + + #ifdef LTC_GCM_TABLES + unsigned char PC[16][256][16] /* 16 tables of 8x128 */ + #ifdef LTC_GCM_TABLES_SSE2 + __attribute__ ((aligned(16))) + #endif + ; + #endif +} gcm_state; + +void gcm_mult_h(gcm_state *gcm, unsigned char *I); + +int gcm_init(gcm_state *gcm, int cipher, + const unsigned char *key, int keylen); + +int gcm_reset(gcm_state *gcm); + +int gcm_add_iv(gcm_state *gcm, + const unsigned char *IV, unsigned long IVlen); + +int gcm_add_aad(gcm_state *gcm, + const unsigned char *adata, unsigned long adatalen); + +int gcm_process(gcm_state *gcm, + unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + int direction); + +int gcm_done(gcm_state *gcm, + unsigned char *tag, unsigned long *taglen); + +int gcm_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *IV, unsigned long IVlen, + const unsigned char *adata, unsigned long adatalen, + unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen, + int direction); +int gcm_test(void); +#endif /* LTC_GCM_MODE */ + +#ifdef LTC_PELICAN + +typedef struct pelican_state { + symmetric_key K; + unsigned char state[16]; + int buflen; +} pelican_state; + +int pelican_init(pelican_state *pelmac, const unsigned char *key, unsigned long keylen); +int pelican_process(pelican_state *pelmac, const unsigned char *in, unsigned long inlen); +int pelican_done(pelican_state *pelmac, unsigned char *out); +int pelican_test(void); + +int pelican_memory(const unsigned char *key, unsigned long keylen, + const unsigned char *in, unsigned long inlen, + unsigned char *out); +#endif + +#ifdef LTC_XCBC + +/* add this to "keylen" to xcbc_init to use a pure three-key XCBC MAC */ + #define LTC_XCBC_PURE 0x8000UL + +typedef struct { + unsigned char K[3][MAXBLOCKSIZE], + IV[MAXBLOCKSIZE]; + + symmetric_key key; + + int cipher, + buflen, + blocksize; +} xcbc_state; + +int xcbc_init(xcbc_state *xcbc, int cipher, const unsigned char *key, unsigned long keylen); +int xcbc_process(xcbc_state *xcbc, const unsigned char *in, unsigned long inlen); +int xcbc_done(xcbc_state *xcbc, unsigned char *out, unsigned long *outlen); +int xcbc_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int xcbc_memory_multi(int cipher, + const unsigned char *key, unsigned long keylen, + unsigned char *out, unsigned long *outlen, + const unsigned char *in, unsigned long inlen, ...); +int xcbc_file(int cipher, + const unsigned char *key, unsigned long keylen, + const char *filename, + unsigned char *out, unsigned long *outlen); +int xcbc_test(void); +#endif + +#ifdef LTC_F9_MODE + +typedef struct { + unsigned char akey[MAXBLOCKSIZE], + ACC[MAXBLOCKSIZE], + IV[MAXBLOCKSIZE]; + + symmetric_key key; + + int cipher, + buflen, + keylen, + blocksize; +} f9_state; + +int f9_init(f9_state *f9, int cipher, const unsigned char *key, unsigned long keylen); +int f9_process(f9_state *f9, const unsigned char *in, unsigned long inlen); +int f9_done(f9_state *f9, unsigned char *out, unsigned long *outlen); +int f9_memory(int cipher, + const unsigned char *key, unsigned long keylen, + const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int f9_memory_multi(int cipher, + const unsigned char *key, unsigned long keylen, + unsigned char *out, unsigned long *outlen, + const unsigned char *in, unsigned long inlen, ...); +int f9_file(int cipher, + const unsigned char *key, unsigned long keylen, + const char *filename, + unsigned char *out, unsigned long *outlen); +int f9_test(void); +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_mac.h,v $ */ +/* $Revision: 1.23 $ */ +/* $Date: 2007/05/12 14:37:41 $ */ + +/* ---- PRNG Stuff ---- */ +#ifdef LTC_YARROW +struct yarrow_prng { + int cipher, hash; + unsigned char pool[MAXBLOCKSIZE]; + symmetric_CTR ctr; + LTC_MUTEX_TYPE(prng_lock) +}; +#endif + +#ifdef LTC_RC4 +struct rc4_prng { + int x, y; + unsigned char buf[256]; +}; +#endif + +#ifdef LTC_FORTUNA +struct fortuna_prng { + hash_state pool[LTC_FORTUNA_POOLS]; /* the pools */ + + symmetric_key skey; + + unsigned char K[32], /* the current key */ + IV[16]; /* IV for CTR mode */ + + unsigned long pool_idx, /* current pool we will add to */ + pool0_len, /* length of 0'th pool */ + wd; + + ulong64 reset_cnt; /* number of times we have reset */ + LTC_MUTEX_TYPE(prng_lock) +}; +#endif + +#ifdef LTC_SOBER128 +struct sober128_prng { + ulong32 R[17], /* Working storage for the shift register */ + initR[17], /* saved register contents */ + konst, /* key dependent constant */ + sbuf; /* partial word encryption buffer */ + + int nbuf, /* number of part-word stream bits buffered */ + flag, /* first add_entropy call or not? */ + set; /* did we call add_entropy to set key? */ +}; +#endif + +typedef union Prng_state { + char dummy[1]; +#ifdef LTC_YARROW + struct yarrow_prng yarrow; +#endif +#ifdef LTC_RC4 + struct rc4_prng rc4; +#endif +#ifdef LTC_FORTUNA + struct fortuna_prng fortuna; +#endif +#ifdef LTC_SOBER128 + struct sober128_prng sober128; +#endif +} prng_state; + +/** PRNG descriptor */ +extern struct ltc_prng_descriptor { + /** Name of the PRNG */ + char *name; + /** size in bytes of exported state */ + int export_size; + + /** Start a PRNG state + @param prng [out] The state to initialize + @return CRYPT_OK if successful + */ + int (*start)(prng_state *prng); + + /** Add entropy to the PRNG + @param in The entropy + @param inlen Length of the entropy (octets)\ + @param prng The PRNG state + @return CRYPT_OK if successful + */ + int (*add_entropy)(const unsigned char *in, unsigned long inlen, prng_state *prng); + + /** Ready a PRNG state to read from + @param prng The PRNG state to ready + @return CRYPT_OK if successful + */ + int (*ready)(prng_state *prng); + + /** Read from the PRNG + @param out [out] Where to store the data + @param outlen Length of data desired (octets) + @param prng The PRNG state to read from + @return Number of octets read + */ + unsigned long (*read)(unsigned char *out, unsigned long outlen, prng_state *prng); + + /** Terminate a PRNG state + @param prng The PRNG state to terminate + @return CRYPT_OK if successful + */ + int (*done)(prng_state *prng); + + /** Export a PRNG state + @param out [out] The destination for the state + @param outlen [in/out] The max size and resulting size of the PRNG state + @param prng The PRNG to export + @return CRYPT_OK if successful + */ + int (*pexport)(unsigned char *out, unsigned long *outlen, prng_state *prng); + + /** Import a PRNG state + @param in The data to import + @param inlen The length of the data to import (octets) + @param prng The PRNG to initialize/import + @return CRYPT_OK if successful + */ + int (*pimport)(const unsigned char *in, unsigned long inlen, prng_state *prng); + + /** Self-test the PRNG + @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled + */ + int (*test)(void); +} prng_descriptor[]; + +#ifdef LTC_YARROW +int yarrow_start(prng_state *prng); +int yarrow_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); +int yarrow_ready(prng_state *prng); +unsigned long yarrow_read(unsigned char *out, unsigned long outlen, prng_state *prng); +int yarrow_done(prng_state *prng); +int yarrow_export(unsigned char *out, unsigned long *outlen, prng_state *prng); +int yarrow_import(const unsigned char *in, unsigned long inlen, prng_state *prng); +int yarrow_test(void); + +extern const struct ltc_prng_descriptor yarrow_desc; +#endif + +#ifdef LTC_FORTUNA +int fortuna_start(prng_state *prng); +int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); +int fortuna_ready(prng_state *prng); +unsigned long fortuna_read(unsigned char *out, unsigned long outlen, prng_state *prng); +int fortuna_done(prng_state *prng); +int fortuna_export(unsigned char *out, unsigned long *outlen, prng_state *prng); +int fortuna_import(const unsigned char *in, unsigned long inlen, prng_state *prng); +int fortuna_test(void); + +extern const struct ltc_prng_descriptor fortuna_desc; +#endif + +#ifdef LTC_RC4 +int rc4_start(prng_state *prng); +int rc4_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); +int rc4_ready(prng_state *prng); +unsigned long rc4_read(unsigned char *out, unsigned long outlen, prng_state *prng); +int rc4_done(prng_state *prng); +int rc4_export(unsigned char *out, unsigned long *outlen, prng_state *prng); +int rc4_import(const unsigned char *in, unsigned long inlen, prng_state *prng); +int rc4_test(void); + +extern const struct ltc_prng_descriptor rc4_desc; +#endif + +#ifdef LTC_SPRNG +int sprng_start(prng_state *prng); +int sprng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); +int sprng_ready(prng_state *prng); +unsigned long sprng_read(unsigned char *out, unsigned long outlen, prng_state *prng); +int sprng_done(prng_state *prng); +int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng); +int sprng_import(const unsigned char *in, unsigned long inlen, prng_state *prng); +int sprng_test(void); + +extern const struct ltc_prng_descriptor sprng_desc; +#endif + +#ifdef LTC_SOBER128 +int sober128_start(prng_state *prng); +int sober128_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); +int sober128_ready(prng_state *prng); +unsigned long sober128_read(unsigned char *out, unsigned long outlen, prng_state *prng); +int sober128_done(prng_state *prng); +int sober128_export(unsigned char *out, unsigned long *outlen, prng_state *prng); +int sober128_import(const unsigned char *in, unsigned long inlen, prng_state *prng); +int sober128_test(void); + +extern const struct ltc_prng_descriptor sober128_desc; +#endif + +int find_prng(const char *name); +int register_prng(const struct ltc_prng_descriptor *prng); +int unregister_prng(const struct ltc_prng_descriptor *prng); +int prng_is_valid(int idx); + +LTC_MUTEX_PROTO(ltc_prng_mutex) + +/* Slow RNG you **might** be able to use to seed a PRNG with. Be careful as this + * might not work on all platforms as planned + */ +unsigned long rng_get_bytes(unsigned char *out, + unsigned long outlen, + void ( *callback)(void)); + +int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void)); + + +/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_prng.h,v $ */ +/* $Revision: 1.9 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + +/* ---- NUMBER THEORY ---- */ + +enum { + PK_PUBLIC =0, + PK_PRIVATE=1 +}; + +int rand_prime(void *N, long len, prng_state *prng, int wprng); + +/* ---- RSA ---- */ +#ifdef LTC_MRSA + +/* Min and Max RSA key sizes (in bits) */ + #define MIN_RSA_SIZE 1024 + #define MAX_RSA_SIZE 4096 + +/** RSA LTC_PKCS style key */ +typedef struct Rsa_key { + /** Type of key, PK_PRIVATE or PK_PUBLIC */ + int type; + /** The public exponent */ + void *e; + /** The private exponent */ + void *d; + /** The modulus */ + void *N; + /** The p factor of N */ + void *p; + /** The q factor of N */ + void *q; + /** The 1/q mod p CRT param */ + void *qP; + /** The d mod (p - 1) CRT param */ + void *dP; + /** The d mod (q - 1) CRT param */ + void *dQ; +} rsa_key; + +int rsa_make_key(prng_state *prng, int wprng, int size, long e, rsa_key *key); + +int rsa_exptmod(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, int which, + rsa_key *key); + +void rsa_free(rsa_key *key); + +/* These use LTC_PKCS #1 v2.0 padding */ + #define rsa_encrypt_key(_in, _inlen, _out, _outlen, _lparam, _lparamlen, _prng, _prng_idx, _hash_idx, _key) \ + rsa_encrypt_key_ex(_in, _inlen, _out, _outlen, _lparam, _lparamlen, _prng, _prng_idx, _hash_idx, LTC_LTC_PKCS_1_OAEP, _key) + + #define rsa_decrypt_key(_in, _inlen, _out, _outlen, _lparam, _lparamlen, _hash_idx, _stat, _key) \ + rsa_decrypt_key_ex(_in, _inlen, _out, _outlen, _lparam, _lparamlen, _hash_idx, LTC_LTC_PKCS_1_OAEP, _stat, _key) + + #define rsa_sign_hash(_in, _inlen, _out, _outlen, _prng, _prng_idx, _hash_idx, _saltlen, _key) \ + rsa_sign_hash_ex(_in, _inlen, _out, _outlen, LTC_LTC_PKCS_1_PSS, _prng, _prng_idx, _hash_idx, _saltlen, _key) + + #define rsa_verify_hash(_sig, _siglen, _hash, _hashlen, _hash_idx, _saltlen, _stat, _key) \ + rsa_verify_hash_ex(_sig, _siglen, _hash, _hashlen, LTC_LTC_PKCS_1_PSS, _hash_idx, _saltlen, _stat, _key) + +/* These can be switched between LTC_PKCS #1 v2.x and LTC_PKCS #1 v1.5 paddings */ +int rsa_encrypt_key_ex(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + prng_state *prng, int prng_idx, int hash_idx, int padding, rsa_key *key); + +int rsa_decrypt_key_ex(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + int hash_idx, int padding, + int *stat, rsa_key *key); + +int rsa_sign_hash_ex(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + int padding, + prng_state *prng, int prng_idx, + int hash_idx, unsigned long saltlen, + rsa_key *key); + +int rsa_verify_hash_ex(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int padding, + int hash_idx, unsigned long saltlen, + int *stat, rsa_key *key); + +/* LTC_PKCS #1 import/export */ +int rsa_export(unsigned char *out, unsigned long *outlen, int type, rsa_key *key); +int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key); +#endif + +/* ---- Katja ---- */ +#ifdef MKAT + +/* Min and Max KAT key sizes (in bits) */ + #define MIN_KAT_SIZE 1024 + #define MAX_KAT_SIZE 4096 + +/** Katja LTC_PKCS style key */ +typedef struct KAT_key { + /** Type of key, PK_PRIVATE or PK_PUBLIC */ + int type; + /** The private exponent */ + void *d; + /** The modulus */ + void *N; + /** The p factor of N */ + void *p; + /** The q factor of N */ + void *q; + /** The 1/q mod p CRT param */ + void *qP; + /** The d mod (p - 1) CRT param */ + void *dP; + /** The d mod (q - 1) CRT param */ + void *dQ; + /** The pq param */ + void *pq; +} katja_key; + +int katja_make_key(prng_state *prng, int wprng, int size, katja_key *key); + +int katja_exptmod(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, int which, + katja_key *key); + +void katja_free(katja_key *key); + +/* These use LTC_PKCS #1 v2.0 padding */ +int katja_encrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + prng_state *prng, int prng_idx, int hash_idx, katja_key *key); + +int katja_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + int hash_idx, int *stat, + katja_key *key); + +/* LTC_PKCS #1 import/export */ +int katja_export(unsigned char *out, unsigned long *outlen, int type, katja_key *key); +int katja_import(const unsigned char *in, unsigned long inlen, katja_key *key); +#endif + +/* ---- ECC Routines ---- */ +#ifdef LTC_MECC + +/* size of our temp buffers for exported keys */ + #define ECC_BUF_SIZE 256 + +/* max private key size */ + #define ECC_MAXSIZE 66 + +/** Structure defines a NIST GF(p) curve */ +typedef struct { + /** The size of the curve in octets */ + int size; + + /** name of curve */ + char *name; + + /** The prime that defines the field the curve is in (encoded in hex) */ + char *prime; + + /** The fields B param (hex) */ + char *B; + + /** The order of the curve (hex) */ + char *order; + + /** The x co-ordinate of the base point on the curve (hex) */ + char *Gx; + + /** The y co-ordinate of the base point on the curve (hex) */ + char *Gy; +} ltc_ecc_set_type; + +/** A point on a ECC curve, stored in Jacbobian format such that (x,y,z) => (x/z^2, y/z^3, 1) when interpretted as affine */ +typedef struct { + /** The x co-ordinate */ + void *x; + + /** The y co-ordinate */ + void *y; + + /** The z co-ordinate */ + void *z; +} ecc_point; + +/** An ECC key */ +typedef struct { + /** Type of key, PK_PRIVATE or PK_PUBLIC */ + int type; + + /** Index into the ltc_ecc_sets[] for the parameters of this curve; if -1, then this key is using user supplied curve in dp */ + int idx; + + /** pointer to domain parameters; either points to NIST curves (identified by idx >= 0) or user supplied curve */ + const ltc_ecc_set_type *dp; + + /** The public key */ + ecc_point pubkey; + + /** The private key */ + void *k; +} ecc_key; + +/** the ECC params provided */ +extern const ltc_ecc_set_type ltc_ecc_sets[]; + +int ecc_test(void); +void ecc_sizes(int *low, int *high); +int ecc_get_size(ecc_key *key); + +int ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key); +int ecc_make_key_ex(prng_state *prng, int wprng, ecc_key *key, const ltc_ecc_set_type *dp); +void ecc_free(ecc_key *key); + +int ecc_export(unsigned char *out, unsigned long *outlen, int type, ecc_key *key); +int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key); +int ecc_import_ex(const unsigned char *in, unsigned long inlen, ecc_key *key, const ltc_ecc_set_type *dp); + +int ecc_ansi_x963_export(ecc_key *key, unsigned char *out, unsigned long *outlen); +int ecc_ansi_x963_import(const unsigned char *in, unsigned long inlen, ecc_key *key); +int ecc_ansi_x963_import_ex(const unsigned char *in, unsigned long inlen, ecc_key *key, ltc_ecc_set_type *dp); + +int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key, + unsigned char *out, unsigned long *outlen); + +int ecc_encrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, int hash, + ecc_key *key); + +int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + ecc_key *key); + +int ecc_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, ecc_key *key); + +int ecc_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int *stat, ecc_key *key); + +/* low level functions */ +ecc_point *ltc_ecc_new_point(void); +void ltc_ecc_del_point(ecc_point *p); +int ltc_ecc_is_valid_idx(int n); + +/* point ops (mp == montgomery digit) */ + #if !defined(LTC_MECC_ACCEL) || defined(LTM_LTC_DESC) || defined(GMP_LTC_DESC) +/* R = 2P */ +int ltc_ecc_projective_dbl_point(ecc_point *P, ecc_point *R, void *modulus, void *mp); + +/* R = P + Q */ +int ltc_ecc_projective_add_point(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *mp); + #endif + + #if defined(LTC_MECC_FP) +/* optimized point multiplication using fixed point cache (HAC algorithm 14.117) */ +int ltc_ecc_fp_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map); + +/* functions for saving/loading/freeing/adding to fixed point cache */ +int ltc_ecc_fp_save_state(unsigned char **out, unsigned long *outlen); +int ltc_ecc_fp_restore_state(unsigned char *in, unsigned long inlen); +void ltc_ecc_fp_free(void); +int ltc_ecc_fp_add_point(ecc_point *g, void *modulus, int lock); + +/* lock/unlock all points currently in fixed point cache */ +void ltc_ecc_fp_tablelock(int lock); + #endif + +/* R = kG */ +int ltc_ecc_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map); + + #ifdef LTC_ECC_SHAMIR +/* kA*A + kB*B = C */ +int ltc_ecc_mul2add(ecc_point *A, void *kA, + ecc_point *B, void *kB, + ecc_point *C, + void *modulus); + + #ifdef LTC_MECC_FP +/* Shamir's trick with optimized point multiplication using fixed point cache */ +int ltc_ecc_fp_mul2add(ecc_point *A, void *kA, + ecc_point *B, void *kB, + ecc_point *C, void *modulus); + #endif + #endif + + +/* map P to affine from projective */ +int ltc_ecc_map(ecc_point *P, void *modulus, void *mp); +#endif + +#ifdef LTC_MDSA + +/* Max diff between group and modulus size in bytes */ + #define LTC_MDSA_DELTA 512 + +/* Max DSA group size in bytes (default allows 4k-bit groups) */ + #define LTC_MDSA_MAX_GROUP 512 + +/** DSA key structure */ +typedef struct { + /** The key type, PK_PRIVATE or PK_PUBLIC */ + int type; + + /** The order of the sub-group used in octets */ + int qord; + + /** The generator */ + void *g; + + /** The prime used to generate the sub-group */ + void *q; + + /** The large prime that generats the field the contains the sub-group */ + void *p; + + /** The private key */ + void *x; + + /** The public key */ + void *y; +} dsa_key; + +int dsa_make_key(prng_state *prng, int wprng, int group_size, int modulus_size, dsa_key *key); +void dsa_free(dsa_key *key); + +int dsa_sign_hash_raw(const unsigned char *in, unsigned long inlen, + void *r, void *s, + prng_state *prng, int wprng, dsa_key *key); + +int dsa_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, dsa_key *key); + +int dsa_verify_hash_raw(void *r, void *s, + const unsigned char *hash, unsigned long hashlen, + int *stat, dsa_key *key); + +int dsa_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int *stat, dsa_key *key); + +int dsa_encrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, int hash, + dsa_key *key); + +int dsa_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + dsa_key *key); + +int dsa_import(const unsigned char *in, unsigned long inlen, dsa_key *key); +int dsa_export(unsigned char *out, unsigned long *outlen, int type, dsa_key *key); +int dsa_verify_key(dsa_key *key, int *stat); + +int dsa_shared_secret(void *private_key, void *base, + dsa_key *public_key, + unsigned char *out, unsigned long *outlen); +#endif + +#ifdef LTC_DER +/* DER handling */ + +enum { + LTC_ASN1_EOL, + LTC_ASN1_BOOLEAN, + LTC_ASN1_INTEGER, + LTC_ASN1_SHORT_INTEGER, + LTC_ASN1_BIT_STRING, + LTC_ASN1_OCTET_STRING, + LTC_ASN1_NULL, + LTC_ASN1_OBJECT_IDENTIFIER, + LTC_ASN1_IA5_STRING, + LTC_ASN1_PRINTABLE_STRING, + LTC_ASN1_UTF8_STRING, + LTC_ASN1_UTCTIME, + LTC_ASN1_CHOICE, + LTC_ASN1_SEQUENCE, + LTC_ASN1_SET, + LTC_ASN1_SETOF +}; + +/** A LTC ASN.1 list type */ +typedef struct ltc_asn1_list_ { + /** The LTC ASN.1 enumerated type identifier */ + int type; + /** The data to encode or place for decoding */ + void *data; + /** The size of the input or resulting output */ + unsigned long size; + /** The used flag, this is used by the CHOICE ASN.1 type to indicate which choice was made */ + int used; + /** prev/next entry in the list */ + struct ltc_asn1_list_ *prev, *next, *child, *parent; +} ltc_asn1_list; + + #define LTC_SET_ASN1(list, index, Type, Data, Size) \ + do { \ + int LTC_MACRO_temp = (index); \ + ltc_asn1_list *LTC_MACRO_list = (list); \ + LTC_MACRO_list[LTC_MACRO_temp].type = (Type); \ + LTC_MACRO_list[LTC_MACRO_temp].data = (void *)(Data); \ + LTC_MACRO_list[LTC_MACRO_temp].size = (Size); \ + LTC_MACRO_list[LTC_MACRO_temp].used = 0; \ + } while (0); + +/* SEQUENCE */ +int der_encode_sequence_ex(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen, int type_of); + + #define der_encode_sequence(list, inlen, out, outlen) der_encode_sequence_ex(list, inlen, out, outlen, LTC_ASN1_SEQUENCE) + +int der_decode_sequence_ex(const unsigned char *in, unsigned long inlen, + ltc_asn1_list *list, unsigned long outlen, int ordered); + + #define der_decode_sequence(in, inlen, list, outlen) der_decode_sequence_ex(in, inlen, list, outlen, 1) + +int der_length_sequence(ltc_asn1_list *list, unsigned long inlen, + unsigned long *outlen); + +/* SET */ + #define der_decode_set(in, inlen, list, outlen) der_decode_sequence_ex(in, inlen, list, outlen, 0) + #define der_length_set der_length_sequence +int der_encode_set(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +int der_encode_setof(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +/* VA list handy helpers with triplets of <type, size, data> */ +int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...); +int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...); + +/* FLEXI DECODER handle unknown list decoder */ +int der_decode_sequence_flexi(const unsigned char *in, unsigned long *inlen, ltc_asn1_list **out); +void der_free_sequence_flexi(ltc_asn1_list *list); +void der_sequence_free(ltc_asn1_list *in); + +/* BOOLEAN */ +int der_length_boolean(unsigned long *outlen); +int der_encode_boolean(int in, + unsigned char *out, unsigned long *outlen); +int der_decode_boolean(const unsigned char *in, unsigned long inlen, + int *out); + +/* INTEGER */ +int der_encode_integer(void *num, unsigned char *out, unsigned long *outlen); +int der_decode_integer(const unsigned char *in, unsigned long inlen, void *num); +int der_length_integer(void *num, unsigned long *len); + +/* INTEGER -- handy for 0..2^32-1 values */ +int der_decode_short_integer(const unsigned char *in, unsigned long inlen, unsigned long *num); +int der_encode_short_integer(unsigned long num, unsigned char *out, unsigned long *outlen); +int der_length_short_integer(unsigned long num, unsigned long *outlen); + +/* BIT STRING */ +int der_encode_bit_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_decode_bit_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_length_bit_string(unsigned long nbits, unsigned long *outlen); + +/* OCTET STRING */ +int der_encode_octet_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_decode_octet_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_length_octet_string(unsigned long noctets, unsigned long *outlen); + +/* OBJECT IDENTIFIER */ +int der_encode_object_identifier(unsigned long *words, unsigned long nwords, + unsigned char *out, unsigned long *outlen); +int der_decode_object_identifier(const unsigned char *in, unsigned long inlen, + unsigned long *words, unsigned long *outlen); +int der_length_object_identifier(unsigned long *words, unsigned long nwords, unsigned long *outlen); +unsigned long der_object_identifier_bits(unsigned long x); + +/* IA5 STRING */ +int der_encode_ia5_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_decode_ia5_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_length_ia5_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen); + +int der_ia5_char_encode(int c); +int der_ia5_value_decode(int v); + +/* Printable STRING */ +int der_encode_printable_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_decode_printable_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_length_printable_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen); + +int der_printable_char_encode(int c); +int der_printable_value_decode(int v); + +/* UTF-8 */ + #if (defined(SIZE_MAX) || __STDC_VERSION__ >= 199901L || defined(WCHAR_MAX) || defined(_WCHAR_T) || defined(_WCHAR_T_DEFINED) || defined (__WCHAR_TYPE__)) && !defined(LTC_NO_WCHAR) + #include <wchar.h> + #else +typedef ulong32 wchar_t; + #endif + +int der_encode_utf8_string(const wchar_t *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +int der_decode_utf8_string(const unsigned char *in, unsigned long inlen, + wchar_t *out, unsigned long *outlen); +unsigned long der_utf8_charsize(const wchar_t c); +int der_length_utf8_string(const wchar_t *in, unsigned long noctets, unsigned long *outlen); + + +/* CHOICE */ +int der_decode_choice(const unsigned char *in, unsigned long *inlen, + ltc_asn1_list *list, unsigned long outlen); + +/* UTCTime */ +typedef struct { + unsigned YY, /* year */ + MM, /* month */ + DD, /* day */ + hh, /* hour */ + mm, /* minute */ + ss, /* second */ + off_dir, /* timezone offset direction 0 == +, 1 == - */ + off_hh, /* timezone offset hours */ + off_mm; /* timezone offset minutes */ +} ltc_utctime; + +int der_encode_utctime(ltc_utctime *utctime, + unsigned char *out, unsigned long *outlen); + +int der_decode_utctime(const unsigned char *in, unsigned long *inlen, + ltc_utctime *out); + +int der_length_utctime(ltc_utctime *utctime, unsigned long *outlen); +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_pk.h,v $ */ +/* $Revision: 1.81 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + +/** math functions **/ +#define LTC_SOURCE +#define LTC_MP_LT -1 +#define LTC_MP_EQ 0 +#define LTC_MP_GT 1 + +#define LTC_MP_NO 0 +#define LTC_MP_YES 1 + +#ifndef LTC_MECC +typedef void ecc_point; +#endif + +#ifndef LTC_MRSA +typedef void rsa_key; +#endif + +/** math descriptor */ +typedef struct { + /** Name of the math provider */ + char *name; + + /** Bits per digit, amount of bits must fit in an unsigned long */ + int bits_per_digit; + +/* ---- init/deinit functions ---- */ + + /** initialize a bignum + @param a The number to initialize + @return CRYPT_OK on success + */ + int (*init)(void **a); + + /** init copy + @param dst The number to initialize and write to + @param src The number to copy from + @return CRYPT_OK on success + */ + int (*init_copy)(void **dst, void *src); + + /** deinit + @param a The number to free + @return CRYPT_OK on success + */ + void (*deinit)(void *a); + +/* ---- data movement ---- */ + + /** negate + @param src The number to negate + @param dst The destination + @return CRYPT_OK on success + */ + int (*neg)(void *src, void *dst); + + /** copy + @param src The number to copy from + @param dst The number to write to + @return CRYPT_OK on success + */ + int (*copy)(void *src, void *dst); + +/* ---- trivial low level functions ---- */ + + /** set small constant + @param a Number to write to + @param n Source upto bits_per_digit (actually meant for very small constants) + @return CRYPT_OK on succcess + */ + int (*set_int)(void *a, unsigned long n); + + /** get small constant + @param a Number to read, only fetches upto bits_per_digit from the number + @return The lower bits_per_digit of the integer (unsigned) + */ + unsigned long (*get_int)(void *a); + + /** get digit n + @param a The number to read from + @param n The number of the digit to fetch + @return The bits_per_digit sized n'th digit of a + */ + unsigned long (*get_digit)(void *a, int n); + + /** Get the number of digits that represent the number + @param a The number to count + @return The number of digits used to represent the number + */ + int (*get_digit_count)(void *a); + + /** compare two integers + @param a The left side integer + @param b The right side integer + @return LTC_MP_LT if a < b, LTC_MP_GT if a > b and LTC_MP_EQ otherwise. (signed comparison) + */ + int (*compare)(void *a, void *b); + + /** compare against int + @param a The left side integer + @param b The right side integer (upto bits_per_digit) + @return LTC_MP_LT if a < b, LTC_MP_GT if a > b and LTC_MP_EQ otherwise. (signed comparison) + */ + int (*compare_d)(void *a, unsigned long n); + + /** Count the number of bits used to represent the integer + @param a The integer to count + @return The number of bits required to represent the integer + */ + int (*count_bits)(void *a); + + /** Count the number of LSB bits which are zero + @param a The integer to count + @return The number of contiguous zero LSB bits + */ + int (*count_lsb_bits)(void *a); + + /** Compute a power of two + @param a The integer to store the power in + @param n The power of two you want to store (a = 2^n) + @return CRYPT_OK on success + */ + int (*twoexpt)(void *a, int n); + +/* ---- radix conversions ---- */ + + /** read ascii string + @param a The integer to store into + @param str The string to read + @param radix The radix the integer has been represented in (2-64) + @return CRYPT_OK on success + */ + int (*read_radix)(void *a, const char *str, int radix); + + /** write number to string + @param a The integer to store + @param str The destination for the string + @param radix The radix the integer is to be represented in (2-64) + @return CRYPT_OK on success + */ + int (*write_radix)(void *a, char *str, int radix); + + /** get size as unsigned char string + @param a The integer to get the size (when stored in array of octets) + @return The length of the integer + */ + unsigned long (*unsigned_size)(void *a); + + /** store an integer as an array of octets + @param src The integer to store + @param dst The buffer to store the integer in + @return CRYPT_OK on success + */ + int (*unsigned_write)(void *src, unsigned char *dst); + + /** read an array of octets and store as integer + @param dst The integer to load + @param src The array of octets + @param len The number of octets + @return CRYPT_OK on success + */ + int (*unsigned_read)(void *dst, unsigned char *src, unsigned long len); + +/* ---- basic math ---- */ + + /** add two integers + @param a The first source integer + @param b The second source integer + @param c The destination of "a + b" + @return CRYPT_OK on success + */ + int (*add)(void *a, void *b, void *c); + + + /** add two integers + @param a The first source integer + @param b The second source integer (single digit of upto bits_per_digit in length) + @param c The destination of "a + b" + @return CRYPT_OK on success + */ + int (*addi)(void *a, unsigned long b, void *c); + + /** subtract two integers + @param a The first source integer + @param b The second source integer + @param c The destination of "a - b" + @return CRYPT_OK on success + */ + int (*sub)(void *a, void *b, void *c); + + /** subtract two integers + @param a The first source integer + @param b The second source integer (single digit of upto bits_per_digit in length) + @param c The destination of "a - b" + @return CRYPT_OK on success + */ + int (*subi)(void *a, unsigned long b, void *c); + + /** multiply two integers + @param a The first source integer + @param b The second source integer (single digit of upto bits_per_digit in length) + @param c The destination of "a * b" + @return CRYPT_OK on success + */ + int (*mul)(void *a, void *b, void *c); + + /** multiply two integers + @param a The first source integer + @param b The second source integer (single digit of upto bits_per_digit in length) + @param c The destination of "a * b" + @return CRYPT_OK on success + */ + int (*muli)(void *a, unsigned long b, void *c); + + /** Square an integer + @param a The integer to square + @param b The destination + @return CRYPT_OK on success + */ + int (*sqr)(void *a, void *b); + + /** Divide an integer + @param a The dividend + @param b The divisor + @param c The quotient (can be NULL to signify don't care) + @param d The remainder (can be NULL to signify don't care) + @return CRYPT_OK on success + */ + int (*mpdiv)(void *a, void *b, void *c, void *d); + + /** divide by two + @param a The integer to divide (shift right) + @param b The destination + @return CRYPT_OK on success + */ + int (*div_2)(void *a, void *b); + + /** Get remainder (small value) + @param a The integer to reduce + @param b The modulus (upto bits_per_digit in length) + @param c The destination for the residue + @return CRYPT_OK on success + */ + int (*modi)(void *a, unsigned long b, unsigned long *c); + + /** gcd + @param a The first integer + @param b The second integer + @param c The destination for (a, b) + @return CRYPT_OK on success + */ + int (*gcd)(void *a, void *b, void *c); + + /** lcm + @param a The first integer + @param b The second integer + @param c The destination for [a, b] + @return CRYPT_OK on success + */ + int (*lcm)(void *a, void *b, void *c); + + /** Modular multiplication + @param a The first source + @param b The second source + @param c The modulus + @param d The destination (a*b mod c) + @return CRYPT_OK on success + */ + int (*mulmod)(void *a, void *b, void *c, void *d); + + /** Modular squaring + @param a The first source + @param b The modulus + @param c The destination (a*a mod b) + @return CRYPT_OK on success + */ + int (*sqrmod)(void *a, void *b, void *c); + + /** Modular inversion + @param a The value to invert + @param b The modulus + @param c The destination (1/a mod b) + @return CRYPT_OK on success + */ + int (*invmod)(void *, void *, void *); + +/* ---- reduction ---- */ + + /** setup montgomery + @param a The modulus + @param b The destination for the reduction digit + @return CRYPT_OK on success + */ + int (*montgomery_setup)(void *a, void **b); + + /** get normalization value + @param a The destination for the normalization value + @param b The modulus + @return CRYPT_OK on success + */ + int (*montgomery_normalization)(void *a, void *b); + + /** reduce a number + @param a The number [and dest] to reduce + @param b The modulus + @param c The value "b" from montgomery_setup() + @return CRYPT_OK on success + */ + int (*montgomery_reduce)(void *a, void *b, void *c); + + /** clean up (frees memory) + @param a The value "b" from montgomery_setup() + @return CRYPT_OK on success + */ + void (*montgomery_deinit)(void *a); + +/* ---- exponentiation ---- */ + + /** Modular exponentiation + @param a The base integer + @param b The power (can be negative) integer + @param c The modulus integer + @param d The destination + @return CRYPT_OK on success + */ + int (*exptmod)(void *a, void *b, void *c, void *d); + + /** Primality testing + @param a The integer to test + @param b The destination of the result (FP_YES if prime) + @return CRYPT_OK on success + */ + int (*isprime)(void *a, int *b); + +/* ---- (optional) ecc point math ---- */ + + /** ECC GF(p) point multiplication (from the NIST curves) + @param k The integer to multiply the point by + @param G The point to multiply + @param R The destination for kG + @param modulus The modulus for the field + @param map Boolean indicated whether to map back to affine or not (can be ignored if you work in affine only) + @return CRYPT_OK on success + */ + int (*ecc_ptmul)(void *k, ecc_point *G, ecc_point *R, void *modulus, int map); + + /** ECC GF(p) point addition + @param P The first point + @param Q The second point + @param R The destination of P + Q + @param modulus The modulus + @param mp The "b" value from montgomery_setup() + @return CRYPT_OK on success + */ + int (*ecc_ptadd)(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *mp); + + /** ECC GF(p) point double + @param P The first point + @param R The destination of 2P + @param modulus The modulus + @param mp The "b" value from montgomery_setup() + @return CRYPT_OK on success + */ + int (*ecc_ptdbl)(ecc_point *P, ecc_point *R, void *modulus, void *mp); + + /** ECC mapping from projective to affine, currently uses (x,y,z) => (x/z^2, y/z^3, 1) + @param P The point to map + @param modulus The modulus + @param mp The "b" value from montgomery_setup() + @return CRYPT_OK on success + @remark The mapping can be different but keep in mind a ecc_point only has three + integers (x,y,z) so if you use a different mapping you have to make it fit. + */ + int (*ecc_map)(ecc_point *P, void *modulus, void *mp); + + /** Computes kA*A + kB*B = C using Shamir's Trick + @param A First point to multiply + @param kA What to multiple A by + @param B Second point to multiply + @param kB What to multiple B by + @param C [out] Destination point (can overlap with A or B + @param modulus Modulus for curve + @return CRYPT_OK on success + */ + int (*ecc_mul2add)(ecc_point *A, void *kA, + ecc_point *B, void *kB, + ecc_point *C, + void *modulus); + +/* ---- (optional) rsa optimized math (for internal CRT) ---- */ + + /** RSA Key Generation + @param prng An active PRNG state + @param wprng The index of the PRNG desired + @param size The size of the modulus (key size) desired (octets) + @param e The "e" value (public key). e==65537 is a good choice + @param key [out] Destination of a newly created private key pair + @return CRYPT_OK if successful, upon error all allocated ram is freed + */ + int (*rsa_keygen)(prng_state *prng, int wprng, int size, long e, rsa_key *key); + + + /** RSA exponentiation + @param in The octet array representing the base + @param inlen The length of the input + @param out The destination (to be stored in an octet array format) + @param outlen The length of the output buffer and the resulting size (zero padded to the size of the modulus) + @param which PK_PUBLIC for public RSA and PK_PRIVATE for private RSA + @param key The RSA key to use + @return CRYPT_OK on success + */ + int (*rsa_me)(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, int which, + rsa_key *key); +} ltc_math_descriptor; + +extern ltc_math_descriptor ltc_mp; + +int ltc_init_multi(void **a, ...); +void ltc_deinit_multi(void *a, ...); + +#ifdef LTM_DESC +extern const ltc_math_descriptor ltm_desc; +#endif + +#ifdef TFM_DESC +extern const ltc_math_descriptor tfm_desc; +#endif + +#ifdef GMP_DESC +extern const ltc_math_descriptor gmp_desc; +#endif + +#if !defined(DESC_DEF_ONLY) && defined(LTC_SOURCE) + #undef MP_DIGIT_BIT + #undef mp_iszero + #undef mp_isodd + #undef mp_tohex + + #define MP_DIGIT_BIT ltc_mp.bits_per_digit + +/* some handy macros */ + #define mp_init(a) ltc_mp.init(a) + #define mp_init_multi ltc_init_multi + #define mp_clear(a) ltc_mp.deinit(a) + #define mp_clear_multi ltc_deinit_multi + #define mp_init_copy(a, b) ltc_mp.init_copy(a, b) + + #define mp_neg(a, b) ltc_mp.neg(a, b) + #define mp_copy(a, b) ltc_mp.copy(a, b) + + #define mp_set(a, b) ltc_mp.set_int(a, b) + #define mp_set_int(a, b) ltc_mp.set_int(a, b) + #define mp_get_int(a) ltc_mp.get_int(a) + #define mp_get_digit(a, n) ltc_mp.get_digit(a, n) + #define mp_get_digit_count(a) ltc_mp.get_digit_count(a) + #define mp_cmp(a, b) ltc_mp.compare(a, b) + #define mp_cmp_d(a, b) ltc_mp.compare_d(a, b) + #define mp_count_bits(a) ltc_mp.count_bits(a) + #define mp_cnt_lsb(a) ltc_mp.count_lsb_bits(a) + #define mp_2expt(a, b) ltc_mp.twoexpt(a, b) + + #define mp_read_radix(a, b, c) ltc_mp.read_radix(a, b, c) + #define mp_toradix(a, b, c) ltc_mp.write_radix(a, b, c) + #define mp_unsigned_bin_size(a) ltc_mp.unsigned_size(a) + #define mp_to_unsigned_bin(a, b) ltc_mp.unsigned_write(a, b) + #define mp_read_unsigned_bin(a, b, c) ltc_mp.unsigned_read(a, b, c) + + #define mp_add(a, b, c) ltc_mp.add(a, b, c) + #define mp_add_d(a, b, c) ltc_mp.addi(a, b, c) + #define mp_sub(a, b, c) ltc_mp.sub(a, b, c) + #define mp_sub_d(a, b, c) ltc_mp.subi(a, b, c) + #define mp_mul(a, b, c) ltc_mp.mul(a, b, c) + #define mp_mul_d(a, b, c) ltc_mp.muli(a, b, c) + #define mp_sqr(a, b) ltc_mp.sqr(a, b) + #define mp_div(a, b, c, d) ltc_mp.mpdiv(a, b, c, d) + #define mp_div_2(a, b) ltc_mp.div_2(a, b) + #define mp_mod(a, b, c) ltc_mp.mpdiv(a, b, NULL, c) + #define mp_mod_d(a, b, c) ltc_mp.modi(a, b, c) + #define mp_gcd(a, b, c) ltc_mp.gcd(a, b, c) + #define mp_lcm(a, b, c) ltc_mp.lcm(a, b, c) + + #define mp_mulmod(a, b, c, d) ltc_mp.mulmod(a, b, c, d) + #define mp_sqrmod(a, b, c) ltc_mp.sqrmod(a, b, c) + #define mp_invmod(a, b, c) ltc_mp.invmod(a, b, c) + + #define mp_montgomery_setup(a, b) ltc_mp.montgomery_setup(a, b) + #define mp_montgomery_normalization(a, b) ltc_mp.montgomery_normalization(a, b) + #define mp_montgomery_reduce(a, b, c) ltc_mp.montgomery_reduce(a, b, c) + #define mp_montgomery_free(a) ltc_mp.montgomery_deinit(a) + + #define mp_exptmod(a, b, c, d) ltc_mp.exptmod(a, b, c, d) + #define mp_prime_is_prime(a, b, c) ltc_mp.isprime(a, c) + + #define mp_iszero(a) (mp_cmp_d(a, 0) == LTC_MP_EQ ? LTC_MP_YES : LTC_MP_NO) + #define mp_isodd(a) (mp_get_digit_count(a) > 0 ? (mp_get_digit(a, 0) & 1 ? LTC_MP_YES : LTC_MP_NO) : LTC_MP_NO) + #define mp_exch(a, b) do { void *ABC__tmp = a; a = b; b = ABC__tmp; } while (0); + + #define mp_tohex(a, b) mp_toradix(a, b, 16) +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_math.h,v $ */ +/* $Revision: 1.44 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + +/* ---- LTC_BASE64 Routines ---- */ +#ifdef LTC_BASE64 +int base64_encode(const unsigned char *in, unsigned long len, + unsigned char *out, unsigned long *outlen); + +int base64_decode(const unsigned char *in, unsigned long len, + unsigned char *out, unsigned long *outlen); +#endif + +/* ---- MEM routines ---- */ +void zeromem(void *dst, size_t len); +void burn_stack(unsigned long len); + +const char *error_to_string(int err); + +extern const char *crypt_build_settings; + +/* ---- HMM ---- */ +int crypt_fsa(void *mp, ...); + +/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_misc.h,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + +/* Defines the LTC_ARGCHK macro used within the library */ +/* ARGTYPE is defined in mycrypt_cfg.h */ +#if ARGTYPE == 0 + + #include <signal.h> + +/* this is the default LibTomCrypt macro */ +void crypt_argchk(char *v, char *s, int d); + + #define LTC_ARGCHK(x) if (!(x)) { crypt_argchk(#x, __FILE__, __LINE__); } + #define LTC_ARGCHKVD(x) LTC_ARGCHK(x) + +#elif ARGTYPE == 1 + +/* fatal type of error */ + #define LTC_ARGCHK(x) assert((x)) + #define LTC_ARGCHKVD(x) LTC_ARGCHK(x) + +#elif ARGTYPE == 2 + + #define LTC_ARGCHK(x) if (!(x)) { fprintf(stderr, "\nwarning: ARGCHK failed at %s:%d\n", __FILE__, __LINE__); } + #define LTC_ARGCHKVD(x) LTC_ARGCHK(x) + +#elif ARGTYPE == 3 + + #define LTC_ARGCHK(x) + #define LTC_ARGCHKVD(x) LTC_ARGCHK(x) + +#elif ARGTYPE == 4 + + #define LTC_ARGCHK(x) if (!(x)) return CRYPT_INVALID_ARG; + #define LTC_ARGCHKVD(x) if (!(x)) return; +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_argchk.h,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/08/27 20:50:21 $ */ + +/* LTC_PKCS Header Info */ + +/* ===> LTC_PKCS #1 -- RSA Cryptography <=== */ +#ifdef LTC_PKCS_1 + +enum ltc_pkcs_1_v1_5_blocks { + LTC_LTC_PKCS_1_EMSA = 1, /* Block type 1 (LTC_PKCS #1 v1.5 signature padding) */ + LTC_LTC_PKCS_1_EME = 2 /* Block type 2 (LTC_PKCS #1 v1.5 encryption padding) */ +}; + +enum ltc_pkcs_1_paddings { + LTC_LTC_PKCS_1_V1_5 = 1, /* LTC_PKCS #1 v1.5 padding (\sa ltc_pkcs_1_v1_5_blocks) */ + LTC_LTC_PKCS_1_OAEP = 2, /* LTC_PKCS #1 v2.0 encryption padding */ + LTC_LTC_PKCS_1_PSS = 3 /* LTC_PKCS #1 v2.1 signature padding */ +}; + +int pkcs_1_mgf1(int hash_idx, + const unsigned char *seed, unsigned long seedlen, + unsigned char *mask, unsigned long masklen); + +int pkcs_1_i2osp(void *n, unsigned long modulus_len, unsigned char *out); +int pkcs_1_os2ip(void *n, unsigned char *in, unsigned long inlen); + +/* *** v1.5 padding */ +int pkcs_1_v1_5_encode(const unsigned char *msg, + unsigned long msglen, + int block_type, + unsigned long modulus_bitlen, + prng_state *prng, + int prng_idx, + unsigned char *out, + unsigned long *outlen); + +int pkcs_1_v1_5_decode(const unsigned char *msg, + unsigned long msglen, + int block_type, + unsigned long modulus_bitlen, + unsigned char *out, + unsigned long *outlen, + int *is_valid); + +/* *** v2.1 padding */ +int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, + const unsigned char *lparam, unsigned long lparamlen, + unsigned long modulus_bitlen, prng_state *prng, + int prng_idx, int hash_idx, + unsigned char *out, unsigned long *outlen); + +int pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, + const unsigned char *lparam, unsigned long lparamlen, + unsigned long modulus_bitlen, int hash_idx, + unsigned char *out, unsigned long *outlen, + int *res); + +int pkcs_1_pss_encode(const unsigned char *msghash, unsigned long msghashlen, + unsigned long saltlen, prng_state *prng, + int prng_idx, int hash_idx, + unsigned long modulus_bitlen, + unsigned char *out, unsigned long *outlen); + +int pkcs_1_pss_decode(const unsigned char *msghash, unsigned long msghashlen, + const unsigned char *sig, unsigned long siglen, + unsigned long saltlen, int hash_idx, + unsigned long modulus_bitlen, int *res); +#endif /* LTC_PKCS_1 */ + +/* ===> LTC_PKCS #5 -- Password Based Cryptography <=== */ +#ifdef LTC_PKCS_5 + +/* Algorithm #1 (old) */ +int pkcs_5_alg1(const unsigned char *password, unsigned long password_len, + const unsigned char *salt, + int iteration_count, int hash_idx, + unsigned char *out, unsigned long *outlen); + +/* Algorithm #2 (new) */ +int pkcs_5_alg2(const unsigned char *password, unsigned long password_len, + const unsigned char *salt, unsigned long salt_len, + int iteration_count, int hash_idx, + unsigned char *out, unsigned long *outlen); +#endif /* LTC_PKCS_5 */ + +/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt_pkcs.h,v $ */ +/* $Revision: 1.8 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + +#ifdef __cplusplus +} +#endif +#endif /* TOMCRYPT_H_ */ + + +/* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt.h,v $ */ +/* $Revision: 1.21 $ */ +/* $Date: 2006/12/16 19:34:05 $ */ + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_argchk.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_cipher_descriptor.c + Stores the cipher descriptor table, Tom St Denis + */ + +struct ltc_cipher_descriptor cipher_descriptor[TAB_SIZE] = { + { NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } +}; + +LTC_MUTEX_GLOBAL(ltc_cipher_mutex) + + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_cipher_descriptor.c,v $ */ +/* $Revision: 1.13 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_cipher_is_valid.c + Determine if cipher is valid, Tom St Denis + */ + +/* + Test if a cipher index is valid + @param idx The index of the cipher to search for + @return CRYPT_OK if valid + */ +int cipher_is_valid(int idx) { + LTC_MUTEX_LOCK(&ltc_cipher_mutex); + if ((idx < 0) || (idx >= TAB_SIZE) || (cipher_descriptor[idx].name == NULL)) { + LTC_MUTEX_UNLOCK(&ltc_cipher_mutex); + return CRYPT_INVALID_CIPHER; + } + LTC_MUTEX_UNLOCK(&ltc_cipher_mutex); + return CRYPT_OK; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_cipher_is_valid.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_find_cipher.c + Find a cipher in the descriptor tables, Tom St Denis + */ + +/** + Find a registered cipher by name + @param name The name of the cipher to look for + @return >= 0 if found, -1 if not present + */ +int find_cipher(const char *name) { + int x; + + LTC_ARGCHK(name != NULL); + LTC_MUTEX_LOCK(&ltc_cipher_mutex); + for (x = 0; x < TAB_SIZE; x++) { + if ((cipher_descriptor[x].name != NULL) && !XSTRCMP(cipher_descriptor[x].name, name)) { + LTC_MUTEX_UNLOCK(&ltc_cipher_mutex); + return x; + } + } + LTC_MUTEX_UNLOCK(&ltc_cipher_mutex); + return -1; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_find_cipher.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_find_cipher_any.c + Find a cipher in the descriptor tables, Tom St Denis + */ + +/** + Find a cipher flexibly. First by name then if not present by block and key size + @param name The name of the cipher desired + @param blocklen The minimum length of the block cipher desired (octets) + @param keylen The minimum length of the key size desired (octets) + @return >= 0 if found, -1 if not present + */ +int find_cipher_any(const char *name, int blocklen, int keylen) { + int x; + + LTC_ARGCHK(name != NULL); + + x = find_cipher(name); + if (x != -1) return x; + + LTC_MUTEX_LOCK(&ltc_cipher_mutex); + for (x = 0; x < TAB_SIZE; x++) { + if (cipher_descriptor[x].name == NULL) { + continue; + } + if ((blocklen <= (int)cipher_descriptor[x].block_length) && (keylen <= (int)cipher_descriptor[x].max_key_length)) { + LTC_MUTEX_UNLOCK(&ltc_cipher_mutex); + return x; + } + } + LTC_MUTEX_UNLOCK(&ltc_cipher_mutex); + return -1; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_find_cipher_any.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_find_cipher_id.c + Find cipher by ID, Tom St Denis + */ + +/** + Find a cipher by ID number + @param ID The ID (not same as index) of the cipher to find + @return >= 0 if found, -1 if not present + */ +int find_cipher_id(unsigned char ID) { + int x; + + LTC_MUTEX_LOCK(&ltc_cipher_mutex); + for (x = 0; x < TAB_SIZE; x++) { + if (cipher_descriptor[x].ID == ID) { + x = (cipher_descriptor[x].name == NULL) ? -1 : x; + LTC_MUTEX_UNLOCK(&ltc_cipher_mutex); + return x; + } + } + LTC_MUTEX_UNLOCK(&ltc_cipher_mutex); + return -1; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_find_cipher_id.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_find_hash.c + Find a hash, Tom St Denis + */ + +/** + Find a registered hash by name + @param name The name of the hash to look for + @return >= 0 if found, -1 if not present + */ +int find_hash(const char *name) { + int x; + + LTC_ARGCHK(name != NULL); + LTC_MUTEX_LOCK(&ltc_hash_mutex); + for (x = 0; x < TAB_SIZE; x++) { + if ((hash_descriptor[x].name != NULL) && (XSTRCMP(hash_descriptor[x].name, name) == 0)) { + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return x; + } + } + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return -1; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_find_hash.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_find_hash_any.c + Find a hash, Tom St Denis + */ + +/** + Find a hash flexibly. First by name then if not present by digest size + @param name The name of the hash desired + @param digestlen The minimum length of the digest size (octets) + @return >= 0 if found, -1 if not present + */int find_hash_any(const char *name, int digestlen) { + int x, y, z; + + LTC_ARGCHK(name != NULL); + + x = find_hash(name); + if (x != -1) return x; + + LTC_MUTEX_LOCK(&ltc_hash_mutex); + y = MAXBLOCKSIZE + 1; + z = -1; + for (x = 0; x < TAB_SIZE; x++) { + if (hash_descriptor[x].name == NULL) { + continue; + } + if (((int)hash_descriptor[x].hashsize >= digestlen) && ((int)hash_descriptor[x].hashsize < y)) { + z = x; + y = hash_descriptor[x].hashsize; + } + } + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return z; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_find_hash_any.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_find_hash_id.c + Find hash by ID, Tom St Denis + */ + +/** + Find a hash by ID number + @param ID The ID (not same as index) of the hash to find + @return >= 0 if found, -1 if not present + */ +int find_hash_id(unsigned char ID) { + int x; + + LTC_MUTEX_LOCK(&ltc_hash_mutex); + for (x = 0; x < TAB_SIZE; x++) { + if (hash_descriptor[x].ID == ID) { + x = (hash_descriptor[x].name == NULL) ? -1 : x; + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return x; + } + } + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return -1; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_find_hash_id.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_find_hash_oid.c + Find a hash, Tom St Denis + */ + +int find_hash_oid(const unsigned long *ID, unsigned long IDlen) { + int x; + + LTC_ARGCHK(ID != NULL); + LTC_MUTEX_LOCK(&ltc_hash_mutex); + for (x = 0; x < TAB_SIZE; x++) { + if ((hash_descriptor[x].name != NULL) && (hash_descriptor[x].OIDlen == IDlen) && !XMEMCMP(hash_descriptor[x].OID, ID, sizeof(unsigned long) * IDlen)) { + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return x; + } + } + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return -1; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_find_hash_oid.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_find_prng.c + Find a PRNG, Tom St Denis + */ + +/** + Find a registered PRNG by name + @param name The name of the PRNG to look for + @return >= 0 if found, -1 if not present + */ +int find_prng(const char *name) { + int x; + + LTC_ARGCHK(name != NULL); + LTC_MUTEX_LOCK(&ltc_prng_mutex); + for (x = 0; x < TAB_SIZE; x++) { + if ((prng_descriptor[x].name != NULL) && (XSTRCMP(prng_descriptor[x].name, name) == 0)) { + LTC_MUTEX_UNLOCK(&ltc_prng_mutex); + return x; + } + } + LTC_MUTEX_UNLOCK(&ltc_prng_mutex); + return -1; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_find_prng.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +#include <stdarg.h> + +/** + @file crypt_fsa.c + LibTomCrypt FULL SPEED AHEAD!, Tom St Denis + */ + +/* format is ltc_mp, cipher_desc, [cipher_desc], NULL, hash_desc, [hash_desc], NULL, prng_desc, [prng_desc], NULL */ +int crypt_fsa(void *mp, ...) { + int err; + va_list args; + void *p; + + va_start(args, mp); + if (mp != NULL) { + XMEMCPY(&ltc_mp, mp, sizeof(ltc_mp)); + } + + while ((p = va_arg(args, void *)) != NULL) { + if ((err = register_cipher(p)) != CRYPT_OK) { + va_end(args); + return err; + } + } + + while ((p = va_arg(args, void *)) != NULL) { + if ((err = register_hash(p)) != CRYPT_OK) { + va_end(args); + return err; + } + } + + while ((p = va_arg(args, void *)) != NULL) { + if ((err = register_prng(p)) != CRYPT_OK) { + va_end(args); + return err; + } + } + + va_end(args); + return CRYPT_OK; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_fsa.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_hash_descriptor.c + Stores the hash descriptor table, Tom St Denis + */ + +struct ltc_hash_descriptor hash_descriptor[TAB_SIZE] = { + { NULL, 0, 0, 0, { 0 }, 0, NULL, NULL, NULL, NULL, NULL } +}; + +LTC_MUTEX_GLOBAL(ltc_hash_mutex) + + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_hash_descriptor.c,v $ */ +/* $Revision: 1.10 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_hash_is_valid.c + Determine if hash is valid, Tom St Denis + */ + +/* + Test if a hash index is valid + @param idx The index of the hash to search for + @return CRYPT_OK if valid + */ +int hash_is_valid(int idx) { + LTC_MUTEX_LOCK(&ltc_hash_mutex); + if ((idx < 0) || (idx >= TAB_SIZE) || (hash_descriptor[idx].name == NULL)) { + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return CRYPT_INVALID_HASH; + } + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return CRYPT_OK; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_hash_is_valid.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +ltc_math_descriptor ltc_mp; + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_prng_descriptor.c + Stores the PRNG descriptors, Tom St Denis + */ +struct ltc_prng_descriptor prng_descriptor[TAB_SIZE] = { + { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } +}; + +LTC_MUTEX_GLOBAL(ltc_prng_mutex) + + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_prng_descriptor.c,v $ */ +/* $Revision: 1.8 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_prng_is_valid.c + Determine if PRNG is valid, Tom St Denis + */ + +/* + Test if a PRNG index is valid + @param idx The index of the PRNG to search for + @return CRYPT_OK if valid + */ +int prng_is_valid(int idx) { + LTC_MUTEX_LOCK(&ltc_prng_mutex); + if ((idx < 0) || (idx >= TAB_SIZE) || (prng_descriptor[idx].name == NULL)) { + LTC_MUTEX_UNLOCK(&ltc_prng_mutex); + return CRYPT_INVALID_PRNG; + } + LTC_MUTEX_UNLOCK(&ltc_prng_mutex); + return CRYPT_OK; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_prng_is_valid.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_register_cipher.c + Register a cipher, Tom St Denis + */ + +/** + Register a cipher with the descriptor table + @param cipher The cipher you wish to register + @return value >= 0 if successfully added (or already present), -1 if unsuccessful + */ +int register_cipher(const struct ltc_cipher_descriptor *cipher) { + int x; + + LTC_ARGCHK(cipher != NULL); + + /* is it already registered? */ + LTC_MUTEX_LOCK(&ltc_cipher_mutex); + for (x = 0; x < TAB_SIZE; x++) { + if ((cipher_descriptor[x].name != NULL) && (cipher_descriptor[x].ID == cipher->ID)) { + LTC_MUTEX_UNLOCK(&ltc_cipher_mutex); + return x; + } + } + + /* find a blank spot */ + for (x = 0; x < TAB_SIZE; x++) { + if (cipher_descriptor[x].name == NULL) { + XMEMCPY(&cipher_descriptor[x], cipher, sizeof(struct ltc_cipher_descriptor)); + LTC_MUTEX_UNLOCK(&ltc_cipher_mutex); + return x; + } + } + + /* no spot */ + LTC_MUTEX_UNLOCK(&ltc_cipher_mutex); + return -1; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_register_cipher.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_register_hash.c + Register a HASH, Tom St Denis + */ + +/** + Register a hash with the descriptor table + @param hash The hash you wish to register + @return value >= 0 if successfully added (or already present), -1 if unsuccessful + */ +int register_hash(const struct ltc_hash_descriptor *hash) { + int x; + + LTC_ARGCHK(hash != NULL); + + /* is it already registered? */ + LTC_MUTEX_LOCK(&ltc_hash_mutex); + for (x = 0; x < TAB_SIZE; x++) { + if (XMEMCMP(&hash_descriptor[x], hash, sizeof(struct ltc_hash_descriptor)) == 0) { + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return x; + } + } + + /* find a blank spot */ + for (x = 0; x < TAB_SIZE; x++) { + if (hash_descriptor[x].name == NULL) { + XMEMCPY(&hash_descriptor[x], hash, sizeof(struct ltc_hash_descriptor)); + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return x; + } + } + + /* no spot */ + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return -1; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_register_hash.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_register_prng.c + Register a PRNG, Tom St Denis + */ + +/** + Register a PRNG with the descriptor table + @param prng The PRNG you wish to register + @return value >= 0 if successfully added (or already present), -1 if unsuccessful + */ +int register_prng(const struct ltc_prng_descriptor *prng) { + int x; + + LTC_ARGCHK(prng != NULL); + + /* is it already registered? */ + LTC_MUTEX_LOCK(&ltc_prng_mutex); + for (x = 0; x < TAB_SIZE; x++) { + if (XMEMCMP(&prng_descriptor[x], prng, sizeof(struct ltc_prng_descriptor)) == 0) { + LTC_MUTEX_UNLOCK(&ltc_prng_mutex); + return x; + } + } + + /* find a blank spot */ + for (x = 0; x < TAB_SIZE; x++) { + if (prng_descriptor[x].name == NULL) { + XMEMCPY(&prng_descriptor[x], prng, sizeof(struct ltc_prng_descriptor)); + LTC_MUTEX_UNLOCK(&ltc_prng_mutex); + return x; + } + } + + /* no spot */ + LTC_MUTEX_UNLOCK(&ltc_prng_mutex); + return -1; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_register_prng.c,v $ */ +/* $Revision: 1.8 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_unregister_cipher.c + Unregister a cipher, Tom St Denis + */ + +/** + Unregister a cipher from the descriptor table + @param cipher The cipher descriptor to remove + @return CRYPT_OK on success + */ +int unregister_cipher(const struct ltc_cipher_descriptor *cipher) { + int x; + + LTC_ARGCHK(cipher != NULL); + + /* is it already registered? */ + LTC_MUTEX_LOCK(&ltc_cipher_mutex); + for (x = 0; x < TAB_SIZE; x++) { + if (XMEMCMP(&cipher_descriptor[x], cipher, sizeof(struct ltc_cipher_descriptor)) == 0) { + cipher_descriptor[x].name = NULL; + cipher_descriptor[x].ID = 255; + LTC_MUTEX_UNLOCK(&ltc_cipher_mutex); + return CRYPT_OK; + } + } + LTC_MUTEX_UNLOCK(&ltc_cipher_mutex); + return CRYPT_ERROR; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_unregister_cipher.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_unregister_hash.c + Unregister a hash, Tom St Denis + */ + +/** + Unregister a hash from the descriptor table + @param hash The hash descriptor to remove + @return CRYPT_OK on success + */ +int unregister_hash(const struct ltc_hash_descriptor *hash) { + int x; + + LTC_ARGCHK(hash != NULL); + + /* is it already registered? */ + LTC_MUTEX_LOCK(&ltc_hash_mutex); + for (x = 0; x < TAB_SIZE; x++) { + if (XMEMCMP(&hash_descriptor[x], hash, sizeof(struct ltc_hash_descriptor)) == 0) { + hash_descriptor[x].name = NULL; + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return CRYPT_OK; + } + } + LTC_MUTEX_UNLOCK(&ltc_hash_mutex); + return CRYPT_ERROR; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_unregister_hash.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file crypt_unregister_prng.c + Unregister a PRNG, Tom St Denis + */ + +/** + Unregister a PRNG from the descriptor table + @param prng The PRNG descriptor to remove + @return CRYPT_OK on success + */ +int unregister_prng(const struct ltc_prng_descriptor *prng) { + int x; + + LTC_ARGCHK(prng != NULL); + + /* is it already registered? */ + LTC_MUTEX_LOCK(&ltc_prng_mutex); + for (x = 0; x < TAB_SIZE; x++) { + if (XMEMCMP(&prng_descriptor[x], prng, sizeof(struct ltc_prng_descriptor)) != 0) { + prng_descriptor[x].name = NULL; + LTC_MUTEX_UNLOCK(&ltc_prng_mutex); + return CRYPT_OK; + } + } + LTC_MUTEX_UNLOCK(&ltc_prng_mutex); + return CRYPT_ERROR; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/crypt/crypt_unregister_prng.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_decode_bit_string.c + ASN.1 DER, encode a BIT STRING, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Store a BIT STRING + @param in The DER encoded BIT STRING + @param inlen The size of the DER BIT STRING + @param out [out] The array of bits stored (one per char) + @param outlen [in/out] The number of bits stored + @return CRYPT_OK if successful + */ +int der_decode_bit_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { + unsigned long dlen, blen, x, y; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* packet must be at least 4 bytes */ + if (inlen < 4) { + return CRYPT_INVALID_ARG; + } + + /* check for 0x03 */ + if ((in[0] & 0x1F) != 0x03) { + return CRYPT_INVALID_PACKET; + } + + /* offset in the data */ + x = 1; + + /* get the length of the data */ + if (in[x] & 0x80) { + /* long format get number of length bytes */ + y = in[x++] & 0x7F; + + /* invalid if 0 or > 2 */ + if ((y == 0) || (y > 2)) { + return CRYPT_INVALID_PACKET; + } + + /* read the data len */ + dlen = 0; + while (y--) { + dlen = (dlen << 8) | (unsigned long)in[x++]; + } + } else { + /* short format */ + dlen = in[x++] & 0x7F; + } + + /* is the data len too long or too short? */ + if ((dlen == 0) || (dlen + x > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* get padding count */ + blen = ((dlen - 1) << 3) - (in[x++] & 7); + + /* too many bits? */ + if (blen > *outlen) { + *outlen = blen; + return CRYPT_BUFFER_OVERFLOW; + } + + /* decode/store the bits */ + for (y = 0; y < blen; y++) { + out[y] = (in[x] & (1 << (7 - (y & 7)))) ? 1 : 0; + if ((y & 7) == 7) { + ++x; + } + } + + /* we done */ + *outlen = blen; + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/bit/der_decode_bit_string.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_decode_boolean.c + ASN.1 DER, decode a BOOLEAN, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Read a BOOLEAN + @param in The destination for the DER encoded BOOLEAN + @param inlen The size of the DER BOOLEAN + @param out [out] The boolean to decode + @return CRYPT_OK if successful + */ +int der_decode_boolean(const unsigned char *in, unsigned long inlen, + int *out) { + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + + if ((inlen != 3) || (in[0] != 0x01) || (in[1] != 0x01) || ((in[2] != 0x00) && (in[2] != 0xFF))) { + return CRYPT_INVALID_ARG; + } + + *out = (in[2] == 0xFF) ? 1 : 0; + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/boolean/der_decode_boolean.c,v $ */ +/* $Revision: 1.2 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_decode_choice.c + ASN.1 DER, decode a CHOICE, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Decode a CHOICE + @param in The DER encoded input + @param inlen [in/out] The size of the input and resulting size of read type + @param list The list of items to decode + @param outlen The number of items in the list + @return CRYPT_OK on success + */ +int der_decode_choice(const unsigned char *in, unsigned long *inlen, + ltc_asn1_list *list, unsigned long outlen) { + unsigned long size, x, z; + void *data; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(inlen != NULL); + LTC_ARGCHK(list != NULL); + + /* get blk size */ + if (*inlen < 2) { + return CRYPT_INVALID_PACKET; + } + + /* set all of the "used" flags to zero */ + for (x = 0; x < outlen; x++) { + list[x].used = 0; + } + + /* now scan until we have a winner */ + for (x = 0; x < outlen; x++) { + size = list[x].size; + data = list[x].data; + + switch (list[x].type) { + case LTC_ASN1_INTEGER: + if (der_decode_integer(in, *inlen, data) == CRYPT_OK) { + if (der_length_integer(data, &z) == CRYPT_OK) { + list[x].used = 1; + *inlen = z; + return CRYPT_OK; + } + } + break; + + case LTC_ASN1_SHORT_INTEGER: + if (der_decode_short_integer(in, *inlen, data) == CRYPT_OK) { + if (der_length_short_integer(size, &z) == CRYPT_OK) { + list[x].used = 1; + *inlen = z; + return CRYPT_OK; + } + } + break; + + case LTC_ASN1_BIT_STRING: + if (der_decode_bit_string(in, *inlen, data, &size) == CRYPT_OK) { + if (der_length_bit_string(size, &z) == CRYPT_OK) { + list[x].used = 1; + list[x].size = size; + *inlen = z; + return CRYPT_OK; + } + } + break; + + case LTC_ASN1_OCTET_STRING: + if (der_decode_octet_string(in, *inlen, data, &size) == CRYPT_OK) { + if (der_length_octet_string(size, &z) == CRYPT_OK) { + list[x].used = 1; + list[x].size = size; + *inlen = z; + return CRYPT_OK; + } + } + break; + + case LTC_ASN1_NULL: + if ((*inlen == 2) && (in[x] == 0x05) && (in[x + 1] == 0x00)) { + *inlen = 2; + list[x].used = 1; + return CRYPT_OK; + } + break; + + case LTC_ASN1_OBJECT_IDENTIFIER: + if (der_decode_object_identifier(in, *inlen, data, &size) == CRYPT_OK) { + if (der_length_object_identifier(data, size, &z) == CRYPT_OK) { + list[x].used = 1; + list[x].size = size; + *inlen = z; + return CRYPT_OK; + } + } + break; + + case LTC_ASN1_IA5_STRING: + if (der_decode_ia5_string(in, *inlen, data, &size) == CRYPT_OK) { + if (der_length_ia5_string(data, size, &z) == CRYPT_OK) { + list[x].used = 1; + list[x].size = size; + *inlen = z; + return CRYPT_OK; + } + } + break; + + + case LTC_ASN1_PRINTABLE_STRING: + if (der_decode_printable_string(in, *inlen, data, &size) == CRYPT_OK) { + if (der_length_printable_string(data, size, &z) == CRYPT_OK) { + list[x].used = 1; + list[x].size = size; + *inlen = z; + return CRYPT_OK; + } + } + break; + + case LTC_ASN1_UTF8_STRING: + if (der_decode_utf8_string(in, *inlen, data, &size) == CRYPT_OK) { + if (der_length_utf8_string(data, size, &z) == CRYPT_OK) { + list[x].used = 1; + list[x].size = size; + *inlen = z; + return CRYPT_OK; + } + } + break; + + case LTC_ASN1_UTCTIME: + z = *inlen; + if (der_decode_utctime(in, &z, data) == CRYPT_OK) { + list[x].used = 1; + *inlen = z; + return CRYPT_OK; + } + break; + + case LTC_ASN1_SET: + case LTC_ASN1_SETOF: + case LTC_ASN1_SEQUENCE: + if (der_decode_sequence(in, *inlen, data, size) == CRYPT_OK) { + if (der_length_sequence(data, size, &z) == CRYPT_OK) { + list[x].used = 1; + *inlen = z; + return CRYPT_OK; + } + } + break; + + default: + return CRYPT_INVALID_ARG; + } + } + + return CRYPT_INVALID_PACKET; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/choice/der_decode_choice.c,v $ */ +/* $Revision: 1.9 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_decode_ia5_string.c + ASN.1 DER, encode a IA5 STRING, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Store a IA5 STRING + @param in The DER encoded IA5 STRING + @param inlen The size of the DER IA5 STRING + @param out [out] The array of octets stored (one per char) + @param outlen [in/out] The number of octets stored + @return CRYPT_OK if successful + */ +int der_decode_ia5_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { + unsigned long x, y, len; + int t; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* must have header at least */ + if (inlen < 2) { + return CRYPT_INVALID_PACKET; + } + + /* check for 0x16 */ + if ((in[0] & 0x1F) != 0x16) { + return CRYPT_INVALID_PACKET; + } + x = 1; + + /* decode the length */ + if (in[x] & 0x80) { + /* valid # of bytes in length are 1,2,3 */ + y = in[x] & 0x7F; + if ((y == 0) || (y > 3) || ((x + y) > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* read the length in */ + len = 0; + ++x; + while (y--) { + len = (len << 8) | in[x++]; + } + } else { + len = in[x++] & 0x7F; + } + + /* is it too long? */ + if (len > *outlen) { + *outlen = len; + return CRYPT_BUFFER_OVERFLOW; + } + + if (len + x > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* read the data */ + for (y = 0; y < len; y++) { + t = der_ia5_value_decode(in[x++]); + if (t == -1) { + return CRYPT_INVALID_ARG; + } + out[y] = t; + } + + *outlen = y; + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/ia5/der_decode_ia5_string.c,v $ */ +/* $Revision: 1.4 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_decode_integer.c + ASN.1 DER, decode an integer, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Read a mp_int integer + @param in The DER encoded data + @param inlen Size of DER encoded data + @param num The first mp_int to decode + @return CRYPT_OK if successful + */ +int der_decode_integer(const unsigned char *in, unsigned long inlen, void *num) { + unsigned long x, y, z; + int err; + + LTC_ARGCHK(num != NULL); + LTC_ARGCHK(in != NULL); + + /* min DER INTEGER is 0x02 01 00 == 0 */ + if (inlen < (1 + 1 + 1)) { + return CRYPT_INVALID_PACKET; + } + + /* ok expect 0x02 when we AND with 0001 1111 [1F] */ + x = 0; + if ((in[x++] & 0x1F) != 0x02) { + return CRYPT_INVALID_PACKET; + } + + /* now decode the len stuff */ + z = in[x++]; + + if ((z & 0x80) == 0x00) { + /* short form */ + + /* will it overflow? */ + if (x + z > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* no so read it */ + if ((err = mp_read_unsigned_bin(num, (unsigned char *)in + x, z)) != CRYPT_OK) { + return err; + } + } else { + /* long form */ + z &= 0x7F; + + /* will number of length bytes overflow? (or > 4) */ + if (((x + z) > inlen) || (z > 4) || (z == 0)) { + return CRYPT_INVALID_PACKET; + } + + /* now read it in */ + y = 0; + while (z--) { + y = ((unsigned long)(in[x++])) | (y << 8); + } + + /* now will reading y bytes overrun? */ + if ((x + y) > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* no so read it */ + if ((err = mp_read_unsigned_bin(num, (unsigned char *)in + x, y)) != CRYPT_OK) { + return err; + } + } + + /* see if it's negative */ + if (in[x] & 0x80) { + void *tmp; + if (mp_init(&tmp) != CRYPT_OK) { + return CRYPT_MEM; + } + + if ((mp_2expt(tmp, mp_count_bits(num)) != CRYPT_OK) || (mp_sub(num, tmp, num) != CRYPT_OK)) { + mp_clear(tmp); + return CRYPT_MEM; + } + mp_clear(tmp); + } + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/integer/der_decode_integer.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_decode_object_identifier.c + ASN.1 DER, Decode Object Identifier, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Decode OID data and store the array of integers in words + @param in The OID DER encoded data + @param inlen The length of the OID data + @param words [out] The destination of the OID words + @param outlen [in/out] The number of OID words + @return CRYPT_OK if successful + */ +int der_decode_object_identifier(const unsigned char *in, unsigned long inlen, + unsigned long *words, unsigned long *outlen) { + unsigned long x, y, t, len; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(words != NULL); + LTC_ARGCHK(outlen != NULL); + + /* header is at least 3 bytes */ + if (inlen < 3) { + return CRYPT_INVALID_PACKET; + } + + /* must be room for at least two words */ + if (*outlen < 2) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* decode the packet header */ + x = 0; + if ((in[x++] & 0x1F) != 0x06) { + return CRYPT_INVALID_PACKET; + } + + /* get the length */ + if (in[x] < 128) { + len = in[x++]; + } else { + if ((in[x] < 0x81) || (in[x] > 0x82)) { + return CRYPT_INVALID_PACKET; + } + y = in[x++] & 0x7F; + len = 0; + while (y--) { + len = (len << 8) | (unsigned long)in[x++]; + } + } + + if ((len < 1) || ((len + x) > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* decode words */ + y = 0; + t = 0; + while (len--) { + t = (t << 7) | (in[x] & 0x7F); + if (!(in[x++] & 0x80)) { + /* store t */ + if (y >= *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + if (y == 0) { + words[0] = t / 40; + words[1] = t % 40; + y = 2; + } else { + words[y++] = t; + } + t = 0; + } + } + + *outlen = y; + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_decode_octet_string.c + ASN.1 DER, encode a OCTET STRING, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Store a OCTET STRING + @param in The DER encoded OCTET STRING + @param inlen The size of the DER OCTET STRING + @param out [out] The array of octets stored (one per char) + @param outlen [in/out] The number of octets stored + @return CRYPT_OK if successful + */ +int der_decode_octet_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { + unsigned long x, y, len; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* must have header at least */ + if (inlen < 2) { + return CRYPT_INVALID_PACKET; + } + + /* check for 0x04 */ + if ((in[0] & 0x1F) != 0x04) { + return CRYPT_INVALID_PACKET; + } + x = 1; + + /* decode the length */ + if (in[x] & 0x80) { + /* valid # of bytes in length are 1,2,3 */ + y = in[x] & 0x7F; + if ((y == 0) || (y > 3) || ((x + y) > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* read the length in */ + len = 0; + ++x; + while (y--) { + len = (len << 8) | in[x++]; + } + } else { + len = in[x++] & 0x7F; + } + + /* is it too long? */ + if (len > *outlen) { + *outlen = len; + return CRYPT_BUFFER_OVERFLOW; + } + + if (len + x > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* read the data */ + for (y = 0; y < len; y++) { + out[y] = in[x++]; + } + + *outlen = y; + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/octet/der_decode_octet_string.c,v $ */ +/* $Revision: 1.4 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_decode_printable_string.c + ASN.1 DER, encode a printable STRING, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Store a printable STRING + @param in The DER encoded printable STRING + @param inlen The size of the DER printable STRING + @param out [out] The array of octets stored (one per char) + @param outlen [in/out] The number of octets stored + @return CRYPT_OK if successful + */ +int der_decode_printable_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { + unsigned long x, y, len; + int t; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* must have header at least */ + if (inlen < 2) { + return CRYPT_INVALID_PACKET; + } + + /* check for 0x13 */ + if ((in[0] & 0x1F) != 0x13) { + return CRYPT_INVALID_PACKET; + } + x = 1; + + /* decode the length */ + if (in[x] & 0x80) { + /* valid # of bytes in length are 1,2,3 */ + y = in[x] & 0x7F; + if ((y == 0) || (y > 3) || ((x + y) > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* read the length in */ + len = 0; + ++x; + while (y--) { + len = (len << 8) | in[x++]; + } + } else { + len = in[x++] & 0x7F; + } + + /* is it too long? */ + if (len > *outlen) { + *outlen = len; + return CRYPT_BUFFER_OVERFLOW; + } + + if (len + x > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* read the data */ + for (y = 0; y < len; y++) { + t = der_printable_value_decode(in[x++]); + if (t == -1) { + return CRYPT_INVALID_ARG; + } + out[y] = t; + } + + *outlen = y; + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/printable_string/der_decode_printable_string.c,v $ */ +/* $Revision: 1.4 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +#include <stdarg.h> + + +/** + @file der_decode_sequence_ex.c + ASN.1 DER, decode a SEQUENCE, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Decode a SEQUENCE + @param in The DER encoded input + @param inlen The size of the input + @param list The list of items to decode + @param outlen The number of items in the list + @param ordered Search an unordered or ordered list + @return CRYPT_OK on success + */ +int der_decode_sequence_ex(const unsigned char *in, unsigned long inlen, + ltc_asn1_list *list, unsigned long outlen, int ordered) { + int err, type; + unsigned long size, x, y, z, i, blksize; + void *data; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(list != NULL); + + /* get blk size */ + if (inlen < 2) { + return CRYPT_INVALID_PACKET; + } + + /* sequence type? We allow 0x30 SEQUENCE and 0x31 SET since fundamentally they're the same structure */ + x = 0; + if ((in[x] != 0x30) && (in[x] != 0x31)) { + return CRYPT_INVALID_PACKET; + } + ++x; + + if (in[x] < 128) { + blksize = in[x++]; + } else if (in[x] & 0x80) { + if ((in[x] < 0x81) || (in[x] > 0x83)) { + return CRYPT_INVALID_PACKET; + } + y = in[x++] & 0x7F; + + /* would reading the len bytes overrun? */ + if (x + y > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* read len */ + blksize = 0; + while (y--) { + blksize = (blksize << 8) | (unsigned long)in[x++]; + } + } + + /* would this blksize overflow? */ + if (x + blksize > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* mark all as unused */ + for (i = 0; i < outlen; i++) { + list[i].used = 0; + } + + /* ok read data */ + inlen = blksize; + for (i = 0; i < outlen; i++) { + z = 0; + type = list[i].type; + size = list[i].size; + data = list[i].data; + if (!ordered && (list[i].used == 1)) { + continue; + } + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_BOOLEAN: + z = inlen; + if ((err = der_decode_boolean(in + x, z, ((int *)data))) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = der_length_boolean(&z)) != CRYPT_OK) { + goto LBL_ERR; + } + break; + + case LTC_ASN1_INTEGER: + z = inlen; + if ((err = der_decode_integer(in + x, z, data)) != CRYPT_OK) { + if (!ordered) { + continue; + } + goto LBL_ERR; + } + if ((err = der_length_integer(data, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + break; + + case LTC_ASN1_SHORT_INTEGER: + z = inlen; + if ((err = der_decode_short_integer(in + x, z, data)) != CRYPT_OK) { + if (!ordered) { + continue; + } + goto LBL_ERR; + } + if ((err = der_length_short_integer(((unsigned long *)data)[0], &z)) != CRYPT_OK) { + goto LBL_ERR; + } + + break; + + case LTC_ASN1_BIT_STRING: + z = inlen; + if ((err = der_decode_bit_string(in + x, z, data, &size)) != CRYPT_OK) { + if (!ordered) { + continue; + } + goto LBL_ERR; + } + list[i].size = size; + if ((err = der_length_bit_string(size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + break; + + case LTC_ASN1_OCTET_STRING: + z = inlen; + if ((err = der_decode_octet_string(in + x, z, data, &size)) != CRYPT_OK) { + if (!ordered) { + continue; + } + goto LBL_ERR; + } + list[i].size = size; + if ((err = der_length_octet_string(size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + break; + + case LTC_ASN1_NULL: + if ((inlen < 2) || (in[x] != 0x05) || (in[x + 1] != 0x00)) { + if (!ordered) { + continue; + } + err = CRYPT_INVALID_PACKET; + goto LBL_ERR; + } + z = 2; + break; + + case LTC_ASN1_OBJECT_IDENTIFIER: + z = inlen; + if ((err = der_decode_object_identifier(in + x, z, data, &size)) != CRYPT_OK) { + if (!ordered) { + continue; + } + goto LBL_ERR; + } + list[i].size = size; + if ((err = der_length_object_identifier(data, size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + break; + + case LTC_ASN1_IA5_STRING: + z = inlen; + if ((err = der_decode_ia5_string(in + x, z, data, &size)) != CRYPT_OK) { + if (!ordered) { + continue; + } + goto LBL_ERR; + } + list[i].size = size; + if ((err = der_length_ia5_string(data, size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + break; + + + case LTC_ASN1_PRINTABLE_STRING: + z = inlen; + if ((err = der_decode_printable_string(in + x, z, data, &size)) != CRYPT_OK) { + if (!ordered) { + continue; + } + goto LBL_ERR; + } + list[i].size = size; + if ((err = der_length_printable_string(data, size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + break; + + case LTC_ASN1_UTF8_STRING: + z = inlen; + if ((err = der_decode_utf8_string(in + x, z, data, &size)) != CRYPT_OK) { + if (!ordered) { + continue; + } + goto LBL_ERR; + } + list[i].size = size; + if ((err = der_length_utf8_string(data, size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + break; + + case LTC_ASN1_UTCTIME: + z = inlen; + if ((err = der_decode_utctime(in + x, &z, data)) != CRYPT_OK) { + if (!ordered) { + continue; + } + goto LBL_ERR; + } + break; + + case LTC_ASN1_SET: + z = inlen; + if ((err = der_decode_set(in + x, z, data, size)) != CRYPT_OK) { + if (!ordered) { + continue; + } + goto LBL_ERR; + } + if ((err = der_length_sequence(data, size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + break; + + case LTC_ASN1_SETOF: + case LTC_ASN1_SEQUENCE: + /* detect if we have the right type */ + if (((type == LTC_ASN1_SETOF) && ((in[x] & 0x3F) != 0x31)) || ((type == LTC_ASN1_SEQUENCE) && ((in[x] & 0x3F) != 0x30))) { + err = CRYPT_INVALID_PACKET; + goto LBL_ERR; + } + + z = inlen; + if ((err = der_decode_sequence(in + x, z, data, size)) != CRYPT_OK) { + if (!ordered) { + continue; + } + goto LBL_ERR; + } + if ((err = der_length_sequence(data, size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + break; + + + case LTC_ASN1_CHOICE: + z = inlen; + if ((err = der_decode_choice(in + x, &z, data, size)) != CRYPT_OK) { + if (!ordered) { + continue; + } + goto LBL_ERR; + } + break; + + default: + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + x += z; + inlen -= z; + list[i].used = 1; + if (!ordered) { + /* restart the decoder */ + i = -1; + } + } + + for (i = 0; i < outlen; i++) { + if (list[i].used == 0) { + err = CRYPT_INVALID_PACKET; + goto LBL_ERR; + } + } + err = CRYPT_OK; + +LBL_ERR: + return err; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/sequence/der_decode_sequence_ex.c,v $ */ +/* $Revision: 1.16 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_decode_sequence_flexi.c + ASN.1 DER, decode an array of ASN.1 types with a flexi parser, Tom St Denis + */ + +#ifdef LTC_DER + +static unsigned long fetch_length(const unsigned char *in, unsigned long inlen) { + unsigned long x, y, z; + + y = 0; + + /* skip type and read len */ + if (inlen < 2) { + return 0xFFFFFFFF; + } + ++in; + ++y; + + /* read len */ + x = *in++; + ++y; + + /* <128 means literal */ + if (x < 128) { + return x + y; + } + x &= 0x7F; /* the lower 7 bits are the length of the length */ + inlen -= 2; + + /* len means len of len! */ + if ((x == 0) || (x > 4) || (x > inlen)) { + return 0xFFFFFFFF; + } + + y += x; + z = 0; + while (x--) { + z = (z << 8) | ((unsigned long)*in); + ++in; + } + return z + y; +} + +/** + ASN.1 DER Flexi(ble) decoder will decode arbitrary DER packets and create a linked list of the decoded elements. + @param in The input buffer + @param inlen [in/out] The length of the input buffer and on output the amount of decoded data + @param out [out] A pointer to the linked list + @return CRYPT_OK on success. + */ +int der_decode_sequence_flexi(const unsigned char *in, unsigned long *inlen, ltc_asn1_list **out) { + ltc_asn1_list *l; + unsigned long err, type, len, totlen, x, y; + void *realloc_tmp; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(inlen != NULL); + LTC_ARGCHK(out != NULL); + + l = NULL; + totlen = 0; + + /* scan the input and and get lengths and what not */ + while (*inlen) { + /* read the type byte */ + type = *in; + + /* fetch length */ + len = fetch_length(in, *inlen); + if (len > *inlen) { + err = CRYPT_INVALID_PACKET; + goto error; + } + + /* alloc new link */ + if (l == NULL) { + l = XCALLOC(1, sizeof(*l)); + if (l == NULL) { + err = CRYPT_MEM; + goto error; + } + } else { + l->next = XCALLOC(1, sizeof(*l)); + if (l->next == NULL) { + err = CRYPT_MEM; + goto error; + } + l->next->prev = l; + l = l->next; + } + + /* now switch on type */ + switch (type) { + case 0x01: /* BOOLEAN */ + l->type = LTC_ASN1_BOOLEAN; + l->size = 1; + l->data = XCALLOC(1, sizeof(int)); + + if ((err = der_decode_boolean(in, *inlen, l->data)) != CRYPT_OK) { + goto error; + } + + if ((err = der_length_boolean(&len)) != CRYPT_OK) { + goto error; + } + break; + + case 0x02: /* INTEGER */ + /* init field */ + l->type = LTC_ASN1_INTEGER; + l->size = 1; + if ((err = mp_init(&l->data)) != CRYPT_OK) { + goto error; + } + + /* decode field */ + if ((err = der_decode_integer(in, *inlen, l->data)) != CRYPT_OK) { + goto error; + } + + /* calc length of object */ + if ((err = der_length_integer(l->data, &len)) != CRYPT_OK) { + goto error; + } + break; + + case 0x03: /* BIT */ + /* init field */ + l->type = LTC_ASN1_BIT_STRING; + l->size = len * 8; /* *8 because we store decoded bits one per char and they are encoded 8 per char. */ + + if ((l->data = XCALLOC(1, l->size)) == NULL) { + err = CRYPT_MEM; + goto error; + } + + if ((err = der_decode_bit_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) { + goto error; + } + + if ((err = der_length_bit_string(l->size, &len)) != CRYPT_OK) { + goto error; + } + break; + + case 0x04: /* OCTET */ + + /* init field */ + l->type = LTC_ASN1_OCTET_STRING; + l->size = len; + + if ((l->data = XCALLOC(1, l->size)) == NULL) { + err = CRYPT_MEM; + goto error; + } + + if ((err = der_decode_octet_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) { + goto error; + } + + if ((err = der_length_octet_string(l->size, &len)) != CRYPT_OK) { + goto error; + } + break; + + case 0x05: /* NULL */ + + /* valid NULL is 0x05 0x00 */ + if ((in[0] != 0x05) || (in[1] != 0x00)) { + err = CRYPT_INVALID_PACKET; + goto error; + } + + /* simple to store ;-) */ + l->type = LTC_ASN1_NULL; + l->data = NULL; + l->size = 0; + len = 2; + + break; + + case 0x06: /* OID */ + + /* init field */ + l->type = LTC_ASN1_OBJECT_IDENTIFIER; + l->size = len; + + if ((l->data = XCALLOC(len, sizeof(unsigned long))) == NULL) { + err = CRYPT_MEM; + goto error; + } + + if ((err = der_decode_object_identifier(in, *inlen, l->data, &l->size)) != CRYPT_OK) { + goto error; + } + + if ((err = der_length_object_identifier(l->data, l->size, &len)) != CRYPT_OK) { + goto error; + } + + /* resize it to save a bunch of mem */ + if ((realloc_tmp = XREALLOC(l->data, l->size * sizeof(unsigned long))) == NULL) { + /* out of heap but this is not an error */ + break; + } + l->data = realloc_tmp; + break; + + case 0x0C: /* UTF8 */ + + /* init field */ + l->type = LTC_ASN1_UTF8_STRING; + l->size = len; + + if ((l->data = XCALLOC(l->size, sizeof(wchar_t))) == NULL) { + err = CRYPT_MEM; + goto error; + } + + if ((err = der_decode_utf8_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) { + goto error; + } + + if ((err = der_length_utf8_string(l->data, l->size, &len)) != CRYPT_OK) { + goto error; + } + break; + + case 0x13: /* PRINTABLE */ + + /* init field */ + l->type = LTC_ASN1_PRINTABLE_STRING; + l->size = len; + + if ((l->data = XCALLOC(1, l->size)) == NULL) { + err = CRYPT_MEM; + goto error; + } + + if ((err = der_decode_printable_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) { + goto error; + } + + if ((err = der_length_printable_string(l->data, l->size, &len)) != CRYPT_OK) { + goto error; + } + break; + + case 0x16: /* IA5 */ + + /* init field */ + l->type = LTC_ASN1_IA5_STRING; + l->size = len; + + if ((l->data = XCALLOC(1, l->size)) == NULL) { + err = CRYPT_MEM; + goto error; + } + + if ((err = der_decode_ia5_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) { + goto error; + } + + if ((err = der_length_ia5_string(l->data, l->size, &len)) != CRYPT_OK) { + goto error; + } + break; + + case 0x17: /* UTC TIME */ + + /* init field */ + l->type = LTC_ASN1_UTCTIME; + l->size = 1; + + if ((l->data = XCALLOC(1, sizeof(ltc_utctime))) == NULL) { + err = CRYPT_MEM; + goto error; + } + + len = *inlen; + if ((err = der_decode_utctime(in, &len, l->data)) != CRYPT_OK) { + goto error; + } + + if ((err = der_length_utctime(l->data, &len)) != CRYPT_OK) { + goto error; + } + break; + + case 0x30: /* SEQUENCE */ + case 0x31: /* SET */ + + /* init field */ + l->type = (type == 0x30) ? LTC_ASN1_SEQUENCE : LTC_ASN1_SET; + + /* we have to decode the SEQUENCE header and get it's length */ + + /* move past type */ + ++in; + --(*inlen); + + /* read length byte */ + x = *in++; + --(*inlen); + + /* smallest SEQUENCE/SET header */ + y = 2; + + /* now if it's > 127 the next bytes are the length of the length */ + if (x > 128) { + x &= 0x7F; + in += x; + *inlen -= x; + + /* update sequence header len */ + y += x; + } + + /* Sequence elements go as child */ + len = len - y; + if ((err = der_decode_sequence_flexi(in, &len, &(l->child))) != CRYPT_OK) { + goto error; + } + + /* len update */ + totlen += y; + + /* link them up y0 */ + l->child->parent = l; + + break; + + default: + /* invalid byte ... this is a soft error */ + /* remove link */ + l = l->prev; + XFREE(l->next); + l->next = NULL; + goto outside; + } + + /* advance pointers */ + totlen += len; + in += len; + *inlen -= len; + } + +outside: + + /* rewind l please */ + while (l->prev != NULL || l->parent != NULL) { + if (l->parent != NULL) { + l = l->parent; + } else { + l = l->prev; + } + } + + /* return */ + *out = l; + *inlen = totlen; + return CRYPT_OK; + +error: + /* free list */ + der_sequence_free(l); + + return err; +} +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c,v $ */ +/* $Revision: 1.26 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +#include <stdarg.h> + + +/** + @file der_decode_sequence_multi.c + ASN.1 DER, decode a SEQUENCE, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Decode a SEQUENCE type using a VA list + @param in Input buffer + @param inlen Length of input in octets + @remark <...> is of the form <type, size, data> (int, unsigned long, void*) + @return CRYPT_OK on success + */ +int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...) { + int err, type; + unsigned long size, x; + void *data; + va_list args; + ltc_asn1_list *list; + + LTC_ARGCHK(in != NULL); + + /* get size of output that will be required */ + va_start(args, inlen); + x = 0; + for ( ; ; ) { + type = va_arg(args, int); + size = va_arg(args, unsigned long); + data = va_arg(args, void *); + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_BOOLEAN: + case LTC_ASN1_INTEGER: + case LTC_ASN1_SHORT_INTEGER: + case LTC_ASN1_BIT_STRING: + case LTC_ASN1_OCTET_STRING: + case LTC_ASN1_NULL: + case LTC_ASN1_OBJECT_IDENTIFIER: + case LTC_ASN1_IA5_STRING: + case LTC_ASN1_PRINTABLE_STRING: + case LTC_ASN1_UTF8_STRING: + case LTC_ASN1_UTCTIME: + case LTC_ASN1_SET: + case LTC_ASN1_SETOF: + case LTC_ASN1_SEQUENCE: + case LTC_ASN1_CHOICE: + ++x; + break; + + default: + va_end(args); + return CRYPT_INVALID_ARG; + } + } + va_end(args); + + /* allocate structure for x elements */ + if (x == 0) { + return CRYPT_NOP; + } + + list = XCALLOC(x, sizeof(*list)); + if (list == NULL) { + return CRYPT_MEM; + } + + /* fill in the structure */ + va_start(args, inlen); + x = 0; + for ( ; ; ) { + type = va_arg(args, int); + size = va_arg(args, unsigned long); + data = va_arg(args, void *); + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_BOOLEAN: + case LTC_ASN1_INTEGER: + case LTC_ASN1_SHORT_INTEGER: + case LTC_ASN1_BIT_STRING: + case LTC_ASN1_OCTET_STRING: + case LTC_ASN1_NULL: + case LTC_ASN1_OBJECT_IDENTIFIER: + case LTC_ASN1_IA5_STRING: + case LTC_ASN1_PRINTABLE_STRING: + case LTC_ASN1_UTF8_STRING: + case LTC_ASN1_UTCTIME: + case LTC_ASN1_SEQUENCE: + case LTC_ASN1_SET: + case LTC_ASN1_SETOF: + case LTC_ASN1_CHOICE: + list[x].type = type; + list[x].size = size; + list[x++].data = data; + break; + + default: + va_end(args); + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + } + va_end(args); + + err = der_decode_sequence(in, inlen, list, x); +LBL_ERR: + XFREE(list); + return err; +} +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/sequence/der_decode_sequence_multi.c,v $ */ +/* $Revision: 1.13 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_decode_short_integer.c + ASN.1 DER, decode an integer, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Read a short integer + @param in The DER encoded data + @param inlen Size of data + @param num [out] The integer to decode + @return CRYPT_OK if successful + */ +int der_decode_short_integer(const unsigned char *in, unsigned long inlen, unsigned long *num) { + unsigned long len, x, y; + + LTC_ARGCHK(num != NULL); + LTC_ARGCHK(in != NULL); + + /* check length */ + if (inlen < 2) { + return CRYPT_INVALID_PACKET; + } + + /* check header */ + x = 0; + if ((in[x++] & 0x1F) != 0x02) { + return CRYPT_INVALID_PACKET; + } + + /* get the packet len */ + len = in[x++]; + + if (x + len > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* read number */ + y = 0; + while (len--) { + y = (y << 8) | (unsigned long)in[x++]; + } + *num = y; + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/short_integer/der_decode_short_integer.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_decode_utctime.c + ASN.1 DER, decode a UTCTIME, Tom St Denis + */ + +#ifdef LTC_DER + +static int char_to_int(unsigned char x) { + switch (x) { + case '0': + return 0; + + case '1': + return 1; + + case '2': + return 2; + + case '3': + return 3; + + case '4': + return 4; + + case '5': + return 5; + + case '6': + return 6; + + case '7': + return 7; + + case '8': + return 8; + + case '9': + return 9; + } + return 100; +} + + #define DECODE_V(y, max) \ + y = char_to_int(buf[x]) * 10 + char_to_int(buf[x + 1]); \ + if (y >= max) return CRYPT_INVALID_PACKET; \ + x += 2; + +/** + Decodes a UTC time structure in DER format (reads all 6 valid encoding formats) + @param in Input buffer + @param inlen Length of input buffer in octets + @param out [out] Destination of UTC time structure + @return CRYPT_OK if successful + */ +int der_decode_utctime(const unsigned char *in, unsigned long *inlen, + ltc_utctime *out) { + unsigned char buf[32]; + unsigned long x; + int y; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(inlen != NULL); + LTC_ARGCHK(out != NULL); + + /* check header */ + if ((*inlen < 2UL) || (in[1] >= sizeof(buf)) || ((in[1] + 2UL) > *inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* decode the string */ + for (x = 0; x < in[1]; x++) { + y = der_ia5_value_decode(in[x + 2]); + if (y == -1) { + return CRYPT_INVALID_PACKET; + } + buf[x] = y; + } + *inlen = 2 + x; + + + /* possible encodings are + YYMMDDhhmmZ + YYMMDDhhmm+hh'mm' + YYMMDDhhmm-hh'mm' + YYMMDDhhmmssZ + YYMMDDhhmmss+hh'mm' + YYMMDDhhmmss-hh'mm' + + So let's do a trivial decode upto [including] mm + */ + + x = 0; + DECODE_V(out->YY, 100); + DECODE_V(out->MM, 13); + DECODE_V(out->DD, 32); + DECODE_V(out->hh, 24); + DECODE_V(out->mm, 60); + + /* clear timezone and seconds info */ + out->off_dir = out->off_hh = out->off_mm = out->ss = 0; + + /* now is it Z, +, - or 0-9 */ + if (buf[x] == 'Z') { + return CRYPT_OK; + } else if ((buf[x] == '+') || (buf[x] == '-')) { + out->off_dir = (buf[x++] == '+') ? 0 : 1; + DECODE_V(out->off_hh, 24); + DECODE_V(out->off_mm, 60); + return CRYPT_OK; + } + + /* decode seconds */ + DECODE_V(out->ss, 60); + + /* now is it Z, +, - */ + if (buf[x] == 'Z') { + return CRYPT_OK; + } else if ((buf[x] == '+') || (buf[x] == '-')) { + out->off_dir = (buf[x++] == '+') ? 0 : 1; + DECODE_V(out->off_hh, 24); + DECODE_V(out->off_mm, 60); + return CRYPT_OK; + } else { + return CRYPT_INVALID_PACKET; + } +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/utctime/der_decode_utctime.c,v $ */ +/* $Revision: 1.9 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_decode_utf8_string.c + ASN.1 DER, encode a UTF8 STRING, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Store a UTF8 STRING + @param in The DER encoded UTF8 STRING + @param inlen The size of the DER UTF8 STRING + @param out [out] The array of utf8s stored (one per char) + @param outlen [in/out] The number of utf8s stored + @return CRYPT_OK if successful + */ +int der_decode_utf8_string(const unsigned char *in, unsigned long inlen, + wchar_t *out, unsigned long *outlen) { + wchar_t tmp; + unsigned long x, y, z, len; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* must have header at least */ + if (inlen < 2) { + return CRYPT_INVALID_PACKET; + } + + /* check for 0x0C */ + if ((in[0] & 0x1F) != 0x0C) { + return CRYPT_INVALID_PACKET; + } + x = 1; + + /* decode the length */ + if (in[x] & 0x80) { + /* valid # of bytes in length are 1,2,3 */ + y = in[x] & 0x7F; + if ((y == 0) || (y > 3) || ((x + y) > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* read the length in */ + len = 0; + ++x; + while (y--) { + len = (len << 8) | in[x++]; + } + } else { + len = in[x++] & 0x7F; + } + + if (len + x > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* proceed to decode */ + for (y = 0; x < inlen; ) { + /* get first byte */ + tmp = in[x++]; + + /* count number of bytes */ + for (z = 0; (tmp & 0x80) && (z <= 4); z++, tmp = (tmp << 1) & 0xFF); + + if ((z > 4) || (x + (z - 1) > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* decode, grab upper bits */ + tmp >>= z; + + /* grab remaining bytes */ + if (z > 1) { + --z; + } + while (z-- != 0) { + if ((in[x] & 0xC0) != 0x80) { + return CRYPT_INVALID_PACKET; + } + tmp = (tmp << 6) | ((wchar_t)in[x++] & 0x3F); + } + + if (y > *outlen) { + *outlen = y; + return CRYPT_BUFFER_OVERFLOW; + } + out[y++] = tmp; + } + *outlen = y; + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/utf8/der_decode_utf8_string.c,v $ */ +/* $Revision: 1.8 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_encode_bit_string.c + ASN.1 DER, encode a BIT STRING, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Store a BIT STRING + @param in The array of bits to store (one per char) + @param inlen The number of bits tostore + @param out [out] The destination for the DER encoded BIT STRING + @param outlen [in/out] The max size and resulting size of the DER BIT STRING + @return CRYPT_OK if successful + */ +int der_encode_bit_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { + unsigned long len, x, y; + unsigned char buf; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* avoid overflows */ + if ((err = der_length_bit_string(inlen, &len)) != CRYPT_OK) { + return err; + } + + if (len > *outlen) { + *outlen = len; + return CRYPT_BUFFER_OVERFLOW; + } + + /* store header (include bit padding count in length) */ + x = 0; + y = (inlen >> 3) + ((inlen & 7) ? 1 : 0) + 1; + + out[x++] = 0x03; + if (y < 128) { + out[x++] = (unsigned char)y; + } else if (y < 256) { + out[x++] = 0x81; + out[x++] = (unsigned char)y; + } else if (y < 65536) { + out[x++] = 0x82; + out[x++] = (unsigned char)((y >> 8) & 255); + out[x++] = (unsigned char)(y & 255); + } + + /* store number of zero padding bits */ + out[x++] = (unsigned char)((8 - inlen) & 7); + + /* store the bits in big endian format */ + for (y = buf = 0; y < inlen; y++) { + buf |= (in[y] ? 1 : 0) << (7 - (y & 7)); + if ((y & 7) == 7) { + out[x++] = buf; + buf = 0; + } + } + /* store last byte */ + if (inlen & 7) { + out[x++] = buf; + } + *outlen = x; + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/bit/der_encode_bit_string.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_encode_boolean.c + ASN.1 DER, encode a BOOLEAN, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Store a BOOLEAN + @param in The boolean to encode + @param out [out] The destination for the DER encoded BOOLEAN + @param outlen [in/out] The max size and resulting size of the DER BOOLEAN + @return CRYPT_OK if successful + */ +int der_encode_boolean(int in, + unsigned char *out, unsigned long *outlen) { + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(out != NULL); + + if (*outlen < 3) { + *outlen = 3; + return CRYPT_BUFFER_OVERFLOW; + } + + *outlen = 3; + out[0] = 0x01; + out[1] = 0x01; + out[2] = in ? 0xFF : 0x00; + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/boolean/der_encode_boolean.c,v $ */ +/* $Revision: 1.4 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_encode_ia5_string.c + ASN.1 DER, encode a IA5 STRING, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Store an IA5 STRING + @param in The array of IA5 to store (one per char) + @param inlen The number of IA5 to store + @param out [out] The destination for the DER encoded IA5 STRING + @param outlen [in/out] The max size and resulting size of the DER IA5 STRING + @return CRYPT_OK if successful + */ +int der_encode_ia5_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { + unsigned long x, y, len; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* get the size */ + if ((err = der_length_ia5_string(in, inlen, &len)) != CRYPT_OK) { + return err; + } + + /* too big? */ + if (len > *outlen) { + *outlen = len; + return CRYPT_BUFFER_OVERFLOW; + } + + /* encode the header+len */ + x = 0; + out[x++] = 0x16; + if (inlen < 128) { + out[x++] = (unsigned char)inlen; + } else if (inlen < 256) { + out[x++] = 0x81; + out[x++] = (unsigned char)inlen; + } else if (inlen < 65536UL) { + out[x++] = 0x82; + out[x++] = (unsigned char)((inlen >> 8) & 255); + out[x++] = (unsigned char)(inlen & 255); + } else if (inlen < 16777216UL) { + out[x++] = 0x83; + out[x++] = (unsigned char)((inlen >> 16) & 255); + out[x++] = (unsigned char)((inlen >> 8) & 255); + out[x++] = (unsigned char)(inlen & 255); + } else { + return CRYPT_INVALID_ARG; + } + + /* store octets */ + for (y = 0; y < inlen; y++) { + out[x++] = der_ia5_char_encode(in[y]); + } + + /* retun length */ + *outlen = x; + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/ia5/der_encode_ia5_string.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_encode_integer.c + ASN.1 DER, encode an integer, Tom St Denis + */ + + +#ifdef LTC_DER + +/* Exports a positive bignum as DER format (upto 2^32 bytes in size) */ + +/** + Store a mp_int integer + @param num The first mp_int to encode + @param out [out] The destination for the DER encoded integers + @param outlen [in/out] The max size and resulting size of the DER encoded integers + @return CRYPT_OK if successful + */ +int der_encode_integer(void *num, unsigned char *out, unsigned long *outlen) { + unsigned long tmplen, y; + int err, leading_zero; + + LTC_ARGCHK(num != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* find out how big this will be */ + if ((err = der_length_integer(num, &tmplen)) != CRYPT_OK) { + return err; + } + + if (*outlen < tmplen) { + *outlen = tmplen; + return CRYPT_BUFFER_OVERFLOW; + } + + if (mp_cmp_d(num, 0) != LTC_MP_LT) { + /* we only need a leading zero if the msb of the first byte is one */ + if (((mp_count_bits(num) & 7) == 0) || (mp_iszero(num) == LTC_MP_YES)) { + leading_zero = 1; + } else { + leading_zero = 0; + } + + /* get length of num in bytes (plus 1 since we force the msbyte to zero) */ + y = mp_unsigned_bin_size(num) + leading_zero; + } else { + leading_zero = 0; + y = mp_count_bits(num); + y = y + (8 - (y & 7)); + y = y >> 3; + if (((mp_cnt_lsb(num) + 1) == mp_count_bits(num)) && ((mp_count_bits(num) & 7) == 0)) --y; + } + + /* now store initial data */ + *out++ = 0x02; + if (y < 128) { + /* short form */ + *out++ = (unsigned char)y; + } else if (y < 256) { + *out++ = 0x81; + *out++ = (unsigned char)y; + } else if (y < 65536UL) { + *out++ = 0x82; + *out++ = (unsigned char)((y >> 8) & 255); + *out++ = (unsigned char)y; + } else if (y < 16777216UL) { + *out++ = 0x83; + *out++ = (unsigned char)((y >> 16) & 255); + *out++ = (unsigned char)((y >> 8) & 255); + *out++ = (unsigned char)y; + } else { + return CRYPT_INVALID_ARG; + } + + /* now store msbyte of zero if num is non-zero */ + if (leading_zero) { + *out++ = 0x00; + } + + /* if it's not zero store it as big endian */ + if (mp_cmp_d(num, 0) == LTC_MP_GT) { + /* now store the mpint */ + if ((err = mp_to_unsigned_bin(num, out)) != CRYPT_OK) { + return err; + } + } else if (mp_iszero(num) != LTC_MP_YES) { + void *tmp; + + /* negative */ + if (mp_init(&tmp) != CRYPT_OK) { + return CRYPT_MEM; + } + + /* 2^roundup and subtract */ + y = mp_count_bits(num); + y = y + (8 - (y & 7)); + if (((mp_cnt_lsb(num) + 1) == mp_count_bits(num)) && ((mp_count_bits(num) & 7) == 0)) y -= 8; + if ((mp_2expt(tmp, y) != CRYPT_OK) || (mp_add(tmp, num, tmp) != CRYPT_OK)) { + mp_clear(tmp); + return CRYPT_MEM; + } + if ((err = mp_to_unsigned_bin(tmp, out)) != CRYPT_OK) { + mp_clear(tmp); + return err; + } + mp_clear(tmp); + } + + /* we good */ + *outlen = tmplen; + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/integer/der_encode_integer.c,v $ */ +/* $Revision: 1.9 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_encode_object_identifier.c + ASN.1 DER, Encode Object Identifier, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Encode an OID + @param words The words to encode (upto 32-bits each) + @param nwords The number of words in the OID + @param out [out] Destination of OID data + @param outlen [in/out] The max and resulting size of the OID + @return CRYPT_OK if successful + */ +int der_encode_object_identifier(unsigned long *words, unsigned long nwords, + unsigned char *out, unsigned long *outlen) { + unsigned long i, x, y, z, t, mask, wordbuf; + int err; + + LTC_ARGCHK(words != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* check length */ + if ((err = der_length_object_identifier(words, nwords, &x)) != CRYPT_OK) { + return err; + } + if (x > *outlen) { + *outlen = x; + return CRYPT_BUFFER_OVERFLOW; + } + + /* compute length to store OID data */ + z = 0; + wordbuf = words[0] * 40 + words[1]; + for (y = 1; y < nwords; y++) { + t = der_object_identifier_bits(wordbuf); + z += t / 7 + ((t % 7) ? 1 : 0) + (wordbuf == 0 ? 1 : 0); + if (y < nwords - 1) { + wordbuf = words[y + 1]; + } + } + + /* store header + length */ + x = 0; + out[x++] = 0x06; + if (z < 128) { + out[x++] = (unsigned char)z; + } else if (z < 256) { + out[x++] = 0x81; + out[x++] = (unsigned char)z; + } else if (z < 65536UL) { + out[x++] = 0x82; + out[x++] = (unsigned char)((z >> 8) & 255); + out[x++] = (unsigned char)(z & 255); + } else { + return CRYPT_INVALID_ARG; + } + + /* store first byte */ + wordbuf = words[0] * 40 + words[1]; + for (i = 1; i < nwords; i++) { + /* store 7 bit words in little endian */ + t = wordbuf & 0xFFFFFFFF; + if (t) { + y = x; + mask = 0; + while (t) { + out[x++] = (unsigned char)((t & 0x7F) | mask); + t >>= 7; + mask |= 0x80; /* upper bit is set on all but the last byte */ + } + /* now swap bytes y...x-1 */ + z = x - 1; + while (y < z) { + t = out[y]; + out[y] = out[z]; + out[z] = (unsigned char)t; + ++y; + --z; + } + } else { + /* zero word */ + out[x++] = 0x00; + } + + if (i < nwords - 1) { + wordbuf = words[i + 1]; + } + } + + *outlen = x; + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_encode_octet_string.c + ASN.1 DER, encode a OCTET STRING, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Store an OCTET STRING + @param in The array of OCTETS to store (one per char) + @param inlen The number of OCTETS to store + @param out [out] The destination for the DER encoded OCTET STRING + @param outlen [in/out] The max size and resulting size of the DER OCTET STRING + @return CRYPT_OK if successful + */ +int der_encode_octet_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { + unsigned long x, y, len; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* get the size */ + if ((err = der_length_octet_string(inlen, &len)) != CRYPT_OK) { + return err; + } + + /* too big? */ + if (len > *outlen) { + *outlen = len; + return CRYPT_BUFFER_OVERFLOW; + } + + /* encode the header+len */ + x = 0; + out[x++] = 0x04; + if (inlen < 128) { + out[x++] = (unsigned char)inlen; + } else if (inlen < 256) { + out[x++] = 0x81; + out[x++] = (unsigned char)inlen; + } else if (inlen < 65536UL) { + out[x++] = 0x82; + out[x++] = (unsigned char)((inlen >> 8) & 255); + out[x++] = (unsigned char)(inlen & 255); + } else if (inlen < 16777216UL) { + out[x++] = 0x83; + out[x++] = (unsigned char)((inlen >> 16) & 255); + out[x++] = (unsigned char)((inlen >> 8) & 255); + out[x++] = (unsigned char)(inlen & 255); + } else { + return CRYPT_INVALID_ARG; + } + + /* store octets */ + for (y = 0; y < inlen; y++) { + out[x++] = in[y]; + } + + /* retun length */ + *outlen = x; + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/octet/der_encode_octet_string.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_encode_printable_string.c + ASN.1 DER, encode a printable STRING, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Store an printable STRING + @param in The array of printable to store (one per char) + @param inlen The number of printable to store + @param out [out] The destination for the DER encoded printable STRING + @param outlen [in/out] The max size and resulting size of the DER printable STRING + @return CRYPT_OK if successful + */ +int der_encode_printable_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { + unsigned long x, y, len; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* get the size */ + if ((err = der_length_printable_string(in, inlen, &len)) != CRYPT_OK) { + return err; + } + + /* too big? */ + if (len > *outlen) { + *outlen = len; + return CRYPT_BUFFER_OVERFLOW; + } + + /* encode the header+len */ + x = 0; + out[x++] = 0x13; + if (inlen < 128) { + out[x++] = (unsigned char)inlen; + } else if (inlen < 256) { + out[x++] = 0x81; + out[x++] = (unsigned char)inlen; + } else if (inlen < 65536UL) { + out[x++] = 0x82; + out[x++] = (unsigned char)((inlen >> 8) & 255); + out[x++] = (unsigned char)(inlen & 255); + } else if (inlen < 16777216UL) { + out[x++] = 0x83; + out[x++] = (unsigned char)((inlen >> 16) & 255); + out[x++] = (unsigned char)((inlen >> 8) & 255); + out[x++] = (unsigned char)(inlen & 255); + } else { + return CRYPT_INVALID_ARG; + } + + /* store octets */ + for (y = 0; y < inlen; y++) { + out[x++] = der_printable_char_encode(in[y]); + } + + /* retun length */ + *outlen = x; + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/printable_string/der_encode_printable_string.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +#include <stdarg.h> + + +/** + @file der_encode_sequence_ex.c + ASN.1 DER, encode a SEQUENCE, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Encode a SEQUENCE + @param list The list of items to encode + @param inlen The number of items in the list + @param out [out] The destination + @param outlen [in/out] The size of the output + @param type_of LTC_ASN1_SEQUENCE or LTC_ASN1_SET/LTC_ASN1_SETOF + @return CRYPT_OK on success + */ +int der_encode_sequence_ex(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen, int type_of) { + int err, type; + unsigned long size, x, y, z, i; + void *data; + + LTC_ARGCHK(list != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* get size of output that will be required */ + y = 0; + for (i = 0; i < inlen; i++) { + type = list[i].type; + size = list[i].size; + data = list[i].data; + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_BOOLEAN: + if ((err = der_length_boolean(&x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_INTEGER: + if ((err = der_length_integer(data, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_SHORT_INTEGER: + if ((err = der_length_short_integer(*((unsigned long *)data), &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_BIT_STRING: + if ((err = der_length_bit_string(size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_OCTET_STRING: + if ((err = der_length_octet_string(size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_NULL: + y += 2; + break; + + case LTC_ASN1_OBJECT_IDENTIFIER: + if ((err = der_length_object_identifier(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_IA5_STRING: + if ((err = der_length_ia5_string(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_PRINTABLE_STRING: + if ((err = der_length_printable_string(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_UTF8_STRING: + if ((err = der_length_utf8_string(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_UTCTIME: + if ((err = der_length_utctime(data, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_SET: + case LTC_ASN1_SETOF: + case LTC_ASN1_SEQUENCE: + if ((err = der_length_sequence(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + default: + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + } + + /* calc header size */ + z = y; + if (y < 128) { + y += 2; + } else if (y < 256) { + /* 0x30 0x81 LL */ + y += 3; + } else if (y < 65536UL) { + /* 0x30 0x82 LL LL */ + y += 4; + } else if (y < 16777216UL) { + /* 0x30 0x83 LL LL LL */ + y += 5; + } else { + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + + /* too big ? */ + if (*outlen < y) { + *outlen = y; + err = CRYPT_BUFFER_OVERFLOW; + goto LBL_ERR; + } + + /* store header */ + x = 0; + out[x++] = (type_of == LTC_ASN1_SEQUENCE) ? 0x30 : 0x31; + + if (z < 128) { + out[x++] = (unsigned char)z; + } else if (z < 256) { + out[x++] = 0x81; + out[x++] = (unsigned char)z; + } else if (z < 65536UL) { + out[x++] = 0x82; + out[x++] = (unsigned char)((z >> 8UL) & 255); + out[x++] = (unsigned char)(z & 255); + } else if (z < 16777216UL) { + out[x++] = 0x83; + out[x++] = (unsigned char)((z >> 16UL) & 255); + out[x++] = (unsigned char)((z >> 8UL) & 255); + out[x++] = (unsigned char)(z & 255); + } + + /* store data */ + *outlen -= x; + for (i = 0; i < inlen; i++) { + type = list[i].type; + size = list[i].size; + data = list[i].data; + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_BOOLEAN: + z = *outlen; + if ((err = der_encode_boolean(*((int *)data), out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_INTEGER: + z = *outlen; + if ((err = der_encode_integer(data, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_SHORT_INTEGER: + z = *outlen; + if ((err = der_encode_short_integer(*((unsigned long *)data), out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_BIT_STRING: + z = *outlen; + if ((err = der_encode_bit_string(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_OCTET_STRING: + z = *outlen; + if ((err = der_encode_octet_string(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_NULL: + out[x++] = 0x05; + out[x++] = 0x00; + *outlen -= 2; + break; + + case LTC_ASN1_OBJECT_IDENTIFIER: + z = *outlen; + if ((err = der_encode_object_identifier(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_IA5_STRING: + z = *outlen; + if ((err = der_encode_ia5_string(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_PRINTABLE_STRING: + z = *outlen; + if ((err = der_encode_printable_string(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_UTF8_STRING: + z = *outlen; + if ((err = der_encode_utf8_string(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_UTCTIME: + z = *outlen; + if ((err = der_encode_utctime(data, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_SET: + z = *outlen; + if ((err = der_encode_set(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_SETOF: + z = *outlen; + if ((err = der_encode_setof(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_SEQUENCE: + z = *outlen; + if ((err = der_encode_sequence_ex(data, size, out + x, &z, type)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + default: + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + } + *outlen = x; + err = CRYPT_OK; + +LBL_ERR: + return err; +} +#endif + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +#include <stdarg.h> + + +/** + @file der_encode_sequence_multi.c + ASN.1 DER, encode a SEQUENCE, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Encode a SEQUENCE type using a VA list + @param out [out] Destination for data + @param outlen [in/out] Length of buffer and resulting length of output + @remark <...> is of the form <type, size, data> (int, unsigned long, void*) + @return CRYPT_OK on success + */ +int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...) { + int err, type; + unsigned long size, x; + void *data; + va_list args; + ltc_asn1_list *list; + + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* get size of output that will be required */ + va_start(args, outlen); + x = 0; + for ( ; ; ) { + type = va_arg(args, int); + size = va_arg(args, unsigned long); + data = va_arg(args, void *); + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_BOOLEAN: + case LTC_ASN1_INTEGER: + case LTC_ASN1_SHORT_INTEGER: + case LTC_ASN1_BIT_STRING: + case LTC_ASN1_OCTET_STRING: + case LTC_ASN1_NULL: + case LTC_ASN1_OBJECT_IDENTIFIER: + case LTC_ASN1_IA5_STRING: + case LTC_ASN1_PRINTABLE_STRING: + case LTC_ASN1_UTF8_STRING: + case LTC_ASN1_UTCTIME: + case LTC_ASN1_SEQUENCE: + case LTC_ASN1_SET: + case LTC_ASN1_SETOF: + ++x; + break; + + default: + va_end(args); + return CRYPT_INVALID_ARG; + } + } + va_end(args); + + /* allocate structure for x elements */ + if (x == 0) { + return CRYPT_NOP; + } + + list = XCALLOC(x, sizeof(*list)); + if (list == NULL) { + return CRYPT_MEM; + } + + /* fill in the structure */ + va_start(args, outlen); + x = 0; + for ( ; ; ) { + type = va_arg(args, int); + size = va_arg(args, unsigned long); + data = va_arg(args, void *); + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_BOOLEAN: + case LTC_ASN1_INTEGER: + case LTC_ASN1_SHORT_INTEGER: + case LTC_ASN1_BIT_STRING: + case LTC_ASN1_OCTET_STRING: + case LTC_ASN1_NULL: + case LTC_ASN1_OBJECT_IDENTIFIER: + case LTC_ASN1_IA5_STRING: + case LTC_ASN1_PRINTABLE_STRING: + case LTC_ASN1_UTF8_STRING: + case LTC_ASN1_UTCTIME: + case LTC_ASN1_SEQUENCE: + case LTC_ASN1_SET: + case LTC_ASN1_SETOF: + list[x].type = type; + list[x].size = size; + list[x++].data = data; + break; + + default: + va_end(args); + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + } + va_end(args); + + err = der_encode_sequence(list, x, out, outlen); +LBL_ERR: + XFREE(list); + return err; +} +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/sequence/der_encode_sequence_multi.c,v $ */ +/* $Revision: 1.12 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_encode_set.c + ASN.1 DER, Encode a SET, Tom St Denis + */ + +#ifdef LTC_DER + +/* LTC define to ASN.1 TAG */ +static int ltc_to_asn1(int v) { + switch (v) { + case LTC_ASN1_BOOLEAN: + return 0x01; + + case LTC_ASN1_INTEGER: + case LTC_ASN1_SHORT_INTEGER: + return 0x02; + + case LTC_ASN1_BIT_STRING: + return 0x03; + + case LTC_ASN1_OCTET_STRING: + return 0x04; + + case LTC_ASN1_NULL: + return 0x05; + + case LTC_ASN1_OBJECT_IDENTIFIER: + return 0x06; + + case LTC_ASN1_UTF8_STRING: + return 0x0C; + + case LTC_ASN1_PRINTABLE_STRING: + return 0x13; + + case LTC_ASN1_IA5_STRING: + return 0x16; + + case LTC_ASN1_UTCTIME: + return 0x17; + + case LTC_ASN1_SEQUENCE: + return 0x30; + + case LTC_ASN1_SET: + case LTC_ASN1_SETOF: + return 0x31; + + default: + return -1; + } +} + +static int qsort_helper_set(const void *a, const void *b) { + ltc_asn1_list *A = (ltc_asn1_list *)a, *B = (ltc_asn1_list *)b; + int r; + + r = ltc_to_asn1(A->type) - ltc_to_asn1(B->type); + + /* for QSORT the order is UNDEFINED if they are "equal" which means it is NOT DETERMINISTIC. So we force it to be :-) */ + if (r == 0) { + /* their order in the original list now determines the position */ + return A->used - B->used; + } else { + return r; + } +} + +/* + Encode a SET type + @param list The list of items to encode + @param inlen The number of items in the list + @param out [out] The destination + @param outlen [in/out] The size of the output + @return CRYPT_OK on success + */ +int der_encode_set(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { + ltc_asn1_list *copy; + unsigned long x; + int err; + + /* make copy of list */ + copy = XCALLOC(inlen, sizeof(*copy)); + if (copy == NULL) { + return CRYPT_MEM; + } + + /* fill in used member with index so we can fully sort it */ + for (x = 0; x < inlen; x++) { + copy[x] = list[x]; + copy[x].used = x; + } + + /* sort it by the "type" field */ + XQSORT(copy, inlen, sizeof(*copy), &qsort_helper_set); + + /* call der_encode_sequence_ex() */ + err = der_encode_sequence_ex(copy, inlen, out, outlen, LTC_ASN1_SET); + + /* free list */ + XFREE(copy); + + return err; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/set/der_encode_set.c,v $ */ +/* $Revision: 1.12 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_encode_setof.c + ASN.1 DER, Encode SET OF, Tom St Denis + */ + +#ifdef LTC_DER + +struct edge { + unsigned char *start; + unsigned long size; +}; + +static int qsort_helper(const void *a, const void *b) { + struct edge *A = (struct edge *)a, *B = (struct edge *)b; + int r; + unsigned long x; + + /* compare min length */ + r = XMEMCMP(A->start, B->start, MIN(A->size, B->size)); + + if ((r == 0) && (A->size != B->size)) { + if (A->size > B->size) { + for (x = B->size; x < A->size; x++) { + if (A->start[x]) { + return 1; + } + } + } else { + for (x = A->size; x < B->size; x++) { + if (B->start[x]) { + return -1; + } + } + } + } + + return r; +} + +/** + Encode a SETOF stucture + @param list The list of items to encode + @param inlen The number of items in the list + @param out [out] The destination + @param outlen [in/out] The size of the output + @return CRYPT_OK on success + */ +int der_encode_setof(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { + unsigned long x, y, z, hdrlen; + int err; + struct edge *edges; + unsigned char *ptr, *buf; + + /* check that they're all the same type */ + for (x = 1; x < inlen; x++) { + if (list[x].type != list[x - 1].type) { + return CRYPT_INVALID_ARG; + } + } + + /* alloc buffer to store copy of output */ + buf = XCALLOC(1, *outlen); + if (buf == NULL) { + return CRYPT_MEM; + } + + /* encode list */ + if ((err = der_encode_sequence_ex(list, inlen, buf, outlen, LTC_ASN1_SETOF)) != CRYPT_OK) { + XFREE(buf); + return err; + } + + /* allocate edges */ + edges = XCALLOC(inlen, sizeof(*edges)); + if (edges == NULL) { + XFREE(buf); + return CRYPT_MEM; + } + + /* skip header */ + ptr = buf + 1; + + /* now skip length data */ + x = *ptr++; + if (x >= 0x80) { + ptr += (x & 0x7F); + } + + /* get the size of the static header */ + hdrlen = ((unsigned long)ptr) - ((unsigned long)buf); + + + /* scan for edges */ + x = 0; + while (ptr < (buf + *outlen)) { + /* store start */ + edges[x].start = ptr; + + /* skip type */ + z = 1; + + /* parse length */ + y = ptr[z++]; + if (y < 128) { + edges[x].size = y; + } else { + y &= 0x7F; + edges[x].size = 0; + while (y--) { + edges[x].size = (edges[x].size << 8) | ((unsigned long)ptr[z++]); + } + } + + /* skip content */ + edges[x].size += z; + ptr += edges[x].size; + ++x; + } + + /* sort based on contents (using edges) */ + XQSORT(edges, inlen, sizeof(*edges), &qsort_helper); + + /* copy static header */ + XMEMCPY(out, buf, hdrlen); + + /* copy+sort using edges+indecies to output from buffer */ + for (y = hdrlen, x = 0; x < inlen; x++) { + XMEMCPY(out + y, edges[x].start, edges[x].size); + y += edges[x].size; + } + + #ifdef LTC_CLEAN_STACK + zeromem(buf, *outlen); + #endif + + /* free buffers */ + XFREE(edges); + XFREE(buf); + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/set/der_encode_setof.c,v $ */ +/* $Revision: 1.12 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_encode_short_integer.c + ASN.1 DER, encode an integer, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Store a short integer in the range (0,2^32-1) + @param num The integer to encode + @param out [out] The destination for the DER encoded integers + @param outlen [in/out] The max size and resulting size of the DER encoded integers + @return CRYPT_OK if successful + */ +int der_encode_short_integer(unsigned long num, unsigned char *out, unsigned long *outlen) { + unsigned long len, x, y, z; + int err; + + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* force to 32 bits */ + num &= 0xFFFFFFFFUL; + + /* find out how big this will be */ + if ((err = der_length_short_integer(num, &len)) != CRYPT_OK) { + return err; + } + + if (*outlen < len) { + *outlen = len; + return CRYPT_BUFFER_OVERFLOW; + } + + /* get len of output */ + z = 0; + y = num; + while (y) { + ++z; + y >>= 8; + } + + /* handle zero */ + if (z == 0) { + z = 1; + } + + /* see if msb is set */ + z += (num & (1UL << ((z << 3) - 1))) ? 1 : 0; + + /* adjust the number so the msB is non-zero */ + for (x = 0; (z <= 4) && (x < (4 - z)); x++) { + num <<= 8; + } + + /* store header */ + x = 0; + out[x++] = 0x02; + out[x++] = (unsigned char)z; + + /* if 31st bit is set output a leading zero and decrement count */ + if (z == 5) { + out[x++] = 0; + --z; + } + + /* store values */ + for (y = 0; y < z; y++) { + out[x++] = (unsigned char)((num >> 24) & 0xFF); + num <<= 8; + } + + /* we good */ + *outlen = x; + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/short_integer/der_encode_short_integer.c,v $ */ +/* $Revision: 1.8 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_encode_utctime.c + ASN.1 DER, encode a UTCTIME, Tom St Denis + */ + +#ifdef LTC_DER + +static const char baseten[] = "0123456789"; + + #define STORE_V(y) \ + out[x++] = der_ia5_char_encode(baseten[(y / 10) % 10]); \ + out[x++] = der_ia5_char_encode(baseten[y % 10]); + +/** + Encodes a UTC time structure in DER format + @param utctime The UTC time structure to encode + @param out The destination of the DER encoding of the UTC time structure + @param outlen [in/out] The length of the DER encoding + @return CRYPT_OK if successful + */ +int der_encode_utctime(ltc_utctime *utctime, + unsigned char *out, unsigned long *outlen) { + unsigned long x, tmplen; + int err; + + LTC_ARGCHK(utctime != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + if ((err = der_length_utctime(utctime, &tmplen)) != CRYPT_OK) { + return err; + } + if (tmplen > *outlen) { + *outlen = tmplen; + return CRYPT_BUFFER_OVERFLOW; + } + + /* store header */ + out[0] = 0x17; + + /* store values */ + x = 2; + STORE_V(utctime->YY); + STORE_V(utctime->MM); + STORE_V(utctime->DD); + STORE_V(utctime->hh); + STORE_V(utctime->mm); + STORE_V(utctime->ss); + + if (utctime->off_mm || utctime->off_hh) { + out[x++] = der_ia5_char_encode(utctime->off_dir ? '-' : '+'); + STORE_V(utctime->off_hh); + STORE_V(utctime->off_mm); + } else { + out[x++] = der_ia5_char_encode('Z'); + } + + /* store length */ + out[1] = (unsigned char)(x - 2); + + /* all good let's return */ + *outlen = x; + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/utctime/der_encode_utctime.c,v $ */ +/* $Revision: 1.10 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_encode_utf8_string.c + ASN.1 DER, encode a UTF8 STRING, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Store an UTF8 STRING + @param in The array of UTF8 to store (one per wchar_t) + @param inlen The number of UTF8 to store + @param out [out] The destination for the DER encoded UTF8 STRING + @param outlen [in/out] The max size and resulting size of the DER UTF8 STRING + @return CRYPT_OK if successful + */ +int der_encode_utf8_string(const wchar_t *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { + unsigned long x, y, len; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* get the size */ + for (x = len = 0; x < inlen; x++) { + if ((in[x] < 0) || (in[x] > 0x1FFFF)) { + return CRYPT_INVALID_ARG; + } + len += der_utf8_charsize(in[x]); + } + + if (len < 128) { + y = 2 + len; + } else if (len < 256) { + y = 3 + len; + } else if (len < 65536UL) { + y = 4 + len; + } else if (len < 16777216UL) { + y = 5 + len; + } else { + return CRYPT_INVALID_ARG; + } + + /* too big? */ + if (y > *outlen) { + *outlen = len; + return CRYPT_BUFFER_OVERFLOW; + } + + /* encode the header+len */ + x = 0; + out[x++] = 0x0C; + if (len < 128) { + out[x++] = (unsigned char)len; + } else if (len < 256) { + out[x++] = 0x81; + out[x++] = (unsigned char)len; + } else if (len < 65536UL) { + out[x++] = 0x82; + out[x++] = (unsigned char)((len >> 8) & 255); + out[x++] = (unsigned char)(len & 255); + } else if (len < 16777216UL) { + out[x++] = 0x83; + out[x++] = (unsigned char)((len >> 16) & 255); + out[x++] = (unsigned char)((len >> 8) & 255); + out[x++] = (unsigned char)(len & 255); + } else { + return CRYPT_INVALID_ARG; + } + + /* store UTF8 */ + for (y = 0; y < inlen; y++) { + switch (der_utf8_charsize(in[y])) { + case 1: + out[x++] = (unsigned char)in[y]; + break; + + case 2: + out[x++] = 0xC0 | ((in[y] >> 6) & 0x1F); + out[x++] = 0x80 | (in[y] & 0x3F); + break; + + case 3: + out[x++] = 0xE0 | ((in[y] >> 12) & 0x0F); + out[x++] = 0x80 | ((in[y] >> 6) & 0x3F); + out[x++] = 0x80 | (in[y] & 0x3F); + break; + + case 4: + out[x++] = 0xF0 | ((in[y] >> 18) & 0x07); + out[x++] = 0x80 | ((in[y] >> 12) & 0x3F); + out[x++] = 0x80 | ((in[y] >> 6) & 0x3F); + out[x++] = 0x80 | (in[y] & 0x3F); + break; + } + } + + /* retun length */ + *outlen = x; + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/utf8/der_encode_utf8_string.c,v $ */ +/* $Revision: 1.9 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_length_bit_string.c + ASN.1 DER, get length of BIT STRING, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Gets length of DER encoding of BIT STRING + @param nbits The number of bits in the string to encode + @param outlen [out] The length of the DER encoding for the given string + @return CRYPT_OK if successful + */ +int der_length_bit_string(unsigned long nbits, unsigned long *outlen) { + unsigned long nbytes; + + LTC_ARGCHK(outlen != NULL); + + /* get the number of the bytes */ + nbytes = (nbits >> 3) + ((nbits & 7) ? 1 : 0) + 1; + + if (nbytes < 128) { + /* 03 LL PP DD DD DD ... */ + *outlen = 2 + nbytes; + } else if (nbytes < 256) { + /* 03 81 LL PP DD DD DD ... */ + *outlen = 3 + nbytes; + } else if (nbytes < 65536) { + /* 03 82 LL LL PP DD DD DD ... */ + *outlen = 4 + nbytes; + } else { + return CRYPT_INVALID_ARG; + } + + return CRYPT_OK; +} +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/bit/der_length_bit_string.c,v $ */ +/* $Revision: 1.3 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_length_boolean.c + ASN.1 DER, get length of a BOOLEAN, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Gets length of DER encoding of a BOOLEAN + @param outlen [out] The length of the DER encoding + @return CRYPT_OK if successful + */ +int der_length_boolean(unsigned long *outlen) { + LTC_ARGCHK(outlen != NULL); + *outlen = 3; + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/boolean/der_length_boolean.c,v $ */ +/* $Revision: 1.3 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_length_ia5_string.c + ASN.1 DER, get length of IA5 STRING, Tom St Denis + */ + +#ifdef LTC_DER + +static const struct { + int code, value; +} ia5_table[] = { + { '\0', 0 }, + { '\a', 7 }, + { '\b', 8 }, + { '\t', 9 }, + { '\n', 10 }, + { '\f', 12 }, + { '\r', 13 }, + { ' ', 32 }, + { '!', 33 }, + { '"', 34 }, + { '#', 35 }, + { '$', 36 }, + { '%', 37 }, + { '&', 38 }, + { '\'', 39 }, + { '(', 40 }, + { ')', 41 }, + { '*', 42 }, + { '+', 43 }, + { ',', 44 }, + { '-', 45 }, + { '.', 46 }, + { '/', 47 }, + { '0', 48 }, + { '1', 49 }, + { '2', 50 }, + { '3', 51 }, + { '4', 52 }, + { '5', 53 }, + { '6', 54 }, + { '7', 55 }, + { '8', 56 }, + { '9', 57 }, + { ':', 58 }, + { ';', 59 }, + { '<', 60 }, + { '=', 61 }, + { '>', 62 }, + { '?', 63 }, + { '@', 64 }, + { 'A', 65 }, + { 'B', 66 }, + { 'C', 67 }, + { 'D', 68 }, + { 'E', 69 }, + { 'F', 70 }, + { 'G', 71 }, + { 'H', 72 }, + { 'I', 73 }, + { 'J', 74 }, + { 'K', 75 }, + { 'L', 76 }, + { 'M', 77 }, + { 'N', 78 }, + { 'O', 79 }, + { 'P', 80 }, + { 'Q', 81 }, + { 'R', 82 }, + { 'S', 83 }, + { 'T', 84 }, + { 'U', 85 }, + { 'V', 86 }, + { 'W', 87 }, + { 'X', 88 }, + { 'Y', 89 }, + { 'Z', 90 }, + { '[', 91 }, + { '\\', 92 }, + { ']', 93 }, + { '^', 94 }, + { '_', 95 }, + { '`', 96 }, + { 'a', 97 }, + { 'b', 98 }, + { 'c', 99 }, + { 'd', 100 }, + { 'e', 101 }, + { 'f', 102 }, + { 'g', 103 }, + { 'h', 104 }, + { 'i', 105 }, + { 'j', 106 }, + { 'k', 107 }, + { 'l', 108 }, + { 'm', 109 }, + { 'n', 110 }, + { 'o', 111 }, + { 'p', 112 }, + { 'q', 113 }, + { 'r', 114 }, + { 's', 115 }, + { 't', 116 }, + { 'u', 117 }, + { 'v', 118 }, + { 'w', 119 }, + { 'x', 120 }, + { 'y', 121 }, + { 'z', 122 }, + { '{', 123 }, + { '|', 124 }, + { '}', 125 }, + { '~', 126 } +}; + +int der_ia5_char_encode(int c) { + int x; + + for (x = 0; x < (int)(sizeof(ia5_table) / sizeof(ia5_table[0])); x++) { + if (ia5_table[x].code == c) { + return ia5_table[x].value; + } + } + return -1; +} + +int der_ia5_value_decode(int v) { + int x; + + for (x = 0; x < (int)(sizeof(ia5_table) / sizeof(ia5_table[0])); x++) { + if (ia5_table[x].value == v) { + return ia5_table[x].code; + } + } + return -1; +} + +/** + Gets length of DER encoding of IA5 STRING + @param octets The values you want to encode + @param noctets The number of octets in the string to encode + @param outlen [out] The length of the DER encoding for the given string + @return CRYPT_OK if successful + */ +int der_length_ia5_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen) { + unsigned long x; + + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(octets != NULL); + + /* scan string for validity */ + for (x = 0; x < noctets; x++) { + if (der_ia5_char_encode(octets[x]) == -1) { + return CRYPT_INVALID_ARG; + } + } + + if (noctets < 128) { + /* 16 LL DD DD DD ... */ + *outlen = 2 + noctets; + } else if (noctets < 256) { + /* 16 81 LL DD DD DD ... */ + *outlen = 3 + noctets; + } else if (noctets < 65536UL) { + /* 16 82 LL LL DD DD DD ... */ + *outlen = 4 + noctets; + } else if (noctets < 16777216UL) { + /* 16 83 LL LL LL DD DD DD ... */ + *outlen = 5 + noctets; + } else { + return CRYPT_INVALID_ARG; + } + + return CRYPT_OK; +} +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/ia5/der_length_ia5_string.c,v $ */ +/* $Revision: 1.3 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_length_integer.c + ASN.1 DER, get length of encoding, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Gets length of DER encoding of num + @param num The int to get the size of + @param outlen [out] The length of the DER encoding for the given integer + @return CRYPT_OK if successful + */ +int der_length_integer(void *num, unsigned long *outlen) { + unsigned long z, len; + int leading_zero; + + LTC_ARGCHK(num != NULL); + LTC_ARGCHK(outlen != NULL); + + if (mp_cmp_d(num, 0) != LTC_MP_LT) { + /* positive */ + + /* we only need a leading zero if the msb of the first byte is one */ + if (((mp_count_bits(num) & 7) == 0) || (mp_iszero(num) == LTC_MP_YES)) { + leading_zero = 1; + } else { + leading_zero = 0; + } + + /* size for bignum */ + z = len = leading_zero + mp_unsigned_bin_size(num); + } else { + /* it's negative */ + /* find power of 2 that is a multiple of eight and greater than count bits */ + leading_zero = 0; + z = mp_count_bits(num); + z = z + (8 - (z & 7)); + if (((mp_cnt_lsb(num) + 1) == mp_count_bits(num)) && ((mp_count_bits(num) & 7) == 0)) --z; + len = z = z >> 3; + } + + /* now we need a length */ + if (z < 128) { + /* short form */ + ++len; + } else { + /* long form (relies on z != 0), assumes length bytes < 128 */ + ++len; + + while (z) { + ++len; + z >>= 8; + } + } + + /* we need a 0x02 to indicate it's INTEGER */ + ++len; + + /* return length */ + *outlen = len; + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/integer/der_length_integer.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_length_object_identifier.c + ASN.1 DER, get length of Object Identifier, Tom St Denis + */ + +#ifdef LTC_DER + +unsigned long der_object_identifier_bits(unsigned long x) { + unsigned long c; + + x &= 0xFFFFFFFF; + c = 0; + while (x) { + ++c; + x >>= 1; + } + return c; +} + +/** + Gets length of DER encoding of Object Identifier + @param nwords The number of OID words + @param words The actual OID words to get the size of + @param outlen [out] The length of the DER encoding for the given string + @return CRYPT_OK if successful + */ +int der_length_object_identifier(unsigned long *words, unsigned long nwords, unsigned long *outlen) { + unsigned long y, z, t, wordbuf; + + LTC_ARGCHK(words != NULL); + LTC_ARGCHK(outlen != NULL); + + + /* must be >= 2 words */ + if (nwords < 2) { + return CRYPT_INVALID_ARG; + } + + /* word1 = 0,1,2,3 and word2 0..39 */ + if ((words[0] > 3) || ((words[0] < 2) && (words[1] > 39))) { + return CRYPT_INVALID_ARG; + } + + /* leading word is the first two */ + z = 0; + wordbuf = words[0] * 40 + words[1]; + for (y = 1; y < nwords; y++) { + t = der_object_identifier_bits(wordbuf); + z += t / 7 + ((t % 7) ? 1 : 0) + (wordbuf == 0 ? 1 : 0); + if (y < nwords - 1) { + /* grab next word */ + wordbuf = words[y + 1]; + } + } + + /* now depending on the length our length encoding changes */ + if (z < 128) { + z += 2; + } else if (z < 256) { + z += 3; + } else if (z < 65536UL) { + z += 4; + } else { + return CRYPT_INVALID_ARG; + } + + *outlen = z; + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/object_identifier/der_length_object_identifier.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_length_octet_string.c + ASN.1 DER, get length of OCTET STRING, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Gets length of DER encoding of OCTET STRING + @param noctets The number of octets in the string to encode + @param outlen [out] The length of the DER encoding for the given string + @return CRYPT_OK if successful + */ +int der_length_octet_string(unsigned long noctets, unsigned long *outlen) { + LTC_ARGCHK(outlen != NULL); + + if (noctets < 128) { + /* 04 LL DD DD DD ... */ + *outlen = 2 + noctets; + } else if (noctets < 256) { + /* 04 81 LL DD DD DD ... */ + *outlen = 3 + noctets; + } else if (noctets < 65536UL) { + /* 04 82 LL LL DD DD DD ... */ + *outlen = 4 + noctets; + } else if (noctets < 16777216UL) { + /* 04 83 LL LL LL DD DD DD ... */ + *outlen = 5 + noctets; + } else { + return CRYPT_INVALID_ARG; + } + + return CRYPT_OK; +} +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/octet/der_length_octet_string.c,v $ */ +/* $Revision: 1.3 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_length_printable_string.c + ASN.1 DER, get length of Printable STRING, Tom St Denis + */ + +#ifdef LTC_DER + +static const struct { + int code, value; +} printable_table[] = { + { ' ', 32 }, + { '\'', 39 }, + { '(', 40 }, + { ')', 41 }, + { '+', 43 }, + { ',', 44 }, + { '-', 45 }, + { '.', 46 }, + { '/', 47 }, + { '0', 48 }, + { '1', 49 }, + { '2', 50 }, + { '3', 51 }, + { '4', 52 }, + { '5', 53 }, + { '6', 54 }, + { '7', 55 }, + { '8', 56 }, + { '9', 57 }, + { ':', 58 }, + { '=', 61 }, + { '?', 63 }, + { 'A', 65 }, + { 'B', 66 }, + { 'C', 67 }, + { 'D', 68 }, + { 'E', 69 }, + { 'F', 70 }, + { 'G', 71 }, + { 'H', 72 }, + { 'I', 73 }, + { 'J', 74 }, + { 'K', 75 }, + { 'L', 76 }, + { 'M', 77 }, + { 'N', 78 }, + { 'O', 79 }, + { 'P', 80 }, + { 'Q', 81 }, + { 'R', 82 }, + { 'S', 83 }, + { 'T', 84 }, + { 'U', 85 }, + { 'V', 86 }, + { 'W', 87 }, + { 'X', 88 }, + { 'Y', 89 }, + { 'Z', 90 }, + { 'a', 97 }, + { 'b', 98 }, + { 'c', 99 }, + { 'd', 100 }, + { 'e', 101 }, + { 'f', 102 }, + { 'g', 103 }, + { 'h', 104 }, + { 'i', 105 }, + { 'j', 106 }, + { 'k', 107 }, + { 'l', 108 }, + { 'm', 109 }, + { 'n', 110 }, + { 'o', 111 }, + { 'p', 112 }, + { 'q', 113 }, + { 'r', 114 }, + { 's', 115 }, + { 't', 116 }, + { 'u', 117 }, + { 'v', 118 }, + { 'w', 119 }, + { 'x', 120 }, + { 'y', 121 }, + { 'z', 122 }, +}; + +int der_printable_char_encode(int c) { + int x; + + for (x = 0; x < (int)(sizeof(printable_table) / sizeof(printable_table[0])); x++) { + if (printable_table[x].code == c) { + return printable_table[x].value; + } + } + return -1; +} + +int der_printable_value_decode(int v) { + int x; + + for (x = 0; x < (int)(sizeof(printable_table) / sizeof(printable_table[0])); x++) { + if (printable_table[x].value == v) { + return printable_table[x].code; + } + } + return -1; +} + +/** + Gets length of DER encoding of Printable STRING + @param octets The values you want to encode + @param noctets The number of octets in the string to encode + @param outlen [out] The length of the DER encoding for the given string + @return CRYPT_OK if successful + */ +int der_length_printable_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen) { + unsigned long x; + + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(octets != NULL); + + /* scan string for validity */ + for (x = 0; x < noctets; x++) { + if (der_printable_char_encode(octets[x]) == -1) { + return CRYPT_INVALID_ARG; + } + } + + if (noctets < 128) { + /* 16 LL DD DD DD ... */ + *outlen = 2 + noctets; + } else if (noctets < 256) { + /* 16 81 LL DD DD DD ... */ + *outlen = 3 + noctets; + } else if (noctets < 65536UL) { + /* 16 82 LL LL DD DD DD ... */ + *outlen = 4 + noctets; + } else if (noctets < 16777216UL) { + /* 16 83 LL LL LL DD DD DD ... */ + *outlen = 5 + noctets; + } else { + return CRYPT_INVALID_ARG; + } + + return CRYPT_OK; +} +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/printable_string/der_length_printable_string.c,v $ */ +/* $Revision: 1.3 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_length_sequence.c + ASN.1 DER, length a SEQUENCE, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Get the length of a DER sequence + @param list The sequences of items in the SEQUENCE + @param inlen The number of items + @param outlen [out] The length required in octets to store it + @return CRYPT_OK on success + */ +int der_length_sequence(ltc_asn1_list *list, unsigned long inlen, + unsigned long *outlen) { + int err, type; + unsigned long size, x, y, z, i; + void *data; + + LTC_ARGCHK(list != NULL); + LTC_ARGCHK(outlen != NULL); + + /* get size of output that will be required */ + y = 0; + for (i = 0; i < inlen; i++) { + type = list[i].type; + size = list[i].size; + data = list[i].data; + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_BOOLEAN: + if ((err = der_length_boolean(&x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_INTEGER: + if ((err = der_length_integer(data, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_SHORT_INTEGER: + if ((err = der_length_short_integer(*((unsigned long *)data), &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_BIT_STRING: + if ((err = der_length_bit_string(size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_OCTET_STRING: + if ((err = der_length_octet_string(size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_NULL: + y += 2; + break; + + case LTC_ASN1_OBJECT_IDENTIFIER: + if ((err = der_length_object_identifier(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_IA5_STRING: + if ((err = der_length_ia5_string(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_PRINTABLE_STRING: + if ((err = der_length_printable_string(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_UTCTIME: + if ((err = der_length_utctime(data, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_UTF8_STRING: + if ((err = der_length_utf8_string(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_SET: + case LTC_ASN1_SETOF: + case LTC_ASN1_SEQUENCE: + if ((err = der_length_sequence(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + + default: + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + } + + /* calc header size */ + z = y; + if (y < 128) { + y += 2; + } else if (y < 256) { + /* 0x30 0x81 LL */ + y += 3; + } else if (y < 65536UL) { + /* 0x30 0x82 LL LL */ + y += 4; + } else if (y < 16777216UL) { + /* 0x30 0x83 LL LL LL */ + y += 5; + } else { + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + + /* store size */ + *outlen = y; + err = CRYPT_OK; + +LBL_ERR: + return err; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/sequence/der_length_sequence.c,v $ */ +/* $Revision: 1.14 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_length_short_integer.c + ASN.1 DER, get length of encoding, Tom St Denis + */ + + +#ifdef LTC_DER + +/** + Gets length of DER encoding of num + @param num The integer to get the size of + @param outlen [out] The length of the DER encoding for the given integer + @return CRYPT_OK if successful + */ +int der_length_short_integer(unsigned long num, unsigned long *outlen) { + unsigned long z, y, len; + + LTC_ARGCHK(outlen != NULL); + + /* force to 32 bits */ + num &= 0xFFFFFFFFUL; + + /* get the number of bytes */ + z = 0; + y = num; + while (y) { + ++z; + y >>= 8; + } + + /* handle zero */ + if (z == 0) { + z = 1; + } + + /* we need a 0x02 to indicate it's INTEGER */ + len = 1; + + /* length byte */ + ++len; + + /* bytes in value */ + len += z; + + /* see if msb is set */ + len += (num & (1UL << ((z << 3) - 1))) ? 1 : 0; + + /* return length */ + *outlen = len; + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/short_integer/der_length_short_integer.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_length_utctime.c + ASN.1 DER, get length of UTCTIME, Tom St Denis + */ + +#ifdef LTC_DER + +/** + Gets length of DER encoding of UTCTIME + @param utctime The UTC time structure to get the size of + @param outlen [out] The length of the DER encoding + @return CRYPT_OK if successful + */ +int der_length_utctime(ltc_utctime *utctime, unsigned long *outlen) { + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(utctime != NULL); + + if ((utctime->off_hh == 0) && (utctime->off_mm == 0)) { + /* we encode as YYMMDDhhmmssZ */ + *outlen = 2 + 13; + } else { + /* we encode as YYMMDDhhmmss{+|-}hh'mm' */ + *outlen = 2 + 17; + } + + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/utctime/der_length_utctime.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_length_utf8_string.c + ASN.1 DER, get length of UTF8 STRING, Tom St Denis + */ + +#ifdef LTC_DER + +/** Return the size in bytes of a UTF-8 character + @param c The UTF-8 character to measure + @return The size in bytes + */ +unsigned long der_utf8_charsize(const wchar_t c) { + if (c <= 0x7F) { + return 1; + } else if (c <= 0x7FF) { + return 2; + } else if (c <= 0xFFFF) { + return 3; + } else { + return 4; + } +} + +/** + Gets length of DER encoding of UTF8 STRING + @param in The characters to measure the length of + @param noctets The number of octets in the string to encode + @param outlen [out] The length of the DER encoding for the given string + @return CRYPT_OK if successful + */ +int der_length_utf8_string(const wchar_t *in, unsigned long noctets, unsigned long *outlen) { + unsigned long x, len; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(outlen != NULL); + + len = 0; + for (x = 0; x < noctets; x++) { + if ((in[x] < 0) || (in[x] > 0x10FFFF)) { + return CRYPT_INVALID_ARG; + } + len += der_utf8_charsize(in[x]); + } + + if (len < 128) { + /* 0C LL DD DD DD ... */ + *outlen = 2 + len; + } else if (len < 256) { + /* 0C 81 LL DD DD DD ... */ + *outlen = 3 + len; + } else if (len < 65536UL) { + /* 0C 82 LL LL DD DD DD ... */ + *outlen = 4 + len; + } else if (len < 16777216UL) { + /* 0C 83 LL LL LL DD DD DD ... */ + *outlen = 5 + len; + } else { + return CRYPT_INVALID_ARG; + } + + return CRYPT_OK; +} +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/utf8/der_length_utf8_string.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file der_sequence_free.c + ASN.1 DER, free's a structure allocated by der_decode_sequence_flexi(), Tom St Denis + */ + +#ifdef LTC_DER + +/** + Free memory allocated by der_decode_sequence_flexi() + @param in The list to free + */ +void der_sequence_free(ltc_asn1_list *in) { + ltc_asn1_list *l; + + /* walk to the start of the chain */ + while (in->prev != NULL || in->parent != NULL) { + if (in->parent != NULL) { + in = in->parent; + } else { + in = in->prev; + } + } + + /* now walk the list and free stuff */ + while (in != NULL) { + /* is there a child? */ + if (in->child) { + /* disconnect */ + in->child->parent = NULL; + der_sequence_free(in->child); + } + + switch (in->type) { + case LTC_ASN1_SET: + case LTC_ASN1_SETOF: + case LTC_ASN1_SEQUENCE: + break; + + case LTC_ASN1_INTEGER: + if (in->data != NULL) { + mp_clear(in->data); + } + break; + + default: + if (in->data != NULL) { + XFREE(in->data); + } + } + + /* move to next and free current */ + l = in->next; + XFREE(in); + in = l; + } +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/sequence/der_sequence_free.c,v $ */ +/* $Revision: 1.4 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/* This holds the key settings. ***MUST*** be organized by size from smallest to largest. */ +const ltc_ecc_set_type ltc_ecc_sets[] = { + #ifdef ECC112 + { + 14, + "SECP112R1", + "DB7C2ABF62E35E668076BEAD208B", + "659EF8BA043916EEDE8911702B22", + "DB7C2ABF62E35E7628DFAC6561C5", + "09487239995A5EE76B55F9C2F098", + "A89CE5AF8724C0A23E0E0FF77500" + }, + #endif + #ifdef ECC128 + { + 16, + "SECP128R1", + "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", + "E87579C11079F43DD824993C2CEE5ED3", + "FFFFFFFE0000000075A30D1B9038A115", + "161FF7528B899B2D0C28607CA52C5B86", + "CF5AC8395BAFEB13C02DA292DDED7A83", + }, + #endif + #ifdef ECC160 + { + 20, + "SECP160R1", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF", + "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45", + "0100000000000000000001F4C8F927AED3CA752257", + "4A96B5688EF573284664698968C38BB913CBFC82", + "23A628553168947D59DCC912042351377AC5FB32", + }, + #endif + #ifdef ECC192 + { + 24, + "ECC-192", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", + "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1", + "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831", + "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012", + "7192B95FFC8DA78631011ED6B24CDD573F977A11E794811", + }, + #endif + #ifdef ECC224 + { + 28, + "ECC-224", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", + "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D", + "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21", + "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34", + }, + #endif + #ifdef ECC256 + { + 32, + "ECC-256", + "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", + "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", + "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", + "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", + "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", + }, + #endif + #ifdef ECC384 + { + 48, + "ECC-384", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF", + "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973", + "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7", + "3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F", + }, + #endif + #ifdef ECC521 + { + 66, + "ECC-521", + "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + "51953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00", + "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409", + "C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66", + "11839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650", + }, + #endif + { + 0, + NULL, NULL, NULL, NULL, NULL, NULL + } +}; +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc.c,v $ */ +/* $Revision: 1.40 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_ansi_x963_export.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** ECC X9.63 (Sec. 4.3.6) uncompressed export + @param key Key to export + @param out [out] destination of export + @param outlen [in/out] Length of destination and final output size + Return CRYPT_OK on success + */ +int ecc_ansi_x963_export(ecc_key *key, unsigned char *out, unsigned long *outlen) { + unsigned char buf[ECC_BUF_SIZE]; + unsigned long numlen; + + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + if (ltc_ecc_is_valid_idx(key->idx) == 0) { + return CRYPT_INVALID_ARG; + } + numlen = key->dp->size; + + if (*outlen < (1 + 2 * numlen)) { + *outlen = 1 + 2 * numlen; + return CRYPT_BUFFER_OVERFLOW; + } + + /* store byte 0x04 */ + out[0] = 0x04; + + /* pad and store x */ + zeromem(buf, sizeof(buf)); + mp_to_unsigned_bin(key->pubkey.x, buf + (numlen - mp_unsigned_bin_size(key->pubkey.x))); + XMEMCPY(out + 1, buf, numlen); + + /* pad and store y */ + zeromem(buf, sizeof(buf)); + mp_to_unsigned_bin(key->pubkey.y, buf + (numlen - mp_unsigned_bin_size(key->pubkey.y))); + XMEMCPY(out + 1 + numlen, buf, numlen); + + *outlen = 1 + 2 * numlen; + return CRYPT_OK; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_ansi_x963_export.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_ansi_x963_import.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** Import an ANSI X9.63 format public key + @param in The input data to read + @param inlen The length of the input data + @param key [out] destination to store imported key \ + */ +int ecc_ansi_x963_import(const unsigned char *in, unsigned long inlen, ecc_key *key) { + return ecc_ansi_x963_import_ex(in, inlen, key, NULL); +} + +int ecc_ansi_x963_import_ex(const unsigned char *in, unsigned long inlen, ecc_key *key, ltc_ecc_set_type *dp) { + int x, err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(key != NULL); + + /* must be odd */ + if ((inlen & 1) == 0) { + return CRYPT_INVALID_ARG; + } + + /* init key */ + if (mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, NULL) != CRYPT_OK) { + return CRYPT_MEM; + } + + /* check for 4, 6 or 7 */ + if ((in[0] != 4) && (in[0] != 6) && (in[0] != 7)) { + err = CRYPT_INVALID_PACKET; + goto error; + } + + /* read data */ + if ((err = mp_read_unsigned_bin(key->pubkey.x, (unsigned char *)in + 1, (inlen - 1) >> 1)) != CRYPT_OK) { + goto error; + } + + if ((err = mp_read_unsigned_bin(key->pubkey.y, (unsigned char *)in + 1 + ((inlen - 1) >> 1), (inlen - 1) >> 1)) != CRYPT_OK) { + goto error; + } + if ((err = mp_set(key->pubkey.z, 1)) != CRYPT_OK) { + goto error; + } + + if (dp == NULL) { + /* determine the idx */ + for (x = 0; ltc_ecc_sets[x].size != 0; x++) { + if ((unsigned)ltc_ecc_sets[x].size >= ((inlen - 1) >> 1)) { + break; + } + } + if (ltc_ecc_sets[x].size == 0) { + err = CRYPT_INVALID_PACKET; + goto error; + } + /* set the idx */ + key->idx = x; + key->dp = &ltc_ecc_sets[x]; + } else { + if (((inlen - 1) >> 1) != (unsigned long)dp->size) { + err = CRYPT_INVALID_PACKET; + goto error; + } + key->idx = -1; + key->dp = dp; + } + key->type = PK_PUBLIC; + + /* we're done */ + return CRYPT_OK; +error: + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); + return err; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_ansi_x963_import.c,v $ */ +/* $Revision: 1.11 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_decrypt_key.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** + Decrypt an ECC encrypted key + @param in The ciphertext + @param inlen The length of the ciphertext (octets) + @param out [out] The plaintext + @param outlen [in/out] The max size and resulting size of the plaintext + @param key The corresponding private ECC key + @return CRYPT_OK if successful + */ +int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + ecc_key *key) { + unsigned char *ecc_shared, *skey, *pub_expt; + unsigned long x, y, hashOID[32]; + int hash, err; + ecc_key pubkey; + ltc_asn1_list decode[3]; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(key != NULL); + + /* right key type? */ + if (key->type != PK_PRIVATE) { + return CRYPT_PK_NOT_PRIVATE; + } + + /* decode to find out hash */ + LTC_SET_ASN1(decode, 0, LTC_ASN1_OBJECT_IDENTIFIER, hashOID, sizeof(hashOID) / sizeof(hashOID[0])); + + if ((err = der_decode_sequence(in, inlen, decode, 1)) != CRYPT_OK) { + return err; + } + + hash = find_hash_oid(hashOID, decode[0].size); + if (hash_is_valid(hash) != CRYPT_OK) { + return CRYPT_INVALID_PACKET; + } + + /* we now have the hash! */ + + /* allocate memory */ + pub_expt = XMALLOC(ECC_BUF_SIZE); + ecc_shared = XMALLOC(ECC_BUF_SIZE); + skey = XMALLOC(MAXBLOCKSIZE); + if ((pub_expt == NULL) || (ecc_shared == NULL) || (skey == NULL)) { + if (pub_expt != NULL) { + XFREE(pub_expt); + } + if (ecc_shared != NULL) { + XFREE(ecc_shared); + } + if (skey != NULL) { + XFREE(skey); + } + return CRYPT_MEM; + } + LTC_SET_ASN1(decode, 1, LTC_ASN1_OCTET_STRING, pub_expt, ECC_BUF_SIZE); + LTC_SET_ASN1(decode, 2, LTC_ASN1_OCTET_STRING, skey, MAXBLOCKSIZE); + + /* read the structure in now */ + if ((err = der_decode_sequence(in, inlen, decode, 3)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* import ECC key from packet */ + if ((err = ecc_import(decode[1].data, decode[1].size, &pubkey)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* make shared key */ + x = ECC_BUF_SIZE; + if ((err = ecc_shared_secret(key, &pubkey, ecc_shared, &x)) != CRYPT_OK) { + ecc_free(&pubkey); + goto LBL_ERR; + } + ecc_free(&pubkey); + + y = MIN(ECC_BUF_SIZE, MAXBLOCKSIZE); + if ((err = hash_memory(hash, ecc_shared, x, ecc_shared, &y)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* ensure the hash of the shared secret is at least as big as the encrypt itself */ + if (decode[2].size > y) { + err = CRYPT_INVALID_PACKET; + goto LBL_ERR; + } + + /* avoid buffer overflow */ + if (*outlen < decode[2].size) { + *outlen = decode[2].size; + err = CRYPT_BUFFER_OVERFLOW; + goto LBL_ERR; + } + + /* Decrypt the key */ + for (x = 0; x < decode[2].size; x++) { + out[x] = skey[x] ^ ecc_shared[x]; + } + *outlen = x; + + err = CRYPT_OK; +LBL_ERR: + #ifdef LTC_CLEAN_STACK + zeromem(pub_expt, ECC_BUF_SIZE); + zeromem(ecc_shared, ECC_BUF_SIZE); + zeromem(skey, MAXBLOCKSIZE); + #endif + + XFREE(pub_expt); + XFREE(ecc_shared); + XFREE(skey); + + return err; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_decrypt_key.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_encrypt_key.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** + Encrypt a symmetric key with ECC + @param in The symmetric key you want to encrypt + @param inlen The length of the key to encrypt (octets) + @param out [out] The destination for the ciphertext + @param outlen [in/out] The max size and resulting size of the ciphertext + @param prng An active PRNG state + @param wprng The index of the PRNG you wish to use + @param hash The index of the hash you want to use + @param key The ECC key you want to encrypt to + @return CRYPT_OK if successful + */ +int ecc_encrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, int hash, + ecc_key *key) { + unsigned char *pub_expt, *ecc_shared, *skey; + ecc_key pubkey; + unsigned long x, y, pubkeysize; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(key != NULL); + + /* check that wprng/cipher/hash are not invalid */ + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + if ((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + + if (inlen > hash_descriptor[hash].hashsize) { + return CRYPT_INVALID_HASH; + } + + /* make a random key and export the public copy */ + if ((err = ecc_make_key_ex(prng, wprng, &pubkey, key->dp)) != CRYPT_OK) { + return err; + } + + pub_expt = XMALLOC(ECC_BUF_SIZE); + ecc_shared = XMALLOC(ECC_BUF_SIZE); + skey = XMALLOC(MAXBLOCKSIZE); + if ((pub_expt == NULL) || (ecc_shared == NULL) || (skey == NULL)) { + if (pub_expt != NULL) { + XFREE(pub_expt); + } + if (ecc_shared != NULL) { + XFREE(ecc_shared); + } + if (skey != NULL) { + XFREE(skey); + } + ecc_free(&pubkey); + return CRYPT_MEM; + } + + pubkeysize = ECC_BUF_SIZE; + if ((err = ecc_export(pub_expt, &pubkeysize, PK_PUBLIC, &pubkey)) != CRYPT_OK) { + ecc_free(&pubkey); + goto LBL_ERR; + } + + /* make random key */ + x = ECC_BUF_SIZE; + if ((err = ecc_shared_secret(&pubkey, key, ecc_shared, &x)) != CRYPT_OK) { + ecc_free(&pubkey); + goto LBL_ERR; + } + ecc_free(&pubkey); + y = MAXBLOCKSIZE; + if ((err = hash_memory(hash, ecc_shared, x, skey, &y)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* Encrypt key */ + for (x = 0; x < inlen; x++) { + skey[x] ^= in[x]; + } + + err = der_encode_sequence_multi(out, outlen, + LTC_ASN1_OBJECT_IDENTIFIER, hash_descriptor[hash].OIDlen, hash_descriptor[hash].OID, + LTC_ASN1_OCTET_STRING, pubkeysize, pub_expt, + LTC_ASN1_OCTET_STRING, inlen, skey, + LTC_ASN1_EOL, 0UL, NULL); + +LBL_ERR: + #ifdef LTC_CLEAN_STACK + /* clean up */ + zeromem(pub_expt, ECC_BUF_SIZE); + zeromem(ecc_shared, ECC_BUF_SIZE); + zeromem(skey, MAXBLOCKSIZE); + #endif + + XFREE(skey); + XFREE(ecc_shared); + XFREE(pub_expt); + + return err; +} +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_encrypt_key.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_export.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** + Export an ECC key as a binary packet + @param out [out] Destination for the key + @param outlen [in/out] Max size and resulting size of the exported key + @param type The type of key you want to export (PK_PRIVATE or PK_PUBLIC) + @param key The key to export + @return CRYPT_OK if successful + */ +int ecc_export(unsigned char *out, unsigned long *outlen, int type, ecc_key *key) { + int err; + unsigned char flags[1]; + unsigned long key_size; + + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(key != NULL); + + /* type valid? */ + if ((key->type != PK_PRIVATE) && (type == PK_PRIVATE)) { + return CRYPT_PK_TYPE_MISMATCH; + } + + if (ltc_ecc_is_valid_idx(key->idx) == 0) { + return CRYPT_INVALID_ARG; + } + + /* we store the NIST byte size */ + key_size = key->dp->size; + + if (type == PK_PRIVATE) { + flags[0] = 1; + err = der_encode_sequence_multi(out, outlen, + LTC_ASN1_BIT_STRING, 1UL, flags, + LTC_ASN1_SHORT_INTEGER, 1UL, &key_size, + LTC_ASN1_INTEGER, 1UL, key->pubkey.x, + LTC_ASN1_INTEGER, 1UL, key->pubkey.y, + LTC_ASN1_INTEGER, 1UL, key->k, + LTC_ASN1_EOL, 0UL, NULL); + } else { + flags[0] = 0; + err = der_encode_sequence_multi(out, outlen, + LTC_ASN1_BIT_STRING, 1UL, flags, + LTC_ASN1_SHORT_INTEGER, 1UL, &key_size, + LTC_ASN1_INTEGER, 1UL, key->pubkey.x, + LTC_ASN1_INTEGER, 1UL, key->pubkey.y, + LTC_ASN1_EOL, 0UL, NULL); + } + + return err; +} +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_export.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_free.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** + Free an ECC key from memory + @param key The key you wish to free + */ +void ecc_free(ecc_key *key) { + LTC_ARGCHKVD(key != NULL); + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); +} +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_free.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_get_size.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** + Get the size of an ECC key + @param key The key to get the size of + @return The size (octets) of the key or INT_MAX on error + */ +int ecc_get_size(ecc_key *key) { + LTC_ARGCHK(key != NULL); + if (ltc_ecc_is_valid_idx(key->idx)) + return key->dp->size; + else + return INT_MAX; /* large value known to cause it to fail when passed to ecc_make_key() */ +} +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_get_size.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_import.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +static int is_point(ecc_key *key) { + void *prime, *b, *t1, *t2; + int err; + + if ((err = mp_init_multi(&prime, &b, &t1, &t2, NULL)) != CRYPT_OK) { + return err; + } + + /* load prime and b */ + if ((err = mp_read_radix(prime, key->dp->prime, 16)) != CRYPT_OK) { + goto error; + } + if ((err = mp_read_radix(b, key->dp->B, 16)) != CRYPT_OK) { + goto error; + } + + /* compute y^2 */ + if ((err = mp_sqr(key->pubkey.y, t1)) != CRYPT_OK) { + goto error; + } + + /* compute x^3 */ + if ((err = mp_sqr(key->pubkey.x, t2)) != CRYPT_OK) { + goto error; + } + if ((err = mp_mod(t2, prime, t2)) != CRYPT_OK) { + goto error; + } + if ((err = mp_mul(key->pubkey.x, t2, t2)) != CRYPT_OK) { + goto error; + } + + /* compute y^2 - x^3 */ + if ((err = mp_sub(t1, t2, t1)) != CRYPT_OK) { + goto error; + } + + /* compute y^2 - x^3 + 3x */ + if ((err = mp_add(t1, key->pubkey.x, t1)) != CRYPT_OK) { + goto error; + } + if ((err = mp_add(t1, key->pubkey.x, t1)) != CRYPT_OK) { + goto error; + } + if ((err = mp_add(t1, key->pubkey.x, t1)) != CRYPT_OK) { + goto error; + } + if ((err = mp_mod(t1, prime, t1)) != CRYPT_OK) { + goto error; + } + while (mp_cmp_d(t1, 0) == LTC_MP_LT) { + if ((err = mp_add(t1, prime, t1)) != CRYPT_OK) { + goto error; + } + } + while (mp_cmp(t1, prime) != LTC_MP_LT) { + if ((err = mp_sub(t1, prime, t1)) != CRYPT_OK) { + goto error; + } + } + + /* compare to b */ + if (mp_cmp(t1, b) != LTC_MP_EQ) { + err = CRYPT_INVALID_PACKET; + } else { + err = CRYPT_OK; + } + +error: + mp_clear_multi(prime, b, t1, t2, NULL); + return err; +} + +/** + Import an ECC key from a binary packet + @param in The packet to import + @param inlen The length of the packet + @param key [out] The destination of the import + @return CRYPT_OK if successful, upon error all allocated memory will be freed + */ +int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key) { + return ecc_import_ex(in, inlen, key, NULL); +} + +/** + Import an ECC key from a binary packet, using user supplied domain params rather than one of the NIST ones + @param in The packet to import + @param inlen The length of the packet + @param key [out] The destination of the import + @param dp pointer to user supplied params; must be the same as the params used when exporting + @return CRYPT_OK if successful, upon error all allocated memory will be freed + */ +int ecc_import_ex(const unsigned char *in, unsigned long inlen, ecc_key *key, const ltc_ecc_set_type *dp) { + unsigned long key_size; + unsigned char flags[1]; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(ltc_mp.name != NULL); + + /* init key */ + if (mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, NULL) != CRYPT_OK) { + return CRYPT_MEM; + } + + /* find out what type of key it is */ + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_BIT_STRING, 1UL, &flags, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto done; + } + + + if (flags[0] == 1) { + /* private key */ + key->type = PK_PRIVATE; + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_BIT_STRING, 1UL, flags, + LTC_ASN1_SHORT_INTEGER, 1UL, &key_size, + LTC_ASN1_INTEGER, 1UL, key->pubkey.x, + LTC_ASN1_INTEGER, 1UL, key->pubkey.y, + LTC_ASN1_INTEGER, 1UL, key->k, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto done; + } + } else { + /* public key */ + key->type = PK_PUBLIC; + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_BIT_STRING, 1UL, flags, + LTC_ASN1_SHORT_INTEGER, 1UL, &key_size, + LTC_ASN1_INTEGER, 1UL, key->pubkey.x, + LTC_ASN1_INTEGER, 1UL, key->pubkey.y, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto done; + } + } + + if (dp == NULL) { + /* find the idx */ + for (key->idx = 0; ltc_ecc_sets[key->idx].size && (unsigned long)ltc_ecc_sets[key->idx].size != key_size; ++key->idx); + if (ltc_ecc_sets[key->idx].size == 0) { + err = CRYPT_INVALID_PACKET; + goto done; + } + key->dp = &ltc_ecc_sets[key->idx]; + } else { + key->idx = -1; + key->dp = dp; + } + /* set z */ + if ((err = mp_set(key->pubkey.z, 1)) != CRYPT_OK) { + goto done; + } + + /* is it a point on the curve? */ + if ((err = is_point(key)) != CRYPT_OK) { + goto done; + } + + /* we're good */ + return CRYPT_OK; +done: + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); + return err; +} +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_import.c,v $ */ +/* $Revision: 1.13 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_make_key.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** + Make a new ECC key + @param prng An active PRNG state + @param wprng The index of the PRNG you wish to use + @param keysize The keysize for the new key (in octets from 20 to 65 bytes) + @param key [out] Destination of the newly created key + @return CRYPT_OK if successful, upon error all allocated memory will be freed + */ +int ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key) { + int x, err; + + /* find key size */ + for (x = 0; (keysize > ltc_ecc_sets[x].size) && (ltc_ecc_sets[x].size != 0); x++); + keysize = ltc_ecc_sets[x].size; + + if ((keysize > ECC_MAXSIZE) || (ltc_ecc_sets[x].size == 0)) { + return CRYPT_INVALID_KEYSIZE; + } + err = ecc_make_key_ex(prng, wprng, key, &ltc_ecc_sets[x]); + key->idx = x; + return err; +} + +int ecc_make_key_ex(prng_state *prng, int wprng, ecc_key *key, const ltc_ecc_set_type *dp) { + int err; + ecc_point *base; + void *prime, *order; + unsigned char *buf; + int keysize; + + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(ltc_mp.name != NULL); + LTC_ARGCHK(dp != NULL); + + /* good prng? */ + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + key->idx = -1; + key->dp = dp; + keysize = dp->size; + + /* allocate ram */ + base = NULL; + buf = XMALLOC(ECC_MAXSIZE); + if (buf == NULL) { + return CRYPT_MEM; + } + + /* make up random string */ + if (prng_descriptor[wprng].read(buf, (unsigned long)keysize, prng) != (unsigned long)keysize) { + err = CRYPT_ERROR_READPRNG; + goto ERR_BUF; + } + + /* setup the key variables */ + if ((err = mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, &prime, &order, NULL)) != CRYPT_OK) { + goto ERR_BUF; + } + base = ltc_ecc_new_point(); + if (base == NULL) { + err = CRYPT_MEM; + goto errkey; + } + + /* read in the specs for this key */ + if ((err = mp_read_radix(prime, (char *)key->dp->prime, 16)) != CRYPT_OK) { + goto errkey; + } + if ((err = mp_read_radix(order, (char *)key->dp->order, 16)) != CRYPT_OK) { + goto errkey; + } + if ((err = mp_read_radix(base->x, (char *)key->dp->Gx, 16)) != CRYPT_OK) { + goto errkey; + } + if ((err = mp_read_radix(base->y, (char *)key->dp->Gy, 16)) != CRYPT_OK) { + goto errkey; + } + if ((err = mp_set(base->z, 1)) != CRYPT_OK) { + goto errkey; + } + if ((err = mp_read_unsigned_bin(key->k, (unsigned char *)buf, keysize)) != CRYPT_OK) { + goto errkey; + } + + /* the key should be smaller than the order of base point */ + if (mp_cmp(key->k, order) != LTC_MP_LT) { + if ((err = mp_mod(key->k, order, key->k)) != CRYPT_OK) { + goto errkey; + } + } + /* make the public key */ + if ((err = ltc_mp.ecc_ptmul(key->k, base, &key->pubkey, prime, 1)) != CRYPT_OK) { + goto errkey; + } + key->type = PK_PRIVATE; + + /* free up ram */ + err = CRYPT_OK; + goto cleanup; +errkey: + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); +cleanup: + ltc_ecc_del_point(base); + mp_clear_multi(prime, order, NULL); +ERR_BUF: + #ifdef LTC_CLEAN_STACK + zeromem(buf, ECC_MAXSIZE); + #endif + XFREE(buf); + return err; +} +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_make_key.c,v $ */ +/* $Revision: 1.13 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_shared_secret.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** + Create an ECC shared secret between two keys + @param private_key The private ECC key + @param public_key The public key + @param out [out] Destination of the shared secret (Conforms to EC-DH from ANSI X9.63) + @param outlen [in/out] The max size and resulting size of the shared secret + @return CRYPT_OK if successful + */ +int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key, + unsigned char *out, unsigned long *outlen) { + unsigned long x; + ecc_point *result; + void *prime; + int err; + + LTC_ARGCHK(private_key != NULL); + LTC_ARGCHK(public_key != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* type valid? */ + if (private_key->type != PK_PRIVATE) { + return CRYPT_PK_NOT_PRIVATE; + } + + if ((ltc_ecc_is_valid_idx(private_key->idx) == 0) || (ltc_ecc_is_valid_idx(public_key->idx) == 0)) { + return CRYPT_INVALID_ARG; + } + + if (XSTRCMP(private_key->dp->name, public_key->dp->name) != 0) { + return CRYPT_PK_TYPE_MISMATCH; + } + + /* make new point */ + result = ltc_ecc_new_point(); + if (result == NULL) { + return CRYPT_MEM; + } + + if ((err = mp_init(&prime)) != CRYPT_OK) { + ltc_ecc_del_point(result); + return err; + } + + if ((err = mp_read_radix(prime, (char *)private_key->dp->prime, 16)) != CRYPT_OK) { + goto done; + } + if ((err = ltc_mp.ecc_ptmul(private_key->k, &public_key->pubkey, result, prime, 1)) != CRYPT_OK) { + goto done; + } + + x = (unsigned long)mp_unsigned_bin_size(prime); + if (*outlen < x) { + *outlen = x; + err = CRYPT_BUFFER_OVERFLOW; + goto done; + } + zeromem(out, x); + if ((err = mp_to_unsigned_bin(result->x, out + (x - mp_unsigned_bin_size(result->x)))) != CRYPT_OK) { + goto done; + } + + err = CRYPT_OK; + *outlen = x; +done: + mp_clear(prime); + ltc_ecc_del_point(result); + return err; +} +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_shared_secret.c,v $ */ +/* $Revision: 1.10 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_sign_hash.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** + Sign a message digest + @param in The message digest to sign + @param inlen The length of the digest + @param out [out] The destination for the signature + @param outlen [in/out] The max size and resulting size of the signature + @param prng An active PRNG state + @param wprng The index of the PRNG you wish to use + @param key A private ECC key + @return CRYPT_OK if successful + */ +int ecc_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, ecc_key *key) { + ecc_key pubkey; + void *r, *s, *e, *p; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(key != NULL); + + /* is this a private key? */ + if (key->type != PK_PRIVATE) { + return CRYPT_PK_NOT_PRIVATE; + } + + /* is the IDX valid ? */ + if (ltc_ecc_is_valid_idx(key->idx) != 1) { + return CRYPT_PK_INVALID_TYPE; + } + + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + /* get the hash and load it as a bignum into 'e' */ + /* init the bignums */ + if ((err = mp_init_multi(&r, &s, &p, &e, NULL)) != CRYPT_OK) { + return err; + } + if ((err = mp_read_radix(p, (char *)key->dp->order, 16)) != CRYPT_OK) { + goto errnokey; + } + if ((err = mp_read_unsigned_bin(e, (unsigned char *)in, (int)inlen)) != CRYPT_OK) { + goto errnokey; + } + + /* make up a key and export the public copy */ + for ( ; ; ) { + if ((err = ecc_make_key_ex(prng, wprng, &pubkey, key->dp)) != CRYPT_OK) { + goto errnokey; + } + + /* find r = x1 mod n */ + if ((err = mp_mod(pubkey.pubkey.x, p, r)) != CRYPT_OK) { + goto error; + } + + if (mp_iszero(r) == LTC_MP_YES) { + ecc_free(&pubkey); + } else { + /* find s = (e + xr)/k */ + if ((err = mp_invmod(pubkey.k, p, pubkey.k)) != CRYPT_OK) { + goto error; + } /* k = 1/k */ + if ((err = mp_mulmod(key->k, r, p, s)) != CRYPT_OK) { + goto error; + } /* s = xr */ + if ((err = mp_add(e, s, s)) != CRYPT_OK) { + goto error; + } /* s = e + xr */ + if ((err = mp_mod(s, p, s)) != CRYPT_OK) { + goto error; + } /* s = e + xr */ + if ((err = mp_mulmod(s, pubkey.k, p, s)) != CRYPT_OK) { + goto error; + } /* s = (e + xr)/k */ + ecc_free(&pubkey); + if (mp_iszero(s) == LTC_MP_NO) { + break; + } + } + } + + /* store as SEQUENCE { r, s -- integer } */ + err = der_encode_sequence_multi(out, outlen, + LTC_ASN1_INTEGER, 1UL, r, + LTC_ASN1_INTEGER, 1UL, s, + LTC_ASN1_EOL, 0UL, NULL); + goto errnokey; +error: + ecc_free(&pubkey); +errnokey: + mp_clear_multi(r, s, p, e, NULL); + return err; +} +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_sign_hash.c,v $ */ +/* $Revision: 1.11 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_sizes.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +void ecc_sizes(int *low, int *high) { + int i; + + LTC_ARGCHKVD(low != NULL); + LTC_ARGCHKVD(high != NULL); + + *low = INT_MAX; + *high = 0; + for (i = 0; ltc_ecc_sets[i].size != 0; i++) { + if (ltc_ecc_sets[i].size < *low) { + *low = ltc_ecc_sets[i].size; + } + if (ltc_ecc_sets[i].size > *high) { + *high = ltc_ecc_sets[i].size; + } + } +} +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_sizes.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_test.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** + Perform on the ECC system + @return CRYPT_OK if successful + */ +int ecc_test(void) { + void *modulus, *order; + ecc_point *G, *GG; + int i, err, primality; + + if ((err = mp_init_multi(&modulus, &order, NULL)) != CRYPT_OK) { + return err; + } + + G = ltc_ecc_new_point(); + GG = ltc_ecc_new_point(); + if ((G == NULL) || (GG == NULL)) { + mp_clear_multi(modulus, order, NULL); + ltc_ecc_del_point(G); + ltc_ecc_del_point(GG); + return CRYPT_MEM; + } + + for (i = 0; ltc_ecc_sets[i].size; i++) { + #if 0 + printf("Testing %d\n", ltc_ecc_sets[i].size); + #endif + if ((err = mp_read_radix(modulus, (char *)ltc_ecc_sets[i].prime, 16)) != CRYPT_OK) { + goto done; + } + if ((err = mp_read_radix(order, (char *)ltc_ecc_sets[i].order, 16)) != CRYPT_OK) { + goto done; + } + + /* is prime actually prime? */ + if ((err = mp_prime_is_prime(modulus, 8, &primality)) != CRYPT_OK) { + goto done; + } + if (primality == 0) { + err = CRYPT_FAIL_TESTVECTOR; + goto done; + } + + /* is order prime ? */ + if ((err = mp_prime_is_prime(order, 8, &primality)) != CRYPT_OK) { + goto done; + } + if (primality == 0) { + err = CRYPT_FAIL_TESTVECTOR; + goto done; + } + + if ((err = mp_read_radix(G->x, (char *)ltc_ecc_sets[i].Gx, 16)) != CRYPT_OK) { + goto done; + } + if ((err = mp_read_radix(G->y, (char *)ltc_ecc_sets[i].Gy, 16)) != CRYPT_OK) { + goto done; + } + mp_set(G->z, 1); + + /* then we should have G == (order + 1)G */ + if ((err = mp_add_d(order, 1, order)) != CRYPT_OK) { + goto done; + } + if ((err = ltc_mp.ecc_ptmul(order, G, GG, modulus, 1)) != CRYPT_OK) { + goto done; + } + if ((mp_cmp(G->x, GG->x) != LTC_MP_EQ) || (mp_cmp(G->y, GG->y) != LTC_MP_EQ)) { + err = CRYPT_FAIL_TESTVECTOR; + goto done; + } + } + err = CRYPT_OK; +done: + ltc_ecc_del_point(GG); + ltc_ecc_del_point(G); + mp_clear_multi(order, modulus, NULL); + return err; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_test.c,v $ */ +/* $Revision: 1.12 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ecc_verify_hash.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/* verify + * + * w = s^-1 mod n + * u1 = xw + * u2 = rw + * X = u1*G + u2*Q + * v = X_x1 mod n + * accept if v == r + */ + +/** + Verify an ECC signature + @param sig The signature to verify + @param siglen The length of the signature (octets) + @param hash The hash (message digest) that was signed + @param hashlen The length of the hash (octets) + @param stat Result of signature, 1==valid, 0==invalid + @param key The corresponding public ECC key + @return CRYPT_OK if successful (even if the signature is not valid) + */ +int ecc_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int *stat, ecc_key *key) { + ecc_point *mG, *mQ; + void *r, *s, *v, *w, *u1, *u2, *e, *p, *m; + void *mp; + int err; + + LTC_ARGCHK(sig != NULL); + LTC_ARGCHK(hash != NULL); + LTC_ARGCHK(stat != NULL); + LTC_ARGCHK(key != NULL); + + /* default to invalid signature */ + *stat = 0; + mp = NULL; + + /* is the IDX valid ? */ + if (ltc_ecc_is_valid_idx(key->idx) != 1) { + return CRYPT_PK_INVALID_TYPE; + } + + /* allocate ints */ + if ((err = mp_init_multi(&r, &s, &v, &w, &u1, &u2, &p, &e, &m, NULL)) != CRYPT_OK) { + return CRYPT_MEM; + } + + /* allocate points */ + mG = ltc_ecc_new_point(); + mQ = ltc_ecc_new_point(); + if ((mQ == NULL) || (mG == NULL)) { + err = CRYPT_MEM; + goto error; + } + + /* parse header */ + if ((err = der_decode_sequence_multi(sig, siglen, + LTC_ASN1_INTEGER, 1UL, r, + LTC_ASN1_INTEGER, 1UL, s, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto error; + } + + /* get the order */ + if ((err = mp_read_radix(p, (char *)key->dp->order, 16)) != CRYPT_OK) { + goto error; + } + + /* get the modulus */ + if ((err = mp_read_radix(m, (char *)key->dp->prime, 16)) != CRYPT_OK) { + goto error; + } + + /* check for zero */ + if (mp_iszero(r) || mp_iszero(s) || (mp_cmp(r, p) != LTC_MP_LT) || (mp_cmp(s, p) != LTC_MP_LT)) { + err = CRYPT_INVALID_PACKET; + goto error; + } + + /* read hash */ + if ((err = mp_read_unsigned_bin(e, (unsigned char *)hash, (int)hashlen)) != CRYPT_OK) { + goto error; + } + + /* w = s^-1 mod n */ + if ((err = mp_invmod(s, p, w)) != CRYPT_OK) { + goto error; + } + + /* u1 = ew */ + if ((err = mp_mulmod(e, w, p, u1)) != CRYPT_OK) { + goto error; + } + + /* u2 = rw */ + if ((err = mp_mulmod(r, w, p, u2)) != CRYPT_OK) { + goto error; + } + + /* find mG and mQ */ + if ((err = mp_read_radix(mG->x, (char *)key->dp->Gx, 16)) != CRYPT_OK) { + goto error; + } + if ((err = mp_read_radix(mG->y, (char *)key->dp->Gy, 16)) != CRYPT_OK) { + goto error; + } + if ((err = mp_set(mG->z, 1)) != CRYPT_OK) { + goto error; + } + + if ((err = mp_copy(key->pubkey.x, mQ->x)) != CRYPT_OK) { + goto error; + } + if ((err = mp_copy(key->pubkey.y, mQ->y)) != CRYPT_OK) { + goto error; + } + if ((err = mp_copy(key->pubkey.z, mQ->z)) != CRYPT_OK) { + goto error; + } + + /* compute u1*mG + u2*mQ = mG */ + if (ltc_mp.ecc_mul2add == NULL) { + if ((err = ltc_mp.ecc_ptmul(u1, mG, mG, m, 0)) != CRYPT_OK) { + goto error; + } + if ((err = ltc_mp.ecc_ptmul(u2, mQ, mQ, m, 0)) != CRYPT_OK) { + goto error; + } + + /* find the montgomery mp */ + if ((err = mp_montgomery_setup(m, &mp)) != CRYPT_OK) { + goto error; + } + + /* add them */ + if ((err = ltc_mp.ecc_ptadd(mQ, mG, mG, m, mp)) != CRYPT_OK) { + goto error; + } + + /* reduce */ + if ((err = ltc_mp.ecc_map(mG, m, mp)) != CRYPT_OK) { + goto error; + } + } else { + /* use Shamir's trick to compute u1*mG + u2*mQ using half of the doubles */ + if ((err = ltc_mp.ecc_mul2add(mG, u1, mQ, u2, mG, m)) != CRYPT_OK) { + goto error; + } + } + + /* v = X_x1 mod n */ + if ((err = mp_mod(mG->x, p, v)) != CRYPT_OK) { + goto error; + } + + /* does v == r */ + if (mp_cmp(v, r) == LTC_MP_EQ) { + *stat = 1; + } + + /* clear up and return */ + err = CRYPT_OK; +error: + ltc_ecc_del_point(mG); + ltc_ecc_del_point(mQ); + mp_clear_multi(r, s, v, w, u1, u2, p, e, m, NULL); + if (mp != NULL) { + mp_montgomery_free(mp); + } + return err; +} +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ecc_verify_hash.c,v $ */ +/* $Revision: 1.14 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + + +/** + @file error_to_string.c + Convert error codes to ASCII strings, Tom St Denis + */ + +static const char * const err_2_str[] = +{ + "CRYPT_OK", + "CRYPT_ERROR", + "Non-fatal 'no-operation' requested.", + + "Invalid keysize for block cipher.", + "Invalid number of rounds for block cipher.", + "Algorithm failed test vectors.", + + "Buffer overflow.", + "Invalid input packet.", + + "Invalid number of bits for a PRNG.", + "Error reading the PRNG.", + + "Invalid cipher specified.", + "Invalid hash specified.", + "Invalid PRNG specified.", + + "Out of memory.", + + "Invalid PK key or key type specified for function.", + "A private PK key is required.", + + "Invalid argument provided.", + "File Not Found", + + "Invalid PK type.", + "Invalid PK system.", + "Duplicate PK key found on keyring.", + "Key not found in keyring.", + "Invalid sized parameter.", + + "Invalid size for prime.", +}; + +/** + Convert an LTC error code to ASCII + @param err The error code + @return A pointer to the ASCII NUL terminated string for the error or "Invalid error code." if the err code was not valid. + */ +const char *error_to_string(int err) { + if ((err < 0) || (err >= (int)(sizeof(err_2_str) / sizeof(err_2_str[0])))) { + return "Invalid error code."; + } else { + return err_2_str[err]; + } +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/error_to_string.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +#define DESC_DEF_ONLY + + + +/* $Source: /cvs/libtom/libtomcrypt/src/math/gmp_desc.c,v $ */ +/* $Revision: 1.16 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file hash_file.c + Hash a file, Tom St Denis + */ + +/** + @param hash The index of the hash desired + @param fname The name of the file you wish to hash + @param out [out] The destination of the digest + @param outlen [in/out] The max size and resulting size of the message digest + @result CRYPT_OK if successful + */ +int hash_file(int hash, const char *fname, unsigned char *out, unsigned long *outlen) { +#ifdef LTC_NO_FILE + return CRYPT_NOP; +#else + FILE *in; + int err; + LTC_ARGCHK(fname != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + if ((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + + in = fopen(fname, "rb"); + if (in == NULL) { + return CRYPT_FILE_NOTFOUND; + } + + err = hash_filehandle(hash, in, out, outlen); + if (fclose(in) != 0) { + return CRYPT_ERROR; + } + + return err; +#endif +} + +/* $Source: /cvs/libtom/libtomcrypt/src/hashes/helper/hash_file.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:23 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file hash_filehandle.c + Hash open files, Tom St Denis + */ + +/** + Hash data from an open file handle. + @param hash The index of the hash you want to use + @param in The FILE* handle of the file you want to hash + @param out [out] The destination of the digest + @param outlen [in/out] The max size and resulting size of the digest + @result CRYPT_OK if successful + */ +int hash_filehandle(int hash, FILE *in, unsigned char *out, unsigned long *outlen) { +#ifdef LTC_NO_FILE + return CRYPT_NOP; +#else + hash_state md; + unsigned char buf[512]; + size_t x; + int err; + + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(in != NULL); + + if ((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + + if (*outlen < hash_descriptor[hash].hashsize) { + *outlen = hash_descriptor[hash].hashsize; + return CRYPT_BUFFER_OVERFLOW; + } + if ((err = hash_descriptor[hash].init(&md)) != CRYPT_OK) { + return err; + } + + *outlen = hash_descriptor[hash].hashsize; + do { + x = fread(buf, 1, sizeof(buf), in); + if ((err = hash_descriptor[hash].process(&md, buf, x)) != CRYPT_OK) { + return err; + } + } while (x == sizeof(buf)); + err = hash_descriptor[hash].done(&md, out); + + #ifdef LTC_CLEAN_STACK + zeromem(buf, sizeof(buf)); + #endif + return err; +#endif +} + +/* $Source: /cvs/libtom/libtomcrypt/src/hashes/helper/hash_filehandle.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:23 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file hash_memory.c + Hash memory helper, Tom St Denis + */ + +/** + Hash a block of memory and store the digest. + @param hash The index of the hash you wish to use + @param in The data you wish to hash + @param inlen The length of the data to hash (octets) + @param out [out] Where to store the digest + @param outlen [in/out] Max size and resulting size of the digest + @return CRYPT_OK if successful + */ +int hash_memory(int hash, const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen) { + hash_state *md; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + if ((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + + if (*outlen < hash_descriptor[hash].hashsize) { + *outlen = hash_descriptor[hash].hashsize; + return CRYPT_BUFFER_OVERFLOW; + } + + md = XMALLOC(sizeof(hash_state)); + if (md == NULL) { + return CRYPT_MEM; + } + + if ((err = hash_descriptor[hash].init(md)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = hash_descriptor[hash].process(md, in, inlen)) != CRYPT_OK) { + goto LBL_ERR; + } + err = hash_descriptor[hash].done(md, out); + *outlen = hash_descriptor[hash].hashsize; +LBL_ERR: +#ifdef LTC_CLEAN_STACK + zeromem(md, sizeof(hash_state)); +#endif + XFREE(md); + + return err; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/hashes/helper/hash_memory.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:23 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +#include <stdarg.h> + +/** + @file hash_memory_multi.c + Hash (multiple buffers) memory helper, Tom St Denis + */ + +/** + Hash multiple (non-adjacent) blocks of memory at once. + @param hash The index of the hash you wish to use + @param out [out] Where to store the digest + @param outlen [in/out] Max size and resulting size of the digest + @param in The data you wish to hash + @param inlen The length of the data to hash (octets) + @param ... tuples of (data,len) pairs to hash, terminated with a (NULL,x) (x=don't care) + @return CRYPT_OK if successful + */ +int hash_memory_multi(int hash, unsigned char *out, unsigned long *outlen, + const unsigned char *in, unsigned long inlen, ...) { + hash_state *md; + int err; + va_list args; + const unsigned char *curptr; + unsigned long curlen; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + if ((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + + if (*outlen < hash_descriptor[hash].hashsize) { + *outlen = hash_descriptor[hash].hashsize; + return CRYPT_BUFFER_OVERFLOW; + } + + md = XMALLOC(sizeof(hash_state)); + if (md == NULL) { + return CRYPT_MEM; + } + + if ((err = hash_descriptor[hash].init(md)) != CRYPT_OK) { + goto LBL_ERR; + } + + va_start(args, inlen); + curptr = in; + curlen = inlen; + for ( ; ; ) { + /* process buf */ + if ((err = hash_descriptor[hash].process(md, curptr, curlen)) != CRYPT_OK) { + goto LBL_ERR; + } + /* step to next */ + curptr = va_arg(args, const unsigned char *); + if (curptr == NULL) { + break; + } + curlen = va_arg(args, unsigned long); + } + err = hash_descriptor[hash].done(md, out); + *outlen = hash_descriptor[hash].hashsize; +LBL_ERR: +#ifdef LTC_CLEAN_STACK + zeromem(md, sizeof(hash_state)); +#endif + XFREE(md); + va_end(args); + return err; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/hashes/helper/hash_memory_multi.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:23 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ltc_ecc_is_valid_idx.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** Returns whether an ECC idx is valid or not + @param n The idx number to check + @return 1 if valid, 0 if not + */ +int ltc_ecc_is_valid_idx(int n) { + int x; + + for (x = 0; ltc_ecc_sets[x].size != 0; x++); + /* -1 is a valid index --- indicating that the domain params were supplied by the user */ + if ((n >= -1) && (n < x)) { + return 1; + } + return 0; +} +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ltc_ecc_is_valid_idx.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ltc_ecc_map.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** + Map a projective jacbobian point back to affine space + @param P [in/out] The point to map + @param modulus The modulus of the field the ECC curve is in + @param mp The "b" value from montgomery_setup() + @return CRYPT_OK on success + */ +int ltc_ecc_map(ecc_point *P, void *modulus, void *mp) { + void *t1, *t2; + int err; + + LTC_ARGCHK(P != NULL); + LTC_ARGCHK(modulus != NULL); + LTC_ARGCHK(mp != NULL); + + if ((err = mp_init_multi(&t1, &t2, NULL)) != CRYPT_OK) { + return CRYPT_MEM; + } + + /* first map z back to normal */ + if ((err = mp_montgomery_reduce(P->z, modulus, mp)) != CRYPT_OK) { + goto done; + } + + /* get 1/z */ + if ((err = mp_invmod(P->z, modulus, t1)) != CRYPT_OK) { + goto done; + } + + /* get 1/z^2 and 1/z^3 */ + if ((err = mp_sqr(t1, t2)) != CRYPT_OK) { + goto done; + } + if ((err = mp_mod(t2, modulus, t2)) != CRYPT_OK) { + goto done; + } + if ((err = mp_mul(t1, t2, t1)) != CRYPT_OK) { + goto done; + } + if ((err = mp_mod(t1, modulus, t1)) != CRYPT_OK) { + goto done; + } + + /* multiply against x/y */ + if ((err = mp_mul(P->x, t2, P->x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(P->x, modulus, mp)) != CRYPT_OK) { + goto done; + } + if ((err = mp_mul(P->y, t1, P->y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(P->y, modulus, mp)) != CRYPT_OK) { + goto done; + } + if ((err = mp_set(P->z, 1)) != CRYPT_OK) { + goto done; + } + + err = CRYPT_OK; +done: + mp_clear_multi(t1, t2, NULL); + return err; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ltc_ecc_map.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ltc_ecc_mul2add.c + ECC Crypto, Shamir's Trick, Tom St Denis + */ + +#ifdef LTC_MECC + + #ifdef LTC_ECC_SHAMIR + +/** Computes kA*A + kB*B = C using Shamir's Trick + @param A First point to multiply + @param kA What to multiple A by + @param B Second point to multiply + @param kB What to multiple B by + @param C [out] Destination point (can overlap with A or B + @param modulus Modulus for curve + @return CRYPT_OK on success + */ +int ltc_ecc_mul2add(ecc_point *A, void *kA, + ecc_point *B, void *kB, + ecc_point *C, + void *modulus) { + ecc_point *precomp[16]; + unsigned bitbufA, bitbufB, lenA, lenB, len, x, y, nA, nB, nibble; + unsigned char *tA, *tB; + int err, first; + void *mp, *mu; + + /* argchks */ + LTC_ARGCHK(A != NULL); + LTC_ARGCHK(B != NULL); + LTC_ARGCHK(C != NULL); + LTC_ARGCHK(kA != NULL); + LTC_ARGCHK(kB != NULL); + LTC_ARGCHK(modulus != NULL); + + /* allocate memory */ + tA = XCALLOC(1, ECC_BUF_SIZE); + if (tA == NULL) { + return CRYPT_MEM; + } + tB = XCALLOC(1, ECC_BUF_SIZE); + if (tB == NULL) { + XFREE(tA); + return CRYPT_MEM; + } + + /* get sizes */ + lenA = mp_unsigned_bin_size(kA); + lenB = mp_unsigned_bin_size(kB); + len = MAX(lenA, lenB); + + /* sanity check */ + if ((lenA > ECC_BUF_SIZE) || (lenB > ECC_BUF_SIZE)) { + err = CRYPT_INVALID_ARG; + goto ERR_T; + } + + /* extract and justify kA */ + mp_to_unsigned_bin(kA, (len - lenA) + tA); + + /* extract and justify kB */ + mp_to_unsigned_bin(kB, (len - lenB) + tB); + + /* allocate the table */ + for (x = 0; x < 16; x++) { + precomp[x] = ltc_ecc_new_point(); + if (precomp[x] == NULL) { + for (y = 0; y < x; ++y) { + ltc_ecc_del_point(precomp[y]); + } + err = CRYPT_MEM; + goto ERR_T; + } + } + + /* init montgomery reduction */ + if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { + goto ERR_P; + } + if ((err = mp_init(&mu)) != CRYPT_OK) { + goto ERR_MP; + } + if ((err = mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { + goto ERR_MU; + } + + /* copy ones ... */ + if ((err = mp_mulmod(A->x, mu, modulus, precomp[1]->x)) != CRYPT_OK) { + goto ERR_MU; + } + if ((err = mp_mulmod(A->y, mu, modulus, precomp[1]->y)) != CRYPT_OK) { + goto ERR_MU; + } + if ((err = mp_mulmod(A->z, mu, modulus, precomp[1]->z)) != CRYPT_OK) { + goto ERR_MU; + } + + if ((err = mp_mulmod(B->x, mu, modulus, precomp[1 << 2]->x)) != CRYPT_OK) { + goto ERR_MU; + } + if ((err = mp_mulmod(B->y, mu, modulus, precomp[1 << 2]->y)) != CRYPT_OK) { + goto ERR_MU; + } + if ((err = mp_mulmod(B->z, mu, modulus, precomp[1 << 2]->z)) != CRYPT_OK) { + goto ERR_MU; + } + + /* precomp [i,0](A + B) table */ + if ((err = ltc_mp.ecc_ptdbl(precomp[1], precomp[2], modulus, mp)) != CRYPT_OK) { + goto ERR_MU; + } + if ((err = ltc_mp.ecc_ptadd(precomp[1], precomp[2], precomp[3], modulus, mp)) != CRYPT_OK) { + goto ERR_MU; + } + + /* precomp [0,i](A + B) table */ + if ((err = ltc_mp.ecc_ptdbl(precomp[1 << 2], precomp[2 << 2], modulus, mp)) != CRYPT_OK) { + goto ERR_MU; + } + if ((err = ltc_mp.ecc_ptadd(precomp[1 << 2], precomp[2 << 2], precomp[3 << 2], modulus, mp)) != CRYPT_OK) { + goto ERR_MU; + } + + /* precomp [i,j](A + B) table (i != 0, j != 0) */ + for (x = 1; x < 4; x++) { + for (y = 1; y < 4; y++) { + if ((err = ltc_mp.ecc_ptadd(precomp[x], precomp[(y << 2)], precomp[x + (y << 2)], modulus, mp)) != CRYPT_OK) { + goto ERR_MU; + } + } + } + + nibble = 3; + first = 1; + bitbufA = tA[0]; + bitbufB = tB[0]; + + /* for every byte of the multiplicands */ + for (x = -1; ; ) { + /* grab a nibble */ + if (++nibble == 4) { + ++x; + if (x == len) break; + bitbufA = tA[x]; + bitbufB = tB[x]; + nibble = 0; + } + + /* extract two bits from both, shift/update */ + nA = (bitbufA >> 6) & 0x03; + nB = (bitbufB >> 6) & 0x03; + bitbufA = (bitbufA << 2) & 0xFF; + bitbufB = (bitbufB << 2) & 0xFF; + + /* if both zero, if first, continue */ + if ((nA == 0) && (nB == 0) && (first == 1)) { + continue; + } + + /* double twice, only if this isn't the first */ + if (first == 0) { + /* double twice */ + if ((err = ltc_mp.ecc_ptdbl(C, C, modulus, mp)) != CRYPT_OK) { + goto ERR_MU; + } + if ((err = ltc_mp.ecc_ptdbl(C, C, modulus, mp)) != CRYPT_OK) { + goto ERR_MU; + } + } + + /* if not both zero */ + if ((nA != 0) || (nB != 0)) { + if (first == 1) { + /* if first, copy from table */ + first = 0; + if ((err = mp_copy(precomp[nA + (nB << 2)]->x, C->x)) != CRYPT_OK) { + goto ERR_MU; + } + if ((err = mp_copy(precomp[nA + (nB << 2)]->y, C->y)) != CRYPT_OK) { + goto ERR_MU; + } + if ((err = mp_copy(precomp[nA + (nB << 2)]->z, C->z)) != CRYPT_OK) { + goto ERR_MU; + } + } else { + /* if not first, add from table */ + if ((err = ltc_mp.ecc_ptadd(C, precomp[nA + (nB << 2)], C, modulus, mp)) != CRYPT_OK) { + goto ERR_MU; + } + } + } + } + + /* reduce to affine */ + err = ltc_ecc_map(C, modulus, mp); + + /* clean up */ +ERR_MU: + mp_clear(mu); +ERR_MP: + mp_montgomery_free(mp); +ERR_P: + for (x = 0; x < 16; x++) { + ltc_ecc_del_point(precomp[x]); + } +ERR_T: + #ifdef LTC_CLEAN_STACK + zeromem(tA, ECC_BUF_SIZE); + zeromem(tB, ECC_BUF_SIZE); + #endif + XFREE(tA); + XFREE(tB); + + return err; +} + #endif +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ltc_ecc_mul2add.c,v $ */ +/* $Revision: 1.8 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ltc_ecc_mulmod.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + #ifndef LTC_ECC_TIMING_RESISTANT + +/* size of sliding window, don't change this! */ + #define WINSIZE 4 + +/** + Perform a point multiplication + @param k The scalar to multiply by + @param G The base point + @param R [out] Destination for kG + @param modulus The modulus of the field the ECC curve is in + @param map Boolean whether to map back to affine or not (1==map, 0 == leave in projective) + @return CRYPT_OK on success + */ +int ltc_ecc_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map) { + ecc_point *tG, *M[8]; + int i, j, err; + void *mu, *mp; + unsigned long buf; + int first, bitbuf, bitcpy, bitcnt, mode, digidx; + + LTC_ARGCHK(k != NULL); + LTC_ARGCHK(G != NULL); + LTC_ARGCHK(R != NULL); + LTC_ARGCHK(modulus != NULL); + + /* init montgomery reduction */ + if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { + return err; + } + if ((err = mp_init(&mu)) != CRYPT_OK) { + mp_montgomery_free(mp); + return err; + } + if ((err = mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { + mp_montgomery_free(mp); + mp_clear(mu); + return err; + } + + /* alloc ram for window temps */ + for (i = 0; i < 8; i++) { + M[i] = ltc_ecc_new_point(); + if (M[i] == NULL) { + for (j = 0; j < i; j++) { + ltc_ecc_del_point(M[j]); + } + mp_montgomery_free(mp); + mp_clear(mu); + return CRYPT_MEM; + } + } + + /* make a copy of G incase R==G */ + tG = ltc_ecc_new_point(); + if (tG == NULL) { + err = CRYPT_MEM; + goto done; + } + + /* tG = G and convert to montgomery */ + if (mp_cmp_d(mu, 1) == LTC_MP_EQ) { + if ((err = mp_copy(G->x, tG->x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(G->y, tG->y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(G->z, tG->z)) != CRYPT_OK) { + goto done; + } + } else { + if ((err = mp_mulmod(G->x, mu, modulus, tG->x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_mulmod(G->y, mu, modulus, tG->y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_mulmod(G->z, mu, modulus, tG->z)) != CRYPT_OK) { + goto done; + } + } + mp_clear(mu); + mu = NULL; + + /* calc the M tab, which holds kG for k==8..15 */ + /* M[0] == 8G */ + if ((err = ltc_mp.ecc_ptdbl(tG, M[0], modulus, mp)) != CRYPT_OK) { + goto done; + } + if ((err = ltc_mp.ecc_ptdbl(M[0], M[0], modulus, mp)) != CRYPT_OK) { + goto done; + } + if ((err = ltc_mp.ecc_ptdbl(M[0], M[0], modulus, mp)) != CRYPT_OK) { + goto done; + } + + /* now find (8+k)G for k=1..7 */ + for (j = 9; j < 16; j++) { + if ((err = ltc_mp.ecc_ptadd(M[j - 9], tG, M[j - 8], modulus, mp)) != CRYPT_OK) { + goto done; + } + } + + /* setup sliding window */ + mode = 0; + bitcnt = 1; + buf = 0; + digidx = mp_get_digit_count(k) - 1; + bitcpy = bitbuf = 0; + first = 1; + + /* perform ops */ + for ( ; ; ) { + /* grab next digit as required */ + if (--bitcnt == 0) { + if (digidx == -1) { + break; + } + buf = mp_get_digit(k, digidx); + bitcnt = (int)ltc_mp.bits_per_digit; + --digidx; + } + + /* grab the next msb from the ltiplicand */ + i = (buf >> (ltc_mp.bits_per_digit - 1)) & 1; + buf <<= 1; + + /* skip leading zero bits */ + if ((mode == 0) && (i == 0)) { + continue; + } + + /* if the bit is zero and mode == 1 then we double */ + if ((mode == 1) && (i == 0)) { + if ((err = ltc_mp.ecc_ptdbl(R, R, modulus, mp)) != CRYPT_OK) { + goto done; + } + continue; + } + + /* else we add it to the window */ + bitbuf |= (i << (WINSIZE - ++bitcpy)); + mode = 2; + + if (bitcpy == WINSIZE) { + /* if this is the first window we do a simple copy */ + if (first == 1) { + /* R = kG [k = first window] */ + if ((err = mp_copy(M[bitbuf - 8]->x, R->x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(M[bitbuf - 8]->y, R->y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(M[bitbuf - 8]->z, R->z)) != CRYPT_OK) { + goto done; + } + first = 0; + } else { + /* normal window */ + /* ok window is filled so double as required and add */ + /* double first */ + for (j = 0; j < WINSIZE; j++) { + if ((err = ltc_mp.ecc_ptdbl(R, R, modulus, mp)) != CRYPT_OK) { + goto done; + } + } + + /* then add, bitbuf will be 8..15 [8..2^WINSIZE] guaranteed */ + if ((err = ltc_mp.ecc_ptadd(R, M[bitbuf - 8], R, modulus, mp)) != CRYPT_OK) { + goto done; + } + } + /* empty window and reset */ + bitcpy = bitbuf = 0; + mode = 1; + } + } + + /* if bits remain then double/add */ + if ((mode == 2) && (bitcpy > 0)) { + /* double then add */ + for (j = 0; j < bitcpy; j++) { + /* only double if we have had at least one add first */ + if (first == 0) { + if ((err = ltc_mp.ecc_ptdbl(R, R, modulus, mp)) != CRYPT_OK) { + goto done; + } + } + + bitbuf <<= 1; + if ((bitbuf & (1 << WINSIZE)) != 0) { + if (first == 1) { + /* first add, so copy */ + if ((err = mp_copy(tG->x, R->x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(tG->y, R->y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(tG->z, R->z)) != CRYPT_OK) { + goto done; + } + first = 0; + } else { + /* then add */ + if ((err = ltc_mp.ecc_ptadd(R, tG, R, modulus, mp)) != CRYPT_OK) { + goto done; + } + } + } + } + } + + /* map R back from projective space */ + if (map) { + err = ltc_ecc_map(R, modulus, mp); + } else { + err = CRYPT_OK; + } +done: + if (mu != NULL) { + mp_clear(mu); + } + mp_montgomery_free(mp); + ltc_ecc_del_point(tG); + for (i = 0; i < 8; i++) { + ltc_ecc_del_point(M[i]); + } + return err; +} + #endif + + #undef WINSIZE +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod.c,v $ */ +/* $Revision: 1.26 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ltc_ecc_mulmod_timing.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + + #ifdef LTC_ECC_TIMING_RESISTANT + +/** + Perform a point multiplication (timing resistant) + @param k The scalar to multiply by + @param G The base point + @param R [out] Destination for kG + @param modulus The modulus of the field the ECC curve is in + @param map Boolean whether to map back to affine or not (1==map, 0 == leave in projective) + @return CRYPT_OK on success + */ +int ltc_ecc_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map) { + ecc_point *tG, *M[3]; + int i, j, err; + void *mu, *mp; + unsigned long buf; + int first, bitbuf, bitcpy, bitcnt, mode, digidx; + + LTC_ARGCHK(k != NULL); + LTC_ARGCHK(G != NULL); + LTC_ARGCHK(R != NULL); + LTC_ARGCHK(modulus != NULL); + + /* init montgomery reduction */ + if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { + return err; + } + if ((err = mp_init(&mu)) != CRYPT_OK) { + mp_montgomery_free(mp); + return err; + } + if ((err = mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { + mp_clear(mu); + mp_montgomery_free(mp); + return err; + } + + /* alloc ram for window temps */ + for (i = 0; i < 3; i++) { + M[i] = ltc_ecc_new_point(); + if (M[i] == NULL) { + for (j = 0; j < i; j++) { + ltc_ecc_del_point(M[j]); + } + mp_clear(mu); + mp_montgomery_free(mp); + return CRYPT_MEM; + } + } + + /* make a copy of G incase R==G */ + tG = ltc_ecc_new_point(); + if (tG == NULL) { + err = CRYPT_MEM; + goto done; + } + + /* tG = G and convert to montgomery */ + if ((err = mp_mulmod(G->x, mu, modulus, tG->x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_mulmod(G->y, mu, modulus, tG->y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_mulmod(G->z, mu, modulus, tG->z)) != CRYPT_OK) { + goto done; + } + mp_clear(mu); + mu = NULL; + + /* calc the M tab */ + /* M[0] == G */ + if ((err = mp_copy(tG->x, M[0]->x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(tG->y, M[0]->y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(tG->z, M[0]->z)) != CRYPT_OK) { + goto done; + } + /* M[1] == 2G */ + if ((err = ltc_mp.ecc_ptdbl(tG, M[1], modulus, mp)) != CRYPT_OK) { + goto done; + } + + /* setup sliding window */ + mode = 0; + bitcnt = 1; + buf = 0; + digidx = mp_get_digit_count(k) - 1; + bitcpy = bitbuf = 0; + first = 1; + + /* perform ops */ + for ( ; ; ) { + /* grab next digit as required */ + if (--bitcnt == 0) { + if (digidx == -1) { + break; + } + buf = mp_get_digit(k, digidx); + bitcnt = (int)MP_DIGIT_BIT; + --digidx; + } + + /* grab the next msb from the ltiplicand */ + i = (buf >> (MP_DIGIT_BIT - 1)) & 1; + buf <<= 1; + + if ((mode == 0) && (i == 0)) { + /* dummy operations */ + if ((err = ltc_mp.ecc_ptadd(M[0], M[1], M[2], modulus, mp)) != CRYPT_OK) { + goto done; + } + if ((err = ltc_mp.ecc_ptdbl(M[1], M[2], modulus, mp)) != CRYPT_OK) { + goto done; + } + continue; + } + + if ((mode == 0) && (i == 1)) { + mode = 1; + /* dummy operations */ + if ((err = ltc_mp.ecc_ptadd(M[0], M[1], M[2], modulus, mp)) != CRYPT_OK) { + goto done; + } + if ((err = ltc_mp.ecc_ptdbl(M[1], M[2], modulus, mp)) != CRYPT_OK) { + goto done; + } + continue; + } + + if ((err = ltc_mp.ecc_ptadd(M[0], M[1], M[i ^ 1], modulus, mp)) != CRYPT_OK) { + goto done; + } + if ((err = ltc_mp.ecc_ptdbl(M[i], M[i], modulus, mp)) != CRYPT_OK) { + goto done; + } + } + + /* copy result out */ + if ((err = mp_copy(M[0]->x, R->x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(M[0]->y, R->y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(M[0]->z, R->z)) != CRYPT_OK) { + goto done; + } + + /* map R back from projective space */ + if (map) { + err = ltc_ecc_map(R, modulus, mp); + } else { + err = CRYPT_OK; + } +done: + if (mu != NULL) { + mp_clear(mu); + } + mp_montgomery_free(mp); + ltc_ecc_del_point(tG); + for (i = 0; i < 3; i++) { + ltc_ecc_del_point(M[i]); + } + return err; +} + #endif +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod_timing.c,v $ */ +/* $Revision: 1.13 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ltc_ecc_points.c + ECC Crypto, Tom St Denis + */ + +#ifdef LTC_MECC + +/** + Allocate a new ECC point + @return A newly allocated point or NULL on error + */ +ecc_point *ltc_ecc_new_point(void) { + ecc_point *p; + + p = XCALLOC(1, sizeof(*p)); + if (p == NULL) { + return NULL; + } + if (mp_init_multi(&p->x, &p->y, &p->z, NULL) != CRYPT_OK) { + XFREE(p); + return NULL; + } + return p; +} + +/** Free an ECC point from memory + @param p The point to free + */ +void ltc_ecc_del_point(ecc_point *p) { + /* prevents free'ing null arguments */ + if (p != NULL) { + mp_clear_multi(p->x, p->y, p->z, NULL); /* note: p->z may be NULL but that's ok with this function anyways */ + XFREE(p); + } +} +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ltc_ecc_points.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ltc_ecc_projective_add_point.c + ECC Crypto, Tom St Denis + */ + +#if defined(LTC_MECC) && (!defined(LTC_MECC_ACCEL) || defined(LTM_LTC_DESC)) + +/** + Add two ECC points + @param P The point to add + @param Q The point to add + @param R [out] The destination of the double + @param modulus The modulus of the field the ECC curve is in + @param mp The "b" value from montgomery_setup() + @return CRYPT_OK on success + */ +int ltc_ecc_projective_add_point(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *mp) { + void *t1, *t2, *x, *y, *z; + int err; + + LTC_ARGCHK(P != NULL); + LTC_ARGCHK(Q != NULL); + LTC_ARGCHK(R != NULL); + LTC_ARGCHK(modulus != NULL); + LTC_ARGCHK(mp != NULL); + + if ((err = mp_init_multi(&t1, &t2, &x, &y, &z, NULL)) != CRYPT_OK) { + return err; + } + + /* should we dbl instead? */ + if ((err = mp_sub(modulus, Q->y, t1)) != CRYPT_OK) { + goto done; + } + + if ((mp_cmp(P->x, Q->x) == LTC_MP_EQ) && + ((Q->z != NULL) && (mp_cmp(P->z, Q->z) == LTC_MP_EQ)) && + ((mp_cmp(P->y, Q->y) == LTC_MP_EQ) || (mp_cmp(P->y, t1) == LTC_MP_EQ))) { + mp_clear_multi(t1, t2, x, y, z, NULL); + return ltc_ecc_projective_dbl_point(P, R, modulus, mp); + } + + if ((err = mp_copy(P->x, x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(P->y, y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(P->z, z)) != CRYPT_OK) { + goto done; + } + + /* if Z is one then these are no-operations */ + if (Q->z != NULL) { + /* T1 = Z' * Z' */ + if ((err = mp_sqr(Q->z, t1)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* X = X * T1 */ + if ((err = mp_mul(t1, x, x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(x, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* T1 = Z' * T1 */ + if ((err = mp_mul(Q->z, t1, t1)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* Y = Y * T1 */ + if ((err = mp_mul(t1, y, y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(y, modulus, mp)) != CRYPT_OK) { + goto done; + } + } + + /* T1 = Z*Z */ + if ((err = mp_sqr(z, t1)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* T2 = X' * T1 */ + if ((err = mp_mul(Q->x, t1, t2)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* T1 = Z * T1 */ + if ((err = mp_mul(z, t1, t1)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* T1 = Y' * T1 */ + if ((err = mp_mul(Q->y, t1, t1)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { + goto done; + } + + /* Y = Y - T1 */ + if ((err = mp_sub(y, t1, y)) != CRYPT_OK) { + goto done; + } + if (mp_cmp_d(y, 0) == LTC_MP_LT) { + if ((err = mp_add(y, modulus, y)) != CRYPT_OK) { + goto done; + } + } + /* T1 = 2T1 */ + if ((err = mp_add(t1, t1, t1)) != CRYPT_OK) { + goto done; + } + if (mp_cmp(t1, modulus) != LTC_MP_LT) { + if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK) { + goto done; + } + } + /* T1 = Y + T1 */ + if ((err = mp_add(t1, y, t1)) != CRYPT_OK) { + goto done; + } + if (mp_cmp(t1, modulus) != LTC_MP_LT) { + if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK) { + goto done; + } + } + /* X = X - T2 */ + if ((err = mp_sub(x, t2, x)) != CRYPT_OK) { + goto done; + } + if (mp_cmp_d(x, 0) == LTC_MP_LT) { + if ((err = mp_add(x, modulus, x)) != CRYPT_OK) { + goto done; + } + } + /* T2 = 2T2 */ + if ((err = mp_add(t2, t2, t2)) != CRYPT_OK) { + goto done; + } + if (mp_cmp(t2, modulus) != LTC_MP_LT) { + if ((err = mp_sub(t2, modulus, t2)) != CRYPT_OK) { + goto done; + } + } + /* T2 = X + T2 */ + if ((err = mp_add(t2, x, t2)) != CRYPT_OK) { + goto done; + } + if (mp_cmp(t2, modulus) != LTC_MP_LT) { + if ((err = mp_sub(t2, modulus, t2)) != CRYPT_OK) { + goto done; + } + } + + /* if Z' != 1 */ + if (Q->z != NULL) { + /* Z = Z * Z' */ + if ((err = mp_mul(z, Q->z, z)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(z, modulus, mp)) != CRYPT_OK) { + goto done; + } + } + + /* Z = Z * X */ + if ((err = mp_mul(z, x, z)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(z, modulus, mp)) != CRYPT_OK) { + goto done; + } + + /* T1 = T1 * X */ + if ((err = mp_mul(t1, x, t1)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* X = X * X */ + if ((err = mp_sqr(x, x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(x, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* T2 = T2 * x */ + if ((err = mp_mul(t2, x, t2)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* T1 = T1 * X */ + if ((err = mp_mul(t1, x, t1)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { + goto done; + } + + /* X = Y*Y */ + if ((err = mp_sqr(y, x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(x, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* X = X - T2 */ + if ((err = mp_sub(x, t2, x)) != CRYPT_OK) { + goto done; + } + if (mp_cmp_d(x, 0) == LTC_MP_LT) { + if ((err = mp_add(x, modulus, x)) != CRYPT_OK) { + goto done; + } + } + + /* T2 = T2 - X */ + if ((err = mp_sub(t2, x, t2)) != CRYPT_OK) { + goto done; + } + if (mp_cmp_d(t2, 0) == LTC_MP_LT) { + if ((err = mp_add(t2, modulus, t2)) != CRYPT_OK) { + goto done; + } + } + /* T2 = T2 - X */ + if ((err = mp_sub(t2, x, t2)) != CRYPT_OK) { + goto done; + } + if (mp_cmp_d(t2, 0) == LTC_MP_LT) { + if ((err = mp_add(t2, modulus, t2)) != CRYPT_OK) { + goto done; + } + } + /* T2 = T2 * Y */ + if ((err = mp_mul(t2, y, t2)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* Y = T2 - T1 */ + if ((err = mp_sub(t2, t1, y)) != CRYPT_OK) { + goto done; + } + if (mp_cmp_d(y, 0) == LTC_MP_LT) { + if ((err = mp_add(y, modulus, y)) != CRYPT_OK) { + goto done; + } + } + /* Y = Y/2 */ + if (mp_isodd(y)) { + if ((err = mp_add(y, modulus, y)) != CRYPT_OK) { + goto done; + } + } + if ((err = mp_div_2(y, y)) != CRYPT_OK) { + goto done; + } + + if ((err = mp_copy(x, R->x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(y, R->y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(z, R->z)) != CRYPT_OK) { + goto done; + } + + err = CRYPT_OK; +done: + mp_clear_multi(t1, t2, x, y, z, NULL); + return err; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ltc_ecc_projective_add_point.c,v $ */ +/* $Revision: 1.16 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b + * + * All curves taken from NIST recommendation paper of July 1999 + * Available at http://csrc.nist.gov/cryptval/dss.htm + */ + + +/** + @file ltc_ecc_projective_dbl_point.c + ECC Crypto, Tom St Denis + */ + +#if defined(LTC_MECC) && (!defined(LTC_MECC_ACCEL) || defined(LTM_LTC_DESC)) + +/** + Double an ECC point + @param P The point to double + @param R [out] The destination of the double + @param modulus The modulus of the field the ECC curve is in + @param mp The "b" value from montgomery_setup() + @return CRYPT_OK on success + */ +int ltc_ecc_projective_dbl_point(ecc_point *P, ecc_point *R, void *modulus, void *mp) { + void *t1, *t2; + int err; + + LTC_ARGCHK(P != NULL); + LTC_ARGCHK(R != NULL); + LTC_ARGCHK(modulus != NULL); + LTC_ARGCHK(mp != NULL); + + if ((err = mp_init_multi(&t1, &t2, NULL)) != CRYPT_OK) { + return err; + } + + if (P != R) { + if ((err = mp_copy(P->x, R->x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(P->y, R->y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_copy(P->z, R->z)) != CRYPT_OK) { + goto done; + } + } + + /* t1 = Z * Z */ + if ((err = mp_sqr(R->z, t1)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* Z = Y * Z */ + if ((err = mp_mul(R->z, R->y, R->z)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(R->z, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* Z = 2Z */ + if ((err = mp_add(R->z, R->z, R->z)) != CRYPT_OK) { + goto done; + } + if (mp_cmp(R->z, modulus) != LTC_MP_LT) { + if ((err = mp_sub(R->z, modulus, R->z)) != CRYPT_OK) { + goto done; + } + } + + /* T2 = X - T1 */ + if ((err = mp_sub(R->x, t1, t2)) != CRYPT_OK) { + goto done; + } + if (mp_cmp_d(t2, 0) == LTC_MP_LT) { + if ((err = mp_add(t2, modulus, t2)) != CRYPT_OK) { + goto done; + } + } + /* T1 = X + T1 */ + if ((err = mp_add(t1, R->x, t1)) != CRYPT_OK) { + goto done; + } + if (mp_cmp(t1, modulus) != LTC_MP_LT) { + if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK) { + goto done; + } + } + /* T2 = T1 * T2 */ + if ((err = mp_mul(t1, t2, t2)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* T1 = 2T2 */ + if ((err = mp_add(t2, t2, t1)) != CRYPT_OK) { + goto done; + } + if (mp_cmp(t1, modulus) != LTC_MP_LT) { + if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK) { + goto done; + } + } + /* T1 = T1 + T2 */ + if ((err = mp_add(t1, t2, t1)) != CRYPT_OK) { + goto done; + } + if (mp_cmp(t1, modulus) != LTC_MP_LT) { + if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK) { + goto done; + } + } + + /* Y = 2Y */ + if ((err = mp_add(R->y, R->y, R->y)) != CRYPT_OK) { + goto done; + } + if (mp_cmp(R->y, modulus) != LTC_MP_LT) { + if ((err = mp_sub(R->y, modulus, R->y)) != CRYPT_OK) { + goto done; + } + } + /* Y = Y * Y */ + if ((err = mp_sqr(R->y, R->y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(R->y, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* T2 = Y * Y */ + if ((err = mp_sqr(R->y, t2)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* T2 = T2/2 */ + if (mp_isodd(t2)) { + if ((err = mp_add(t2, modulus, t2)) != CRYPT_OK) { + goto done; + } + } + if ((err = mp_div_2(t2, t2)) != CRYPT_OK) { + goto done; + } + /* Y = Y * X */ + if ((err = mp_mul(R->y, R->x, R->y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(R->y, modulus, mp)) != CRYPT_OK) { + goto done; + } + + /* X = T1 * T1 */ + if ((err = mp_sqr(t1, R->x)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(R->x, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* X = X - Y */ + if ((err = mp_sub(R->x, R->y, R->x)) != CRYPT_OK) { + goto done; + } + if (mp_cmp_d(R->x, 0) == LTC_MP_LT) { + if ((err = mp_add(R->x, modulus, R->x)) != CRYPT_OK) { + goto done; + } + } + /* X = X - Y */ + if ((err = mp_sub(R->x, R->y, R->x)) != CRYPT_OK) { + goto done; + } + if (mp_cmp_d(R->x, 0) == LTC_MP_LT) { + if ((err = mp_add(R->x, modulus, R->x)) != CRYPT_OK) { + goto done; + } + } + + /* Y = Y - X */ + if ((err = mp_sub(R->y, R->x, R->y)) != CRYPT_OK) { + goto done; + } + if (mp_cmp_d(R->y, 0) == LTC_MP_LT) { + if ((err = mp_add(R->y, modulus, R->y)) != CRYPT_OK) { + goto done; + } + } + /* Y = Y * T1 */ + if ((err = mp_mul(R->y, t1, R->y)) != CRYPT_OK) { + goto done; + } + if ((err = mp_montgomery_reduce(R->y, modulus, mp)) != CRYPT_OK) { + goto done; + } + /* Y = Y - T2 */ + if ((err = mp_sub(R->y, t2, R->y)) != CRYPT_OK) { + goto done; + } + if (mp_cmp_d(R->y, 0) == LTC_MP_LT) { + if ((err = mp_add(R->y, modulus, R->y)) != CRYPT_OK) { + goto done; + } + } + + err = CRYPT_OK; +done: + mp_clear_multi(t1, t2, NULL); + return err; +} +#endif +/* $Source: /cvs/libtom/libtomcrypt/src/pk/ecc/ltc_ecc_projective_dbl_point.c,v $ */ +/* $Revision: 1.11 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +#define DESC_DEF_ONLY + +#ifdef LTM_DESC + +#undef mp_init +#undef mp_init_multi +#undef mp_clear +#undef mp_clear_multi +#undef mp_init_copy +#undef mp_neg +#undef mp_copy +#undef mp_set +#undef mp_set_int +#undef mp_get_int +#undef mp_get_digit +#undef mp_get_digit_count +#undef mp_cmp +#undef mp_cmp_d +#undef mp_count_bits +#undef mp_cnt_lsb +#undef mp_2expt +#undef mp_read_radix +#undef mp_toradix +#undef mp_unsigned_bin_size +#undef mp_to_unsigned_bin +#undef mp_read_unsigned_bin +#undef mp_add +#undef mp_add_d +#undef mp_sub +#undef mp_sub_d +#undef mp_mul +#undef mp_mul_d +#undef mp_sqr +#undef mp_div +#undef mp_div_2 +#undef mp_mod +#undef mp_mod_d +#undef mp_gcd +#undef mp_lcm +#undef mp_mulmod +#undef mp_sqrmod +#undef mp_invmod +#undef mp_montgomery_setup +#undef mp_montgomery_normalization +#undef mp_montgomery_reduce +#undef mp_montgomery_free +#undef mp_exptmod +#undef mp_prime_is_prime +#undef mp_iszero +#undef mp_isodd +#undef mp_exch +#undef mp_tohex + +static const struct { + int mpi_code, ltc_code; +} mpi_to_ltc_codes[] = { + { MP_OKAY, CRYPT_OK }, + { MP_MEM, CRYPT_MEM }, + { MP_VAL, CRYPT_INVALID_ARG }, +}; + +/** + Convert a MPI error to a LTC error (Possibly the most powerful function ever! Oh wait... no) + @param err The error to convert + @return The equivalent LTC error code or CRYPT_ERROR if none found + */ +static int mpi_to_ltc_error(int err) { + int x; + + for (x = 0; x < (int)(sizeof(mpi_to_ltc_codes) / sizeof(mpi_to_ltc_codes[0])); x++) { + if (err == mpi_to_ltc_codes[x].mpi_code) { + return mpi_to_ltc_codes[x].ltc_code; + } + } + return CRYPT_ERROR; +} + +static int init(void **a) { + int err; + + LTC_ARGCHK(a != NULL); + + *a = XCALLOC(1, sizeof(mp_int)); + if (*a == NULL) { + return CRYPT_MEM; + } + if ((err = mpi_to_ltc_error(mp_init(*a))) != CRYPT_OK) { + XFREE(*a); + } + return err; +} + +static void deinit(void *a) { + LTC_ARGCHKVD(a != NULL); + mp_clear(a); + XFREE(a); +} + +static int neg(void *a, void *b) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + return mpi_to_ltc_error(mp_neg(a, b)); +} + +static int copy(void *a, void *b) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + return mpi_to_ltc_error(mp_copy(a, b)); +} + +static int init_copy(void **a, void *b) { + if (init(a) != CRYPT_OK) { + return CRYPT_MEM; + } + return copy(b, *a); +} + +/* ---- trivial ---- */ +static int set_int(void *a, unsigned long b) { + LTC_ARGCHK(a != NULL); + return mpi_to_ltc_error(mp_set_int(a, b)); +} + +static unsigned long get_int(void *a) { + LTC_ARGCHK(a != NULL); + return mp_get_int(a); +} + +static unsigned long get_digit(void *a, int n) { + mp_int *A; + + LTC_ARGCHK(a != NULL); + A = a; + return (n >= A->used || n < 0) ? 0 : A->dp[n]; +} + +static int get_digit_count(void *a) { + mp_int *A; + + LTC_ARGCHK(a != NULL); + A = a; + return A->used; +} + +static int compare(void *a, void *b) { + int ret; + + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + ret = mp_cmp(a, b); + switch (ret) { + case MP_LT: + return LTC_MP_LT; + + case MP_EQ: + return LTC_MP_EQ; + + case MP_GT: + return LTC_MP_GT; + } + return 0; +} + +static int compare_d(void *a, unsigned long b) { + int ret; + + LTC_ARGCHK(a != NULL); + ret = mp_cmp_d(a, b); + switch (ret) { + case MP_LT: + return LTC_MP_LT; + + case MP_EQ: + return LTC_MP_EQ; + + case MP_GT: + return LTC_MP_GT; + } + return 0; +} + +static int count_bits(void *a) { + LTC_ARGCHK(a != NULL); + return mp_count_bits(a); +} + +static int count_lsb_bits(void *a) { + LTC_ARGCHK(a != NULL); + return mp_cnt_lsb(a); +} + +static int twoexpt(void *a, int n) { + LTC_ARGCHK(a != NULL); + return mpi_to_ltc_error(mp_2expt(a, n)); +} + +/* ---- conversions ---- */ + +/* read ascii string */ +static int read_radix(void *a, const char *b, int radix) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + return mpi_to_ltc_error(mp_read_radix(a, b, radix)); +} + +/* write one */ +static int write_radix(void *a, char *b, int radix) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + return mpi_to_ltc_error(mp_toradix(a, b, radix)); +} + +/* get size as unsigned char string */ +static unsigned long unsigned_size(void *a) { + LTC_ARGCHK(a != NULL); + return mp_unsigned_bin_size(a); +} + +/* store */ +static int unsigned_write(void *a, unsigned char *b) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + return mpi_to_ltc_error(mp_to_unsigned_bin(a, b)); +} + +/* read */ +static int unsigned_read(void *a, unsigned char *b, unsigned long len) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + return mpi_to_ltc_error(mp_read_unsigned_bin(a, b, len)); +} + +/* add */ +static int add(void *a, void *b, void *c) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + LTC_ARGCHK(c != NULL); + return mpi_to_ltc_error(mp_add(a, b, c)); +} + +static int addi(void *a, unsigned long b, void *c) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(c != NULL); + return mpi_to_ltc_error(mp_add_d(a, b, c)); +} + +/* sub */ +static int sub(void *a, void *b, void *c) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + LTC_ARGCHK(c != NULL); + return mpi_to_ltc_error(mp_sub(a, b, c)); +} + +static int subi(void *a, unsigned long b, void *c) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(c != NULL); + return mpi_to_ltc_error(mp_sub_d(a, b, c)); +} + +/* mul */ +static int mul(void *a, void *b, void *c) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + LTC_ARGCHK(c != NULL); + return mpi_to_ltc_error(mp_mul(a, b, c)); +} + +static int muli(void *a, unsigned long b, void *c) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(c != NULL); + return mpi_to_ltc_error(mp_mul_d(a, b, c)); +} + +/* sqr */ +static int sqr(void *a, void *b) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + return mpi_to_ltc_error(mp_sqr(a, b)); +} + +/* div */ +static int divide(void *a, void *b, void *c, void *d) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + return mpi_to_ltc_error(mp_div(a, b, c, d)); +} + +static int div_2(void *a, void *b) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + return mpi_to_ltc_error(mp_div_2(a, b)); +} + +/* modi */ +static int modi(void *a, unsigned long b, unsigned long *c) { + mp_digit tmp; + int err; + + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(c != NULL); + + if ((err = mpi_to_ltc_error(mp_mod_d(a, b, &tmp))) != CRYPT_OK) { + return err; + } + *c = tmp; + return CRYPT_OK; +} + +/* gcd */ +static int gcd(void *a, void *b, void *c) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + LTC_ARGCHK(c != NULL); + return mpi_to_ltc_error(mp_gcd(a, b, c)); +} + +/* lcm */ +static int lcm(void *a, void *b, void *c) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + LTC_ARGCHK(c != NULL); + return mpi_to_ltc_error(mp_lcm(a, b, c)); +} + +static int mulmod(void *a, void *b, void *c, void *d) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + LTC_ARGCHK(c != NULL); + LTC_ARGCHK(d != NULL); + return mpi_to_ltc_error(mp_mulmod(a, b, c, d)); +} + +static int sqrmod(void *a, void *b, void *c) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + LTC_ARGCHK(c != NULL); + return mpi_to_ltc_error(mp_sqrmod(a, b, c)); +} + +/* invmod */ +static int invmod(void *a, void *b, void *c) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + LTC_ARGCHK(c != NULL); + return mpi_to_ltc_error(mp_invmod(a, b, c)); +} + +/* setup */ +static int montgomery_setup(void *a, void **b) { + int err; + + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + *b = XCALLOC(1, sizeof(mp_digit)); + if (*b == NULL) { + return CRYPT_MEM; + } + if ((err = mpi_to_ltc_error(mp_montgomery_setup(a, (mp_digit *)*b))) != CRYPT_OK) { + XFREE(*b); + } + return err; +} + +/* get normalization value */ +static int montgomery_normalization(void *a, void *b) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + return mpi_to_ltc_error(mp_montgomery_calc_normalization(a, b)); +} + +/* reduce */ +static int montgomery_reduce(void *a, void *b, void *c) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + LTC_ARGCHK(c != NULL); + return mpi_to_ltc_error(mp_montgomery_reduce(a, b, *((mp_digit *)c))); +} + +/* clean up */ +static void montgomery_deinit(void *a) { + XFREE(a); +} + +static int exptmod(void *a, void *b, void *c, void *d) { + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + LTC_ARGCHK(c != NULL); + LTC_ARGCHK(d != NULL); + return mpi_to_ltc_error(mp_exptmod(a, b, c, d)); +} + +static int isprime(void *a, int *b) { + int err; + + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + err = mpi_to_ltc_error(mp_prime_is_prime(a, 8, b)); + *b = (*b == MP_YES) ? LTC_MP_YES : LTC_MP_NO; + return err; +} + +const ltc_math_descriptor ltm_desc = { + "LibTomMath", + (int)DIGIT_BIT, + + &init, + &init_copy, + &deinit, + + &neg, + &copy, + + &set_int, + &get_int, + &get_digit, + &get_digit_count, + &compare, + &compare_d, + &count_bits, + &count_lsb_bits, + &twoexpt, + + &read_radix, + &write_radix, + &unsigned_size, + &unsigned_write, + &unsigned_read, + + &add, + &addi, + &sub, + &subi, + &mul, + &muli, + &sqr, + &divide, + &div_2, + &modi, + &gcd, + &lcm, + + &mulmod, + &sqrmod, + &invmod, + + &montgomery_setup, + &montgomery_normalization, + &montgomery_reduce, + &montgomery_deinit, + + &exptmod, + &isprime, + + #ifdef LTC_MECC + #ifdef LTC_MECC_FP + &ltc_ecc_fp_mulmod, + #else + &ltc_ecc_mulmod, + #endif + &ltc_ecc_projective_add_point, + &ltc_ecc_projective_dbl_point, + &ltc_ecc_map, + #ifdef LTC_ECC_SHAMIR + #ifdef LTC_MECC_FP + &ltc_ecc_fp_mul2add, + #else + &ltc_ecc_mul2add, + #endif /* LTC_MECC_FP */ + #else + NULL, + #endif /* LTC_ECC_SHAMIR */ + #else + NULL, NULL,NULL, NULL, NULL, + #endif /* LTC_MECC */ + + #ifdef LTC_MRSA + &rsa_make_key, + &rsa_exptmod, + #else + NULL, NULL + #endif +}; + + #define mp_init(a) ltc_mp.init(a) + #define mp_init_multi ltc_init_multi + #define mp_clear(a) ltc_mp.deinit(a) + #define mp_clear_multi ltc_deinit_multi + #define mp_init_copy(a, b) ltc_mp.init_copy(a, b) + + #define mp_neg(a, b) ltc_mp.neg(a, b) + #define mp_copy(a, b) ltc_mp.copy(a, b) + + #define mp_set(a, b) ltc_mp.set_int(a, b) + #define mp_set_int(a, b) ltc_mp.set_int(a, b) + #define mp_get_int(a) ltc_mp.get_int(a) + #define mp_get_digit(a, n) ltc_mp.get_digit(a, n) + #define mp_get_digit_count(a) ltc_mp.get_digit_count(a) + #define mp_cmp(a, b) ltc_mp.compare(a, b) + #define mp_cmp_d(a, b) ltc_mp.compare_d(a, b) + #define mp_count_bits(a) ltc_mp.count_bits(a) + #define mp_cnt_lsb(a) ltc_mp.count_lsb_bits(a) + #define mp_2expt(a, b) ltc_mp.twoexpt(a, b) + + #define mp_read_radix(a, b, c) ltc_mp.read_radix(a, b, c) + #define mp_toradix(a, b, c) ltc_mp.write_radix(a, b, c) + #define mp_unsigned_bin_size(a) ltc_mp.unsigned_size(a) + #define mp_to_unsigned_bin(a, b) ltc_mp.unsigned_write(a, b) + #define mp_read_unsigned_bin(a, b, c) ltc_mp.unsigned_read(a, b, c) + + #define mp_add(a, b, c) ltc_mp.add(a, b, c) + #define mp_add_d(a, b, c) ltc_mp.addi(a, b, c) + #define mp_sub(a, b, c) ltc_mp.sub(a, b, c) + #define mp_sub_d(a, b, c) ltc_mp.subi(a, b, c) + #define mp_mul(a, b, c) ltc_mp.mul(a, b, c) + #define mp_mul_d(a, b, c) ltc_mp.muli(a, b, c) + #define mp_sqr(a, b) ltc_mp.sqr(a, b) + #define mp_div(a, b, c, d) ltc_mp.mpdiv(a, b, c, d) + #define mp_div_2(a, b) ltc_mp.div_2(a, b) + #define mp_mod(a, b, c) ltc_mp.mpdiv(a, b, NULL, c) + #define mp_mod_d(a, b, c) ltc_mp.modi(a, b, c) + #define mp_gcd(a, b, c) ltc_mp.gcd(a, b, c) + #define mp_lcm(a, b, c) ltc_mp.lcm(a, b, c) + + #define mp_mulmod(a, b, c, d) ltc_mp.mulmod(a, b, c, d) + #define mp_sqrmod(a, b, c) ltc_mp.sqrmod(a, b, c) + #define mp_invmod(a, b, c) ltc_mp.invmod(a, b, c) + + #define mp_montgomery_setup(a, b) ltc_mp.montgomery_setup(a, b) + #define mp_montgomery_normalization(a, b) ltc_mp.montgomery_normalization(a, b) + #define mp_montgomery_reduce(a, b, c) ltc_mp.montgomery_reduce(a, b, c) + #define mp_montgomery_free(a) ltc_mp.montgomery_deinit(a) + + #define mp_exptmod(a, b, c, d) ltc_mp.exptmod(a, b, c, d) + #define mp_prime_is_prime(a, b, c) ltc_mp.isprime(a, c) + + #define mp_iszero(a) (mp_cmp_d(a, 0) == LTC_MP_EQ ? LTC_MP_YES : LTC_MP_NO) + #define mp_isodd(a) (mp_get_digit_count(a) > 0 ? (mp_get_digit(a, 0) & 1 ? LTC_MP_YES : LTC_MP_NO) : LTC_MP_NO) + #define mp_exch(a, b) do { void *ABC__tmp = a; a = b; b = ABC__tmp; } while (0); + + #define mp_tohex(a, b) mp_toradix(a, b, 16) + +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/math/ltm_desc.c,v $ */ +/* $Revision: 1.31 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +#ifdef MPI +#include <stdarg.h> + +int ltc_init_multi(void **a, ...) { + void **cur = a; + int np = 0; + va_list args; + + va_start(args, a); + while (cur != NULL) { + if (mp_init(cur) != CRYPT_OK) { + /* failed */ + va_list clean_list; + + va_start(clean_list, a); + cur = a; + while (np--) { + mp_clear(*cur); + cur = va_arg(clean_list, void **); + } + va_end(clean_list); + return CRYPT_MEM; + } + ++np; + cur = va_arg(args, void **); + } + va_end(args); + return CRYPT_OK; +} + +void ltc_deinit_multi(void *a, ...) { + void *cur = a; + va_list args; + + va_start(args, a); + while (cur != NULL) { + mp_clear(cur); + cur = va_arg(args, void *); + } + va_end(args); +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/math/multi.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:23 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file pkcs_1_i2osp.c + Integer to Octet I2OSP, Tom St Denis + */ + +#ifdef LTC_PKCS_1 + +/* always stores the same # of bytes, pads with leading zero bytes + as required + */ + +/** + LTC_PKCS #1 Integer to binary + @param n The integer to store + @param modulus_len The length of the RSA modulus + @param out [out] The destination for the integer + @return CRYPT_OK if successful + */ +int pkcs_1_i2osp(void *n, unsigned long modulus_len, unsigned char *out) { + unsigned long size; + + size = mp_unsigned_bin_size(n); + + if (size > modulus_len) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* store it */ + zeromem(out, modulus_len); + return mp_to_unsigned_bin(n, out + (modulus_len - size)); +} +#endif /* LTC_PKCS_1 */ + + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/pkcs1/pkcs_1_i2osp.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file pkcs_1_mgf1.c + The Mask Generation Function (MGF1) for LTC_PKCS #1, Tom St Denis + */ + +#ifdef LTC_PKCS_1 + +/** + Perform LTC_PKCS #1 MGF1 (internal) + @param seed The seed for MGF1 + @param seedlen The length of the seed + @param hash_idx The index of the hash desired + @param mask [out] The destination + @param masklen The length of the mask desired + @return CRYPT_OK if successful + */ +int pkcs_1_mgf1(int hash_idx, + const unsigned char *seed, unsigned long seedlen, + unsigned char *mask, unsigned long masklen) { + unsigned long hLen, x; + ulong32 counter; + int err; + hash_state *md; + unsigned char *buf; + + LTC_ARGCHK(seed != NULL); + LTC_ARGCHK(mask != NULL); + + /* ensure valid hash */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + /* get hash output size */ + hLen = hash_descriptor[hash_idx].hashsize; + + /* allocate memory */ + md = XMALLOC(sizeof(hash_state)); + buf = XMALLOC(hLen); + if ((md == NULL) || (buf == NULL)) { + if (md != NULL) { + XFREE(md); + } + if (buf != NULL) { + XFREE(buf); + } + return CRYPT_MEM; + } + + /* start counter */ + counter = 0; + + while (masklen > 0) { + /* handle counter */ + STORE32H(counter, buf); + ++counter; + + /* get hash of seed || counter */ + if ((err = hash_descriptor[hash_idx].init(md)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = hash_descriptor[hash_idx].process(md, seed, seedlen)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = hash_descriptor[hash_idx].process(md, buf, 4)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = hash_descriptor[hash_idx].done(md, buf)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* store it */ + for (x = 0; x < hLen && masklen > 0; x++, masklen--) { + *mask++ = buf[x]; + } + } + + err = CRYPT_OK; +LBL_ERR: + #ifdef LTC_CLEAN_STACK + zeromem(buf, hLen); + zeromem(md, sizeof(hash_state)); + #endif + + XFREE(buf); + XFREE(md); + + return err; +} +#endif /* LTC_PKCS_1 */ + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/pkcs1/pkcs_1_mgf1.c,v $ */ +/* $Revision: 1.8 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file pkcs_1_oaep_decode.c + OAEP Padding for LTC_PKCS #1, Tom St Denis + */ + +#ifdef LTC_PKCS_1 + +/** + LTC_PKCS #1 v2.00 OAEP decode + @param msg The encoded data to decode + @param msglen The length of the encoded data (octets) + @param lparam The session or system data (can be NULL) + @param lparamlen The length of the lparam + @param modulus_bitlen The bit length of the RSA modulus + @param hash_idx The index of the hash desired + @param out [out] Destination of decoding + @param outlen [in/out] The max size and resulting size of the decoding + @param res [out] Result of decoding, 1==valid, 0==invalid + @return CRYPT_OK if successful (even if invalid) + */ +int pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, + const unsigned char *lparam, unsigned long lparamlen, + unsigned long modulus_bitlen, int hash_idx, + unsigned char *out, unsigned long *outlen, + int *res) { + unsigned char *DB, *seed, *mask; + unsigned long hLen, x, y, modulus_len; + int err; + + LTC_ARGCHK(msg != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(res != NULL); + + /* default to invalid packet */ + *res = 0; + + /* test valid hash */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + hLen = hash_descriptor[hash_idx].hashsize; + modulus_len = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); + + /* test hash/message size */ + if ((2 * hLen >= (modulus_len - 2)) || (msglen != modulus_len)) { + return CRYPT_PK_INVALID_SIZE; + } + + /* allocate ram for DB/mask/salt of size modulus_len */ + DB = XMALLOC(modulus_len); + mask = XMALLOC(modulus_len); + seed = XMALLOC(hLen); + if ((DB == NULL) || (mask == NULL) || (seed == NULL)) { + if (DB != NULL) { + XFREE(DB); + } + if (mask != NULL) { + XFREE(mask); + } + if (seed != NULL) { + XFREE(seed); + } + return CRYPT_MEM; + } + + /* ok so it's now in the form + + 0x00 || maskedseed || maskedDB + + 1 || hLen || modulus_len - hLen - 1 + + */ + + /* must have leading 0x00 byte */ + if (msg[0] != 0x00) { + err = CRYPT_OK; + goto LBL_ERR; + } + + /* now read the masked seed */ + x = 1; + XMEMCPY(seed, msg + x, hLen); + x += hLen; + + /* now read the masked DB */ + XMEMCPY(DB, msg + x, modulus_len - hLen - 1); + x += modulus_len - hLen - 1; + + /* compute MGF1 of maskedDB (hLen) */ + if ((err = pkcs_1_mgf1(hash_idx, DB, modulus_len - hLen - 1, mask, hLen)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* XOR against seed */ + for (y = 0; y < hLen; y++) { + seed[y] ^= mask[y]; + } + + /* compute MGF1 of seed (k - hlen - 1) */ + if ((err = pkcs_1_mgf1(hash_idx, seed, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* xor against DB */ + for (y = 0; y < (modulus_len - hLen - 1); y++) { + DB[y] ^= mask[y]; + } + + /* now DB == lhash || PS || 0x01 || M, PS == k - mlen - 2hlen - 2 zeroes */ + + /* compute lhash and store it in seed [reuse temps!] */ + x = modulus_len; + if (lparam != NULL) { + if ((err = hash_memory(hash_idx, lparam, lparamlen, seed, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + } else { + /* can't pass hash_memory a NULL so use DB with zero length */ + if ((err = hash_memory(hash_idx, DB, 0, seed, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + } + + /* compare the lhash'es */ + if (XMEMCMP(seed, DB, hLen) != 0) { + err = CRYPT_OK; + goto LBL_ERR; + } + + /* now zeroes before a 0x01 */ + for (x = hLen; x < (modulus_len - hLen - 1) && DB[x] == 0x00; x++) { + /* step... */ + } + + /* error out if wasn't 0x01 */ + if ((x == (modulus_len - hLen - 1)) || (DB[x] != 0x01)) { + err = CRYPT_INVALID_PACKET; + goto LBL_ERR; + } + + /* rest is the message (and skip 0x01) */ + if ((modulus_len - hLen - 1 - ++x) > *outlen) { + *outlen = modulus_len - hLen - 1 - x; + err = CRYPT_BUFFER_OVERFLOW; + goto LBL_ERR; + } + + /* copy message */ + *outlen = modulus_len - hLen - 1 - x; + XMEMCPY(out, DB + x, modulus_len - hLen - 1 - x); + x += modulus_len - hLen - 1; + + /* valid packet */ + *res = 1; + + err = CRYPT_OK; +LBL_ERR: + #ifdef LTC_CLEAN_STACK + zeromem(DB, modulus_len); + zeromem(seed, hLen); + zeromem(mask, modulus_len); + #endif + + XFREE(seed); + XFREE(mask); + XFREE(DB); + + return err; +} +#endif /* LTC_PKCS_1 */ + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_decode.c,v $ */ +/* $Revision: 1.13 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file pkcs_1_oaep_encode.c + OAEP Padding for LTC_PKCS #1, Tom St Denis + */ + +#ifdef LTC_PKCS_1 + +/** + LTC_PKCS #1 v2.00 OAEP encode + @param msg The data to encode + @param msglen The length of the data to encode (octets) + @param lparam A session or system parameter (can be NULL) + @param lparamlen The length of the lparam data + @param modulus_bitlen The bit length of the RSA modulus + @param prng An active PRNG state + @param prng_idx The index of the PRNG desired + @param hash_idx The index of the hash desired + @param out [out] The destination for the encoded data + @param outlen [in/out] The max size and resulting size of the encoded data + @return CRYPT_OK if successful + */ +int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, + const unsigned char *lparam, unsigned long lparamlen, + unsigned long modulus_bitlen, prng_state *prng, + int prng_idx, int hash_idx, + unsigned char *out, unsigned long *outlen) { + unsigned char *DB, *seed, *mask; + unsigned long hLen, x, y, modulus_len; + int err; + + LTC_ARGCHK(msg != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* test valid hash */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + /* valid prng */ + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + + hLen = hash_descriptor[hash_idx].hashsize; + modulus_len = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); + + /* test message size */ + if ((2 * hLen >= (modulus_len - 2)) || (msglen > (modulus_len - 2 * hLen - 2))) { + return CRYPT_PK_INVALID_SIZE; + } + + /* allocate ram for DB/mask/salt of size modulus_len */ + DB = XMALLOC(modulus_len); + mask = XMALLOC(modulus_len); + seed = XMALLOC(hLen); + if ((DB == NULL) || (mask == NULL) || (seed == NULL)) { + if (DB != NULL) { + XFREE(DB); + } + if (mask != NULL) { + XFREE(mask); + } + if (seed != NULL) { + XFREE(seed); + } + return CRYPT_MEM; + } + + /* get lhash */ + /* DB == lhash || PS || 0x01 || M, PS == k - mlen - 2hlen - 2 zeroes */ + x = modulus_len; + if (lparam != NULL) { + if ((err = hash_memory(hash_idx, lparam, lparamlen, DB, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + } else { + /* can't pass hash_memory a NULL so use DB with zero length */ + if ((err = hash_memory(hash_idx, DB, 0, DB, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + } + + /* append PS then 0x01 (to lhash) */ + x = hLen; + y = modulus_len - msglen - 2 * hLen - 2; + XMEMSET(DB + x, 0, y); + x += y; + + /* 0x01 byte */ + DB[x++] = 0x01; + + /* message (length = msglen) */ + XMEMCPY(DB + x, msg, msglen); + x += msglen; + + /* now choose a random seed */ + if (prng_descriptor[prng_idx].read(seed, hLen, prng) != hLen) { + err = CRYPT_ERROR_READPRNG; + goto LBL_ERR; + } + + /* compute MGF1 of seed (k - hlen - 1) */ + if ((err = pkcs_1_mgf1(hash_idx, seed, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* xor against DB */ + for (y = 0; y < (modulus_len - hLen - 1); y++) { + DB[y] ^= mask[y]; + } + + /* compute MGF1 of maskedDB (hLen) */ + if ((err = pkcs_1_mgf1(hash_idx, DB, modulus_len - hLen - 1, mask, hLen)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* XOR against seed */ + for (y = 0; y < hLen; y++) { + seed[y] ^= mask[y]; + } + + /* create string of length modulus_len */ + if (*outlen < modulus_len) { + *outlen = modulus_len; + err = CRYPT_BUFFER_OVERFLOW; + goto LBL_ERR; + } + + /* start output which is 0x00 || maskedSeed || maskedDB */ + x = 0; + out[x++] = 0x00; + XMEMCPY(out + x, seed, hLen); + x += hLen; + XMEMCPY(out + x, DB, modulus_len - hLen - 1); + x += modulus_len - hLen - 1; + + *outlen = x; + + err = CRYPT_OK; +LBL_ERR: + #ifdef LTC_CLEAN_STACK + zeromem(DB, modulus_len); + zeromem(seed, hLen); + zeromem(mask, modulus_len); + #endif + + XFREE(seed); + XFREE(mask); + XFREE(DB); + + return err; +} +#endif /* LTC_PKCS_1 */ + + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_encode.c,v $ */ +/* $Revision: 1.9 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file pkcs_1_os2ip.c + Octet to Integer OS2IP, Tom St Denis + */ +#ifdef LTC_PKCS_1 + +/** + Read a binary string into an mp_int + @param n [out] The mp_int destination + @param in The binary string to read + @param inlen The length of the binary string + @return CRYPT_OK if successful + */ +int pkcs_1_os2ip(void *n, unsigned char *in, unsigned long inlen) { + return mp_read_unsigned_bin(n, in, inlen); +} +#endif /* LTC_PKCS_1 */ + + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/pkcs1/pkcs_1_os2ip.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file pkcs_1_pss_decode.c + LTC_PKCS #1 PSS Signature Padding, Tom St Denis + */ + +#ifdef LTC_PKCS_1 + +/** + LTC_PKCS #1 v2.00 PSS decode + @param msghash The hash to verify + @param msghashlen The length of the hash (octets) + @param sig The signature data (encoded data) + @param siglen The length of the signature data (octets) + @param saltlen The length of the salt used (octets) + @param hash_idx The index of the hash desired + @param modulus_bitlen The bit length of the RSA modulus + @param res [out] The result of the comparison, 1==valid, 0==invalid + @return CRYPT_OK if successful (even if the comparison failed) + */ +int pkcs_1_pss_decode(const unsigned char *msghash, unsigned long msghashlen, + const unsigned char *sig, unsigned long siglen, + unsigned long saltlen, int hash_idx, + unsigned long modulus_bitlen, int *res) { + unsigned char *DB, *mask, *salt, *hash; + unsigned long x, y, hLen, modulus_len; + int err; + hash_state md; + + LTC_ARGCHK(msghash != NULL); + LTC_ARGCHK(res != NULL); + + /* default to invalid */ + *res = 0; + + /* ensure hash is valid */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + hLen = hash_descriptor[hash_idx].hashsize; + modulus_len = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); + + /* check sizes */ + if ((saltlen > modulus_len) || + (modulus_len < hLen + saltlen + 2) || (siglen != modulus_len)) { + return CRYPT_PK_INVALID_SIZE; + } + + /* allocate ram for DB/mask/salt/hash of size modulus_len */ + DB = XMALLOC(modulus_len); + mask = XMALLOC(modulus_len); + salt = XMALLOC(modulus_len); + hash = XMALLOC(modulus_len); + if ((DB == NULL) || (mask == NULL) || (salt == NULL) || (hash == NULL)) { + if (DB != NULL) { + XFREE(DB); + } + if (mask != NULL) { + XFREE(mask); + } + if (salt != NULL) { + XFREE(salt); + } + if (hash != NULL) { + XFREE(hash); + } + return CRYPT_MEM; + } + + /* ensure the 0xBC byte */ + if (sig[siglen - 1] != 0xBC) { + err = CRYPT_INVALID_PACKET; + goto LBL_ERR; + } + + /* copy out the DB */ + x = 0; + XMEMCPY(DB, sig + x, modulus_len - hLen - 1); + x += modulus_len - hLen - 1; + + /* copy out the hash */ + XMEMCPY(hash, sig + x, hLen); + x += hLen; + + /* check the MSB */ + if ((sig[0] & ~(0xFF >> ((modulus_len << 3) - (modulus_bitlen - 1)))) != 0) { + err = CRYPT_INVALID_PACKET; + goto LBL_ERR; + } + + /* generate mask of length modulus_len - hLen - 1 from hash */ + if ((err = pkcs_1_mgf1(hash_idx, hash, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* xor against DB */ + for (y = 0; y < (modulus_len - hLen - 1); y++) { + DB[y] ^= mask[y]; + } + + /* now clear the first byte [make sure smaller than modulus] */ + DB[0] &= 0xFF >> ((modulus_len << 3) - (modulus_bitlen - 1)); + + /* DB = PS || 0x01 || salt, PS == modulus_len - saltlen - hLen - 2 zero bytes */ + + /* check for zeroes and 0x01 */ + for (x = 0; x < modulus_len - saltlen - hLen - 2; x++) { + if (DB[x] != 0x00) { + err = CRYPT_INVALID_PACKET; + goto LBL_ERR; + } + } + + /* check for the 0x01 */ + if (DB[x++] != 0x01) { + err = CRYPT_INVALID_PACKET; + goto LBL_ERR; + } + + /* M = (eight) 0x00 || msghash || salt, mask = H(M) */ + if ((err = hash_descriptor[hash_idx].init(&md)) != CRYPT_OK) { + goto LBL_ERR; + } + zeromem(mask, 8); + if ((err = hash_descriptor[hash_idx].process(&md, mask, 8)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = hash_descriptor[hash_idx].process(&md, msghash, msghashlen)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = hash_descriptor[hash_idx].process(&md, DB + x, saltlen)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = hash_descriptor[hash_idx].done(&md, mask)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* mask == hash means valid signature */ + if (XMEMCMP(mask, hash, hLen) == 0) { + *res = 1; + } + + err = CRYPT_OK; +LBL_ERR: + #ifdef LTC_CLEAN_STACK + zeromem(DB, modulus_len); + zeromem(mask, modulus_len); + zeromem(salt, modulus_len); + zeromem(hash, modulus_len); + #endif + + XFREE(hash); + XFREE(salt); + XFREE(mask); + XFREE(DB); + + return err; +} +#endif /* LTC_PKCS_1 */ + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_decode.c,v $ */ +/* $Revision: 1.11 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file pkcs_1_pss_encode.c + LTC_PKCS #1 PSS Signature Padding, Tom St Denis + */ + +#ifdef LTC_PKCS_1 + +/** + LTC_PKCS #1 v2.00 Signature Encoding + @param msghash The hash to encode + @param msghashlen The length of the hash (octets) + @param saltlen The length of the salt desired (octets) + @param prng An active PRNG context + @param prng_idx The index of the PRNG desired + @param hash_idx The index of the hash desired + @param modulus_bitlen The bit length of the RSA modulus + @param out [out] The destination of the encoding + @param outlen [in/out] The max size and resulting size of the encoded data + @return CRYPT_OK if successful + */ +int pkcs_1_pss_encode(const unsigned char *msghash, unsigned long msghashlen, + unsigned long saltlen, prng_state *prng, + int prng_idx, int hash_idx, + unsigned long modulus_bitlen, + unsigned char *out, unsigned long *outlen) { + unsigned char *DB, *mask, *salt, *hash; + unsigned long x, y, hLen, modulus_len; + int err; + hash_state md; + + LTC_ARGCHK(msghash != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* ensure hash and PRNG are valid */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + + hLen = hash_descriptor[hash_idx].hashsize; + modulus_len = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); + + /* check sizes */ + if ((saltlen > modulus_len) || (modulus_len < hLen + saltlen + 2)) { + return CRYPT_PK_INVALID_SIZE; + } + + /* allocate ram for DB/mask/salt/hash of size modulus_len */ + DB = XMALLOC(modulus_len); + mask = XMALLOC(modulus_len); + salt = XMALLOC(modulus_len); + hash = XMALLOC(modulus_len); + if ((DB == NULL) || (mask == NULL) || (salt == NULL) || (hash == NULL)) { + if (DB != NULL) { + XFREE(DB); + } + if (mask != NULL) { + XFREE(mask); + } + if (salt != NULL) { + XFREE(salt); + } + if (hash != NULL) { + XFREE(hash); + } + return CRYPT_MEM; + } + + + /* generate random salt */ + if (saltlen > 0) { + if (prng_descriptor[prng_idx].read(salt, saltlen, prng) != saltlen) { + err = CRYPT_ERROR_READPRNG; + goto LBL_ERR; + } + } + + /* M = (eight) 0x00 || msghash || salt, hash = H(M) */ + if ((err = hash_descriptor[hash_idx].init(&md)) != CRYPT_OK) { + goto LBL_ERR; + } + zeromem(DB, 8); + if ((err = hash_descriptor[hash_idx].process(&md, DB, 8)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = hash_descriptor[hash_idx].process(&md, msghash, msghashlen)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = hash_descriptor[hash_idx].process(&md, salt, saltlen)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = hash_descriptor[hash_idx].done(&md, hash)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* generate DB = PS || 0x01 || salt, PS == modulus_len - saltlen - hLen - 2 zero bytes */ + x = 0; + XMEMSET(DB + x, 0, modulus_len - saltlen - hLen - 2); + x += modulus_len - saltlen - hLen - 2; + DB[x++] = 0x01; + XMEMCPY(DB + x, salt, saltlen); + x += saltlen; + + /* generate mask of length modulus_len - hLen - 1 from hash */ + if ((err = pkcs_1_mgf1(hash_idx, hash, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* xor against DB */ + for (y = 0; y < (modulus_len - hLen - 1); y++) { + DB[y] ^= mask[y]; + } + + /* output is DB || hash || 0xBC */ + if (*outlen < modulus_len) { + *outlen = modulus_len; + err = CRYPT_BUFFER_OVERFLOW; + goto LBL_ERR; + } + + /* DB len = modulus_len - hLen - 1 */ + y = 0; + XMEMCPY(out + y, DB, modulus_len - hLen - 1); + y += modulus_len - hLen - 1; + + /* hash */ + XMEMCPY(out + y, hash, hLen); + y += hLen; + + /* 0xBC */ + out[y] = 0xBC; + + /* now clear the 8*modulus_len - modulus_bitlen most significant bits */ + out[0] &= 0xFF >> ((modulus_len << 3) - (modulus_bitlen - 1)); + + /* store output size */ + *outlen = modulus_len; + err = CRYPT_OK; +LBL_ERR: + #ifdef LTC_CLEAN_STACK + zeromem(DB, modulus_len); + zeromem(mask, modulus_len); + zeromem(salt, modulus_len); + zeromem(hash, modulus_len); + #endif + + XFREE(hash); + XFREE(salt); + XFREE(mask); + XFREE(DB); + + return err; +} +#endif /* LTC_PKCS_1 */ + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_encode.c,v $ */ +/* $Revision: 1.9 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** @file pkcs_1_v1_5_decode.c + * + * LTC_PKCS #1 v1.5 Padding. (Andreas Lange) + */ + +#ifdef LTC_PKCS_1 + +/** @brief LTC_PKCS #1 v1.5 decode. + * + * @param msg The encoded data to decode + * @param msglen The length of the encoded data (octets) + * @param block_type Block type to use in padding (\sa ltc_pkcs_1_v1_5_blocks) + * @param modulus_bitlen The bit length of the RSA modulus + * @param out [out] Destination of decoding + * @param outlen [in/out] The max size and resulting size of the decoding + * @param is_valid [out] Boolean whether the padding was valid + * + * @return CRYPT_OK if successful (even if invalid) + */ +int pkcs_1_v1_5_decode(const unsigned char *msg, + unsigned long msglen, + int block_type, + unsigned long modulus_bitlen, + unsigned char *out, + unsigned long *outlen, + int *is_valid) { + unsigned long modulus_len, ps_len, i; + int result; + + /* default to invalid packet */ + *is_valid = 0; + + modulus_len = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); + + /* test message size */ + + if ((msglen > modulus_len) || (modulus_len < 11)) { + return CRYPT_PK_INVALID_SIZE; + } + + /* separate encoded message */ + + if ((msg[0] != 0x00) || (msg[1] != (unsigned char)block_type)) { + result = CRYPT_INVALID_PACKET; + goto bail; + } + + if (block_type == LTC_LTC_PKCS_1_EME) { + for (i = 2; i < modulus_len; i++) { + /* separator */ + if (msg[i] == 0x00) { + break; + } + } + ps_len = i++ - 2; + + if ((i >= modulus_len) || (ps_len < 8)) { + /* There was no octet with hexadecimal value 0x00 to separate ps from m, + * or the length of ps is less than 8 octets. + */ + result = CRYPT_INVALID_PACKET; + goto bail; + } + } else { + for (i = 2; i < modulus_len - 1; i++) { + if (msg[i] != 0xFF) { + break; + } + } + + /* separator check */ + if (msg[i] != 0) { + /* There was no octet with hexadecimal value 0x00 to separate ps from m. */ + result = CRYPT_INVALID_PACKET; + goto bail; + } + + ps_len = i - 2; + } + + if (*outlen < (msglen - (2 + ps_len + 1))) { + *outlen = msglen - (2 + ps_len + 1); + result = CRYPT_BUFFER_OVERFLOW; + goto bail; + } + + *outlen = (msglen - (2 + ps_len + 1)); + XMEMCPY(out, &msg[2 + ps_len + 1], *outlen); + + /* valid packet */ + *is_valid = 1; + result = CRYPT_OK; +bail: + return result; +} /* pkcs_1_v1_5_decode */ +#endif /* #ifdef LTC_PKCS_1 */ + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_decode.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/*! \file pkcs_1_v1_5_encode.c + * + * LTC_PKCS #1 v1.5 Padding (Andreas Lange) + */ + +#ifdef LTC_PKCS_1 + +/*! \brief LTC_PKCS #1 v1.5 encode. + * + * \param msg The data to encode + * \param msglen The length of the data to encode (octets) + * \param block_type Block type to use in padding (\sa ltc_pkcs_1_v1_5_blocks) + * \param modulus_bitlen The bit length of the RSA modulus + * \param prng An active PRNG state (only for LTC_LTC_PKCS_1_EME) + * \param prng_idx The index of the PRNG desired (only for LTC_LTC_PKCS_1_EME) + * \param out [out] The destination for the encoded data + * \param outlen [in/out] The max size and resulting size of the encoded data + * + * \return CRYPT_OK if successful + */ +int pkcs_1_v1_5_encode(const unsigned char *msg, + unsigned long msglen, + int block_type, + unsigned long modulus_bitlen, + prng_state *prng, + int prng_idx, + unsigned char *out, + unsigned long *outlen) { + unsigned long modulus_len, ps_len, i; + unsigned char *ps; + int result; + + /* valid block_type? */ + if ((block_type != LTC_LTC_PKCS_1_EMSA) && + (block_type != LTC_LTC_PKCS_1_EME)) { + return CRYPT_PK_INVALID_PADDING; + } + + if (block_type == LTC_LTC_PKCS_1_EME) { /* encryption padding, we need a valid PRNG */ + if ((result = prng_is_valid(prng_idx)) != CRYPT_OK) { + return result; + } + } + + modulus_len = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); + + /* test message size */ + if ((msglen + 11) > modulus_len) { + return CRYPT_PK_INVALID_SIZE; + } + + if (*outlen < modulus_len) { + *outlen = modulus_len; + result = CRYPT_BUFFER_OVERFLOW; + goto bail; + } + + /* generate an octets string PS */ + ps = &out[2]; + ps_len = modulus_len - msglen - 3; + + if (block_type == LTC_LTC_PKCS_1_EME) { + /* now choose a random ps */ + if (prng_descriptor[prng_idx].read(ps, ps_len, prng) != ps_len) { + result = CRYPT_ERROR_READPRNG; + goto bail; + } + + /* transform zero bytes (if any) to non-zero random bytes */ + for (i = 0; i < ps_len; i++) { + while (ps[i] == 0) { + if (prng_descriptor[prng_idx].read(&ps[i], 1, prng) != 1) { + result = CRYPT_ERROR_READPRNG; + goto bail; + } + } + } + } else { + XMEMSET(ps, 0xFF, ps_len); + } + + /* create string of length modulus_len */ + out[0] = 0x00; + out[1] = (unsigned char)block_type;/* block_type 1 or 2 */ + out[2 + ps_len] = 0x00; + XMEMCPY(&out[2 + ps_len + 1], msg, msglen); + *outlen = modulus_len; + + result = CRYPT_OK; +bail: + return result; +} /* pkcs_1_v1_5_encode */ +#endif /* #ifdef LTC_PKCS_1 */ + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_encode.c,v $ */ +/* $Revision: 1.4 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file rand_prime.c + Generate a random prime, Tom St Denis + */ + +#define USE_BBS 1 + +int rand_prime(void *N, long len, prng_state *prng, int wprng) { + int err, res, type; + unsigned char *buf; + + LTC_ARGCHK(N != NULL); + + /* get type */ + if (len < 0) { + type = USE_BBS; + len = -len; + } else { + type = 0; + } + + /* allow sizes between 2 and 512 bytes for a prime size */ + if ((len < 2) || (len > 512)) { + return CRYPT_INVALID_PRIME_SIZE; + } + + /* valid PRNG? Better be! */ + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + /* allocate buffer to work with */ + buf = XCALLOC(1, len); + if (buf == NULL) { + return CRYPT_MEM; + } + + do { + /* generate value */ + if (prng_descriptor[wprng].read(buf, len, prng) != (unsigned long)len) { + XFREE(buf); + return CRYPT_ERROR_READPRNG; + } + + /* munge bits */ + buf[0] |= 0x80 | 0x40; + buf[len - 1] |= 0x01 | ((type & USE_BBS) ? 0x02 : 0x00); + + /* load value */ + if ((err = mp_read_unsigned_bin(N, buf, len)) != CRYPT_OK) { + XFREE(buf); + return err; + } + + /* test */ + if ((err = mp_prime_is_prime(N, 8, &res)) != CRYPT_OK) { + XFREE(buf); + return err; + } + } while (res == LTC_MP_NO); + +#ifdef LTC_CLEAN_STACK + zeromem(buf, len); +#endif + + XFREE(buf); + return CRYPT_OK; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/math/rand_prime.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:23 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file rng_get_bytes.c + portable way to get secure random bits to feed a PRNG (Tom St Denis) + */ + +#ifdef LTC_DEVRANDOM +/* on *NIX read /dev/random */ +static unsigned long rng_nix(unsigned char *buf, unsigned long len, + void (*callback)(void)) { + #ifdef LTC_NO_FILE + return 0; + #else + FILE *f; + unsigned long x; + #ifdef TRY_URANDOM_FIRST + f = fopen("/dev/urandom", "rb"); + if (f == NULL) + #endif /* TRY_URANDOM_FIRST */ + f = fopen("/dev/random", "rb"); + + if (f == NULL) { + return 0; + } + + /* disable buffering */ + if (setvbuf(f, NULL, _IONBF, 0) != 0) { + fclose(f); + return 0; + } + + x = (unsigned long)fread(buf, 1, (size_t)len, f); + fclose(f); + return x; + #endif /* LTC_NO_FILE */ +} +#endif /* LTC_DEVRANDOM */ + +/* on ANSI C platforms with 100 < CLOCKS_PER_SEC < 10000 */ +#if defined(CLOCKS_PER_SEC) && !defined(WINCE) + + #define ANSI_RNG + +static unsigned long rng_ansic(unsigned char *buf, unsigned long len, + void (*callback)(void)) { + clock_t t1; + int l, acc, bits, a, b; + + if ((XCLOCKS_PER_SEC < 100) || (XCLOCKS_PER_SEC > 10000)) { + return 0; + } + + l = len; + bits = 8; + acc = a = b = 0; + while (len--) { + if (callback != NULL) callback(); + while (bits--) { + do { + t1 = XCLOCK(); + while (t1 == XCLOCK()) a ^= 1; + t1 = XCLOCK(); + while (t1 == XCLOCK()) b ^= 1; + } while (a == b); + acc = (acc << 1) | a; + } + *buf++ = acc; + acc = 0; + bits = 8; + } + acc = bits = a = b = 0; + return l; +} +#endif + +/* Try the Microsoft CSP */ +#if defined(WIN32) || defined(WINCE) + #define _WIN32_WINNT 0x0400 + #ifdef WINCE + #define UNDER_CE + #define ARM + #endif +#include <windows.h> +#include <wincrypt.h> + +static unsigned long rng_win32(unsigned char *buf, unsigned long len, + void (*callback)(void)) { + HCRYPTPROV hProv = 0; + + if (!CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, + (CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) && + !CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, + CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET | CRYPT_NEWKEYSET)) + return 0; + + if (CryptGenRandom(hProv, len, buf) == TRUE) { + CryptReleaseContext(hProv, 0); + return len; + } else { + CryptReleaseContext(hProv, 0); + return 0; + } +} +#endif /* WIN32 */ + +/** + Read the system RNG + @param out Destination + @param outlen Length desired (octets) + @param callback Pointer to void function to act as "callback" when RNG is slow. This can be NULL + @return Number of octets read + */ +unsigned long rng_get_bytes(unsigned char *out, unsigned long outlen, + void (*callback)(void)) { + for (unsigned long i = 0; i < outlen; i++) + out[i] = rand() & 0xff; + return outlen; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/prngs/rng_get_bytes.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file rng_make_prng.c + portable way to get secure random bits to feed a PRNG (Tom St Denis) + */ + +/** + Create a PRNG from a RNG + @param bits Number of bits of entropy desired (64 ... 1024) + @param wprng Index of which PRNG to setup + @param prng [out] PRNG state to initialize + @param callback A pointer to a void function for when the RNG is slow, this can be NULL + @return CRYPT_OK if successful + */ +int rng_make_prng(int bits, int wprng, prng_state *prng, + void (*callback)(void)) { + unsigned char buf[256]; + int err; + + LTC_ARGCHK(prng != NULL); + + /* check parameter */ + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + if ((bits < 64) || (bits > 1024)) { + return CRYPT_INVALID_PRNGSIZE; + } + + if ((err = prng_descriptor[wprng].start(prng)) != CRYPT_OK) { + return err; + } + + bits = ((bits / 8) + ((bits & 7) != 0 ? 1 : 0)) * 2; + if (rng_get_bytes(buf, (unsigned long)bits, callback) != (unsigned long)bits) { + return CRYPT_ERROR_READPRNG; + } + + if ((err = prng_descriptor[wprng].add_entropy(buf, (unsigned long)bits, prng)) != CRYPT_OK) { + return err; + } + + if ((err = prng_descriptor[wprng].ready(prng)) != CRYPT_OK) { + return err; + } + +#ifdef LTC_CLEAN_STACK + zeromem(buf, sizeof(buf)); +#endif + return CRYPT_OK; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/prngs/rng_make_prng.c,v $ */ +/* $Revision: 1.5 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file rsa_decrypt_key.c + RSA LTC_PKCS #1 Decryption, Tom St Denis and Andreas Lange + */ + +#ifdef LTC_MRSA + +/** + LTC_PKCS #1 decrypt then v1.5 or OAEP depad + @param in The ciphertext + @param inlen The length of the ciphertext (octets) + @param out [out] The plaintext + @param outlen [in/out] The max size and resulting size of the plaintext (octets) + @param lparam The system "lparam" value + @param lparamlen The length of the lparam value (octets) + @param hash_idx The index of the hash desired + @param padding Type of padding (LTC_LTC_PKCS_1_OAEP or LTC_LTC_PKCS_1_V1_5) + @param stat [out] Result of the decryption, 1==valid, 0==invalid + @param key The corresponding private RSA key + @return CRYPT_OK if succcessul (even if invalid) + */ +int rsa_decrypt_key_ex(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + int hash_idx, int padding, + int *stat, rsa_key *key) { + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + unsigned char *tmp; + + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(stat != NULL); + + /* default to invalid */ + *stat = 0; + + /* valid padding? */ + + if ((padding != LTC_LTC_PKCS_1_V1_5) && + (padding != LTC_LTC_PKCS_1_OAEP)) { + return CRYPT_PK_INVALID_PADDING; + } + + if (padding == LTC_LTC_PKCS_1_OAEP) { + /* valid hash ? */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + } + + /* get modulus len in bits */ + modulus_bitlen = mp_count_bits((key->N)); + + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size((key->N)); + if (modulus_bytelen != inlen) { + return CRYPT_INVALID_PACKET; + } + + /* allocate ram */ + tmp = XMALLOC(inlen); + if (tmp == NULL) { + return CRYPT_MEM; + } + + /* rsa decode the packet */ + x = inlen; + if ((err = ltc_mp.rsa_me(in, inlen, tmp, &x, PK_PRIVATE, key)) != CRYPT_OK) { + XFREE(tmp); + return err; + } + + if (padding == LTC_LTC_PKCS_1_OAEP) { + /* now OAEP decode the packet */ + err = pkcs_1_oaep_decode(tmp, x, lparam, lparamlen, modulus_bitlen, hash_idx, + out, outlen, stat); + } else { + /* now LTC_PKCS #1 v1.5 depad the packet */ + err = pkcs_1_v1_5_decode(tmp, x, LTC_LTC_PKCS_1_EME, modulus_bitlen, out, outlen, stat); + } + + XFREE(tmp); + return err; +} +#endif /* LTC_MRSA */ + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/rsa/rsa_decrypt_key.c,v $ */ +/* $Revision: 1.10 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file rsa_encrypt_key.c + RSA LTC_PKCS #1 encryption, Tom St Denis and Andreas Lange + */ + +#ifdef LTC_MRSA + +/** + (LTC_PKCS #1 v2.0) OAEP pad then encrypt + @param in The plaintext + @param inlen The length of the plaintext (octets) + @param out [out] The ciphertext + @param outlen [in/out] The max size and resulting size of the ciphertext + @param lparam The system "lparam" for the encryption + @param lparamlen The length of lparam (octets) + @param prng An active PRNG + @param prng_idx The index of the desired prng + @param hash_idx The index of the desired hash + @param padding Type of padding (LTC_LTC_PKCS_1_OAEP or LTC_LTC_PKCS_1_V1_5) + @param key The RSA key to encrypt to + @return CRYPT_OK if successful + */ +int rsa_encrypt_key_ex(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + prng_state *prng, int prng_idx, int hash_idx, int padding, rsa_key *key) { + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(key != NULL); + + /* valid padding? */ + if ((padding != LTC_LTC_PKCS_1_V1_5) && + (padding != LTC_LTC_PKCS_1_OAEP)) { + return CRYPT_PK_INVALID_PADDING; + } + + /* valid prng? */ + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + + if (padding == LTC_LTC_PKCS_1_OAEP) { + /* valid hash? */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + } + + /* get modulus len in bits */ + modulus_bitlen = mp_count_bits((key->N)); + + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size((key->N)); + if (modulus_bytelen > *outlen) { + *outlen = modulus_bytelen; + return CRYPT_BUFFER_OVERFLOW; + } + + if (padding == LTC_LTC_PKCS_1_OAEP) { + /* OAEP pad the key */ + x = *outlen; + if ((err = pkcs_1_oaep_encode(in, inlen, lparam, + lparamlen, modulus_bitlen, prng, prng_idx, hash_idx, + out, &x)) != CRYPT_OK) { + return err; + } + } else { + /* LTC_PKCS #1 v1.5 pad the key */ + x = *outlen; + if ((err = pkcs_1_v1_5_encode(in, inlen, LTC_LTC_PKCS_1_EME, + modulus_bitlen, prng, prng_idx, + out, &x)) != CRYPT_OK) { + return err; + } + } + + /* rsa exptmod the OAEP or LTC_PKCS #1 v1.5 pad */ + return ltc_mp.rsa_me(out, x, out, outlen, PK_PUBLIC, key); +} +#endif /* LTC_MRSA */ + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/rsa/rsa_encrypt_key.c,v $ */ +/* $Revision: 1.10 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file rsa_exptmod.c + RSA LTC_PKCS exptmod, Tom St Denis + */ + +#ifdef LTC_MRSA + +/** + Compute an RSA modular exponentiation + @param in The input data to send into RSA + @param inlen The length of the input (octets) + @param out [out] The destination + @param outlen [in/out] The max size and resulting size of the output + @param which Which exponent to use, e.g. PK_PRIVATE or PK_PUBLIC + @param key The RSA key to use + @return CRYPT_OK if successful + */ +int rsa_exptmod(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, int which, + rsa_key *key) { + void *tmp, *tmpa, *tmpb; + unsigned long x; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(key != NULL); + + /* is the key of the right type for the operation? */ + if ((which == PK_PRIVATE) && (key->type != PK_PRIVATE)) { + return CRYPT_PK_NOT_PRIVATE; + } + + /* must be a private or public operation */ + if ((which != PK_PRIVATE) && (which != PK_PUBLIC)) { + return CRYPT_PK_INVALID_TYPE; + } + + /* init and copy into tmp */ + if ((err = mp_init_multi(&tmp, &tmpa, &tmpb, NULL)) != CRYPT_OK) { + return err; + } + if ((err = mp_read_unsigned_bin(tmp, (unsigned char *)in, (int)inlen)) != CRYPT_OK) { + goto error; + } + + /* sanity check on the input */ + if (mp_cmp(key->N, tmp) == LTC_MP_LT) { + err = CRYPT_PK_INVALID_SIZE; + goto error; + } + + /* are we using the private exponent and is the key optimized? */ + if (which == PK_PRIVATE) { + /* tmpa = tmp^dP mod p */ + if ((err = mp_exptmod(tmp, key->dP, key->p, tmpa)) != CRYPT_OK) { + goto error; + } + + /* tmpb = tmp^dQ mod q */ + if ((err = mp_exptmod(tmp, key->dQ, key->q, tmpb)) != CRYPT_OK) { + goto error; + } + + /* tmp = (tmpa - tmpb) * qInv (mod p) */ + if ((err = mp_sub(tmpa, tmpb, tmp)) != CRYPT_OK) { + goto error; + } + if ((err = mp_mulmod(tmp, key->qP, key->p, tmp)) != CRYPT_OK) { + goto error; + } + + /* tmp = tmpb + q * tmp */ + if ((err = mp_mul(tmp, key->q, tmp)) != CRYPT_OK) { + goto error; + } + if ((err = mp_add(tmp, tmpb, tmp)) != CRYPT_OK) { + goto error; + } + } else { + /* exptmod it */ + if ((err = mp_exptmod(tmp, key->e, key->N, tmp)) != CRYPT_OK) { + goto error; + } + } + + /* read it back */ + x = (unsigned long)mp_unsigned_bin_size(key->N); + if (x > *outlen) { + *outlen = x; + err = CRYPT_BUFFER_OVERFLOW; + goto error; + } + + /* this should never happen ... */ + if (mp_unsigned_bin_size(tmp) > mp_unsigned_bin_size(key->N)) { + err = CRYPT_ERROR; + goto error; + } + *outlen = x; + + /* convert it */ + zeromem(out, x); + if ((err = mp_to_unsigned_bin(tmp, out + (x - mp_unsigned_bin_size(tmp)))) != CRYPT_OK) { + goto error; + } + + /* clean up and return */ + err = CRYPT_OK; +error: + mp_clear_multi(tmp, tmpa, tmpb, NULL); + return err; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/rsa/rsa_exptmod.c,v $ */ +/* $Revision: 1.18 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file rsa_free.c + Free an RSA key, Tom St Denis + */ + +#ifdef LTC_MRSA + +/** + Free an RSA key from memory + @param key The RSA key to free + */ +void rsa_free(rsa_key *key) { + LTC_ARGCHKVD(key != NULL); + mp_clear_multi(key->e, key->d, key->N, key->dQ, key->dP, key->qP, key->p, key->q, NULL); +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/rsa/rsa_free.c,v $ */ +/* $Revision: 1.10 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file rsa_import.c + Import a LTC_PKCS RSA key, Tom St Denis + */ + +#ifdef LTC_MRSA + +/** + Import an RSAPublicKey or RSAPrivateKey [two-prime only, only support >= 1024-bit keys, defined in LTC_PKCS #1 v2.1] + @param in The packet to import from + @param inlen It's length (octets) + @param key [out] Destination for newly imported key + @return CRYPT_OK if successful, upon error allocated memory is freed + */ +int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key) { + int err; + void *zero; + unsigned char *tmpbuf; + unsigned long t, x, y, z, tmpoid[16]; + ltc_asn1_list ssl_pubkey_hashoid[2]; + ltc_asn1_list ssl_pubkey[2]; + ltc_mp = ltm_desc; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(ltc_mp.name != NULL); + + /* init key */ + if ((err = mp_init_multi(&key->e, &key->d, &key->N, &key->dQ, + &key->dP, &key->qP, &key->p, &key->q, NULL)) != CRYPT_OK) { + return err; + } + + /* see if the OpenSSL DER format RSA public key will work */ + tmpbuf = XCALLOC(1, MAX_RSA_SIZE * 8); + if (tmpbuf == NULL) { + err = CRYPT_MEM; + goto LBL_ERR; + } + + /* this includes the internal hash ID and optional params (NULL in this case) */ + LTC_SET_ASN1(ssl_pubkey_hashoid, 0, LTC_ASN1_OBJECT_IDENTIFIER, tmpoid, sizeof(tmpoid) / sizeof(tmpoid[0])); + LTC_SET_ASN1(ssl_pubkey_hashoid, 1, LTC_ASN1_NULL, NULL, 0); + + /* the actual format of the SSL DER key is odd, it stores a RSAPublicKey in a **BIT** string ... so we have to extract it + then proceed to convert bit to octet + */ + LTC_SET_ASN1(ssl_pubkey, 0, LTC_ASN1_SEQUENCE, &ssl_pubkey_hashoid, 2); + LTC_SET_ASN1(ssl_pubkey, 1, LTC_ASN1_BIT_STRING, tmpbuf, MAX_RSA_SIZE * 8); + + if (der_decode_sequence(in, inlen, + ssl_pubkey, 2UL) == CRYPT_OK) { + /* ok now we have to reassemble the BIT STRING to an OCTET STRING. Thanks OpenSSL... */ + for (t = y = z = x = 0; x < ssl_pubkey[1].size; x++) { + y = (y << 1) | tmpbuf[x]; + if (++z == 8) { + tmpbuf[t++] = (unsigned char)y; + y = 0; + z = 0; + } + } + + /* now it should be SEQUENCE { INTEGER, INTEGER } */ + if ((err = der_decode_sequence_multi(tmpbuf, t, + LTC_ASN1_INTEGER, 1UL, key->N, + LTC_ASN1_INTEGER, 1UL, key->e, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + XFREE(tmpbuf); + goto LBL_ERR; + } + XFREE(tmpbuf); + key->type = PK_PUBLIC; + return CRYPT_OK; + } + XFREE(tmpbuf); + + /* not SSL public key, try to match against LTC_PKCS #1 standards */ + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_INTEGER, 1UL, key->N, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto LBL_ERR; + } + + if (mp_cmp_d(key->N, 0) == LTC_MP_EQ) { + if ((err = mp_init(&zero)) != CRYPT_OK) { + goto LBL_ERR; + } + /* it's a private key */ + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_INTEGER, 1UL, zero, + LTC_ASN1_INTEGER, 1UL, key->N, + LTC_ASN1_INTEGER, 1UL, key->e, + LTC_ASN1_INTEGER, 1UL, key->d, + LTC_ASN1_INTEGER, 1UL, key->p, + LTC_ASN1_INTEGER, 1UL, key->q, + LTC_ASN1_INTEGER, 1UL, key->dP, + LTC_ASN1_INTEGER, 1UL, key->dQ, + LTC_ASN1_INTEGER, 1UL, key->qP, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + mp_clear(zero); + goto LBL_ERR; + } + mp_clear(zero); + key->type = PK_PRIVATE; + } else if (mp_cmp_d(key->N, 1) == LTC_MP_EQ) { + /* we don't support multi-prime RSA */ + err = CRYPT_PK_INVALID_TYPE; + goto LBL_ERR; + } else { + /* it's a public key and we lack e */ + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_INTEGER, 1UL, key->N, + LTC_ASN1_INTEGER, 1UL, key->e, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto LBL_ERR; + } + key->type = PK_PUBLIC; + } + return CRYPT_OK; +LBL_ERR: + mp_clear_multi(key->d, key->e, key->N, key->dQ, key->dP, key->qP, key->p, key->q, NULL); + return err; +} +#endif /* LTC_MRSA */ + + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/rsa/rsa_import.c,v $ */ +/* $Revision: 1.23 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file rsa_make_key.c + RSA key generation, Tom St Denis + */ + +#ifdef LTC_MRSA + +/** + Create an RSA key + @param prng An active PRNG state + @param wprng The index of the PRNG desired + @param size The size of the modulus (key size) desired (octets) + @param e The "e" value (public key). e==65537 is a good choice + @param key [out] Destination of a newly created private key pair + @return CRYPT_OK if successful, upon error all allocated ram is freed + */ +int rsa_make_key(prng_state *prng, int wprng, int size, long e, rsa_key *key) { + void *p, *q, *tmp1, *tmp2, *tmp3; + int err; + + LTC_ARGCHK(ltc_mp.name != NULL); + LTC_ARGCHK(key != NULL); + + if ((size < (MIN_RSA_SIZE / 8)) || (size > (MAX_RSA_SIZE / 8))) { + return CRYPT_INVALID_KEYSIZE; + } + + if ((e < 3) || ((e & 1) == 0)) { + return CRYPT_INVALID_ARG; + } + + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + if ((err = mp_init_multi(&p, &q, &tmp1, &tmp2, &tmp3, NULL)) != CRYPT_OK) { + return err; + } + + /* make primes p and q (optimization provided by Wayne Scott) */ + if ((err = mp_set_int(tmp3, e)) != CRYPT_OK) { + goto errkey; + } /* tmp3 = e */ + + /* make prime "p" */ + do { + if ((err = rand_prime(p, size / 2, prng, wprng)) != CRYPT_OK) { + goto errkey; + } + if ((err = mp_sub_d(p, 1, tmp1)) != CRYPT_OK) { + goto errkey; + } /* tmp1 = p-1 */ + if ((err = mp_gcd(tmp1, tmp3, tmp2)) != CRYPT_OK) { + goto errkey; + } /* tmp2 = gcd(p-1, e) */ + } while (mp_cmp_d(tmp2, 1) != 0); /* while e divides p-1 */ + + /* make prime "q" */ + do { + if ((err = rand_prime(q, size / 2, prng, wprng)) != CRYPT_OK) { + goto errkey; + } + if ((err = mp_sub_d(q, 1, tmp1)) != CRYPT_OK) { + goto errkey; + } /* tmp1 = q-1 */ + if ((err = mp_gcd(tmp1, tmp3, tmp2)) != CRYPT_OK) { + goto errkey; + } /* tmp2 = gcd(q-1, e) */ + } while (mp_cmp_d(tmp2, 1) != 0); /* while e divides q-1 */ + + /* tmp1 = lcm(p-1, q-1) */ + if ((err = mp_sub_d(p, 1, tmp2)) != CRYPT_OK) { + goto errkey; + } /* tmp2 = p-1 */ + /* tmp1 = q-1 (previous do/while loop) */ + if ((err = mp_lcm(tmp1, tmp2, tmp1)) != CRYPT_OK) { + goto errkey; + } /* tmp1 = lcm(p-1, q-1) */ + + /* make key */ + if ((err = mp_init_multi(&key->e, &key->d, &key->N, &key->dQ, &key->dP, &key->qP, &key->p, &key->q, NULL)) != CRYPT_OK) { + goto errkey; + } + + if ((err = mp_set_int(key->e, e)) != CRYPT_OK) { + goto errkey; + } /* key->e = e */ + if ((err = mp_invmod(key->e, tmp1, key->d)) != CRYPT_OK) { + goto errkey; + } /* key->d = 1/e mod lcm(p-1,q-1) */ + if ((err = mp_mul(p, q, key->N)) != CRYPT_OK) { + goto errkey; + } /* key->N = pq */ + + /* optimize for CRT now */ + /* find d mod q-1 and d mod p-1 */ + if ((err = mp_sub_d(p, 1, tmp1)) != CRYPT_OK) { + goto errkey; + } /* tmp1 = q-1 */ + if ((err = mp_sub_d(q, 1, tmp2)) != CRYPT_OK) { + goto errkey; + } /* tmp2 = p-1 */ + if ((err = mp_mod(key->d, tmp1, key->dP)) != CRYPT_OK) { + goto errkey; + } /* dP = d mod p-1 */ + if ((err = mp_mod(key->d, tmp2, key->dQ)) != CRYPT_OK) { + goto errkey; + } /* dQ = d mod q-1 */ + if ((err = mp_invmod(q, p, key->qP)) != CRYPT_OK) { + goto errkey; + } /* qP = 1/q mod p */ + + if ((err = mp_copy(p, key->p)) != CRYPT_OK) { + goto errkey; + } + if ((err = mp_copy(q, key->q)) != CRYPT_OK) { + goto errkey; + } + + /* set key type (in this case it's CRT optimized) */ + key->type = PK_PRIVATE; + + /* return ok and free temps */ + err = CRYPT_OK; + goto cleanup; +errkey: + mp_clear_multi(key->d, key->e, key->N, key->dQ, key->dP, key->qP, key->p, key->q, NULL); +cleanup: + mp_clear_multi(tmp3, tmp2, tmp1, p, q, NULL); + return err; +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/rsa/rsa_make_key.c,v $ */ +/* $Revision: 1.16 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file rsa_sign_hash.c + RSA LTC_PKCS #1 v1.5 and v2 PSS sign hash, Tom St Denis and Andreas Lange + */ + +#ifdef LTC_MRSA + +/** + LTC_PKCS #1 pad then sign + @param in The hash to sign + @param inlen The length of the hash to sign (octets) + @param out [out] The signature + @param outlen [in/out] The max size and resulting size of the signature + @param padding Type of padding (LTC_LTC_PKCS_1_PSS or LTC_LTC_PKCS_1_V1_5) + @param prng An active PRNG state + @param prng_idx The index of the PRNG desired + @param hash_idx The index of the hash desired + @param saltlen The length of the salt desired (octets) + @param key The private RSA key to use + @return CRYPT_OK if successful + */ +int rsa_sign_hash_ex(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + int padding, + prng_state *prng, int prng_idx, + int hash_idx, unsigned long saltlen, + rsa_key *key) { + unsigned long modulus_bitlen, modulus_bytelen, x, y; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(key != NULL); + + /* valid padding? */ + if ((padding != LTC_LTC_PKCS_1_V1_5) && (padding != LTC_LTC_PKCS_1_PSS)) { + return CRYPT_PK_INVALID_PADDING; + } + + hash_idx = register_hash(&sha256_desc); + + if (padding == LTC_LTC_PKCS_1_PSS) { + /* valid prng and hash ? */ + if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { + return err; + } + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + } + + /* get modulus len in bits */ + modulus_bitlen = mp_count_bits((key->N)); + + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size((key->N)); + if (modulus_bytelen > *outlen) { + *outlen = modulus_bytelen; + return CRYPT_BUFFER_OVERFLOW; + } + + if (padding == LTC_LTC_PKCS_1_PSS) { + /* PSS pad the key */ + x = *outlen; + if ((err = pkcs_1_pss_encode(in, inlen, saltlen, prng, prng_idx, + hash_idx, modulus_bitlen, out, &x)) != CRYPT_OK) { + return err; + } + } else { + /* LTC_PKCS #1 v1.5 pad the hash */ + unsigned char *tmpin; + ltc_asn1_list digestinfo[2], siginfo[2]; + + /* not all hashes have OIDs... so sad */ + if (hash_descriptor[hash_idx].OIDlen == 0) { + return CRYPT_INVALID_ARG; + } + + /* construct the SEQUENCE + SEQUENCE { + SEQUENCE {hashoid OID + blah NULL + } + hash OCTET STRING + } + */ + LTC_SET_ASN1(digestinfo, 0, LTC_ASN1_OBJECT_IDENTIFIER, hash_descriptor[hash_idx].OID, hash_descriptor[hash_idx].OIDlen); + LTC_SET_ASN1(digestinfo, 1, LTC_ASN1_NULL, NULL, 0); + LTC_SET_ASN1(siginfo, 0, LTC_ASN1_SEQUENCE, digestinfo, 2); + LTC_SET_ASN1(siginfo, 1, LTC_ASN1_OCTET_STRING, in, inlen); + + /* allocate memory for the encoding */ + y = mp_unsigned_bin_size(key->N); + tmpin = XMALLOC(y); + if (tmpin == NULL) { + return CRYPT_MEM; + } + + if ((err = der_encode_sequence(siginfo, 2, tmpin, &y)) != CRYPT_OK) { + XFREE(tmpin); + return err; + } + + x = *outlen; + if ((err = pkcs_1_v1_5_encode(tmpin, y, LTC_LTC_PKCS_1_EMSA, + modulus_bitlen, NULL, 0, + out, &x)) != CRYPT_OK) { + XFREE(tmpin); + return err; + } + XFREE(tmpin); + } + + /* RSA encode it */ + return ltc_mp.rsa_me(out, x, out, outlen, PK_PRIVATE, key); +} +#endif /* LTC_MRSA */ + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/rsa/rsa_sign_hash.c,v $ */ +/* $Revision: 1.11 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file rsa_verify_hash.c + RSA LTC_PKCS #1 v1.5 or v2 PSS signature verification, Tom St Denis and Andreas Lange + */ + +#ifdef LTC_MRSA + +/** + LTC_PKCS #1 de-sign then v1.5 or PSS depad + @param sig The signature data + @param siglen The length of the signature data (octets) + @param hash The hash of the message that was signed + @param hashlen The length of the hash of the message that was signed (octets) + @param padding Type of padding (LTC_LTC_PKCS_1_PSS or LTC_LTC_PKCS_1_V1_5) + @param hash_idx The index of the desired hash + @param saltlen The length of the salt used during signature + @param stat [out] The result of the signature comparison, 1==valid, 0==invalid + @param key The public RSA key corresponding to the key that performed the signature + @return CRYPT_OK on success (even if the signature is invalid) + */ +int rsa_verify_hash_ex(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int padding, + int hash_idx, unsigned long saltlen, + int *stat, rsa_key *key) { + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + unsigned char *tmpbuf; + + LTC_ARGCHK(hash != NULL); + LTC_ARGCHK(sig != NULL); + LTC_ARGCHK(stat != NULL); + LTC_ARGCHK(key != NULL); + + /* default to invalid */ + *stat = 0; + + /* valid padding? */ + + if ((padding != LTC_LTC_PKCS_1_V1_5) && + (padding != LTC_LTC_PKCS_1_PSS)) { + return CRYPT_PK_INVALID_PADDING; + } + + hash_idx = register_hash(&sha256_desc); + + if (padding == LTC_LTC_PKCS_1_PSS) { + /* valid hash ? */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + } + + /* get modulus len in bits */ + modulus_bitlen = mp_count_bits((key->N)); + + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size((key->N)); + if (modulus_bytelen != siglen) { + return CRYPT_INVALID_PACKET; + } + + /* allocate temp buffer for decoded sig */ + tmpbuf = XMALLOC(siglen); + if (tmpbuf == NULL) { + return CRYPT_MEM; + } + + /* RSA decode it */ + x = siglen; + if ((err = ltc_mp.rsa_me(sig, siglen, tmpbuf, &x, PK_PUBLIC, key)) != CRYPT_OK) { + XFREE(tmpbuf); + return err; + } + + /* make sure the output is the right size */ + if (x != siglen) { + XFREE(tmpbuf); + return CRYPT_INVALID_PACKET; + } + + if (padding == LTC_LTC_PKCS_1_PSS) { + /* PSS decode and verify it */ + err = pkcs_1_pss_decode(hash, hashlen, tmpbuf, x, saltlen, hash_idx, modulus_bitlen, stat); + } else { + /* LTC_PKCS #1 v1.5 decode it */ + unsigned char *out; + unsigned long outlen, loid[16]; + int decoded; + ltc_asn1_list digestinfo[2], siginfo[2]; + + /* not all hashes have OIDs... so sad */ + if (hash_descriptor[hash_idx].OIDlen == 0) { + err = CRYPT_INVALID_ARG; + goto bail_2; + } + + /* allocate temp buffer for decoded hash */ + outlen = ((modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0)) - 3; + out = XMALLOC(outlen); + if (out == NULL) { + err = CRYPT_MEM; + goto bail_2; + } + + if ((err = pkcs_1_v1_5_decode(tmpbuf, x, LTC_LTC_PKCS_1_EMSA, modulus_bitlen, out, &outlen, &decoded)) != CRYPT_OK) { + XFREE(out); + goto bail_2; + } + + /* now we must decode out[0...outlen-1] using ASN.1, test the OID and then test the hash */ + + /* construct the SEQUENCE + SEQUENCE { + SEQUENCE {hashoid OID + blah NULL + } + hash OCTET STRING + } + */ + LTC_SET_ASN1(digestinfo, 0, LTC_ASN1_OBJECT_IDENTIFIER, loid, sizeof(loid) / sizeof(loid[0])); + LTC_SET_ASN1(digestinfo, 1, LTC_ASN1_NULL, NULL, 0); + LTC_SET_ASN1(siginfo, 0, LTC_ASN1_SEQUENCE, digestinfo, 2); + LTC_SET_ASN1(siginfo, 1, LTC_ASN1_OCTET_STRING, tmpbuf, siglen); + + if ((err = der_decode_sequence(out, outlen, siginfo, 2)) != CRYPT_OK) { + XFREE(out); + goto bail_2; + } + + /* test OID */ + if ((digestinfo[0].size == hash_descriptor[hash_idx].OIDlen) && + (XMEMCMP(digestinfo[0].data, hash_descriptor[hash_idx].OID, sizeof(unsigned long) * hash_descriptor[hash_idx].OIDlen) == 0) && + (siginfo[1].size == hashlen) && + (XMEMCMP(siginfo[1].data, hash, hashlen) == 0)) { + *stat = 1; + } + + #ifdef LTC_CLEAN_STACK + zeromem(out, outlen); + #endif + XFREE(out); + } + +bail_2: + #ifdef LTC_CLEAN_STACK + zeromem(tmpbuf, siglen); + #endif + XFREE(tmpbuf); + return err; +} +#endif /* LTC_MRSA */ + +int rsa_create_signature(unsigned char *sig, unsigned long* siglen, + const unsigned char *hash, unsigned long hashlen, + rsa_key *key) { + return rsa_sign_hash_ex(hash, hashlen, sig, siglen, LTC_LTC_PKCS_1_V1_5, NULL, 0, 0, 0, key); +} + +int rsa_verify_signature(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int* stat, rsa_key *key) { + return rsa_verify_hash_ex(sig, siglen, hash, hashlen, LTC_LTC_PKCS_1_V1_5, 0, 0, stat, key); +} + +/* $Source: /cvs/libtom/libtomcrypt/src/pk/rsa/rsa_verify_hash.c,v $ */ +/* $Revision: 1.13 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file sprng.c + Secure PRNG, Tom St Denis + */ + +/* A secure PRNG using the RNG functions. Basically this is a + * wrapper that allows you to use a secure RNG as a PRNG + * in the various other functions. + */ + +#ifdef LTC_SPRNG + +const struct ltc_prng_descriptor sprng_desc = +{ + "sprng", 0, + &sprng_start, + &sprng_add_entropy, + &sprng_ready, + &sprng_read, + &sprng_done, + &sprng_export, + &sprng_import, + &sprng_test +}; + +/** + Start the PRNG + @param prng [out] The PRNG state to initialize + @return CRYPT_OK if successful + */ +int sprng_start(prng_state *prng) { + return CRYPT_OK; +} + +/** + Add entropy to the PRNG state + @param in The data to add + @param inlen Length of the data to add + @param prng PRNG state to update + @return CRYPT_OK if successful + */ +int sprng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng) { + return CRYPT_OK; +} + +/** + Make the PRNG ready to read from + @param prng The PRNG to make active + @return CRYPT_OK if successful + */ +int sprng_ready(prng_state *prng) { + return CRYPT_OK; +} + +/** + Read from the PRNG + @param out Destination + @param outlen Length of output + @param prng The active PRNG to read from + @return Number of octets read + */ +unsigned long sprng_read(unsigned char *out, unsigned long outlen, prng_state *prng) { + LTC_ARGCHK(out != NULL); + return rng_get_bytes(out, outlen, NULL); +} + +/** + Terminate the PRNG + @param prng The PRNG to terminate + @return CRYPT_OK if successful + */ +int sprng_done(prng_state *prng) { + return CRYPT_OK; +} + +/** + Export the PRNG state + @param out [out] Destination + @param outlen [in/out] Max size and resulting size of the state + @param prng The PRNG to export + @return CRYPT_OK if successful + */ +int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng) { + LTC_ARGCHK(outlen != NULL); + + *outlen = 0; + return CRYPT_OK; +} + +/** + Import a PRNG state + @param in The PRNG state + @param inlen Size of the state + @param prng The PRNG to import + @return CRYPT_OK if successful + */ +int sprng_import(const unsigned char *in, unsigned long inlen, prng_state *prng) { + return CRYPT_OK; +} + +/** + PRNG self-test + @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled + */ +int sprng_test(void) { + return CRYPT_OK; +} +#endif + + + +/* $Source: /cvs/libtom/libtomcrypt/src/prngs/sprng.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file zeromem.c + Zero a block of memory, Tom St Denis + */ + +/** + Zero a block of memory + @param out The destination of the area to zero + @param outlen The length of the area to zero (octets) + */ +void zeromem(void *out, size_t outlen) { + unsigned char *mem = out; + + LTC_ARGCHKVD(out != NULL); + while (outlen-- > 0) { + *mem++ = 0; + } +} + +/* $Source: /cvs/libtom/libtomcrypt/src/misc/zeromem.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file sha1.c + LTC_SHA1 code by Tom St Denis + */ + + +#ifdef LTC_SHA1 + +const struct ltc_hash_descriptor sha1_desc = +{ + "sha1", + 2, + 20, + 64, + + /* OID */ + { 1, 3, 14, 3, 2, 26, }, + 6, + + &sha1_init, + &sha1_process, + &sha1_done, + &sha1_test, + NULL +}; + + #define F0(x, y, z) (z ^ (x & (y ^ z))) + #define F1(x, y, z) (x ^ y ^ z) + #define F2(x, y, z) ((x & y) | (z & (x | y))) + #define F3(x, y, z) (x ^ y ^ z) + + #ifdef LTC_CLEAN_STACK +static int _sha1_compress(hash_state *md, unsigned char *buf) + #else +static int sha1_compress(hash_state *md, unsigned char *buf) + #endif +{ + ulong32 a, b, c, d, e, W[80], i; + + #ifdef LTC_SMALL_CODE + ulong32 t; + #endif + + /* copy the state into 512-bits into W[0..15] */ + for (i = 0; i < 16; i++) { + LOAD32H(W[i], buf + (4 * i)); + } + + /* copy state */ + a = md->sha1.state[0]; + b = md->sha1.state[1]; + c = md->sha1.state[2]; + d = md->sha1.state[3]; + e = md->sha1.state[4]; + + /* expand it */ + for (i = 16; i < 80; i++) { + W[i] = ROL(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + } + + /* compress */ + /* round one */ + #define FF0(a, b, c, d, e, i) e = (ROLc(a, 5) + F0(b, c, d) + e + W[i] + 0x5a827999UL); b = ROLc(b, 30); + #define FF1(a, b, c, d, e, i) e = (ROLc(a, 5) + F1(b, c, d) + e + W[i] + 0x6ed9eba1UL); b = ROLc(b, 30); + #define FF2(a, b, c, d, e, i) e = (ROLc(a, 5) + F2(b, c, d) + e + W[i] + 0x8f1bbcdcUL); b = ROLc(b, 30); + #define FF3(a, b, c, d, e, i) e = (ROLc(a, 5) + F3(b, c, d) + e + W[i] + 0xca62c1d6UL); b = ROLc(b, 30); + + #ifdef LTC_SMALL_CODE + for (i = 0; i < 20; ) { + FF0(a, b, c, d, e, i++); + t = e; + e = d; + d = c; + c = b; + b = a; + a = t; + } + + for ( ; i < 40; ) { + FF1(a, b, c, d, e, i++); + t = e; + e = d; + d = c; + c = b; + b = a; + a = t; + } + + for ( ; i < 60; ) { + FF2(a, b, c, d, e, i++); + t = e; + e = d; + d = c; + c = b; + b = a; + a = t; + } + + for ( ; i < 80; ) { + FF3(a, b, c, d, e, i++); + t = e; + e = d; + d = c; + c = b; + b = a; + a = t; + } + + #else + for (i = 0; i < 20; ) { + FF0(a, b, c, d, e, i++); + FF0(e, a, b, c, d, i++); + FF0(d, e, a, b, c, i++); + FF0(c, d, e, a, b, i++); + FF0(b, c, d, e, a, i++); + } + + /* round two */ + for ( ; i < 40; ) { + FF1(a, b, c, d, e, i++); + FF1(e, a, b, c, d, i++); + FF1(d, e, a, b, c, i++); + FF1(c, d, e, a, b, i++); + FF1(b, c, d, e, a, i++); + } + + /* round three */ + for ( ; i < 60; ) { + FF2(a, b, c, d, e, i++); + FF2(e, a, b, c, d, i++); + FF2(d, e, a, b, c, i++); + FF2(c, d, e, a, b, i++); + FF2(b, c, d, e, a, i++); + } + + /* round four */ + for ( ; i < 80; ) { + FF3(a, b, c, d, e, i++); + FF3(e, a, b, c, d, i++); + FF3(d, e, a, b, c, i++); + FF3(c, d, e, a, b, i++); + FF3(b, c, d, e, a, i++); + } + #endif + + #undef FF0 + #undef FF1 + #undef FF2 + #undef FF3 + + /* store */ + md->sha1.state[0] = md->sha1.state[0] + a; + md->sha1.state[1] = md->sha1.state[1] + b; + md->sha1.state[2] = md->sha1.state[2] + c; + md->sha1.state[3] = md->sha1.state[3] + d; + md->sha1.state[4] = md->sha1.state[4] + e; + + return CRYPT_OK; +} + + #ifdef LTC_CLEAN_STACK +static int sha1_compress(hash_state *md, unsigned char *buf) { + int err; + + err = _sha1_compress(md, buf); + burn_stack(sizeof(ulong32) * 87); + return err; +} + #endif + +/** + Initialize the hash state + @param md The hash state you wish to initialize + @return CRYPT_OK if successful + */ +int sha1_init(hash_state *md) { + LTC_ARGCHK(md != NULL); + md->sha1.state[0] = 0x67452301UL; + md->sha1.state[1] = 0xefcdab89UL; + md->sha1.state[2] = 0x98badcfeUL; + md->sha1.state[3] = 0x10325476UL; + md->sha1.state[4] = 0xc3d2e1f0UL; + md->sha1.curlen = 0; + md->sha1.length = 0; + return CRYPT_OK; +} + +/** + Process a block of memory though the hash + @param md The hash state + @param in The data to hash + @param inlen The length of the data (octets) + @return CRYPT_OK if successful + */ +HASH_PROCESS(sha1_process, sha1_compress, sha1, 64) + +/** + Terminate the hash to get the digest + @param md The hash state + @param out [out] The destination of the hash (20 bytes) + @return CRYPT_OK if successful + */ +int sha1_done(hash_state *md, unsigned char *out) { + int i; + + LTC_ARGCHK(md != NULL); + LTC_ARGCHK(out != NULL); + + if (md->sha1.curlen >= sizeof(md->sha1.buf)) { + return CRYPT_INVALID_ARG; + } + + /* increase the length of the message */ + md->sha1.length += md->sha1.curlen * 8; + + /* append the '1' bit */ + md->sha1.buf[md->sha1.curlen++] = (unsigned char)0x80; + + /* if the length is currently above 56 bytes we append zeros + * then compress. Then we can fall back to padding zeros and length + * encoding like normal. + */ + if (md->sha1.curlen > 56) { + while (md->sha1.curlen < 64) { + md->sha1.buf[md->sha1.curlen++] = (unsigned char)0; + } + sha1_compress(md, md->sha1.buf); + md->sha1.curlen = 0; + } + + /* pad upto 56 bytes of zeroes */ + while (md->sha1.curlen < 56) { + md->sha1.buf[md->sha1.curlen++] = (unsigned char)0; + } + + /* store length */ + STORE64H(md->sha1.length, md->sha1.buf + 56); + sha1_compress(md, md->sha1.buf); + + /* copy output */ + for (i = 0; i < 5; i++) { + STORE32H(md->sha1.state[i], out + (4 * i)); + } + #ifdef LTC_CLEAN_STACK + zeromem(md, sizeof(hash_state)); + #endif + return CRYPT_OK; +} + +/** + Self-test the hash + @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled + */ +int sha1_test(void) { + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const struct { + char *msg; + unsigned char hash[20]; + } tests[] = { + { "abc", + { 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, + 0xba, 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c, + 0x9c, 0xd0, 0xd8, 0x9d } }, + { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, + 0xBA, 0xAE, 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, + 0xE5, 0x46, 0x70, 0xF1 } } + }; + + int i; + unsigned char tmp[20]; + hash_state md; + + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { + sha1_init(&md); + sha1_process(&md, (unsigned char *)tests[i].msg, (unsigned long)strlen(tests[i].msg)); + sha1_done(&md, tmp); + if (XMEMCMP(tmp, tests[i].hash, 20) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + } + return CRYPT_OK; + #endif +} +#endif + + + +/* $Source: /cvs/libtom/libtomcrypt/src/hashes/sha1.c,v $ */ +/* $Revision: 1.10 $ */ +/* $Date: 2007/05/12 14:25:28 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file sha256.c + LTC_SHA256 by Tom St Denis +*/ + +#ifdef LTC_SHA256 + +const struct ltc_hash_descriptor sha256_desc = +{ + "sha256", + 0, + 32, + 64, + + /* OID */ + { 2, 16, 840, 1, 101, 3, 4, 2, 1, }, + 9, + + &sha256_init, + &sha256_process, + &sha256_done, + &sha256_test, + NULL +}; + +#ifdef LTC_SMALL_CODE +/* the K array */ +static const ulong32 K[64] = { + 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL, + 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL, + 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, + 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, + 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL, + 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL, + 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, + 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, + 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL, + 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL, + 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, + 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, + 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL +}; +#endif + +/* Various logical functions */ +#define Ch(x,y,z) (z ^ (x & (y ^ z))) +#define Maj(x,y,z) (((x | y) & z) | (x & y)) +#define S(x, n) RORc((x),(n)) +#define R(x, n) (((x)&0xFFFFFFFFUL)>>(n)) +#define Sigma0(x) (S(x, 2) ^ S(x, 13) ^ S(x, 22)) +#define Sigma1(x) (S(x, 6) ^ S(x, 11) ^ S(x, 25)) +#define Gamma0(x) (S(x, 7) ^ S(x, 18) ^ R(x, 3)) +#define Gamma1(x) (S(x, 17) ^ S(x, 19) ^ R(x, 10)) + +/* compress 512-bits */ +#ifdef LTC_CLEAN_STACK +static int _sha256_compress(hash_state * md, unsigned char *buf) +#else +static int sha256_compress(hash_state * md, unsigned char *buf) +#endif +{ + ulong32 S[8], W[64], t0, t1; +#ifdef LTC_SMALL_CODE + ulong32 t; +#endif + int i; + + /* copy state into S */ + for (i = 0; i < 8; i++) { + S[i] = md->sha256.state[i]; + } + + /* copy the state into 512-bits into W[0..15] */ + for (i = 0; i < 16; i++) { + LOAD32H(W[i], buf + (4*i)); + } + + /* fill W[16..63] */ + for (i = 16; i < 64; i++) { + W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]; + } + + /* Compress */ +#ifdef LTC_SMALL_CODE +#define RND(a,b,c,d,e,f,g,h,i) \ + t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ + t1 = Sigma0(a) + Maj(a, b, c); \ + d += t0; \ + h = t0 + t1; + + for (i = 0; i < 64; ++i) { + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i); + t = S[7]; S[7] = S[6]; S[6] = S[5]; S[5] = S[4]; + S[4] = S[3]; S[3] = S[2]; S[2] = S[1]; S[1] = S[0]; S[0] = t; + } +#else +#define RND(a,b,c,d,e,f,g,h,i,ki) \ + t0 = h + Sigma1(e) + Ch(e, f, g) + ki + W[i]; \ + t1 = Sigma0(a) + Maj(a, b, c); \ + d += t0; \ + h = t0 + t1; + + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],0,0x428a2f98); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],1,0x71374491); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],2,0xb5c0fbcf); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],3,0xe9b5dba5); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],4,0x3956c25b); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],5,0x59f111f1); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],6,0x923f82a4); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],7,0xab1c5ed5); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],8,0xd807aa98); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],9,0x12835b01); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],10,0x243185be); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],11,0x550c7dc3); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],12,0x72be5d74); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],13,0x80deb1fe); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],14,0x9bdc06a7); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],15,0xc19bf174); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],16,0xe49b69c1); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],17,0xefbe4786); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],18,0x0fc19dc6); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],19,0x240ca1cc); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],20,0x2de92c6f); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],21,0x4a7484aa); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],22,0x5cb0a9dc); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],23,0x76f988da); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],24,0x983e5152); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],25,0xa831c66d); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],26,0xb00327c8); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],27,0xbf597fc7); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],28,0xc6e00bf3); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],29,0xd5a79147); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],30,0x06ca6351); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],31,0x14292967); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],32,0x27b70a85); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],33,0x2e1b2138); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],34,0x4d2c6dfc); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],35,0x53380d13); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],36,0x650a7354); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],37,0x766a0abb); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],38,0x81c2c92e); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],39,0x92722c85); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],40,0xa2bfe8a1); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],41,0xa81a664b); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],42,0xc24b8b70); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],43,0xc76c51a3); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],44,0xd192e819); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],45,0xd6990624); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],46,0xf40e3585); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],47,0x106aa070); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],48,0x19a4c116); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],49,0x1e376c08); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],50,0x2748774c); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],51,0x34b0bcb5); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],52,0x391c0cb3); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],53,0x4ed8aa4a); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],54,0x5b9cca4f); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],55,0x682e6ff3); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],56,0x748f82ee); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],57,0x78a5636f); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],58,0x84c87814); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],59,0x8cc70208); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],60,0x90befffa); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],61,0xa4506ceb); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],62,0xbef9a3f7); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],63,0xc67178f2); + +#undef RND + +#endif + + /* feedback */ + for (i = 0; i < 8; i++) { + md->sha256.state[i] = md->sha256.state[i] + S[i]; + } + return CRYPT_OK; +} + +#ifdef LTC_CLEAN_STACK +static int sha256_compress(hash_state * md, unsigned char *buf) +{ + int err; + err = _sha256_compress(md, buf); + burn_stack(sizeof(ulong32) * 74); + return err; +} +#endif + +/** + Initialize the hash state + @param md The hash state you wish to initialize + @return CRYPT_OK if successful +*/ +int sha256_init(hash_state * md) +{ + LTC_ARGCHK(md != NULL); + + md->sha256.curlen = 0; + md->sha256.length = 0; + md->sha256.state[0] = 0x6A09E667UL; + md->sha256.state[1] = 0xBB67AE85UL; + md->sha256.state[2] = 0x3C6EF372UL; + md->sha256.state[3] = 0xA54FF53AUL; + md->sha256.state[4] = 0x510E527FUL; + md->sha256.state[5] = 0x9B05688CUL; + md->sha256.state[6] = 0x1F83D9ABUL; + md->sha256.state[7] = 0x5BE0CD19UL; + return CRYPT_OK; +} + +/** + Process a block of memory though the hash + @param md The hash state + @param in The data to hash + @param inlen The length of the data (octets) + @return CRYPT_OK if successful +*/ +HASH_PROCESS(sha256_process, sha256_compress, sha256, 64) + +/** + Terminate the hash to get the digest + @param md The hash state + @param out [out] The destination of the hash (32 bytes) + @return CRYPT_OK if successful +*/ +int sha256_done(hash_state * md, unsigned char *out) +{ + int i; + + LTC_ARGCHK(md != NULL); + LTC_ARGCHK(out != NULL); + + if (md->sha256.curlen >= sizeof(md->sha256.buf)) { + return CRYPT_INVALID_ARG; + } + + + /* increase the length of the message */ + md->sha256.length += md->sha256.curlen * 8; + + /* append the '1' bit */ + md->sha256.buf[md->sha256.curlen++] = (unsigned char)0x80; + + /* if the length is currently above 56 bytes we append zeros + * then compress. Then we can fall back to padding zeros and length + * encoding like normal. + */ + if (md->sha256.curlen > 56) { + while (md->sha256.curlen < 64) { + md->sha256.buf[md->sha256.curlen++] = (unsigned char)0; + } + sha256_compress(md, md->sha256.buf); + md->sha256.curlen = 0; + } + + /* pad upto 56 bytes of zeroes */ + while (md->sha256.curlen < 56) { + md->sha256.buf[md->sha256.curlen++] = (unsigned char)0; + } + + /* store length */ + STORE64H(md->sha256.length, md->sha256.buf+56); + sha256_compress(md, md->sha256.buf); + + /* copy output */ + for (i = 0; i < 8; i++) { + STORE32H(md->sha256.state[i], out+(4*i)); + } +#ifdef LTC_CLEAN_STACK + zeromem(md, sizeof(hash_state)); +#endif + return CRYPT_OK; +} + +/** + Self-test the hash + @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled +*/ +int sha256_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const struct { + char *msg; + unsigned char hash[32]; + } tests[] = { + { "abc", + { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, + 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, + 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, + 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad } + }, + { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + { 0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8, + 0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39, + 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67, + 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1 } + }, + }; + + int i; + unsigned char tmp[32]; + hash_state md; + + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { + sha256_init(&md); + sha256_process(&md, (unsigned char*)tests[i].msg, (unsigned long)strlen(tests[i].msg)); + sha256_done(&md, tmp); + if (XMEMCMP(tmp, tests[i].hash, 32) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + } + return CRYPT_OK; + #endif +} + +#endif + + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ +/** + @param sha384.c + LTC_SHA384 hash included in sha512.c, Tom St Denis +*/ + + + +#if defined(LTC_SHA384) && defined(LTC_SHA512) + +const struct ltc_hash_descriptor sha384_desc = +{ + "sha384", + 4, + 48, + 128, + + /* OID */ + { 2, 16, 840, 1, 101, 3, 4, 2, 2, }, + 9, + + &sha384_init, + &sha512_process, + &sha384_done, + &sha384_test, + NULL +}; + +/** + Initialize the hash state + @param md The hash state you wish to initialize + @return CRYPT_OK if successful +*/ +int sha384_init(hash_state * md) +{ + LTC_ARGCHK(md != NULL); + + md->sha512.curlen = 0; + md->sha512.length = 0; + md->sha512.state[0] = CONST64(0xcbbb9d5dc1059ed8); + md->sha512.state[1] = CONST64(0x629a292a367cd507); + md->sha512.state[2] = CONST64(0x9159015a3070dd17); + md->sha512.state[3] = CONST64(0x152fecd8f70e5939); + md->sha512.state[4] = CONST64(0x67332667ffc00b31); + md->sha512.state[5] = CONST64(0x8eb44a8768581511); + md->sha512.state[6] = CONST64(0xdb0c2e0d64f98fa7); + md->sha512.state[7] = CONST64(0x47b5481dbefa4fa4); + return CRYPT_OK; +} + +/** + Terminate the hash to get the digest + @param md The hash state + @param out [out] The destination of the hash (48 bytes) + @return CRYPT_OK if successful +*/ +int sha384_done(hash_state * md, unsigned char *out) +{ + unsigned char buf[64]; + + LTC_ARGCHK(md != NULL); + LTC_ARGCHK(out != NULL); + + if (md->sha512.curlen >= sizeof(md->sha512.buf)) { + return CRYPT_INVALID_ARG; + } + + sha512_done(md, buf); + XMEMCPY(out, buf, 48); +#ifdef LTC_CLEAN_STACK + zeromem(buf, sizeof(buf)); +#endif + return CRYPT_OK; +} + +/** + Self-test the hash + @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled +*/ +int sha384_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const struct { + char *msg; + unsigned char hash[48]; + } tests[] = { + { "abc", + { 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, + 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07, + 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, + 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed, + 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, + 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 } + }, + { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", + { 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8, + 0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47, + 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2, + 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12, + 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9, + 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39 } + }, + }; + + int i; + unsigned char tmp[48]; + hash_state md; + + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { + sha384_init(&md); + sha384_process(&md, (unsigned char*)tests[i].msg, (unsigned long)strlen(tests[i].msg)); + sha384_done(&md, tmp); + if (XMEMCMP(tmp, tests[i].hash, 48) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + } + return CRYPT_OK; + #endif +} + +#endif /* defined(LTC_SHA384) && defined(LTC_SHA512) */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @param sha512.c + LTC_SHA512 by Tom St Denis +*/ + +#ifdef LTC_SHA512 + +const struct ltc_hash_descriptor sha512_desc = +{ + "sha512", + 5, + 64, + 128, + + /* OID */ + { 2, 16, 840, 1, 101, 3, 4, 2, 3, }, + 9, + + &sha512_init, + &sha512_process, + &sha512_done, + &sha512_test, + NULL +}; + +/* the K array */ +static const ulong64 K[80] = { +CONST64(0x428a2f98d728ae22), CONST64(0x7137449123ef65cd), +CONST64(0xb5c0fbcfec4d3b2f), CONST64(0xe9b5dba58189dbbc), +CONST64(0x3956c25bf348b538), CONST64(0x59f111f1b605d019), +CONST64(0x923f82a4af194f9b), CONST64(0xab1c5ed5da6d8118), +CONST64(0xd807aa98a3030242), CONST64(0x12835b0145706fbe), +CONST64(0x243185be4ee4b28c), CONST64(0x550c7dc3d5ffb4e2), +CONST64(0x72be5d74f27b896f), CONST64(0x80deb1fe3b1696b1), +CONST64(0x9bdc06a725c71235), CONST64(0xc19bf174cf692694), +CONST64(0xe49b69c19ef14ad2), CONST64(0xefbe4786384f25e3), +CONST64(0x0fc19dc68b8cd5b5), CONST64(0x240ca1cc77ac9c65), +CONST64(0x2de92c6f592b0275), CONST64(0x4a7484aa6ea6e483), +CONST64(0x5cb0a9dcbd41fbd4), CONST64(0x76f988da831153b5), +CONST64(0x983e5152ee66dfab), CONST64(0xa831c66d2db43210), +CONST64(0xb00327c898fb213f), CONST64(0xbf597fc7beef0ee4), +CONST64(0xc6e00bf33da88fc2), CONST64(0xd5a79147930aa725), +CONST64(0x06ca6351e003826f), CONST64(0x142929670a0e6e70), +CONST64(0x27b70a8546d22ffc), CONST64(0x2e1b21385c26c926), +CONST64(0x4d2c6dfc5ac42aed), CONST64(0x53380d139d95b3df), +CONST64(0x650a73548baf63de), CONST64(0x766a0abb3c77b2a8), +CONST64(0x81c2c92e47edaee6), CONST64(0x92722c851482353b), +CONST64(0xa2bfe8a14cf10364), CONST64(0xa81a664bbc423001), +CONST64(0xc24b8b70d0f89791), CONST64(0xc76c51a30654be30), +CONST64(0xd192e819d6ef5218), CONST64(0xd69906245565a910), +CONST64(0xf40e35855771202a), CONST64(0x106aa07032bbd1b8), +CONST64(0x19a4c116b8d2d0c8), CONST64(0x1e376c085141ab53), +CONST64(0x2748774cdf8eeb99), CONST64(0x34b0bcb5e19b48a8), +CONST64(0x391c0cb3c5c95a63), CONST64(0x4ed8aa4ae3418acb), +CONST64(0x5b9cca4f7763e373), CONST64(0x682e6ff3d6b2b8a3), +CONST64(0x748f82ee5defb2fc), CONST64(0x78a5636f43172f60), +CONST64(0x84c87814a1f0ab72), CONST64(0x8cc702081a6439ec), +CONST64(0x90befffa23631e28), CONST64(0xa4506cebde82bde9), +CONST64(0xbef9a3f7b2c67915), CONST64(0xc67178f2e372532b), +CONST64(0xca273eceea26619c), CONST64(0xd186b8c721c0c207), +CONST64(0xeada7dd6cde0eb1e), CONST64(0xf57d4f7fee6ed178), +CONST64(0x06f067aa72176fba), CONST64(0x0a637dc5a2c898a6), +CONST64(0x113f9804bef90dae), CONST64(0x1b710b35131c471b), +CONST64(0x28db77f523047d84), CONST64(0x32caab7b40c72493), +CONST64(0x3c9ebe0a15c9bebc), CONST64(0x431d67c49c100d4c), +CONST64(0x4cc5d4becb3e42b6), CONST64(0x597f299cfc657e2a), +CONST64(0x5fcb6fab3ad6faec), CONST64(0x6c44198c4a475817) +}; + +/* Various logical functions */ +#undef S +#undef R +#undef Sigma0 +#undef Sigma1 +#undef Gamma0 +#undef Gamma1 + +#define Ch(x,y,z) (z ^ (x & (y ^ z))) +#define Maj(x,y,z) (((x | y) & z) | (x & y)) +#define S(x, n) ROR64c(x, n) +#define R(x, n) (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)n)) +#define Sigma0(x) (S(x, 28) ^ S(x, 34) ^ S(x, 39)) +#define Sigma1(x) (S(x, 14) ^ S(x, 18) ^ S(x, 41)) +#define Gamma0(x) (S(x, 1) ^ S(x, 8) ^ R(x, 7)) +#define Gamma1(x) (S(x, 19) ^ S(x, 61) ^ R(x, 6)) + +/* compress 1024-bits */ +#ifdef LTC_CLEAN_STACK +static int _sha512_compress(hash_state * md, unsigned char *buf) +#else +static int sha512_compress(hash_state * md, unsigned char *buf) +#endif +{ + ulong64 S[8], W[80], t0, t1; + int i; + + /* copy state into S */ + for (i = 0; i < 8; i++) { + S[i] = md->sha512.state[i]; + } + + /* copy the state into 1024-bits into W[0..15] */ + for (i = 0; i < 16; i++) { + LOAD64H(W[i], buf + (8*i)); + } + + /* fill W[16..79] */ + for (i = 16; i < 80; i++) { + W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]; + } + + /* Compress */ +#ifdef LTC_SMALL_CODE + for (i = 0; i < 80; i++) { + t0 = S[7] + Sigma1(S[4]) + Ch(S[4], S[5], S[6]) + K[i] + W[i]; + t1 = Sigma0(S[0]) + Maj(S[0], S[1], S[2]); + S[7] = S[6]; + S[6] = S[5]; + S[5] = S[4]; + S[4] = S[3] + t0; + S[3] = S[2]; + S[2] = S[1]; + S[1] = S[0]; + S[0] = t0 + t1; + } +#else +#define RND(a,b,c,d,e,f,g,h,i) \ + t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ + t1 = Sigma0(a) + Maj(a, b, c); \ + d += t0; \ + h = t0 + t1; + + for (i = 0; i < 80; i += 8) { + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i+0); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],i+1); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],i+2); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],i+3); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],i+4); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],i+5); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],i+6); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],i+7); + } +#endif + + + /* feedback */ + for (i = 0; i < 8; i++) { + md->sha512.state[i] = md->sha512.state[i] + S[i]; + } + + return CRYPT_OK; +} + +/* compress 1024-bits */ +#ifdef LTC_CLEAN_STACK +static int sha512_compress(hash_state * md, unsigned char *buf) +{ + int err; + err = _sha512_compress(md, buf); + burn_stack(sizeof(ulong64) * 90 + sizeof(int)); + return err; +} +#endif + +/** + Initialize the hash state + @param md The hash state you wish to initialize + @return CRYPT_OK if successful +*/ +int sha512_init(hash_state * md) +{ + LTC_ARGCHK(md != NULL); + md->sha512.curlen = 0; + md->sha512.length = 0; + md->sha512.state[0] = CONST64(0x6a09e667f3bcc908); + md->sha512.state[1] = CONST64(0xbb67ae8584caa73b); + md->sha512.state[2] = CONST64(0x3c6ef372fe94f82b); + md->sha512.state[3] = CONST64(0xa54ff53a5f1d36f1); + md->sha512.state[4] = CONST64(0x510e527fade682d1); + md->sha512.state[5] = CONST64(0x9b05688c2b3e6c1f); + md->sha512.state[6] = CONST64(0x1f83d9abfb41bd6b); + md->sha512.state[7] = CONST64(0x5be0cd19137e2179); + return CRYPT_OK; +} + +/** + Process a block of memory though the hash + @param md The hash state + @param in The data to hash + @param inlen The length of the data (octets) + @return CRYPT_OK if successful +*/ +HASH_PROCESS(sha512_process, sha512_compress, sha512, 128) + +/** + Terminate the hash to get the digest + @param md The hash state + @param out [out] The destination of the hash (64 bytes) + @return CRYPT_OK if successful +*/ +int sha512_done(hash_state * md, unsigned char *out) +{ + int i; + + LTC_ARGCHK(md != NULL); + LTC_ARGCHK(out != NULL); + + if (md->sha512.curlen >= sizeof(md->sha512.buf)) { + return CRYPT_INVALID_ARG; + } + + /* increase the length of the message */ + md->sha512.length += md->sha512.curlen * CONST64(8); + + /* append the '1' bit */ + md->sha512.buf[md->sha512.curlen++] = (unsigned char)0x80; + + /* if the length is currently above 112 bytes we append zeros + * then compress. Then we can fall back to padding zeros and length + * encoding like normal. + */ + if (md->sha512.curlen > 112) { + while (md->sha512.curlen < 128) { + md->sha512.buf[md->sha512.curlen++] = (unsigned char)0; + } + sha512_compress(md, md->sha512.buf); + md->sha512.curlen = 0; + } + + /* pad upto 120 bytes of zeroes + * note: that from 112 to 120 is the 64 MSB of the length. We assume that you won't hash + * > 2^64 bits of data... :-) + */ + while (md->sha512.curlen < 120) { + md->sha512.buf[md->sha512.curlen++] = (unsigned char)0; + } + + /* store length */ + STORE64H(md->sha512.length, md->sha512.buf+120); + sha512_compress(md, md->sha512.buf); + + /* copy output */ + for (i = 0; i < 8; i++) { + STORE64H(md->sha512.state[i], out+(8*i)); + } +#ifdef LTC_CLEAN_STACK + zeromem(md, sizeof(hash_state)); +#endif + return CRYPT_OK; +} + +/** + Self-test the hash + @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled +*/ +int sha512_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const struct { + char *msg; + unsigned char hash[64]; + } tests[] = { + { "abc", + { 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, + 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, + 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, + 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, + 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, + 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, + 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, + 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f } + }, + { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", + { 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda, + 0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f, + 0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1, + 0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18, + 0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4, + 0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a, + 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54, + 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09 } + }, + }; + + int i; + unsigned char tmp[64]; + hash_state md; + + for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { + sha512_init(&md); + sha512_process(&md, (unsigned char *)tests[i].msg, (unsigned long)strlen(tests[i].msg)); + sha512_done(&md, tmp); + if (XMEMCMP(tmp, tests[i].hash, 64) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + } + return CRYPT_OK; + #endif +} + +#endif + + + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file hmac_init.c + HMAC support, initialize state, Tom St Denis/Dobes Vandermeer +*/ + +#ifdef LTC_HMAC + +#define LTC_HMAC_BLOCKSIZE hash_descriptor[hash].blocksize + +/** + Initialize an HMAC context. + @param hmac The HMAC state + @param hash The index of the hash you want to use + @param key The secret key + @param keylen The length of the secret key (octets) + @return CRYPT_OK if successful +*/ +int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned long keylen) +{ + unsigned char *buf; + unsigned long hashsize; + unsigned long i, z; + int err; + + LTC_ARGCHK(hmac != NULL); + LTC_ARGCHK(key != NULL); + + /* valid hash? */ + if ((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + hmac->hash = hash; + hashsize = hash_descriptor[hash].hashsize; + + /* valid key length? */ + if (keylen == 0) { + return CRYPT_INVALID_KEYSIZE; + } + + /* allocate ram for buf */ + buf = XMALLOC(LTC_HMAC_BLOCKSIZE); + if (buf == NULL) { + return CRYPT_MEM; + } + + /* allocate memory for key */ + hmac->key = XMALLOC(LTC_HMAC_BLOCKSIZE); + if (hmac->key == NULL) { + XFREE(buf); + return CRYPT_MEM; + } + + /* (1) make sure we have a large enough key */ + if(keylen > LTC_HMAC_BLOCKSIZE) { + z = LTC_HMAC_BLOCKSIZE; + if ((err = hash_memory(hash, key, keylen, hmac->key, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + keylen = hashsize; + } else { + XMEMCPY(hmac->key, key, (size_t)keylen); + } + + if(keylen < LTC_HMAC_BLOCKSIZE) { + zeromem((hmac->key) + keylen, (size_t)(LTC_HMAC_BLOCKSIZE - keylen)); + } + + /* Create the initial vector for step (3) */ + for(i=0; i < LTC_HMAC_BLOCKSIZE; i++) { + buf[i] = hmac->key[i] ^ 0x36; + } + + /* Pre-pend that to the hash data */ + if ((err = hash_descriptor[hash].init(&hmac->md)) != CRYPT_OK) { + goto LBL_ERR; + } + + if ((err = hash_descriptor[hash].process(&hmac->md, buf, LTC_HMAC_BLOCKSIZE)) != CRYPT_OK) { + goto LBL_ERR; + } + goto done; +LBL_ERR: + /* free the key since we failed */ + XFREE(hmac->key); +done: +#ifdef LTC_CLEAN_STACK + zeromem(buf, LTC_HMAC_BLOCKSIZE); +#endif + + XFREE(buf); + return err; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file hmac_process.c + HMAC support, process data, Tom St Denis/Dobes Vandermeer +*/ + +#ifdef LTC_HMAC + +/** + Process data through HMAC + @param hmac The hmac state + @param in The data to send through HMAC + @param inlen The length of the data to HMAC (octets) + @return CRYPT_OK if successful +*/ +int hmac_process(hmac_state *hmac, const unsigned char *in, unsigned long inlen) +{ + int err; + LTC_ARGCHK(hmac != NULL); + LTC_ARGCHK(in != NULL); + if ((err = hash_is_valid(hmac->hash)) != CRYPT_OK) { + return err; + } + return hash_descriptor[hmac->hash].process(&hmac->md, in, inlen); +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file hmac_done.c + HMAC support, terminate stream, Tom St Denis/Dobes Vandermeer +*/ + +#ifdef LTC_HMAC + +#define LTC_HMAC_BLOCKSIZE hash_descriptor[hash].blocksize + +/** + Terminate an HMAC session + @param hmac The HMAC state + @param out [out] The destination of the HMAC authentication tag + @param outlen [in/out] The max size and resulting size of the HMAC authentication tag + @return CRYPT_OK if successful +*/ +int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen) +{ + unsigned char *buf, *isha; + unsigned long hashsize, i; + int hash, err; + + LTC_ARGCHK(hmac != NULL); + LTC_ARGCHK(out != NULL); + + /* test hash */ + hash = hmac->hash; + if((err = hash_is_valid(hash)) != CRYPT_OK) { + return err; + } + + /* get the hash message digest size */ + hashsize = hash_descriptor[hash].hashsize; + + /* allocate buffers */ + buf = XMALLOC(LTC_HMAC_BLOCKSIZE); + isha = XMALLOC(hashsize); + if (buf == NULL || isha == NULL) { + if (buf != NULL) { + XFREE(buf); + } + if (isha != NULL) { + XFREE(isha); + } + return CRYPT_MEM; + } + + /* Get the hash of the first HMAC vector plus the data */ + if ((err = hash_descriptor[hash].done(&hmac->md, isha)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* Create the second HMAC vector vector for step (3) */ + for(i=0; i < LTC_HMAC_BLOCKSIZE; i++) { + buf[i] = hmac->key[i] ^ 0x5C; + } + + /* Now calculate the "outer" hash for step (5), (6), and (7) */ + if ((err = hash_descriptor[hash].init(&hmac->md)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = hash_descriptor[hash].process(&hmac->md, buf, LTC_HMAC_BLOCKSIZE)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = hash_descriptor[hash].process(&hmac->md, isha, hashsize)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = hash_descriptor[hash].done(&hmac->md, buf)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* copy to output */ + for (i = 0; i < hashsize && i < *outlen; i++) { + out[i] = buf[i]; + } + *outlen = i; + + err = CRYPT_OK; +LBL_ERR: + XFREE(hmac->key); +#ifdef LTC_CLEAN_STACK + zeromem(isha, hashsize); + zeromem(buf, hashsize); + zeromem(hmac, sizeof(*hmac)); +#endif + + XFREE(isha); + XFREE(buf); + + return err; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +#define __LTC_AES_TAB_C__ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ +/* The precomputed tables for AES */ +/* +Te0[x] = S [x].[02, 01, 01, 03]; +Te1[x] = S [x].[03, 02, 01, 01]; +Te2[x] = S [x].[01, 03, 02, 01]; +Te3[x] = S [x].[01, 01, 03, 02]; +Te4[x] = S [x].[01, 01, 01, 01]; + +Td0[x] = Si[x].[0e, 09, 0d, 0b]; +Td1[x] = Si[x].[0b, 0e, 09, 0d]; +Td2[x] = Si[x].[0d, 0b, 0e, 09]; +Td3[x] = Si[x].[09, 0d, 0b, 0e]; +Td4[x] = Si[x].[01, 01, 01, 01]; +*/ + +#ifdef __LTC_AES_TAB_C__ + +/** + @file aes_tab.c + AES tables +*/ +static const ulong32 TE0[256] = { + 0xc66363a5UL, 0xf87c7c84UL, 0xee777799UL, 0xf67b7b8dUL, + 0xfff2f20dUL, 0xd66b6bbdUL, 0xde6f6fb1UL, 0x91c5c554UL, + 0x60303050UL, 0x02010103UL, 0xce6767a9UL, 0x562b2b7dUL, + 0xe7fefe19UL, 0xb5d7d762UL, 0x4dababe6UL, 0xec76769aUL, + 0x8fcaca45UL, 0x1f82829dUL, 0x89c9c940UL, 0xfa7d7d87UL, + 0xeffafa15UL, 0xb25959ebUL, 0x8e4747c9UL, 0xfbf0f00bUL, + 0x41adadecUL, 0xb3d4d467UL, 0x5fa2a2fdUL, 0x45afafeaUL, + 0x239c9cbfUL, 0x53a4a4f7UL, 0xe4727296UL, 0x9bc0c05bUL, + 0x75b7b7c2UL, 0xe1fdfd1cUL, 0x3d9393aeUL, 0x4c26266aUL, + 0x6c36365aUL, 0x7e3f3f41UL, 0xf5f7f702UL, 0x83cccc4fUL, + 0x6834345cUL, 0x51a5a5f4UL, 0xd1e5e534UL, 0xf9f1f108UL, + 0xe2717193UL, 0xabd8d873UL, 0x62313153UL, 0x2a15153fUL, + 0x0804040cUL, 0x95c7c752UL, 0x46232365UL, 0x9dc3c35eUL, + 0x30181828UL, 0x379696a1UL, 0x0a05050fUL, 0x2f9a9ab5UL, + 0x0e070709UL, 0x24121236UL, 0x1b80809bUL, 0xdfe2e23dUL, + 0xcdebeb26UL, 0x4e272769UL, 0x7fb2b2cdUL, 0xea75759fUL, + 0x1209091bUL, 0x1d83839eUL, 0x582c2c74UL, 0x341a1a2eUL, + 0x361b1b2dUL, 0xdc6e6eb2UL, 0xb45a5aeeUL, 0x5ba0a0fbUL, + 0xa45252f6UL, 0x763b3b4dUL, 0xb7d6d661UL, 0x7db3b3ceUL, + 0x5229297bUL, 0xdde3e33eUL, 0x5e2f2f71UL, 0x13848497UL, + 0xa65353f5UL, 0xb9d1d168UL, 0x00000000UL, 0xc1eded2cUL, + 0x40202060UL, 0xe3fcfc1fUL, 0x79b1b1c8UL, 0xb65b5bedUL, + 0xd46a6abeUL, 0x8dcbcb46UL, 0x67bebed9UL, 0x7239394bUL, + 0x944a4adeUL, 0x984c4cd4UL, 0xb05858e8UL, 0x85cfcf4aUL, + 0xbbd0d06bUL, 0xc5efef2aUL, 0x4faaaae5UL, 0xedfbfb16UL, + 0x864343c5UL, 0x9a4d4dd7UL, 0x66333355UL, 0x11858594UL, + 0x8a4545cfUL, 0xe9f9f910UL, 0x04020206UL, 0xfe7f7f81UL, + 0xa05050f0UL, 0x783c3c44UL, 0x259f9fbaUL, 0x4ba8a8e3UL, + 0xa25151f3UL, 0x5da3a3feUL, 0x804040c0UL, 0x058f8f8aUL, + 0x3f9292adUL, 0x219d9dbcUL, 0x70383848UL, 0xf1f5f504UL, + 0x63bcbcdfUL, 0x77b6b6c1UL, 0xafdada75UL, 0x42212163UL, + 0x20101030UL, 0xe5ffff1aUL, 0xfdf3f30eUL, 0xbfd2d26dUL, + 0x81cdcd4cUL, 0x180c0c14UL, 0x26131335UL, 0xc3ecec2fUL, + 0xbe5f5fe1UL, 0x359797a2UL, 0x884444ccUL, 0x2e171739UL, + 0x93c4c457UL, 0x55a7a7f2UL, 0xfc7e7e82UL, 0x7a3d3d47UL, + 0xc86464acUL, 0xba5d5de7UL, 0x3219192bUL, 0xe6737395UL, + 0xc06060a0UL, 0x19818198UL, 0x9e4f4fd1UL, 0xa3dcdc7fUL, + 0x44222266UL, 0x542a2a7eUL, 0x3b9090abUL, 0x0b888883UL, + 0x8c4646caUL, 0xc7eeee29UL, 0x6bb8b8d3UL, 0x2814143cUL, + 0xa7dede79UL, 0xbc5e5ee2UL, 0x160b0b1dUL, 0xaddbdb76UL, + 0xdbe0e03bUL, 0x64323256UL, 0x743a3a4eUL, 0x140a0a1eUL, + 0x924949dbUL, 0x0c06060aUL, 0x4824246cUL, 0xb85c5ce4UL, + 0x9fc2c25dUL, 0xbdd3d36eUL, 0x43acacefUL, 0xc46262a6UL, + 0x399191a8UL, 0x319595a4UL, 0xd3e4e437UL, 0xf279798bUL, + 0xd5e7e732UL, 0x8bc8c843UL, 0x6e373759UL, 0xda6d6db7UL, + 0x018d8d8cUL, 0xb1d5d564UL, 0x9c4e4ed2UL, 0x49a9a9e0UL, + 0xd86c6cb4UL, 0xac5656faUL, 0xf3f4f407UL, 0xcfeaea25UL, + 0xca6565afUL, 0xf47a7a8eUL, 0x47aeaee9UL, 0x10080818UL, + 0x6fbabad5UL, 0xf0787888UL, 0x4a25256fUL, 0x5c2e2e72UL, + 0x381c1c24UL, 0x57a6a6f1UL, 0x73b4b4c7UL, 0x97c6c651UL, + 0xcbe8e823UL, 0xa1dddd7cUL, 0xe874749cUL, 0x3e1f1f21UL, + 0x964b4bddUL, 0x61bdbddcUL, 0x0d8b8b86UL, 0x0f8a8a85UL, + 0xe0707090UL, 0x7c3e3e42UL, 0x71b5b5c4UL, 0xcc6666aaUL, + 0x904848d8UL, 0x06030305UL, 0xf7f6f601UL, 0x1c0e0e12UL, + 0xc26161a3UL, 0x6a35355fUL, 0xae5757f9UL, 0x69b9b9d0UL, + 0x17868691UL, 0x99c1c158UL, 0x3a1d1d27UL, 0x279e9eb9UL, + 0xd9e1e138UL, 0xebf8f813UL, 0x2b9898b3UL, 0x22111133UL, + 0xd26969bbUL, 0xa9d9d970UL, 0x078e8e89UL, 0x339494a7UL, + 0x2d9b9bb6UL, 0x3c1e1e22UL, 0x15878792UL, 0xc9e9e920UL, + 0x87cece49UL, 0xaa5555ffUL, 0x50282878UL, 0xa5dfdf7aUL, + 0x038c8c8fUL, 0x59a1a1f8UL, 0x09898980UL, 0x1a0d0d17UL, + 0x65bfbfdaUL, 0xd7e6e631UL, 0x844242c6UL, 0xd06868b8UL, + 0x824141c3UL, 0x299999b0UL, 0x5a2d2d77UL, 0x1e0f0f11UL, + 0x7bb0b0cbUL, 0xa85454fcUL, 0x6dbbbbd6UL, 0x2c16163aUL, +}; + +#ifndef PELI_TAB +static const ulong32 Te4[256] = { + 0x63636363UL, 0x7c7c7c7cUL, 0x77777777UL, 0x7b7b7b7bUL, + 0xf2f2f2f2UL, 0x6b6b6b6bUL, 0x6f6f6f6fUL, 0xc5c5c5c5UL, + 0x30303030UL, 0x01010101UL, 0x67676767UL, 0x2b2b2b2bUL, + 0xfefefefeUL, 0xd7d7d7d7UL, 0xababababUL, 0x76767676UL, + 0xcacacacaUL, 0x82828282UL, 0xc9c9c9c9UL, 0x7d7d7d7dUL, + 0xfafafafaUL, 0x59595959UL, 0x47474747UL, 0xf0f0f0f0UL, + 0xadadadadUL, 0xd4d4d4d4UL, 0xa2a2a2a2UL, 0xafafafafUL, + 0x9c9c9c9cUL, 0xa4a4a4a4UL, 0x72727272UL, 0xc0c0c0c0UL, + 0xb7b7b7b7UL, 0xfdfdfdfdUL, 0x93939393UL, 0x26262626UL, + 0x36363636UL, 0x3f3f3f3fUL, 0xf7f7f7f7UL, 0xccccccccUL, + 0x34343434UL, 0xa5a5a5a5UL, 0xe5e5e5e5UL, 0xf1f1f1f1UL, + 0x71717171UL, 0xd8d8d8d8UL, 0x31313131UL, 0x15151515UL, + 0x04040404UL, 0xc7c7c7c7UL, 0x23232323UL, 0xc3c3c3c3UL, + 0x18181818UL, 0x96969696UL, 0x05050505UL, 0x9a9a9a9aUL, + 0x07070707UL, 0x12121212UL, 0x80808080UL, 0xe2e2e2e2UL, + 0xebebebebUL, 0x27272727UL, 0xb2b2b2b2UL, 0x75757575UL, + 0x09090909UL, 0x83838383UL, 0x2c2c2c2cUL, 0x1a1a1a1aUL, + 0x1b1b1b1bUL, 0x6e6e6e6eUL, 0x5a5a5a5aUL, 0xa0a0a0a0UL, + 0x52525252UL, 0x3b3b3b3bUL, 0xd6d6d6d6UL, 0xb3b3b3b3UL, + 0x29292929UL, 0xe3e3e3e3UL, 0x2f2f2f2fUL, 0x84848484UL, + 0x53535353UL, 0xd1d1d1d1UL, 0x00000000UL, 0xededededUL, + 0x20202020UL, 0xfcfcfcfcUL, 0xb1b1b1b1UL, 0x5b5b5b5bUL, + 0x6a6a6a6aUL, 0xcbcbcbcbUL, 0xbebebebeUL, 0x39393939UL, + 0x4a4a4a4aUL, 0x4c4c4c4cUL, 0x58585858UL, 0xcfcfcfcfUL, + 0xd0d0d0d0UL, 0xefefefefUL, 0xaaaaaaaaUL, 0xfbfbfbfbUL, + 0x43434343UL, 0x4d4d4d4dUL, 0x33333333UL, 0x85858585UL, + 0x45454545UL, 0xf9f9f9f9UL, 0x02020202UL, 0x7f7f7f7fUL, + 0x50505050UL, 0x3c3c3c3cUL, 0x9f9f9f9fUL, 0xa8a8a8a8UL, + 0x51515151UL, 0xa3a3a3a3UL, 0x40404040UL, 0x8f8f8f8fUL, + 0x92929292UL, 0x9d9d9d9dUL, 0x38383838UL, 0xf5f5f5f5UL, + 0xbcbcbcbcUL, 0xb6b6b6b6UL, 0xdadadadaUL, 0x21212121UL, + 0x10101010UL, 0xffffffffUL, 0xf3f3f3f3UL, 0xd2d2d2d2UL, + 0xcdcdcdcdUL, 0x0c0c0c0cUL, 0x13131313UL, 0xececececUL, + 0x5f5f5f5fUL, 0x97979797UL, 0x44444444UL, 0x17171717UL, + 0xc4c4c4c4UL, 0xa7a7a7a7UL, 0x7e7e7e7eUL, 0x3d3d3d3dUL, + 0x64646464UL, 0x5d5d5d5dUL, 0x19191919UL, 0x73737373UL, + 0x60606060UL, 0x81818181UL, 0x4f4f4f4fUL, 0xdcdcdcdcUL, + 0x22222222UL, 0x2a2a2a2aUL, 0x90909090UL, 0x88888888UL, + 0x46464646UL, 0xeeeeeeeeUL, 0xb8b8b8b8UL, 0x14141414UL, + 0xdedededeUL, 0x5e5e5e5eUL, 0x0b0b0b0bUL, 0xdbdbdbdbUL, + 0xe0e0e0e0UL, 0x32323232UL, 0x3a3a3a3aUL, 0x0a0a0a0aUL, + 0x49494949UL, 0x06060606UL, 0x24242424UL, 0x5c5c5c5cUL, + 0xc2c2c2c2UL, 0xd3d3d3d3UL, 0xacacacacUL, 0x62626262UL, + 0x91919191UL, 0x95959595UL, 0xe4e4e4e4UL, 0x79797979UL, + 0xe7e7e7e7UL, 0xc8c8c8c8UL, 0x37373737UL, 0x6d6d6d6dUL, + 0x8d8d8d8dUL, 0xd5d5d5d5UL, 0x4e4e4e4eUL, 0xa9a9a9a9UL, + 0x6c6c6c6cUL, 0x56565656UL, 0xf4f4f4f4UL, 0xeaeaeaeaUL, + 0x65656565UL, 0x7a7a7a7aUL, 0xaeaeaeaeUL, 0x08080808UL, + 0xbabababaUL, 0x78787878UL, 0x25252525UL, 0x2e2e2e2eUL, + 0x1c1c1c1cUL, 0xa6a6a6a6UL, 0xb4b4b4b4UL, 0xc6c6c6c6UL, + 0xe8e8e8e8UL, 0xddddddddUL, 0x74747474UL, 0x1f1f1f1fUL, + 0x4b4b4b4bUL, 0xbdbdbdbdUL, 0x8b8b8b8bUL, 0x8a8a8a8aUL, + 0x70707070UL, 0x3e3e3e3eUL, 0xb5b5b5b5UL, 0x66666666UL, + 0x48484848UL, 0x03030303UL, 0xf6f6f6f6UL, 0x0e0e0e0eUL, + 0x61616161UL, 0x35353535UL, 0x57575757UL, 0xb9b9b9b9UL, + 0x86868686UL, 0xc1c1c1c1UL, 0x1d1d1d1dUL, 0x9e9e9e9eUL, + 0xe1e1e1e1UL, 0xf8f8f8f8UL, 0x98989898UL, 0x11111111UL, + 0x69696969UL, 0xd9d9d9d9UL, 0x8e8e8e8eUL, 0x94949494UL, + 0x9b9b9b9bUL, 0x1e1e1e1eUL, 0x87878787UL, 0xe9e9e9e9UL, + 0xcecececeUL, 0x55555555UL, 0x28282828UL, 0xdfdfdfdfUL, + 0x8c8c8c8cUL, 0xa1a1a1a1UL, 0x89898989UL, 0x0d0d0d0dUL, + 0xbfbfbfbfUL, 0xe6e6e6e6UL, 0x42424242UL, 0x68686868UL, + 0x41414141UL, 0x99999999UL, 0x2d2d2d2dUL, 0x0f0f0f0fUL, + 0xb0b0b0b0UL, 0x54545454UL, 0xbbbbbbbbUL, 0x16161616UL, +}; +#endif + +#ifndef ENCRYPT_ONLY + +static const ulong32 TD0[256] = { + 0x51f4a750UL, 0x7e416553UL, 0x1a17a4c3UL, 0x3a275e96UL, + 0x3bab6bcbUL, 0x1f9d45f1UL, 0xacfa58abUL, 0x4be30393UL, + 0x2030fa55UL, 0xad766df6UL, 0x88cc7691UL, 0xf5024c25UL, + 0x4fe5d7fcUL, 0xc52acbd7UL, 0x26354480UL, 0xb562a38fUL, + 0xdeb15a49UL, 0x25ba1b67UL, 0x45ea0e98UL, 0x5dfec0e1UL, + 0xc32f7502UL, 0x814cf012UL, 0x8d4697a3UL, 0x6bd3f9c6UL, + 0x038f5fe7UL, 0x15929c95UL, 0xbf6d7aebUL, 0x955259daUL, + 0xd4be832dUL, 0x587421d3UL, 0x49e06929UL, 0x8ec9c844UL, + 0x75c2896aUL, 0xf48e7978UL, 0x99583e6bUL, 0x27b971ddUL, + 0xbee14fb6UL, 0xf088ad17UL, 0xc920ac66UL, 0x7dce3ab4UL, + 0x63df4a18UL, 0xe51a3182UL, 0x97513360UL, 0x62537f45UL, + 0xb16477e0UL, 0xbb6bae84UL, 0xfe81a01cUL, 0xf9082b94UL, + 0x70486858UL, 0x8f45fd19UL, 0x94de6c87UL, 0x527bf8b7UL, + 0xab73d323UL, 0x724b02e2UL, 0xe31f8f57UL, 0x6655ab2aUL, + 0xb2eb2807UL, 0x2fb5c203UL, 0x86c57b9aUL, 0xd33708a5UL, + 0x302887f2UL, 0x23bfa5b2UL, 0x02036abaUL, 0xed16825cUL, + 0x8acf1c2bUL, 0xa779b492UL, 0xf307f2f0UL, 0x4e69e2a1UL, + 0x65daf4cdUL, 0x0605bed5UL, 0xd134621fUL, 0xc4a6fe8aUL, + 0x342e539dUL, 0xa2f355a0UL, 0x058ae132UL, 0xa4f6eb75UL, + 0x0b83ec39UL, 0x4060efaaUL, 0x5e719f06UL, 0xbd6e1051UL, + 0x3e218af9UL, 0x96dd063dUL, 0xdd3e05aeUL, 0x4de6bd46UL, + 0x91548db5UL, 0x71c45d05UL, 0x0406d46fUL, 0x605015ffUL, + 0x1998fb24UL, 0xd6bde997UL, 0x894043ccUL, 0x67d99e77UL, + 0xb0e842bdUL, 0x07898b88UL, 0xe7195b38UL, 0x79c8eedbUL, + 0xa17c0a47UL, 0x7c420fe9UL, 0xf8841ec9UL, 0x00000000UL, + 0x09808683UL, 0x322bed48UL, 0x1e1170acUL, 0x6c5a724eUL, + 0xfd0efffbUL, 0x0f853856UL, 0x3daed51eUL, 0x362d3927UL, + 0x0a0fd964UL, 0x685ca621UL, 0x9b5b54d1UL, 0x24362e3aUL, + 0x0c0a67b1UL, 0x9357e70fUL, 0xb4ee96d2UL, 0x1b9b919eUL, + 0x80c0c54fUL, 0x61dc20a2UL, 0x5a774b69UL, 0x1c121a16UL, + 0xe293ba0aUL, 0xc0a02ae5UL, 0x3c22e043UL, 0x121b171dUL, + 0x0e090d0bUL, 0xf28bc7adUL, 0x2db6a8b9UL, 0x141ea9c8UL, + 0x57f11985UL, 0xaf75074cUL, 0xee99ddbbUL, 0xa37f60fdUL, + 0xf701269fUL, 0x5c72f5bcUL, 0x44663bc5UL, 0x5bfb7e34UL, + 0x8b432976UL, 0xcb23c6dcUL, 0xb6edfc68UL, 0xb8e4f163UL, + 0xd731dccaUL, 0x42638510UL, 0x13972240UL, 0x84c61120UL, + 0x854a247dUL, 0xd2bb3df8UL, 0xaef93211UL, 0xc729a16dUL, + 0x1d9e2f4bUL, 0xdcb230f3UL, 0x0d8652ecUL, 0x77c1e3d0UL, + 0x2bb3166cUL, 0xa970b999UL, 0x119448faUL, 0x47e96422UL, + 0xa8fc8cc4UL, 0xa0f03f1aUL, 0x567d2cd8UL, 0x223390efUL, + 0x87494ec7UL, 0xd938d1c1UL, 0x8ccaa2feUL, 0x98d40b36UL, + 0xa6f581cfUL, 0xa57ade28UL, 0xdab78e26UL, 0x3fadbfa4UL, + 0x2c3a9de4UL, 0x5078920dUL, 0x6a5fcc9bUL, 0x547e4662UL, + 0xf68d13c2UL, 0x90d8b8e8UL, 0x2e39f75eUL, 0x82c3aff5UL, + 0x9f5d80beUL, 0x69d0937cUL, 0x6fd52da9UL, 0xcf2512b3UL, + 0xc8ac993bUL, 0x10187da7UL, 0xe89c636eUL, 0xdb3bbb7bUL, + 0xcd267809UL, 0x6e5918f4UL, 0xec9ab701UL, 0x834f9aa8UL, + 0xe6956e65UL, 0xaaffe67eUL, 0x21bccf08UL, 0xef15e8e6UL, + 0xbae79bd9UL, 0x4a6f36ceUL, 0xea9f09d4UL, 0x29b07cd6UL, + 0x31a4b2afUL, 0x2a3f2331UL, 0xc6a59430UL, 0x35a266c0UL, + 0x744ebc37UL, 0xfc82caa6UL, 0xe090d0b0UL, 0x33a7d815UL, + 0xf104984aUL, 0x41ecdaf7UL, 0x7fcd500eUL, 0x1791f62fUL, + 0x764dd68dUL, 0x43efb04dUL, 0xccaa4d54UL, 0xe49604dfUL, + 0x9ed1b5e3UL, 0x4c6a881bUL, 0xc12c1fb8UL, 0x4665517fUL, + 0x9d5eea04UL, 0x018c355dUL, 0xfa877473UL, 0xfb0b412eUL, + 0xb3671d5aUL, 0x92dbd252UL, 0xe9105633UL, 0x6dd64713UL, + 0x9ad7618cUL, 0x37a10c7aUL, 0x59f8148eUL, 0xeb133c89UL, + 0xcea927eeUL, 0xb761c935UL, 0xe11ce5edUL, 0x7a47b13cUL, + 0x9cd2df59UL, 0x55f2733fUL, 0x1814ce79UL, 0x73c737bfUL, + 0x53f7cdeaUL, 0x5ffdaa5bUL, 0xdf3d6f14UL, 0x7844db86UL, + 0xcaaff381UL, 0xb968c43eUL, 0x3824342cUL, 0xc2a3405fUL, + 0x161dc372UL, 0xbce2250cUL, 0x283c498bUL, 0xff0d9541UL, + 0x39a80171UL, 0x080cb3deUL, 0xd8b4e49cUL, 0x6456c190UL, + 0x7bcb8461UL, 0xd532b670UL, 0x486c5c74UL, 0xd0b85742UL, +}; + +static const ulong32 Td4[256] = { + 0x52525252UL, 0x09090909UL, 0x6a6a6a6aUL, 0xd5d5d5d5UL, + 0x30303030UL, 0x36363636UL, 0xa5a5a5a5UL, 0x38383838UL, + 0xbfbfbfbfUL, 0x40404040UL, 0xa3a3a3a3UL, 0x9e9e9e9eUL, + 0x81818181UL, 0xf3f3f3f3UL, 0xd7d7d7d7UL, 0xfbfbfbfbUL, + 0x7c7c7c7cUL, 0xe3e3e3e3UL, 0x39393939UL, 0x82828282UL, + 0x9b9b9b9bUL, 0x2f2f2f2fUL, 0xffffffffUL, 0x87878787UL, + 0x34343434UL, 0x8e8e8e8eUL, 0x43434343UL, 0x44444444UL, + 0xc4c4c4c4UL, 0xdedededeUL, 0xe9e9e9e9UL, 0xcbcbcbcbUL, + 0x54545454UL, 0x7b7b7b7bUL, 0x94949494UL, 0x32323232UL, + 0xa6a6a6a6UL, 0xc2c2c2c2UL, 0x23232323UL, 0x3d3d3d3dUL, + 0xeeeeeeeeUL, 0x4c4c4c4cUL, 0x95959595UL, 0x0b0b0b0bUL, + 0x42424242UL, 0xfafafafaUL, 0xc3c3c3c3UL, 0x4e4e4e4eUL, + 0x08080808UL, 0x2e2e2e2eUL, 0xa1a1a1a1UL, 0x66666666UL, + 0x28282828UL, 0xd9d9d9d9UL, 0x24242424UL, 0xb2b2b2b2UL, + 0x76767676UL, 0x5b5b5b5bUL, 0xa2a2a2a2UL, 0x49494949UL, + 0x6d6d6d6dUL, 0x8b8b8b8bUL, 0xd1d1d1d1UL, 0x25252525UL, + 0x72727272UL, 0xf8f8f8f8UL, 0xf6f6f6f6UL, 0x64646464UL, + 0x86868686UL, 0x68686868UL, 0x98989898UL, 0x16161616UL, + 0xd4d4d4d4UL, 0xa4a4a4a4UL, 0x5c5c5c5cUL, 0xccccccccUL, + 0x5d5d5d5dUL, 0x65656565UL, 0xb6b6b6b6UL, 0x92929292UL, + 0x6c6c6c6cUL, 0x70707070UL, 0x48484848UL, 0x50505050UL, + 0xfdfdfdfdUL, 0xededededUL, 0xb9b9b9b9UL, 0xdadadadaUL, + 0x5e5e5e5eUL, 0x15151515UL, 0x46464646UL, 0x57575757UL, + 0xa7a7a7a7UL, 0x8d8d8d8dUL, 0x9d9d9d9dUL, 0x84848484UL, + 0x90909090UL, 0xd8d8d8d8UL, 0xababababUL, 0x00000000UL, + 0x8c8c8c8cUL, 0xbcbcbcbcUL, 0xd3d3d3d3UL, 0x0a0a0a0aUL, + 0xf7f7f7f7UL, 0xe4e4e4e4UL, 0x58585858UL, 0x05050505UL, + 0xb8b8b8b8UL, 0xb3b3b3b3UL, 0x45454545UL, 0x06060606UL, + 0xd0d0d0d0UL, 0x2c2c2c2cUL, 0x1e1e1e1eUL, 0x8f8f8f8fUL, + 0xcacacacaUL, 0x3f3f3f3fUL, 0x0f0f0f0fUL, 0x02020202UL, + 0xc1c1c1c1UL, 0xafafafafUL, 0xbdbdbdbdUL, 0x03030303UL, + 0x01010101UL, 0x13131313UL, 0x8a8a8a8aUL, 0x6b6b6b6bUL, + 0x3a3a3a3aUL, 0x91919191UL, 0x11111111UL, 0x41414141UL, + 0x4f4f4f4fUL, 0x67676767UL, 0xdcdcdcdcUL, 0xeaeaeaeaUL, + 0x97979797UL, 0xf2f2f2f2UL, 0xcfcfcfcfUL, 0xcecececeUL, + 0xf0f0f0f0UL, 0xb4b4b4b4UL, 0xe6e6e6e6UL, 0x73737373UL, + 0x96969696UL, 0xacacacacUL, 0x74747474UL, 0x22222222UL, + 0xe7e7e7e7UL, 0xadadadadUL, 0x35353535UL, 0x85858585UL, + 0xe2e2e2e2UL, 0xf9f9f9f9UL, 0x37373737UL, 0xe8e8e8e8UL, + 0x1c1c1c1cUL, 0x75757575UL, 0xdfdfdfdfUL, 0x6e6e6e6eUL, + 0x47474747UL, 0xf1f1f1f1UL, 0x1a1a1a1aUL, 0x71717171UL, + 0x1d1d1d1dUL, 0x29292929UL, 0xc5c5c5c5UL, 0x89898989UL, + 0x6f6f6f6fUL, 0xb7b7b7b7UL, 0x62626262UL, 0x0e0e0e0eUL, + 0xaaaaaaaaUL, 0x18181818UL, 0xbebebebeUL, 0x1b1b1b1bUL, + 0xfcfcfcfcUL, 0x56565656UL, 0x3e3e3e3eUL, 0x4b4b4b4bUL, + 0xc6c6c6c6UL, 0xd2d2d2d2UL, 0x79797979UL, 0x20202020UL, + 0x9a9a9a9aUL, 0xdbdbdbdbUL, 0xc0c0c0c0UL, 0xfefefefeUL, + 0x78787878UL, 0xcdcdcdcdUL, 0x5a5a5a5aUL, 0xf4f4f4f4UL, + 0x1f1f1f1fUL, 0xddddddddUL, 0xa8a8a8a8UL, 0x33333333UL, + 0x88888888UL, 0x07070707UL, 0xc7c7c7c7UL, 0x31313131UL, + 0xb1b1b1b1UL, 0x12121212UL, 0x10101010UL, 0x59595959UL, + 0x27272727UL, 0x80808080UL, 0xececececUL, 0x5f5f5f5fUL, + 0x60606060UL, 0x51515151UL, 0x7f7f7f7fUL, 0xa9a9a9a9UL, + 0x19191919UL, 0xb5b5b5b5UL, 0x4a4a4a4aUL, 0x0d0d0d0dUL, + 0x2d2d2d2dUL, 0xe5e5e5e5UL, 0x7a7a7a7aUL, 0x9f9f9f9fUL, + 0x93939393UL, 0xc9c9c9c9UL, 0x9c9c9c9cUL, 0xefefefefUL, + 0xa0a0a0a0UL, 0xe0e0e0e0UL, 0x3b3b3b3bUL, 0x4d4d4d4dUL, + 0xaeaeaeaeUL, 0x2a2a2a2aUL, 0xf5f5f5f5UL, 0xb0b0b0b0UL, + 0xc8c8c8c8UL, 0xebebebebUL, 0xbbbbbbbbUL, 0x3c3c3c3cUL, + 0x83838383UL, 0x53535353UL, 0x99999999UL, 0x61616161UL, + 0x17171717UL, 0x2b2b2b2bUL, 0x04040404UL, 0x7e7e7e7eUL, + 0xbabababaUL, 0x77777777UL, 0xd6d6d6d6UL, 0x26262626UL, + 0xe1e1e1e1UL, 0x69696969UL, 0x14141414UL, 0x63636363UL, + 0x55555555UL, 0x21212121UL, 0x0c0c0c0cUL, 0x7d7d7d7dUL, +}; + +#endif /* ENCRYPT_ONLY */ + +#ifdef LTC_SMALL_CODE + +#define Te0(x) TE0[x] +#define Te1(x) RORc(TE0[x], 8) +#define Te2(x) RORc(TE0[x], 16) +#define Te3(x) RORc(TE0[x], 24) + +#define Td0(x) TD0[x] +#define Td1(x) RORc(TD0[x], 8) +#define Td2(x) RORc(TD0[x], 16) +#define Td3(x) RORc(TD0[x], 24) + +#define Te4_0 0x000000FF & Te4 +#define Te4_1 0x0000FF00 & Te4 +#define Te4_2 0x00FF0000 & Te4 +#define Te4_3 0xFF000000 & Te4 + +#else + +#define Te0(x) TE0[x] +#define Te1(x) TE1[x] +#define Te2(x) TE2[x] +#define Te3(x) TE3[x] + +#define Td0(x) TD0[x] +#define Td1(x) TD1[x] +#define Td2(x) TD2[x] +#define Td3(x) TD3[x] + +static const ulong32 TE1[256] = { + 0xa5c66363UL, 0x84f87c7cUL, 0x99ee7777UL, 0x8df67b7bUL, + 0x0dfff2f2UL, 0xbdd66b6bUL, 0xb1de6f6fUL, 0x5491c5c5UL, + 0x50603030UL, 0x03020101UL, 0xa9ce6767UL, 0x7d562b2bUL, + 0x19e7fefeUL, 0x62b5d7d7UL, 0xe64dababUL, 0x9aec7676UL, + 0x458fcacaUL, 0x9d1f8282UL, 0x4089c9c9UL, 0x87fa7d7dUL, + 0x15effafaUL, 0xebb25959UL, 0xc98e4747UL, 0x0bfbf0f0UL, + 0xec41adadUL, 0x67b3d4d4UL, 0xfd5fa2a2UL, 0xea45afafUL, + 0xbf239c9cUL, 0xf753a4a4UL, 0x96e47272UL, 0x5b9bc0c0UL, + 0xc275b7b7UL, 0x1ce1fdfdUL, 0xae3d9393UL, 0x6a4c2626UL, + 0x5a6c3636UL, 0x417e3f3fUL, 0x02f5f7f7UL, 0x4f83ccccUL, + 0x5c683434UL, 0xf451a5a5UL, 0x34d1e5e5UL, 0x08f9f1f1UL, + 0x93e27171UL, 0x73abd8d8UL, 0x53623131UL, 0x3f2a1515UL, + 0x0c080404UL, 0x5295c7c7UL, 0x65462323UL, 0x5e9dc3c3UL, + 0x28301818UL, 0xa1379696UL, 0x0f0a0505UL, 0xb52f9a9aUL, + 0x090e0707UL, 0x36241212UL, 0x9b1b8080UL, 0x3ddfe2e2UL, + 0x26cdebebUL, 0x694e2727UL, 0xcd7fb2b2UL, 0x9fea7575UL, + 0x1b120909UL, 0x9e1d8383UL, 0x74582c2cUL, 0x2e341a1aUL, + 0x2d361b1bUL, 0xb2dc6e6eUL, 0xeeb45a5aUL, 0xfb5ba0a0UL, + 0xf6a45252UL, 0x4d763b3bUL, 0x61b7d6d6UL, 0xce7db3b3UL, + 0x7b522929UL, 0x3edde3e3UL, 0x715e2f2fUL, 0x97138484UL, + 0xf5a65353UL, 0x68b9d1d1UL, 0x00000000UL, 0x2cc1ededUL, + 0x60402020UL, 0x1fe3fcfcUL, 0xc879b1b1UL, 0xedb65b5bUL, + 0xbed46a6aUL, 0x468dcbcbUL, 0xd967bebeUL, 0x4b723939UL, + 0xde944a4aUL, 0xd4984c4cUL, 0xe8b05858UL, 0x4a85cfcfUL, + 0x6bbbd0d0UL, 0x2ac5efefUL, 0xe54faaaaUL, 0x16edfbfbUL, + 0xc5864343UL, 0xd79a4d4dUL, 0x55663333UL, 0x94118585UL, + 0xcf8a4545UL, 0x10e9f9f9UL, 0x06040202UL, 0x81fe7f7fUL, + 0xf0a05050UL, 0x44783c3cUL, 0xba259f9fUL, 0xe34ba8a8UL, + 0xf3a25151UL, 0xfe5da3a3UL, 0xc0804040UL, 0x8a058f8fUL, + 0xad3f9292UL, 0xbc219d9dUL, 0x48703838UL, 0x04f1f5f5UL, + 0xdf63bcbcUL, 0xc177b6b6UL, 0x75afdadaUL, 0x63422121UL, + 0x30201010UL, 0x1ae5ffffUL, 0x0efdf3f3UL, 0x6dbfd2d2UL, + 0x4c81cdcdUL, 0x14180c0cUL, 0x35261313UL, 0x2fc3ececUL, + 0xe1be5f5fUL, 0xa2359797UL, 0xcc884444UL, 0x392e1717UL, + 0x5793c4c4UL, 0xf255a7a7UL, 0x82fc7e7eUL, 0x477a3d3dUL, + 0xacc86464UL, 0xe7ba5d5dUL, 0x2b321919UL, 0x95e67373UL, + 0xa0c06060UL, 0x98198181UL, 0xd19e4f4fUL, 0x7fa3dcdcUL, + 0x66442222UL, 0x7e542a2aUL, 0xab3b9090UL, 0x830b8888UL, + 0xca8c4646UL, 0x29c7eeeeUL, 0xd36bb8b8UL, 0x3c281414UL, + 0x79a7dedeUL, 0xe2bc5e5eUL, 0x1d160b0bUL, 0x76addbdbUL, + 0x3bdbe0e0UL, 0x56643232UL, 0x4e743a3aUL, 0x1e140a0aUL, + 0xdb924949UL, 0x0a0c0606UL, 0x6c482424UL, 0xe4b85c5cUL, + 0x5d9fc2c2UL, 0x6ebdd3d3UL, 0xef43acacUL, 0xa6c46262UL, + 0xa8399191UL, 0xa4319595UL, 0x37d3e4e4UL, 0x8bf27979UL, + 0x32d5e7e7UL, 0x438bc8c8UL, 0x596e3737UL, 0xb7da6d6dUL, + 0x8c018d8dUL, 0x64b1d5d5UL, 0xd29c4e4eUL, 0xe049a9a9UL, + 0xb4d86c6cUL, 0xfaac5656UL, 0x07f3f4f4UL, 0x25cfeaeaUL, + 0xafca6565UL, 0x8ef47a7aUL, 0xe947aeaeUL, 0x18100808UL, + 0xd56fbabaUL, 0x88f07878UL, 0x6f4a2525UL, 0x725c2e2eUL, + 0x24381c1cUL, 0xf157a6a6UL, 0xc773b4b4UL, 0x5197c6c6UL, + 0x23cbe8e8UL, 0x7ca1ddddUL, 0x9ce87474UL, 0x213e1f1fUL, + 0xdd964b4bUL, 0xdc61bdbdUL, 0x860d8b8bUL, 0x850f8a8aUL, + 0x90e07070UL, 0x427c3e3eUL, 0xc471b5b5UL, 0xaacc6666UL, + 0xd8904848UL, 0x05060303UL, 0x01f7f6f6UL, 0x121c0e0eUL, + 0xa3c26161UL, 0x5f6a3535UL, 0xf9ae5757UL, 0xd069b9b9UL, + 0x91178686UL, 0x5899c1c1UL, 0x273a1d1dUL, 0xb9279e9eUL, + 0x38d9e1e1UL, 0x13ebf8f8UL, 0xb32b9898UL, 0x33221111UL, + 0xbbd26969UL, 0x70a9d9d9UL, 0x89078e8eUL, 0xa7339494UL, + 0xb62d9b9bUL, 0x223c1e1eUL, 0x92158787UL, 0x20c9e9e9UL, + 0x4987ceceUL, 0xffaa5555UL, 0x78502828UL, 0x7aa5dfdfUL, + 0x8f038c8cUL, 0xf859a1a1UL, 0x80098989UL, 0x171a0d0dUL, + 0xda65bfbfUL, 0x31d7e6e6UL, 0xc6844242UL, 0xb8d06868UL, + 0xc3824141UL, 0xb0299999UL, 0x775a2d2dUL, 0x111e0f0fUL, + 0xcb7bb0b0UL, 0xfca85454UL, 0xd66dbbbbUL, 0x3a2c1616UL, +}; +static const ulong32 TE2[256] = { + 0x63a5c663UL, 0x7c84f87cUL, 0x7799ee77UL, 0x7b8df67bUL, + 0xf20dfff2UL, 0x6bbdd66bUL, 0x6fb1de6fUL, 0xc55491c5UL, + 0x30506030UL, 0x01030201UL, 0x67a9ce67UL, 0x2b7d562bUL, + 0xfe19e7feUL, 0xd762b5d7UL, 0xabe64dabUL, 0x769aec76UL, + 0xca458fcaUL, 0x829d1f82UL, 0xc94089c9UL, 0x7d87fa7dUL, + 0xfa15effaUL, 0x59ebb259UL, 0x47c98e47UL, 0xf00bfbf0UL, + 0xadec41adUL, 0xd467b3d4UL, 0xa2fd5fa2UL, 0xafea45afUL, + 0x9cbf239cUL, 0xa4f753a4UL, 0x7296e472UL, 0xc05b9bc0UL, + 0xb7c275b7UL, 0xfd1ce1fdUL, 0x93ae3d93UL, 0x266a4c26UL, + 0x365a6c36UL, 0x3f417e3fUL, 0xf702f5f7UL, 0xcc4f83ccUL, + 0x345c6834UL, 0xa5f451a5UL, 0xe534d1e5UL, 0xf108f9f1UL, + 0x7193e271UL, 0xd873abd8UL, 0x31536231UL, 0x153f2a15UL, + 0x040c0804UL, 0xc75295c7UL, 0x23654623UL, 0xc35e9dc3UL, + 0x18283018UL, 0x96a13796UL, 0x050f0a05UL, 0x9ab52f9aUL, + 0x07090e07UL, 0x12362412UL, 0x809b1b80UL, 0xe23ddfe2UL, + 0xeb26cdebUL, 0x27694e27UL, 0xb2cd7fb2UL, 0x759fea75UL, + 0x091b1209UL, 0x839e1d83UL, 0x2c74582cUL, 0x1a2e341aUL, + 0x1b2d361bUL, 0x6eb2dc6eUL, 0x5aeeb45aUL, 0xa0fb5ba0UL, + 0x52f6a452UL, 0x3b4d763bUL, 0xd661b7d6UL, 0xb3ce7db3UL, + 0x297b5229UL, 0xe33edde3UL, 0x2f715e2fUL, 0x84971384UL, + 0x53f5a653UL, 0xd168b9d1UL, 0x00000000UL, 0xed2cc1edUL, + 0x20604020UL, 0xfc1fe3fcUL, 0xb1c879b1UL, 0x5bedb65bUL, + 0x6abed46aUL, 0xcb468dcbUL, 0xbed967beUL, 0x394b7239UL, + 0x4ade944aUL, 0x4cd4984cUL, 0x58e8b058UL, 0xcf4a85cfUL, + 0xd06bbbd0UL, 0xef2ac5efUL, 0xaae54faaUL, 0xfb16edfbUL, + 0x43c58643UL, 0x4dd79a4dUL, 0x33556633UL, 0x85941185UL, + 0x45cf8a45UL, 0xf910e9f9UL, 0x02060402UL, 0x7f81fe7fUL, + 0x50f0a050UL, 0x3c44783cUL, 0x9fba259fUL, 0xa8e34ba8UL, + 0x51f3a251UL, 0xa3fe5da3UL, 0x40c08040UL, 0x8f8a058fUL, + 0x92ad3f92UL, 0x9dbc219dUL, 0x38487038UL, 0xf504f1f5UL, + 0xbcdf63bcUL, 0xb6c177b6UL, 0xda75afdaUL, 0x21634221UL, + 0x10302010UL, 0xff1ae5ffUL, 0xf30efdf3UL, 0xd26dbfd2UL, + 0xcd4c81cdUL, 0x0c14180cUL, 0x13352613UL, 0xec2fc3ecUL, + 0x5fe1be5fUL, 0x97a23597UL, 0x44cc8844UL, 0x17392e17UL, + 0xc45793c4UL, 0xa7f255a7UL, 0x7e82fc7eUL, 0x3d477a3dUL, + 0x64acc864UL, 0x5de7ba5dUL, 0x192b3219UL, 0x7395e673UL, + 0x60a0c060UL, 0x81981981UL, 0x4fd19e4fUL, 0xdc7fa3dcUL, + 0x22664422UL, 0x2a7e542aUL, 0x90ab3b90UL, 0x88830b88UL, + 0x46ca8c46UL, 0xee29c7eeUL, 0xb8d36bb8UL, 0x143c2814UL, + 0xde79a7deUL, 0x5ee2bc5eUL, 0x0b1d160bUL, 0xdb76addbUL, + 0xe03bdbe0UL, 0x32566432UL, 0x3a4e743aUL, 0x0a1e140aUL, + 0x49db9249UL, 0x060a0c06UL, 0x246c4824UL, 0x5ce4b85cUL, + 0xc25d9fc2UL, 0xd36ebdd3UL, 0xacef43acUL, 0x62a6c462UL, + 0x91a83991UL, 0x95a43195UL, 0xe437d3e4UL, 0x798bf279UL, + 0xe732d5e7UL, 0xc8438bc8UL, 0x37596e37UL, 0x6db7da6dUL, + 0x8d8c018dUL, 0xd564b1d5UL, 0x4ed29c4eUL, 0xa9e049a9UL, + 0x6cb4d86cUL, 0x56faac56UL, 0xf407f3f4UL, 0xea25cfeaUL, + 0x65afca65UL, 0x7a8ef47aUL, 0xaee947aeUL, 0x08181008UL, + 0xbad56fbaUL, 0x7888f078UL, 0x256f4a25UL, 0x2e725c2eUL, + 0x1c24381cUL, 0xa6f157a6UL, 0xb4c773b4UL, 0xc65197c6UL, + 0xe823cbe8UL, 0xdd7ca1ddUL, 0x749ce874UL, 0x1f213e1fUL, + 0x4bdd964bUL, 0xbddc61bdUL, 0x8b860d8bUL, 0x8a850f8aUL, + 0x7090e070UL, 0x3e427c3eUL, 0xb5c471b5UL, 0x66aacc66UL, + 0x48d89048UL, 0x03050603UL, 0xf601f7f6UL, 0x0e121c0eUL, + 0x61a3c261UL, 0x355f6a35UL, 0x57f9ae57UL, 0xb9d069b9UL, + 0x86911786UL, 0xc15899c1UL, 0x1d273a1dUL, 0x9eb9279eUL, + 0xe138d9e1UL, 0xf813ebf8UL, 0x98b32b98UL, 0x11332211UL, + 0x69bbd269UL, 0xd970a9d9UL, 0x8e89078eUL, 0x94a73394UL, + 0x9bb62d9bUL, 0x1e223c1eUL, 0x87921587UL, 0xe920c9e9UL, + 0xce4987ceUL, 0x55ffaa55UL, 0x28785028UL, 0xdf7aa5dfUL, + 0x8c8f038cUL, 0xa1f859a1UL, 0x89800989UL, 0x0d171a0dUL, + 0xbfda65bfUL, 0xe631d7e6UL, 0x42c68442UL, 0x68b8d068UL, + 0x41c38241UL, 0x99b02999UL, 0x2d775a2dUL, 0x0f111e0fUL, + 0xb0cb7bb0UL, 0x54fca854UL, 0xbbd66dbbUL, 0x163a2c16UL, +}; +static const ulong32 TE3[256] = { + + 0x6363a5c6UL, 0x7c7c84f8UL, 0x777799eeUL, 0x7b7b8df6UL, + 0xf2f20dffUL, 0x6b6bbdd6UL, 0x6f6fb1deUL, 0xc5c55491UL, + 0x30305060UL, 0x01010302UL, 0x6767a9ceUL, 0x2b2b7d56UL, + 0xfefe19e7UL, 0xd7d762b5UL, 0xababe64dUL, 0x76769aecUL, + 0xcaca458fUL, 0x82829d1fUL, 0xc9c94089UL, 0x7d7d87faUL, + 0xfafa15efUL, 0x5959ebb2UL, 0x4747c98eUL, 0xf0f00bfbUL, + 0xadadec41UL, 0xd4d467b3UL, 0xa2a2fd5fUL, 0xafafea45UL, + 0x9c9cbf23UL, 0xa4a4f753UL, 0x727296e4UL, 0xc0c05b9bUL, + 0xb7b7c275UL, 0xfdfd1ce1UL, 0x9393ae3dUL, 0x26266a4cUL, + 0x36365a6cUL, 0x3f3f417eUL, 0xf7f702f5UL, 0xcccc4f83UL, + 0x34345c68UL, 0xa5a5f451UL, 0xe5e534d1UL, 0xf1f108f9UL, + 0x717193e2UL, 0xd8d873abUL, 0x31315362UL, 0x15153f2aUL, + 0x04040c08UL, 0xc7c75295UL, 0x23236546UL, 0xc3c35e9dUL, + 0x18182830UL, 0x9696a137UL, 0x05050f0aUL, 0x9a9ab52fUL, + 0x0707090eUL, 0x12123624UL, 0x80809b1bUL, 0xe2e23ddfUL, + 0xebeb26cdUL, 0x2727694eUL, 0xb2b2cd7fUL, 0x75759feaUL, + 0x09091b12UL, 0x83839e1dUL, 0x2c2c7458UL, 0x1a1a2e34UL, + 0x1b1b2d36UL, 0x6e6eb2dcUL, 0x5a5aeeb4UL, 0xa0a0fb5bUL, + 0x5252f6a4UL, 0x3b3b4d76UL, 0xd6d661b7UL, 0xb3b3ce7dUL, + 0x29297b52UL, 0xe3e33eddUL, 0x2f2f715eUL, 0x84849713UL, + 0x5353f5a6UL, 0xd1d168b9UL, 0x00000000UL, 0xeded2cc1UL, + 0x20206040UL, 0xfcfc1fe3UL, 0xb1b1c879UL, 0x5b5bedb6UL, + 0x6a6abed4UL, 0xcbcb468dUL, 0xbebed967UL, 0x39394b72UL, + 0x4a4ade94UL, 0x4c4cd498UL, 0x5858e8b0UL, 0xcfcf4a85UL, + 0xd0d06bbbUL, 0xefef2ac5UL, 0xaaaae54fUL, 0xfbfb16edUL, + 0x4343c586UL, 0x4d4dd79aUL, 0x33335566UL, 0x85859411UL, + 0x4545cf8aUL, 0xf9f910e9UL, 0x02020604UL, 0x7f7f81feUL, + 0x5050f0a0UL, 0x3c3c4478UL, 0x9f9fba25UL, 0xa8a8e34bUL, + 0x5151f3a2UL, 0xa3a3fe5dUL, 0x4040c080UL, 0x8f8f8a05UL, + 0x9292ad3fUL, 0x9d9dbc21UL, 0x38384870UL, 0xf5f504f1UL, + 0xbcbcdf63UL, 0xb6b6c177UL, 0xdada75afUL, 0x21216342UL, + 0x10103020UL, 0xffff1ae5UL, 0xf3f30efdUL, 0xd2d26dbfUL, + 0xcdcd4c81UL, 0x0c0c1418UL, 0x13133526UL, 0xecec2fc3UL, + 0x5f5fe1beUL, 0x9797a235UL, 0x4444cc88UL, 0x1717392eUL, + 0xc4c45793UL, 0xa7a7f255UL, 0x7e7e82fcUL, 0x3d3d477aUL, + 0x6464acc8UL, 0x5d5de7baUL, 0x19192b32UL, 0x737395e6UL, + 0x6060a0c0UL, 0x81819819UL, 0x4f4fd19eUL, 0xdcdc7fa3UL, + 0x22226644UL, 0x2a2a7e54UL, 0x9090ab3bUL, 0x8888830bUL, + 0x4646ca8cUL, 0xeeee29c7UL, 0xb8b8d36bUL, 0x14143c28UL, + 0xdede79a7UL, 0x5e5ee2bcUL, 0x0b0b1d16UL, 0xdbdb76adUL, + 0xe0e03bdbUL, 0x32325664UL, 0x3a3a4e74UL, 0x0a0a1e14UL, + 0x4949db92UL, 0x06060a0cUL, 0x24246c48UL, 0x5c5ce4b8UL, + 0xc2c25d9fUL, 0xd3d36ebdUL, 0xacacef43UL, 0x6262a6c4UL, + 0x9191a839UL, 0x9595a431UL, 0xe4e437d3UL, 0x79798bf2UL, + 0xe7e732d5UL, 0xc8c8438bUL, 0x3737596eUL, 0x6d6db7daUL, + 0x8d8d8c01UL, 0xd5d564b1UL, 0x4e4ed29cUL, 0xa9a9e049UL, + 0x6c6cb4d8UL, 0x5656faacUL, 0xf4f407f3UL, 0xeaea25cfUL, + 0x6565afcaUL, 0x7a7a8ef4UL, 0xaeaee947UL, 0x08081810UL, + 0xbabad56fUL, 0x787888f0UL, 0x25256f4aUL, 0x2e2e725cUL, + 0x1c1c2438UL, 0xa6a6f157UL, 0xb4b4c773UL, 0xc6c65197UL, + 0xe8e823cbUL, 0xdddd7ca1UL, 0x74749ce8UL, 0x1f1f213eUL, + 0x4b4bdd96UL, 0xbdbddc61UL, 0x8b8b860dUL, 0x8a8a850fUL, + 0x707090e0UL, 0x3e3e427cUL, 0xb5b5c471UL, 0x6666aaccUL, + 0x4848d890UL, 0x03030506UL, 0xf6f601f7UL, 0x0e0e121cUL, + 0x6161a3c2UL, 0x35355f6aUL, 0x5757f9aeUL, 0xb9b9d069UL, + 0x86869117UL, 0xc1c15899UL, 0x1d1d273aUL, 0x9e9eb927UL, + 0xe1e138d9UL, 0xf8f813ebUL, 0x9898b32bUL, 0x11113322UL, + 0x6969bbd2UL, 0xd9d970a9UL, 0x8e8e8907UL, 0x9494a733UL, + 0x9b9bb62dUL, 0x1e1e223cUL, 0x87879215UL, 0xe9e920c9UL, + 0xcece4987UL, 0x5555ffaaUL, 0x28287850UL, 0xdfdf7aa5UL, + 0x8c8c8f03UL, 0xa1a1f859UL, 0x89898009UL, 0x0d0d171aUL, + 0xbfbfda65UL, 0xe6e631d7UL, 0x4242c684UL, 0x6868b8d0UL, + 0x4141c382UL, 0x9999b029UL, 0x2d2d775aUL, 0x0f0f111eUL, + 0xb0b0cb7bUL, 0x5454fca8UL, 0xbbbbd66dUL, 0x16163a2cUL, +}; + +#ifndef PELI_TAB +static const ulong32 Te4_0[] = { +0x00000063UL, 0x0000007cUL, 0x00000077UL, 0x0000007bUL, 0x000000f2UL, 0x0000006bUL, 0x0000006fUL, 0x000000c5UL, +0x00000030UL, 0x00000001UL, 0x00000067UL, 0x0000002bUL, 0x000000feUL, 0x000000d7UL, 0x000000abUL, 0x00000076UL, +0x000000caUL, 0x00000082UL, 0x000000c9UL, 0x0000007dUL, 0x000000faUL, 0x00000059UL, 0x00000047UL, 0x000000f0UL, +0x000000adUL, 0x000000d4UL, 0x000000a2UL, 0x000000afUL, 0x0000009cUL, 0x000000a4UL, 0x00000072UL, 0x000000c0UL, +0x000000b7UL, 0x000000fdUL, 0x00000093UL, 0x00000026UL, 0x00000036UL, 0x0000003fUL, 0x000000f7UL, 0x000000ccUL, +0x00000034UL, 0x000000a5UL, 0x000000e5UL, 0x000000f1UL, 0x00000071UL, 0x000000d8UL, 0x00000031UL, 0x00000015UL, +0x00000004UL, 0x000000c7UL, 0x00000023UL, 0x000000c3UL, 0x00000018UL, 0x00000096UL, 0x00000005UL, 0x0000009aUL, +0x00000007UL, 0x00000012UL, 0x00000080UL, 0x000000e2UL, 0x000000ebUL, 0x00000027UL, 0x000000b2UL, 0x00000075UL, +0x00000009UL, 0x00000083UL, 0x0000002cUL, 0x0000001aUL, 0x0000001bUL, 0x0000006eUL, 0x0000005aUL, 0x000000a0UL, +0x00000052UL, 0x0000003bUL, 0x000000d6UL, 0x000000b3UL, 0x00000029UL, 0x000000e3UL, 0x0000002fUL, 0x00000084UL, +0x00000053UL, 0x000000d1UL, 0x00000000UL, 0x000000edUL, 0x00000020UL, 0x000000fcUL, 0x000000b1UL, 0x0000005bUL, +0x0000006aUL, 0x000000cbUL, 0x000000beUL, 0x00000039UL, 0x0000004aUL, 0x0000004cUL, 0x00000058UL, 0x000000cfUL, +0x000000d0UL, 0x000000efUL, 0x000000aaUL, 0x000000fbUL, 0x00000043UL, 0x0000004dUL, 0x00000033UL, 0x00000085UL, +0x00000045UL, 0x000000f9UL, 0x00000002UL, 0x0000007fUL, 0x00000050UL, 0x0000003cUL, 0x0000009fUL, 0x000000a8UL, +0x00000051UL, 0x000000a3UL, 0x00000040UL, 0x0000008fUL, 0x00000092UL, 0x0000009dUL, 0x00000038UL, 0x000000f5UL, +0x000000bcUL, 0x000000b6UL, 0x000000daUL, 0x00000021UL, 0x00000010UL, 0x000000ffUL, 0x000000f3UL, 0x000000d2UL, +0x000000cdUL, 0x0000000cUL, 0x00000013UL, 0x000000ecUL, 0x0000005fUL, 0x00000097UL, 0x00000044UL, 0x00000017UL, +0x000000c4UL, 0x000000a7UL, 0x0000007eUL, 0x0000003dUL, 0x00000064UL, 0x0000005dUL, 0x00000019UL, 0x00000073UL, +0x00000060UL, 0x00000081UL, 0x0000004fUL, 0x000000dcUL, 0x00000022UL, 0x0000002aUL, 0x00000090UL, 0x00000088UL, +0x00000046UL, 0x000000eeUL, 0x000000b8UL, 0x00000014UL, 0x000000deUL, 0x0000005eUL, 0x0000000bUL, 0x000000dbUL, +0x000000e0UL, 0x00000032UL, 0x0000003aUL, 0x0000000aUL, 0x00000049UL, 0x00000006UL, 0x00000024UL, 0x0000005cUL, +0x000000c2UL, 0x000000d3UL, 0x000000acUL, 0x00000062UL, 0x00000091UL, 0x00000095UL, 0x000000e4UL, 0x00000079UL, +0x000000e7UL, 0x000000c8UL, 0x00000037UL, 0x0000006dUL, 0x0000008dUL, 0x000000d5UL, 0x0000004eUL, 0x000000a9UL, +0x0000006cUL, 0x00000056UL, 0x000000f4UL, 0x000000eaUL, 0x00000065UL, 0x0000007aUL, 0x000000aeUL, 0x00000008UL, +0x000000baUL, 0x00000078UL, 0x00000025UL, 0x0000002eUL, 0x0000001cUL, 0x000000a6UL, 0x000000b4UL, 0x000000c6UL, +0x000000e8UL, 0x000000ddUL, 0x00000074UL, 0x0000001fUL, 0x0000004bUL, 0x000000bdUL, 0x0000008bUL, 0x0000008aUL, +0x00000070UL, 0x0000003eUL, 0x000000b5UL, 0x00000066UL, 0x00000048UL, 0x00000003UL, 0x000000f6UL, 0x0000000eUL, +0x00000061UL, 0x00000035UL, 0x00000057UL, 0x000000b9UL, 0x00000086UL, 0x000000c1UL, 0x0000001dUL, 0x0000009eUL, +0x000000e1UL, 0x000000f8UL, 0x00000098UL, 0x00000011UL, 0x00000069UL, 0x000000d9UL, 0x0000008eUL, 0x00000094UL, +0x0000009bUL, 0x0000001eUL, 0x00000087UL, 0x000000e9UL, 0x000000ceUL, 0x00000055UL, 0x00000028UL, 0x000000dfUL, +0x0000008cUL, 0x000000a1UL, 0x00000089UL, 0x0000000dUL, 0x000000bfUL, 0x000000e6UL, 0x00000042UL, 0x00000068UL, +0x00000041UL, 0x00000099UL, 0x0000002dUL, 0x0000000fUL, 0x000000b0UL, 0x00000054UL, 0x000000bbUL, 0x00000016UL +}; + +static const ulong32 Te4_1[] = { +0x00006300UL, 0x00007c00UL, 0x00007700UL, 0x00007b00UL, 0x0000f200UL, 0x00006b00UL, 0x00006f00UL, 0x0000c500UL, +0x00003000UL, 0x00000100UL, 0x00006700UL, 0x00002b00UL, 0x0000fe00UL, 0x0000d700UL, 0x0000ab00UL, 0x00007600UL, +0x0000ca00UL, 0x00008200UL, 0x0000c900UL, 0x00007d00UL, 0x0000fa00UL, 0x00005900UL, 0x00004700UL, 0x0000f000UL, +0x0000ad00UL, 0x0000d400UL, 0x0000a200UL, 0x0000af00UL, 0x00009c00UL, 0x0000a400UL, 0x00007200UL, 0x0000c000UL, +0x0000b700UL, 0x0000fd00UL, 0x00009300UL, 0x00002600UL, 0x00003600UL, 0x00003f00UL, 0x0000f700UL, 0x0000cc00UL, +0x00003400UL, 0x0000a500UL, 0x0000e500UL, 0x0000f100UL, 0x00007100UL, 0x0000d800UL, 0x00003100UL, 0x00001500UL, +0x00000400UL, 0x0000c700UL, 0x00002300UL, 0x0000c300UL, 0x00001800UL, 0x00009600UL, 0x00000500UL, 0x00009a00UL, +0x00000700UL, 0x00001200UL, 0x00008000UL, 0x0000e200UL, 0x0000eb00UL, 0x00002700UL, 0x0000b200UL, 0x00007500UL, +0x00000900UL, 0x00008300UL, 0x00002c00UL, 0x00001a00UL, 0x00001b00UL, 0x00006e00UL, 0x00005a00UL, 0x0000a000UL, +0x00005200UL, 0x00003b00UL, 0x0000d600UL, 0x0000b300UL, 0x00002900UL, 0x0000e300UL, 0x00002f00UL, 0x00008400UL, +0x00005300UL, 0x0000d100UL, 0x00000000UL, 0x0000ed00UL, 0x00002000UL, 0x0000fc00UL, 0x0000b100UL, 0x00005b00UL, +0x00006a00UL, 0x0000cb00UL, 0x0000be00UL, 0x00003900UL, 0x00004a00UL, 0x00004c00UL, 0x00005800UL, 0x0000cf00UL, +0x0000d000UL, 0x0000ef00UL, 0x0000aa00UL, 0x0000fb00UL, 0x00004300UL, 0x00004d00UL, 0x00003300UL, 0x00008500UL, +0x00004500UL, 0x0000f900UL, 0x00000200UL, 0x00007f00UL, 0x00005000UL, 0x00003c00UL, 0x00009f00UL, 0x0000a800UL, +0x00005100UL, 0x0000a300UL, 0x00004000UL, 0x00008f00UL, 0x00009200UL, 0x00009d00UL, 0x00003800UL, 0x0000f500UL, +0x0000bc00UL, 0x0000b600UL, 0x0000da00UL, 0x00002100UL, 0x00001000UL, 0x0000ff00UL, 0x0000f300UL, 0x0000d200UL, +0x0000cd00UL, 0x00000c00UL, 0x00001300UL, 0x0000ec00UL, 0x00005f00UL, 0x00009700UL, 0x00004400UL, 0x00001700UL, +0x0000c400UL, 0x0000a700UL, 0x00007e00UL, 0x00003d00UL, 0x00006400UL, 0x00005d00UL, 0x00001900UL, 0x00007300UL, +0x00006000UL, 0x00008100UL, 0x00004f00UL, 0x0000dc00UL, 0x00002200UL, 0x00002a00UL, 0x00009000UL, 0x00008800UL, +0x00004600UL, 0x0000ee00UL, 0x0000b800UL, 0x00001400UL, 0x0000de00UL, 0x00005e00UL, 0x00000b00UL, 0x0000db00UL, +0x0000e000UL, 0x00003200UL, 0x00003a00UL, 0x00000a00UL, 0x00004900UL, 0x00000600UL, 0x00002400UL, 0x00005c00UL, +0x0000c200UL, 0x0000d300UL, 0x0000ac00UL, 0x00006200UL, 0x00009100UL, 0x00009500UL, 0x0000e400UL, 0x00007900UL, +0x0000e700UL, 0x0000c800UL, 0x00003700UL, 0x00006d00UL, 0x00008d00UL, 0x0000d500UL, 0x00004e00UL, 0x0000a900UL, +0x00006c00UL, 0x00005600UL, 0x0000f400UL, 0x0000ea00UL, 0x00006500UL, 0x00007a00UL, 0x0000ae00UL, 0x00000800UL, +0x0000ba00UL, 0x00007800UL, 0x00002500UL, 0x00002e00UL, 0x00001c00UL, 0x0000a600UL, 0x0000b400UL, 0x0000c600UL, +0x0000e800UL, 0x0000dd00UL, 0x00007400UL, 0x00001f00UL, 0x00004b00UL, 0x0000bd00UL, 0x00008b00UL, 0x00008a00UL, +0x00007000UL, 0x00003e00UL, 0x0000b500UL, 0x00006600UL, 0x00004800UL, 0x00000300UL, 0x0000f600UL, 0x00000e00UL, +0x00006100UL, 0x00003500UL, 0x00005700UL, 0x0000b900UL, 0x00008600UL, 0x0000c100UL, 0x00001d00UL, 0x00009e00UL, +0x0000e100UL, 0x0000f800UL, 0x00009800UL, 0x00001100UL, 0x00006900UL, 0x0000d900UL, 0x00008e00UL, 0x00009400UL, +0x00009b00UL, 0x00001e00UL, 0x00008700UL, 0x0000e900UL, 0x0000ce00UL, 0x00005500UL, 0x00002800UL, 0x0000df00UL, +0x00008c00UL, 0x0000a100UL, 0x00008900UL, 0x00000d00UL, 0x0000bf00UL, 0x0000e600UL, 0x00004200UL, 0x00006800UL, +0x00004100UL, 0x00009900UL, 0x00002d00UL, 0x00000f00UL, 0x0000b000UL, 0x00005400UL, 0x0000bb00UL, 0x00001600UL +}; + +static const ulong32 Te4_2[] = { +0x00630000UL, 0x007c0000UL, 0x00770000UL, 0x007b0000UL, 0x00f20000UL, 0x006b0000UL, 0x006f0000UL, 0x00c50000UL, +0x00300000UL, 0x00010000UL, 0x00670000UL, 0x002b0000UL, 0x00fe0000UL, 0x00d70000UL, 0x00ab0000UL, 0x00760000UL, +0x00ca0000UL, 0x00820000UL, 0x00c90000UL, 0x007d0000UL, 0x00fa0000UL, 0x00590000UL, 0x00470000UL, 0x00f00000UL, +0x00ad0000UL, 0x00d40000UL, 0x00a20000UL, 0x00af0000UL, 0x009c0000UL, 0x00a40000UL, 0x00720000UL, 0x00c00000UL, +0x00b70000UL, 0x00fd0000UL, 0x00930000UL, 0x00260000UL, 0x00360000UL, 0x003f0000UL, 0x00f70000UL, 0x00cc0000UL, +0x00340000UL, 0x00a50000UL, 0x00e50000UL, 0x00f10000UL, 0x00710000UL, 0x00d80000UL, 0x00310000UL, 0x00150000UL, +0x00040000UL, 0x00c70000UL, 0x00230000UL, 0x00c30000UL, 0x00180000UL, 0x00960000UL, 0x00050000UL, 0x009a0000UL, +0x00070000UL, 0x00120000UL, 0x00800000UL, 0x00e20000UL, 0x00eb0000UL, 0x00270000UL, 0x00b20000UL, 0x00750000UL, +0x00090000UL, 0x00830000UL, 0x002c0000UL, 0x001a0000UL, 0x001b0000UL, 0x006e0000UL, 0x005a0000UL, 0x00a00000UL, +0x00520000UL, 0x003b0000UL, 0x00d60000UL, 0x00b30000UL, 0x00290000UL, 0x00e30000UL, 0x002f0000UL, 0x00840000UL, +0x00530000UL, 0x00d10000UL, 0x00000000UL, 0x00ed0000UL, 0x00200000UL, 0x00fc0000UL, 0x00b10000UL, 0x005b0000UL, +0x006a0000UL, 0x00cb0000UL, 0x00be0000UL, 0x00390000UL, 0x004a0000UL, 0x004c0000UL, 0x00580000UL, 0x00cf0000UL, +0x00d00000UL, 0x00ef0000UL, 0x00aa0000UL, 0x00fb0000UL, 0x00430000UL, 0x004d0000UL, 0x00330000UL, 0x00850000UL, +0x00450000UL, 0x00f90000UL, 0x00020000UL, 0x007f0000UL, 0x00500000UL, 0x003c0000UL, 0x009f0000UL, 0x00a80000UL, +0x00510000UL, 0x00a30000UL, 0x00400000UL, 0x008f0000UL, 0x00920000UL, 0x009d0000UL, 0x00380000UL, 0x00f50000UL, +0x00bc0000UL, 0x00b60000UL, 0x00da0000UL, 0x00210000UL, 0x00100000UL, 0x00ff0000UL, 0x00f30000UL, 0x00d20000UL, +0x00cd0000UL, 0x000c0000UL, 0x00130000UL, 0x00ec0000UL, 0x005f0000UL, 0x00970000UL, 0x00440000UL, 0x00170000UL, +0x00c40000UL, 0x00a70000UL, 0x007e0000UL, 0x003d0000UL, 0x00640000UL, 0x005d0000UL, 0x00190000UL, 0x00730000UL, +0x00600000UL, 0x00810000UL, 0x004f0000UL, 0x00dc0000UL, 0x00220000UL, 0x002a0000UL, 0x00900000UL, 0x00880000UL, +0x00460000UL, 0x00ee0000UL, 0x00b80000UL, 0x00140000UL, 0x00de0000UL, 0x005e0000UL, 0x000b0000UL, 0x00db0000UL, +0x00e00000UL, 0x00320000UL, 0x003a0000UL, 0x000a0000UL, 0x00490000UL, 0x00060000UL, 0x00240000UL, 0x005c0000UL, +0x00c20000UL, 0x00d30000UL, 0x00ac0000UL, 0x00620000UL, 0x00910000UL, 0x00950000UL, 0x00e40000UL, 0x00790000UL, +0x00e70000UL, 0x00c80000UL, 0x00370000UL, 0x006d0000UL, 0x008d0000UL, 0x00d50000UL, 0x004e0000UL, 0x00a90000UL, +0x006c0000UL, 0x00560000UL, 0x00f40000UL, 0x00ea0000UL, 0x00650000UL, 0x007a0000UL, 0x00ae0000UL, 0x00080000UL, +0x00ba0000UL, 0x00780000UL, 0x00250000UL, 0x002e0000UL, 0x001c0000UL, 0x00a60000UL, 0x00b40000UL, 0x00c60000UL, +0x00e80000UL, 0x00dd0000UL, 0x00740000UL, 0x001f0000UL, 0x004b0000UL, 0x00bd0000UL, 0x008b0000UL, 0x008a0000UL, +0x00700000UL, 0x003e0000UL, 0x00b50000UL, 0x00660000UL, 0x00480000UL, 0x00030000UL, 0x00f60000UL, 0x000e0000UL, +0x00610000UL, 0x00350000UL, 0x00570000UL, 0x00b90000UL, 0x00860000UL, 0x00c10000UL, 0x001d0000UL, 0x009e0000UL, +0x00e10000UL, 0x00f80000UL, 0x00980000UL, 0x00110000UL, 0x00690000UL, 0x00d90000UL, 0x008e0000UL, 0x00940000UL, +0x009b0000UL, 0x001e0000UL, 0x00870000UL, 0x00e90000UL, 0x00ce0000UL, 0x00550000UL, 0x00280000UL, 0x00df0000UL, +0x008c0000UL, 0x00a10000UL, 0x00890000UL, 0x000d0000UL, 0x00bf0000UL, 0x00e60000UL, 0x00420000UL, 0x00680000UL, +0x00410000UL, 0x00990000UL, 0x002d0000UL, 0x000f0000UL, 0x00b00000UL, 0x00540000UL, 0x00bb0000UL, 0x00160000UL +}; + +static const ulong32 Te4_3[] = { +0x63000000UL, 0x7c000000UL, 0x77000000UL, 0x7b000000UL, 0xf2000000UL, 0x6b000000UL, 0x6f000000UL, 0xc5000000UL, +0x30000000UL, 0x01000000UL, 0x67000000UL, 0x2b000000UL, 0xfe000000UL, 0xd7000000UL, 0xab000000UL, 0x76000000UL, +0xca000000UL, 0x82000000UL, 0xc9000000UL, 0x7d000000UL, 0xfa000000UL, 0x59000000UL, 0x47000000UL, 0xf0000000UL, +0xad000000UL, 0xd4000000UL, 0xa2000000UL, 0xaf000000UL, 0x9c000000UL, 0xa4000000UL, 0x72000000UL, 0xc0000000UL, +0xb7000000UL, 0xfd000000UL, 0x93000000UL, 0x26000000UL, 0x36000000UL, 0x3f000000UL, 0xf7000000UL, 0xcc000000UL, +0x34000000UL, 0xa5000000UL, 0xe5000000UL, 0xf1000000UL, 0x71000000UL, 0xd8000000UL, 0x31000000UL, 0x15000000UL, +0x04000000UL, 0xc7000000UL, 0x23000000UL, 0xc3000000UL, 0x18000000UL, 0x96000000UL, 0x05000000UL, 0x9a000000UL, +0x07000000UL, 0x12000000UL, 0x80000000UL, 0xe2000000UL, 0xeb000000UL, 0x27000000UL, 0xb2000000UL, 0x75000000UL, +0x09000000UL, 0x83000000UL, 0x2c000000UL, 0x1a000000UL, 0x1b000000UL, 0x6e000000UL, 0x5a000000UL, 0xa0000000UL, +0x52000000UL, 0x3b000000UL, 0xd6000000UL, 0xb3000000UL, 0x29000000UL, 0xe3000000UL, 0x2f000000UL, 0x84000000UL, +0x53000000UL, 0xd1000000UL, 0x00000000UL, 0xed000000UL, 0x20000000UL, 0xfc000000UL, 0xb1000000UL, 0x5b000000UL, +0x6a000000UL, 0xcb000000UL, 0xbe000000UL, 0x39000000UL, 0x4a000000UL, 0x4c000000UL, 0x58000000UL, 0xcf000000UL, +0xd0000000UL, 0xef000000UL, 0xaa000000UL, 0xfb000000UL, 0x43000000UL, 0x4d000000UL, 0x33000000UL, 0x85000000UL, +0x45000000UL, 0xf9000000UL, 0x02000000UL, 0x7f000000UL, 0x50000000UL, 0x3c000000UL, 0x9f000000UL, 0xa8000000UL, +0x51000000UL, 0xa3000000UL, 0x40000000UL, 0x8f000000UL, 0x92000000UL, 0x9d000000UL, 0x38000000UL, 0xf5000000UL, +0xbc000000UL, 0xb6000000UL, 0xda000000UL, 0x21000000UL, 0x10000000UL, 0xff000000UL, 0xf3000000UL, 0xd2000000UL, +0xcd000000UL, 0x0c000000UL, 0x13000000UL, 0xec000000UL, 0x5f000000UL, 0x97000000UL, 0x44000000UL, 0x17000000UL, +0xc4000000UL, 0xa7000000UL, 0x7e000000UL, 0x3d000000UL, 0x64000000UL, 0x5d000000UL, 0x19000000UL, 0x73000000UL, +0x60000000UL, 0x81000000UL, 0x4f000000UL, 0xdc000000UL, 0x22000000UL, 0x2a000000UL, 0x90000000UL, 0x88000000UL, +0x46000000UL, 0xee000000UL, 0xb8000000UL, 0x14000000UL, 0xde000000UL, 0x5e000000UL, 0x0b000000UL, 0xdb000000UL, +0xe0000000UL, 0x32000000UL, 0x3a000000UL, 0x0a000000UL, 0x49000000UL, 0x06000000UL, 0x24000000UL, 0x5c000000UL, +0xc2000000UL, 0xd3000000UL, 0xac000000UL, 0x62000000UL, 0x91000000UL, 0x95000000UL, 0xe4000000UL, 0x79000000UL, +0xe7000000UL, 0xc8000000UL, 0x37000000UL, 0x6d000000UL, 0x8d000000UL, 0xd5000000UL, 0x4e000000UL, 0xa9000000UL, +0x6c000000UL, 0x56000000UL, 0xf4000000UL, 0xea000000UL, 0x65000000UL, 0x7a000000UL, 0xae000000UL, 0x08000000UL, +0xba000000UL, 0x78000000UL, 0x25000000UL, 0x2e000000UL, 0x1c000000UL, 0xa6000000UL, 0xb4000000UL, 0xc6000000UL, +0xe8000000UL, 0xdd000000UL, 0x74000000UL, 0x1f000000UL, 0x4b000000UL, 0xbd000000UL, 0x8b000000UL, 0x8a000000UL, +0x70000000UL, 0x3e000000UL, 0xb5000000UL, 0x66000000UL, 0x48000000UL, 0x03000000UL, 0xf6000000UL, 0x0e000000UL, +0x61000000UL, 0x35000000UL, 0x57000000UL, 0xb9000000UL, 0x86000000UL, 0xc1000000UL, 0x1d000000UL, 0x9e000000UL, +0xe1000000UL, 0xf8000000UL, 0x98000000UL, 0x11000000UL, 0x69000000UL, 0xd9000000UL, 0x8e000000UL, 0x94000000UL, +0x9b000000UL, 0x1e000000UL, 0x87000000UL, 0xe9000000UL, 0xce000000UL, 0x55000000UL, 0x28000000UL, 0xdf000000UL, +0x8c000000UL, 0xa1000000UL, 0x89000000UL, 0x0d000000UL, 0xbf000000UL, 0xe6000000UL, 0x42000000UL, 0x68000000UL, +0x41000000UL, 0x99000000UL, 0x2d000000UL, 0x0f000000UL, 0xb0000000UL, 0x54000000UL, 0xbb000000UL, 0x16000000UL +}; +#endif /* pelimac */ + +#ifndef ENCRYPT_ONLY + +static const ulong32 TD1[256] = { + 0x5051f4a7UL, 0x537e4165UL, 0xc31a17a4UL, 0x963a275eUL, + 0xcb3bab6bUL, 0xf11f9d45UL, 0xabacfa58UL, 0x934be303UL, + 0x552030faUL, 0xf6ad766dUL, 0x9188cc76UL, 0x25f5024cUL, + 0xfc4fe5d7UL, 0xd7c52acbUL, 0x80263544UL, 0x8fb562a3UL, + 0x49deb15aUL, 0x6725ba1bUL, 0x9845ea0eUL, 0xe15dfec0UL, + 0x02c32f75UL, 0x12814cf0UL, 0xa38d4697UL, 0xc66bd3f9UL, + 0xe7038f5fUL, 0x9515929cUL, 0xebbf6d7aUL, 0xda955259UL, + 0x2dd4be83UL, 0xd3587421UL, 0x2949e069UL, 0x448ec9c8UL, + 0x6a75c289UL, 0x78f48e79UL, 0x6b99583eUL, 0xdd27b971UL, + 0xb6bee14fUL, 0x17f088adUL, 0x66c920acUL, 0xb47dce3aUL, + 0x1863df4aUL, 0x82e51a31UL, 0x60975133UL, 0x4562537fUL, + 0xe0b16477UL, 0x84bb6baeUL, 0x1cfe81a0UL, 0x94f9082bUL, + 0x58704868UL, 0x198f45fdUL, 0x8794de6cUL, 0xb7527bf8UL, + 0x23ab73d3UL, 0xe2724b02UL, 0x57e31f8fUL, 0x2a6655abUL, + 0x07b2eb28UL, 0x032fb5c2UL, 0x9a86c57bUL, 0xa5d33708UL, + 0xf2302887UL, 0xb223bfa5UL, 0xba02036aUL, 0x5ced1682UL, + 0x2b8acf1cUL, 0x92a779b4UL, 0xf0f307f2UL, 0xa14e69e2UL, + 0xcd65daf4UL, 0xd50605beUL, 0x1fd13462UL, 0x8ac4a6feUL, + 0x9d342e53UL, 0xa0a2f355UL, 0x32058ae1UL, 0x75a4f6ebUL, + 0x390b83ecUL, 0xaa4060efUL, 0x065e719fUL, 0x51bd6e10UL, + 0xf93e218aUL, 0x3d96dd06UL, 0xaedd3e05UL, 0x464de6bdUL, + 0xb591548dUL, 0x0571c45dUL, 0x6f0406d4UL, 0xff605015UL, + 0x241998fbUL, 0x97d6bde9UL, 0xcc894043UL, 0x7767d99eUL, + 0xbdb0e842UL, 0x8807898bUL, 0x38e7195bUL, 0xdb79c8eeUL, + 0x47a17c0aUL, 0xe97c420fUL, 0xc9f8841eUL, 0x00000000UL, + 0x83098086UL, 0x48322bedUL, 0xac1e1170UL, 0x4e6c5a72UL, + 0xfbfd0effUL, 0x560f8538UL, 0x1e3daed5UL, 0x27362d39UL, + 0x640a0fd9UL, 0x21685ca6UL, 0xd19b5b54UL, 0x3a24362eUL, + 0xb10c0a67UL, 0x0f9357e7UL, 0xd2b4ee96UL, 0x9e1b9b91UL, + 0x4f80c0c5UL, 0xa261dc20UL, 0x695a774bUL, 0x161c121aUL, + 0x0ae293baUL, 0xe5c0a02aUL, 0x433c22e0UL, 0x1d121b17UL, + 0x0b0e090dUL, 0xadf28bc7UL, 0xb92db6a8UL, 0xc8141ea9UL, + 0x8557f119UL, 0x4caf7507UL, 0xbbee99ddUL, 0xfda37f60UL, + 0x9ff70126UL, 0xbc5c72f5UL, 0xc544663bUL, 0x345bfb7eUL, + 0x768b4329UL, 0xdccb23c6UL, 0x68b6edfcUL, 0x63b8e4f1UL, + 0xcad731dcUL, 0x10426385UL, 0x40139722UL, 0x2084c611UL, + 0x7d854a24UL, 0xf8d2bb3dUL, 0x11aef932UL, 0x6dc729a1UL, + 0x4b1d9e2fUL, 0xf3dcb230UL, 0xec0d8652UL, 0xd077c1e3UL, + 0x6c2bb316UL, 0x99a970b9UL, 0xfa119448UL, 0x2247e964UL, + 0xc4a8fc8cUL, 0x1aa0f03fUL, 0xd8567d2cUL, 0xef223390UL, + 0xc787494eUL, 0xc1d938d1UL, 0xfe8ccaa2UL, 0x3698d40bUL, + 0xcfa6f581UL, 0x28a57adeUL, 0x26dab78eUL, 0xa43fadbfUL, + 0xe42c3a9dUL, 0x0d507892UL, 0x9b6a5fccUL, 0x62547e46UL, + 0xc2f68d13UL, 0xe890d8b8UL, 0x5e2e39f7UL, 0xf582c3afUL, + 0xbe9f5d80UL, 0x7c69d093UL, 0xa96fd52dUL, 0xb3cf2512UL, + 0x3bc8ac99UL, 0xa710187dUL, 0x6ee89c63UL, 0x7bdb3bbbUL, + 0x09cd2678UL, 0xf46e5918UL, 0x01ec9ab7UL, 0xa8834f9aUL, + 0x65e6956eUL, 0x7eaaffe6UL, 0x0821bccfUL, 0xe6ef15e8UL, + 0xd9bae79bUL, 0xce4a6f36UL, 0xd4ea9f09UL, 0xd629b07cUL, + 0xaf31a4b2UL, 0x312a3f23UL, 0x30c6a594UL, 0xc035a266UL, + 0x37744ebcUL, 0xa6fc82caUL, 0xb0e090d0UL, 0x1533a7d8UL, + 0x4af10498UL, 0xf741ecdaUL, 0x0e7fcd50UL, 0x2f1791f6UL, + 0x8d764dd6UL, 0x4d43efb0UL, 0x54ccaa4dUL, 0xdfe49604UL, + 0xe39ed1b5UL, 0x1b4c6a88UL, 0xb8c12c1fUL, 0x7f466551UL, + 0x049d5eeaUL, 0x5d018c35UL, 0x73fa8774UL, 0x2efb0b41UL, + 0x5ab3671dUL, 0x5292dbd2UL, 0x33e91056UL, 0x136dd647UL, + 0x8c9ad761UL, 0x7a37a10cUL, 0x8e59f814UL, 0x89eb133cUL, + 0xeecea927UL, 0x35b761c9UL, 0xede11ce5UL, 0x3c7a47b1UL, + 0x599cd2dfUL, 0x3f55f273UL, 0x791814ceUL, 0xbf73c737UL, + 0xea53f7cdUL, 0x5b5ffdaaUL, 0x14df3d6fUL, 0x867844dbUL, + 0x81caaff3UL, 0x3eb968c4UL, 0x2c382434UL, 0x5fc2a340UL, + 0x72161dc3UL, 0x0cbce225UL, 0x8b283c49UL, 0x41ff0d95UL, + 0x7139a801UL, 0xde080cb3UL, 0x9cd8b4e4UL, 0x906456c1UL, + 0x617bcb84UL, 0x70d532b6UL, 0x74486c5cUL, 0x42d0b857UL, +}; +static const ulong32 TD2[256] = { + 0xa75051f4UL, 0x65537e41UL, 0xa4c31a17UL, 0x5e963a27UL, + 0x6bcb3babUL, 0x45f11f9dUL, 0x58abacfaUL, 0x03934be3UL, + 0xfa552030UL, 0x6df6ad76UL, 0x769188ccUL, 0x4c25f502UL, + 0xd7fc4fe5UL, 0xcbd7c52aUL, 0x44802635UL, 0xa38fb562UL, + 0x5a49deb1UL, 0x1b6725baUL, 0x0e9845eaUL, 0xc0e15dfeUL, + 0x7502c32fUL, 0xf012814cUL, 0x97a38d46UL, 0xf9c66bd3UL, + 0x5fe7038fUL, 0x9c951592UL, 0x7aebbf6dUL, 0x59da9552UL, + 0x832dd4beUL, 0x21d35874UL, 0x692949e0UL, 0xc8448ec9UL, + 0x896a75c2UL, 0x7978f48eUL, 0x3e6b9958UL, 0x71dd27b9UL, + 0x4fb6bee1UL, 0xad17f088UL, 0xac66c920UL, 0x3ab47dceUL, + 0x4a1863dfUL, 0x3182e51aUL, 0x33609751UL, 0x7f456253UL, + 0x77e0b164UL, 0xae84bb6bUL, 0xa01cfe81UL, 0x2b94f908UL, + 0x68587048UL, 0xfd198f45UL, 0x6c8794deUL, 0xf8b7527bUL, + 0xd323ab73UL, 0x02e2724bUL, 0x8f57e31fUL, 0xab2a6655UL, + 0x2807b2ebUL, 0xc2032fb5UL, 0x7b9a86c5UL, 0x08a5d337UL, + 0x87f23028UL, 0xa5b223bfUL, 0x6aba0203UL, 0x825ced16UL, + 0x1c2b8acfUL, 0xb492a779UL, 0xf2f0f307UL, 0xe2a14e69UL, + 0xf4cd65daUL, 0xbed50605UL, 0x621fd134UL, 0xfe8ac4a6UL, + 0x539d342eUL, 0x55a0a2f3UL, 0xe132058aUL, 0xeb75a4f6UL, + 0xec390b83UL, 0xefaa4060UL, 0x9f065e71UL, 0x1051bd6eUL, + 0x8af93e21UL, 0x063d96ddUL, 0x05aedd3eUL, 0xbd464de6UL, + 0x8db59154UL, 0x5d0571c4UL, 0xd46f0406UL, 0x15ff6050UL, + 0xfb241998UL, 0xe997d6bdUL, 0x43cc8940UL, 0x9e7767d9UL, + 0x42bdb0e8UL, 0x8b880789UL, 0x5b38e719UL, 0xeedb79c8UL, + 0x0a47a17cUL, 0x0fe97c42UL, 0x1ec9f884UL, 0x00000000UL, + 0x86830980UL, 0xed48322bUL, 0x70ac1e11UL, 0x724e6c5aUL, + 0xfffbfd0eUL, 0x38560f85UL, 0xd51e3daeUL, 0x3927362dUL, + 0xd9640a0fUL, 0xa621685cUL, 0x54d19b5bUL, 0x2e3a2436UL, + 0x67b10c0aUL, 0xe70f9357UL, 0x96d2b4eeUL, 0x919e1b9bUL, + 0xc54f80c0UL, 0x20a261dcUL, 0x4b695a77UL, 0x1a161c12UL, + 0xba0ae293UL, 0x2ae5c0a0UL, 0xe0433c22UL, 0x171d121bUL, + 0x0d0b0e09UL, 0xc7adf28bUL, 0xa8b92db6UL, 0xa9c8141eUL, + 0x198557f1UL, 0x074caf75UL, 0xddbbee99UL, 0x60fda37fUL, + 0x269ff701UL, 0xf5bc5c72UL, 0x3bc54466UL, 0x7e345bfbUL, + 0x29768b43UL, 0xc6dccb23UL, 0xfc68b6edUL, 0xf163b8e4UL, + 0xdccad731UL, 0x85104263UL, 0x22401397UL, 0x112084c6UL, + 0x247d854aUL, 0x3df8d2bbUL, 0x3211aef9UL, 0xa16dc729UL, + 0x2f4b1d9eUL, 0x30f3dcb2UL, 0x52ec0d86UL, 0xe3d077c1UL, + 0x166c2bb3UL, 0xb999a970UL, 0x48fa1194UL, 0x642247e9UL, + 0x8cc4a8fcUL, 0x3f1aa0f0UL, 0x2cd8567dUL, 0x90ef2233UL, + 0x4ec78749UL, 0xd1c1d938UL, 0xa2fe8ccaUL, 0x0b3698d4UL, + 0x81cfa6f5UL, 0xde28a57aUL, 0x8e26dab7UL, 0xbfa43fadUL, + 0x9de42c3aUL, 0x920d5078UL, 0xcc9b6a5fUL, 0x4662547eUL, + 0x13c2f68dUL, 0xb8e890d8UL, 0xf75e2e39UL, 0xaff582c3UL, + 0x80be9f5dUL, 0x937c69d0UL, 0x2da96fd5UL, 0x12b3cf25UL, + 0x993bc8acUL, 0x7da71018UL, 0x636ee89cUL, 0xbb7bdb3bUL, + 0x7809cd26UL, 0x18f46e59UL, 0xb701ec9aUL, 0x9aa8834fUL, + 0x6e65e695UL, 0xe67eaaffUL, 0xcf0821bcUL, 0xe8e6ef15UL, + 0x9bd9bae7UL, 0x36ce4a6fUL, 0x09d4ea9fUL, 0x7cd629b0UL, + 0xb2af31a4UL, 0x23312a3fUL, 0x9430c6a5UL, 0x66c035a2UL, + 0xbc37744eUL, 0xcaa6fc82UL, 0xd0b0e090UL, 0xd81533a7UL, + 0x984af104UL, 0xdaf741ecUL, 0x500e7fcdUL, 0xf62f1791UL, + 0xd68d764dUL, 0xb04d43efUL, 0x4d54ccaaUL, 0x04dfe496UL, + 0xb5e39ed1UL, 0x881b4c6aUL, 0x1fb8c12cUL, 0x517f4665UL, + 0xea049d5eUL, 0x355d018cUL, 0x7473fa87UL, 0x412efb0bUL, + 0x1d5ab367UL, 0xd25292dbUL, 0x5633e910UL, 0x47136dd6UL, + 0x618c9ad7UL, 0x0c7a37a1UL, 0x148e59f8UL, 0x3c89eb13UL, + 0x27eecea9UL, 0xc935b761UL, 0xe5ede11cUL, 0xb13c7a47UL, + 0xdf599cd2UL, 0x733f55f2UL, 0xce791814UL, 0x37bf73c7UL, + 0xcdea53f7UL, 0xaa5b5ffdUL, 0x6f14df3dUL, 0xdb867844UL, + 0xf381caafUL, 0xc43eb968UL, 0x342c3824UL, 0x405fc2a3UL, + 0xc372161dUL, 0x250cbce2UL, 0x498b283cUL, 0x9541ff0dUL, + 0x017139a8UL, 0xb3de080cUL, 0xe49cd8b4UL, 0xc1906456UL, + 0x84617bcbUL, 0xb670d532UL, 0x5c74486cUL, 0x5742d0b8UL, +}; +static const ulong32 TD3[256] = { + 0xf4a75051UL, 0x4165537eUL, 0x17a4c31aUL, 0x275e963aUL, + 0xab6bcb3bUL, 0x9d45f11fUL, 0xfa58abacUL, 0xe303934bUL, + 0x30fa5520UL, 0x766df6adUL, 0xcc769188UL, 0x024c25f5UL, + 0xe5d7fc4fUL, 0x2acbd7c5UL, 0x35448026UL, 0x62a38fb5UL, + 0xb15a49deUL, 0xba1b6725UL, 0xea0e9845UL, 0xfec0e15dUL, + 0x2f7502c3UL, 0x4cf01281UL, 0x4697a38dUL, 0xd3f9c66bUL, + 0x8f5fe703UL, 0x929c9515UL, 0x6d7aebbfUL, 0x5259da95UL, + 0xbe832dd4UL, 0x7421d358UL, 0xe0692949UL, 0xc9c8448eUL, + 0xc2896a75UL, 0x8e7978f4UL, 0x583e6b99UL, 0xb971dd27UL, + 0xe14fb6beUL, 0x88ad17f0UL, 0x20ac66c9UL, 0xce3ab47dUL, + 0xdf4a1863UL, 0x1a3182e5UL, 0x51336097UL, 0x537f4562UL, + 0x6477e0b1UL, 0x6bae84bbUL, 0x81a01cfeUL, 0x082b94f9UL, + 0x48685870UL, 0x45fd198fUL, 0xde6c8794UL, 0x7bf8b752UL, + 0x73d323abUL, 0x4b02e272UL, 0x1f8f57e3UL, 0x55ab2a66UL, + 0xeb2807b2UL, 0xb5c2032fUL, 0xc57b9a86UL, 0x3708a5d3UL, + 0x2887f230UL, 0xbfa5b223UL, 0x036aba02UL, 0x16825cedUL, + 0xcf1c2b8aUL, 0x79b492a7UL, 0x07f2f0f3UL, 0x69e2a14eUL, + 0xdaf4cd65UL, 0x05bed506UL, 0x34621fd1UL, 0xa6fe8ac4UL, + 0x2e539d34UL, 0xf355a0a2UL, 0x8ae13205UL, 0xf6eb75a4UL, + 0x83ec390bUL, 0x60efaa40UL, 0x719f065eUL, 0x6e1051bdUL, + 0x218af93eUL, 0xdd063d96UL, 0x3e05aeddUL, 0xe6bd464dUL, + 0x548db591UL, 0xc45d0571UL, 0x06d46f04UL, 0x5015ff60UL, + 0x98fb2419UL, 0xbde997d6UL, 0x4043cc89UL, 0xd99e7767UL, + 0xe842bdb0UL, 0x898b8807UL, 0x195b38e7UL, 0xc8eedb79UL, + 0x7c0a47a1UL, 0x420fe97cUL, 0x841ec9f8UL, 0x00000000UL, + 0x80868309UL, 0x2bed4832UL, 0x1170ac1eUL, 0x5a724e6cUL, + 0x0efffbfdUL, 0x8538560fUL, 0xaed51e3dUL, 0x2d392736UL, + 0x0fd9640aUL, 0x5ca62168UL, 0x5b54d19bUL, 0x362e3a24UL, + 0x0a67b10cUL, 0x57e70f93UL, 0xee96d2b4UL, 0x9b919e1bUL, + 0xc0c54f80UL, 0xdc20a261UL, 0x774b695aUL, 0x121a161cUL, + 0x93ba0ae2UL, 0xa02ae5c0UL, 0x22e0433cUL, 0x1b171d12UL, + 0x090d0b0eUL, 0x8bc7adf2UL, 0xb6a8b92dUL, 0x1ea9c814UL, + 0xf1198557UL, 0x75074cafUL, 0x99ddbbeeUL, 0x7f60fda3UL, + 0x01269ff7UL, 0x72f5bc5cUL, 0x663bc544UL, 0xfb7e345bUL, + 0x4329768bUL, 0x23c6dccbUL, 0xedfc68b6UL, 0xe4f163b8UL, + 0x31dccad7UL, 0x63851042UL, 0x97224013UL, 0xc6112084UL, + 0x4a247d85UL, 0xbb3df8d2UL, 0xf93211aeUL, 0x29a16dc7UL, + 0x9e2f4b1dUL, 0xb230f3dcUL, 0x8652ec0dUL, 0xc1e3d077UL, + 0xb3166c2bUL, 0x70b999a9UL, 0x9448fa11UL, 0xe9642247UL, + 0xfc8cc4a8UL, 0xf03f1aa0UL, 0x7d2cd856UL, 0x3390ef22UL, + 0x494ec787UL, 0x38d1c1d9UL, 0xcaa2fe8cUL, 0xd40b3698UL, + 0xf581cfa6UL, 0x7ade28a5UL, 0xb78e26daUL, 0xadbfa43fUL, + 0x3a9de42cUL, 0x78920d50UL, 0x5fcc9b6aUL, 0x7e466254UL, + 0x8d13c2f6UL, 0xd8b8e890UL, 0x39f75e2eUL, 0xc3aff582UL, + 0x5d80be9fUL, 0xd0937c69UL, 0xd52da96fUL, 0x2512b3cfUL, + 0xac993bc8UL, 0x187da710UL, 0x9c636ee8UL, 0x3bbb7bdbUL, + 0x267809cdUL, 0x5918f46eUL, 0x9ab701ecUL, 0x4f9aa883UL, + 0x956e65e6UL, 0xffe67eaaUL, 0xbccf0821UL, 0x15e8e6efUL, + 0xe79bd9baUL, 0x6f36ce4aUL, 0x9f09d4eaUL, 0xb07cd629UL, + 0xa4b2af31UL, 0x3f23312aUL, 0xa59430c6UL, 0xa266c035UL, + 0x4ebc3774UL, 0x82caa6fcUL, 0x90d0b0e0UL, 0xa7d81533UL, + 0x04984af1UL, 0xecdaf741UL, 0xcd500e7fUL, 0x91f62f17UL, + 0x4dd68d76UL, 0xefb04d43UL, 0xaa4d54ccUL, 0x9604dfe4UL, + 0xd1b5e39eUL, 0x6a881b4cUL, 0x2c1fb8c1UL, 0x65517f46UL, + 0x5eea049dUL, 0x8c355d01UL, 0x877473faUL, 0x0b412efbUL, + 0x671d5ab3UL, 0xdbd25292UL, 0x105633e9UL, 0xd647136dUL, + 0xd7618c9aUL, 0xa10c7a37UL, 0xf8148e59UL, 0x133c89ebUL, + 0xa927eeceUL, 0x61c935b7UL, 0x1ce5ede1UL, 0x47b13c7aUL, + 0xd2df599cUL, 0xf2733f55UL, 0x14ce7918UL, 0xc737bf73UL, + 0xf7cdea53UL, 0xfdaa5b5fUL, 0x3d6f14dfUL, 0x44db8678UL, + 0xaff381caUL, 0x68c43eb9UL, 0x24342c38UL, 0xa3405fc2UL, + 0x1dc37216UL, 0xe2250cbcUL, 0x3c498b28UL, 0x0d9541ffUL, + 0xa8017139UL, 0x0cb3de08UL, 0xb4e49cd8UL, 0x56c19064UL, + 0xcb84617bUL, 0x32b670d5UL, 0x6c5c7448UL, 0xb85742d0UL, +}; + +static const ulong32 Tks0[] = { +0x00000000UL, 0x0e090d0bUL, 0x1c121a16UL, 0x121b171dUL, 0x3824342cUL, 0x362d3927UL, 0x24362e3aUL, 0x2a3f2331UL, +0x70486858UL, 0x7e416553UL, 0x6c5a724eUL, 0x62537f45UL, 0x486c5c74UL, 0x4665517fUL, 0x547e4662UL, 0x5a774b69UL, +0xe090d0b0UL, 0xee99ddbbUL, 0xfc82caa6UL, 0xf28bc7adUL, 0xd8b4e49cUL, 0xd6bde997UL, 0xc4a6fe8aUL, 0xcaaff381UL, +0x90d8b8e8UL, 0x9ed1b5e3UL, 0x8ccaa2feUL, 0x82c3aff5UL, 0xa8fc8cc4UL, 0xa6f581cfUL, 0xb4ee96d2UL, 0xbae79bd9UL, +0xdb3bbb7bUL, 0xd532b670UL, 0xc729a16dUL, 0xc920ac66UL, 0xe31f8f57UL, 0xed16825cUL, 0xff0d9541UL, 0xf104984aUL, +0xab73d323UL, 0xa57ade28UL, 0xb761c935UL, 0xb968c43eUL, 0x9357e70fUL, 0x9d5eea04UL, 0x8f45fd19UL, 0x814cf012UL, +0x3bab6bcbUL, 0x35a266c0UL, 0x27b971ddUL, 0x29b07cd6UL, 0x038f5fe7UL, 0x0d8652ecUL, 0x1f9d45f1UL, 0x119448faUL, +0x4be30393UL, 0x45ea0e98UL, 0x57f11985UL, 0x59f8148eUL, 0x73c737bfUL, 0x7dce3ab4UL, 0x6fd52da9UL, 0x61dc20a2UL, +0xad766df6UL, 0xa37f60fdUL, 0xb16477e0UL, 0xbf6d7aebUL, 0x955259daUL, 0x9b5b54d1UL, 0x894043ccUL, 0x87494ec7UL, +0xdd3e05aeUL, 0xd33708a5UL, 0xc12c1fb8UL, 0xcf2512b3UL, 0xe51a3182UL, 0xeb133c89UL, 0xf9082b94UL, 0xf701269fUL, +0x4de6bd46UL, 0x43efb04dUL, 0x51f4a750UL, 0x5ffdaa5bUL, 0x75c2896aUL, 0x7bcb8461UL, 0x69d0937cUL, 0x67d99e77UL, +0x3daed51eUL, 0x33a7d815UL, 0x21bccf08UL, 0x2fb5c203UL, 0x058ae132UL, 0x0b83ec39UL, 0x1998fb24UL, 0x1791f62fUL, +0x764dd68dUL, 0x7844db86UL, 0x6a5fcc9bUL, 0x6456c190UL, 0x4e69e2a1UL, 0x4060efaaUL, 0x527bf8b7UL, 0x5c72f5bcUL, +0x0605bed5UL, 0x080cb3deUL, 0x1a17a4c3UL, 0x141ea9c8UL, 0x3e218af9UL, 0x302887f2UL, 0x223390efUL, 0x2c3a9de4UL, +0x96dd063dUL, 0x98d40b36UL, 0x8acf1c2bUL, 0x84c61120UL, 0xaef93211UL, 0xa0f03f1aUL, 0xb2eb2807UL, 0xbce2250cUL, +0xe6956e65UL, 0xe89c636eUL, 0xfa877473UL, 0xf48e7978UL, 0xdeb15a49UL, 0xd0b85742UL, 0xc2a3405fUL, 0xccaa4d54UL, +0x41ecdaf7UL, 0x4fe5d7fcUL, 0x5dfec0e1UL, 0x53f7cdeaUL, 0x79c8eedbUL, 0x77c1e3d0UL, 0x65daf4cdUL, 0x6bd3f9c6UL, +0x31a4b2afUL, 0x3fadbfa4UL, 0x2db6a8b9UL, 0x23bfa5b2UL, 0x09808683UL, 0x07898b88UL, 0x15929c95UL, 0x1b9b919eUL, +0xa17c0a47UL, 0xaf75074cUL, 0xbd6e1051UL, 0xb3671d5aUL, 0x99583e6bUL, 0x97513360UL, 0x854a247dUL, 0x8b432976UL, +0xd134621fUL, 0xdf3d6f14UL, 0xcd267809UL, 0xc32f7502UL, 0xe9105633UL, 0xe7195b38UL, 0xf5024c25UL, 0xfb0b412eUL, +0x9ad7618cUL, 0x94de6c87UL, 0x86c57b9aUL, 0x88cc7691UL, 0xa2f355a0UL, 0xacfa58abUL, 0xbee14fb6UL, 0xb0e842bdUL, +0xea9f09d4UL, 0xe49604dfUL, 0xf68d13c2UL, 0xf8841ec9UL, 0xd2bb3df8UL, 0xdcb230f3UL, 0xcea927eeUL, 0xc0a02ae5UL, +0x7a47b13cUL, 0x744ebc37UL, 0x6655ab2aUL, 0x685ca621UL, 0x42638510UL, 0x4c6a881bUL, 0x5e719f06UL, 0x5078920dUL, +0x0a0fd964UL, 0x0406d46fUL, 0x161dc372UL, 0x1814ce79UL, 0x322bed48UL, 0x3c22e043UL, 0x2e39f75eUL, 0x2030fa55UL, +0xec9ab701UL, 0xe293ba0aUL, 0xf088ad17UL, 0xfe81a01cUL, 0xd4be832dUL, 0xdab78e26UL, 0xc8ac993bUL, 0xc6a59430UL, +0x9cd2df59UL, 0x92dbd252UL, 0x80c0c54fUL, 0x8ec9c844UL, 0xa4f6eb75UL, 0xaaffe67eUL, 0xb8e4f163UL, 0xb6edfc68UL, +0x0c0a67b1UL, 0x02036abaUL, 0x10187da7UL, 0x1e1170acUL, 0x342e539dUL, 0x3a275e96UL, 0x283c498bUL, 0x26354480UL, +0x7c420fe9UL, 0x724b02e2UL, 0x605015ffUL, 0x6e5918f4UL, 0x44663bc5UL, 0x4a6f36ceUL, 0x587421d3UL, 0x567d2cd8UL, +0x37a10c7aUL, 0x39a80171UL, 0x2bb3166cUL, 0x25ba1b67UL, 0x0f853856UL, 0x018c355dUL, 0x13972240UL, 0x1d9e2f4bUL, +0x47e96422UL, 0x49e06929UL, 0x5bfb7e34UL, 0x55f2733fUL, 0x7fcd500eUL, 0x71c45d05UL, 0x63df4a18UL, 0x6dd64713UL, +0xd731dccaUL, 0xd938d1c1UL, 0xcb23c6dcUL, 0xc52acbd7UL, 0xef15e8e6UL, 0xe11ce5edUL, 0xf307f2f0UL, 0xfd0efffbUL, +0xa779b492UL, 0xa970b999UL, 0xbb6bae84UL, 0xb562a38fUL, 0x9f5d80beUL, 0x91548db5UL, 0x834f9aa8UL, 0x8d4697a3UL +}; + +static const ulong32 Tks1[] = { +0x00000000UL, 0x0b0e090dUL, 0x161c121aUL, 0x1d121b17UL, 0x2c382434UL, 0x27362d39UL, 0x3a24362eUL, 0x312a3f23UL, +0x58704868UL, 0x537e4165UL, 0x4e6c5a72UL, 0x4562537fUL, 0x74486c5cUL, 0x7f466551UL, 0x62547e46UL, 0x695a774bUL, +0xb0e090d0UL, 0xbbee99ddUL, 0xa6fc82caUL, 0xadf28bc7UL, 0x9cd8b4e4UL, 0x97d6bde9UL, 0x8ac4a6feUL, 0x81caaff3UL, +0xe890d8b8UL, 0xe39ed1b5UL, 0xfe8ccaa2UL, 0xf582c3afUL, 0xc4a8fc8cUL, 0xcfa6f581UL, 0xd2b4ee96UL, 0xd9bae79bUL, +0x7bdb3bbbUL, 0x70d532b6UL, 0x6dc729a1UL, 0x66c920acUL, 0x57e31f8fUL, 0x5ced1682UL, 0x41ff0d95UL, 0x4af10498UL, +0x23ab73d3UL, 0x28a57adeUL, 0x35b761c9UL, 0x3eb968c4UL, 0x0f9357e7UL, 0x049d5eeaUL, 0x198f45fdUL, 0x12814cf0UL, +0xcb3bab6bUL, 0xc035a266UL, 0xdd27b971UL, 0xd629b07cUL, 0xe7038f5fUL, 0xec0d8652UL, 0xf11f9d45UL, 0xfa119448UL, +0x934be303UL, 0x9845ea0eUL, 0x8557f119UL, 0x8e59f814UL, 0xbf73c737UL, 0xb47dce3aUL, 0xa96fd52dUL, 0xa261dc20UL, +0xf6ad766dUL, 0xfda37f60UL, 0xe0b16477UL, 0xebbf6d7aUL, 0xda955259UL, 0xd19b5b54UL, 0xcc894043UL, 0xc787494eUL, +0xaedd3e05UL, 0xa5d33708UL, 0xb8c12c1fUL, 0xb3cf2512UL, 0x82e51a31UL, 0x89eb133cUL, 0x94f9082bUL, 0x9ff70126UL, +0x464de6bdUL, 0x4d43efb0UL, 0x5051f4a7UL, 0x5b5ffdaaUL, 0x6a75c289UL, 0x617bcb84UL, 0x7c69d093UL, 0x7767d99eUL, +0x1e3daed5UL, 0x1533a7d8UL, 0x0821bccfUL, 0x032fb5c2UL, 0x32058ae1UL, 0x390b83ecUL, 0x241998fbUL, 0x2f1791f6UL, +0x8d764dd6UL, 0x867844dbUL, 0x9b6a5fccUL, 0x906456c1UL, 0xa14e69e2UL, 0xaa4060efUL, 0xb7527bf8UL, 0xbc5c72f5UL, +0xd50605beUL, 0xde080cb3UL, 0xc31a17a4UL, 0xc8141ea9UL, 0xf93e218aUL, 0xf2302887UL, 0xef223390UL, 0xe42c3a9dUL, +0x3d96dd06UL, 0x3698d40bUL, 0x2b8acf1cUL, 0x2084c611UL, 0x11aef932UL, 0x1aa0f03fUL, 0x07b2eb28UL, 0x0cbce225UL, +0x65e6956eUL, 0x6ee89c63UL, 0x73fa8774UL, 0x78f48e79UL, 0x49deb15aUL, 0x42d0b857UL, 0x5fc2a340UL, 0x54ccaa4dUL, +0xf741ecdaUL, 0xfc4fe5d7UL, 0xe15dfec0UL, 0xea53f7cdUL, 0xdb79c8eeUL, 0xd077c1e3UL, 0xcd65daf4UL, 0xc66bd3f9UL, +0xaf31a4b2UL, 0xa43fadbfUL, 0xb92db6a8UL, 0xb223bfa5UL, 0x83098086UL, 0x8807898bUL, 0x9515929cUL, 0x9e1b9b91UL, +0x47a17c0aUL, 0x4caf7507UL, 0x51bd6e10UL, 0x5ab3671dUL, 0x6b99583eUL, 0x60975133UL, 0x7d854a24UL, 0x768b4329UL, +0x1fd13462UL, 0x14df3d6fUL, 0x09cd2678UL, 0x02c32f75UL, 0x33e91056UL, 0x38e7195bUL, 0x25f5024cUL, 0x2efb0b41UL, +0x8c9ad761UL, 0x8794de6cUL, 0x9a86c57bUL, 0x9188cc76UL, 0xa0a2f355UL, 0xabacfa58UL, 0xb6bee14fUL, 0xbdb0e842UL, +0xd4ea9f09UL, 0xdfe49604UL, 0xc2f68d13UL, 0xc9f8841eUL, 0xf8d2bb3dUL, 0xf3dcb230UL, 0xeecea927UL, 0xe5c0a02aUL, +0x3c7a47b1UL, 0x37744ebcUL, 0x2a6655abUL, 0x21685ca6UL, 0x10426385UL, 0x1b4c6a88UL, 0x065e719fUL, 0x0d507892UL, +0x640a0fd9UL, 0x6f0406d4UL, 0x72161dc3UL, 0x791814ceUL, 0x48322bedUL, 0x433c22e0UL, 0x5e2e39f7UL, 0x552030faUL, +0x01ec9ab7UL, 0x0ae293baUL, 0x17f088adUL, 0x1cfe81a0UL, 0x2dd4be83UL, 0x26dab78eUL, 0x3bc8ac99UL, 0x30c6a594UL, +0x599cd2dfUL, 0x5292dbd2UL, 0x4f80c0c5UL, 0x448ec9c8UL, 0x75a4f6ebUL, 0x7eaaffe6UL, 0x63b8e4f1UL, 0x68b6edfcUL, +0xb10c0a67UL, 0xba02036aUL, 0xa710187dUL, 0xac1e1170UL, 0x9d342e53UL, 0x963a275eUL, 0x8b283c49UL, 0x80263544UL, +0xe97c420fUL, 0xe2724b02UL, 0xff605015UL, 0xf46e5918UL, 0xc544663bUL, 0xce4a6f36UL, 0xd3587421UL, 0xd8567d2cUL, +0x7a37a10cUL, 0x7139a801UL, 0x6c2bb316UL, 0x6725ba1bUL, 0x560f8538UL, 0x5d018c35UL, 0x40139722UL, 0x4b1d9e2fUL, +0x2247e964UL, 0x2949e069UL, 0x345bfb7eUL, 0x3f55f273UL, 0x0e7fcd50UL, 0x0571c45dUL, 0x1863df4aUL, 0x136dd647UL, +0xcad731dcUL, 0xc1d938d1UL, 0xdccb23c6UL, 0xd7c52acbUL, 0xe6ef15e8UL, 0xede11ce5UL, 0xf0f307f2UL, 0xfbfd0effUL, +0x92a779b4UL, 0x99a970b9UL, 0x84bb6baeUL, 0x8fb562a3UL, 0xbe9f5d80UL, 0xb591548dUL, 0xa8834f9aUL, 0xa38d4697UL +}; + +static const ulong32 Tks2[] = { +0x00000000UL, 0x0d0b0e09UL, 0x1a161c12UL, 0x171d121bUL, 0x342c3824UL, 0x3927362dUL, 0x2e3a2436UL, 0x23312a3fUL, +0x68587048UL, 0x65537e41UL, 0x724e6c5aUL, 0x7f456253UL, 0x5c74486cUL, 0x517f4665UL, 0x4662547eUL, 0x4b695a77UL, +0xd0b0e090UL, 0xddbbee99UL, 0xcaa6fc82UL, 0xc7adf28bUL, 0xe49cd8b4UL, 0xe997d6bdUL, 0xfe8ac4a6UL, 0xf381caafUL, +0xb8e890d8UL, 0xb5e39ed1UL, 0xa2fe8ccaUL, 0xaff582c3UL, 0x8cc4a8fcUL, 0x81cfa6f5UL, 0x96d2b4eeUL, 0x9bd9bae7UL, +0xbb7bdb3bUL, 0xb670d532UL, 0xa16dc729UL, 0xac66c920UL, 0x8f57e31fUL, 0x825ced16UL, 0x9541ff0dUL, 0x984af104UL, +0xd323ab73UL, 0xde28a57aUL, 0xc935b761UL, 0xc43eb968UL, 0xe70f9357UL, 0xea049d5eUL, 0xfd198f45UL, 0xf012814cUL, +0x6bcb3babUL, 0x66c035a2UL, 0x71dd27b9UL, 0x7cd629b0UL, 0x5fe7038fUL, 0x52ec0d86UL, 0x45f11f9dUL, 0x48fa1194UL, +0x03934be3UL, 0x0e9845eaUL, 0x198557f1UL, 0x148e59f8UL, 0x37bf73c7UL, 0x3ab47dceUL, 0x2da96fd5UL, 0x20a261dcUL, +0x6df6ad76UL, 0x60fda37fUL, 0x77e0b164UL, 0x7aebbf6dUL, 0x59da9552UL, 0x54d19b5bUL, 0x43cc8940UL, 0x4ec78749UL, +0x05aedd3eUL, 0x08a5d337UL, 0x1fb8c12cUL, 0x12b3cf25UL, 0x3182e51aUL, 0x3c89eb13UL, 0x2b94f908UL, 0x269ff701UL, +0xbd464de6UL, 0xb04d43efUL, 0xa75051f4UL, 0xaa5b5ffdUL, 0x896a75c2UL, 0x84617bcbUL, 0x937c69d0UL, 0x9e7767d9UL, +0xd51e3daeUL, 0xd81533a7UL, 0xcf0821bcUL, 0xc2032fb5UL, 0xe132058aUL, 0xec390b83UL, 0xfb241998UL, 0xf62f1791UL, +0xd68d764dUL, 0xdb867844UL, 0xcc9b6a5fUL, 0xc1906456UL, 0xe2a14e69UL, 0xefaa4060UL, 0xf8b7527bUL, 0xf5bc5c72UL, +0xbed50605UL, 0xb3de080cUL, 0xa4c31a17UL, 0xa9c8141eUL, 0x8af93e21UL, 0x87f23028UL, 0x90ef2233UL, 0x9de42c3aUL, +0x063d96ddUL, 0x0b3698d4UL, 0x1c2b8acfUL, 0x112084c6UL, 0x3211aef9UL, 0x3f1aa0f0UL, 0x2807b2ebUL, 0x250cbce2UL, +0x6e65e695UL, 0x636ee89cUL, 0x7473fa87UL, 0x7978f48eUL, 0x5a49deb1UL, 0x5742d0b8UL, 0x405fc2a3UL, 0x4d54ccaaUL, +0xdaf741ecUL, 0xd7fc4fe5UL, 0xc0e15dfeUL, 0xcdea53f7UL, 0xeedb79c8UL, 0xe3d077c1UL, 0xf4cd65daUL, 0xf9c66bd3UL, +0xb2af31a4UL, 0xbfa43fadUL, 0xa8b92db6UL, 0xa5b223bfUL, 0x86830980UL, 0x8b880789UL, 0x9c951592UL, 0x919e1b9bUL, +0x0a47a17cUL, 0x074caf75UL, 0x1051bd6eUL, 0x1d5ab367UL, 0x3e6b9958UL, 0x33609751UL, 0x247d854aUL, 0x29768b43UL, +0x621fd134UL, 0x6f14df3dUL, 0x7809cd26UL, 0x7502c32fUL, 0x5633e910UL, 0x5b38e719UL, 0x4c25f502UL, 0x412efb0bUL, +0x618c9ad7UL, 0x6c8794deUL, 0x7b9a86c5UL, 0x769188ccUL, 0x55a0a2f3UL, 0x58abacfaUL, 0x4fb6bee1UL, 0x42bdb0e8UL, +0x09d4ea9fUL, 0x04dfe496UL, 0x13c2f68dUL, 0x1ec9f884UL, 0x3df8d2bbUL, 0x30f3dcb2UL, 0x27eecea9UL, 0x2ae5c0a0UL, +0xb13c7a47UL, 0xbc37744eUL, 0xab2a6655UL, 0xa621685cUL, 0x85104263UL, 0x881b4c6aUL, 0x9f065e71UL, 0x920d5078UL, +0xd9640a0fUL, 0xd46f0406UL, 0xc372161dUL, 0xce791814UL, 0xed48322bUL, 0xe0433c22UL, 0xf75e2e39UL, 0xfa552030UL, +0xb701ec9aUL, 0xba0ae293UL, 0xad17f088UL, 0xa01cfe81UL, 0x832dd4beUL, 0x8e26dab7UL, 0x993bc8acUL, 0x9430c6a5UL, +0xdf599cd2UL, 0xd25292dbUL, 0xc54f80c0UL, 0xc8448ec9UL, 0xeb75a4f6UL, 0xe67eaaffUL, 0xf163b8e4UL, 0xfc68b6edUL, +0x67b10c0aUL, 0x6aba0203UL, 0x7da71018UL, 0x70ac1e11UL, 0x539d342eUL, 0x5e963a27UL, 0x498b283cUL, 0x44802635UL, +0x0fe97c42UL, 0x02e2724bUL, 0x15ff6050UL, 0x18f46e59UL, 0x3bc54466UL, 0x36ce4a6fUL, 0x21d35874UL, 0x2cd8567dUL, +0x0c7a37a1UL, 0x017139a8UL, 0x166c2bb3UL, 0x1b6725baUL, 0x38560f85UL, 0x355d018cUL, 0x22401397UL, 0x2f4b1d9eUL, +0x642247e9UL, 0x692949e0UL, 0x7e345bfbUL, 0x733f55f2UL, 0x500e7fcdUL, 0x5d0571c4UL, 0x4a1863dfUL, 0x47136dd6UL, +0xdccad731UL, 0xd1c1d938UL, 0xc6dccb23UL, 0xcbd7c52aUL, 0xe8e6ef15UL, 0xe5ede11cUL, 0xf2f0f307UL, 0xfffbfd0eUL, +0xb492a779UL, 0xb999a970UL, 0xae84bb6bUL, 0xa38fb562UL, 0x80be9f5dUL, 0x8db59154UL, 0x9aa8834fUL, 0x97a38d46UL +}; + +static const ulong32 Tks3[] = { +0x00000000UL, 0x090d0b0eUL, 0x121a161cUL, 0x1b171d12UL, 0x24342c38UL, 0x2d392736UL, 0x362e3a24UL, 0x3f23312aUL, +0x48685870UL, 0x4165537eUL, 0x5a724e6cUL, 0x537f4562UL, 0x6c5c7448UL, 0x65517f46UL, 0x7e466254UL, 0x774b695aUL, +0x90d0b0e0UL, 0x99ddbbeeUL, 0x82caa6fcUL, 0x8bc7adf2UL, 0xb4e49cd8UL, 0xbde997d6UL, 0xa6fe8ac4UL, 0xaff381caUL, +0xd8b8e890UL, 0xd1b5e39eUL, 0xcaa2fe8cUL, 0xc3aff582UL, 0xfc8cc4a8UL, 0xf581cfa6UL, 0xee96d2b4UL, 0xe79bd9baUL, +0x3bbb7bdbUL, 0x32b670d5UL, 0x29a16dc7UL, 0x20ac66c9UL, 0x1f8f57e3UL, 0x16825cedUL, 0x0d9541ffUL, 0x04984af1UL, +0x73d323abUL, 0x7ade28a5UL, 0x61c935b7UL, 0x68c43eb9UL, 0x57e70f93UL, 0x5eea049dUL, 0x45fd198fUL, 0x4cf01281UL, +0xab6bcb3bUL, 0xa266c035UL, 0xb971dd27UL, 0xb07cd629UL, 0x8f5fe703UL, 0x8652ec0dUL, 0x9d45f11fUL, 0x9448fa11UL, +0xe303934bUL, 0xea0e9845UL, 0xf1198557UL, 0xf8148e59UL, 0xc737bf73UL, 0xce3ab47dUL, 0xd52da96fUL, 0xdc20a261UL, +0x766df6adUL, 0x7f60fda3UL, 0x6477e0b1UL, 0x6d7aebbfUL, 0x5259da95UL, 0x5b54d19bUL, 0x4043cc89UL, 0x494ec787UL, +0x3e05aeddUL, 0x3708a5d3UL, 0x2c1fb8c1UL, 0x2512b3cfUL, 0x1a3182e5UL, 0x133c89ebUL, 0x082b94f9UL, 0x01269ff7UL, +0xe6bd464dUL, 0xefb04d43UL, 0xf4a75051UL, 0xfdaa5b5fUL, 0xc2896a75UL, 0xcb84617bUL, 0xd0937c69UL, 0xd99e7767UL, +0xaed51e3dUL, 0xa7d81533UL, 0xbccf0821UL, 0xb5c2032fUL, 0x8ae13205UL, 0x83ec390bUL, 0x98fb2419UL, 0x91f62f17UL, +0x4dd68d76UL, 0x44db8678UL, 0x5fcc9b6aUL, 0x56c19064UL, 0x69e2a14eUL, 0x60efaa40UL, 0x7bf8b752UL, 0x72f5bc5cUL, +0x05bed506UL, 0x0cb3de08UL, 0x17a4c31aUL, 0x1ea9c814UL, 0x218af93eUL, 0x2887f230UL, 0x3390ef22UL, 0x3a9de42cUL, +0xdd063d96UL, 0xd40b3698UL, 0xcf1c2b8aUL, 0xc6112084UL, 0xf93211aeUL, 0xf03f1aa0UL, 0xeb2807b2UL, 0xe2250cbcUL, +0x956e65e6UL, 0x9c636ee8UL, 0x877473faUL, 0x8e7978f4UL, 0xb15a49deUL, 0xb85742d0UL, 0xa3405fc2UL, 0xaa4d54ccUL, +0xecdaf741UL, 0xe5d7fc4fUL, 0xfec0e15dUL, 0xf7cdea53UL, 0xc8eedb79UL, 0xc1e3d077UL, 0xdaf4cd65UL, 0xd3f9c66bUL, +0xa4b2af31UL, 0xadbfa43fUL, 0xb6a8b92dUL, 0xbfa5b223UL, 0x80868309UL, 0x898b8807UL, 0x929c9515UL, 0x9b919e1bUL, +0x7c0a47a1UL, 0x75074cafUL, 0x6e1051bdUL, 0x671d5ab3UL, 0x583e6b99UL, 0x51336097UL, 0x4a247d85UL, 0x4329768bUL, +0x34621fd1UL, 0x3d6f14dfUL, 0x267809cdUL, 0x2f7502c3UL, 0x105633e9UL, 0x195b38e7UL, 0x024c25f5UL, 0x0b412efbUL, +0xd7618c9aUL, 0xde6c8794UL, 0xc57b9a86UL, 0xcc769188UL, 0xf355a0a2UL, 0xfa58abacUL, 0xe14fb6beUL, 0xe842bdb0UL, +0x9f09d4eaUL, 0x9604dfe4UL, 0x8d13c2f6UL, 0x841ec9f8UL, 0xbb3df8d2UL, 0xb230f3dcUL, 0xa927eeceUL, 0xa02ae5c0UL, +0x47b13c7aUL, 0x4ebc3774UL, 0x55ab2a66UL, 0x5ca62168UL, 0x63851042UL, 0x6a881b4cUL, 0x719f065eUL, 0x78920d50UL, +0x0fd9640aUL, 0x06d46f04UL, 0x1dc37216UL, 0x14ce7918UL, 0x2bed4832UL, 0x22e0433cUL, 0x39f75e2eUL, 0x30fa5520UL, +0x9ab701ecUL, 0x93ba0ae2UL, 0x88ad17f0UL, 0x81a01cfeUL, 0xbe832dd4UL, 0xb78e26daUL, 0xac993bc8UL, 0xa59430c6UL, +0xd2df599cUL, 0xdbd25292UL, 0xc0c54f80UL, 0xc9c8448eUL, 0xf6eb75a4UL, 0xffe67eaaUL, 0xe4f163b8UL, 0xedfc68b6UL, +0x0a67b10cUL, 0x036aba02UL, 0x187da710UL, 0x1170ac1eUL, 0x2e539d34UL, 0x275e963aUL, 0x3c498b28UL, 0x35448026UL, +0x420fe97cUL, 0x4b02e272UL, 0x5015ff60UL, 0x5918f46eUL, 0x663bc544UL, 0x6f36ce4aUL, 0x7421d358UL, 0x7d2cd856UL, +0xa10c7a37UL, 0xa8017139UL, 0xb3166c2bUL, 0xba1b6725UL, 0x8538560fUL, 0x8c355d01UL, 0x97224013UL, 0x9e2f4b1dUL, +0xe9642247UL, 0xe0692949UL, 0xfb7e345bUL, 0xf2733f55UL, 0xcd500e7fUL, 0xc45d0571UL, 0xdf4a1863UL, 0xd647136dUL, +0x31dccad7UL, 0x38d1c1d9UL, 0x23c6dccbUL, 0x2acbd7c5UL, 0x15e8e6efUL, 0x1ce5ede1UL, 0x07f2f0f3UL, 0x0efffbfdUL, +0x79b492a7UL, 0x70b999a9UL, 0x6bae84bbUL, 0x62a38fb5UL, 0x5d80be9fUL, 0x548db591UL, 0x4f9aa883UL, 0x4697a38dUL +}; + +#endif /* ENCRYPT_ONLY */ + +#endif /* SMALL CODE */ + +static const ulong32 rcon[] = { + 0x01000000UL, 0x02000000UL, 0x04000000UL, 0x08000000UL, + 0x10000000UL, 0x20000000UL, 0x40000000UL, 0x80000000UL, + 0x1B000000UL, 0x36000000UL, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */ +}; + +#endif /* __LTC_AES_TAB_C__ */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/* AES implementation by Tom St Denis + * + * Derived from the Public Domain source code by + +--- + * rijndael-alg-fst.c + * + * @version 3.0 (December 2000) + * + * Optimised ANSI C code for the Rijndael cipher (now AES) + * + * @author Vincent Rijmen <vincent.rijmen@esat.kuleuven.ac.be> + * @author Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be> + * @author Paulo Barreto <paulo.barreto@terra.com.br> +--- + */ +/** + @file aes.c + Implementation of AES +*/ + + + +#ifdef LTC_RIJNDAEL + +#ifndef ENCRYPT_ONLY + +#define SETUP rijndael_setup +#define ECB_ENC rijndael_ecb_encrypt +#define ECB_DEC rijndael_ecb_decrypt +#define ECB_DONE rijndael_done +#define ECB_TEST rijndael_test +#define ECB_KS rijndael_keysize + +const struct ltc_cipher_descriptor rijndael_desc = +{ + "rijndael", + 6, + 16, 32, 16, 10, + SETUP, ECB_ENC, ECB_DEC, ECB_TEST, ECB_DONE, ECB_KS, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; + +const struct ltc_cipher_descriptor aes_desc = +{ + "aes", + 6, + 16, 32, 16, 10, + SETUP, ECB_ENC, ECB_DEC, ECB_TEST, ECB_DONE, ECB_KS, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; + +#else + +#define SETUP rijndael_enc_setup +#define ECB_ENC rijndael_enc_ecb_encrypt +#define ECB_KS rijndael_enc_keysize +#define ECB_DONE rijndael_enc_done + +const struct ltc_cipher_descriptor rijndael_enc_desc = +{ + "rijndael", + 6, + 16, 32, 16, 10, + SETUP, ECB_ENC, NULL, NULL, ECB_DONE, ECB_KS, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; + +const struct ltc_cipher_descriptor aes_enc_desc = +{ + "aes", + 6, + 16, 32, 16, 10, + SETUP, ECB_ENC, NULL, NULL, ECB_DONE, ECB_KS, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; + +#endif + +#define __LTC_AES_TAB_C__ + + +static ulong32 setup_mix(ulong32 temp) +{ + return (Te4_3[byte(temp, 2)]) ^ + (Te4_2[byte(temp, 1)]) ^ + (Te4_1[byte(temp, 0)]) ^ + (Te4_0[byte(temp, 3)]); +} + +#ifndef ENCRYPT_ONLY +#ifdef LTC_SMALL_CODE +static ulong32 setup_mix2(ulong32 temp) +{ + return Td0(255 & Te4[byte(temp, 3)]) ^ + Td1(255 & Te4[byte(temp, 2)]) ^ + Td2(255 & Te4[byte(temp, 1)]) ^ + Td3(255 & Te4[byte(temp, 0)]); +} +#endif +#endif + + /** + Initialize the AES (Rijndael) block cipher + @param key The symmetric key you wish to pass + @param keylen The key length in bytes + @param num_rounds The number of rounds desired (0 for default) + @param skey The key in as scheduled by this function. + @return CRYPT_OK if successful + */ +int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) +{ + int i; + ulong32 temp, *rk; +#ifndef ENCRYPT_ONLY + ulong32 *rrk; +#endif + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(skey != NULL); + + if (keylen != 16 && keylen != 24 && keylen != 32) { + return CRYPT_INVALID_KEYSIZE; + } + + if (num_rounds != 0 && num_rounds != (10 + ((keylen/8)-2)*2)) { + return CRYPT_INVALID_ROUNDS; + } + + skey->rijndael.Nr = 10 + ((keylen/8)-2)*2; + + /* setup the forward key */ + i = 0; + rk = skey->rijndael.eK; + LOAD32H(rk[0], key ); + LOAD32H(rk[1], key + 4); + LOAD32H(rk[2], key + 8); + LOAD32H(rk[3], key + 12); + if (keylen == 16) { + for (;;) { + temp = rk[3]; + rk[4] = rk[0] ^ setup_mix(temp) ^ rcon[i]; + rk[5] = rk[1] ^ rk[4]; + rk[6] = rk[2] ^ rk[5]; + rk[7] = rk[3] ^ rk[6]; + if (++i == 10) { + break; + } + rk += 4; + } + } else if (keylen == 24) { + LOAD32H(rk[4], key + 16); + LOAD32H(rk[5], key + 20); + for (;;) { + #ifdef _MSC_VER + temp = skey->rijndael.eK[rk - skey->rijndael.eK + 5]; + #else + temp = rk[5]; + #endif + rk[ 6] = rk[ 0] ^ setup_mix(temp) ^ rcon[i]; + rk[ 7] = rk[ 1] ^ rk[ 6]; + rk[ 8] = rk[ 2] ^ rk[ 7]; + rk[ 9] = rk[ 3] ^ rk[ 8]; + if (++i == 8) { + break; + } + rk[10] = rk[ 4] ^ rk[ 9]; + rk[11] = rk[ 5] ^ rk[10]; + rk += 6; + } + } else if (keylen == 32) { + LOAD32H(rk[4], key + 16); + LOAD32H(rk[5], key + 20); + LOAD32H(rk[6], key + 24); + LOAD32H(rk[7], key + 28); + for (;;) { + #ifdef _MSC_VER + temp = skey->rijndael.eK[rk - skey->rijndael.eK + 7]; + #else + temp = rk[7]; + #endif + rk[ 8] = rk[ 0] ^ setup_mix(temp) ^ rcon[i]; + rk[ 9] = rk[ 1] ^ rk[ 8]; + rk[10] = rk[ 2] ^ rk[ 9]; + rk[11] = rk[ 3] ^ rk[10]; + if (++i == 7) { + break; + } + temp = rk[11]; + rk[12] = rk[ 4] ^ setup_mix(RORc(temp, 8)); + rk[13] = rk[ 5] ^ rk[12]; + rk[14] = rk[ 6] ^ rk[13]; + rk[15] = rk[ 7] ^ rk[14]; + rk += 8; + } + } else { + /* this can't happen */ + /* coverity[dead_error_line] */ + return CRYPT_ERROR; + } + +#ifndef ENCRYPT_ONLY + /* setup the inverse key now */ + rk = skey->rijndael.dK; + rrk = skey->rijndael.eK + (28 + keylen) - 4; + + /* apply the inverse MixColumn transform to all round keys but the first and the last: */ + /* copy first */ + *rk++ = *rrk++; + *rk++ = *rrk++; + *rk++ = *rrk++; + *rk = *rrk; + rk -= 3; rrk -= 3; + + for (i = 1; i < skey->rijndael.Nr; i++) { + rrk -= 4; + rk += 4; + #ifdef LTC_SMALL_CODE + temp = rrk[0]; + rk[0] = setup_mix2(temp); + temp = rrk[1]; + rk[1] = setup_mix2(temp); + temp = rrk[2]; + rk[2] = setup_mix2(temp); + temp = rrk[3]; + rk[3] = setup_mix2(temp); + #else + temp = rrk[0]; + rk[0] = + Tks0[byte(temp, 3)] ^ + Tks1[byte(temp, 2)] ^ + Tks2[byte(temp, 1)] ^ + Tks3[byte(temp, 0)]; + temp = rrk[1]; + rk[1] = + Tks0[byte(temp, 3)] ^ + Tks1[byte(temp, 2)] ^ + Tks2[byte(temp, 1)] ^ + Tks3[byte(temp, 0)]; + temp = rrk[2]; + rk[2] = + Tks0[byte(temp, 3)] ^ + Tks1[byte(temp, 2)] ^ + Tks2[byte(temp, 1)] ^ + Tks3[byte(temp, 0)]; + temp = rrk[3]; + rk[3] = + Tks0[byte(temp, 3)] ^ + Tks1[byte(temp, 2)] ^ + Tks2[byte(temp, 1)] ^ + Tks3[byte(temp, 0)]; + #endif + + } + + /* copy last */ + rrk -= 4; + rk += 4; + *rk++ = *rrk++; + *rk++ = *rrk++; + *rk++ = *rrk++; + *rk = *rrk; +#endif /* ENCRYPT_ONLY */ + + return CRYPT_OK; +} + +/** + Encrypts a block of text with AES + @param pt The input plaintext (16 bytes) + @param ct The output ciphertext (16 bytes) + @param skey The key as scheduled + @return CRYPT_OK if successful +*/ +#ifdef LTC_CLEAN_STACK +static int _rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) +#else +int ECB_ENC(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) +#endif +{ + ulong32 s0, s1, s2, s3, t0, t1, t2, t3, *rk; + int Nr, r; + + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(skey != NULL); + + Nr = skey->rijndael.Nr; + rk = skey->rijndael.eK; + + /* + * map byte array block to cipher state + * and add initial round key: + */ + LOAD32H(s0, pt ); s0 ^= rk[0]; + LOAD32H(s1, pt + 4); s1 ^= rk[1]; + LOAD32H(s2, pt + 8); s2 ^= rk[2]; + LOAD32H(s3, pt + 12); s3 ^= rk[3]; + +#ifdef LTC_SMALL_CODE + + for (r = 0; ; r++) { + rk += 4; + t0 = + Te0(byte(s0, 3)) ^ + Te1(byte(s1, 2)) ^ + Te2(byte(s2, 1)) ^ + Te3(byte(s3, 0)) ^ + rk[0]; + t1 = + Te0(byte(s1, 3)) ^ + Te1(byte(s2, 2)) ^ + Te2(byte(s3, 1)) ^ + Te3(byte(s0, 0)) ^ + rk[1]; + t2 = + Te0(byte(s2, 3)) ^ + Te1(byte(s3, 2)) ^ + Te2(byte(s0, 1)) ^ + Te3(byte(s1, 0)) ^ + rk[2]; + t3 = + Te0(byte(s3, 3)) ^ + Te1(byte(s0, 2)) ^ + Te2(byte(s1, 1)) ^ + Te3(byte(s2, 0)) ^ + rk[3]; + if (r == Nr-2) { + break; + } + s0 = t0; s1 = t1; s2 = t2; s3 = t3; + } + rk += 4; + +#else + + /* + * Nr - 1 full rounds: + */ + r = Nr >> 1; + for (;;) { + t0 = + Te0(byte(s0, 3)) ^ + Te1(byte(s1, 2)) ^ + Te2(byte(s2, 1)) ^ + Te3(byte(s3, 0)) ^ + rk[4]; + t1 = + Te0(byte(s1, 3)) ^ + Te1(byte(s2, 2)) ^ + Te2(byte(s3, 1)) ^ + Te3(byte(s0, 0)) ^ + rk[5]; + t2 = + Te0(byte(s2, 3)) ^ + Te1(byte(s3, 2)) ^ + Te2(byte(s0, 1)) ^ + Te3(byte(s1, 0)) ^ + rk[6]; + t3 = + Te0(byte(s3, 3)) ^ + Te1(byte(s0, 2)) ^ + Te2(byte(s1, 1)) ^ + Te3(byte(s2, 0)) ^ + rk[7]; + + rk += 8; + if (--r == 0) { + break; + } + + s0 = + Te0(byte(t0, 3)) ^ + Te1(byte(t1, 2)) ^ + Te2(byte(t2, 1)) ^ + Te3(byte(t3, 0)) ^ + rk[0]; + s1 = + Te0(byte(t1, 3)) ^ + Te1(byte(t2, 2)) ^ + Te2(byte(t3, 1)) ^ + Te3(byte(t0, 0)) ^ + rk[1]; + s2 = + Te0(byte(t2, 3)) ^ + Te1(byte(t3, 2)) ^ + Te2(byte(t0, 1)) ^ + Te3(byte(t1, 0)) ^ + rk[2]; + s3 = + Te0(byte(t3, 3)) ^ + Te1(byte(t0, 2)) ^ + Te2(byte(t1, 1)) ^ + Te3(byte(t2, 0)) ^ + rk[3]; + } + +#endif + + /* + * apply last round and + * map cipher state to byte array block: + */ + s0 = + (Te4_3[byte(t0, 3)]) ^ + (Te4_2[byte(t1, 2)]) ^ + (Te4_1[byte(t2, 1)]) ^ + (Te4_0[byte(t3, 0)]) ^ + rk[0]; + STORE32H(s0, ct); + s1 = + (Te4_3[byte(t1, 3)]) ^ + (Te4_2[byte(t2, 2)]) ^ + (Te4_1[byte(t3, 1)]) ^ + (Te4_0[byte(t0, 0)]) ^ + rk[1]; + STORE32H(s1, ct+4); + s2 = + (Te4_3[byte(t2, 3)]) ^ + (Te4_2[byte(t3, 2)]) ^ + (Te4_1[byte(t0, 1)]) ^ + (Te4_0[byte(t1, 0)]) ^ + rk[2]; + STORE32H(s2, ct+8); + s3 = + (Te4_3[byte(t3, 3)]) ^ + (Te4_2[byte(t0, 2)]) ^ + (Te4_1[byte(t1, 1)]) ^ + (Te4_0[byte(t2, 0)]) ^ + rk[3]; + STORE32H(s3, ct+12); + + return CRYPT_OK; +} + +#ifdef LTC_CLEAN_STACK +int ECB_ENC(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) +{ + int err = _rijndael_ecb_encrypt(pt, ct, skey); + burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2); + return err; +} +#endif + +#ifndef ENCRYPT_ONLY + +/** + Decrypts a block of text with AES + @param ct The input ciphertext (16 bytes) + @param pt The output plaintext (16 bytes) + @param skey The key as scheduled + @return CRYPT_OK if successful +*/ +#ifdef LTC_CLEAN_STACK +static int _rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) +#else +int ECB_DEC(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) +#endif +{ + ulong32 s0, s1, s2, s3, t0, t1, t2, t3, *rk; + int Nr, r; + + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(skey != NULL); + + Nr = skey->rijndael.Nr; + rk = skey->rijndael.dK; + + /* + * map byte array block to cipher state + * and add initial round key: + */ + LOAD32H(s0, ct ); s0 ^= rk[0]; + LOAD32H(s1, ct + 4); s1 ^= rk[1]; + LOAD32H(s2, ct + 8); s2 ^= rk[2]; + LOAD32H(s3, ct + 12); s3 ^= rk[3]; + +#ifdef LTC_SMALL_CODE + for (r = 0; ; r++) { + rk += 4; + t0 = + Td0(byte(s0, 3)) ^ + Td1(byte(s3, 2)) ^ + Td2(byte(s2, 1)) ^ + Td3(byte(s1, 0)) ^ + rk[0]; + t1 = + Td0(byte(s1, 3)) ^ + Td1(byte(s0, 2)) ^ + Td2(byte(s3, 1)) ^ + Td3(byte(s2, 0)) ^ + rk[1]; + t2 = + Td0(byte(s2, 3)) ^ + Td1(byte(s1, 2)) ^ + Td2(byte(s0, 1)) ^ + Td3(byte(s3, 0)) ^ + rk[2]; + t3 = + Td0(byte(s3, 3)) ^ + Td1(byte(s2, 2)) ^ + Td2(byte(s1, 1)) ^ + Td3(byte(s0, 0)) ^ + rk[3]; + if (r == Nr-2) { + break; + } + s0 = t0; s1 = t1; s2 = t2; s3 = t3; + } + rk += 4; + +#else + + /* + * Nr - 1 full rounds: + */ + r = Nr >> 1; + for (;;) { + + t0 = + Td0(byte(s0, 3)) ^ + Td1(byte(s3, 2)) ^ + Td2(byte(s2, 1)) ^ + Td3(byte(s1, 0)) ^ + rk[4]; + t1 = + Td0(byte(s1, 3)) ^ + Td1(byte(s0, 2)) ^ + Td2(byte(s3, 1)) ^ + Td3(byte(s2, 0)) ^ + rk[5]; + t2 = + Td0(byte(s2, 3)) ^ + Td1(byte(s1, 2)) ^ + Td2(byte(s0, 1)) ^ + Td3(byte(s3, 0)) ^ + rk[6]; + t3 = + Td0(byte(s3, 3)) ^ + Td1(byte(s2, 2)) ^ + Td2(byte(s1, 1)) ^ + Td3(byte(s0, 0)) ^ + rk[7]; + + rk += 8; + if (--r == 0) { + break; + } + + + s0 = + Td0(byte(t0, 3)) ^ + Td1(byte(t3, 2)) ^ + Td2(byte(t2, 1)) ^ + Td3(byte(t1, 0)) ^ + rk[0]; + s1 = + Td0(byte(t1, 3)) ^ + Td1(byte(t0, 2)) ^ + Td2(byte(t3, 1)) ^ + Td3(byte(t2, 0)) ^ + rk[1]; + s2 = + Td0(byte(t2, 3)) ^ + Td1(byte(t1, 2)) ^ + Td2(byte(t0, 1)) ^ + Td3(byte(t3, 0)) ^ + rk[2]; + s3 = + Td0(byte(t3, 3)) ^ + Td1(byte(t2, 2)) ^ + Td2(byte(t1, 1)) ^ + Td3(byte(t0, 0)) ^ + rk[3]; + } +#endif + + /* + * apply last round and + * map cipher state to byte array block: + */ + s0 = + (Td4[byte(t0, 3)] & 0xff000000) ^ + (Td4[byte(t3, 2)] & 0x00ff0000) ^ + (Td4[byte(t2, 1)] & 0x0000ff00) ^ + (Td4[byte(t1, 0)] & 0x000000ff) ^ + rk[0]; + STORE32H(s0, pt); + s1 = + (Td4[byte(t1, 3)] & 0xff000000) ^ + (Td4[byte(t0, 2)] & 0x00ff0000) ^ + (Td4[byte(t3, 1)] & 0x0000ff00) ^ + (Td4[byte(t2, 0)] & 0x000000ff) ^ + rk[1]; + STORE32H(s1, pt+4); + s2 = + (Td4[byte(t2, 3)] & 0xff000000) ^ + (Td4[byte(t1, 2)] & 0x00ff0000) ^ + (Td4[byte(t0, 1)] & 0x0000ff00) ^ + (Td4[byte(t3, 0)] & 0x000000ff) ^ + rk[2]; + STORE32H(s2, pt+8); + s3 = + (Td4[byte(t3, 3)] & 0xff000000) ^ + (Td4[byte(t2, 2)] & 0x00ff0000) ^ + (Td4[byte(t1, 1)] & 0x0000ff00) ^ + (Td4[byte(t0, 0)] & 0x000000ff) ^ + rk[3]; + STORE32H(s3, pt+12); + + return CRYPT_OK; +} + + +#ifdef LTC_CLEAN_STACK +int ECB_DEC(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) +{ + int err = _rijndael_ecb_decrypt(ct, pt, skey); + burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2); + return err; +} +#endif + +/** + Performs a self-test of the AES block cipher + @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled +*/ +int ECB_TEST(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + int err; + static const struct { + int keylen; + unsigned char key[32], pt[16], ct[16]; + } tests[] = { + { 16, + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }, + { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, + { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, + 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a } + }, { + 24, + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 }, + { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, + { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0, + 0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 } + }, { + 32, + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }, + { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, + { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf, + 0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 } + } + }; + + symmetric_key key; + unsigned char tmp[2][16]; + int i, y; + + for (i = 0; i < (int)(sizeof(tests)/sizeof(tests[0])); i++) { + zeromem(&key, sizeof(key)); + if ((err = rijndael_setup(tests[i].key, tests[i].keylen, 0, &key)) != CRYPT_OK) { + return err; + } + + rijndael_ecb_encrypt(tests[i].pt, tmp[0], &key); + rijndael_ecb_decrypt(tmp[0], tmp[1], &key); + if (XMEMCMP(tmp[0], tests[i].ct, 16) || XMEMCMP(tmp[1], tests[i].pt, 16)) { +#if 0 + printf("\n\nTest %d failed\n", i); + if (XMEMCMP(tmp[0], tests[i].ct, 16)) { + printf("CT: "); + for (i = 0; i < 16; i++) { + printf("%02x ", tmp[0][i]); + } + printf("\n"); + } else { + printf("PT: "); + for (i = 0; i < 16; i++) { + printf("%02x ", tmp[1][i]); + } + printf("\n"); + } +#endif + return CRYPT_FAIL_TESTVECTOR; + } + + /* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */ + for (y = 0; y < 16; y++) tmp[0][y] = 0; + for (y = 0; y < 1000; y++) rijndael_ecb_encrypt(tmp[0], tmp[0], &key); + for (y = 0; y < 1000; y++) rijndael_ecb_decrypt(tmp[0], tmp[0], &key); + for (y = 0; y < 16; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR; + } + return CRYPT_OK; + #endif +} + +#endif /* ENCRYPT_ONLY */ + + +/** Terminate the context + @param skey The scheduled key +*/ +void ECB_DONE(symmetric_key *skey) +{ + //LTC_UNUSED_PARAM(skey); +} + + +/** + Gets suitable key size + @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. + @return CRYPT_OK if the input key size is acceptable. +*/ +int ECB_KS(int *keysize) +{ + LTC_ARGCHK(keysize != NULL); + + if (*keysize < 16) + return CRYPT_INVALID_KEYSIZE; + if (*keysize < 24) { + *keysize = 16; + return CRYPT_OK; + } else if (*keysize < 32) { + *keysize = 24; + return CRYPT_OK; + } else { + *keysize = 32; + return CRYPT_OK; + } +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file cbc_decrypt.c + CBC implementation, encrypt block, Tom St Denis +*/ + + +#ifdef LTC_CBC_MODE + +/** + CBC decrypt + @param ct Ciphertext + @param pt [out] Plaintext + @param len The number of bytes to process (must be multiple of block length) + @param cbc CBC state + @return CRYPT_OK if successful +*/ +int cbc_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CBC *cbc) +{ + int x, err; + unsigned char tmp[16]; +#ifdef LTC_FAST + LTC_FAST_TYPE tmpy; +#else + unsigned char tmpy; +#endif + + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(cbc != NULL); + + if ((err = cipher_is_valid(cbc->cipher)) != CRYPT_OK) { + return err; + } + + /* is blocklen valid? */ + if (cbc->blocklen < 1 || cbc->blocklen > (int)sizeof(cbc->IV)) { + return CRYPT_INVALID_ARG; + } + + if (len % cbc->blocklen) { + return CRYPT_INVALID_ARG; + } +#ifdef LTC_FAST + if (cbc->blocklen % sizeof(LTC_FAST_TYPE)) { + return CRYPT_INVALID_ARG; + } +#endif + + if (cipher_descriptor[cbc->cipher].accel_cbc_decrypt != NULL) { + return cipher_descriptor[cbc->cipher].accel_cbc_decrypt(ct, pt, len / cbc->blocklen, cbc->IV, &cbc->key); + } else { + while (len) { + /* decrypt */ + if ((err = cipher_descriptor[cbc->cipher].ecb_decrypt(ct, tmp, &cbc->key)) != CRYPT_OK) { + return err; + } + + /* xor IV against plaintext */ + #if defined(LTC_FAST) + for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) { + tmpy = *((LTC_FAST_TYPE*)((unsigned char *)cbc->IV + x)) ^ *((LTC_FAST_TYPE*)((unsigned char *)tmp + x)); + *((LTC_FAST_TYPE*)((unsigned char *)cbc->IV + x)) = *((LTC_FAST_TYPE*)((unsigned char *)ct + x)); + *((LTC_FAST_TYPE*)((unsigned char *)pt + x)) = tmpy; + } + #else + for (x = 0; x < cbc->blocklen; x++) { + tmpy = tmp[x] ^ cbc->IV[x]; + cbc->IV[x] = ct[x]; + pt[x] = tmpy; + } + #endif + + ct += cbc->blocklen; + pt += cbc->blocklen; + len -= cbc->blocklen; + } + } + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file cbc_done.c + CBC implementation, finish chain, Tom St Denis +*/ + +#ifdef LTC_CBC_MODE + +/** Terminate the chain + @param cbc The CBC chain to terminate + @return CRYPT_OK on success +*/ +int cbc_done(symmetric_CBC *cbc) +{ + int err; + LTC_ARGCHK(cbc != NULL); + + if ((err = cipher_is_valid(cbc->cipher)) != CRYPT_OK) { + return err; + } + cipher_descriptor[cbc->cipher].done(&cbc->key); + return CRYPT_OK; +} + + + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file cbc_encrypt.c + CBC implementation, encrypt block, Tom St Denis +*/ + + +#ifdef LTC_CBC_MODE + +/** + CBC encrypt + @param pt Plaintext + @param ct [out] Ciphertext + @param len The number of bytes to process (must be multiple of block length) + @param cbc CBC state + @return CRYPT_OK if successful +*/ +int cbc_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CBC *cbc) +{ + int x, err; + + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(cbc != NULL); + + if ((err = cipher_is_valid(cbc->cipher)) != CRYPT_OK) { + return err; + } + + /* is blocklen valid? */ + if (cbc->blocklen < 1 || cbc->blocklen > (int)sizeof(cbc->IV)) { + return CRYPT_INVALID_ARG; + } + + if (len % cbc->blocklen) { + return CRYPT_INVALID_ARG; + } +#ifdef LTC_FAST + if (cbc->blocklen % sizeof(LTC_FAST_TYPE)) { + return CRYPT_INVALID_ARG; + } +#endif + + if (cipher_descriptor[cbc->cipher].accel_cbc_encrypt != NULL) { + return cipher_descriptor[cbc->cipher].accel_cbc_encrypt(pt, ct, len / cbc->blocklen, cbc->IV, &cbc->key); + } else { + while (len) { + /* xor IV against plaintext */ + #if defined(LTC_FAST) + for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)((unsigned char *)cbc->IV + x)) ^= *((LTC_FAST_TYPE*)((unsigned char *)pt + x)); + } + #else + for (x = 0; x < cbc->blocklen; x++) { + cbc->IV[x] ^= pt[x]; + } + #endif + + /* encrypt */ + if ((err = cipher_descriptor[cbc->cipher].ecb_encrypt(cbc->IV, ct, &cbc->key)) != CRYPT_OK) { + return err; + } + + /* store IV [ciphertext] for a future block */ + #if defined(LTC_FAST) + for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)((unsigned char *)cbc->IV + x)) = *((LTC_FAST_TYPE*)((unsigned char *)ct + x)); + } + #else + for (x = 0; x < cbc->blocklen; x++) { + cbc->IV[x] = ct[x]; + } + #endif + + ct += cbc->blocklen; + pt += cbc->blocklen; + len -= cbc->blocklen; + } + } + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file cbc_getiv.c + CBC implementation, get IV, Tom St Denis +*/ + +#ifdef LTC_CBC_MODE + +/** + Get the current initial vector + @param IV [out] The destination of the initial vector + @param len [in/out] The max size and resulting size of the initial vector + @param cbc The CBC state + @return CRYPT_OK if successful +*/ +int cbc_getiv(unsigned char *IV, unsigned long *len, symmetric_CBC *cbc) +{ + LTC_ARGCHK(IV != NULL); + LTC_ARGCHK(len != NULL); + LTC_ARGCHK(cbc != NULL); + if ((unsigned long)cbc->blocklen > *len) { + *len = cbc->blocklen; + return CRYPT_BUFFER_OVERFLOW; + } + XMEMCPY(IV, cbc->IV, cbc->blocklen); + *len = cbc->blocklen; + + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file cbc_setiv.c + CBC implementation, set IV, Tom St Denis +*/ + + +#ifdef LTC_CBC_MODE + +/** + Set an initial vector + @param IV The initial vector + @param len The length of the vector (in octets) + @param cbc The CBC state + @return CRYPT_OK if successful +*/ +int cbc_setiv(const unsigned char *IV, unsigned long len, symmetric_CBC *cbc) +{ + LTC_ARGCHK(IV != NULL); + LTC_ARGCHK(cbc != NULL); + if (len != (unsigned long)cbc->blocklen) { + return CRYPT_INVALID_ARG; + } + XMEMCPY(cbc->IV, IV, len); + return CRYPT_OK; +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + +/** + @file cbc_start.c + CBC implementation, start chain, Tom St Denis +*/ + +#ifdef LTC_CBC_MODE + +/** + Initialize a CBC context + @param cipher The index of the cipher desired + @param IV The initial vector + @param key The secret key + @param keylen The length of the secret key (octets) + @param num_rounds Number of rounds in the cipher desired (0 for default) + @param cbc The CBC state to initialize + @return CRYPT_OK if successful +*/ +int cbc_start(int cipher, const unsigned char *IV, const unsigned char *key, + int keylen, int num_rounds, symmetric_CBC *cbc) +{ + int x, err; + + LTC_ARGCHK(IV != NULL); + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(cbc != NULL); + + /* bad param? */ + if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { + return err; + } + + /* setup cipher */ + if ((err = cipher_descriptor[cipher].setup(key, keylen, num_rounds, &cbc->key)) != CRYPT_OK) { + return err; + } + + /* copy IV */ + cbc->blocklen = cipher_descriptor[cipher].block_length; + cbc->cipher = cipher; + for (x = 0; x < cbc->blocklen; x++) { + cbc->IV[x] = IV[x]; + } + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file gcm_add_iv.c + GCM implementation, add IV data to the state, by Tom St Denis +*/ + + +#ifdef LTC_GCM_MODE + +/** + Add IV data to the GCM state + @param gcm The GCM state + @param IV The initial value data to add + @param IVlen The length of the IV + @return CRYPT_OK on success + */ +int gcm_add_iv(gcm_state *gcm, + const unsigned char *IV, unsigned long IVlen) +{ + unsigned long x, y; + int err; + + LTC_ARGCHK(gcm != NULL); + if (IVlen > 0) { + LTC_ARGCHK(IV != NULL); + } + + /* must be in IV mode */ + if (gcm->mode != LTC_GCM_MODE_IV) { + return CRYPT_INVALID_ARG; + } + + if (gcm->buflen >= 16 || gcm->buflen < 0) { + return CRYPT_INVALID_ARG; + } + + if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) { + return err; + } + + + /* trip the ivmode flag */ + if (IVlen + gcm->buflen > 12) { + gcm->ivmode |= 1; + } + + x = 0; +#ifdef LTC_FAST + if (gcm->buflen == 0) { + for (x = 0; x < (IVlen & ~15); x += 16) { + for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)(&gcm->X[y])) ^= *((LTC_FAST_TYPE*)(&IV[x + y])); + } + gcm_mult_h(gcm, gcm->X); + gcm->totlen += 128; + } + IV += x; + } +#endif + + /* start adding IV data to the state */ + for (; x < IVlen; x++) { + gcm->buf[gcm->buflen++] = *IV++; + + if (gcm->buflen == 16) { + /* GF mult it */ + for (y = 0; y < 16; y++) { + gcm->X[y] ^= gcm->buf[y]; + } + gcm_mult_h(gcm, gcm->X); + gcm->buflen = 0; + gcm->totlen += 128; + } + } + + return CRYPT_OK; +} + +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/encauth/gcm/gcm_add_iv.c,v $ */ +/* $Revision: 1.9 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file gcm_done.c + GCM implementation, Terminate the stream, by Tom St Denis +*/ + + +#ifdef LTC_GCM_MODE + +/** + Terminate a GCM stream + @param gcm The GCM state + @param tag [out] The destination for the MAC tag + @param taglen [in/out] The length of the MAC tag + @return CRYPT_OK on success + */ +int gcm_done(gcm_state *gcm, + unsigned char *tag, unsigned long *taglen) +{ + unsigned long x; + int err; + + LTC_ARGCHK(gcm != NULL); + LTC_ARGCHK(tag != NULL); + LTC_ARGCHK(taglen != NULL); + + if (gcm->buflen > 16 || gcm->buflen < 0) { + return CRYPT_INVALID_ARG; + } + + if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) { + return err; + } + + + if (gcm->mode != LTC_GCM_MODE_TEXT) { + return CRYPT_INVALID_ARG; + } + + /* handle remaining ciphertext */ + if (gcm->buflen) { + gcm->pttotlen += gcm->buflen * CONST64(8); + gcm_mult_h(gcm, gcm->X); + } + + /* length */ + STORE64H(gcm->totlen, gcm->buf); + STORE64H(gcm->pttotlen, gcm->buf+8); + for (x = 0; x < 16; x++) { + gcm->X[x] ^= gcm->buf[x]; + } + gcm_mult_h(gcm, gcm->X); + + /* encrypt original counter */ + if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y_0, gcm->buf, &gcm->K)) != CRYPT_OK) { + return err; + } + for (x = 0; x < 16 && x < *taglen; x++) { + tag[x] = gcm->buf[x] ^ gcm->X[x]; + } + *taglen = x; + + cipher_descriptor[gcm->cipher].done(&gcm->K); + + return CRYPT_OK; +} + +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/encauth/gcm/gcm_done.c,v $ */ +/* $Revision: 1.11 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file gcm_init.c + GCM implementation, initialize state, by Tom St Denis +*/ + + +#ifdef LTC_GCM_MODE + +/** + Initialize a GCM state + @param gcm The GCM state to initialize + @param cipher The index of the cipher to use + @param key The secret key + @param keylen The length of the secret key + @return CRYPT_OK on success + */ +int gcm_init(gcm_state *gcm, int cipher, + const unsigned char *key, int keylen) +{ + int err; + unsigned char B[16]; +#ifdef LTC_GCM_TABLES + int x, y, z, t; +#endif + + LTC_ARGCHK(gcm != NULL); + LTC_ARGCHK(key != NULL); + +#ifdef LTC_FAST + if (16 % sizeof(LTC_FAST_TYPE)) { + return CRYPT_INVALID_ARG; + } +#endif + + /* is cipher valid? */ + if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { + return err; + } + if (cipher_descriptor[cipher].block_length != 16) { + return CRYPT_INVALID_CIPHER; + } + + /* schedule key */ + if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, &gcm->K)) != CRYPT_OK) { + return err; + } + + /* H = E(0) */ + zeromem(B, 16); + if ((err = cipher_descriptor[cipher].ecb_encrypt(B, gcm->H, &gcm->K)) != CRYPT_OK) { + return err; + } + + /* setup state */ + zeromem(gcm->buf, sizeof(gcm->buf)); + zeromem(gcm->X, sizeof(gcm->X)); + gcm->cipher = cipher; + gcm->mode = LTC_GCM_MODE_IV; + gcm->ivmode = 0; + gcm->buflen = 0; + gcm->totlen = 0; + gcm->pttotlen = 0; + +#ifdef LTC_GCM_TABLES + /* setup tables */ + + /* generate the first table as it has no shifting (from which we make the other tables) */ + zeromem(B, 16); + for (y = 0; y < 256; y++) { + B[0] = y; + gcm_gf_mult(gcm->H, B, &gcm->PC[0][y][0]); + } + + /* now generate the rest of the tables based the previous table */ + for (x = 1; x < 16; x++) { + for (y = 0; y < 256; y++) { + /* now shift it right by 8 bits */ + t = gcm->PC[x-1][y][15]; + for (z = 15; z > 0; z--) { + gcm->PC[x][y][z] = gcm->PC[x-1][y][z-1]; + } + gcm->PC[x][y][0] = gcm_shift_table[t<<1]; + gcm->PC[x][y][1] ^= gcm_shift_table[(t<<1)+1]; + } + } + +#endif + + return CRYPT_OK; +} + +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/encauth/gcm/gcm_init.c,v $ */ +/* $Revision: 1.20 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file gcm_process.c + GCM implementation, process message data, by Tom St Denis +*/ + + +#ifdef LTC_GCM_MODE + +/** + Process plaintext/ciphertext through GCM + @param gcm The GCM state + @param pt The plaintext + @param ptlen The plaintext length (ciphertext length is the same) + @param ct The ciphertext + @param direction Encrypt or Decrypt mode (GCM_ENCRYPT or GCM_DECRYPT) + @return CRYPT_OK on success + */ +int gcm_process(gcm_state *gcm, + unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + int direction) +{ + unsigned long x; + int y, err; + unsigned char b; + + LTC_ARGCHK(gcm != NULL); + if (ptlen > 0) { + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + } + + if (gcm->buflen > 16 || gcm->buflen < 0) { + return CRYPT_INVALID_ARG; + } + + if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) { + return err; + } + + /* in AAD mode? */ + if (gcm->mode == LTC_GCM_MODE_AAD) { + /* let's process the AAD */ + if (gcm->buflen) { + gcm->totlen += gcm->buflen * CONST64(8); + gcm_mult_h(gcm, gcm->X); + } + + /* increment counter */ + for (y = 15; y >= 12; y--) { + if (++gcm->Y[y] & 255) { break; } + } + /* encrypt the counter */ + if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { + return err; + } + + gcm->buflen = 0; + gcm->mode = LTC_GCM_MODE_TEXT; + } + + if (gcm->mode != LTC_GCM_MODE_TEXT) { + return CRYPT_INVALID_ARG; + } + + x = 0; +#ifdef LTC_FAST + if (gcm->buflen == 0) { + if (direction == GCM_ENCRYPT) { + for (x = 0; x < (ptlen & ~15); x += 16) { + /* ctr encrypt */ + for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)(&ct[x + y])) = *((LTC_FAST_TYPE*)(&pt[x+y])) ^ *((LTC_FAST_TYPE*)(&gcm->buf[y])); + *((LTC_FAST_TYPE*)(&gcm->X[y])) ^= *((LTC_FAST_TYPE*)(&ct[x+y])); + } + /* GMAC it */ + gcm->pttotlen += 128; + gcm_mult_h(gcm, gcm->X); + /* increment counter */ + for (y = 15; y >= 12; y--) { + if (++gcm->Y[y] & 255) { break; } + } + if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { + return err; + } + } + } else { + for (x = 0; x < (ptlen & ~15); x += 16) { + /* ctr encrypt */ + for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)(&gcm->X[y])) ^= *((LTC_FAST_TYPE*)(&ct[x+y])); + *((LTC_FAST_TYPE*)(&pt[x + y])) = *((LTC_FAST_TYPE*)(&ct[x+y])) ^ *((LTC_FAST_TYPE*)(&gcm->buf[y])); + } + /* GMAC it */ + gcm->pttotlen += 128; + gcm_mult_h(gcm, gcm->X); + /* increment counter */ + for (y = 15; y >= 12; y--) { + if (++gcm->Y[y] & 255) { break; } + } + if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { + return err; + } + } + } + } +#endif + + /* process text */ + for (; x < ptlen; x++) { + if (gcm->buflen == 16) { + gcm->pttotlen += 128; + gcm_mult_h(gcm, gcm->X); + + /* increment counter */ + for (y = 15; y >= 12; y--) { + if (++gcm->Y[y] & 255) { break; } + } + if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { + return err; + } + gcm->buflen = 0; + } + + if (direction == GCM_ENCRYPT) { + b = ct[x] = pt[x] ^ gcm->buf[gcm->buflen]; + } else { + b = ct[x]; + pt[x] = ct[x] ^ gcm->buf[gcm->buflen]; + } + gcm->X[gcm->buflen++] ^= b; + } + + return CRYPT_OK; +} + +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/encauth/gcm/gcm_process.c,v $ */ +/* $Revision: 1.16 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file gcm_mult_h.c + GCM implementation, do the GF mult, by Tom St Denis +*/ + + +#if defined(LTC_GCM_MODE) +/** + GCM multiply by H + @param gcm The GCM state which holds the H value + @param I The value to multiply H by + */ +void gcm_mult_h(gcm_state *gcm, unsigned char *I) +{ + unsigned char T[16]; +#ifdef LTC_GCM_TABLES + int x, y; +#ifdef LTC_GCM_TABLES_SSE2 + asm("movdqa (%0),%%xmm0"::"r"(&gcm->PC[0][I[0]][0])); + for (x = 1; x < 16; x++) { + asm("pxor (%0),%%xmm0"::"r"(&gcm->PC[x][I[x]][0])); + } + asm("movdqa %%xmm0,(%0)"::"r"(&T)); +#else + XMEMCPY(T, &gcm->PC[0][I[0]][0], 16); + for (x = 1; x < 16; x++) { +#ifdef LTC_FAST + for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE *)(T + y)) ^= *((LTC_FAST_TYPE *)(&gcm->PC[x][I[x]][y])); + } +#else + for (y = 0; y < 16; y++) { + T[y] ^= gcm->PC[x][I[x]][y]; + } +#endif /* LTC_FAST */ + } +#endif /* LTC_GCM_TABLES_SSE2 */ +#else + gcm_gf_mult(gcm->H, I, T); +#endif + XMEMCPY(I, T, 16); +} +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/encauth/gcm/gcm_mult_h.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file gcm_gf_mult.c + GCM implementation, do the GF mult, by Tom St Denis +*/ + + +#if defined(LTC_GCM_TABLES) || defined(LRW_TABLES) || ((defined(LTC_GCM_MODE) || defined(LTC_GCM_MODE)) && defined(LTC_FAST)) + +/* this is x*2^128 mod p(x) ... the results are 16 bytes each stored in a packed format. Since only the + * lower 16 bits are not zero'ed I removed the upper 14 bytes */ +const unsigned char gcm_shift_table[256*2] = { +0x00, 0x00, 0x01, 0xc2, 0x03, 0x84, 0x02, 0x46, 0x07, 0x08, 0x06, 0xca, 0x04, 0x8c, 0x05, 0x4e, +0x0e, 0x10, 0x0f, 0xd2, 0x0d, 0x94, 0x0c, 0x56, 0x09, 0x18, 0x08, 0xda, 0x0a, 0x9c, 0x0b, 0x5e, +0x1c, 0x20, 0x1d, 0xe2, 0x1f, 0xa4, 0x1e, 0x66, 0x1b, 0x28, 0x1a, 0xea, 0x18, 0xac, 0x19, 0x6e, +0x12, 0x30, 0x13, 0xf2, 0x11, 0xb4, 0x10, 0x76, 0x15, 0x38, 0x14, 0xfa, 0x16, 0xbc, 0x17, 0x7e, +0x38, 0x40, 0x39, 0x82, 0x3b, 0xc4, 0x3a, 0x06, 0x3f, 0x48, 0x3e, 0x8a, 0x3c, 0xcc, 0x3d, 0x0e, +0x36, 0x50, 0x37, 0x92, 0x35, 0xd4, 0x34, 0x16, 0x31, 0x58, 0x30, 0x9a, 0x32, 0xdc, 0x33, 0x1e, +0x24, 0x60, 0x25, 0xa2, 0x27, 0xe4, 0x26, 0x26, 0x23, 0x68, 0x22, 0xaa, 0x20, 0xec, 0x21, 0x2e, +0x2a, 0x70, 0x2b, 0xb2, 0x29, 0xf4, 0x28, 0x36, 0x2d, 0x78, 0x2c, 0xba, 0x2e, 0xfc, 0x2f, 0x3e, +0x70, 0x80, 0x71, 0x42, 0x73, 0x04, 0x72, 0xc6, 0x77, 0x88, 0x76, 0x4a, 0x74, 0x0c, 0x75, 0xce, +0x7e, 0x90, 0x7f, 0x52, 0x7d, 0x14, 0x7c, 0xd6, 0x79, 0x98, 0x78, 0x5a, 0x7a, 0x1c, 0x7b, 0xde, +0x6c, 0xa0, 0x6d, 0x62, 0x6f, 0x24, 0x6e, 0xe6, 0x6b, 0xa8, 0x6a, 0x6a, 0x68, 0x2c, 0x69, 0xee, +0x62, 0xb0, 0x63, 0x72, 0x61, 0x34, 0x60, 0xf6, 0x65, 0xb8, 0x64, 0x7a, 0x66, 0x3c, 0x67, 0xfe, +0x48, 0xc0, 0x49, 0x02, 0x4b, 0x44, 0x4a, 0x86, 0x4f, 0xc8, 0x4e, 0x0a, 0x4c, 0x4c, 0x4d, 0x8e, +0x46, 0xd0, 0x47, 0x12, 0x45, 0x54, 0x44, 0x96, 0x41, 0xd8, 0x40, 0x1a, 0x42, 0x5c, 0x43, 0x9e, +0x54, 0xe0, 0x55, 0x22, 0x57, 0x64, 0x56, 0xa6, 0x53, 0xe8, 0x52, 0x2a, 0x50, 0x6c, 0x51, 0xae, +0x5a, 0xf0, 0x5b, 0x32, 0x59, 0x74, 0x58, 0xb6, 0x5d, 0xf8, 0x5c, 0x3a, 0x5e, 0x7c, 0x5f, 0xbe, +0xe1, 0x00, 0xe0, 0xc2, 0xe2, 0x84, 0xe3, 0x46, 0xe6, 0x08, 0xe7, 0xca, 0xe5, 0x8c, 0xe4, 0x4e, +0xef, 0x10, 0xee, 0xd2, 0xec, 0x94, 0xed, 0x56, 0xe8, 0x18, 0xe9, 0xda, 0xeb, 0x9c, 0xea, 0x5e, +0xfd, 0x20, 0xfc, 0xe2, 0xfe, 0xa4, 0xff, 0x66, 0xfa, 0x28, 0xfb, 0xea, 0xf9, 0xac, 0xf8, 0x6e, +0xf3, 0x30, 0xf2, 0xf2, 0xf0, 0xb4, 0xf1, 0x76, 0xf4, 0x38, 0xf5, 0xfa, 0xf7, 0xbc, 0xf6, 0x7e, +0xd9, 0x40, 0xd8, 0x82, 0xda, 0xc4, 0xdb, 0x06, 0xde, 0x48, 0xdf, 0x8a, 0xdd, 0xcc, 0xdc, 0x0e, +0xd7, 0x50, 0xd6, 0x92, 0xd4, 0xd4, 0xd5, 0x16, 0xd0, 0x58, 0xd1, 0x9a, 0xd3, 0xdc, 0xd2, 0x1e, +0xc5, 0x60, 0xc4, 0xa2, 0xc6, 0xe4, 0xc7, 0x26, 0xc2, 0x68, 0xc3, 0xaa, 0xc1, 0xec, 0xc0, 0x2e, +0xcb, 0x70, 0xca, 0xb2, 0xc8, 0xf4, 0xc9, 0x36, 0xcc, 0x78, 0xcd, 0xba, 0xcf, 0xfc, 0xce, 0x3e, +0x91, 0x80, 0x90, 0x42, 0x92, 0x04, 0x93, 0xc6, 0x96, 0x88, 0x97, 0x4a, 0x95, 0x0c, 0x94, 0xce, +0x9f, 0x90, 0x9e, 0x52, 0x9c, 0x14, 0x9d, 0xd6, 0x98, 0x98, 0x99, 0x5a, 0x9b, 0x1c, 0x9a, 0xde, +0x8d, 0xa0, 0x8c, 0x62, 0x8e, 0x24, 0x8f, 0xe6, 0x8a, 0xa8, 0x8b, 0x6a, 0x89, 0x2c, 0x88, 0xee, +0x83, 0xb0, 0x82, 0x72, 0x80, 0x34, 0x81, 0xf6, 0x84, 0xb8, 0x85, 0x7a, 0x87, 0x3c, 0x86, 0xfe, +0xa9, 0xc0, 0xa8, 0x02, 0xaa, 0x44, 0xab, 0x86, 0xae, 0xc8, 0xaf, 0x0a, 0xad, 0x4c, 0xac, 0x8e, +0xa7, 0xd0, 0xa6, 0x12, 0xa4, 0x54, 0xa5, 0x96, 0xa0, 0xd8, 0xa1, 0x1a, 0xa3, 0x5c, 0xa2, 0x9e, +0xb5, 0xe0, 0xb4, 0x22, 0xb6, 0x64, 0xb7, 0xa6, 0xb2, 0xe8, 0xb3, 0x2a, 0xb1, 0x6c, 0xb0, 0xae, +0xbb, 0xf0, 0xba, 0x32, 0xb8, 0x74, 0xb9, 0xb6, 0xbc, 0xf8, 0xbd, 0x3a, 0xbf, 0x7c, 0xbe, 0xbe }; + +#endif + + +#if defined(LTC_GCM_MODE) || defined(LRW_MODE) + +#ifndef LTC_FAST +/* right shift */ +static void gcm_rightshift(unsigned char *a) +{ + int x; + for (x = 15; x > 0; x--) { + a[x] = (a[x]>>1) | ((a[x-1]<<7)&0x80); + } + a[0] >>= 1; +} + +/* c = b*a */ +static const unsigned char mask[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; +static const unsigned char poly[] = { 0x00, 0xE1 }; + + +/** + GCM GF multiplier (internal use only) bitserial + @param a First value + @param b Second value + @param c Destination for a * b + */ +void gcm_gf_mult(const unsigned char *a, const unsigned char *b, unsigned char *c) +{ + unsigned char Z[16], V[16]; + unsigned char x, y, z; + + zeromem(Z, 16); + XMEMCPY(V, a, 16); + for (x = 0; x < 128; x++) { + if (b[x>>3] & mask[x&7]) { + for (y = 0; y < 16; y++) { + Z[y] ^= V[y]; + } + } + z = V[15] & 0x01; + gcm_rightshift(V); + V[0] ^= poly[z]; + } + XMEMCPY(c, Z, 16); +} + +#else + +/* map normal numbers to "ieee" way ... e.g. bit reversed */ +#define M(x) ( ((x&8)>>3) | ((x&4)>>1) | ((x&2)<<1) | ((x&1)<<3) ) + +#define BPD (sizeof(LTC_FAST_TYPE) * 8) +#define WPV (1 + (16 / sizeof(LTC_FAST_TYPE))) + +/** + GCM GF multiplier (internal use only) word oriented + @param a First value + @param b Second value + @param c Destination for a * b + */ +void gcm_gf_mult(const unsigned char *a, const unsigned char *b, unsigned char *c) +{ + int i, j, k, u; + LTC_FAST_TYPE B[16][WPV], tmp[32 / sizeof(LTC_FAST_TYPE)], pB[16 / sizeof(LTC_FAST_TYPE)], zz, z; + unsigned char pTmp[32]; + + /* create simple tables */ + zeromem(B[0], sizeof(B[0])); + zeromem(B[M(1)], sizeof(B[M(1)])); + +#ifdef ENDIAN_32BITWORD + for (i = 0; i < 4; i++) { + LOAD32H(B[M(1)][i], a + (i<<2)); + LOAD32L(pB[i], b + (i<<2)); + } +#else + for (i = 0; i < 2; i++) { + LOAD64H(B[M(1)][i], a + (i<<3)); + LOAD64L(pB[i], b + (i<<3)); + } +#endif + + /* now create 2, 4 and 8 */ + B[M(2)][0] = B[M(1)][0] >> 1; + B[M(4)][0] = B[M(1)][0] >> 2; + B[M(8)][0] = B[M(1)][0] >> 3; + for (i = 1; i < (int)WPV; i++) { + B[M(2)][i] = (B[M(1)][i-1] << (BPD-1)) | (B[M(1)][i] >> 1); + B[M(4)][i] = (B[M(1)][i-1] << (BPD-2)) | (B[M(1)][i] >> 2); + B[M(8)][i] = (B[M(1)][i-1] << (BPD-3)) | (B[M(1)][i] >> 3); + } + + /* now all values with two bits which are 3, 5, 6, 9, 10, 12 */ + for (i = 0; i < (int)WPV; i++) { + B[M(3)][i] = B[M(1)][i] ^ B[M(2)][i]; + B[M(5)][i] = B[M(1)][i] ^ B[M(4)][i]; + B[M(6)][i] = B[M(2)][i] ^ B[M(4)][i]; + B[M(9)][i] = B[M(1)][i] ^ B[M(8)][i]; + B[M(10)][i] = B[M(2)][i] ^ B[M(8)][i]; + B[M(12)][i] = B[M(8)][i] ^ B[M(4)][i]; + + /* now all 3 bit values and the only 4 bit value: 7, 11, 13, 14, 15 */ + B[M(7)][i] = B[M(3)][i] ^ B[M(4)][i]; + B[M(11)][i] = B[M(3)][i] ^ B[M(8)][i]; + B[M(13)][i] = B[M(1)][i] ^ B[M(12)][i]; + B[M(14)][i] = B[M(6)][i] ^ B[M(8)][i]; + B[M(15)][i] = B[M(7)][i] ^ B[M(8)][i]; + } + + zeromem(tmp, sizeof(tmp)); + + /* compute product four bits of each word at a time */ + /* for each nibble */ + for (i = (BPD/4)-1; i >= 0; i--) { + /* for each word */ + for (j = 0; j < (int)(WPV-1); j++) { + /* grab the 4 bits recall the nibbles are backwards so it's a shift by (i^1)*4 */ + u = (pB[j] >> ((i^1)<<2)) & 15; + + /* add offset by the word count the table looked up value to the result */ + for (k = 0; k < (int)WPV; k++) { + tmp[k+j] ^= B[u][k]; + } + } + /* shift result up by 4 bits */ + if (i != 0) { + for (z = j = 0; j < (int)(32 / sizeof(LTC_FAST_TYPE)); j++) { + zz = tmp[j] << (BPD-4); + tmp[j] = (tmp[j] >> 4) | z; + z = zz; + } + } + } + + /* store product */ +#ifdef ENDIAN_32BITWORD + for (i = 0; i < 8; i++) { + STORE32H(tmp[i], pTmp + (i<<2)); + } +#else + for (i = 0; i < 4; i++) { + STORE64H(tmp[i], pTmp + (i<<3)); + } +#endif + + /* reduce by taking most significant byte and adding the appropriate two byte sequence 16 bytes down */ + for (i = 31; i >= 16; i--) { + pTmp[i-16] ^= gcm_shift_table[((unsigned)pTmp[i]<<1)]; + pTmp[i-15] ^= gcm_shift_table[((unsigned)pTmp[i]<<1)+1]; + } + + for (i = 0; i < 16; i++) { + c[i] = pTmp[i]; + } + +} + +#endif + +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/encauth/gcm/gcm_gf_mult.c,v $ */ +/* $Revision: 1.25 $ */ +/* $Date: 2007/05/12 14:32:35 $ */ + + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file gcm_add_aad.c + GCM implementation, Add AAD data to the stream, by Tom St Denis +*/ + + +#ifdef LTC_GCM_MODE + +/** + Add AAD to the GCM state + @param gcm The GCM state + @param adata The additional authentication data to add to the GCM state + @param adatalen The length of the AAD data. + @return CRYPT_OK on success + */ +int gcm_add_aad(gcm_state *gcm, + const unsigned char *adata, unsigned long adatalen) +{ + unsigned long x; + int err; +#ifdef LTC_FAST + unsigned long y; +#endif + + LTC_ARGCHK(gcm != NULL); + if (adatalen > 0) { + LTC_ARGCHK(adata != NULL); + } + + if (gcm->buflen > 16 || gcm->buflen < 0) { + return CRYPT_INVALID_ARG; + } + + if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) { + return err; + } + + /* in IV mode? */ + if (gcm->mode == LTC_GCM_MODE_IV) { + /* let's process the IV */ + if (gcm->ivmode || gcm->buflen != 12) { + for (x = 0; x < (unsigned long)gcm->buflen; x++) { + gcm->X[x] ^= gcm->buf[x]; + } + if (gcm->buflen) { + gcm->totlen += gcm->buflen * CONST64(8); + gcm_mult_h(gcm, gcm->X); + } + + /* mix in the length */ + zeromem(gcm->buf, 8); + STORE64H(gcm->totlen, gcm->buf+8); + for (x = 0; x < 16; x++) { + gcm->X[x] ^= gcm->buf[x]; + } + gcm_mult_h(gcm, gcm->X); + + /* copy counter out */ + XMEMCPY(gcm->Y, gcm->X, 16); + zeromem(gcm->X, 16); + } else { + XMEMCPY(gcm->Y, gcm->buf, 12); + gcm->Y[12] = 0; + gcm->Y[13] = 0; + gcm->Y[14] = 0; + gcm->Y[15] = 1; + } + XMEMCPY(gcm->Y_0, gcm->Y, 16); + zeromem(gcm->buf, 16); + gcm->buflen = 0; + gcm->totlen = 0; + gcm->mode = LTC_GCM_MODE_AAD; + } + + if (gcm->mode != LTC_GCM_MODE_AAD || gcm->buflen >= 16) { + return CRYPT_INVALID_ARG; + } + + x = 0; +#ifdef LTC_FAST + if (gcm->buflen == 0) { + for (x = 0; x < (adatalen & ~15); x += 16) { + for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)(&gcm->X[y])) ^= *((LTC_FAST_TYPE*)(&adata[x + y])); + } + gcm_mult_h(gcm, gcm->X); + gcm->totlen += 128; + } + adata += x; + } +#endif + + + /* start adding AAD data to the state */ + for (; x < adatalen; x++) { + gcm->X[gcm->buflen++] ^= *adata++; + + if (gcm->buflen == 16) { + /* GF mult it */ + gcm_mult_h(gcm, gcm->X); + gcm->buflen = 0; + gcm->totlen += 128; + } + } + + return CRYPT_OK; +} +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file gcm_reset.c + GCM implementation, reset a used state so it can accept IV data, by Tom St Denis +*/ + + +#ifdef LTC_GCM_MODE + +/** + Reset a GCM state to as if you just called gcm_init(). This saves the initialization time. + @param gcm The GCM state to reset + @return CRYPT_OK on success +*/ +int gcm_reset(gcm_state *gcm) +{ + LTC_ARGCHK(gcm != NULL); + + zeromem(gcm->buf, sizeof(gcm->buf)); + zeromem(gcm->X, sizeof(gcm->X)); + gcm->mode = LTC_GCM_MODE_IV; + gcm->ivmode = 0; + gcm->buflen = 0; + gcm->totlen = 0; + gcm->pttotlen = 0; + + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + + + +/** + @file md5.c + LTC_MD5 hash function by Tom St Denis +*/ + +#ifdef LTC_MD5 + +const struct ltc_hash_descriptor md5_desc = +{ + "md5", + 3, + 16, + 64, + + /* OID */ + { 1, 2, 840, 113549, 2, 5, }, + 6, + + &md5_init, + &md5_process, + &md5_done, + &md5_test, + NULL +}; + +#define F(x,y,z) (z ^ (x & (y ^ z))) +#define G(x,y,z) (y ^ (z & (y ^ x))) +#define H(x,y,z) (x^y^z) +#define I(x,y,z) (y^(x|(~z))) + +#ifdef LTC_SMALL_CODE + +#define FF(a,b,c,d,M,s,t) \ + a = (a + F(b,c,d) + M + t); a = ROL(a, s) + b; + +#define GG(a,b,c,d,M,s,t) \ + a = (a + G(b,c,d) + M + t); a = ROL(a, s) + b; + +#define HH(a,b,c,d,M,s,t) \ + a = (a + H(b,c,d) + M + t); a = ROL(a, s) + b; + +#define II(a,b,c,d,M,s,t) \ + a = (a + I(b,c,d) + M + t); a = ROL(a, s) + b; + +static const unsigned char Worder[64] = { + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, + 1,6,11,0,5,10,15,4,9,14,3,8,13,2,7,12, + 5,8,11,14,1,4,7,10,13,0,3,6,9,12,15,2, + 0,7,14,5,12,3,10,1,8,15,6,13,4,11,2,9 +}; + +static const unsigned char Rorder[64] = { + 7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22, + 5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20, + 4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23, + 6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21 +}; + +static const ulong32 Korder[64] = { +0xd76aa478UL, 0xe8c7b756UL, 0x242070dbUL, 0xc1bdceeeUL, 0xf57c0fafUL, 0x4787c62aUL, 0xa8304613UL, 0xfd469501UL, +0x698098d8UL, 0x8b44f7afUL, 0xffff5bb1UL, 0x895cd7beUL, 0x6b901122UL, 0xfd987193UL, 0xa679438eUL, 0x49b40821UL, +0xf61e2562UL, 0xc040b340UL, 0x265e5a51UL, 0xe9b6c7aaUL, 0xd62f105dUL, 0x02441453UL, 0xd8a1e681UL, 0xe7d3fbc8UL, +0x21e1cde6UL, 0xc33707d6UL, 0xf4d50d87UL, 0x455a14edUL, 0xa9e3e905UL, 0xfcefa3f8UL, 0x676f02d9UL, 0x8d2a4c8aUL, +0xfffa3942UL, 0x8771f681UL, 0x6d9d6122UL, 0xfde5380cUL, 0xa4beea44UL, 0x4bdecfa9UL, 0xf6bb4b60UL, 0xbebfbc70UL, +0x289b7ec6UL, 0xeaa127faUL, 0xd4ef3085UL, 0x04881d05UL, 0xd9d4d039UL, 0xe6db99e5UL, 0x1fa27cf8UL, 0xc4ac5665UL, +0xf4292244UL, 0x432aff97UL, 0xab9423a7UL, 0xfc93a039UL, 0x655b59c3UL, 0x8f0ccc92UL, 0xffeff47dUL, 0x85845dd1UL, +0x6fa87e4fUL, 0xfe2ce6e0UL, 0xa3014314UL, 0x4e0811a1UL, 0xf7537e82UL, 0xbd3af235UL, 0x2ad7d2bbUL, 0xeb86d391UL +}; + +#else + +#define FF(a,b,c,d,M,s,t) \ + a = (a + F(b,c,d) + M + t); a = ROLc(a, s) + b; + +#define GG(a,b,c,d,M,s,t) \ + a = (a + G(b,c,d) + M + t); a = ROLc(a, s) + b; + +#define HH(a,b,c,d,M,s,t) \ + a = (a + H(b,c,d) + M + t); a = ROLc(a, s) + b; + +#define II(a,b,c,d,M,s,t) \ + a = (a + I(b,c,d) + M + t); a = ROLc(a, s) + b; + + +#endif + +#ifdef LTC_CLEAN_STACK +static int _md5_compress(hash_state *md, unsigned char *buf) +#else +static int md5_compress(hash_state *md, unsigned char *buf) +#endif +{ + ulong32 i, W[16], a, b, c, d; +#ifdef LTC_SMALL_CODE + ulong32 t; +#endif + + /* copy the state into 512-bits into W[0..15] */ + for (i = 0; i < 16; i++) { + LOAD32L(W[i], buf + (4*i)); + } + + /* copy state */ + a = md->md5.state[0]; + b = md->md5.state[1]; + c = md->md5.state[2]; + d = md->md5.state[3]; + +#ifdef LTC_SMALL_CODE + for (i = 0; i < 16; ++i) { + FF(a,b,c,d,W[Worder[i]],Rorder[i],Korder[i]); + t = d; d = c; c = b; b = a; a = t; + } + + for (; i < 32; ++i) { + GG(a,b,c,d,W[Worder[i]],Rorder[i],Korder[i]); + t = d; d = c; c = b; b = a; a = t; + } + + for (; i < 48; ++i) { + HH(a,b,c,d,W[Worder[i]],Rorder[i],Korder[i]); + t = d; d = c; c = b; b = a; a = t; + } + + for (; i < 64; ++i) { + II(a,b,c,d,W[Worder[i]],Rorder[i],Korder[i]); + t = d; d = c; c = b; b = a; a = t; + } + +#else + FF(a,b,c,d,W[0],7,0xd76aa478UL) + FF(d,a,b,c,W[1],12,0xe8c7b756UL) + FF(c,d,a,b,W[2],17,0x242070dbUL) + FF(b,c,d,a,W[3],22,0xc1bdceeeUL) + FF(a,b,c,d,W[4],7,0xf57c0fafUL) + FF(d,a,b,c,W[5],12,0x4787c62aUL) + FF(c,d,a,b,W[6],17,0xa8304613UL) + FF(b,c,d,a,W[7],22,0xfd469501UL) + FF(a,b,c,d,W[8],7,0x698098d8UL) + FF(d,a,b,c,W[9],12,0x8b44f7afUL) + FF(c,d,a,b,W[10],17,0xffff5bb1UL) + FF(b,c,d,a,W[11],22,0x895cd7beUL) + FF(a,b,c,d,W[12],7,0x6b901122UL) + FF(d,a,b,c,W[13],12,0xfd987193UL) + FF(c,d,a,b,W[14],17,0xa679438eUL) + FF(b,c,d,a,W[15],22,0x49b40821UL) + GG(a,b,c,d,W[1],5,0xf61e2562UL) + GG(d,a,b,c,W[6],9,0xc040b340UL) + GG(c,d,a,b,W[11],14,0x265e5a51UL) + GG(b,c,d,a,W[0],20,0xe9b6c7aaUL) + GG(a,b,c,d,W[5],5,0xd62f105dUL) + GG(d,a,b,c,W[10],9,0x02441453UL) + GG(c,d,a,b,W[15],14,0xd8a1e681UL) + GG(b,c,d,a,W[4],20,0xe7d3fbc8UL) + GG(a,b,c,d,W[9],5,0x21e1cde6UL) + GG(d,a,b,c,W[14],9,0xc33707d6UL) + GG(c,d,a,b,W[3],14,0xf4d50d87UL) + GG(b,c,d,a,W[8],20,0x455a14edUL) + GG(a,b,c,d,W[13],5,0xa9e3e905UL) + GG(d,a,b,c,W[2],9,0xfcefa3f8UL) + GG(c,d,a,b,W[7],14,0x676f02d9UL) + GG(b,c,d,a,W[12],20,0x8d2a4c8aUL) + HH(a,b,c,d,W[5],4,0xfffa3942UL) + HH(d,a,b,c,W[8],11,0x8771f681UL) + HH(c,d,a,b,W[11],16,0x6d9d6122UL) + HH(b,c,d,a,W[14],23,0xfde5380cUL) + HH(a,b,c,d,W[1],4,0xa4beea44UL) + HH(d,a,b,c,W[4],11,0x4bdecfa9UL) + HH(c,d,a,b,W[7],16,0xf6bb4b60UL) + HH(b,c,d,a,W[10],23,0xbebfbc70UL) + HH(a,b,c,d,W[13],4,0x289b7ec6UL) + HH(d,a,b,c,W[0],11,0xeaa127faUL) + HH(c,d,a,b,W[3],16,0xd4ef3085UL) + HH(b,c,d,a,W[6],23,0x04881d05UL) + HH(a,b,c,d,W[9],4,0xd9d4d039UL) + HH(d,a,b,c,W[12],11,0xe6db99e5UL) + HH(c,d,a,b,W[15],16,0x1fa27cf8UL) + HH(b,c,d,a,W[2],23,0xc4ac5665UL) + II(a,b,c,d,W[0],6,0xf4292244UL) + II(d,a,b,c,W[7],10,0x432aff97UL) + II(c,d,a,b,W[14],15,0xab9423a7UL) + II(b,c,d,a,W[5],21,0xfc93a039UL) + II(a,b,c,d,W[12],6,0x655b59c3UL) + II(d,a,b,c,W[3],10,0x8f0ccc92UL) + II(c,d,a,b,W[10],15,0xffeff47dUL) + II(b,c,d,a,W[1],21,0x85845dd1UL) + II(a,b,c,d,W[8],6,0x6fa87e4fUL) + II(d,a,b,c,W[15],10,0xfe2ce6e0UL) + II(c,d,a,b,W[6],15,0xa3014314UL) + II(b,c,d,a,W[13],21,0x4e0811a1UL) + II(a,b,c,d,W[4],6,0xf7537e82UL) + II(d,a,b,c,W[11],10,0xbd3af235UL) + II(c,d,a,b,W[2],15,0x2ad7d2bbUL) + II(b,c,d,a,W[9],21,0xeb86d391UL) +#endif + + md->md5.state[0] = md->md5.state[0] + a; + md->md5.state[1] = md->md5.state[1] + b; + md->md5.state[2] = md->md5.state[2] + c; + md->md5.state[3] = md->md5.state[3] + d; + + return CRYPT_OK; +} + +#ifdef LTC_CLEAN_STACK +static int md5_compress(hash_state *md, unsigned char *buf) +{ + int err; + err = _md5_compress(md, buf); + burn_stack(sizeof(ulong32) * 21); + return err; +} +#endif + +/** + Initialize the hash state + @param md The hash state you wish to initialize + @return CRYPT_OK if successful +*/ +int md5_init(hash_state * md) +{ + LTC_ARGCHK(md != NULL); + md->md5.state[0] = 0x67452301UL; + md->md5.state[1] = 0xefcdab89UL; + md->md5.state[2] = 0x98badcfeUL; + md->md5.state[3] = 0x10325476UL; + md->md5.curlen = 0; + md->md5.length = 0; + return CRYPT_OK; +} + +/** + Process a block of memory though the hash + @param md The hash state + @param in The data to hash + @param inlen The length of the data (octets) + @return CRYPT_OK if successful +*/ +HASH_PROCESS(md5_process, md5_compress, md5, 64) + +/** + Terminate the hash to get the digest + @param md The hash state + @param out [out] The destination of the hash (16 bytes) + @return CRYPT_OK if successful +*/ +int md5_done(hash_state * md, unsigned char *out) +{ + int i; + + LTC_ARGCHK(md != NULL); + LTC_ARGCHK(out != NULL); + + if (md->md5.curlen >= sizeof(md->md5.buf)) { + return CRYPT_INVALID_ARG; + } + + + /* increase the length of the message */ + md->md5.length += md->md5.curlen * 8; + + /* append the '1' bit */ + md->md5.buf[md->md5.curlen++] = (unsigned char)0x80; + + /* if the length is currently above 56 bytes we append zeros + * then compress. Then we can fall back to padding zeros and length + * encoding like normal. + */ + if (md->md5.curlen > 56) { + while (md->md5.curlen < 64) { + md->md5.buf[md->md5.curlen++] = (unsigned char)0; + } + md5_compress(md, md->md5.buf); + md->md5.curlen = 0; + } + + /* pad upto 56 bytes of zeroes */ + while (md->md5.curlen < 56) { + md->md5.buf[md->md5.curlen++] = (unsigned char)0; + } + + /* store length */ + STORE64L(md->md5.length, md->md5.buf+56); + md5_compress(md, md->md5.buf); + + /* copy output */ + for (i = 0; i < 4; i++) { + STORE32L(md->md5.state[i], out+(4*i)); + } +#ifdef LTC_CLEAN_STACK + zeromem(md, sizeof(hash_state)); +#endif + return CRYPT_OK; +} + +/** + Self-test the hash + @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled +*/ +int md5_test(void) +{ + #ifndef LTC_TEST + return CRYPT_NOP; + #else + static const struct { + char *msg; + unsigned char hash[16]; + } tests[] = { + { "", + { 0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04, + 0xe9, 0x80, 0x09, 0x98, 0xec, 0xf8, 0x42, 0x7e } }, + { "a", + {0x0c, 0xc1, 0x75, 0xb9, 0xc0, 0xf1, 0xb6, 0xa8, + 0x31, 0xc3, 0x99, 0xe2, 0x69, 0x77, 0x26, 0x61 } }, + { "abc", + { 0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0, + 0xd6, 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72 } }, + { "message digest", + { 0xf9, 0x6b, 0x69, 0x7d, 0x7c, 0xb7, 0x93, 0x8d, + 0x52, 0x5a, 0x2f, 0x31, 0xaa, 0xf1, 0x61, 0xd0 } }, + { "abcdefghijklmnopqrstuvwxyz", + { 0xc3, 0xfc, 0xd3, 0xd7, 0x61, 0x92, 0xe4, 0x00, + 0x7d, 0xfb, 0x49, 0x6c, 0xca, 0x67, 0xe1, 0x3b } }, + { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", + { 0xd1, 0x74, 0xab, 0x98, 0xd2, 0x77, 0xd9, 0xf5, + 0xa5, 0x61, 0x1c, 0x2c, 0x9f, 0x41, 0x9d, 0x9f } }, + { "12345678901234567890123456789012345678901234567890123456789012345678901234567890", + { 0x57, 0xed, 0xf4, 0xa2, 0x2b, 0xe3, 0xc9, 0x55, + 0xac, 0x49, 0xda, 0x2e, 0x21, 0x07, 0xb6, 0x7a } }, + { NULL, { 0 } } + }; + + int i; + unsigned char tmp[16]; + hash_state md; + + for (i = 0; tests[i].msg != NULL; i++) { + md5_init(&md); + md5_process(&md, (unsigned char *)tests[i].msg, (unsigned long)strlen(tests[i].msg)); + md5_done(&md, tmp); + if (XMEMCMP(tmp, tests[i].hash, 16) != 0) { + return CRYPT_FAIL_TESTVECTOR; + } + } + return CRYPT_OK; + #endif +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file ctr_encrypt.c + CTR implementation, encrypt data, Tom St Denis +*/ + + +#ifdef LTC_CTR_MODE + +/** + CTR encrypt + @param pt Plaintext + @param ct [out] Ciphertext + @param len Length of plaintext (octets) + @param ctr CTR state + @return CRYPT_OK if successful +*/ +int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CTR *ctr) +{ + int x, err; + + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(ctr != NULL); + + if ((err = cipher_is_valid(ctr->cipher)) != CRYPT_OK) { + return err; + } + + /* is blocklen/padlen valid? */ + if (ctr->blocklen < 1 || ctr->blocklen > (int)sizeof(ctr->ctr) || + ctr->padlen < 0 || ctr->padlen > (int)sizeof(ctr->pad)) { + return CRYPT_INVALID_ARG; + } + +#ifdef LTC_FAST + if (ctr->blocklen % sizeof(LTC_FAST_TYPE)) { + return CRYPT_INVALID_ARG; + } +#endif + + /* handle acceleration only if pad is empty, accelerator is present and length is >= a block size */ + if ((ctr->padlen == ctr->blocklen) && cipher_descriptor[ctr->cipher].accel_ctr_encrypt != NULL && (len >= (unsigned long)ctr->blocklen)) { + if ((err = cipher_descriptor[ctr->cipher].accel_ctr_encrypt(pt, ct, len/ctr->blocklen, ctr->ctr, ctr->mode, &ctr->key)) != CRYPT_OK) { + return err; + } + len %= ctr->blocklen; + } + + while (len) { + /* is the pad empty? */ + if (ctr->padlen == ctr->blocklen) { + /* increment counter */ + if (ctr->mode == CTR_COUNTER_LITTLE_ENDIAN) { + /* little-endian */ + for (x = 0; x < ctr->ctrlen; x++) { + ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; + if (ctr->ctr[x] != (unsigned char)0) { + break; + } + } + } else { + /* big-endian */ + for (x = ctr->blocklen-1; x >= ctr->ctrlen; x--) { + ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; + if (ctr->ctr[x] != (unsigned char)0) { + break; + } + } + } + + /* encrypt it */ + if ((err = cipher_descriptor[ctr->cipher].ecb_encrypt(ctr->ctr, ctr->pad, &ctr->key)) != CRYPT_OK) { + return err; + } + ctr->padlen = 0; + } +#ifdef LTC_FAST + if (ctr->padlen == 0 && len >= (unsigned long)ctr->blocklen) { + for (x = 0; x < ctr->blocklen; x += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)((unsigned char *)ct + x)) = *((LTC_FAST_TYPE*)((unsigned char *)pt + x)) ^ + *((LTC_FAST_TYPE*)((unsigned char *)ctr->pad + x)); + } + pt += ctr->blocklen; + ct += ctr->blocklen; + len -= ctr->blocklen; + ctr->padlen = ctr->blocklen; + continue; + } +#endif + *ct++ = *pt++ ^ ctr->pad[ctr->padlen++]; + --len; + } + return CRYPT_OK; +} + +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/modes/ctr/ctr_encrypt.c,v $ */ +/* $Revision: 1.22 $ */ +/* $Date: 2007/02/22 20:26:05 $ */ + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file ctr_done.c + CTR implementation, finish chain, Tom St Denis +*/ + +#ifdef LTC_CTR_MODE + +/** Terminate the chain + @param ctr The CTR chain to terminate + @return CRYPT_OK on success +*/ +int ctr_done(symmetric_CTR *ctr) +{ + int err; + LTC_ARGCHK(ctr != NULL); + + if ((err = cipher_is_valid(ctr->cipher)) != CRYPT_OK) { + return err; + } + cipher_descriptor[ctr->cipher].done(&ctr->key); + return CRYPT_OK; +} + + + +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/modes/ctr/ctr_done.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file ctr_decrypt.c + CTR implementation, decrypt data, Tom St Denis +*/ + +#ifdef LTC_CTR_MODE + +/** + CTR decrypt + @param ct Ciphertext + @param pt [out] Plaintext + @param len Length of ciphertext (octets) + @param ctr CTR state + @return CRYPT_OK if successful +*/ +int ctr_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CTR *ctr) +{ + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(ctr != NULL); + + return ctr_encrypt(ct, pt, len, ctr); +} + +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/modes/ctr/ctr_decrypt.c,v $ */ +/* $Revision: 1.6 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file ctr_start.c + CTR implementation, start chain, Tom St Denis +*/ + + +#ifdef LTC_CTR_MODE + +/** + Initialize a CTR context + @param cipher The index of the cipher desired + @param IV The initial vector + @param key The secret key + @param keylen The length of the secret key (octets) + @param num_rounds Number of rounds in the cipher desired (0 for default) + @param ctr_mode The counter mode (CTR_COUNTER_LITTLE_ENDIAN or CTR_COUNTER_BIG_ENDIAN) + @param ctr The CTR state to initialize + @return CRYPT_OK if successful +*/ +int ctr_start( int cipher, + const unsigned char *IV, + const unsigned char *key, int keylen, + int num_rounds, int ctr_mode, + symmetric_CTR *ctr) +{ + int x, err; + + LTC_ARGCHK(IV != NULL); + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(ctr != NULL); + + /* bad param? */ + if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { + return err; + } + + /* ctrlen == counter width */ + ctr->ctrlen = (ctr_mode & 255) ? (ctr_mode & 255) : cipher_descriptor[cipher].block_length; + if (ctr->ctrlen > cipher_descriptor[cipher].block_length) { + return CRYPT_INVALID_ARG; + } + + if ((ctr_mode & 0x1000) == CTR_COUNTER_BIG_ENDIAN) { + ctr->ctrlen = cipher_descriptor[cipher].block_length - ctr->ctrlen; + } + + /* setup cipher */ + if ((err = cipher_descriptor[cipher].setup(key, keylen, num_rounds, &ctr->key)) != CRYPT_OK) { + return err; + } + + /* copy ctr */ + ctr->blocklen = cipher_descriptor[cipher].block_length; + ctr->cipher = cipher; + ctr->padlen = 0; + ctr->mode = ctr_mode & 0x1000; + for (x = 0; x < ctr->blocklen; x++) { + ctr->ctr[x] = IV[x]; + } + + if (ctr_mode & LTC_CTR_RFC3686) { + /* increment the IV as per RFC 3686 */ + if (ctr->mode == CTR_COUNTER_LITTLE_ENDIAN) { + /* little-endian */ + for (x = 0; x < ctr->ctrlen; x++) { + ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; + if (ctr->ctr[x] != (unsigned char)0) { + break; + } + } + } else { + /* big-endian */ + for (x = ctr->blocklen-1; x >= ctr->ctrlen; x--) { + ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; + if (ctr->ctr[x] != (unsigned char)0) { + break; + } + } + } + } + + return cipher_descriptor[ctr->cipher].ecb_encrypt(ctr->ctr, ctr->pad, &ctr->key); +} + +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/modes/ctr/ctr_start.c,v $ */ +/* $Revision: 1.15 $ */ +/* $Date: 2007/02/23 14:18:37 $ */ + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file ctr_setiv.c + CTR implementation, set IV, Tom St Denis +*/ + +#ifdef LTC_CTR_MODE + +/** + Set an initial vector + @param IV The initial vector + @param len The length of the vector (in octets) + @param ctr The CTR state + @return CRYPT_OK if successful +*/ +int ctr_setiv(const unsigned char *IV, unsigned long len, symmetric_CTR *ctr) +{ + int err; + + LTC_ARGCHK(IV != NULL); + LTC_ARGCHK(ctr != NULL); + + /* bad param? */ + if ((err = cipher_is_valid(ctr->cipher)) != CRYPT_OK) { + return err; + } + + if (len != (unsigned long)ctr->blocklen) { + return CRYPT_INVALID_ARG; + } + + /* set IV */ + XMEMCPY(ctr->ctr, IV, len); + + /* force next block */ + ctr->padlen = 0; + return cipher_descriptor[ctr->cipher].ecb_encrypt(IV, ctr->pad, &ctr->key); +} + +#endif + + +/* $Source: /cvs/libtom/libtomcrypt/src/modes/ctr/ctr_setiv.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org + */ + +/** + @file ctr_getiv.c + CTR implementation, get IV, Tom St Denis +*/ + +#ifdef LTC_CTR_MODE + +/** + Get the current initial vector + @param IV [out] The destination of the initial vector + @param len [in/out] The max size and resulting size of the initial vector + @param ctr The CTR state + @return CRYPT_OK if successful +*/ +int ctr_getiv(unsigned char *IV, unsigned long *len, symmetric_CTR *ctr) +{ + LTC_ARGCHK(IV != NULL); + LTC_ARGCHK(len != NULL); + LTC_ARGCHK(ctr != NULL); + if ((unsigned long)ctr->blocklen > *len) { + *len = ctr->blocklen; + return CRYPT_BUFFER_OVERFLOW; + } + XMEMCPY(IV, ctr->ctr, ctr->blocklen); + *len = ctr->blocklen; + + return CRYPT_OK; +} + +#endif + +/* $Source: /cvs/libtom/libtomcrypt/src/modes/ctr/ctr_getiv.c,v $ */ +/* $Revision: 1.7 $ */ +/* $Date: 2006/12/28 01:27:24 $ */ diff --git a/src/tlse/tlse.c b/src/tlse/tlse.c new file mode 100644 index 0000000..957053d --- /dev/null +++ b/src/tlse/tlse.c @@ -0,0 +1,12374 @@ +/******************************************************************************** + Copyright (c) 2016-2024, Eduard Suica + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or other + materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ********************************************************************************/ +#ifndef TLSE_C +#define TLSE_C + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <stdint.h> +#include <time.h> +#ifdef _WIN32 +#ifdef SSL_COMPATIBLE_INTERFACE +#include <winsock2.h> +#endif +#include <windows.h> +#include <wincrypt.h> +#ifndef strcasecmp + #define strcasecmp stricmp +#endif +#else +// hton* and ntoh* functions +#include <arpa/inet.h> +#include <unistd.h> +#include <errno.h> +#endif + +#ifdef TLS_AMALGAMATION +#ifdef I +#pragma push_macro("I") +#define TLS_I_MACRO +#undef I +#endif +#include "libtomcrypt.c" +#ifdef TLS_I_MACRO +#pragma pop_macro("I") +#undef TLS_I_MACRO +#endif +#else +#include <tomcrypt.h> +#endif + +#if (CRYPT <= 0x0117) + #define LTC_PKCS_1_EMSA LTC_LTC_PKCS_1_EMSA + #define LTC_PKCS_1_V1_5 LTC_LTC_PKCS_1_V1_5 + #define LTC_PKCS_1_PSS LTC_LTC_PKCS_1_PSS +#endif + +#ifdef WITH_KTLS + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/tcp.h> + // should get /usr/include/linux/tls.h (linux headers) + // rename it to ktls.h and add it to your project + #include "ktls.h" + // or just include tls.h instead of ktls.h + // #include "linux/tls.h" +#endif + +#include "tlse.h" +#ifdef TLS_CURVE25519 + #include "curve25519.c" +#endif +// using ChaCha20 implementation by D. J. Bernstein + +#ifndef TLS_FORWARD_SECRECY +#undef TLS_ECDSA_SUPPORTED +#endif + +#ifndef TLS_ECDSA_SUPPORTED +// disable client ECDSA if not supported +#undef TLS_CLIENT_ECDSA +#endif + +#define TLS_DH_DEFAULT_P "87A8E61DB4B6663CFFBBD19C651959998CEEF608660DD0F25D2CEED4435E3B00E00DF8F1D61957D4FAF7DF4561B2AA3016C3D91134096FAA3BF4296D830E9A7C209E0C6497517ABD5A8A9D306BCF67ED91F9E6725B4758C022E0B1EF4275BF7B6C5BFC11D45F9088B941F54EB1E59BB8BC39A0BF12307F5C4FDB70C581B23F76B63ACAE1CAA6B7902D52526735488A0EF13C6D9A51BFA4AB3AD8347796524D8EF6A167B5A41825D967E144E5140564251CCACB83E6B486F6B3CA3F7971506026C0B857F689962856DED4010ABD0BE621C3A3960A54E710C375F26375D7014103A4B54330C198AF126116D2276E11715F693877FAD7EF09CADB094AE91E1A1597" +#define TLS_DH_DEFAULT_G "3FB32C9B73134D0B2E77506660EDBD484CA7B18F21EF205407F4793A1A0BA12510DBC15077BE463FFF4FED4AAC0BB555BE3A6C1B0C6B47B1BC3773BF7E8C6F62901228F8C28CBB18A55AE31341000A650196F931C77A57F2DDF463E5E9EC144B777DE62AAAB8A8628AC376D282D6ED3864E67982428EBC831D14348F6F2F9193B5045AF2767164E1DFC967C1FB3F2E55A4BD1BFFE83B9C80D052B985D182EA0ADB2A3B7313D3FE14C8484B1E052588B9B7D2BBD2DF016199ECD06E1557CD0915B3353BBB64E0EC377FD028370DF92B52C7891428CDC67EB6184B523D1DB246C32F63078490F00EF8D647D148D47954515E2327CFEF98C582664B4C0F6CC41659" +#define TLS_DHE_KEY_SIZE 2048 + +// you should never use weak DH groups (1024 bits) +// but if you have old devices (like grandstream ip phones) +// that can't handle 2048bit DHE, uncomment next lines +// and define TLS_WEAK_DH_LEGACY_DEVICES +// #ifdef TLS_WEAK_DH_LEGACY_DEVICES +// #define TLS_DH_DEFAULT_P "B10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371" +// #define TLS_DH_DEFAULT_G "A4D1CBD5C3FD34126765A442EFB99905F8104DD258AC507FD6406CFF14266D31266FEA1E5C41564B777E690F5504F213160217B4B01B886A5E91547F9E2749F4D7FBD7D3B9A92EE1909D0D2263F80A76A6A24C087A091F531DBF0A0169B6A28AD662A4D18E73AFA32D779D5918D08BC8858F4DCEF97C2A24855E6EEB22B3B2E5" +// #define TLS_DHE_KEY_SIZE 1024 +// #endif + +#ifndef TLS_MALLOC + #define TLS_MALLOC(size) malloc(size) +#endif +#ifndef TLS_REALLOC + #define TLS_REALLOC(ptr, size) realloc(ptr, size) +#endif +#ifndef TLS_FREE + #define TLS_FREE(ptr) if (ptr) free(ptr) +#endif + +#define TLS_ERROR(err, statement) if (err) statement; + +#ifdef DEBUG +#define DEBUG_PRINT(...) fprintf(stderr, __VA_ARGS__) +#define DEBUG_DUMP_HEX(buf, len) {if (buf) { int _i_; for (_i_ = 0; _i_ < len; _i_++) { DEBUG_PRINT("%02X ", (unsigned int)(buf)[_i_]); } } else { fprintf(stderr, "(null)"); } } +#define DEBUG_INDEX(fields) print_index(fields) +#define DEBUG_DUMP(buf, length) fwrite(buf, 1, length, stderr); +#define DEBUG_DUMP_HEX_LABEL(title, buf, len) {fprintf(stderr, "%s (%i): ", title, (int)len); DEBUG_DUMP_HEX(buf, len); fprintf(stderr, "\n");} +#else +#define DEBUG_PRINT(...) { } +#define DEBUG_DUMP_HEX(buf, len) { } +#define DEBUG_INDEX(fields) { } +#define DEBUG_DUMP(buf, length) { } +#define DEBUG_DUMP_HEX_LABEL(title, buf, len) { } +#endif + +#ifndef htonll +#define htonll(x) ((1==htonl(1)) ? (x) : ((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32)) +#endif + +#ifndef ntohll +#define ntohll(x) ((1==ntohl(1)) ? (x) : ((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32)) +#endif + +#define TLS_CHANGE_CIPHER 0x14 +#define TLS_ALERT 0x15 +#define TLS_HANDSHAKE 0x16 +#define TLS_APPLICATION_DATA 0x17 + +#define TLS_SERIALIZED_OBJECT 0xFE + +#define TLS_CLIENT_HELLO_MINSIZE 41 +#define TLS_CLIENT_RANDOM_SIZE 32 +#define TLS_SERVER_RANDOM_SIZE 32 +#define TLS_MAX_SESSION_ID 32 +#define TLS_SHA256_MAC_SIZE 32 +#define TLS_SHA1_MAC_SIZE 20 +#define TLS_SHA384_MAC_SIZE 48 +#define TLS_MAX_MAC_SIZE TLS_SHA384_MAC_SIZE + // 160 +#define TLS_MAX_KEY_EXPANSION_SIZE 192 +// 512bits (sha256) = 64 bytes +#define TLS_MAX_HASH_LEN 64 +#define TLS_AES_IV_LENGTH 16 +#define TLS_AES_BLOCK_SIZE 16 +#define TLS_AES_GCM_IV_LENGTH 4 +#define TLS_13_AES_GCM_IV_LENGTH 12 +#define TLS_GCM_TAG_LEN 16 +#define TLS_MAX_TAG_LEN 16 +#define TLS_MIN_FINISHED_OPAQUE_LEN 12 + +#define TLS_BLOB_INCREMENT 0xFFF +#define TLS_ASN1_MAXLEVEL 0xFF + +#define DTLS_COOKIE_SIZE 32 +#define DTLS_MAX_FRAGMENT_SIZE 0x40000 + +#define TLS_MAX_SHA_SIZE 48 +// 16(md5) + 20(sha1) +#define TLS_V11_HASH_SIZE 36 +#define TLS_MAX_HASH_SIZE TLS_MAX_SHA_SIZE +// 16(md5) + 20(sha1) +#define TLS_MAX_RSA_KEY 2048 + +#define TLS_MAXTLS_APP_SIZE 0x4000 +// max 1 second sleep +#define TLS_MAX_ERROR_SLEEP_uS 1000000 +// max 5 seconds context sleep +#define TLS_MAX_ERROR_IDLE_S 5 + +#define TLS_V13_MAX_KEY_SIZE 32 +#define TLS_V13_MAX_IV_SIZE 12 + +#define VERSION_SUPPORTED(version, err) if ((version != TLS_V13) && (version != TLS_V12) && (version != TLS_V11) && (version != TLS_V10) && (version != DTLS_V13) && (version != DTLS_V12) && (version != DTLS_V10)) { if ((version == SSL_V30) && (context->connection_status == 0)) { version = TLS_V12; } else { DEBUG_PRINT("UNSUPPORTED TLS VERSION %x\n", (int)version); return err;} } +#define CHECK_SIZE(size, buf_size, err) if (((int)(size) > (int)(buf_size)) || ((int)(buf_size) < 0)) { DEBUG_PRINT("[EXPECTED AT LEAST %i IN BUFFER OF SIZE %i]\n", (int)(size), (int)(buf_size)); return err; } +#define TLS_IMPORT_CHECK_SIZE(buf_pos, size, buf_size) if (((int)size > (int)buf_size - buf_pos) || ((int)buf_pos > (int)buf_size)) { DEBUG_PRINT("IMPORT ELEMENT SIZE ERROR\n"); tls_destroy_context(context); return NULL; } +#define CHECK_HANDSHAKE_STATE(context, n, limit) { if (context->hs_messages[n] >= limit) { if (context->dtls) { DEBUG_PRINT("* REPEATED MESSAGE, RE-HASHING\n"); _private_dtls_rehash(context, type); context->hs_messages[n]++;} else { DEBUG_PRINT("* UNEXPECTED MESSAGE (%i)\n", (int)n); payload_res = TLS_UNEXPECTED_MESSAGE; break; } } context->hs_messages[n]++; } +#define TLS_24_BIT(buf, index, val) { unsigned int u_val = (unsigned int)val; buf[index] = u_val / 0x10000; u_val %= 0x10000; buf[index + 1] = u_val / 0x100; u_val %= 0x100; buf[index + 2] = u_val; } + +#if CRYPT >= 0x0118 + #define TLS_TOMCRYPT_PRIVATE_DP(key) (&((key)->dp)) + #define TLS_TOMCRYPT_PRIVATE_SET_INDEX(key, k_idx) +#else + #define TLS_TOMCRYPT_PRIVATE_DP(key) ((key)->dp) + #define TLS_TOMCRYPT_PRIVATE_SET_INDEX(key, k_idx) key->idx = k_idx +#endif + +#ifdef TLS_WITH_CHACHA20_POLY1305 +#define TLS_CHACHA20_IV_LENGTH 12 + +// ChaCha20 implementation by D. J. Bernstein +// Public domain. + +#define CHACHA_MINKEYLEN 16 +#define CHACHA_NONCELEN 8 +#define CHACHA_NONCELEN_96 12 +#define CHACHA_CTRLEN 8 +#define CHACHA_CTRLEN_96 4 +#define CHACHA_STATELEN (CHACHA_NONCELEN+CHACHA_CTRLEN) +#define CHACHA_BLOCKLEN 64 + +#define POLY1305_MAX_AAD 32 +#define POLY1305_KEYLEN 32 +#define POLY1305_TAGLEN 16 + +#define u_int unsigned int +#define uint8_t unsigned char +#define u_char unsigned char +#ifndef NULL +#define NULL (void *)0 +#endif + +#if (CRYPT >= 0x0117) && (0) + // to do: use ltc chacha/poly1305 implementation (working on big-endian machines) + #define chacha_ctx chacha20poly1305_state + #define poly1305_context poly1305_state + + #define _private_tls_poly1305_init(ctx, key, len) poly1305_init(ctx, key, len) + #define _private_tls_poly1305_update(ctx, in, len) poly1305_process(ctx, in, len) + #define _private_tls_poly1305_finish(ctx, mac) poly1305_done(ctx, mac, 16) +#else +struct chacha_ctx { + u_int input[16]; + uint8_t ks[CHACHA_BLOCKLEN]; + uint8_t unused; +}; + +static inline void chacha_keysetup(struct chacha_ctx *x, const u_char *k, u_int kbits); +static inline void chacha_ivsetup(struct chacha_ctx *x, const u_char *iv, const u_char *ctr); +static inline void chacha_ivsetup_96bitnonce(struct chacha_ctx *x, const u_char *iv, const u_char *ctr); +static inline void chacha_encrypt_bytes(struct chacha_ctx *x, const u_char *m, u_char *c, u_int bytes); +static inline int poly1305_generate_key(unsigned char *key256, unsigned char *nonce, unsigned int noncelen, unsigned char *poly_key, unsigned int counter); + +#define poly1305_block_size 16 +#define poly1305_context poly1305_state_internal_t + +//========== ChaCha20 from D. J. Bernstein ========= // +// Source available at https://cr.yp.to/chacha.html // + +typedef unsigned char u8; +typedef unsigned int u32; + +typedef struct chacha_ctx chacha_ctx; + +#define U8C(v) (v##U) +#define U32C(v) (v##U) + +#define U8V(v) ((u8)(v) & U8C(0xFF)) +#define U32V(v) ((u32)(v) & U32C(0xFFFFFFFF)) + +#define ROTL32(v, n) \ + (U32V((v) << (n)) | ((v) >> (32 - (n)))) + +#define _private_tls_U8TO32_LITTLE(p) \ + (((u32)((p)[0])) | \ + ((u32)((p)[1]) << 8) | \ + ((u32)((p)[2]) << 16) | \ + ((u32)((p)[3]) << 24)) + +#define _private_tls_U32TO8_LITTLE(p, v) \ + do { \ + (p)[0] = U8V((v)); \ + (p)[1] = U8V((v) >> 8); \ + (p)[2] = U8V((v) >> 16); \ + (p)[3] = U8V((v) >> 24); \ + } while (0) + +#define ROTATE(v,c) (ROTL32(v,c)) +#define XOR(v,w) ((v) ^ (w)) +#define PLUS(v,w) (U32V((v) + (w))) +#define PLUSONE(v) (PLUS((v),1)) + +#define QUARTERROUND(a,b,c,d) \ + a = PLUS(a,b); d = ROTATE(XOR(d,a),16); \ + c = PLUS(c,d); b = ROTATE(XOR(b,c),12); \ + a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); \ + c = PLUS(c,d); b = ROTATE(XOR(b,c), 7); + +static const char sigma[] = "expand 32-byte k"; +static const char tau[] = "expand 16-byte k"; + +static inline void chacha_keysetup(chacha_ctx *x, const u8 *k, u32 kbits) { + const char *constants; + + x->input[4] = _private_tls_U8TO32_LITTLE(k + 0); + x->input[5] = _private_tls_U8TO32_LITTLE(k + 4); + x->input[6] = _private_tls_U8TO32_LITTLE(k + 8); + x->input[7] = _private_tls_U8TO32_LITTLE(k + 12); + if (kbits == 256) { /* recommended */ + k += 16; + constants = sigma; + } else { /* kbits == 128 */ + constants = tau; + } + x->input[8] = _private_tls_U8TO32_LITTLE(k + 0); + x->input[9] = _private_tls_U8TO32_LITTLE(k + 4); + x->input[10] = _private_tls_U8TO32_LITTLE(k + 8); + x->input[11] = _private_tls_U8TO32_LITTLE(k + 12); + x->input[0] = _private_tls_U8TO32_LITTLE(constants + 0); + x->input[1] = _private_tls_U8TO32_LITTLE(constants + 4); + x->input[2] = _private_tls_U8TO32_LITTLE(constants + 8); + x->input[3] = _private_tls_U8TO32_LITTLE(constants + 12); +} + +static inline void chacha_key(chacha_ctx *x, u8 *k) { + _private_tls_U32TO8_LITTLE(k, x->input[4]); + _private_tls_U32TO8_LITTLE(k + 4, x->input[5]); + _private_tls_U32TO8_LITTLE(k + 8, x->input[6]); + _private_tls_U32TO8_LITTLE(k + 12, x->input[7]); + + _private_tls_U32TO8_LITTLE(k + 16, x->input[8]); + _private_tls_U32TO8_LITTLE(k + 20, x->input[9]); + _private_tls_U32TO8_LITTLE(k + 24, x->input[10]); + _private_tls_U32TO8_LITTLE(k + 28, x->input[11]); +} + +static inline void chacha_nonce(chacha_ctx *x, u8 *nonce) { + _private_tls_U32TO8_LITTLE(nonce + 0, x->input[13]); + _private_tls_U32TO8_LITTLE(nonce + 4, x->input[14]); + _private_tls_U32TO8_LITTLE(nonce + 8, x->input[15]); +} + +static inline void chacha_ivsetup(chacha_ctx *x, const u8 *iv, const u8 *counter) { + x->input[12] = counter == NULL ? 0 : _private_tls_U8TO32_LITTLE(counter + 0); + x->input[13] = counter == NULL ? 0 : _private_tls_U8TO32_LITTLE(counter + 4); + if (iv) { + x->input[14] = _private_tls_U8TO32_LITTLE(iv + 0); + x->input[15] = _private_tls_U8TO32_LITTLE(iv + 4); + } +} + +static inline void chacha_ivsetup_96bitnonce(chacha_ctx *x, const u8 *iv, const u8 *counter) { + x->input[12] = counter == NULL ? 0 : _private_tls_U8TO32_LITTLE(counter + 0); + if (iv) { + x->input[13] = _private_tls_U8TO32_LITTLE(iv + 0); + x->input[14] = _private_tls_U8TO32_LITTLE(iv + 4); + x->input[15] = _private_tls_U8TO32_LITTLE(iv + 8); + } +} + +static inline void chacha_ivupdate(chacha_ctx *x, const u8 *iv, const u8 *aad, const u8 *counter) { + x->input[12] = counter == NULL ? 0 : _private_tls_U8TO32_LITTLE(counter + 0); + x->input[13] = _private_tls_U8TO32_LITTLE(iv + 0); + x->input[14] = _private_tls_U8TO32_LITTLE(iv + 4) ^ _private_tls_U8TO32_LITTLE(aad); + x->input[15] = _private_tls_U8TO32_LITTLE(iv + 8) ^ _private_tls_U8TO32_LITTLE(aad + 4); +} + +static inline void chacha_encrypt_bytes(chacha_ctx *x, const u8 *m, u8 *c, u32 bytes) { + u32 x0, x1, x2, x3, x4, x5, x6, x7; + u32 x8, x9, x10, x11, x12, x13, x14, x15; + u32 j0, j1, j2, j3, j4, j5, j6, j7; + u32 j8, j9, j10, j11, j12, j13, j14, j15; + u8 *ctarget = NULL; + u8 tmp[64]; + u_int i; + + if (!bytes) + return; + + j0 = x->input[0]; + j1 = x->input[1]; + j2 = x->input[2]; + j3 = x->input[3]; + j4 = x->input[4]; + j5 = x->input[5]; + j6 = x->input[6]; + j7 = x->input[7]; + j8 = x->input[8]; + j9 = x->input[9]; + j10 = x->input[10]; + j11 = x->input[11]; + j12 = x->input[12]; + j13 = x->input[13]; + j14 = x->input[14]; + j15 = x->input[15]; + + for (;;) { + if (bytes < 64) { + for (i = 0; i < bytes; ++i) + tmp[i] = m[i]; + m = tmp; + ctarget = c; + c = tmp; + } + x0 = j0; + x1 = j1; + x2 = j2; + x3 = j3; + x4 = j4; + x5 = j5; + x6 = j6; + x7 = j7; + x8 = j8; + x9 = j9; + x10 = j10; + x11 = j11; + x12 = j12; + x13 = j13; + x14 = j14; + x15 = j15; + for (i = 20; i > 0; i -= 2) { + QUARTERROUND(x0, x4, x8, x12) + QUARTERROUND(x1, x5, x9, x13) + QUARTERROUND(x2, x6, x10, x14) + QUARTERROUND(x3, x7, x11, x15) + QUARTERROUND(x0, x5, x10, x15) + QUARTERROUND(x1, x6, x11, x12) + QUARTERROUND(x2, x7, x8, x13) + QUARTERROUND(x3, x4, x9, x14) + } + x0 = PLUS(x0, j0); + x1 = PLUS(x1, j1); + x2 = PLUS(x2, j2); + x3 = PLUS(x3, j3); + x4 = PLUS(x4, j4); + x5 = PLUS(x5, j5); + x6 = PLUS(x6, j6); + x7 = PLUS(x7, j7); + x8 = PLUS(x8, j8); + x9 = PLUS(x9, j9); + x10 = PLUS(x10, j10); + x11 = PLUS(x11, j11); + x12 = PLUS(x12, j12); + x13 = PLUS(x13, j13); + x14 = PLUS(x14, j14); + x15 = PLUS(x15, j15); + + if (bytes < 64) { + _private_tls_U32TO8_LITTLE(x->ks + 0, x0); + _private_tls_U32TO8_LITTLE(x->ks + 4, x1); + _private_tls_U32TO8_LITTLE(x->ks + 8, x2); + _private_tls_U32TO8_LITTLE(x->ks + 12, x3); + _private_tls_U32TO8_LITTLE(x->ks + 16, x4); + _private_tls_U32TO8_LITTLE(x->ks + 20, x5); + _private_tls_U32TO8_LITTLE(x->ks + 24, x6); + _private_tls_U32TO8_LITTLE(x->ks + 28, x7); + _private_tls_U32TO8_LITTLE(x->ks + 32, x8); + _private_tls_U32TO8_LITTLE(x->ks + 36, x9); + _private_tls_U32TO8_LITTLE(x->ks + 40, x10); + _private_tls_U32TO8_LITTLE(x->ks + 44, x11); + _private_tls_U32TO8_LITTLE(x->ks + 48, x12); + _private_tls_U32TO8_LITTLE(x->ks + 52, x13); + _private_tls_U32TO8_LITTLE(x->ks + 56, x14); + _private_tls_U32TO8_LITTLE(x->ks + 60, x15); + } + + x0 = XOR(x0, _private_tls_U8TO32_LITTLE(m + 0)); + x1 = XOR(x1, _private_tls_U8TO32_LITTLE(m + 4)); + x2 = XOR(x2, _private_tls_U8TO32_LITTLE(m + 8)); + x3 = XOR(x3, _private_tls_U8TO32_LITTLE(m + 12)); + x4 = XOR(x4, _private_tls_U8TO32_LITTLE(m + 16)); + x5 = XOR(x5, _private_tls_U8TO32_LITTLE(m + 20)); + x6 = XOR(x6, _private_tls_U8TO32_LITTLE(m + 24)); + x7 = XOR(x7, _private_tls_U8TO32_LITTLE(m + 28)); + x8 = XOR(x8, _private_tls_U8TO32_LITTLE(m + 32)); + x9 = XOR(x9, _private_tls_U8TO32_LITTLE(m + 36)); + x10 = XOR(x10, _private_tls_U8TO32_LITTLE(m + 40)); + x11 = XOR(x11, _private_tls_U8TO32_LITTLE(m + 44)); + x12 = XOR(x12, _private_tls_U8TO32_LITTLE(m + 48)); + x13 = XOR(x13, _private_tls_U8TO32_LITTLE(m + 52)); + x14 = XOR(x14, _private_tls_U8TO32_LITTLE(m + 56)); + x15 = XOR(x15, _private_tls_U8TO32_LITTLE(m + 60)); + + j12 = PLUSONE(j12); + if (!j12) { + j13 = PLUSONE(j13); + /* + * Stopping at 2^70 bytes per nonce is the user's + * responsibility. + */ + } + + _private_tls_U32TO8_LITTLE(c + 0, x0); + _private_tls_U32TO8_LITTLE(c + 4, x1); + _private_tls_U32TO8_LITTLE(c + 8, x2); + _private_tls_U32TO8_LITTLE(c + 12, x3); + _private_tls_U32TO8_LITTLE(c + 16, x4); + _private_tls_U32TO8_LITTLE(c + 20, x5); + _private_tls_U32TO8_LITTLE(c + 24, x6); + _private_tls_U32TO8_LITTLE(c + 28, x7); + _private_tls_U32TO8_LITTLE(c + 32, x8); + _private_tls_U32TO8_LITTLE(c + 36, x9); + _private_tls_U32TO8_LITTLE(c + 40, x10); + _private_tls_U32TO8_LITTLE(c + 44, x11); + _private_tls_U32TO8_LITTLE(c + 48, x12); + _private_tls_U32TO8_LITTLE(c + 52, x13); + _private_tls_U32TO8_LITTLE(c + 56, x14); + _private_tls_U32TO8_LITTLE(c + 60, x15); + + if (bytes <= 64) { + if (bytes < 64) { + for (i = 0; i < bytes; ++i) + ctarget[i] = c[i]; + } + x->input[12] = j12; + x->input[13] = j13; + x->unused = 64 - bytes; + return; + } + bytes -= 64; + c += 64; + m += 64; + } +} + +static inline void chacha20_block(chacha_ctx *x, unsigned char *c, u_int len) { + u_int i; + + unsigned int state[16]; + for (i = 0; i < 16; i++) + state[i] = x->input[i]; + for (i = 20; i > 0; i -= 2) { + QUARTERROUND(state[0], state[4], state[8], state[12]) + QUARTERROUND(state[1], state[5], state[9], state[13]) + QUARTERROUND(state[2], state[6], state[10], state[14]) + QUARTERROUND(state[3], state[7], state[11], state[15]) + QUARTERROUND(state[0], state[5], state[10], state[15]) + QUARTERROUND(state[1], state[6], state[11], state[12]) + QUARTERROUND(state[2], state[7], state[8], state[13]) + QUARTERROUND(state[3], state[4], state[9], state[14]) + } + + for (i = 0; i < 16; i++) + x->input[i] = PLUS(x->input[i], state[i]); + + for (i = 0; i < len; i += 4) { + _private_tls_U32TO8_LITTLE(c + i, x->input[i/4]); + } +} + +static inline int poly1305_generate_key(unsigned char *key256, unsigned char *nonce, unsigned int noncelen, unsigned char *poly_key, unsigned int counter) { + struct chacha_ctx ctx; + uint64_t ctr; + memset(&ctx, 0, sizeof(ctx)); + chacha_keysetup(&ctx, key256, 256); + switch (noncelen) { + case 8: + ctr = counter; + chacha_ivsetup(&ctx, nonce, (unsigned char *)&ctr); + break; + case 12: + chacha_ivsetup_96bitnonce(&ctx, nonce, (unsigned char *)&counter); + break; + default: + return -1; + } + chacha20_block(&ctx, poly_key, POLY1305_KEYLEN); + return 0; +} + +/* 17 + sizeof(size_t) + 14*sizeof(unsigned long) */ +typedef struct poly1305_state_internal_t { + unsigned long r[5]; + unsigned long h[5]; + unsigned long pad[4]; + size_t leftover; + unsigned char buffer[poly1305_block_size]; + unsigned char final; +} poly1305_state_internal_t; + +/* interpret four 8 bit unsigned integers as a 32 bit unsigned integer in little endian */ +static unsigned long _private_tls_U8TO32(const unsigned char *p) { + return + (((unsigned long)(p[0] & 0xff) ) | + ((unsigned long)(p[1] & 0xff) << 8) | + ((unsigned long)(p[2] & 0xff) << 16) | + ((unsigned long)(p[3] & 0xff) << 24)); +} + +/* store a 32 bit unsigned integer as four 8 bit unsigned integers in little endian */ +static void _private_tls_U32TO8(unsigned char *p, unsigned long v) { + p[0] = (v ) & 0xff; + p[1] = (v >> 8) & 0xff; + p[2] = (v >> 16) & 0xff; + p[3] = (v >> 24) & 0xff; +} + +void _private_tls_poly1305_init(poly1305_context *ctx, const unsigned char key[32]) { + poly1305_state_internal_t *st = (poly1305_state_internal_t *)ctx; + + /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */ + st->r[0] = (_private_tls_U8TO32(&key[ 0]) ) & 0x3ffffff; + st->r[1] = (_private_tls_U8TO32(&key[ 3]) >> 2) & 0x3ffff03; + st->r[2] = (_private_tls_U8TO32(&key[ 6]) >> 4) & 0x3ffc0ff; + st->r[3] = (_private_tls_U8TO32(&key[ 9]) >> 6) & 0x3f03fff; + st->r[4] = (_private_tls_U8TO32(&key[12]) >> 8) & 0x00fffff; + + /* h = 0 */ + st->h[0] = 0; + st->h[1] = 0; + st->h[2] = 0; + st->h[3] = 0; + st->h[4] = 0; + + /* save pad for later */ + st->pad[0] = _private_tls_U8TO32(&key[16]); + st->pad[1] = _private_tls_U8TO32(&key[20]); + st->pad[2] = _private_tls_U8TO32(&key[24]); + st->pad[3] = _private_tls_U8TO32(&key[28]); + + st->leftover = 0; + st->final = 0; +} + +static void _private_tls_poly1305_blocks(poly1305_state_internal_t *st, const unsigned char *m, size_t bytes) { + const unsigned long hibit = (st->final) ? 0 : (1UL << 24); /* 1 << 128 */ + unsigned long r0,r1,r2,r3,r4; + unsigned long s1,s2,s3,s4; + unsigned long h0,h1,h2,h3,h4; + unsigned long long d0,d1,d2,d3,d4; + unsigned long c; + + r0 = st->r[0]; + r1 = st->r[1]; + r2 = st->r[2]; + r3 = st->r[3]; + r4 = st->r[4]; + + s1 = r1 * 5; + s2 = r2 * 5; + s3 = r3 * 5; + s4 = r4 * 5; + + h0 = st->h[0]; + h1 = st->h[1]; + h2 = st->h[2]; + h3 = st->h[3]; + h4 = st->h[4]; + + while (bytes >= poly1305_block_size) { + /* h += m[i] */ + h0 += (_private_tls_U8TO32(m+ 0) ) & 0x3ffffff; + h1 += (_private_tls_U8TO32(m+ 3) >> 2) & 0x3ffffff; + h2 += (_private_tls_U8TO32(m+ 6) >> 4) & 0x3ffffff; + h3 += (_private_tls_U8TO32(m+ 9) >> 6) & 0x3ffffff; + h4 += (_private_tls_U8TO32(m+12) >> 8) | hibit; + + /* h *= r */ + d0 = ((unsigned long long)h0 * r0) + ((unsigned long long)h1 * s4) + ((unsigned long long)h2 * s3) + ((unsigned long long)h3 * s2) + ((unsigned long long)h4 * s1); + d1 = ((unsigned long long)h0 * r1) + ((unsigned long long)h1 * r0) + ((unsigned long long)h2 * s4) + ((unsigned long long)h3 * s3) + ((unsigned long long)h4 * s2); + d2 = ((unsigned long long)h0 * r2) + ((unsigned long long)h1 * r1) + ((unsigned long long)h2 * r0) + ((unsigned long long)h3 * s4) + ((unsigned long long)h4 * s3); + d3 = ((unsigned long long)h0 * r3) + ((unsigned long long)h1 * r2) + ((unsigned long long)h2 * r1) + ((unsigned long long)h3 * r0) + ((unsigned long long)h4 * s4); + d4 = ((unsigned long long)h0 * r4) + ((unsigned long long)h1 * r3) + ((unsigned long long)h2 * r2) + ((unsigned long long)h3 * r1) + ((unsigned long long)h4 * r0); + + /* (partial) h %= p */ + c = (unsigned long)(d0 >> 26); h0 = (unsigned long)d0 & 0x3ffffff; + d1 += c; c = (unsigned long)(d1 >> 26); h1 = (unsigned long)d1 & 0x3ffffff; + d2 += c; c = (unsigned long)(d2 >> 26); h2 = (unsigned long)d2 & 0x3ffffff; + d3 += c; c = (unsigned long)(d3 >> 26); h3 = (unsigned long)d3 & 0x3ffffff; + d4 += c; c = (unsigned long)(d4 >> 26); h4 = (unsigned long)d4 & 0x3ffffff; + h0 += c * 5; c = (h0 >> 26); h0 = h0 & 0x3ffffff; + h1 += c; + + m += poly1305_block_size; + bytes -= poly1305_block_size; + } + + st->h[0] = h0; + st->h[1] = h1; + st->h[2] = h2; + st->h[3] = h3; + st->h[4] = h4; +} + +void _private_tls_poly1305_finish(poly1305_context *ctx, unsigned char mac[16]) { + poly1305_state_internal_t *st = (poly1305_state_internal_t *)ctx; + unsigned long h0,h1,h2,h3,h4,c; + unsigned long g0,g1,g2,g3,g4; + unsigned long long f; + unsigned long mask; + + /* process the remaining block */ + if (st->leftover) { + size_t i = st->leftover; + st->buffer[i++] = 1; + for (; i < poly1305_block_size; i++) + st->buffer[i] = 0; + st->final = 1; + _private_tls_poly1305_blocks(st, st->buffer, poly1305_block_size); + } + + /* fully carry h */ + h0 = st->h[0]; + h1 = st->h[1]; + h2 = st->h[2]; + h3 = st->h[3]; + h4 = st->h[4]; + + c = h1 >> 26; h1 = h1 & 0x3ffffff; + h2 += c; c = h2 >> 26; h2 = h2 & 0x3ffffff; + h3 += c; c = h3 >> 26; h3 = h3 & 0x3ffffff; + h4 += c; c = h4 >> 26; h4 = h4 & 0x3ffffff; + h0 += c * 5; c = h0 >> 26; h0 = h0 & 0x3ffffff; + h1 += c; + + /* compute h + -p */ + g0 = h0 + 5; c = g0 >> 26; g0 &= 0x3ffffff; + g1 = h1 + c; c = g1 >> 26; g1 &= 0x3ffffff; + g2 = h2 + c; c = g2 >> 26; g2 &= 0x3ffffff; + g3 = h3 + c; c = g3 >> 26; g3 &= 0x3ffffff; + g4 = h4 + c - (1UL << 26); + + /* select h if h < p, or h + -p if h >= p */ + mask = (g4 >> ((sizeof(unsigned long) * 8) - 1)) - 1; + g0 &= mask; + g1 &= mask; + g2 &= mask; + g3 &= mask; + g4 &= mask; + mask = ~mask; + h0 = (h0 & mask) | g0; + h1 = (h1 & mask) | g1; + h2 = (h2 & mask) | g2; + h3 = (h3 & mask) | g3; + h4 = (h4 & mask) | g4; + + /* h = h % (2^128) */ + h0 = ((h0 ) | (h1 << 26)) & 0xffffffff; + h1 = ((h1 >> 6) | (h2 << 20)) & 0xffffffff; + h2 = ((h2 >> 12) | (h3 << 14)) & 0xffffffff; + h3 = ((h3 >> 18) | (h4 << 8)) & 0xffffffff; + + /* mac = (h + pad) % (2^128) */ + f = (unsigned long long)h0 + st->pad[0] ; h0 = (unsigned long)f; + f = (unsigned long long)h1 + st->pad[1] + (f >> 32); h1 = (unsigned long)f; + f = (unsigned long long)h2 + st->pad[2] + (f >> 32); h2 = (unsigned long)f; + f = (unsigned long long)h3 + st->pad[3] + (f >> 32); h3 = (unsigned long)f; + + _private_tls_U32TO8(mac + 0, h0); + _private_tls_U32TO8(mac + 4, h1); + _private_tls_U32TO8(mac + 8, h2); + _private_tls_U32TO8(mac + 12, h3); + + /* zero out the state */ + st->h[0] = 0; + st->h[1] = 0; + st->h[2] = 0; + st->h[3] = 0; + st->h[4] = 0; + st->r[0] = 0; + st->r[1] = 0; + st->r[2] = 0; + st->r[3] = 0; + st->r[4] = 0; + st->pad[0] = 0; + st->pad[1] = 0; + st->pad[2] = 0; + st->pad[3] = 0; +} + +void _private_tls_poly1305_update(poly1305_context *ctx, const unsigned char *m, size_t bytes) { + poly1305_state_internal_t *st = (poly1305_state_internal_t *)ctx; + size_t i; + /* handle leftover */ + if (st->leftover) { + size_t want = (poly1305_block_size - st->leftover); + if (want > bytes) + want = bytes; + for (i = 0; i < want; i++) + st->buffer[st->leftover + i] = m[i]; + bytes -= want; + m += want; + st->leftover += want; + if (st->leftover < poly1305_block_size) + return; + _private_tls_poly1305_blocks(st, st->buffer, poly1305_block_size); + st->leftover = 0; + } + + /* process full blocks */ + if (bytes >= poly1305_block_size) { + size_t want = (bytes & ~(poly1305_block_size - 1)); + _private_tls_poly1305_blocks(st, m, want); + m += want; + bytes -= want; + } + + /* store leftover */ + if (bytes) { + for (i = 0; i < bytes; i++) + st->buffer[st->leftover + i] = m[i]; + st->leftover += bytes; + } +} + +int poly1305_verify(const unsigned char mac1[16], const unsigned char mac2[16]) { + size_t i; + unsigned int dif = 0; + for (i = 0; i < 16; i++) + dif |= (mac1[i] ^ mac2[i]); + dif = (dif - 1) >> ((sizeof(unsigned int) * 8) - 1); + return (dif & 1); +} + +void chacha20_poly1305_key(struct chacha_ctx *ctx, unsigned char *poly1305_key) { + unsigned char key[32]; + unsigned char nonce[12]; + chacha_key(ctx, key); + chacha_nonce(ctx, nonce); + poly1305_generate_key(key, nonce, sizeof(nonce), poly1305_key, 0); +} + +int chacha20_poly1305_aead(struct chacha_ctx *ctx, unsigned char *pt, unsigned int len, unsigned char *aad, unsigned int aad_len, unsigned char *poly_key, unsigned char *out) { + static unsigned char zeropad[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + if (aad_len > POLY1305_MAX_AAD) + return -1; + + unsigned int counter = 1; + chacha_ivsetup_96bitnonce(ctx, NULL, (unsigned char *)&counter); + chacha_encrypt_bytes(ctx, pt, out, len); + + poly1305_context aead_ctx; + _private_tls_poly1305_init(&aead_ctx, poly_key); + _private_tls_poly1305_update(&aead_ctx, aad, aad_len); + int rem = aad_len % 16; + if (rem) + _private_tls_poly1305_update(&aead_ctx, zeropad, 16 - rem); + _private_tls_poly1305_update(&aead_ctx, out, len); + rem = len % 16; + if (rem) + _private_tls_poly1305_update(&aead_ctx, zeropad, 16 - rem); + + unsigned char trail[16]; + _private_tls_U32TO8(trail, aad_len); + *(int *)(trail + 4) = 0; + _private_tls_U32TO8(trail + 8, len); + *(int *)(trail + 12) = 0; + + _private_tls_poly1305_update(&aead_ctx, trail, 16); + _private_tls_poly1305_finish(&aead_ctx, out + len); + + return len + POLY1305_TAGLEN; +} +#endif +#endif + +typedef enum { + KEA_dhe_dss, + KEA_dhe_rsa, + KEA_dh_anon, + KEA_rsa, + KEA_dh_dss, + KEA_dh_rsa, + KEA_ec_diffie_hellman +} KeyExchangeAlgorithm; + +typedef enum { + rsa_sign = 1, + dss_sign = 2, + rsa_fixed_dh = 3, + dss_fixed_dh = 4, + rsa_ephemeral_dh_RESERVED = 5, + dss_ephemeral_dh_RESERVED = 6, + fortezza_dms_RESERVED = 20, + ecdsa_sign = 64, + rsa_fixed_ecdh = 65, + ecdsa_fixed_ecdh = 66 +} TLSClientCertificateType; + +typedef enum { + none = 0, + md5 = 1, + sha1 = 2, + sha224 = 3, + sha256 = 4, + sha384 = 5, + sha512 = 6, + _md5_sha1 = 255 +} TLSHashAlgorithm; + +#define TLS_HASH_ALGO_NUMBER (sha512 - md5 + 1) + +typedef enum { + anonymous = 0, + rsa = 1, + dsa = 2, + ecdsa = 3 +} TLSSignatureAlgorithm; + +#define TLS_SIGN_ALGO_NUMBER (ecdsa - rsa + 1) + +struct _private_OID_chain { + void *top; + unsigned char *oid; +}; + +struct TLSCertificate { + unsigned short version; + unsigned int algorithm; + unsigned int key_algorithm; + unsigned int ec_algorithm; + unsigned char *exponent; + unsigned int exponent_len; + unsigned char *pk; + unsigned int pk_len; + unsigned char *priv; + unsigned int priv_len; + unsigned char *issuer_country; + unsigned char *issuer_state; + unsigned char *issuer_location; + unsigned char *issuer_entity; + unsigned char *issuer_subject; + unsigned char *not_before; + unsigned char *not_after; + unsigned char *country; + unsigned char *state; + unsigned char *location; + unsigned char *entity; + unsigned char *subject; + unsigned char **san; + unsigned short san_length; + unsigned char *ocsp; + unsigned char *serial_number; + unsigned int serial_len; + unsigned char *sign_key; + unsigned int sign_len; + unsigned char *fingerprint; + unsigned char *der_bytes; + unsigned int der_len; + unsigned char *bytes; + unsigned int len; +}; + +typedef struct { + union { + symmetric_CBC aes_local; + gcm_state aes_gcm_local; +#ifdef TLS_WITH_CHACHA20_POLY1305 + chacha_ctx chacha_local; +#endif + } ctx_local; + union { + symmetric_CBC aes_remote; + gcm_state aes_gcm_remote; +#ifdef TLS_WITH_CHACHA20_POLY1305 + chacha_ctx chacha_remote; +#endif + } ctx_remote; + union { + unsigned char local_mac[TLS_MAX_MAC_SIZE]; + unsigned char local_aead_iv[TLS_AES_GCM_IV_LENGTH]; +#ifdef WITH_TLS_13 + unsigned char local_iv[TLS_13_AES_GCM_IV_LENGTH]; +#endif +#ifdef TLS_WITH_CHACHA20_POLY1305 + unsigned char local_nonce[TLS_CHACHA20_IV_LENGTH]; +#endif + } ctx_local_mac; + union { + unsigned char remote_aead_iv[TLS_AES_GCM_IV_LENGTH]; + unsigned char remote_mac[TLS_MAX_MAC_SIZE]; +#ifdef WITH_TLS_13 + unsigned char remote_iv[TLS_13_AES_GCM_IV_LENGTH]; +#endif +#ifdef TLS_WITH_CHACHA20_POLY1305 + unsigned char remote_nonce[TLS_CHACHA20_IV_LENGTH]; +#endif + } ctx_remote_mac; + unsigned char created; +} TLSCipher; + +typedef struct { + hash_state hash32; + hash_state hash48; +#ifdef TLS_LEGACY_SUPPORT + hash_state hash2; +#endif + unsigned char created; +} TLSHash; + +#ifdef TLS_FORWARD_SECRECY +#define mp_init(a) ltc_mp.init(a) +#define mp_init_multi ltc_init_multi +#define mp_clear(a) ltc_mp.deinit(a) +#define mp_clear_multi ltc_deinit_multi +#define mp_count_bits(a) ltc_mp.count_bits(a) +#define mp_read_radix(a, b, c) ltc_mp.read_radix(a, b, c) +#define mp_unsigned_bin_size(a) ltc_mp.unsigned_size(a) +#define mp_to_unsigned_bin(a, b) ltc_mp.unsigned_write(a, b) +#define mp_read_unsigned_bin(a, b, c) ltc_mp.unsigned_read(a, b, c) +#define mp_exptmod(a, b, c, d) ltc_mp.exptmod(a, b, c, d) +#define mp_add(a, b, c) ltc_mp.add(a, b, c) +#define mp_mul(a, b, c) ltc_mp.mul(a, b, c) +#define mp_cmp(a, b) ltc_mp.compare(a, b) +#define mp_cmp_d(a, b) ltc_mp.compare_d(a, b) +#define mp_sqr(a, b) ltc_mp.sqr(a, b) +#define mp_mod(a, b, c) ltc_mp.mpdiv(a, b, NULL, c) +#define mp_sub(a, b, c) ltc_mp.sub(a, b, c) +#define mp_set(a, b) ltc_mp.set_int(a, b) +#define mp_copy(a, b) ltc_mp.copy(a, b) +#define mp_submod(a, b, c, d) ltc_mp.submod(a, b, c, d) +#define mp_mulmod(a, b, c, d) ltc_mp.mulmod(a, b, c, d) +#define mp_addmod(a, b, c, d) ltc_mp.addmod(a, b, c, d) + +typedef struct { + int iana; + void *x; + void *y; + void *p; + void *g; +} DHKey; + +#ifdef WITH_TLS_13 +static DHKey ffdhe2048 = { + 0x0100, + NULL, + NULL, + (void *)"FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF97D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD65612433F51F5F066ED0856365553DED1AF3B557135E7F57C935984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE73530ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FBB96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB190B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F619172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD733BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA886B423861285C97FFFFFFFFFFFFFFFF", + (void *)"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002" +}; + +static DHKey ffdhe3072 = { + 0x0101, + NULL, + NULL, + (void *)"FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF97D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD65612433F51F5F066ED0856365553DED1AF3B557135E7F57C935984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE73530ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FBB96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB190B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F619172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD733BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA886B4238611FCFDCDE355B3B6519035BBC34F4DEF99C023861B46FC9D6E6C9077AD91D2691F7F7EE598CB0FAC186D91CAEFE130985139270B4130C93BC437944F4FD4452E2D74DD364F2E21E71F54BFF5CAE82AB9C9DF69EE86D2BC522363A0DABC521979B0DEADA1DBF9A42D5C4484E0ABCD06BFA53DDEF3C1B20EE3FD59D7C25E41D2B66C62E37FFFFFFFFFFFFFFFF", + (void *)"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002" +}; + +static DHKey ffdhe4096 = { + 0x0102, + NULL, + NULL, + (void *)"FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF97D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD65612433F51F5F066ED0856365553DED1AF3B557135E7F57C935984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE73530ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FBB96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB190B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F619172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD733BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA886B4238611FCFDCDE355B3B6519035BBC34F4DEF99C023861B46FC9D6E6C9077AD91D2691F7F7EE598CB0FAC186D91CAEFE130985139270B4130C93BC437944F4FD4452E2D74DD364F2E21E71F54BFF5CAE82AB9C9DF69EE86D2BC522363A0DABC521979B0DEADA1DBF9A42D5C4484E0ABCD06BFA53DDEF3C1B20EE3FD59D7C25E41D2B669E1EF16E6F52C3164DF4FB7930E9E4E58857B6AC7D5F42D69F6D187763CF1D5503400487F55BA57E31CC7A7135C886EFB4318AED6A1E012D9E6832A907600A918130C46DC778F971AD0038092999A333CB8B7A1A1DB93D7140003C2A4ECEA9F98D0ACC0A8291CDCEC97DCF8EC9B55A7F88A46B4DB5A851F44182E1C68A007E5E655F6AFFFFFFFFFFFFFFFF", + (void *)"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002" +}; + +static DHKey ffdhe6144 = { + 0x0103, + NULL, + NULL, + (void *)"FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF97D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD65612433F51F5F066ED0856365553DED1AF3B557135E7F57C935984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE73530ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FBB96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB190B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F619172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD733BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA886B4238611FCFDCDE355B3B6519035BBC34F4DEF99C023861B46FC9D6E6C9077AD91D2691F7F7EE598CB0FAC186D91CAEFE130985139270B4130C93BC437944F4FD4452E2D74DD364F2E21E71F54BFF5CAE82AB9C9DF69EE86D2BC522363A0DABC521979B0DEADA1DBF9A42D5C4484E0ABCD06BFA53DDEF3C1B20EE3FD59D7C25E41D2B669E1EF16E6F52C3164DF4FB7930E9E4E58857B6AC7D5F42D69F6D187763CF1D5503400487F55BA57E31CC7A7135C886EFB4318AED6A1E012D9E6832A907600A918130C46DC778F971AD0038092999A333CB8B7A1A1DB93D7140003C2A4ECEA9F98D0ACC0A8291CDCEC97DCF8EC9B55A7F88A46B4DB5A851F44182E1C68A007E5E0DD9020BFD64B645036C7A4E677D2C38532A3A23BA4442CAF53EA63BB454329B7624C8917BDD64B1C0FD4CB38E8C334C701C3ACDAD0657FCCFEC719B1F5C3E4E46041F388147FB4CFDB477A52471F7A9A96910B855322EDB6340D8A00EF092350511E30ABEC1FFF9E3A26E7FB29F8C183023C3587E38DA0077D9B4763E4E4B94B2BBC194C6651E77CAF992EEAAC0232A281BF6B3A739C1226116820AE8DB5847A67CBEF9C9091B462D538CD72B03746AE77F5E62292C311562A846505DC82DB854338AE49F5235C95B91178CCF2DD5CACEF403EC9D1810C6272B045B3B71F9DC6B80D63FDD4A8E9ADB1E6962A69526D43161C1A41D570D7938DAD4A40E329CD0E40E65FFFFFFFFFFFFFFFF", + (void *)"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002" +}; + +static DHKey ffdhe8192 = { + 0x0104, + NULL, + NULL, + (void *)"FFFFFFFFFFFFFFFFADF85458A2BB4A9AAFDC5620273D3CF1D8B9C583CE2D3695A9E13641146433FBCC939DCE249B3EF97D2FE363630C75D8F681B202AEC4617AD3DF1ED5D5FD65612433F51F5F066ED0856365553DED1AF3B557135E7F57C935984F0C70E0E68B77E2A689DAF3EFE8721DF158A136ADE73530ACCA4F483A797ABC0AB182B324FB61D108A94BB2C8E3FBB96ADAB760D7F4681D4F42A3DE394DF4AE56EDE76372BB190B07A7C8EE0A6D709E02FCE1CDF7E2ECC03404CD28342F619172FE9CE98583FF8E4F1232EEF28183C3FE3B1B4C6FAD733BB5FCBC2EC22005C58EF1837D1683B2C6F34A26C1B2EFFA886B4238611FCFDCDE355B3B6519035BBC34F4DEF99C023861B46FC9D6E6C9077AD91D2691F7F7EE598CB0FAC186D91CAEFE130985139270B4130C93BC437944F4FD4452E2D74DD364F2E21E71F54BFF5CAE82AB9C9DF69EE86D2BC522363A0DABC521979B0DEADA1DBF9A42D5C4484E0ABCD06BFA53DDEF3C1B20EE3FD59D7C25E41D2B669E1EF16E6F52C3164DF4FB7930E9E4E58857B6AC7D5F42D69F6D187763CF1D5503400487F55BA57E31CC7A7135C886EFB4318AED6A1E012D9E6832A907600A918130C46DC778F971AD0038092999A333CB8B7A1A1DB93D7140003C2A4ECEA9F98D0ACC0A8291CDCEC97DCF8EC9B55A7F88A46B4DB5A851F44182E1C68A007E5E0DD9020BFD64B645036C7A4E677D2C38532A3A23BA4442CAF53EA63BB454329B7624C8917BDD64B1C0FD4CB38E8C334C701C3ACDAD0657FCCFEC719B1F5C3E4E46041F388147FB4CFDB477A52471F7A9A96910B855322EDB6340D8A00EF092350511E30ABEC1FFF9E3A26E7FB29F8C183023C3587E38DA0077D9B4763E4E4B94B2BBC194C6651E77CAF992EEAAC0232A281BF6B3A739C1226116820AE8DB5847A67CBEF9C9091B462D538CD72B03746AE77F5E62292C311562A846505DC82DB854338AE49F5235C95B91178CCF2DD5CACEF403EC9D1810C6272B045B3B71F9DC6B80D63FDD4A8E9ADB1E6962A69526D43161C1A41D570D7938DAD4A40E329CCFF46AAA36AD004CF600C8381E425A31D951AE64FDB23FCEC9509D43687FEB69EDD1CC5E0B8CC3BDF64B10EF86B63142A3AB8829555B2F747C932665CB2C0F1CC01BD70229388839D2AF05E454504AC78B7582822846C0BA35C35F5C59160CC046FD8251541FC68C9C86B022BB7099876A460E7451A8A93109703FEE1C217E6C3826E52C51AA691E0E423CFC99E9E31650C1217B624816CDAD9A95F9D5B8019488D9C0A0A1FE3075A577E23183F81D4A3F2FA4571EFC8CE0BA8A4FE8B6855DFE72B0A66EDED2FBABFBE58A30FAFABE1C5D71A87E2F741EF8C1FE86FEA6BBFDE530677F0D97D11D49F7A8443D0822E506A9F4614E011E2A94838FF88CD68C8BB7C5C6424CFFFFFFFFFFFFFFFF", + (void *)"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002" +}; +#endif + +#if CRYPT > 0x0117 + #define ltc_ecc_set_type ltc_ecc_curve +#endif + +struct ECCCurveParameters { + int size; + int iana; + const char *name; + const char *P; + const char *A; + const char *B; + const char *Gx; + const char *Gy; + const char *order; + const char *oid; + ltc_ecc_set_type dp; +}; + +static struct ECCCurveParameters secp192r1 = { + 24, + 19, + "secp192r1", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", // P + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC", // A + "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1", // B + "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012", // Gx + "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811", // Gy + "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831", // order (n) + "1.2.840.10045.3.1.1" // oid +}; + + +static struct ECCCurveParameters secp224r1 = { + 28, + 21, + "secp224r1", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", // P + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE", // A + "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4", // B + "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21", // Gx + "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34", // Gy + "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D", // order (n) + "1.3.132.0.33" // oid +}; + +static struct ECCCurveParameters secp224k1 = { + 28, + 20, + "secp224k1", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D", // P + "00000000000000000000000000000000000000000000000000000000", // A + "00000000000000000000000000000000000000000000000000000005", // B + "A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C", // Gx + "7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5", // Gy + "0000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7", // order (n) + "1.3.132.0.32" // oid +}; + +static struct ECCCurveParameters secp256r1 = { + 32, + 23, + "secp256r1", + "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", // P + "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", // A + "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", // B + "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", // Gx + "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", // Gy + "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", // order (n) + "1.2.840.10045.3.1.7" // oid +}; + +static struct ECCCurveParameters secp256k1 = { + 32, + 22, + "secp256k1", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", // P + "0000000000000000000000000000000000000000000000000000000000000000", // A + "0000000000000000000000000000000000000000000000000000000000000007", // B + "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", // Gx + "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", // Gy + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", // order (n) + "1.3.132.0.10" // oid +}; + +static struct ECCCurveParameters secp384r1 = { + 48, + 24, + "secp384r1", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF", // P + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC", // A + "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF", // B + "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7", // Gx + "3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F", // Gy + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973", // order (n) + "1.3.132.0.34" // oid +}; + +static struct ECCCurveParameters secp521r1 = { + 66, + 25, + "secp521r1", + "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", // P + "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC", // A + "0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00", // B + "00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66", // Gx + "011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650", // Gy + "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409", // order (n) + "1.3.132.0.35" // oid +}; + +#ifdef TLS_CURVE25519 +// dummy +static struct ECCCurveParameters x25519 = { + 32, + 29, + "x25519", + "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED", // P + "0000000000000000000000000000000000000000000000000000000000076D06", // A + "0000000000000000000000000000000000000000000000000000000000000000", // B + "0000000000000000000000000000000000000000000000000000000000000009", // Gx + "20AE19A1B8A086B4E01EDD2C7748D14C923D4D7E6D7C61B229E9C5A27ECED3D9", // Gy + "1000000000000000000000000000000014DEF9DEA2F79CD65812631A5CF5D3ED", // order (n) + "1.3.101.110" // oid +}; +#endif + +static struct ECCCurveParameters * const default_curve = &secp256r1; + +void init_curve(struct ECCCurveParameters *curve) { +#if CRYPT < 0x0118 + curve->dp.size = curve->size; + curve->dp.name = (char *)curve->name; +#else + curve->dp.cofactor = 1; + curve->dp.A = (char *)curve->A; + curve->dp.OID = curve->oid; +#endif + curve->dp.B = (char *)curve->B; + curve->dp.prime = (char *)curve->P; + curve->dp.Gx = (char *)curve->Gx; + curve->dp.Gy = (char *)curve->Gy; + curve->dp.order = (char *)curve->order; +} + +void init_curves() { + init_curve(&secp192r1); + init_curve(&secp224r1); + init_curve(&secp224k1); + init_curve(&secp256r1); + init_curve(&secp256k1); + init_curve(&secp384r1); + init_curve(&secp521r1); +} +#endif + +struct DTLSFragment { + char *buffer; + int len; + int written; +}; + +struct TLSHandshakeList { + unsigned char connection_status; + unsigned char direction; + unsigned char *msg; + unsigned int len; + void *next; +}; + +struct DTLSData { + struct TLSHandshakeList *dtls_handshake_list; + struct DTLSFragment *fragment; + unsigned char *key_exchange; + unsigned int key_exchange_len; +#ifdef TLS_DTLS_EXTENDED_MASTER_SECRET + unsigned char extended_master_secret; +#endif + unsigned char has_random; + char *remote_fingerprint; +}; + +struct TLSContext { + unsigned char remote_random[TLS_CLIENT_RANDOM_SIZE]; + unsigned char local_random[TLS_SERVER_RANDOM_SIZE]; + unsigned char session[TLS_MAX_SESSION_ID]; + unsigned char session_size; + unsigned short cipher; + unsigned short version; + unsigned char is_server; + struct TLSCertificate **certificates; + struct TLSCertificate *private_key; +#ifdef TLS_ECDSA_SUPPORTED + struct TLSCertificate *ec_private_key; +#endif +#ifdef TLS_FORWARD_SECRECY + DHKey *dhe; + ecc_key *ecc_dhe; + char *default_dhe_p; + char *default_dhe_g; + const struct ECCCurveParameters *curve; +#endif + struct TLSCertificate **client_certificates; + unsigned int certificates_count; + unsigned int client_certificates_count; + unsigned char *master_key; + unsigned int master_key_len; + unsigned char *premaster_key; + unsigned int premaster_key_len; + unsigned char cipher_spec_set; + TLSCipher crypto; + TLSHash *handshake_hash; + + unsigned char *message_buffer; + unsigned int message_buffer_len; + uint64_t remote_sequence_number; + uint64_t local_sequence_number; + + unsigned char connection_status; + unsigned char critical_error; + unsigned char error_code; + + unsigned char *tls_buffer; + unsigned int tls_buffer_len; + + unsigned char *application_buffer; + unsigned int application_buffer_len; + unsigned char is_child; + unsigned char exportable; + unsigned char *exportable_keys; + unsigned char exportable_size; + char *sni; + unsigned char request_client_certificate; + unsigned char dtls; + unsigned short dtls_epoch_local; + unsigned short dtls_epoch_remote; + unsigned char *dtls_cookie; + unsigned char dtls_cookie_len; + unsigned char dtls_seq; + unsigned char *cached_handshake; + unsigned int cached_handshake_len; + unsigned char client_verified; + // handshake messages flags + unsigned char hs_messages[11]; + + void *user_data; + struct TLSCertificate **root_certificates; + unsigned int root_count; +#ifdef TLS_ACCEPT_SECURE_RENEGOTIATION + unsigned char *verify_data; + unsigned char verify_len; +#endif +#ifdef WITH_TLS_13 + unsigned char *finished_key; + unsigned char *remote_finished_key; + unsigned char *server_finished_hash; +#endif +#ifdef TLS_CURVE25519 + unsigned char *client_secret; +#endif + char **alpn; + unsigned char alpn_count; + char *negotiated_alpn; + unsigned int sleep_until; + unsigned short tls13_version; +#ifdef TLS_12_FALSE_START + unsigned char false_start; +#endif + + struct DTLSData *dtls_data; +}; + +struct TLSPacket { + unsigned char *buf; + unsigned int len; + unsigned int size; + unsigned char broken; + struct TLSContext *context; +}; + +struct TLSRTCPeerBuffer { + unsigned char *buf; + unsigned int len; + + void *next; +}; + +#define SRTP_MASTER_KEY_KEY_LEN 16 +#define SRTP_MASTER_KEY_SALT_LEN 14 + +struct TLSRTCPeerConnection { + struct TLSContext *context; + unsigned char stun_transcation_id[12]; + + char local_user[5]; + char local_pwd[25]; + + unsigned char *remote_user; + int remote_user_len; + unsigned char *remote_pwd; + int remote_pwd_len; + + tls_validation_function certificate_verify; + + void *userdata; + + unsigned char local_state; + unsigned char remote_state; + + unsigned char active; + +#ifdef TLS_SRTP + struct SRTPContext *srtp_local; + struct SRTPContext *srtp_remote; +#endif + + struct TLSRTCPeerBuffer *write_buffer; + struct TLSRTCPeerBuffer *read_buffer; +}; + +#ifdef SSL_COMPATIBLE_INTERFACE + +typedef int (*SOCKET_RECV_CALLBACK)(int socket, void *buffer, size_t length, int flags); +typedef int (*SOCKET_SEND_CALLBACK)(int socket, const void *buffer, size_t length, int flags); + +#ifndef _WIN32 +#include <sys/socket.h> +#endif +#endif + +static const unsigned int version_id[] = {1, 1, 1, 0}; +static const unsigned int pk_id[] = {1, 1, 7, 0}; +static const unsigned int serial_id[] = {1, 1, 2, 1, 0}; +static const unsigned int issurer_id[] = {1, 1, 4, 0}; +static const unsigned int owner_id[] = {1, 1, 6, 0}; +static const unsigned int validity_id[] = {1, 1, 5, 0}; +static const unsigned int algorithm_id[] = {1, 1, 3, 0}; +static const unsigned int sign_id[] = {1, 3, 2, 1, 0}; +static const unsigned int priv_id[] = {1, 4, 0}; +static const unsigned int priv_der_id[] = {1, 3, 1, 0}; +static const unsigned int ecc_priv_id[] = {1, 2, 0}; + +static const unsigned char country_oid[] = {0x55, 0x04, 0x06, 0x00}; +static const unsigned char state_oid[] = {0x55, 0x04, 0x08, 0x00}; +static const unsigned char location_oid[] = {0x55, 0x04, 0x07, 0x00}; +static const unsigned char entity_oid[] = {0x55, 0x04, 0x0A, 0x00}; +static const unsigned char subject_oid[] = {0x55, 0x04, 0x03, 0x00}; +static const unsigned char san_oid[] = {0x55, 0x1D, 0x11, 0x00}; +static const unsigned char ocsp_oid[] = {0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x00}; + +static const unsigned char TLS_RSA_SIGN_RSA_OID[] = {0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x00}; +static const unsigned char TLS_RSA_SIGN_MD5_OID[] = {0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x04, 0x00}; +static const unsigned char TLS_RSA_SIGN_SHA1_OID[] = {0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x00}; +static const unsigned char TLS_RSA_SIGN_SHA256_OID[] = {0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x00}; +static const unsigned char TLS_RSA_SIGN_SHA384_OID[] = {0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0C, 0x00}; +static const unsigned char TLS_RSA_SIGN_SHA512_OID[] = {0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0D, 0x00}; + +// static const unsigned char TLS_ECDSA_SIGN_SHA1_OID[] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x01, 0x05, 0x00, 0x00}; +// static const unsigned char TLS_ECDSA_SIGN_SHA224_OID[] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x01, 0x05, 0x00, 0x00}; +static const unsigned char TLS_ECDSA_SIGN_SHA256_OID[] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x05, 0x00, 0x00}; +// static const unsigned char TLS_ECDSA_SIGN_SHA384_OID[] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x03, 0x05, 0x00, 0x00}; +// static const unsigned char TLS_ECDSA_SIGN_SHA512_OID[] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x04, 0x05, 0x00, 0x00}; + +static const unsigned char TLS_EC_PUBLIC_KEY_OID[] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x00}; + +static const unsigned char TLS_EC_prime192v1_OID[] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x01, 0x00}; +static const unsigned char TLS_EC_prime192v2_OID[] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x02, 0x00}; +static const unsigned char TLS_EC_prime192v3_OID[] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x03, 0x00}; +static const unsigned char TLS_EC_prime239v1_OID[] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x04, 0x00}; +static const unsigned char TLS_EC_prime239v2_OID[] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x05, 0x00}; +static const unsigned char TLS_EC_prime239v3_OID[] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x06, 0x00}; +static const unsigned char TLS_EC_prime256v1_OID[] = {0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x00}; + +#define TLS_EC_secp256r1_OID TLS_EC_prime256v1_OID +static const unsigned char TLS_EC_secp224r1_OID[] = {0x2B, 0x81, 0x04, 0x00, 0x21, 0x00}; +static const unsigned char TLS_EC_secp384r1_OID[] = {0x2B, 0x81, 0x04, 0x00, 0x22, 0x00}; +static const unsigned char TLS_EC_secp521r1_OID[] = {0x2B, 0x81, 0x04, 0x00, 0x23, 0x00}; + +struct TLSCertificate *asn1_parse(struct TLSContext *context, const unsigned char *buffer, unsigned int size, int client_cert); +int _private_tls_update_hash(struct TLSContext *context, const unsigned char *in, unsigned int len, unsigned char direction, unsigned char connection_status); +struct TLSPacket *tls_build_finished(struct TLSContext *context); +unsigned int _private_tls_hmac_message(unsigned char local, struct TLSContext *context, const unsigned char *buf, int buf_len, const unsigned char *buf2, int buf_len2, unsigned char *out, unsigned int outlen, uint64_t remote_sequence_number); +int tls_random(unsigned char *key, int len); +void tls_destroy_packet(struct TLSPacket *packet); +struct TLSPacket *tls_build_hello(struct TLSContext *context, int tls13_downgrade); +struct TLSPacket *tls_build_certificate(struct TLSContext *context); +struct TLSPacket *tls_build_done(struct TLSContext *context); +struct TLSPacket *tls_build_alert(struct TLSContext *context, char critical, unsigned char code); +struct TLSPacket *tls_build_change_cipher_spec(struct TLSContext *context); +struct TLSPacket *tls_build_verify_request(struct TLSContext *context); +int _private_tls_crypto_create(struct TLSContext *context, int key_length, unsigned char *localkey, unsigned char *localiv, unsigned char *remotekey, unsigned char *remoteiv); +int _private_tls_get_hash(struct TLSContext *context, unsigned char *hout); +int _private_tls_done_hash(struct TLSContext *context, unsigned char *hout); +int _private_tls_get_hash_idx(struct TLSContext *context); +int _private_tls_build_random(struct TLSPacket *packet); +unsigned int _private_tls_mac_length(struct TLSContext *context); +void _private_dtls_handshake_data(struct TLSContext *context, struct TLSPacket *packet, unsigned int dataframe); +#ifdef TLS_FORWARD_SECRECY +void _private_tls_dhe_free(struct TLSContext *context); +void _private_tls_ecc_dhe_free(struct TLSContext *context); +void _private_tls_dh_clear_key(DHKey *key); +#endif + +#ifdef WITH_TLS_13 +struct TLSPacket *tls_build_encrypted_extensions(struct TLSContext *context); +struct TLSPacket *tls_build_certificate_verify(struct TLSContext *context); +#endif + +// dtls base secret +static unsigned char dtls_secret[32]; + +static unsigned char dependecies_loaded = 0; +// not supported +// static unsigned char TLS_DSA_SIGN_SHA1_OID[] = {0x2A, 0x86, 0x52, 0xCE, 0x38, 0x04, 0x03, 0x00}; + +// base64 stuff +static const char cd64[] = "|$$$}rstuvwxyz{$$$$$$$>?@ABCDEFGHIJKLMNOPQRSTUVW$$$$$$XYZ[\\]^_`abcdefghijklmnopq"; + +void _private_b64_decodeblock(unsigned char in[4], unsigned char out[3]) { + out[0] = (unsigned char )(in[0] << 2 | in[1] >> 4); + out[1] = (unsigned char )(in[1] << 4 | in[2] >> 2); + out[2] = (unsigned char )(((in[2] << 6) & 0xc0) | in[3]); +} + +int _private_b64_decode(const char *in_buffer, int in_buffer_size, unsigned char *out_buffer) { + unsigned char in[4], out[3], v; + int i, len; + + const char *ptr = in_buffer; + char *out_ptr = (char *)out_buffer; + + while (ptr <= in_buffer + in_buffer_size) { + for (len = 0, i = 0; i < 4 && (ptr <= in_buffer + in_buffer_size); i++) { + v = 0; + while ((ptr <= in_buffer + in_buffer_size) && v == 0) { + v = (unsigned char)ptr[0]; + ptr++; + v = (unsigned char)((v < 43 || v > 122) ? 0 : cd64[v - 43]); + if (v) + v = (unsigned char)((v == '$') ? 0 : v - 61); + } + if (ptr <= in_buffer + in_buffer_size) { + len++; + if (v) + in[i] = (unsigned char)(v - 1); + } else { + in[i] = 0; + } + } + if (len) { + _private_b64_decodeblock(in, out); + for (i = 0; i < len - 1; i++) { + out_ptr[0] = out[i]; + out_ptr++; + } + } + } + return (int)((intptr_t)out_ptr - (intptr_t)out_buffer); +} + +void dtls_reset_cookie_secret() { + tls_random(dtls_secret, sizeof(dtls_secret)); +} + +void tls_init() { + if (dependecies_loaded) + return; + DEBUG_PRINT("Initializing dependencies\n"); + dependecies_loaded = 1; +#ifdef LTM_DESC + ltc_mp = ltm_desc; +#else +#ifdef TFM_DESC + ltc_mp = tfm_desc; +#else +#ifdef GMP_DESC + ltc_mp = gmp_desc; +#endif +#endif +#endif + register_prng(&sprng_desc); + register_hash(&sha256_desc); + register_hash(&sha1_desc); + register_hash(&sha384_desc); + register_hash(&sha512_desc); + register_hash(&md5_desc); + register_cipher(&aes_desc); +#ifdef TLS_FORWARD_SECRECY + init_curves(); +#endif + dtls_reset_cookie_secret(); +} + +#ifdef TLS_FORWARD_SECRECY +int _private_tls_dh_shared_secret(DHKey *private_key, DHKey *public_key, unsigned char *out, unsigned long *outlen) { + void *tmp; + unsigned long x; + int err; + + if ((!private_key) || (!public_key) || (!out) || (!outlen)) + return TLS_GENERIC_ERROR; + + /* compute y^x mod p */ + if ((err = mp_init(&tmp)) != CRYPT_OK) + return err; + + if ((err = mp_exptmod(public_key->y, private_key->x, private_key->p, tmp)) != CRYPT_OK) { + mp_clear(tmp); + return err; + } + + x = (unsigned long)mp_unsigned_bin_size(tmp); + if (*outlen < x) { + err = CRYPT_BUFFER_OVERFLOW; + mp_clear(tmp); + return err; + } + + if ((err = mp_to_unsigned_bin(tmp, out)) != CRYPT_OK) { + mp_clear(tmp); + return err; + } + *outlen = x; + mp_clear(tmp); + return 0; +} + +unsigned char *_private_tls_decrypt_dhe(struct TLSContext *context, const unsigned char *buffer, unsigned int len, unsigned int *size, int clear_key) { + *size = 0; + if ((!len) || (!context) || (!context->dhe)) { + DEBUG_PRINT("No private DHE key set\n"); + return NULL; + } + + unsigned long out_size = len; + void *Yc = NULL; + + if (mp_init(&Yc)) { + DEBUG_PRINT("ERROR CREATING Yc\n"); + return NULL; + } + if (mp_read_unsigned_bin(Yc, (unsigned char *)buffer, len)) { + DEBUG_PRINT("ERROR LOADING DHE Yc\n"); + mp_clear(Yc); + return NULL; + } + + unsigned char *out = (unsigned char *)TLS_MALLOC(len); + DHKey client_key; + memset(&client_key, 0, sizeof(DHKey)); + + client_key.p = context->dhe->p; + client_key.g = context->dhe->g; + client_key.y = Yc; + int err = _private_tls_dh_shared_secret(context->dhe, &client_key, out, &out_size); + // don't delete p and g + client_key.p = NULL; + client_key.g = NULL; + _private_tls_dh_clear_key(&client_key); + // not needing the dhe key anymore + if (clear_key) + _private_tls_dhe_free(context); + if (err) { + DEBUG_PRINT("DHE DECRYPT ERROR %i\n", err); + TLS_FREE(out); + return NULL; + } + DEBUG_PRINT("OUT_SIZE: %lu\n", out_size); + DEBUG_DUMP_HEX_LABEL("DHE", out, out_size); + *size = (unsigned int)out_size; + return out; +} + +unsigned char *_private_tls_decrypt_ecc_dhe(struct TLSContext *context, const unsigned char *buffer, unsigned int len, unsigned int *size, int clear_key) { + *size = 0; + if ((!len) || (!context) || (!context->ecc_dhe)) { + DEBUG_PRINT("No private ECC DHE key set\n"); + return NULL; + } + + const struct ECCCurveParameters *curve; + if (context->curve) + curve = context->curve; + else + curve = default_curve; + + ltc_ecc_set_type *dp = (ltc_ecc_set_type *)&curve->dp; + + ecc_key client_key; + memset(&client_key, 0, sizeof(client_key)); + if (ecc_ansi_x963_import_ex(buffer, len, &client_key, dp)) { + DEBUG_PRINT("Error importing ECC DHE key\n"); + return NULL; + } + unsigned char *out = (unsigned char *)TLS_MALLOC(len); + unsigned long out_size = len; + + int err = ecc_shared_secret(context->ecc_dhe, &client_key, out, &out_size); + ecc_free(&client_key); + if (clear_key) + _private_tls_ecc_dhe_free(context); + if (err) { + DEBUG_PRINT("ECC DHE DECRYPT ERROR %i\n", err); + TLS_FREE(out); + return NULL; + } + DEBUG_PRINT("OUT_SIZE: %lu\n", out_size); + DEBUG_DUMP_HEX_LABEL("ECC DHE", out, out_size); + *size = (unsigned int)out_size; + return out; +} +#endif + +unsigned char *_private_tls_decrypt_rsa(struct TLSContext *context, const unsigned char *buffer, unsigned int len, unsigned int *size) { + *size = 0; + if ((!len) || (!context) || (!context->private_key) || (!context->private_key->der_bytes) || (!context->private_key->der_len)) { + DEBUG_PRINT("No private key set\n"); + return NULL; + } + tls_init(); + rsa_key key; + int err; + err = rsa_import(context->private_key->der_bytes, context->private_key->der_len, &key); + + if (err) { + DEBUG_PRINT("Error importing RSA key (code: %i)\n", err); + return NULL; + } + unsigned char *out = (unsigned char *)TLS_MALLOC(len); + unsigned long out_size = len; + int res = 0; + +#if (CRYPT >= 0x0118) + err = rsa_decrypt_key_ex(buffer, len, out, &out_size, NULL, 0, -1, -1, LTC_PKCS_1_V1_5, &res, &key); +#else + err = rsa_decrypt_key_ex(buffer, len, out, &out_size, NULL, 0, -1, LTC_PKCS_1_V1_5, &res, &key); +#endif + rsa_free(&key); + + if ((err) || (out_size != 48) || (ntohs(*(unsigned short *)out) != context->version)) { + // generate a random secret and continue (ROBOT fix) + // silently ignore and generate a random secret + out_size = 48; + tls_random(out, out_size); + *(unsigned short *)out = htons(context->version); + } + *size = (unsigned int)out_size; + return out; +} + +unsigned char *_private_tls_encrypt_rsa(struct TLSContext *context, const unsigned char *buffer, unsigned int len, unsigned int *size) { + *size = 0; + if ((!len) || (!context) || (!context->certificates) || (!context->certificates_count) || (!context->certificates[0]) || + (!context->certificates[0]->der_bytes) || (!context->certificates[0]->der_len)) { + DEBUG_PRINT("No certificate set\n"); + return NULL; + } + tls_init(); + rsa_key key; + int err; + err = rsa_import(context->certificates[0]->der_bytes, context->certificates[0]->der_len, &key); + + if (err) { + DEBUG_PRINT("Error importing RSA certificate (code: %i)\n", err); + return NULL; + } + unsigned long out_size = TLS_MAX_RSA_KEY; + unsigned char *out = (unsigned char *)TLS_MALLOC(out_size); + int hash_idx = find_hash("sha256"); + int prng_idx = find_prng("sprng"); +#if (CRYPT >= 0x0118) + err = rsa_encrypt_key_ex(buffer, len, out, &out_size, (unsigned char *)"Concept", 7, NULL, prng_idx, hash_idx, -1, LTC_PKCS_1_V1_5, &key); +#else + err = rsa_encrypt_key_ex(buffer, len, out, &out_size, (unsigned char *)"Concept", 7, NULL, prng_idx, hash_idx, LTC_PKCS_1_V1_5, &key); +#endif + rsa_free(&key); + if ((err) || (!out_size)) { + TLS_FREE(out); + return NULL; + } + *size = (unsigned int)out_size; + return out; +} + +#ifdef TLS_LEGACY_SUPPORT +int _private_rsa_verify_hash_md5sha1(const unsigned char *sig, unsigned long siglen, unsigned char *hash, unsigned long hashlen, int *stat, rsa_key *key) { + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + unsigned char *tmpbuf = NULL; + + if ((hash == NULL) || (sig == NULL) || (stat == NULL) || (key == NULL) || (!siglen) || (!hashlen)) + return TLS_GENERIC_ERROR; + + *stat = 0; + + modulus_bitlen = mp_count_bits((key->N)); + + modulus_bytelen = mp_unsigned_bin_size((key->N)); + if (modulus_bytelen != siglen) + return TLS_GENERIC_ERROR; + + tmpbuf = (unsigned char *)TLS_MALLOC(siglen); + if (!tmpbuf) + return TLS_GENERIC_ERROR; + + x = siglen; + if ((err = ltc_mp.rsa_me(sig, siglen, tmpbuf, &x, PK_PUBLIC, key)) != CRYPT_OK) { + TLS_FREE(tmpbuf); + return err; + } + + if (x != siglen) { + TLS_FREE(tmpbuf); + return CRYPT_INVALID_PACKET; + } + unsigned long out_len = siglen; + unsigned char *out = (unsigned char *)TLS_MALLOC(siglen); + if (!out) { + TLS_FREE(tmpbuf); + return TLS_GENERIC_ERROR; + } + + int decoded = 0; + err = pkcs_1_v1_5_decode(tmpbuf, x, LTC_PKCS_1_EMSA, modulus_bitlen, out, &out_len, &decoded); + if (decoded) { + if (out_len == hashlen) { + if (!memcmp(out, hash, hashlen)) + *stat = 1; + } + } + + TLS_FREE(tmpbuf); + TLS_FREE(out); + return err; +} +#endif + +int _private_tls_verify_rsa(struct TLSContext *context, unsigned int hash_type, const unsigned char *buffer, unsigned int len, const unsigned char *message, unsigned int message_len) { + tls_init(); + rsa_key key; + int err; + + if (context->is_server) { + if ((!len) || (!context->client_certificates) || (!context->client_certificates_count) || (!context->client_certificates[0]) || + (!context->client_certificates[0]->der_bytes) || (!context->client_certificates[0]->der_len)) { + DEBUG_PRINT("No client certificate set\n"); + return TLS_GENERIC_ERROR; + } + err = rsa_import(context->client_certificates[0]->der_bytes, context->client_certificates[0]->der_len, &key); + } else { + if ((!len) || (!context->certificates) || (!context->certificates_count) || (!context->certificates[0]) || + (!context->certificates[0]->der_bytes) || (!context->certificates[0]->der_len)) { + DEBUG_PRINT("No server certificate set\n"); + return TLS_GENERIC_ERROR; + } + err = rsa_import(context->certificates[0]->der_bytes, context->certificates[0]->der_len, &key); + } + if (err) { + DEBUG_PRINT("Error importing RSA certificate (code: %i)\n", err); + return TLS_GENERIC_ERROR; + } + int hash_idx = -1; + unsigned char hash[TLS_MAX_HASH_LEN]; + unsigned int hash_len = 0; + hash_state state; + switch (hash_type) { + case md5: + hash_idx = find_hash("md5"); + err = md5_init(&state); + TLS_ERROR(err, break); + err = md5_process(&state, message, message_len); + TLS_ERROR(err, break); + err = md5_done(&state, hash); + TLS_ERROR(err, break); + hash_len = 16; + break; + case sha1: + hash_idx = find_hash("sha1"); + err = sha1_init(&state); + TLS_ERROR(err, break) + err = sha1_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha1_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 20; + break; + case sha256: + hash_idx = find_hash("sha256"); + err = sha256_init(&state); + TLS_ERROR(err, break) + err = sha256_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha256_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 32; + break; + case sha384: + hash_idx = find_hash("sha384"); + err = sha384_init(&state); + TLS_ERROR(err, break) + err = sha384_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha384_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 48; + break; + case sha512: + hash_idx = find_hash("sha512"); + err = sha512_init(&state); + TLS_ERROR(err, break) + err = sha512_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha512_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 64; + break; +#ifdef TLS_LEGACY_SUPPORT + case _md5_sha1: + hash_idx = find_hash("md5"); + err = md5_init(&state); + TLS_ERROR(err, break) + err = md5_process(&state, message, message_len); + TLS_ERROR(err, break) + err = md5_done(&state, hash); + TLS_ERROR(err, break) + hash_idx = find_hash("sha1"); + err = sha1_init(&state); + TLS_ERROR(err, break) + err = sha1_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha1_done(&state, hash + 16); + TLS_ERROR(err, break) + hash_len = 36; + err = sha1_init(&state); + TLS_ERROR(err, break) + err = sha1_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha1_done(&state, hash + 16); + TLS_ERROR(err, break) + hash_len = 36; + break; +#endif + } + if ((hash_idx < 0) || (err)) { + DEBUG_PRINT("Unsupported hash type: %i\n", hash_type); + return TLS_GENERIC_ERROR; + } + int rsa_stat = 0; +#ifdef TLS_LEGACY_SUPPORT + if (hash_type == _md5_sha1) + err = _private_rsa_verify_hash_md5sha1(buffer, len, hash, hash_len, &rsa_stat, &key); + else +#endif +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) + err = rsa_verify_hash_ex(buffer, len, hash, hash_len, LTC_PKCS_1_PSS, hash_idx, hash_len, &rsa_stat, &key); + else +#endif + err = rsa_verify_hash_ex(buffer, len, hash, hash_len, LTC_PKCS_1_V1_5, hash_idx, 0, &rsa_stat, &key); + rsa_free(&key); + if (err) + return 0; + return rsa_stat; +} + +#ifdef TLS_LEGACY_SUPPORT +int _private_rsa_sign_hash_md5sha1(const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen, rsa_key *key) { + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + + if ((in == NULL) || (out == NULL) || (outlen == NULL) || (key == NULL)) + return TLS_GENERIC_ERROR; + + modulus_bitlen = mp_count_bits((key->N)); + + modulus_bytelen = mp_unsigned_bin_size((key->N)); + if (modulus_bytelen > *outlen) { + *outlen = modulus_bytelen; + return CRYPT_BUFFER_OVERFLOW; + } + x = modulus_bytelen; + err = pkcs_1_v1_5_encode(in, inlen, LTC_PKCS_1_EMSA, modulus_bitlen, NULL, 0, out, &x); + if (err != CRYPT_OK) + return err; + + return ltc_mp.rsa_me(out, x, out, outlen, PK_PRIVATE, key); +} +#endif + +int _private_tls_sign_rsa(struct TLSContext *context, unsigned int hash_type, const unsigned char *message, unsigned int message_len, unsigned char *out, unsigned long *outlen) { + if ((!outlen) || (!context) || (!out) || (!outlen) || (!context->private_key) || (!context->private_key->der_bytes) || (!context->private_key->der_len)) { + DEBUG_PRINT("No private key set\n"); + return TLS_GENERIC_ERROR; + } + tls_init(); + rsa_key key; + int err; + err = rsa_import(context->private_key->der_bytes, context->private_key->der_len, &key); + + if (err) { + DEBUG_PRINT("Error importing RSA certificate (code: %i)\n", err); + return TLS_GENERIC_ERROR; + } + int hash_idx = -1; + unsigned char hash[TLS_MAX_HASH_LEN]; + unsigned int hash_len = 0; + hash_state state; + switch (hash_type) { + case md5: + hash_idx = find_hash("md5"); + err = md5_init(&state); + TLS_ERROR(err, break) + err = md5_process(&state, message, message_len); + TLS_ERROR(err, break) + err = md5_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 16; + break; + case sha1: + hash_idx = find_hash("sha1"); + err = sha1_init(&state); + TLS_ERROR(err, break) + err = sha1_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha1_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 20; + break; + case sha256: + hash_idx = find_hash("sha256"); + err = sha256_init(&state); + TLS_ERROR(err, break) + err = sha256_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha256_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 32; + break; + case sha384: + hash_idx = find_hash("sha384"); + err = sha384_init(&state); + TLS_ERROR(err, break) + err = sha384_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha384_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 48; + break; + case sha512: + hash_idx = find_hash("sha512"); + err = sha512_init(&state); + TLS_ERROR(err, break) + err = sha512_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha512_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 64; + break; + case _md5_sha1: + hash_idx = find_hash("md5"); + err = md5_init(&state); + TLS_ERROR(err, break) + err = md5_process(&state, message, message_len); + TLS_ERROR(err, break) + err = md5_done(&state, hash); + TLS_ERROR(err, break) + hash_idx = find_hash("sha1"); + err = sha1_init(&state); + TLS_ERROR(err, break) + err = sha1_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha1_done(&state, hash + 16); + TLS_ERROR(err, break) + hash_len = 36; + err = sha1_init(&state); + TLS_ERROR(err, break) + err = sha1_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha1_done(&state, hash + 16); + TLS_ERROR(err, break) + hash_len = 36; + break; + } +#ifdef TLS_LEGACY_SUPPORT + if (hash_type == _md5_sha1) { + if (err) { + DEBUG_PRINT("Unsupported hash type: %i\n", hash_type); + return TLS_GENERIC_ERROR; + } + err = _private_rsa_sign_hash_md5sha1(hash, hash_len, out, outlen, &key); + } else +#endif + { + if ((hash_idx < 0) || (err)) { + DEBUG_PRINT("Unsupported hash type: %i\n", hash_type); + return TLS_GENERIC_ERROR; + } +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) + err = rsa_sign_hash_ex(hash, hash_len, out, outlen, LTC_PKCS_1_PSS, NULL, find_prng("sprng"), hash_idx, hash_type == sha256 ? 32 : 48, &key); + else +#endif + err = rsa_sign_hash_ex(hash, hash_len, out, outlen, LTC_PKCS_1_V1_5, NULL, find_prng("sprng"), hash_idx, 0, &key); + } + rsa_free(&key); + if (err) + return 0; + + return 1; +} + +#ifdef TLS_ECDSA_SUPPORTED + +#if CRYPT >= 0x0118 + +int _private_tls_is_point(ecc_key *key) { + void *prime, *a, *b, *t1, *t2; + int err; + + void *x = key->pubkey.x; + void *y = key->pubkey.y; + + prime = key->dp.prime; + b = key->dp.B; + a = key->dp.A; + + if ((err = mp_init_multi(&t1, &t2, NULL)) != CRYPT_OK) + return err; + + /* compute y^2 */ + if ((err = mp_sqr(y, t1)) != CRYPT_OK) + goto cleanup; + + /* compute x^3 */ + if ((err = mp_sqr(x, t2)) != CRYPT_OK) + goto cleanup; + if ((err = mp_mod(t2, prime, t2)) != CRYPT_OK) + goto cleanup; + if ((err = mp_mul(x, t2, t2)) != CRYPT_OK) + goto cleanup; + + /* compute y^2 - x^3 */ + if ((err = mp_sub(t1, t2, t1)) != CRYPT_OK) + goto cleanup; + + /* compute y^2 - x^3 - a*x */ + if ((err = mp_submod(prime, a, prime, t2)) != CRYPT_OK) + goto cleanup; + if ((err = mp_mulmod(t2, x, prime, t2)) != CRYPT_OK) + goto cleanup; + if ((err = mp_addmod(t1, t2, prime, t1)) != CRYPT_OK) + goto cleanup; + + /* adjust range (0, prime) */ + while (mp_cmp_d(t1, 0) == LTC_MP_LT) { + if ((err = mp_add(t1, prime, t1)) != CRYPT_OK) + goto cleanup; + } + while (mp_cmp(t1, prime) != LTC_MP_LT) { + if ((err = mp_sub(t1, prime, t1)) != CRYPT_OK) + goto cleanup; + } + + /* compare to b */ + if (mp_cmp(t1, b) != LTC_MP_EQ) { + err = CRYPT_INVALID_PACKET; + } else { + err = CRYPT_OK; + } + +cleanup: + mp_clear_multi(t1, t2, NULL); + return err; +} + +#else + +static int _private_tls_is_point(ecc_key *key) { + void *prime, *b, *t1, *t2; + int err; + + if ((err = mp_init_multi(&prime, &b, &t1, &t2, NULL)) != CRYPT_OK) { + return err; + } + + /* load prime and b */ + if ((err = mp_read_radix(prime, (const char *)TLS_TOMCRYPT_PRIVATE_DP(key)->prime, 16)) != CRYPT_OK) { + goto error; + } + if ((err = mp_read_radix(b, (const char *)TLS_TOMCRYPT_PRIVATE_DP(key)->B, 16)) != CRYPT_OK) { + goto error; + } + + /* compute y^2 */ + if ((err = mp_sqr(key->pubkey.y, t1)) != CRYPT_OK) { + goto error; + } + + /* compute x^3 */ + if ((err = mp_sqr(key->pubkey.x, t2)) != CRYPT_OK) { + goto error; + } + + if ((err = mp_mod(t2, prime, t2)) != CRYPT_OK) { + goto error; + } + + if ((err = mp_mul(key->pubkey.x, t2, t2)) != CRYPT_OK) { + goto error; + } + + /* compute y^2 - x^3 */ + if ((err = mp_sub(t1, t2, t1)) != CRYPT_OK) { + goto error; + } + + /* compute y^2 - x^3 + 3x */ + if ((err = mp_add(t1, key->pubkey.x, t1)) != CRYPT_OK) { + goto error; + } + if ((err = mp_add(t1, key->pubkey.x, t1)) != CRYPT_OK) { + goto error; + } + if ((err = mp_add(t1, key->pubkey.x, t1)) != CRYPT_OK) { + goto error; + } + if ((err = mp_mod(t1, prime, t1)) != CRYPT_OK) { + goto error; + } + while (mp_cmp_d(t1, 0) == LTC_MP_LT) { + if ((err = mp_add(t1, prime, t1)) != CRYPT_OK) { + goto error; + } + } + while (mp_cmp(t1, prime) != LTC_MP_LT) { + if ((err = mp_sub(t1, prime, t1)) != CRYPT_OK) { + goto error; + } + } + + /* compare to b */ + if (mp_cmp(t1, b) != LTC_MP_EQ) { + err = CRYPT_INVALID_PACKET; + } else { + err = CRYPT_OK; + } + +error: + mp_clear_multi(prime, b, t1, t2, NULL); + return err; +} + +#endif + +int _private_tls_ecc_import_key(const unsigned char *private_key, int private_len, const unsigned char *public_key, int public_len, ecc_key *key, const ltc_ecc_set_type *dp) { + int err; + + if ((!key) || (!ltc_mp.name)) + return CRYPT_MEM; + + key->type = PK_PRIVATE; + +#if CRYPT >= 0x0118 + if ((err = ecc_set_curve(dp, key)) != CRYPT_OK) + return err; +#else + if (mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, NULL) != CRYPT_OK) + return CRYPT_MEM; +#endif + + if ((public_len) && (!public_key[0])) { + public_key++; + public_len--; + } + if ((err = mp_read_unsigned_bin(key->pubkey.x, (unsigned char *)public_key + 1, (public_len - 1) >> 1)) != CRYPT_OK) { + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); + return err; + } + + if ((err = mp_read_unsigned_bin(key->pubkey.y, (unsigned char *)public_key + 1 + ((public_len - 1) >> 1), (public_len - 1) >> 1)) != CRYPT_OK) { + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); + return err; + } + + if ((err = mp_read_unsigned_bin(key->k, (unsigned char *)private_key, private_len)) != CRYPT_OK) { + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); + return err; + } + +#if CRYPT < 0x0118 + TLS_TOMCRYPT_PRIVATE_SET_INDEX(key, -1); + TLS_TOMCRYPT_PRIVATE_DP(key) = dp; +#endif + + /* set z */ + if ((err = mp_set(key->pubkey.z, 1)) != CRYPT_OK) { + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); + return err; + } + + /* is it a point on the curve? */ + if ((err = _private_tls_is_point(key)) != CRYPT_OK) { + DEBUG_PRINT("KEY IS NOT ON CURVE\n"); + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); + return err; + } + + /* we're good */ + return CRYPT_OK; +} + +int _private_tls_sign_ecdsa(struct TLSContext *context, unsigned int hash_type, const unsigned char *message, unsigned int message_len, unsigned char *out, unsigned long *outlen) { + if ((!outlen) || (!context) || (!out) || (!outlen) || (!context->ec_private_key) || + (!context->ec_private_key->priv) || (!context->ec_private_key->priv_len) || (!context->ec_private_key->pk) || (!context->ec_private_key->pk_len)) { + DEBUG_PRINT("No private ECDSA key set\n"); + return TLS_GENERIC_ERROR; + } + + const struct ECCCurveParameters *curve = NULL; + + switch (context->ec_private_key->ec_algorithm) { + case 19: + curve = &secp192r1; + break; + case 20: + curve = &secp224k1; + break; + case 21: + curve = &secp224r1; + break; + case 22: + curve = &secp256k1; + break; + case 23: + curve = &secp256r1; + break; + case 24: + curve = &secp384r1; + break; + case 25: + curve = &secp521r1; + break; + default: + DEBUG_PRINT("UNSUPPORTED CURVE\n"); + } + + if (!curve) + return TLS_GENERIC_ERROR; + + tls_init(); + ecc_key key; + int err; + memset(&key, 0, sizeof(key)); + ltc_ecc_set_type *dp = (ltc_ecc_set_type *)&curve->dp; + + // broken ... fix this + err = _private_tls_ecc_import_key(context->ec_private_key->priv, context->ec_private_key->priv_len, context->ec_private_key->pk, context->ec_private_key->pk_len, &key, dp); + if (err) { + DEBUG_PRINT("Error importing ECC certificate (code: %i)\n", (int)err); + return TLS_GENERIC_ERROR; + } + unsigned char hash[TLS_MAX_HASH_LEN]; + unsigned int hash_len = 0; + hash_state state; + switch (hash_type) { + case md5: + err = md5_init(&state); + TLS_ERROR(err, break) + err = md5_process(&state, message, message_len); + TLS_ERROR(err, break) + err = md5_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 16; + break; + case sha1: + err = sha1_init(&state); + TLS_ERROR(err, break) + err = sha1_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha1_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 20; + break; + case sha256: + err = sha256_init(&state); + TLS_ERROR(err, break) + err = sha256_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha256_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 32; + break; + case sha384: + err = sha384_init(&state); + TLS_ERROR(err, break) + err = sha384_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha384_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 48; + break; + case sha512: + err = sha512_init(&state); + TLS_ERROR(err, break) + err = sha512_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha512_done(&state, hash); + TLS_ERROR(err, break) + hash_len = 64; + break; + case _md5_sha1: + err = md5_init(&state); + TLS_ERROR(err, break) + err = md5_process(&state, message, message_len); + TLS_ERROR(err, break) + err = md5_done(&state, hash); + TLS_ERROR(err, break) + err = sha1_init(&state); + TLS_ERROR(err, break) + err = sha1_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha1_done(&state, hash + 16); + TLS_ERROR(err, break) + hash_len = 36; + err = sha1_init(&state); + TLS_ERROR(err, break) + err = sha1_process(&state, message, message_len); + TLS_ERROR(err, break) + err = sha1_done(&state, hash + 16); + TLS_ERROR(err, break) + hash_len = 36; + break; + } + + if (err) { + DEBUG_PRINT("Unsupported hash type: %i\n", hash_type); + return TLS_GENERIC_ERROR; + } + + // "Let z be the Ln leftmost bits of e, where Ln is the bit length of the group order n." + if (hash_len > (unsigned int)curve->size) + hash_len = (unsigned int)curve->size; + + err = ecc_sign_hash(hash, hash_len, out, outlen, NULL, find_prng("sprng"), &key); + DEBUG_DUMP_HEX_LABEL("ECC SIGNATURE", out, *outlen); + ecc_free(&key); + if (err) + return 0; + + return 1; +} + +#if defined(TLS_CLIENT_ECDSA) || defined(WITH_TLS_13) +int _private_tls_ecc_import_pk(const unsigned char *public_key, int public_len, ecc_key *key, const ltc_ecc_set_type *dp) { + int err; + + if ((!key) || (!ltc_mp.name)) + return CRYPT_MEM; + + key->type = PK_PUBLIC; + +#if CRYPT >= 0x0118 + if ((err = ecc_set_curve(dp, key)) != CRYPT_OK) + return err; +#else + if (mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, NULL) != CRYPT_OK) + return CRYPT_MEM; +#endif + + if ((public_len) && (!public_key[0])) { + public_key++; + public_len--; + } + if ((err = mp_read_unsigned_bin(key->pubkey.x, (unsigned char *)public_key + 1, (public_len - 1) >> 1)) != CRYPT_OK) { + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); + return err; + } + + if ((err = mp_read_unsigned_bin(key->pubkey.y, (unsigned char *)public_key + 1 + ((public_len - 1) >> 1), (public_len - 1) >> 1)) != CRYPT_OK) { + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); + return err; + } + +#if CRYPT < 0x0118 + TLS_TOMCRYPT_PRIVATE_SET_INDEX(key, -1); + TLS_TOMCRYPT_PRIVATE_DP(key) = dp; +#endif + + /* set z */ + if ((err = mp_set(key->pubkey.z, 1)) != CRYPT_OK) { + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); + return err; + } + + /* is it a point on the curve? */ + if ((err = _private_tls_is_point(key)) != CRYPT_OK) { + DEBUG_PRINT("KEY IS NOT ON CURVE\n"); + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); + return err; + } + + /* we're good */ + return CRYPT_OK; +} + +int _private_tls_verify_ecdsa(struct TLSContext *context, unsigned int hash_type, const unsigned char *buffer, unsigned int len, const unsigned char *message, unsigned int message_len, const struct ECCCurveParameters *curve_hint) { + tls_init(); + ecc_key key; + int err; + + if (!curve_hint) + curve_hint = context->curve; + + if (context->is_server) { + if ((!len) || (!context->client_certificates) || (!context->client_certificates_count) || (!context->client_certificates[0]) || + (!context->client_certificates[0]->pk) || (!context->client_certificates[0]->pk_len) || (!curve_hint)) { + DEBUG_PRINT("No client certificate set\n"); + return TLS_GENERIC_ERROR; + } + err = _private_tls_ecc_import_pk(context->client_certificates[0]->pk, context->client_certificates[0]->pk_len, &key, (ltc_ecc_set_type *)&curve_hint->dp); + } else { + if ((!len) || (!context->certificates) || (!context->certificates_count) || (!context->certificates[0]) || + (!context->certificates[0]->pk) || (!context->certificates[0]->pk_len) || (!curve_hint)) { + DEBUG_PRINT("No server certificate set\n"); + return TLS_GENERIC_ERROR; + } + err = _private_tls_ecc_import_pk(context->certificates[0]->pk, context->certificates[0]->pk_len, &key, (ltc_ecc_set_type *)&curve_hint->dp); + } + if (err) { + DEBUG_PRINT("Error importing ECC certificate (code: %i)", err); + return TLS_GENERIC_ERROR; + } + int hash_idx = -1; + unsigned char hash[TLS_MAX_HASH_LEN]; + unsigned int hash_len = 0; + hash_state state; + switch (hash_type) { + case md5: + hash_idx = find_hash("md5"); + err = md5_init(&state); + if (!err) { + err = md5_process(&state, message, message_len); + if (!err) + err = md5_done(&state, hash); + } + hash_len = 16; + break; + case sha1: + hash_idx = find_hash("sha1"); + err = sha1_init(&state); + if (!err) { + err = sha1_process(&state, message, message_len); + if (!err) + err = sha1_done(&state, hash); + } + hash_len = 20; + break; + case sha256: + hash_idx = find_hash("sha256"); + err = sha256_init(&state); + if (!err) { + err = sha256_process(&state, message, message_len); + if (!err) + err = sha256_done(&state, hash); + } + hash_len = 32; + break; + case sha384: + hash_idx = find_hash("sha384"); + err = sha384_init(&state); + if (!err) { + err = sha384_process(&state, message, message_len); + if (!err) + err = sha384_done(&state, hash); + } + hash_len = 48; + break; + case sha512: + hash_idx = find_hash("sha512"); + err = sha512_init(&state); + if (!err) { + err = sha512_process(&state, message, message_len); + if (!err) + err = sha512_done(&state, hash); + } + hash_len = 64; + break; +#ifdef TLS_LEGACY_SUPPORT + case _md5_sha1: + hash_idx = find_hash("md5"); + err = md5_init(&state); + if (!err) { + err = md5_process(&state, message, message_len); + if (!err) + err = md5_done(&state, hash); + } + hash_idx = find_hash("sha1"); + err = sha1_init(&state); + if (!err) { + err = sha1_process(&state, message, message_len); + if (!err) + err = sha1_done(&state, hash + 16); + } + hash_len = 36; + err = sha1_init(&state); + if (!err) { + err = sha1_process(&state, message, message_len); + if (!err) + err = sha1_done(&state, hash + 16); + } + hash_len = 36; + break; +#endif + } + if ((hash_idx < 0) || (err)) { + DEBUG_PRINT("Unsupported hash type: %i\n", hash_type); + return TLS_GENERIC_ERROR; + } + int ecc_stat = 0; + err = ecc_verify_hash(buffer, len, hash, hash_len, &ecc_stat, &key); + ecc_free(&key); + if (err) + return 0; + return ecc_stat; +} +#endif + +#endif + +unsigned int _private_tls_random_int(int limit) { + unsigned int res = 0; + tls_random((unsigned char *)&res, sizeof(int)); + if (limit) + res %= limit; + return res; +} + +void _private_tls_sleep(unsigned int microseconds) { +#ifdef _WIN32 + Sleep(microseconds/1000); +#else + struct timespec ts; + + ts.tv_sec = (unsigned int) (microseconds / 1000000); + ts.tv_nsec = (unsigned int) (microseconds % 1000000) * 1000ul; + + nanosleep(&ts, NULL); +#endif +} + +void _private_random_sleep(struct TLSContext *context, int max_microseconds) { + if (context) + context->sleep_until = (unsigned int)time(NULL) + _private_tls_random_int(max_microseconds/1000000 * TLS_MAX_ERROR_IDLE_S); + else + _private_tls_sleep(_private_tls_random_int(max_microseconds)); +} + +void _private_tls_prf_helper(int hash_idx, unsigned long dlen, unsigned char *output, unsigned int outlen, const unsigned char *secret, const unsigned int secret_len, + const unsigned char *label, unsigned int label_len, unsigned char *seed, unsigned int seed_len, + unsigned char *seed_b, unsigned int seed_b_len) { + unsigned char digest_out0[TLS_MAX_HASH_LEN]; + unsigned char digest_out1[TLS_MAX_HASH_LEN]; + unsigned int i; + hmac_state hmac; + + hmac_init(&hmac, hash_idx, secret, secret_len); + hmac_process(&hmac, label, label_len); + + hmac_process(&hmac, seed, seed_len); + if ((seed_b) && (seed_b_len)) + hmac_process(&hmac, seed_b, seed_b_len); + hmac_done(&hmac, digest_out0, &dlen); + int idx = 0; + while (outlen) { + hmac_init(&hmac, hash_idx, secret, secret_len); + hmac_process(&hmac, digest_out0, dlen); + hmac_process(&hmac, label, label_len); + hmac_process(&hmac, seed, seed_len); + if ((seed_b) && (seed_b_len)) + hmac_process(&hmac, seed_b, seed_b_len); + hmac_done(&hmac, digest_out1, &dlen); + + unsigned int copylen = outlen; + if (copylen > dlen) + copylen = dlen; + + for (i = 0; i < copylen; i++) { + output[idx++] ^= digest_out1[i]; + outlen--; + } + + if (!outlen) + break; + + hmac_init(&hmac, hash_idx, secret, secret_len); + hmac_process(&hmac, digest_out0, dlen); + hmac_done(&hmac, digest_out0, &dlen); + } +} + +#ifdef WITH_TLS_13 +int _private_tls_hkdf_label(const char *label, unsigned char label_len, const unsigned char *data, unsigned char data_len, unsigned char *hkdflabel, unsigned short length, const char *prefix) { + *(unsigned short *)hkdflabel = htons(length); + int prefix_len; + if (prefix) { + prefix_len = (int)strlen(prefix); + memcpy(&hkdflabel[3], prefix, prefix_len); + } else { + memcpy(&hkdflabel[3], "tls13 ", 6); + prefix_len = 6; + } + hkdflabel[2] = (unsigned char)prefix_len + label_len; + memcpy(&hkdflabel[3 + prefix_len], label, label_len); + hkdflabel[3 + prefix_len + label_len] = (unsigned char)data_len; + if (data_len) + memcpy(&hkdflabel[4 + prefix_len + label_len], data, data_len); + return 4 + prefix_len + label_len + data_len; +} + +int _private_tls_hkdf_extract(unsigned int mac_length, unsigned char *output, unsigned int outlen, const unsigned char *salt, unsigned int salt_len, const unsigned char *ikm, unsigned char ikm_len) { + unsigned long dlen = outlen; + static unsigned char dummy_label[1] = { 0 }; + if ((!salt) || (salt_len == 0)) { + salt_len = 1; + salt = dummy_label; + } + int hash_idx; + if (mac_length == TLS_SHA384_MAC_SIZE) { + hash_idx = find_hash("sha384"); + dlen = mac_length; + } else + hash_idx = find_hash("sha256"); + + hmac_state hmac; + hmac_init(&hmac, hash_idx, salt, salt_len); + hmac_process(&hmac, ikm, ikm_len); + hmac_done(&hmac, output, &dlen); + DEBUG_DUMP_HEX_LABEL("EXTRACT", output, dlen); + return dlen; +} + +void _private_tls_hkdf_expand(unsigned int mac_length, unsigned char *output, unsigned int outlen, const unsigned char *secret, unsigned int secret_len, const unsigned char *info, unsigned char info_len) { + unsigned char digest_out[TLS_MAX_HASH_LEN]; + unsigned long dlen = 32; + int hash_idx; + if (mac_length == TLS_SHA384_MAC_SIZE) { + hash_idx = find_hash("sha384"); + dlen = mac_length; + } else + hash_idx = find_hash("sha256"); + unsigned int i; + unsigned int idx = 0; + hmac_state hmac; + unsigned char i2 = 0; + while (outlen) { + hmac_init(&hmac, hash_idx, secret, secret_len); + if (i2) + hmac_process(&hmac, digest_out, dlen); + if ((info) && (info_len)) + hmac_process(&hmac, info, info_len); + i2++; + hmac_process(&hmac, &i2, 1); + hmac_done(&hmac, digest_out, &dlen); + + unsigned int copylen = outlen; + if (copylen > dlen) + copylen = (unsigned int)dlen; + + for (i = 0; i < copylen; i++) { + output[idx++] = digest_out[i]; + outlen--; + } + + if (!outlen) + break; + } +} + +void _private_tls_hkdf_expand_label(unsigned int mac_length, unsigned char *output, unsigned int outlen, const unsigned char *secret, unsigned int secret_len, const char *label, unsigned char label_len, const unsigned char *data, unsigned char data_len) { + unsigned char hkdf_label[512]; + int len = _private_tls_hkdf_label(label, label_len, data, data_len, hkdf_label, outlen, NULL); + DEBUG_DUMP_HEX_LABEL("INFO", hkdf_label, len); + _private_tls_hkdf_expand(mac_length, output, outlen, secret, secret_len, hkdf_label, len); +} +#endif + +void _private_tls_prf(struct TLSContext *context, + unsigned char *output, unsigned int outlen, const unsigned char *secret, const unsigned int secret_len, + const unsigned char *label, unsigned int label_len, unsigned char *seed, unsigned int seed_len, + unsigned char *seed_b, unsigned int seed_b_len) { + if ((!secret) || (!secret_len)) { + DEBUG_PRINT("NULL SECRET\n"); + return; + } + if ((context->version != TLS_V12) && (context->version != DTLS_V12)) { + int md5_hash_idx = find_hash("md5"); + int sha1_hash_idx = find_hash("sha1"); + int half_secret = (secret_len + 1) / 2; + + memset(output, 0, outlen); + _private_tls_prf_helper(md5_hash_idx, 16, output, outlen, secret, half_secret, label, label_len, seed, seed_len, seed_b, seed_b_len); + _private_tls_prf_helper(sha1_hash_idx, 20, output, outlen, secret + (secret_len - half_secret), secret_len - half_secret, label, label_len, seed, seed_len, seed_b, seed_b_len); + } else { + // sha256_hmac + unsigned char digest_out0[TLS_MAX_HASH_LEN]; + unsigned char digest_out1[TLS_MAX_HASH_LEN]; + unsigned long dlen = 32; + int hash_idx; + unsigned int mac_length = _private_tls_mac_length(context); + if (mac_length == TLS_SHA384_MAC_SIZE) { + hash_idx = find_hash("sha384"); + dlen = mac_length; + } else + hash_idx = find_hash("sha256"); + unsigned int i; + hmac_state hmac; + + hmac_init(&hmac, hash_idx, secret, secret_len); + hmac_process(&hmac, label, label_len); + + hmac_process(&hmac, seed, seed_len); + if ((seed_b) && (seed_b_len)) + hmac_process(&hmac, seed_b, seed_b_len); + hmac_done(&hmac, digest_out0, &dlen); + int idx = 0; + while (outlen) { + hmac_init(&hmac, hash_idx, secret, secret_len); + hmac_process(&hmac, digest_out0, dlen); + hmac_process(&hmac, label, label_len); + hmac_process(&hmac, seed, seed_len); + if ((seed_b) && (seed_b_len)) + hmac_process(&hmac, seed_b, seed_b_len); + hmac_done(&hmac, digest_out1, &dlen); + + unsigned int copylen = outlen; + if (copylen > dlen) + copylen = (unsigned int)dlen; + + for (i = 0; i < copylen; i++) { + output[idx++] = digest_out1[i]; + outlen--; + } + + if (!outlen) + break; + + hmac_init(&hmac, hash_idx, secret, secret_len); + hmac_process(&hmac, digest_out0, dlen); + hmac_done(&hmac, digest_out0, &dlen); + } + } +} + +int _private_tls_key_length(struct TLSContext *context) { + switch (context->cipher) { + case TLS_RSA_WITH_AES_128_CBC_SHA: + case TLS_RSA_WITH_AES_128_CBC_SHA256: + case TLS_RSA_WITH_AES_128_GCM_SHA256: + case TLS_DHE_RSA_WITH_AES_128_CBC_SHA: + case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: + case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: + case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: + case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case TLS_AES_128_GCM_SHA256: + return 16; + case TLS_RSA_WITH_AES_256_CBC_SHA: + case TLS_RSA_WITH_AES_256_CBC_SHA256: + case TLS_RSA_WITH_AES_256_GCM_SHA384: + case TLS_DHE_RSA_WITH_AES_256_CBC_SHA: + case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: + case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: + case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: + case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384: + case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: + case TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: + case TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case TLS_AES_256_GCM_SHA384: + case TLS_CHACHA20_POLY1305_SHA256: + return 32; + } + return 0; +} + +int _private_tls_is_aead(struct TLSContext *context) { + switch (context->cipher) { + case TLS_RSA_WITH_AES_128_GCM_SHA256: + case TLS_RSA_WITH_AES_256_GCM_SHA384: + case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: + case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: + case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: + case TLS_AES_128_GCM_SHA256: + case TLS_AES_256_GCM_SHA384: + return 1; + case TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: + case TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case TLS_CHACHA20_POLY1305_SHA256: + return 2; + } + return 0; +} + + + +unsigned int _private_tls_mac_length(struct TLSContext *context) { + switch (context->cipher) { + case TLS_RSA_WITH_AES_128_CBC_SHA: + case TLS_RSA_WITH_AES_256_CBC_SHA: + case TLS_DHE_RSA_WITH_AES_128_CBC_SHA: + case TLS_DHE_RSA_WITH_AES_256_CBC_SHA: + case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: + case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: + return TLS_SHA1_MAC_SIZE; + case TLS_RSA_WITH_AES_128_CBC_SHA256: + case TLS_RSA_WITH_AES_256_CBC_SHA256: + case TLS_RSA_WITH_AES_128_GCM_SHA256: + case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: + case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: + case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: + case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: + case TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256: +#ifdef WITH_TLS_13 + case TLS_AES_128_GCM_SHA256: + case TLS_CHACHA20_POLY1305_SHA256: + case TLS_AES_128_CCM_SHA256: + case TLS_AES_128_CCM_8_SHA256: +#endif + return TLS_SHA256_MAC_SIZE; + case TLS_RSA_WITH_AES_256_GCM_SHA384: + case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: + case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384: + case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: +#ifdef WITH_TLS_13 + case TLS_AES_256_GCM_SHA384: +#endif + return TLS_SHA384_MAC_SIZE; + } + return 0; +} + +#ifdef WITH_TLS_13 +int _private_tls13_key(struct TLSContext *context, int handshake) { + tls_init(); + + int key_length = _private_tls_key_length(context); + unsigned int mac_length = _private_tls_mac_length(context); + + if ((!context->premaster_key) || (!context->premaster_key_len)) + return 0; + + if ((!key_length) || (!mac_length)) { + DEBUG_PRINT("KEY EXPANSION FAILED, KEY LENGTH: %i, MAC LENGTH: %i\n", key_length, mac_length); + return 0; + } + + unsigned char *clientkey = NULL; + unsigned char *serverkey = NULL; + unsigned char *clientiv = NULL; + unsigned char *serveriv = NULL; + int is_aead = _private_tls_is_aead(context); + + unsigned char local_keybuffer[TLS_V13_MAX_KEY_SIZE]; + unsigned char local_ivbuffer[TLS_V13_MAX_IV_SIZE]; + unsigned char remote_keybuffer[TLS_V13_MAX_KEY_SIZE]; + unsigned char remote_ivbuffer[TLS_V13_MAX_IV_SIZE]; + + unsigned char prk[TLS_MAX_HASH_SIZE]; + unsigned char hash[TLS_MAX_HASH_SIZE]; + static unsigned char earlysecret[TLS_MAX_HASH_SIZE]; + + const char *server_key = "s ap traffic"; + const char *client_key = "c ap traffic"; + if (handshake) { + server_key = "s hs traffic"; + client_key = "c hs traffic"; + } + + unsigned char salt[TLS_MAX_HASH_SIZE]; + + hash_state md; + if (mac_length == TLS_SHA384_MAC_SIZE) { + sha384_init(&md); + sha384_done(&md, hash); + } else { + sha256_init(&md); + sha256_done(&md, hash); + } + // extract secret "early" + if ((context->master_key) && (context->master_key_len) && (!handshake)) { + DEBUG_DUMP_HEX_LABEL("USING PREVIOUS SECRET", context->master_key, context->master_key_len); + _private_tls_hkdf_expand_label(mac_length, salt, mac_length, context->master_key, context->master_key_len, "derived", 7, hash, mac_length); + DEBUG_DUMP_HEX_LABEL("salt", salt, mac_length); + _private_tls_hkdf_extract(mac_length, prk, mac_length, salt, mac_length, earlysecret, mac_length); + } else { + _private_tls_hkdf_extract(mac_length, prk, mac_length, NULL, 0, earlysecret, mac_length); + // derive secret for handshake "tls13 derived": + DEBUG_DUMP_HEX_LABEL("null hash", hash, mac_length); + _private_tls_hkdf_expand_label(mac_length, salt, mac_length, prk, mac_length, "derived", 7, hash, mac_length); + // extract secret "handshake": + DEBUG_DUMP_HEX_LABEL("salt", salt, mac_length); + _private_tls_hkdf_extract(mac_length, prk, mac_length, salt, mac_length, context->premaster_key, context->premaster_key_len); + } + + if (!is_aead) { + DEBUG_PRINT("KEY EXPANSION FAILED, NON AEAD CIPHER\n"); + return 0; + } + + unsigned char secret[TLS_MAX_MAC_SIZE]; + unsigned char hs_secret[TLS_MAX_HASH_SIZE]; + + int hash_size; + if (handshake) + hash_size = _private_tls_get_hash(context, hash); + else + hash_size = _private_tls_done_hash(context, hash); + DEBUG_DUMP_HEX_LABEL("messages hash", hash, hash_size); + + if (context->is_server) { + _private_tls_hkdf_expand_label(mac_length, hs_secret, mac_length, prk, mac_length, server_key, 12, context->server_finished_hash ? context->server_finished_hash : hash, hash_size); + DEBUG_DUMP_HEX_LABEL(server_key, hs_secret, mac_length); + serverkey = local_keybuffer; + serveriv = local_ivbuffer; + clientkey = remote_keybuffer; + clientiv = remote_ivbuffer; + } else { + _private_tls_hkdf_expand_label(mac_length, hs_secret, mac_length, prk, mac_length, client_key, 12, context->server_finished_hash ? context->server_finished_hash : hash, hash_size); + DEBUG_DUMP_HEX_LABEL(client_key, hs_secret, mac_length); + serverkey = remote_keybuffer; + serveriv = remote_ivbuffer; + clientkey = local_keybuffer; + clientiv = local_ivbuffer; + } + + int iv_length = TLS_13_AES_GCM_IV_LENGTH; +#ifdef TLS_WITH_CHACHA20_POLY1305 + if (is_aead == 2) + iv_length = TLS_CHACHA20_IV_LENGTH; +#endif + + _private_tls_hkdf_expand_label(mac_length, local_keybuffer, key_length, hs_secret, mac_length, "key", 3, NULL, 0); + _private_tls_hkdf_expand_label(mac_length, local_ivbuffer, iv_length, hs_secret, mac_length, "iv", 2, NULL, 0); + if (context->is_server) + _private_tls_hkdf_expand_label(mac_length, secret, mac_length, prk, mac_length, client_key, 12, context->server_finished_hash ? context->server_finished_hash : hash, hash_size); + else + _private_tls_hkdf_expand_label(mac_length, secret, mac_length, prk, mac_length, server_key, 12, context->server_finished_hash ? context->server_finished_hash : hash, hash_size); + + _private_tls_hkdf_expand_label(mac_length, remote_keybuffer, key_length, secret, mac_length, "key", 3, NULL, 0); + _private_tls_hkdf_expand_label(mac_length, remote_ivbuffer, iv_length, secret, mac_length, "iv", 2, NULL, 0); + + DEBUG_DUMP_HEX_LABEL("CLIENT KEY", clientkey, key_length) + DEBUG_DUMP_HEX_LABEL("CLIENT IV", clientiv, iv_length) + DEBUG_DUMP_HEX_LABEL("SERVER KEY", serverkey, key_length) + DEBUG_DUMP_HEX_LABEL("SERVER IV", serveriv, iv_length) + + TLS_FREE(context->finished_key); + TLS_FREE(context->remote_finished_key); + if (handshake) { + context->finished_key = (unsigned char *)TLS_MALLOC(mac_length); + context->remote_finished_key = (unsigned char *)TLS_MALLOC(mac_length); + + if (context->finished_key) { + _private_tls_hkdf_expand_label(mac_length, context->finished_key, mac_length, hs_secret, mac_length, "finished", 8, NULL, 0); + DEBUG_DUMP_HEX_LABEL("FINISHED", context->finished_key, mac_length) + } + + if (context->remote_finished_key) { + _private_tls_hkdf_expand_label(mac_length, context->remote_finished_key, mac_length, secret, mac_length, "finished", 8, NULL, 0); + DEBUG_DUMP_HEX_LABEL("REMOTE FINISHED", context->remote_finished_key, mac_length) + } + } else { + context->finished_key = NULL; + context->remote_finished_key = NULL; + TLS_FREE(context->server_finished_hash); + context->server_finished_hash = NULL; + } + + if (context->is_server) { +#ifdef TLS_WITH_CHACHA20_POLY1305 + if (is_aead == 2) { + memcpy(context->crypto.ctx_remote_mac.remote_nonce, clientiv, iv_length); + memcpy(context->crypto.ctx_local_mac.local_nonce, serveriv, iv_length); + } else +#endif + if (is_aead) { + memcpy(context->crypto.ctx_remote_mac.remote_iv, clientiv, iv_length); + memcpy(context->crypto.ctx_local_mac.local_iv, serveriv, iv_length); + } + if (_private_tls_crypto_create(context, key_length, serverkey, serveriv, clientkey, clientiv)) + return 0; + } else { +#ifdef TLS_WITH_CHACHA20_POLY1305 + if (is_aead == 2) { + memcpy(context->crypto.ctx_local_mac.local_nonce, clientiv, iv_length); + memcpy(context->crypto.ctx_remote_mac.remote_nonce, serveriv, iv_length); + } else +#endif + if (is_aead) { + memcpy(context->crypto.ctx_local_mac.local_iv, clientiv, iv_length); + memcpy(context->crypto.ctx_remote_mac.remote_iv, serveriv, iv_length); + } + if (_private_tls_crypto_create(context, key_length, clientkey, clientiv, serverkey, serveriv)) + return 0; + } + context->crypto.created = 1 + is_aead; + if (context->exportable) { + TLS_FREE(context->exportable_keys); + context->exportable_keys = (unsigned char *)TLS_MALLOC(key_length * 2); + if (context->exportable_keys) { + if (context->is_server) { + memcpy(context->exportable_keys, serverkey, key_length); + memcpy(context->exportable_keys + key_length, clientkey, key_length); + } else { + memcpy(context->exportable_keys, clientkey, key_length); + memcpy(context->exportable_keys + key_length, serverkey, key_length); + } + context->exportable_size = key_length * 2; + } + } + TLS_FREE(context->master_key); + context->master_key = (unsigned char *)TLS_MALLOC(mac_length); + if (context->master_key) { + memcpy(context->master_key, prk, mac_length); + context->master_key_len = mac_length; + } + context->local_sequence_number = 0; + context->remote_sequence_number = 0; + + // extract client_mac_key(mac_key_length) + // extract server_mac_key(mac_key_length) + // extract client_key(enc_key_length) + // extract server_key(enc_key_length) + // extract client_iv(fixed_iv_lengh) + // extract server_iv(fixed_iv_length) + return 1; +} +#endif + +int _private_tls_expand_key(struct TLSContext *context) { + unsigned char key[TLS_MAX_KEY_EXPANSION_SIZE]; +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) + return 0; +#endif + + if ((!context->master_key) || (!context->master_key_len)) + return 0; + + int key_length = _private_tls_key_length(context); + int mac_length = _private_tls_mac_length(context); + + if ((!key_length) || (!mac_length)) { + DEBUG_PRINT("KEY EXPANSION FAILED, KEY LENGTH: %i, MAC LENGTH: %i\n", key_length, mac_length); + return 0; + } + unsigned char *clientkey = NULL; + unsigned char *serverkey = NULL; + unsigned char *clientiv = NULL; + unsigned char *serveriv = NULL; + int iv_length = TLS_AES_IV_LENGTH; + int is_aead = _private_tls_is_aead(context); + if (context->is_server) + _private_tls_prf(context, key, sizeof(key), context->master_key, context->master_key_len, (unsigned char *)"key expansion", 13, context->local_random, TLS_SERVER_RANDOM_SIZE, context->remote_random, TLS_CLIENT_RANDOM_SIZE); + else + _private_tls_prf(context, key, sizeof(key), context->master_key, context->master_key_len, (unsigned char *)"key expansion", 13, context->remote_random, TLS_SERVER_RANDOM_SIZE, context->local_random, TLS_CLIENT_RANDOM_SIZE); + + DEBUG_DUMP_HEX_LABEL("LOCAL RANDOM ", context->local_random, TLS_SERVER_RANDOM_SIZE); + DEBUG_DUMP_HEX_LABEL("REMOTE RANDOM", context->remote_random, TLS_CLIENT_RANDOM_SIZE); + DEBUG_PRINT("\n=========== EXPANSION ===========\n"); + DEBUG_DUMP_HEX(key, TLS_MAX_KEY_EXPANSION_SIZE); + DEBUG_PRINT("\n"); + + int pos = 0; +#ifdef TLS_WITH_CHACHA20_POLY1305 + if (is_aead == 2) { + iv_length = TLS_CHACHA20_IV_LENGTH; + } else +#endif + if (is_aead) { + iv_length = TLS_AES_GCM_IV_LENGTH; + } else { + if (context->is_server) { + memcpy(context->crypto.ctx_remote_mac.remote_mac, &key[pos], mac_length); + pos += mac_length; + memcpy(context->crypto.ctx_local_mac.local_mac, &key[pos], mac_length); + pos += mac_length; + } else { + memcpy(context->crypto.ctx_local_mac.local_mac, &key[pos], mac_length); + pos += mac_length; + memcpy(context->crypto.ctx_remote_mac.remote_mac, &key[pos], mac_length); + pos += mac_length; + } + } + + clientkey = &key[pos]; + pos += key_length; + serverkey = &key[pos]; + pos += key_length; + clientiv = &key[pos]; + pos += iv_length; + serveriv = &key[pos]; + pos += iv_length; + DEBUG_PRINT("EXPANSION %i/%i\n", (int)pos, (int)TLS_MAX_KEY_EXPANSION_SIZE); + DEBUG_DUMP_HEX_LABEL("CLIENT KEY", clientkey, key_length) + DEBUG_DUMP_HEX_LABEL("CLIENT IV", clientiv, iv_length) + DEBUG_DUMP_HEX_LABEL("CLIENT MAC KEY", context->is_server ? context->crypto.ctx_remote_mac.remote_mac : context->crypto.ctx_local_mac.local_mac, mac_length) + DEBUG_DUMP_HEX_LABEL("SERVER KEY", serverkey, key_length) + DEBUG_DUMP_HEX_LABEL("SERVER IV", serveriv, iv_length) + DEBUG_DUMP_HEX_LABEL("SERVER MAC KEY", context->is_server ? context->crypto.ctx_local_mac.local_mac : context->crypto.ctx_remote_mac.remote_mac, mac_length) + + if (context->is_server) { +#ifdef TLS_WITH_CHACHA20_POLY1305 + if (is_aead == 2) { + memcpy(context->crypto.ctx_remote_mac.remote_nonce, clientiv, iv_length); + memcpy(context->crypto.ctx_local_mac.local_nonce, serveriv, iv_length); + } else +#endif + if (is_aead) { + memcpy(context->crypto.ctx_remote_mac.remote_aead_iv, clientiv, iv_length); + memcpy(context->crypto.ctx_local_mac.local_aead_iv, serveriv, iv_length); + } + if (_private_tls_crypto_create(context, key_length, serverkey, serveriv, clientkey, clientiv)) + return 0; + } else { +#ifdef TLS_WITH_CHACHA20_POLY1305 + if (is_aead == 2) { + memcpy(context->crypto.ctx_local_mac.local_nonce, clientiv, iv_length); + memcpy(context->crypto.ctx_remote_mac.remote_nonce, serveriv, iv_length); + } else +#endif + if (is_aead) { + memcpy(context->crypto.ctx_local_mac.local_aead_iv, clientiv, iv_length); + memcpy(context->crypto.ctx_remote_mac.remote_aead_iv, serveriv, iv_length); + } + if (_private_tls_crypto_create(context, key_length, clientkey, clientiv, serverkey, serveriv)) + return 0; + } + + if (context->exportable) { + TLS_FREE(context->exportable_keys); + context->exportable_keys = (unsigned char *)TLS_MALLOC(key_length * 2); + if (context->exportable_keys) { + if (context->is_server) { + memcpy(context->exportable_keys, serverkey, key_length); + memcpy(context->exportable_keys + key_length, clientkey, key_length); + } else { + memcpy(context->exportable_keys, clientkey, key_length); + memcpy(context->exportable_keys + key_length, serverkey, key_length); + } + context->exportable_size = key_length * 2; + } + } + + // extract client_mac_key(mac_key_length) + // extract server_mac_key(mac_key_length) + // extract client_key(enc_key_length) + // extract server_key(enc_key_length) + // extract client_iv(fixed_iv_lengh) + // extract server_iv(fixed_iv_length) + return 1; +} + +int _private_tls_compute_key(struct TLSContext *context, unsigned int key_len) { +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) + return 0; +#endif + if ((!context->premaster_key) || (!context->premaster_key_len) || (key_len < 48)) { + DEBUG_PRINT("CANNOT COMPUTE MASTER SECRET\n"); + return 0; + } + unsigned char master_secret_label[] = "master secret"; +#ifdef TLS_CHECK_PREMASTER_KEY + if (!tls_cipher_is_ephemeral(context)) { + unsigned short version = ntohs(*(unsigned short *)context->premaster_key); + // this check is not true for DHE/ECDHE ciphers + if (context->version > version) { + DEBUG_PRINT("Mismatch protocol version 0x(%x)\n", version); + return 0; + } + } +#endif + TLS_FREE(context->master_key); + context->master_key_len = 0; + context->master_key = NULL; + if ((context->version == TLS_V13) || (context->version == TLS_V12) || (context->version == TLS_V11) || (context->version == TLS_V10) || (context->version == DTLS_V13) || (context->version == DTLS_V12) || (context->version == DTLS_V10)) { + context->master_key = (unsigned char *)TLS_MALLOC(key_len); + if (!context->master_key) + return 0; + context->master_key_len = key_len; + if (context->is_server) { +#ifdef TLS_DTLS_EXTENDED_MASTER_SECRET + if ((context->dtls) && (context->dtls_data) && (context->dtls_data->extended_master_secret)) { + // master_secret = PRF(pre_master_secret, "extended master secret", session_hash); + unsigned char handshake_hash[TLS_MAX_SHA_SIZE]; + int hash_size = _private_tls_get_hash(context, handshake_hash); + DEBUG_DUMP_HEX_LABEL(">> HANDSHAKE HASH", handshake_hash, hash_size); + _private_tls_prf(context, + context->master_key, context->master_key_len, + context->premaster_key, context->premaster_key_len, + "extended master secret", 22, + handshake_hash, hash_size, + NULL, 0 + ); + } else +#endif + _private_tls_prf(context, + context->master_key, context->master_key_len, + context->premaster_key, context->premaster_key_len, + master_secret_label, 13, + context->remote_random, TLS_CLIENT_RANDOM_SIZE, + context->local_random, TLS_SERVER_RANDOM_SIZE + ); + } else { + _private_tls_prf(context, + context->master_key, context->master_key_len, + context->premaster_key, context->premaster_key_len, + master_secret_label, 13, + context->local_random, TLS_CLIENT_RANDOM_SIZE, + context->remote_random, TLS_SERVER_RANDOM_SIZE + ); + } + TLS_FREE(context->premaster_key); + context->premaster_key = NULL; + context->premaster_key_len = 0; + DEBUG_PRINT("\n=========== Master key ===========\n"); + DEBUG_DUMP_HEX(context->master_key, context->master_key_len); + DEBUG_PRINT("\n"); + _private_tls_expand_key(context); + return 1; + } + return 0; +} + +unsigned char *tls_pem_decode(const unsigned char *data_in, unsigned int input_length, int cert_index, unsigned int *output_len) { + unsigned int i; + *output_len = 0; + int alloc_len = input_length / 4 * 3; + unsigned char *output = (unsigned char *)TLS_MALLOC(alloc_len); + if (!output) + return NULL; + unsigned int start_at = 0; + unsigned int idx = 0; + for (i = 0; i < input_length; i++) { + if ((data_in[i] == '\n') || (data_in[i] == '\r')) + continue; + + if (data_in[i] != '-') { + // read entire line + while ((i < input_length) && (data_in[i] != '\n')) + i++; + continue; + } + + if (data_in[i] == '-') { + unsigned int end_idx = i; + //read until end of line + while ((i < input_length) && (data_in[i] != '\n')) + i++; + if (start_at) { + if (cert_index > 0) { + cert_index--; + start_at = 0; + } else { + idx = _private_b64_decode((const char *)&data_in[start_at], end_idx - start_at, output); + break; + } + } else + start_at = i + 1; + } + } + *output_len = idx; + if (!idx) { + TLS_FREE(output); + return NULL; + } + return output; +} + +int _is_oid(const unsigned char *oid, const unsigned char *compare_to, int compare_to_len) { + int i = 0; + while ((oid[i]) && (i < compare_to_len)) { + if (oid[i] != compare_to[i]) + return 0; + + i++; + } + return 1; +} + +int _is_oid2(const unsigned char *oid, const unsigned char *compare_to, int compare_to_len, int oid_len) { + int i = 0; + if (oid_len < compare_to_len) + compare_to_len = oid_len; + while (i < compare_to_len) { + if (oid[i] != compare_to[i]) + return 0; + + i++; + } + return 1; +} + +struct TLSCertificate *tls_create_certificate() { + struct TLSCertificate *cert = (struct TLSCertificate *)TLS_MALLOC(sizeof(struct TLSCertificate)); + if (cert) + memset(cert, 0, sizeof(struct TLSCertificate)); + return cert; +} + +int tls_certificate_valid_subject_name(const unsigned char *cert_subject, const char *subject) { + // no subjects ... + if (((!cert_subject) || (!cert_subject[0])) && ((!subject) || (!subject[0]))) + return 0; + + if ((!subject) || (!subject[0])) + return bad_certificate; + + if ((!cert_subject) || (!cert_subject[0])) + return bad_certificate; + + // exact match + if (!strcmp((const char *)cert_subject, subject)) + return 0; + + const char *wildcard = strchr((const char *)cert_subject, '*'); + if (wildcard) { + // 6.4.3 (1) The client SHOULD NOT attempt to match a presented identifier in + // which the wildcard character comprises a label other than the left-most label + if (!wildcard[1]) { + // subject is [*] + // or + // subject is [something*] .. invalid + return bad_certificate; + } + wildcard++; + const char *match = strstr(subject, wildcard); + if ((!match) && (wildcard[0] == '.')) { + // check *.domain.com agains domain.com + wildcard++; + if (!strcasecmp(subject, wildcard)) + return 0; + } + if (match) { + uintptr_t offset = (uintptr_t)match - (uintptr_t)subject; + if (offset) { + // check for foo.*.domain.com against *.domain.com (invalid) + if (memchr(subject, '.', offset)) + return bad_certificate; + } + // check if exact match + if (!strcasecmp(match, wildcard)) + return 0; + } + } + + return bad_certificate; +} + +int tls_certificate_valid_subject(struct TLSCertificate *cert, const char *subject) { + int i; + if (!cert) + return certificate_unknown; + int err = tls_certificate_valid_subject_name(cert->subject, subject); + if ((err) && (cert->san)) { + for (i = 0; i < cert->san_length; i++) { + err = tls_certificate_valid_subject_name(cert->san[i], subject); + if (!err) + return err; + } + } + return err; +} + +int tls_certificate_is_valid(struct TLSCertificate *cert) { + if (!cert) + return certificate_unknown; + if (!cert->not_before) + return certificate_unknown; + if (!cert->not_after) + return certificate_unknown; + //20160224182300Z// + char current_time[16]; + time_t t = time(NULL); + struct tm *utct = gmtime(&t); + if (utct) { + current_time[0] = 0; + snprintf(current_time, sizeof(current_time), "%04hu%02hhu%02hhu%02hhu%02hhu%02hhuZ", 1900 + utct->tm_year, utct->tm_mon + 1, utct->tm_mday, utct->tm_hour, utct->tm_min, utct->tm_sec); + if (strcasecmp((char *)cert->not_before, current_time) > 0) { + DEBUG_PRINT("Certificate is not yer valid, now: %s (validity: %s - %s)\n", current_time, cert->not_before, cert->not_after); + return certificate_expired; + } + if (strcasecmp((char *)cert->not_after, current_time) < 0) { + DEBUG_PRINT("Expired certificate, now: %s (validity: %s - %s)\n", current_time, cert->not_before, cert->not_after); + return certificate_expired; + } + DEBUG_PRINT("Valid certificate, now: %s (validity: %s - %s)\n", current_time, cert->not_before, cert->not_after); + } + return 0; +} + +void tls_certificate_set_copy(unsigned char **member, const unsigned char *val, int len) { + if (!member) + return; + TLS_FREE(*member); + if (len) { + *member = (unsigned char *)TLS_MALLOC(len + 1); + if (*member) { + memcpy(*member, val, len); + (*member)[len] = 0; + } + } else + *member = NULL; +} + +void tls_certificate_set_copy_date(unsigned char **member, const unsigned char *val, int len) { + if (!member) + return; + TLS_FREE(*member); + if (len > 4) { + *member = (unsigned char *)TLS_MALLOC(len + 3); + if (*member) { + if (val[0] == '9') { + (*member)[0]='1'; + (*member)[1]='9'; + } else { + (*member)[0]='2'; + (*member)[1]='0'; + } + memcpy(*member + 2, val, len); + (*member)[len] = 0; + } + } else + *member = NULL; +} + +void tls_certificate_set_key(struct TLSCertificate *cert, const unsigned char *val, int len) { + if ((!val[0]) && (len % 2)) { + val++; + len--; + } + tls_certificate_set_copy(&cert->pk, val, len); + if (cert->pk) + cert->pk_len = len; +} + +void tls_certificate_set_priv(struct TLSCertificate *cert, const unsigned char *val, int len) { + tls_certificate_set_copy(&cert->priv, val, len); + if (cert->priv) + cert->priv_len = len; +} + +void tls_certificate_set_sign_key(struct TLSCertificate *cert, const unsigned char *val, int len) { + if ((!val[0]) && (len % 2)) { + val++; + len--; + } + tls_certificate_set_copy(&cert->sign_key, val, len); + if (cert->sign_key) + cert->sign_len = len; +} + +char *tls_certificate_to_string(struct TLSCertificate *cert, char *buffer, int len) { + unsigned int i; + if (!buffer) + return NULL; + buffer[0] = 0; + if (cert->version) { + int res = snprintf(buffer, len, "X.509v%i certificate\n Issued by: [%s]%s (%s)\n Issued to: [%s]%s (%s, %s)\n Subject: %s\n Validity: %s - %s\n OCSP: %s\n Serial number: ", + (int)cert->version, + cert->issuer_country, cert->issuer_entity, cert->issuer_subject, + cert->country, cert->entity, cert->state, cert->location, + cert->subject, + cert->not_before, cert->not_after, + cert->ocsp + ); + if (res > 0) { + for (i = 0; i < cert->serial_len; i++) + res += snprintf(buffer + res, len - res, "%02x", (int)cert->serial_number[i]); + } + if ((cert->san) && (cert->san_length)) { + res += snprintf(buffer + res, len - res, "\n Alternative subjects: "); + for (i = 0; i < cert->san_length; i++) { + if (i) + res += snprintf(buffer + res, len - res, ", %s", cert->san[i]); + else + res += snprintf(buffer + res, len - res, "%s", cert->san[i]); + } + } + res += snprintf(buffer + res, len - res, "\n Key (%i bits, ", cert->pk_len * 8); + if (res > 0) { + switch (cert->key_algorithm) { + case TLS_RSA_SIGN_RSA: + res += snprintf(buffer + res, len - res, "RSA_SIGN_RSA"); + break; + case TLS_RSA_SIGN_MD5: + res += snprintf(buffer + res, len - res, "RSA_SIGN_MD5"); + break; + case TLS_RSA_SIGN_SHA1: + res += snprintf(buffer + res, len - res, "RSA_SIGN_SHA1"); + break; + case TLS_RSA_SIGN_SHA256: + res += snprintf(buffer + res, len - res, "RSA_SIGN_SHA256"); + break; + case TLS_RSA_SIGN_SHA384: + res += snprintf(buffer + res, len - res, "RSA_SIGN_SHA384"); + break; + case TLS_RSA_SIGN_SHA512: + res += snprintf(buffer + res, len - res, "RSA_SIGN_SHA512"); + break; + case TLS_ECDSA_SIGN_SHA256: + res += snprintf(buffer + res, len - res, "ECDSA_SIGN_SHA512"); + break; + case TLS_EC_PUBLIC_KEY: + res += snprintf(buffer + res, len - res, "EC_PUBLIC_KEY"); + break; + default: + res += snprintf(buffer + res, len - res, "not supported (%i)", (int)cert->key_algorithm); + } + } + if ((res > 0) && (cert->ec_algorithm)) { + switch (cert->ec_algorithm) { + case TLS_EC_prime192v1: + res += snprintf(buffer + res, len - res, " prime192v1"); + break; + case TLS_EC_prime192v2: + res += snprintf(buffer + res, len - res, " prime192v2"); + break; + case TLS_EC_prime192v3: + res += snprintf(buffer + res, len - res, " prime192v3"); + break; + case TLS_EC_prime239v2: + res += snprintf(buffer + res, len - res, " prime239v2"); + break; + case TLS_EC_secp256r1: + res += snprintf(buffer + res, len - res, " EC_secp256r1"); + break; + case TLS_EC_secp224r1: + res += snprintf(buffer + res, len - res, " EC_secp224r1"); + break; + case TLS_EC_secp384r1: + res += snprintf(buffer + res, len - res, " EC_secp384r1"); + break; + case TLS_EC_secp521r1: + res += snprintf(buffer + res, len - res, " EC_secp521r1"); + break; + default: + res += snprintf(buffer + res, len - res, " unknown(%i)", (int)cert->ec_algorithm); + } + } + res += snprintf(buffer + res, len - res, "):\n"); + if (res > 0) { + for (i = 0; i < cert->pk_len; i++) + res += snprintf(buffer + res, len - res, "%02x", (int)cert->pk[i]); + res += snprintf(buffer + res, len - res, "\n Signature (%i bits, ", cert->sign_len * 8); + switch (cert->algorithm) { + case TLS_RSA_SIGN_RSA: + res += snprintf(buffer + res, len - res, "RSA_SIGN_RSA):\n"); + break; + case TLS_RSA_SIGN_MD5: + res += snprintf(buffer + res, len - res, "RSA_SIGN_MD5):\n"); + break; + case TLS_RSA_SIGN_SHA1: + res += snprintf(buffer + res, len - res, "RSA_SIGN_SHA1):\n"); + break; + case TLS_RSA_SIGN_SHA256: + res += snprintf(buffer + res, len - res, "RSA_SIGN_SHA256):\n"); + break; + case TLS_RSA_SIGN_SHA384: + res += snprintf(buffer + res, len - res, "RSA_SIGN_SHA384):\n"); + break; + case TLS_RSA_SIGN_SHA512: + res += snprintf(buffer + res, len - res, "RSA_SIGN_SHA512):\n"); + break; + case TLS_EC_PUBLIC_KEY: + res += snprintf(buffer + res, len - res, "EC_PUBLIC_KEY):\n"); + break; + default: + res += snprintf(buffer + res, len - res, "not supported):\n"); + } + + for (i = 0; i < cert->sign_len; i++) + res += snprintf(buffer + res, len - res, "%02x", (int)cert->sign_key[i]); + } + } else + if ((cert->priv) && (cert->priv_len)) { + int res = snprintf(buffer, len, "X.509 private key\n"); + res += snprintf(buffer + res, len - res, " Private Key: "); + if (res > 0) { + for (i = 0; i < cert->priv_len; i++) + res += snprintf(buffer + res, len - res, "%02x", (int)cert->priv[i]); + } + } else + snprintf(buffer, len, "Empty ASN1 file"); + return buffer; +} + +void tls_certificate_set_exponent(struct TLSCertificate *cert, const unsigned char *val, int len) { + tls_certificate_set_copy(&cert->exponent, val, len); + if (cert->exponent) + cert->exponent_len = len; +} + +void tls_certificate_set_serial(struct TLSCertificate *cert, const unsigned char *val, int len) { + tls_certificate_set_copy(&cert->serial_number, val, len); + if (cert->serial_number) + cert->serial_len = len; +} + +void tls_certificate_set_algorithm(struct TLSContext *context, unsigned int *algorithm, const unsigned char *val, int len) { + if ((len == 7) && (_is_oid(val, TLS_EC_PUBLIC_KEY_OID, 7))) { + *algorithm = TLS_EC_PUBLIC_KEY; + return; + } + if (len == 8) { + if (_is_oid(val, TLS_EC_prime192v1_OID, len)) { + *algorithm = TLS_EC_prime192v1; + return; + } + if (_is_oid(val, TLS_EC_prime192v2_OID, len)) { + *algorithm = TLS_EC_prime192v2; + return; + } + if (_is_oid(val, TLS_EC_prime192v3_OID, len)) { + *algorithm = TLS_EC_prime192v3; + return; + } + if (_is_oid(val, TLS_EC_prime239v1_OID, len)) { + *algorithm = TLS_EC_prime239v1; + return; + } + if (_is_oid(val, TLS_EC_prime239v2_OID, len)) { + *algorithm = TLS_EC_prime239v2; + return; + } + if (_is_oid(val, TLS_EC_prime239v3_OID, len)) { + *algorithm = TLS_EC_prime239v3; + return; + } + if (_is_oid(val, TLS_EC_prime256v1_OID, len)) { + *algorithm = TLS_EC_prime256v1; + return; + } + } + if (len == 5) { + if (_is_oid2(val, TLS_EC_secp224r1_OID, len, sizeof(TLS_EC_secp224r1_OID) - 1)) { + *algorithm = TLS_EC_secp224r1; + return; + } + if (_is_oid2(val, TLS_EC_secp384r1_OID, len, sizeof(TLS_EC_secp384r1_OID) - 1)) { + *algorithm = TLS_EC_secp384r1; + return; + } + if (_is_oid2(val, TLS_EC_secp521r1_OID, len, sizeof(TLS_EC_secp521r1_OID) - 1)) { + *algorithm = TLS_EC_secp521r1; + return; + } + } + if (len != 9) + return; + + if (_is_oid(val, TLS_RSA_SIGN_SHA256_OID, 9)) { + *algorithm = TLS_RSA_SIGN_SHA256; + return; + } + + if (_is_oid(val, TLS_RSA_SIGN_RSA_OID, 9)) { + *algorithm = TLS_RSA_SIGN_RSA; + return; + } + + if (_is_oid(val, TLS_RSA_SIGN_SHA1_OID, 9)) { + *algorithm = TLS_RSA_SIGN_SHA1; + return; + } + + if (_is_oid(val, TLS_RSA_SIGN_SHA512_OID, 9)) { + *algorithm = TLS_RSA_SIGN_SHA512; + return; + } + + if (_is_oid(val, TLS_RSA_SIGN_SHA384_OID, 9)) { + *algorithm = TLS_RSA_SIGN_SHA384; + return; + } + + if (_is_oid(val, TLS_RSA_SIGN_MD5_OID, 9)) { + *algorithm = TLS_RSA_SIGN_MD5; + return; + } + + if (_is_oid(val, TLS_ECDSA_SIGN_SHA256_OID, 9)) { + *algorithm = TLS_ECDSA_SIGN_SHA256; + return; + } + // client should fail on unsupported signature + if (!context->is_server) { + DEBUG_PRINT("UNSUPPORTED SIGNATURE ALGORITHM\n"); + context->critical_error = 1; + } +} + +void tls_destroy_certificate(struct TLSCertificate *cert) { + if (cert) { + int i; + TLS_FREE(cert->exponent); + TLS_FREE(cert->pk); + TLS_FREE(cert->issuer_country); + TLS_FREE(cert->issuer_state); + TLS_FREE(cert->issuer_location); + TLS_FREE(cert->issuer_entity); + TLS_FREE(cert->issuer_subject); + TLS_FREE(cert->country); + TLS_FREE(cert->state); + TLS_FREE(cert->location); + TLS_FREE(cert->subject); + for (i = 0; i < cert->san_length; i++) { + TLS_FREE(cert->san[i]); + } + TLS_FREE(cert->san); + TLS_FREE(cert->ocsp); + TLS_FREE(cert->serial_number); + TLS_FREE(cert->entity); + TLS_FREE(cert->not_before); + TLS_FREE(cert->not_after); + TLS_FREE(cert->sign_key); + TLS_FREE(cert->priv); + TLS_FREE(cert->der_bytes); + TLS_FREE(cert->bytes); + TLS_FREE(cert->fingerprint); + TLS_FREE(cert); + } +} + +struct TLSPacket *tls_create_packet(struct TLSContext *context, unsigned char type, unsigned short version, int payload_size_hint) { + struct TLSPacket *packet = (struct TLSPacket *)TLS_MALLOC(sizeof(struct TLSPacket)); + if (!packet) + return NULL; + packet->broken = 0; + if (payload_size_hint > 0) + packet->size = payload_size_hint + 10; + else + packet->size = TLS_BLOB_INCREMENT; + packet->buf = (unsigned char *)TLS_MALLOC(packet->size); + packet->context = context; + if (!packet->buf) { + TLS_FREE(packet); + return NULL; + } + if ((context) && (context->dtls)) + packet->len = 13; + else + packet->len = 5; + packet->buf[0] = type; +#ifdef WITH_TLS_13 + switch (version) { + case TLS_V13: + // check if context is not null. If null, is a tls_export_context call + if (context) + *(unsigned short *)(packet->buf + 1) = 0x0303; // no need to reorder (same bytes) + else + *(unsigned short *)(packet->buf + 1) = htons(version); + break; + case DTLS_V13: + *(unsigned short *)(packet->buf + 1) = htons(DTLS_V13); + break; + default: + *(unsigned short *)(packet->buf + 1) = htons(version); + } +#else + *(unsigned short *)(packet->buf + 1) = htons(version); +#endif + return packet; +} + +void tls_destroy_packet(struct TLSPacket *packet) { + if (packet) { + if (packet->buf) + TLS_FREE(packet->buf); + TLS_FREE(packet); + } +} + +int _private_tls_crypto_create(struct TLSContext *context, int key_length, unsigned char *localkey, unsigned char *localiv, unsigned char *remotekey, unsigned char *remoteiv) { + if (context->crypto.created) { + if (context->crypto.created == 1) { + cbc_done(&context->crypto.ctx_remote.aes_remote); + cbc_done(&context->crypto.ctx_local.aes_local); + } else { +#ifdef TLS_WITH_CHACHA20_POLY1305 + if (context->crypto.created == 2) { +#endif + unsigned char dummy_buffer[32]; + unsigned long tag_len = 0; + gcm_done(&context->crypto.ctx_remote.aes_gcm_remote, dummy_buffer, &tag_len); + gcm_done(&context->crypto.ctx_local.aes_gcm_local, dummy_buffer, &tag_len); +#ifdef TLS_WITH_CHACHA20_POLY1305 + } +#endif + } + context->crypto.created = 0; + } + tls_init(); + int is_aead = _private_tls_is_aead(context); + int cipherID = find_cipher("aes"); + DEBUG_PRINT("Using cipher ID: %x\n", (int)context->cipher); +#ifdef TLS_WITH_CHACHA20_POLY1305 + if (is_aead == 2) { + unsigned int counter = 1; + + chacha_keysetup(&context->crypto.ctx_local.chacha_local, localkey, key_length * 8); + chacha_ivsetup_96bitnonce(&context->crypto.ctx_local.chacha_local, localiv, (unsigned char *)&counter); + + chacha_keysetup(&context->crypto.ctx_remote.chacha_remote, remotekey, key_length * 8); + chacha_ivsetup_96bitnonce(&context->crypto.ctx_remote.chacha_remote, remoteiv, (unsigned char *)&counter); + + context->crypto.created = 3; + } else +#endif + if (is_aead) { + int res1 = gcm_init(&context->crypto.ctx_local.aes_gcm_local, cipherID, localkey, key_length); + int res2 = gcm_init(&context->crypto.ctx_remote.aes_gcm_remote, cipherID, remotekey, key_length); + + if ((res1) || (res2)) + return TLS_GENERIC_ERROR; + context->crypto.created = 2; + } else { + int res1 = cbc_start(cipherID, localiv, localkey, key_length, 0, &context->crypto.ctx_local.aes_local); + int res2 = cbc_start(cipherID, remoteiv, remotekey, key_length, 0, &context->crypto.ctx_remote.aes_remote); + + if ((res1) || (res2)) + return TLS_GENERIC_ERROR; + context->crypto.created = 1; + } + return 0; +} + +int _private_tls_crypto_encrypt(struct TLSContext *context, unsigned char *buf, unsigned char *ct, unsigned int len) { + if (context->crypto.created == 1) + return cbc_encrypt(buf, ct, len, &context->crypto.ctx_local.aes_local); + + memset(ct, 0, len); + return TLS_GENERIC_ERROR; +} + +int _private_tls_crypto_decrypt(struct TLSContext *context, unsigned char *buf, unsigned char *pt, unsigned int len) { + if (context->crypto.created == 1) + return cbc_decrypt(buf, pt, len, &context->crypto.ctx_remote.aes_remote); + + memset(pt, 0, len); + return TLS_GENERIC_ERROR; +} + +void _private_tls_crypto_done(struct TLSContext *context) { + unsigned char dummy_buffer[32]; + unsigned long tag_len = 0; + switch (context->crypto.created) { + case 1: + cbc_done(&context->crypto.ctx_remote.aes_remote); + cbc_done(&context->crypto.ctx_local.aes_local); + break; + case 2: + gcm_done(&context->crypto.ctx_remote.aes_gcm_remote, dummy_buffer, &tag_len); + gcm_done(&context->crypto.ctx_local.aes_gcm_local, dummy_buffer, &tag_len); + break; + } + context->crypto.created = 0; +} + +void tls_packet_update(struct TLSPacket *packet) { + if ((packet) && (!packet->broken)) { + int footer_size = 0; +#ifdef WITH_TLS_13 + if ((packet->context) && ((packet->context->version == TLS_V13) || (packet->context->version == DTLS_V13)) && (packet->context->cipher_spec_set) && (packet->context->crypto.created)) { + // type + tls_packet_uint8(packet, packet->buf[0]); + // no padding + // tls_packet_uint8(packet, 0); + footer_size = 1; + } +#endif + unsigned int header_size = 5; + if ((packet->context) && (packet->context->dtls)) { + header_size = 13; + *(unsigned short *)(packet->buf + 3) = htons(packet->context->dtls_epoch_local); + uint64_t sequence_number = packet->context->local_sequence_number; + packet->buf[5] = (unsigned char)(sequence_number / 0x10000000000LL); + sequence_number %= 0x10000000000LL; + packet->buf[6] = (unsigned char)(sequence_number / 0x100000000LL); + sequence_number %= 0x100000000LL; + packet->buf[7] = (unsigned char)(sequence_number / 0x1000000); + sequence_number %= 0x1000000; + packet->buf[8] = (unsigned char)(sequence_number / 0x10000); + sequence_number %= 0x10000; + packet->buf[9] = (unsigned char)(sequence_number / 0x100); + sequence_number %= 0x100; + packet->buf[10] = (unsigned char)sequence_number; + + *(unsigned short *)(packet->buf + 11) = htons(packet->len - header_size); + } else + *(unsigned short *)(packet->buf + 3) = htons(packet->len - header_size); + if (packet->context) { + if (packet->buf[0] != TLS_CHANGE_CIPHER) { + if ((packet->buf[0] == TLS_HANDSHAKE) && (packet->len > header_size)) { + unsigned char handshake_type = packet->buf[header_size]; + if ((handshake_type != 0x00) && (handshake_type != 0x03)) + _private_tls_update_hash(packet->context, packet->buf + header_size, packet->len - header_size - footer_size, 1, 0); + } +#ifdef TLS_12_FALSE_START + if (((packet->context->cipher_spec_set) || (packet->context->false_start)) && (packet->context->crypto.created)) { +#else + if ((packet->context->cipher_spec_set) && (packet->context->crypto.created)) { +#endif + int block_size = TLS_AES_BLOCK_SIZE; + int mac_size = 0; + unsigned int length = 0; + unsigned char padding = 0; + unsigned int pt_length = packet->len - header_size; + + if (packet->context->crypto.created == 1) { + mac_size = _private_tls_mac_length(packet->context); +#ifdef TLS_LEGACY_SUPPORT + if (packet->context->version == TLS_V10) + length = packet->len - header_size + mac_size; + else +#endif + length = packet->len - header_size + TLS_AES_IV_LENGTH + mac_size; + padding = block_size - length % block_size; + length += padding; +#ifdef TLS_WITH_CHACHA20_POLY1305 + } else + if (packet->context->crypto.created == 3) { + mac_size = POLY1305_TAGLEN; + length = packet->len - header_size + mac_size; +#endif + } else { + mac_size = TLS_GCM_TAG_LEN; + length = packet->len - header_size + 8 + mac_size; + } + if (packet->context->crypto.created == 1) { + unsigned char *buf = (unsigned char *)TLS_MALLOC(length); + if (buf) { + unsigned char *ct = (unsigned char *)TLS_MALLOC(length + header_size); + if (ct) { + unsigned int buf_pos = 0; + memcpy(ct, packet->buf, header_size - 2); + *(unsigned short *)&ct[header_size - 2] = htons(length); +#ifdef TLS_LEGACY_SUPPORT + if (packet->context->version != TLS_V10) +#endif + { + tls_random(buf, TLS_AES_IV_LENGTH); + buf_pos += TLS_AES_IV_LENGTH; + } + // copy payload + memcpy(buf + buf_pos, packet->buf + header_size, packet->len - header_size); + buf_pos += packet->len - header_size; + if (packet->context->dtls) { + unsigned char temp_buf[5]; + memcpy(temp_buf, packet->buf, 3); + *(unsigned short *)(temp_buf + 3) = *(unsigned short *)&packet->buf[header_size - 2]; + uint64_t dtls_sequence_number = ntohll(*(uint64_t *)&packet->buf[3]); + _private_tls_hmac_message(1, packet->context, temp_buf, 5, packet->buf + header_size, packet->len - header_size, buf + buf_pos, mac_size, dtls_sequence_number); + } else + _private_tls_hmac_message(1, packet->context, packet->buf, packet->len, NULL, 0, buf + buf_pos, mac_size, 0); + buf_pos += mac_size; + + memset(buf + buf_pos, padding - 1, padding); + buf_pos += padding; + + //DEBUG_DUMP_HEX_LABEL("PT BUFFER", buf, length); + _private_tls_crypto_encrypt(packet->context, buf, ct + header_size, length); + TLS_FREE(packet->buf); + packet->buf = ct; + packet->len = length + header_size; + packet->size = packet->len; + } else { + // invalidate packet + memset(packet->buf, 0, packet->len); + } + TLS_FREE(buf); + } else { + // invalidate packet + memset(packet->buf, 0, packet->len); + } + } else +#ifdef TLS_WITH_CHACHA20_POLY1305 + if (packet->context->crypto.created >= 2) { +#else + if (packet->context->crypto.created == 2) { +#endif + // + 1 = type + int ct_size = length + header_size + 12 + TLS_MAX_TAG_LEN + 1; + unsigned char *ct = (unsigned char *)TLS_MALLOC(ct_size); + if (ct) { + memset(ct, 0, ct_size); + // AEAD + // sequence number (8 bytes) + // content type (1 byte) + // version (2 bytes) + // length (2 bytes) + unsigned char aad[13]; + int aad_size = sizeof(aad); + unsigned char *sequence = aad; +#ifdef WITH_TLS_13 + if ((packet->context->version == TLS_V13) || (packet->context->version == DTLS_V13)) { + aad[0] = TLS_APPLICATION_DATA; + aad[1] = packet->buf[1]; + aad[2] = packet->buf[2]; +#ifdef TLS_WITH_CHACHA20_POLY1305 + if (packet->context->crypto.created == 3) + *((unsigned short *)(aad + 3)) = htons(packet->len + POLY1305_TAGLEN - header_size); + else +#endif + *((unsigned short *)(aad + 3)) = htons(packet->len + TLS_GCM_TAG_LEN - header_size); + aad_size = 5; + sequence = aad + 5; + if (packet->context->dtls) + *((uint64_t *)sequence) = *(uint64_t *)&packet->buf[3]; + else + *((uint64_t *)sequence) = htonll(packet->context->local_sequence_number); + } else { +#endif + if (packet->context->dtls) + *((uint64_t *)aad) = *(uint64_t *)&packet->buf[3]; + else + *((uint64_t *)aad) = htonll(packet->context->local_sequence_number); + aad[8] = packet->buf[0]; + aad[9] = packet->buf[1]; + aad[10] = packet->buf[2]; + *((unsigned short *)(aad + 11)) = htons(packet->len - header_size); +#ifdef WITH_TLS_13 + } +#endif + int ct_pos = header_size; +#ifdef TLS_WITH_CHACHA20_POLY1305 + if (packet->context->crypto.created == 3) { + unsigned int counter = 1; + unsigned char poly1305_key[POLY1305_KEYLEN]; + chacha_ivupdate(&packet->context->crypto.ctx_local.chacha_local, packet->context->crypto.ctx_local_mac.local_aead_iv, sequence, (u8 *)&counter); + chacha20_poly1305_key(&packet->context->crypto.ctx_local.chacha_local, poly1305_key); + ct_pos += chacha20_poly1305_aead(&packet->context->crypto.ctx_local.chacha_local, packet->buf + header_size, pt_length, aad, aad_size, poly1305_key, ct + ct_pos); + } else { +#endif + unsigned char iv[TLS_13_AES_GCM_IV_LENGTH]; +#ifdef WITH_TLS_13 + if ((packet->context->version == TLS_V13) || (packet->context->version == DTLS_V13)) { + memcpy(iv, packet->context->crypto.ctx_local_mac.local_iv, TLS_13_AES_GCM_IV_LENGTH); + int i; + int offset = TLS_13_AES_GCM_IV_LENGTH - 8; + for (i = 0; i < 8; i++) + iv[offset + i] = packet->context->crypto.ctx_local_mac.local_iv[offset + i] ^ sequence[i]; + } else { +#endif + memcpy(iv, packet->context->crypto.ctx_local_mac.local_aead_iv, TLS_AES_GCM_IV_LENGTH); + tls_random(iv + TLS_AES_GCM_IV_LENGTH, 8); + memcpy(ct + ct_pos, iv + TLS_AES_GCM_IV_LENGTH, 8); + ct_pos += 8; +#ifdef WITH_TLS_13 + } +#endif + + gcm_reset(&packet->context->crypto.ctx_local.aes_gcm_local); + gcm_add_iv(&packet->context->crypto.ctx_local.aes_gcm_local, iv, 12); + gcm_add_aad(&packet->context->crypto.ctx_local.aes_gcm_local, aad, aad_size); + gcm_process(&packet->context->crypto.ctx_local.aes_gcm_local, packet->buf + header_size, pt_length, ct + ct_pos, GCM_ENCRYPT); + ct_pos += pt_length; + + unsigned long taglen = TLS_GCM_TAG_LEN; + gcm_done(&packet->context->crypto.ctx_local.aes_gcm_local, ct + ct_pos, &taglen); + ct_pos += taglen; +#ifdef TLS_WITH_CHACHA20_POLY1305 + } +#endif +#ifdef WITH_TLS_13 + if ((packet->context->version == TLS_V13) || (packet->context->version == DTLS_V13)) { + ct[0] = TLS_APPLICATION_DATA; + *(unsigned short *)&ct[1] = htons(packet->context->version == TLS_V13 ? TLS_V12 : DTLS_V12); + // is dtls ? + if (header_size != 5) + memcpy(ct, packet->buf + 3, header_size - 2); + } else +#endif + memcpy(ct, packet->buf, header_size - 2); + *(unsigned short *)&ct[header_size - 2] = htons(ct_pos - header_size); + TLS_FREE(packet->buf); + packet->buf = ct; + packet->len = ct_pos; + packet->size = ct_pos; + } else { + // invalidate packet + memset(packet->buf, 0, packet->len); + } + } else { + // invalidate packet (never reached) + memset(packet->buf, 0, packet->len); + } + } + } else + packet->context->dtls_epoch_local++; + packet->context->local_sequence_number++; + } + } +} + +int tls_packet_append(struct TLSPacket *packet, const unsigned char *buf, unsigned int len) { + if ((!packet) || (packet->broken)) + return -1; + + if (!len) + return 0; + + unsigned int new_len = packet->len + len; + + if (new_len > packet->size) { + packet->size = (new_len / TLS_BLOB_INCREMENT + 1) * TLS_BLOB_INCREMENT; + packet->buf = (unsigned char *)TLS_REALLOC(packet->buf, packet->size); + if (!packet->buf) { + packet->size = 0; + packet->len = 0; + packet->broken = 1; + return -1; + } + } + memcpy(packet->buf + packet->len, buf, len); + packet->len = new_len; + return new_len; +} + +int tls_packet_uint8(struct TLSPacket *packet, unsigned char i) { + return tls_packet_append(packet, &i, 1); +} + +int tls_packet_uint16(struct TLSPacket *packet, unsigned short i) { + unsigned short ni = htons(i); + return tls_packet_append(packet, (unsigned char *)&ni, 2); +} + +int tls_packet_uint32(struct TLSPacket *packet, unsigned int i) { + unsigned int ni = htonl(i); + return tls_packet_append(packet, (unsigned char *)&ni, 4); +} + +int tls_packet_uint24(struct TLSPacket *packet, unsigned int i) { + unsigned char buf[3]; + buf[0] = i / 0x10000; + i %= 0x10000; + buf[1] = i / 0x100; + i %= 0x100; + buf[2] = i; + + return tls_packet_append(packet, buf, 3); +} + +int tls_random(unsigned char *key, int len) { + for (int i = 0; i < len; i++) + key[i] = rand() & 0xff; + return 1; +} + +TLSHash *_private_tls_ensure_hash(struct TLSContext *context) { + TLSHash *hash = context->handshake_hash; + if (!hash) { + hash = (TLSHash *)TLS_MALLOC(sizeof(TLSHash)); + if (hash) + memset(hash, 0, sizeof(TLSHash)); + context->handshake_hash = hash; + } + return hash; +} + +void _private_tls_destroy_hash(struct TLSContext *context) { + if (context) { + TLS_FREE(context->handshake_hash); + context->handshake_hash = NULL; + } +} + +void _private_tls_create_hash(struct TLSContext *context) { + if (!context) + return; + TLSHash *hash = _private_tls_ensure_hash(context); + if ((context->version == TLS_V12) || (context->version == DTLS_V12) || (context->version == TLS_V13) || (context->version == DTLS_V13)) { + int hash_size = _private_tls_mac_length(context); + if (hash->created) { + unsigned char temp[TLS_MAX_SHA_SIZE]; + sha384_done(&hash->hash32, temp); + sha256_done(&hash->hash48, temp); + } + sha384_init(&hash->hash48); + sha256_init(&hash->hash32); + hash->created = 1; + } else { +#ifdef TLS_LEGACY_SUPPORT + // TLS_V11 + if (hash->created) { + unsigned char temp[TLS_V11_HASH_SIZE]; + md5_done(&hash->hash32, temp); + sha1_done(&hash->hash2, temp); + } + md5_init(&hash->hash32); + sha1_init(&hash->hash2); + hash->created = 1; +#endif + } +} + +void _private_tls_update_handshake_list(struct TLSContext *context, const unsigned char *in, unsigned int len, unsigned char direction, unsigned char connection_status) { + if ((!context) || (!context->dtls) || (!in) || (!len)) + return; + + struct TLSHandshakeList *msg = (struct TLSHandshakeList *)TLS_MALLOC(sizeof(struct TLSHandshakeList)); + if (!msg) + return; + + msg->msg = (unsigned char *)TLS_MALLOC(len); + if (!msg) { + TLS_FREE(msg); + return; + } + + memcpy(msg->msg, in, len); + msg->len = len; + msg->direction = direction; + msg->connection_status = connection_status ? connection_status : context->connection_status; + msg->next = NULL; + + if (!context->dtls_data->dtls_handshake_list) { + context->dtls_data->dtls_handshake_list = msg; + return; + } + + struct TLSHandshakeList *last = context->dtls_data->dtls_handshake_list; + while (last->next) + last = (struct TLSHandshakeList *)last->next; + + last->next = msg; +} + +int _private_tls_update_hash(struct TLSContext *context, const unsigned char *in, unsigned int len, unsigned char direction, unsigned char connection_status) { + if (!context) + return 0; + + if (context->dtls) + _private_tls_update_handshake_list(context, in, len, direction, connection_status); + + TLSHash *hash = _private_tls_ensure_hash(context); + if ((context->version == TLS_V12) || (context->version == DTLS_V12) || (context->version == TLS_V13) || (context->version == DTLS_V13)) { + if (!hash->created) { + _private_tls_create_hash(context); +#ifdef TLS_LEGACY_SUPPORT + // cache first hello in case of protocol downgrade + if ((!context->is_server) && (!context->cached_handshake) && (!context->request_client_certificate) && (len)) { + context->cached_handshake = (unsigned char *)TLS_MALLOC(len); + if (context->cached_handshake) { + memcpy(context->cached_handshake, in, len); + context->cached_handshake_len = len; + } + } +#endif + } + int hash_size = _private_tls_mac_length(context); + sha256_process(&hash->hash32, in, len); + sha384_process(&hash->hash48, in, len); + if (!hash_size) + hash_size = TLS_SHA256_MAC_SIZE; + } else { +#ifdef TLS_LEGACY_SUPPORT + if (!hash->created) + _private_tls_create_hash(context); + md5_process(&hash->hash32, in, len); + sha1_process(&hash->hash2, in, len); +#endif + } + if ((context->request_client_certificate) && (len)) { + // cache all messages for verification + int new_len = context->cached_handshake_len + len; + context->cached_handshake = (unsigned char *)TLS_REALLOC(context->cached_handshake, new_len); + if (context->cached_handshake) { + memcpy(context->cached_handshake + context->cached_handshake_len, in, len); + context->cached_handshake_len = new_len; + } else + context->cached_handshake_len = 0; + } + return 0; +} + +#ifdef TLS_LEGACY_SUPPORT +int _private_tls_change_hash_type(struct TLSContext *context) { + if (!context) + return 0; + TLSHash *hash = _private_tls_ensure_hash(context); + if ((hash) && (hash->created) && (context->cached_handshake) && (context->cached_handshake_len)) { + _private_tls_destroy_hash(context); + int res = _private_tls_update_hash(context, context->cached_handshake, context->cached_handshake_len, 0, 0); + TLS_FREE(context->cached_handshake); + context->cached_handshake = NULL; + context->cached_handshake_len = 0; + return res; + } + return 0; +} +#endif + +int _private_tls_done_hash(struct TLSContext *context, unsigned char *hout) { + if (!context) + return 0; + + TLSHash *hash = _private_tls_ensure_hash(context); + if (!hash->created) + return 0; + + int hash_size = 0; + if ((context->version == TLS_V12) || (context->version == DTLS_V12) || (context->version == TLS_V13) || (context->version == DTLS_V13)) { + unsigned char temp[TLS_MAX_SHA_SIZE]; + if (!hout) + hout = temp; + //TLS_HASH_DONE(&hash->hash, hout); + hash_size = _private_tls_mac_length(context); + if (hash_size == TLS_SHA384_MAC_SIZE) { + sha256_done(&hash->hash32, temp); + sha384_done(&hash->hash48, hout); + } else { + sha256_done(&hash->hash32, hout); + sha384_done(&hash->hash48, temp); + hash_size = TLS_SHA256_MAC_SIZE; + } + } else { +#ifdef TLS_LEGACY_SUPPORT + // TLS_V11 + unsigned char temp[TLS_V11_HASH_SIZE]; + if (!hout) + hout = temp; + md5_done(&hash->hash32, hout); + sha1_done(&hash->hash2, hout + 16); + hash_size = TLS_V11_HASH_SIZE; +#endif + } + hash->created = 0; + if (context->cached_handshake) { + // not needed anymore + TLS_FREE(context->cached_handshake); + context->cached_handshake = NULL; + context->cached_handshake_len = 0; + } + return hash_size; +} + +int _private_tls_get_hash_idx(struct TLSContext *context) { + if (!context) + return -1; + switch (_private_tls_mac_length(context)) { + case TLS_SHA256_MAC_SIZE: + return find_hash("sha256"); + case TLS_SHA384_MAC_SIZE: + return find_hash("sha384"); + case TLS_SHA1_MAC_SIZE: + return find_hash("sha1"); + } + return -1; +} + +int _private_tls_get_hash(struct TLSContext *context, unsigned char *hout) { + if (!context) + return 0; + + TLSHash *hash = _private_tls_ensure_hash(context); + if (!hash->created) + return 0; + + int hash_size = 0; + if ((context->version == TLS_V12) || (context->version == DTLS_V12) || (context->version == TLS_V13) || (context->version == DTLS_V13)) { + hash_size = _private_tls_mac_length(context); + hash_state prec; + if (hash_size == TLS_SHA384_MAC_SIZE) { + memcpy(&prec, &hash->hash48, sizeof(hash_state)); + sha384_done(&hash->hash48, hout); + memcpy(&hash->hash48, &prec, sizeof(hash_state)); + } else { + memcpy(&prec, &hash->hash32, sizeof(hash_state)); + hash_size = TLS_SHA256_MAC_SIZE; + sha256_done(&hash->hash32, hout); + memcpy(&hash->hash32, &prec, sizeof(hash_state)); + } + } else { +#ifdef TLS_LEGACY_SUPPORT + // TLS_V11 + hash_state prec; + + memcpy(&prec, &hash->hash32, sizeof(hash_state)); + md5_done(&hash->hash32, hout); + memcpy(&hash->hash32, &prec, sizeof(hash_state)); + + memcpy(&prec, &hash->hash2, sizeof(hash_state)); + sha1_done(&hash->hash2, hout + 16); + memcpy(&hash->hash2, &prec, sizeof(hash_state)); + + hash_size = TLS_V11_HASH_SIZE; +#endif + } + return hash_size; +} + +int _private_tls_write_packet(struct TLSPacket *packet) { + if (!packet) + return -1; + struct TLSContext *context = packet->context; + if (!context) + return -1; + + if (context->tls_buffer) { + int len = context->tls_buffer_len + packet->len; + context->tls_buffer = (unsigned char *)TLS_REALLOC(context->tls_buffer, len); + if (!context->tls_buffer) { + context->tls_buffer_len = 0; + return -1; + } + memcpy(context->tls_buffer + context->tls_buffer_len, packet->buf, packet->len); + context->tls_buffer_len = len; + int written = packet->len; + tls_destroy_packet(packet); + return written; + } + context->tls_buffer_len = packet->len; + context->tls_buffer = packet->buf; + packet->buf = NULL; + packet->len = 0; + packet->size = 0; + tls_destroy_packet(packet); + return context->tls_buffer_len; +} + +int _private_tls_write_app_data(struct TLSContext *context, const unsigned char *buf, unsigned int buf_len) { + if (!context) + return -1; + if ((!buf) || (!buf_len)) + return 0; + + int len = context->application_buffer_len + buf_len; + context->application_buffer = (unsigned char *)TLS_REALLOC(context->application_buffer, len); + if (!context->application_buffer) { + context->application_buffer_len = 0; + return -1; + } + memcpy(context->application_buffer + context->application_buffer_len, buf, buf_len); + context->application_buffer_len = len; + return buf_len; +} + +const unsigned char *tls_get_write_buffer(struct TLSContext *context, unsigned int *outlen) { + if (!outlen) + return NULL; + if (!context) { + *outlen = 0; + return NULL; + } + // check if any error + if (context->sleep_until) { + if (context->sleep_until < time(NULL)) { + *outlen = 0; + return NULL; + } + context->sleep_until = 0; + } + *outlen = context->tls_buffer_len; + return context->tls_buffer; +} + +const unsigned char *tls_get_message(struct TLSContext *context, unsigned int *outlen, unsigned int offset) { + if (!outlen) + return NULL; + if ((!context) || (!context->tls_buffer)) { + *outlen = 0; + return NULL; + } + + if (offset >= context->tls_buffer_len) { + *outlen = 0; + return NULL; + } + // check if any error + if (context->sleep_until) { + if (context->sleep_until < time(NULL)) { + *outlen = 0; + return NULL; + } + context->sleep_until = 0; + } + unsigned char *tls_buffer = &context->tls_buffer[offset]; + unsigned int tls_buffer_len = context->tls_buffer_len - offset; + unsigned int len = 0; + if (context->dtls) { + if (tls_buffer_len < 13) { + *outlen = 0; + return NULL; + } + + len = ntohs(*(unsigned short *)&tls_buffer[11]) + 13; + } else { + if (tls_buffer_len < 5) { + *outlen = 0; + return NULL; + } + len = ntohs(*(unsigned short *)&tls_buffer[3]) + 5; + } + if (len > tls_buffer_len) { + *outlen = 0; + return NULL; + } + + *outlen = len; + return tls_buffer; +} + +void tls_buffer_clear(struct TLSContext *context) { + if ((context) && (context->tls_buffer)) { + TLS_FREE(context->tls_buffer); + context->tls_buffer = NULL; + context->tls_buffer_len = 0; + } +} + +int tls_established(struct TLSContext *context) { + if (context) { + if (context->critical_error) + return -1; + + if (context->connection_status == 0xFF) + return 1; + +#ifdef TLS_12_FALSE_START + // allow false start + if ((!context->is_server) && (context->version == TLS_V12) && (context->false_start)) + return 1; +#endif + } + return 0; +} + +void tls_read_clear(struct TLSContext *context) { + if ((context) && (context->application_buffer)) { + TLS_FREE(context->application_buffer); + context->application_buffer = NULL; + context->application_buffer_len = 0; + } +} + +int tls_read(struct TLSContext *context, unsigned char *buf, unsigned int size) { + if (!context) + return -1; + if ((context->application_buffer) && (context->application_buffer_len)) { + if (context->application_buffer_len < size) + size = context->application_buffer_len; + + memcpy(buf, context->application_buffer, size); + if (context->application_buffer_len == size) { + TLS_FREE(context->application_buffer); + context->application_buffer = NULL; + context->application_buffer_len = 0; + return size; + } + context->application_buffer_len -= size; + memmove(context->application_buffer, context->application_buffer + size, context->application_buffer_len); + return size; + } + return 0; +} + +struct TLSContext *tls_create_context(unsigned char is_server, unsigned short version) { + struct TLSContext *context = (struct TLSContext *)TLS_MALLOC(sizeof(struct TLSContext)); + if (context) { + memset(context, 0, sizeof(struct TLSContext)); + context->is_server = is_server; + if ((version == DTLS_V13) || (version == DTLS_V12) || (version == DTLS_V10)) { + context->dtls = 1; + context->dtls_data = (struct DTLSData *)TLS_MALLOC(sizeof(struct DTLSData)); + if (!context->dtls_data) { + TLS_FREE(context); + return NULL; + } + memset(context->dtls_data, 0, sizeof(struct DTLSData)); + } + context->version = version; + } + return context; +} + +#ifdef TLS_FORWARD_SECRECY +const struct ECCCurveParameters *tls_set_curve(struct TLSContext *context, const struct ECCCurveParameters *curve) { + if (!context->is_server) + return NULL; + const struct ECCCurveParameters *old_curve = context->curve; + context->curve = curve; + return old_curve; +} +#endif + +struct TLSContext *tls_accept(struct TLSContext *context) { + if ((!context) || (!context->is_server)) + return NULL; + + struct TLSContext *child = (struct TLSContext *)TLS_MALLOC(sizeof(struct TLSContext)); + if (child) { + memset(child, 0, sizeof(struct TLSContext)); + child->is_server = 1; + child->is_child = 1; + child->dtls = context->dtls; + if (context->dtls) { + child->dtls_data = (struct DTLSData *)TLS_MALLOC(sizeof(struct DTLSData)); + if (!child->dtls_data) { + TLS_FREE(child); + return NULL; + } + memset(child->dtls_data, 0, sizeof(struct DTLSData)); + } + child->version = context->version; + child->certificates = context->certificates; + child->certificates_count = context->certificates_count; + child->private_key = context->private_key; +#ifdef TLS_ECDSA_SUPPORTED + child->ec_private_key = context->ec_private_key; +#endif + child->exportable = context->exportable; + child->root_certificates = context->root_certificates; + child->root_count = context->root_count; +#ifdef TLS_FORWARD_SECRECY + child->default_dhe_p = context->default_dhe_p; + child->default_dhe_g = context->default_dhe_g; + child->curve = context->curve; +#endif + child->alpn = context->alpn; + child->alpn_count = context->alpn_count; + child->request_client_certificate = context->request_client_certificate; + } + return child; +} + +#ifdef TLS_FORWARD_SECRECY +void _private_tls_dhe_free(struct TLSContext *context) { + if (context->dhe) { + _private_tls_dh_clear_key(context->dhe); + TLS_FREE(context->dhe); + context->dhe = NULL; + } +} + +void _private_tls_dhe_create(struct TLSContext *context) { + _private_tls_dhe_free(context); + context->dhe = (DHKey *)TLS_MALLOC(sizeof(DHKey)); + if (context->dhe) + memset(context->dhe, 0, sizeof(DHKey)); +} + +void _private_tls_ecc_dhe_free(struct TLSContext *context) { + if (context->ecc_dhe) { + ecc_free(context->ecc_dhe); + TLS_FREE(context->ecc_dhe); + context->ecc_dhe = NULL; + } +} + +void _private_tls_ecc_dhe_create(struct TLSContext *context) { + _private_tls_ecc_dhe_free(context); + context->ecc_dhe = (ecc_key *)TLS_MALLOC(sizeof(ecc_key)); + memset(context->ecc_dhe, 0, sizeof(ecc_key)); +} + +int tls_set_default_dhe_pg(struct TLSContext *context, const char *p_hex_str, const char *g_hex_str) { + if ((!context) || (context->is_child) || (!context->is_server) || (!p_hex_str) || (!g_hex_str)) + return 0; + + TLS_FREE(context->default_dhe_p); + TLS_FREE(context->default_dhe_g); + + context->default_dhe_p = NULL; + context->default_dhe_g = NULL; + + size_t p_len = strlen(p_hex_str); + size_t g_len = strlen(g_hex_str); + if ((p_len <= 0) || (g_len <= 0)) + return 0; + context->default_dhe_p = (char *)TLS_MALLOC(p_len + 1); + if (!context->default_dhe_p) + return 0; + context->default_dhe_g = (char *)TLS_MALLOC(g_len + 1); + if (!context->default_dhe_g) + return 0; + + memcpy(context->default_dhe_p, p_hex_str, p_len); + context->default_dhe_p[p_len] = 0; + + memcpy(context->default_dhe_g, g_hex_str, g_len); + context->default_dhe_g[g_len] = 0; + return 1; +} +#endif + +const char *tls_alpn(struct TLSContext *context) { + if (!context) + return NULL; + return context->negotiated_alpn; +} + +int tls_add_alpn(struct TLSContext *context, const char *alpn) { + if ((!context) || (!alpn) || (!alpn[0]) || ((context->is_server) && (context->is_child))) + return TLS_GENERIC_ERROR; + int len = strlen(alpn); + if (tls_alpn_contains(context, alpn, len)) + return 0; + context->alpn = (char **)TLS_REALLOC(context->alpn, (context->alpn_count + 1) * sizeof(char *)); + if (!context->alpn) { + context->alpn_count = 0; + return TLS_NO_MEMORY; + } + char *alpn_ref = (char *)TLS_MALLOC(len+1); + context->alpn[context->alpn_count] = alpn_ref; + if (alpn_ref) { + memcpy(alpn_ref, alpn, len); + alpn_ref[len] = 0; + context->alpn_count++; + } else + return TLS_NO_MEMORY; + return 0; +} + +int tls_alpn_contains(struct TLSContext *context, const char *alpn, unsigned char alpn_size) { + if ((!context) || (!alpn) || (!alpn_size)) + return 0; + + if (context->alpn) { + int i; + for (i = 0; i < context->alpn_count; i++) { + const char *alpn_local = context->alpn[i]; + if (alpn_local) { + int len = strlen(alpn_local); + if (alpn_size == len) { + if (!memcmp(alpn_local, alpn, alpn_size)) + return 1; + } + } + } + } + return 0; +} + +void tls_destroy_context(struct TLSContext *context) { + unsigned int i; + if (!context) + return; + if (!context->is_child) { + if (context->certificates) { + for (i = 0; i < context->certificates_count; i++) + tls_destroy_certificate(context->certificates[i]); + } + if (context->root_certificates) { + for (i = 0; i < context->root_count; i++) + tls_destroy_certificate(context->root_certificates[i]); + TLS_FREE(context->root_certificates); + context->root_certificates = NULL; + } + if (context->private_key) + tls_destroy_certificate(context->private_key); +#ifdef TLS_ECDSA_SUPPORTED + if (context->ec_private_key) + tls_destroy_certificate(context->ec_private_key); +#endif + TLS_FREE(context->certificates); +#ifdef TLS_FORWARD_SECRECY + TLS_FREE(context->default_dhe_p); + TLS_FREE(context->default_dhe_g); +#endif + if (context->alpn) { + for (i = 0; i < context->alpn_count; i++) + TLS_FREE(context->alpn[i]); + TLS_FREE(context->alpn); + } + } + if (context->client_certificates) { + for (i = 0; i < context->client_certificates_count; i++) + tls_destroy_certificate(context->client_certificates[i]); + TLS_FREE(context->client_certificates); + } + context->client_certificates = NULL; + TLS_FREE(context->master_key); + TLS_FREE(context->premaster_key); + if (context->crypto.created) + _private_tls_crypto_done(context); + TLS_FREE(context->message_buffer); + _private_tls_done_hash(context, NULL); + _private_tls_destroy_hash(context); + TLS_FREE(context->tls_buffer); + TLS_FREE(context->application_buffer); + // zero out the keys before free + if ((context->exportable_keys) && (context->exportable_size)) + memset(context->exportable_keys, 0, context->exportable_size); + TLS_FREE(context->exportable_keys); + TLS_FREE(context->sni); + TLS_FREE(context->dtls_cookie); + TLS_FREE(context->cached_handshake); +#ifdef TLS_FORWARD_SECRECY + _private_tls_dhe_free(context); + _private_tls_ecc_dhe_free(context); +#endif +#ifdef TLS_ACCEPT_SECURE_RENEGOTIATION + TLS_FREE(context->verify_data); +#endif + TLS_FREE(context->negotiated_alpn); +#ifdef WITH_TLS_13 + TLS_FREE(context->finished_key); + TLS_FREE(context->remote_finished_key); + TLS_FREE(context->server_finished_hash); +#endif +#ifdef TLS_CURVE25519 + TLS_FREE(context->client_secret); +#endif + // DTLS-related buffer + if (context->dtls_data) { + if (context->dtls_data->fragment) { + TLS_FREE(context->dtls_data->fragment->buffer); + TLS_FREE(context->dtls_data->fragment); + } + while (context->dtls_data->dtls_handshake_list) { + struct TLSHandshakeList *next = (struct TLSHandshakeList *)context->dtls_data->dtls_handshake_list->next; + if (context->dtls_data->dtls_handshake_list->msg) { + TLS_FREE(context->dtls_data->dtls_handshake_list->msg); + } + TLS_FREE(context->dtls_data->dtls_handshake_list); + context->dtls_data->dtls_handshake_list = next; + } + if (context->dtls_data->key_exchange) { + TLS_FREE(context->dtls_data->key_exchange); + } + if (context->dtls_data->remote_fingerprint) { + TLS_FREE(context->dtls_data->remote_fingerprint); + } + TLS_FREE(context->dtls_data); + } + TLS_FREE(context); +} + +#ifdef TLS_ACCEPT_SECURE_RENEGOTIATION +void _private_tls_reset_context(struct TLSContext *context) { + unsigned int i; + if (!context) + return; + if (!context->is_child) { + if (context->certificates) { + for (i = 0; i < context->certificates_count; i++) + tls_destroy_certificate(context->certificates[i]); + } + context->certificates = NULL; + if (context->private_key) { + tls_destroy_certificate(context->private_key); + context->private_key = NULL; + } +#ifdef TLS_ECDSA_SUPPORTED + if (context->ec_private_key) { + tls_destroy_certificate(context->ec_private_key); + context->ec_private_key = NULL; + } +#endif + TLS_FREE(context->certificates); + context->certificates = NULL; +#ifdef TLS_FORWARD_SECRECY + TLS_FREE(context->default_dhe_p); + TLS_FREE(context->default_dhe_g); + context->default_dhe_p = NULL; + context->default_dhe_g = NULL; +#endif + } + if (context->client_certificates) { + for (i = 0; i < context->client_certificates_count; i++) + tls_destroy_certificate(context->client_certificates[i]); + TLS_FREE(context->client_certificates); + } + context->client_certificates = NULL; + TLS_FREE(context->master_key); + context->master_key = NULL; + TLS_FREE(context->premaster_key); + context->premaster_key = NULL; + if (context->crypto.created) + _private_tls_crypto_done(context); + _private_tls_done_hash(context, NULL); + _private_tls_destroy_hash(context); + TLS_FREE(context->application_buffer); + context->application_buffer = NULL; + // zero out the keys before free + if ((context->exportable_keys) && (context->exportable_size)) + memset(context->exportable_keys, 0, context->exportable_size); + TLS_FREE(context->exportable_keys); + context->exportable_keys = NULL; + TLS_FREE(context->sni); + context->sni = NULL; + TLS_FREE(context->dtls_cookie); + context->dtls_cookie = NULL; + TLS_FREE(context->cached_handshake); + context->cached_handshake = NULL; + context->connection_status = 0; +#ifdef TLS_FORWARD_SECRECY + _private_tls_dhe_free(context); + _private_tls_ecc_dhe_free(context); +#endif +} +#endif + +int tls_cipher_supported(struct TLSContext *context, unsigned short cipher) { + if (!context) + return 0; + + switch (cipher) { +#ifdef WITH_TLS_13 + case TLS_AES_128_GCM_SHA256: + case TLS_AES_256_GCM_SHA384: + case TLS_CHACHA20_POLY1305_SHA256: + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) + return 1; + return 0; +#endif +#ifdef TLS_FORWARD_SECRECY +#ifdef TLS_ECDSA_SUPPORTED + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: +#ifdef TLS_CLIENT_ECDSA + if ((context) && (((context->certificates) && (context->certificates_count) && (context->ec_private_key)) || (!context->is_server))) +#else + if ((context) && (context->certificates) && (context->certificates_count) && (context->ec_private_key)) +#endif + return 1; + return 0; + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384: + case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: +#ifdef TLS_WITH_CHACHA20_POLY1305 + case TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: +#endif + if ((context->version == TLS_V12) || (context->version == DTLS_V12)) { +#ifdef TLS_CLIENT_ECDSA + if ((context) && (((context->certificates) && (context->certificates_count) && (context->ec_private_key)) || (!context->is_server))) +#else + if ((context) && (context->certificates) && (context->certificates_count) && (context->ec_private_key)) +#endif + return 1; + } + return 0; +#endif + case TLS_DHE_RSA_WITH_AES_128_CBC_SHA: + case TLS_DHE_RSA_WITH_AES_256_CBC_SHA: + case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: + case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: +#endif + case TLS_RSA_WITH_AES_128_CBC_SHA: + case TLS_RSA_WITH_AES_256_CBC_SHA: + return 1; +#ifdef TLS_FORWARD_SECRECY + case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: + case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: + case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: + case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: + case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: +#ifdef TLS_WITH_CHACHA20_POLY1305 + case TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: +#endif +#endif + case TLS_RSA_WITH_AES_128_GCM_SHA256: + case TLS_RSA_WITH_AES_128_CBC_SHA256: + case TLS_RSA_WITH_AES_256_CBC_SHA256: + case TLS_RSA_WITH_AES_256_GCM_SHA384: + if ((context->version == TLS_V12) || (context->version == DTLS_V12)) + return 1; + return 0; + } + return 0; +} + +int tls_cipher_is_fs(struct TLSContext *context, unsigned short cipher) { + if (!context) + return 0; +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + switch (cipher) { + case TLS_AES_128_GCM_SHA256: + case TLS_AES_256_GCM_SHA384: + case TLS_CHACHA20_POLY1305_SHA256: + return 1; + } + return 0; + } +#endif + switch (cipher) { +#ifdef TLS_ECDSA_SUPPORTED + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: +#ifdef TLS_WITH_CHACHA20_POLY1305 + case TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: +#endif + if ((context) && (context->certificates) && (context->certificates_count) && (context->ec_private_key)) + return 1; + return 0; + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384: + case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: + if ((context->version == TLS_V12) || (context->version == DTLS_V12)) { + if ((context) && (context->certificates) && (context->certificates_count) && (context->ec_private_key)) + return 1; + } + return 0; +#endif + case TLS_DHE_RSA_WITH_AES_128_CBC_SHA: + case TLS_DHE_RSA_WITH_AES_256_CBC_SHA: + case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: + case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: + return 1; + case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: + case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: + case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: + case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: + case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: +#ifdef TLS_WITH_CHACHA20_POLY1305 + case TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: +#endif + if ((context->version == TLS_V12) || (context->version == DTLS_V12)) + return 1; + break; + } + return 0; +} + +#ifdef WITH_KTLS +int _private_tls_prefer_ktls(struct TLSContext *context, unsigned short cipher) { + if ((context->version == TLS_V13) || (context->version == DTLS_V13) || ((context->version != TLS_V12) && (context->version != DTLS_V12))) + return 0; + + switch (cipher) { + case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + if ((context->version == TLS_V13) || (context->version == DTLS_V13) || (context->version == TLS_V12) || (context->version == DTLS_V12)) { + if ((context->certificates) && (context->certificates_count) && (context->ec_private_key)) + return 1; + } + break; + case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + return 1; + } + return 0; +} +#endif + +int tls_choose_cipher(struct TLSContext *context, const unsigned char *buf, int buf_len, int *scsv_set) { + int i; + if (scsv_set) + *scsv_set = 0; + if (!context) + return 0; + int selected_cipher = TLS_NO_COMMON_CIPHER; +#ifdef TLS_FORWARD_SECRECY +#ifdef WITH_KTLS + for (i = 0; i < buf_len; i+=2) { + unsigned short cipher = ntohs(*(unsigned short *)&buf[i]); + if (_private_tls_prefer_ktls(context, cipher)) { + selected_cipher = cipher; + break; + } + } +#endif + if (selected_cipher == TLS_NO_COMMON_CIPHER) { + for (i = 0; i < buf_len; i+=2) { + unsigned short cipher = ntohs(*(unsigned short *)&buf[i]); + if (tls_cipher_is_fs(context, cipher)) { + selected_cipher = cipher; + break; + } + } + } +#endif + for (i = 0; i < buf_len; i+=2) { + unsigned short cipher = ntohs(*(unsigned short *)&buf[i]); + if (cipher == TLS_FALLBACK_SCSV) { + if (scsv_set) + *scsv_set = 1; + if (selected_cipher != TLS_NO_COMMON_CIPHER) + break; + } +#ifndef TLS_ROBOT_MITIGATION + else + if ((selected_cipher == TLS_NO_COMMON_CIPHER) && (tls_cipher_supported(context, cipher))) + selected_cipher = cipher; +#endif + } + return selected_cipher; +} + +int tls_cipher_is_ephemeral(struct TLSContext *context) { + if (context) { + switch (context->cipher) { + case TLS_DHE_RSA_WITH_AES_128_CBC_SHA: + case TLS_DHE_RSA_WITH_AES_256_CBC_SHA: + case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: + case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: + case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: + case TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + return 1; + case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: + case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: + case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: + case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: + case TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384: + case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: + case TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: + return 2; +#ifdef WITH_TLS_13 + case TLS_AES_128_GCM_SHA256: + case TLS_CHACHA20_POLY1305_SHA256: + case TLS_AES_128_CCM_SHA256: + case TLS_AES_128_CCM_8_SHA256: + case TLS_AES_256_GCM_SHA384: + if (context->dhe) + return 1; + return 2; +#endif + } + } + return 0; +} + +const char *tls_cipher_name(struct TLSContext *context) { + if (context) { + switch (context->cipher) { + case TLS_RSA_WITH_AES_128_CBC_SHA: + return "RSA-AES128CBC-SHA"; + case TLS_RSA_WITH_AES_256_CBC_SHA: + return "RSA-AES256CBC-SHA"; + case TLS_RSA_WITH_AES_128_CBC_SHA256: + return "RSA-AES128CBC-SHA256"; + case TLS_RSA_WITH_AES_256_CBC_SHA256: + return "RSA-AES256CBC-SHA256"; + case TLS_RSA_WITH_AES_128_GCM_SHA256: + return "RSA-AES128GCM-SHA256"; + case TLS_RSA_WITH_AES_256_GCM_SHA384: + return "RSA-AES256GCM-SHA384"; + case TLS_DHE_RSA_WITH_AES_128_CBC_SHA: + return "DHE-RSA-AES128CBC-SHA"; + case TLS_DHE_RSA_WITH_AES_256_CBC_SHA: + return "DHE-RSA-AES256CBC-SHA"; + case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: + return "DHE-RSA-AES128CBC-SHA256"; + case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: + return "DHE-RSA-AES256CBC-SHA256"; + case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + return "DHE-RSA-AES128GCM-SHA256"; + case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: + return "DHE-RSA-AES256GCM-SHA384"; + case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: + return "ECDHE-RSA-AES128CBC-SHA"; + case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: + return "ECDHE-RSA-AES256CBC-SHA"; + case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: + return "ECDHE-RSA-AES128CBC-SHA256"; + case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + return "ECDHE-RSA-AES128GCM-SHA256"; + case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: + return "ECDHE-RSA-AES256GCM-SHA384"; + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: + return "ECDHE-ECDSA-AES128CBC-SHA"; + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: + return "ECDHE-ECDSA-AES256CBC-SHA"; + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: + return "ECDHE-ECDSA-AES128CBC-SHA256"; + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384: + return "ECDHE-ECDSA-AES256CBC-SHA384"; + case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + return "ECDHE-ECDSA-AES128GCM-SHA256"; + case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: + return "ECDHE-ECDSA-AES256GCM-SHA384"; + case TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + return "ECDHE-RSA-CHACHA20-POLY1305-SHA256"; + case TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: + return "ECDHE-ECDSA-CHACHA20-POLY1305-SHA256"; + case TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256: + return "ECDHE-DHE-CHACHA20-POLY1305-SHA256"; + case TLS_AES_128_GCM_SHA256: + return "TLS-AES-128-GCM-SHA256"; + case TLS_AES_256_GCM_SHA384: + return "TLS-AES-256-GCM-SHA384"; + case TLS_CHACHA20_POLY1305_SHA256: + return "TLS-CHACHA20-POLY1305-SHA256"; + case TLS_AES_128_CCM_SHA256: + return "TLS-AES-128-CCM-SHA256"; + case TLS_AES_128_CCM_8_SHA256: + return "TLS-AES-128-CCM-8-SHA256"; + } + } + return "UNKNOWN"; +} + +#ifdef TLS_FORWARD_SECRECY +int _private_tls_dh_export_Y(unsigned char *Ybuf, unsigned long *Ylen, DHKey *key) { + unsigned long len; + + if ((Ybuf == NULL) || (Ylen == NULL) || (key == NULL)) + return TLS_GENERIC_ERROR; + + len = mp_unsigned_bin_size(key->y); + if (len > *Ylen) + return TLS_GENERIC_ERROR; + + *Ylen = len; + return 0; + } + +int _private_tls_dh_export_pqY(unsigned char *pbuf, unsigned long *plen, unsigned char *gbuf, unsigned long *glen, unsigned char *Ybuf, unsigned long *Ylen, DHKey *key) { + unsigned long len; + int err; + + if ((pbuf == NULL) || (plen == NULL) || (gbuf == NULL) || (glen == NULL) || (Ybuf == NULL) || (Ylen == NULL) || (key == NULL)) + return TLS_GENERIC_ERROR; + + len = mp_unsigned_bin_size(key->y); + if (len > *Ylen) + return TLS_GENERIC_ERROR; + + if ((err = mp_to_unsigned_bin(key->y, Ybuf)) != CRYPT_OK) + return err; + + *Ylen = len; + + len = mp_unsigned_bin_size(key->p); + if (len > *plen) + return TLS_GENERIC_ERROR; + + if ((err = mp_to_unsigned_bin(key->p, pbuf)) != CRYPT_OK) + return err; + + *plen = len; + + len = mp_unsigned_bin_size(key->g); + if (len > *glen) + return TLS_GENERIC_ERROR; + + if ((err = mp_to_unsigned_bin(key->g, gbuf)) != CRYPT_OK) + return err; + + *glen = len; + + return 0; +} + +void _private_tls_dh_clear_key(DHKey *key) { + mp_clear_multi(key->g, key->p, key->x, key->y, NULL); + key->g = NULL; + key->p = NULL; + key->x = NULL; + key->y = NULL; +} + +int _private_tls_dh_make_key(int keysize, DHKey *key, const char *pbuf, const char *gbuf, int pbuf_len, int gbuf_len) { + unsigned char *buf; + int err; + if (!key) + return TLS_GENERIC_ERROR; + + static prng_state prng; + int wprng = find_prng("sprng"); + if ((err = prng_is_valid(wprng)) != CRYPT_OK) + return err; + + buf = (unsigned char *)TLS_MALLOC(keysize); + if (!buf) + return TLS_NO_MEMORY; + + if (rng_make_prng(keysize, wprng, &prng, NULL) != CRYPT_OK) { + TLS_FREE(buf); + return TLS_GENERIC_ERROR; + } + + if (prng_descriptor[wprng].read(buf, keysize, &prng) != (unsigned long)keysize) { + TLS_FREE(buf); + return TLS_GENERIC_ERROR; + } + + if ((err = mp_init_multi(&key->g, &key->p, &key->x, &key->y, NULL)) != CRYPT_OK) { + TLS_FREE(buf); + + return TLS_GENERIC_ERROR; + } + + if (gbuf_len <= 0) { + if ((err = mp_read_radix(key->g, gbuf, 16)) != CRYPT_OK) { + TLS_FREE(buf); + _private_tls_dh_clear_key(key); + return TLS_GENERIC_ERROR; + } + } else { + if ((err = mp_read_unsigned_bin(key->g, (unsigned char *)gbuf, gbuf_len)) != CRYPT_OK) { + TLS_FREE(buf); + _private_tls_dh_clear_key(key); + return TLS_GENERIC_ERROR; + } + } + + if (pbuf_len <= 0) { + if ((err = mp_read_radix(key->p, pbuf, 16)) != CRYPT_OK) { + TLS_FREE(buf); + _private_tls_dh_clear_key(key); + return TLS_GENERIC_ERROR; + } + } else { + if ((err = mp_read_unsigned_bin(key->p, (unsigned char *)pbuf, pbuf_len)) != CRYPT_OK) { + TLS_FREE(buf); + _private_tls_dh_clear_key(key); + return TLS_GENERIC_ERROR; + } + } + + if ((err = mp_read_unsigned_bin(key->x, buf, keysize)) != CRYPT_OK) { + TLS_FREE(buf); + _private_tls_dh_clear_key(key); + return TLS_GENERIC_ERROR; + } + + if ((err = mp_exptmod(key->g, key->x, key->p, key->y)) != CRYPT_OK) { + TLS_FREE(buf); + _private_tls_dh_clear_key(key); + return TLS_GENERIC_ERROR; + } + + TLS_FREE(buf); + return 0; +} +#endif + +int tls_is_ecdsa(struct TLSContext *context) { + if (!context) + return 0; + switch (context->cipher) { + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: + case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384: + case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: +#ifdef TLS_WITH_CHACHA20_POLY1305 + case TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: +#endif + return 1; + } +#ifdef WITH_TLS_13 + if (context->ec_private_key) + return 1; +#endif + return 0; +} + +struct TLSPacket *tls_build_client_key_exchange(struct TLSContext *context) { + if (context->is_server) { + DEBUG_PRINT("CANNOT BUILD CLIENT KEY EXCHANGE MESSAGE FOR SERVERS\n"); + return NULL; + } + + struct TLSPacket *packet = tls_create_packet(context, TLS_HANDSHAKE, context->version, 0); + tls_packet_uint8(packet, 0x10); +#ifdef TLS_FORWARD_SECRECY + int ephemeral = tls_cipher_is_ephemeral(context); + if ((ephemeral) && (context->premaster_key) && (context->premaster_key_len)) { + if (ephemeral == 1) { + unsigned char dh_Ys[0xFFF]; + unsigned char dh_p[0xFFF]; + unsigned char dh_g[0xFFF]; + unsigned long dh_p_len = sizeof(dh_p); + unsigned long dh_g_len = sizeof(dh_g); + unsigned long dh_Ys_len = sizeof(dh_Ys); + + if (_private_tls_dh_export_pqY(dh_p, &dh_p_len, dh_g, &dh_g_len, dh_Ys, &dh_Ys_len, context->dhe)) { + DEBUG_PRINT("ERROR EXPORTING DHE KEY %p\n", context->dhe); + TLS_FREE(packet); + _private_tls_dhe_free(context); + return NULL; + } + _private_tls_dhe_free(context); + DEBUG_DUMP_HEX_LABEL("Yc", dh_Ys, dh_Ys_len); + tls_packet_uint24(packet, dh_Ys_len + 2); + if (context->dtls) + _private_dtls_handshake_data(context, packet, dh_Ys_len + 2); + tls_packet_uint16(packet, dh_Ys_len); + tls_packet_append(packet, dh_Ys, dh_Ys_len); + } else + if (context->ecc_dhe) { + unsigned char out[TLS_MAX_RSA_KEY]; + unsigned long out_len = TLS_MAX_RSA_KEY; + + if (ecc_ansi_x963_export(context->ecc_dhe, out, &out_len)) { + DEBUG_PRINT("Error exporting ECC key\n"); + TLS_FREE(packet); + return NULL; + } + _private_tls_ecc_dhe_free(context); + tls_packet_uint24(packet, out_len + 1); + if (context->dtls) { + _private_dtls_handshake_data(context, packet, out_len + 1); + context->dtls_seq ++; + } + tls_packet_uint8(packet, out_len); + tls_packet_append(packet, out, out_len); + } +#ifdef TLS_CURVE25519 + else + if ((context->curve == &x25519) && (context->client_secret)) { + static const unsigned char basepoint[32] = {9}; + unsigned char shared_key[32]; + curve25519(shared_key, context->client_secret, basepoint); + tls_packet_uint24(packet, 32 + 1); + tls_packet_uint8(packet, 32); + tls_packet_append(packet, shared_key, 32); + TLS_FREE(context->client_secret); + context->client_secret = NULL; + } +#endif + _private_tls_compute_key(context, 48); + } else +#endif + _private_tls_build_random(packet); + context->connection_status = 2; + tls_packet_update(packet); + return packet; +} + +void _private_dtls_handshake_data(struct TLSContext *context, struct TLSPacket *packet, unsigned int framelength) { + // message seq + tls_packet_uint16(packet, context->dtls_seq); + // fragment offset + tls_packet_uint24(packet, 0); + // fragment length + tls_packet_uint24(packet, framelength); +} + +void _private_dtls_handshake_copyframesize(struct TLSPacket *packet) { + packet->buf[22] = packet->buf[14]; + packet->buf[23] = packet->buf[15]; + packet->buf[24] = packet->buf[16]; +} + +struct TLSPacket *tls_build_server_key_exchange(struct TLSContext *context, int method) { + if (!context->is_server) { + DEBUG_PRINT("CANNOT BUILD SERVER KEY EXCHANGE MESSAGE FOR CLIENTS\n"); + return NULL; + } + + struct TLSPacket *packet = tls_create_packet(context, TLS_HANDSHAKE, context->version, 0); + if ((context->dtls) && (context->dtls_data->key_exchange) && (context->dtls_data->key_exchange_len > packet->len)) { + tls_packet_append(packet, context->dtls_data->key_exchange, context->dtls_data->key_exchange_len); + tls_packet_update(packet); + context->dtls_seq ++; + return packet; + } + int packet_offset = packet->len; + tls_packet_uint8(packet, 0x0C); + unsigned char dummy[3]; + tls_packet_append(packet, dummy, 3); + if (context->dtls) + _private_dtls_handshake_data(context, packet, 0); + int start_len = packet->len; +#ifdef TLS_FORWARD_SECRECY + if (method == KEA_dhe_rsa) { + + if (!context->dhe) { + tls_init(); + _private_tls_dhe_create(context); + + const char *default_dhe_p = context->default_dhe_p; + const char *default_dhe_g = context->default_dhe_g; + int key_size; + if ((!default_dhe_p) || (!default_dhe_g)) { + default_dhe_p = TLS_DH_DEFAULT_P; + default_dhe_g = TLS_DH_DEFAULT_G; + key_size = TLS_DHE_KEY_SIZE / 8; + } else { + key_size = strlen(default_dhe_p); + } + + if (_private_tls_dh_make_key(key_size, context->dhe, default_dhe_p, default_dhe_g, 0, 0)) { + DEBUG_PRINT("ERROR CREATING DHE KEY\n"); + TLS_FREE(packet); + TLS_FREE(context->dhe); + context->dhe = NULL; + return NULL; + } + } + + unsigned char dh_Ys[0xFFF]; + unsigned char dh_p[0xFFF]; + unsigned char dh_g[0xFFF]; + unsigned long dh_p_len = sizeof(dh_p); + unsigned long dh_g_len = sizeof(dh_g); + unsigned long dh_Ys_len = sizeof(dh_Ys); + + if (_private_tls_dh_export_pqY(dh_p, &dh_p_len, dh_g, &dh_g_len, dh_Ys, &dh_Ys_len, context->dhe)) { + DEBUG_PRINT("ERROR EXPORTING DHE KEY\n"); + TLS_FREE(packet); + return NULL; + } + + DEBUG_PRINT("LEN: %lu (%lu, %lu)\n", dh_Ys_len, dh_p_len, dh_g_len); + DEBUG_DUMP_HEX_LABEL("DHE PK", dh_Ys, dh_Ys_len); + DEBUG_DUMP_HEX_LABEL("DHE P", dh_p, dh_p_len); + DEBUG_DUMP_HEX_LABEL("DHE G", dh_g, dh_g_len); + + tls_packet_uint16(packet, dh_p_len); + tls_packet_append(packet, dh_p, dh_p_len); + + tls_packet_uint16(packet, dh_g_len); + tls_packet_append(packet, dh_g, dh_g_len); + + tls_packet_uint16(packet, dh_Ys_len); + tls_packet_append(packet, dh_Ys, dh_Ys_len); + //dh_p + //dh_g + //dh_Ys + } else + if (method == KEA_ec_diffie_hellman) { + // 3 = named curve + if (!context->curve) + context->curve = default_curve; + tls_packet_uint8(packet, 3); + tls_packet_uint16(packet, context->curve->iana); + if (!context->ecc_dhe) { + tls_init(); + _private_tls_ecc_dhe_create(context); + + ltc_ecc_set_type *dp = (ltc_ecc_set_type *)&context->curve->dp; + + if (ecc_make_key_ex(NULL, find_prng("sprng"), context->ecc_dhe, dp)) { + TLS_FREE(context->ecc_dhe); + context->ecc_dhe = NULL; + DEBUG_PRINT("Error generating ECC key\n"); + TLS_FREE(packet); + return NULL; + } + } + unsigned char out[TLS_MAX_RSA_KEY]; + unsigned long out_len = TLS_MAX_RSA_KEY; + if (ecc_ansi_x963_export(context->ecc_dhe, out, &out_len)) { + DEBUG_PRINT("Error exporting ECC key\n"); + TLS_FREE(packet); + return NULL; + } + tls_packet_uint8(packet, out_len); + tls_packet_append(packet, out, out_len); + } else +#endif + { + TLS_FREE(packet); + DEBUG_PRINT("Unsupported ephemeral method: %i\n", method); + return NULL; + } + + // signature + unsigned int params_len = packet->len - start_len; + unsigned int message_len = params_len + TLS_CLIENT_RANDOM_SIZE + TLS_SERVER_RANDOM_SIZE; + unsigned char *message = (unsigned char *)TLS_MALLOC(message_len); + if (message) { + unsigned char out[TLS_MAX_RSA_KEY]; + unsigned long out_len = TLS_MAX_RSA_KEY; + + int hash_algorithm; + if ((context->version != TLS_V13) && (context->version != DTLS_V13) && (context->version != TLS_V12) && (context->version != DTLS_V12)) { + hash_algorithm = _md5_sha1; + } else { + if ((context->version == TLS_V13) || (context->version == DTLS_V13) || (context->version == TLS_V12) || (context->version == DTLS_V12)) + hash_algorithm = sha256; + else + hash_algorithm = sha1; + +#ifdef TLS_ECDSA_SUPPORTED + if (tls_is_ecdsa(context)) { + if ((context->version == TLS_V13) || (context->version == DTLS_V13) || (context->version == TLS_V12)) + hash_algorithm = sha512; + tls_packet_uint8(packet, hash_algorithm); + tls_packet_uint8(packet, ecdsa); + } else +#endif + { + tls_packet_uint8(packet, hash_algorithm); + tls_packet_uint8(packet, rsa_sign); + } + } + + memcpy(message, context->remote_random, TLS_CLIENT_RANDOM_SIZE); + memcpy(message + TLS_CLIENT_RANDOM_SIZE, context->local_random, TLS_SERVER_RANDOM_SIZE); + memcpy(message + TLS_CLIENT_RANDOM_SIZE + TLS_SERVER_RANDOM_SIZE, packet->buf + start_len, params_len); +#ifdef TLS_ECDSA_SUPPORTED + if (tls_is_ecdsa(context)) { + if (_private_tls_sign_ecdsa(context, hash_algorithm, message, message_len, out, &out_len) == 1) { + DEBUG_PRINT("Signing OK! (ECDSA, length %lu)\n", out_len); + tls_packet_uint16(packet, out_len); + tls_packet_append(packet, out, out_len); + } + } else +#endif + if (_private_tls_sign_rsa(context, hash_algorithm, message, message_len, out, &out_len) == 1) { + DEBUG_PRINT("Signing OK! (length %lu)\n", out_len); + tls_packet_uint16(packet, out_len); + tls_packet_append(packet, out, out_len); + } + TLS_FREE(message); + } + if ((!packet->broken) && (packet->buf)) { + int remaining = packet->len - start_len; + int payload_pos = 6; + if (context->dtls) + payload_pos = 14; + packet->buf[payload_pos] = remaining / 0x10000; + remaining %= 0x10000; + packet->buf[payload_pos + 1] = remaining / 0x100; + remaining %= 0x100; + packet->buf[payload_pos + 2] = remaining; + if (context->dtls) { + _private_dtls_handshake_copyframesize(packet); + context->dtls_seq ++; + } + } + tls_packet_update(packet); + if (context->dtls_data) { + if (context->dtls_data->key_exchange) { + TLS_FREE(context->dtls_data->key_exchange); + } + context->dtls_data->key_exchange = (unsigned char *)TLS_MALLOC(packet->len - packet_offset); + if (context->dtls_data->key_exchange) { + context->dtls_data->key_exchange_len = packet->len - packet_offset; + memcpy(context->dtls_data->key_exchange, packet->buf + packet_offset, context->dtls_data->key_exchange_len); + } + } + return packet; +} + +void _private_tls_set_session_id(struct TLSContext *context) { + if (((context->version == TLS_V13) || (context->version == DTLS_V13)) && (context->session_size == TLS_MAX_SESSION_ID)) + return; + if (tls_random(context->session, TLS_MAX_SESSION_ID)) + context->session_size = TLS_MAX_SESSION_ID; + else + context->session_size = 0; +} + +struct TLSPacket *tls_build_hello(struct TLSContext *context, int tls13_downgrade) { + tls_init(); +#ifdef WITH_TLS_13 + if (context->connection_status == 4) { + static unsigned char sha256_helloretryrequest[] = {0xCF, 0x21, 0xAD, 0x74, 0xE5, 0x9A, 0x61, 0x11, 0xBE, 0x1D, 0x8C, 0x02, 0x1E, 0x65, 0xB8, 0x91, 0xC2, 0xA2, 0x11, 0x16, 0x7A, 0xBB, 0x8C, 0x5E, 0x07, 0x9E, 0x09, 0xE2, 0xC8, 0xA8, 0x33, 0x9C}; + memcpy(context->local_random, sha256_helloretryrequest, 32); + unsigned char header[4] = {0xFE, 0, 0, 0}; + unsigned char hash[TLS_MAX_SHA_SIZE ]; + int hash_len = _private_tls_done_hash(context, hash); + header[3] = (unsigned char)hash_len; + _private_tls_update_hash(context, header, sizeof(header), 1, 0); + _private_tls_update_hash(context, hash, hash_len, 1, 0); + } else + if ((!context->is_server) || ((context->version != TLS_V13) && (context->version != DTLS_V13))) +#endif + if ((!context->dtls) || (!context->dtls_data->has_random)) { + if (!tls_random(context->local_random, context->is_server ? TLS_SERVER_RANDOM_SIZE : TLS_CLIENT_RANDOM_SIZE)) + return NULL; + // if (!context->is_server) + *(unsigned int *)context->local_random = htonl((unsigned int)time(NULL)); + + if (context->dtls) + context->dtls_data->has_random = 1; + } + + if ((context->is_server) && (tls13_downgrade)) { + if ((tls13_downgrade == TLS_V12) || (tls13_downgrade == DTLS_V12)) + memcpy(context->local_random + TLS_SERVER_RANDOM_SIZE - 8, "DOWNGRD\x01", 8); + else + memcpy(context->local_random + TLS_SERVER_RANDOM_SIZE - 8, "DOWNGRD\x00", 8); + } + unsigned short packet_version = context->version; + unsigned short version = context->version; +#ifdef WITH_TLS_13 + if (context->version == TLS_V13) + version = TLS_V12; + else + if (context->version == DTLS_V13) + version = DTLS_V12; +#endif + struct TLSPacket *packet = tls_create_packet(context, TLS_HANDSHAKE, version, 0); + if (packet) { + // hello + if (context->is_server) + tls_packet_uint8(packet, 0x02); + else + tls_packet_uint8(packet, 0x01); + unsigned char dummy[3]; + tls_packet_append(packet, dummy, 3); + + if (context->dtls) + _private_dtls_handshake_data(context, packet, 0); + + int start_len = packet->len; + tls_packet_uint16(packet, version); + if (context->is_server) + tls_packet_append(packet, context->local_random, TLS_SERVER_RANDOM_SIZE); + else + tls_packet_append(packet, context->local_random, TLS_CLIENT_RANDOM_SIZE); + +#ifdef IGNORE_SESSION_ID + // session size + tls_packet_uint8(packet, 0); +#else + if ((!context->dtls) || (!context->session_size)) + _private_tls_set_session_id(context); + // session size + tls_packet_uint8(packet, context->session_size); + if (context->session_size) + tls_packet_append(packet, context->session, context->session_size); +#endif + + int extension_len = 0; + int alpn_len = 0; + int alpn_negotiated_len = 0; + int i; +#ifdef WITH_TLS_13 + unsigned char shared_key[TLS_MAX_RSA_KEY]; + unsigned long shared_key_len = TLS_MAX_RSA_KEY; + unsigned short shared_key_short = 0; + int selected_group = 0; + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + if (context->connection_status == 4) { + // connection_status == 4 => hello retry request + extension_len += 6; + } else + if (context->is_server) { +#ifdef TLS_CURVE25519 + if (context->curve == &x25519) { + extension_len += 8 + 32; + shared_key_short = (unsigned short)32; + if (context->finished_key) { + memcpy(shared_key, context->finished_key, 32); + TLS_FREE(context->finished_key); + context->finished_key = NULL; + } + selected_group = context->curve->iana; + // make context->curve NULL (x25519 is a different implementation) + context->curve = NULL; + } else +#endif + if (context->ecc_dhe) { + if (ecc_ansi_x963_export(context->ecc_dhe, shared_key, &shared_key_len)) { + DEBUG_PRINT("Error exporting ECC DHE key\n"); + tls_destroy_packet(packet); + return tls_build_alert(context, 1, internal_error); + } + _private_tls_ecc_dhe_free(context); + extension_len += 8 + shared_key_len; + shared_key_short = (unsigned short)shared_key_len; + if (context->curve) + selected_group = context->curve->iana; + } else + if (context->dhe) { + selected_group = context->dhe->iana; + _private_tls_dh_export_Y(shared_key, &shared_key_len, context->dhe); + _private_tls_dhe_free(context); + extension_len += 8 + shared_key_len; + shared_key_short = (unsigned short)shared_key_len; + } + } + // supported versions + if (context->is_server) + extension_len += 6; + else + extension_len += 9; + } + if ((context->is_server) && (context->negotiated_alpn) && (context->version != TLS_V13) && (context->version != DTLS_V13)) { +#else + if ((context->is_server) && (context->negotiated_alpn)) { +#endif + alpn_negotiated_len = strlen(context->negotiated_alpn); + alpn_len = alpn_negotiated_len + 1; + extension_len += alpn_len + 6; + } else + if ((!context->is_server) && (context->alpn_count)) { + for (i = 0; i < context->alpn_count;i++) { + if (context->alpn[i]) { + int len = strlen(context->alpn[i]); + if (len) + alpn_len += len + 1; + } + } + if (alpn_len) + extension_len += alpn_len + 6; + } + + // ciphers + if (context->is_server) { + // fallback ... this should never happen + if (!context->cipher) + context->cipher = TLS_DHE_RSA_WITH_AES_128_CBC_SHA; + + tls_packet_uint16(packet, context->cipher); + // no compression + tls_packet_uint8(packet, 0); +#ifndef STRICT_TLS + if ((context->version == TLS_V13) || (context->version == DTLS_V13) || (context->version == TLS_V12) || (context->version == DTLS_V12)) { + // extensions size +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + tls_packet_uint16(packet, extension_len); + } else +#endif + { + if (context->dtls == 4) { + // use_srtp + extension_len += 9; + // record_size_limit + // extension_len += 6; +#ifdef TLS_DTLS_EXTENDED_MASTER_SECRET + if ((context->dtls) && (context->dtls_data) && (context->dtls_data->extended_master_secret)) + extension_len += 4; +#endif + } + + tls_packet_uint16(packet, 5 + extension_len); + // secure renegotation + // advertise it, but refuse renegotiation + tls_packet_uint16(packet, 0xff01); +#ifdef TLS_ACCEPT_SECURE_RENEGOTIATION + // a little defensive + if ((context->verify_len) && (!context->verify_data)) + context->verify_len = 0; + tls_packet_uint16(packet, context->verify_len + 1); + tls_packet_uint8(packet, context->verify_len); + if (context->verify_len) + tls_packet_append(packet, (unsigned char *)context->verify_data, context->verify_len); +#else + tls_packet_uint16(packet, 1); + tls_packet_uint8(packet, 0); +#endif + } + if (alpn_len) { + tls_packet_uint16(packet, 0x10); + tls_packet_uint16(packet, alpn_len + 2); + tls_packet_uint16(packet, alpn_len); + + tls_packet_uint8(packet, alpn_negotiated_len); + tls_packet_append(packet, (unsigned char *)context->negotiated_alpn, alpn_negotiated_len); + } + if (context->dtls == 4) { +#ifdef TLS_DTLS_EXTENDED_MASTER_SECRET + if ((context->dtls) && (context->dtls_data) && (context->dtls_data->extended_master_secret)) { + tls_packet_uint16(packet, 0x17); + tls_packet_uint16(packet, 0); + } +#endif + // record_size_limit + // tls_packet_uint16(packet, 0x1C); + // tls_packet_uint16(packet, 2); + // tls_packet_uint16(packet, 0x4000); + + tls_packet_uint16(packet, 0x0E); + tls_packet_uint16(packet, 5); + tls_packet_uint16(packet, 2); + tls_packet_uint16(packet, SRTP_AES128_CM_HMAC_SHA1_80); + tls_packet_uint8(packet, 0); + } + } +#endif + } else { + if (context->dtls) { + tls_packet_uint8(packet, context->dtls_cookie_len); + if (context->dtls_cookie_len) + tls_packet_append(packet, context->dtls_cookie, context->dtls_cookie_len); + } + +#ifndef STRICT_TLS +#ifdef WITH_TLS_13 +#ifdef TLS_FORWARD_SECRECY + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + #ifdef TLS_WITH_CHACHA20_POLY1305 + tls_packet_uint16(packet, TLS_CIPHERS_SIZE(9, 0)); + tls_packet_uint16(packet, TLS_AES_128_GCM_SHA256); + tls_packet_uint16(packet, TLS_AES_256_GCM_SHA384); + tls_packet_uint16(packet, TLS_CHACHA20_POLY1305_SHA256); + #else + tls_packet_uint16(packet, TLS_CIPHERS_SIZE(8, 0)); + tls_packet_uint16(packet, TLS_AES_128_GCM_SHA256); + tls_packet_uint16(packet, TLS_AES_256_GCM_SHA384); + #endif + #ifdef TLS_PREFER_CHACHA20 + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256); + tls_packet_uint16(packet, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256); + tls_packet_uint16(packet, TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256); + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256); + tls_packet_uint16(packet, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); + tls_packet_uint16(packet, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256); + #else + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256); + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256); + tls_packet_uint16(packet, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); + tls_packet_uint16(packet, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256); + tls_packet_uint16(packet, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256); + tls_packet_uint16(packet, TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256); + #endif + } else +#endif +#endif + if ((context->version == TLS_V12) || (context->version == DTLS_V12)) { +#endif +#ifdef TLS_FORWARD_SECRECY +#ifdef TLS_CLIENT_ECDHE +#ifdef TLS_WITH_CHACHA20_POLY1305 + #ifdef TLS_CLIENT_ECDSA + tls_packet_uint16(packet, TLS_CIPHERS_SIZE(16, 5)); + #ifdef TLS_PREFER_CHACHA20 + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256); + #endif + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256); + #ifndef TLS_PREFER_CHACHA20 + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256); + #endif + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256); + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA); + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA); + #else + // sizeof ciphers (16 ciphers * 2 bytes) + tls_packet_uint16(packet, TLS_CIPHERS_SIZE(11, 5)); + #endif +#else + #ifdef TLS_CLIENT_ECDSA + tls_packet_uint16(packet, TLS_CIPHERS_SIZE(13, 5)); + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256); + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256); + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA); + tls_packet_uint16(packet, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA); + #else + // sizeof ciphers (14 ciphers * 2 bytes) + tls_packet_uint16(packet, TLS_CIPHERS_SIZE(9, 5)); + #endif +#endif +#ifdef TLS_WITH_CHACHA20_POLY1305 + #ifdef TLS_PREFER_CHACHA20 + tls_packet_uint16(packet, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256); + #endif +#endif + tls_packet_uint16(packet, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); + tls_packet_uint16(packet, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA); + tls_packet_uint16(packet, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA); + tls_packet_uint16(packet, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256); +#ifdef TLS_WITH_CHACHA20_POLY1305 + #ifndef TLS_PREFER_CHACHA20 + tls_packet_uint16(packet, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256); + #endif +#endif +#else +#ifdef TLS_WITH_CHACHA20_POLY1305 + // sizeof ciphers (11 ciphers * 2 bytes) + tls_packet_uint16(packet, TLS_CIPHERS_SIZE(6, 5)); +#else + // sizeof ciphers (10 ciphers * 2 bytes) + tls_packet_uint16(packet, TLS_CIPHERS_SIZE(5, 5)); +#endif +#endif + // not yet supported, because the first message sent (this one) + // is already hashed by the client with sha256 (sha384 not yet supported client-side) + // but is fully suported server-side + // tls_packet_uint16(packet, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384); + tls_packet_uint16(packet, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256); + tls_packet_uint16(packet, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256); + tls_packet_uint16(packet, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256); + tls_packet_uint16(packet, TLS_DHE_RSA_WITH_AES_256_CBC_SHA); + tls_packet_uint16(packet, TLS_DHE_RSA_WITH_AES_128_CBC_SHA); +#ifdef TLS_WITH_CHACHA20_POLY1305 + tls_packet_uint16(packet, TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256); +#endif +#else + tls_packet_uint16(packet, TLS_CIPHERS_SIZE(0, 5)); +#endif + // tls_packet_uint16(packet, TLS_RSA_WITH_AES_256_GCM_SHA384); +#ifndef TLS_ROBOT_MITIGATION + tls_packet_uint16(packet, TLS_RSA_WITH_AES_128_GCM_SHA256); + tls_packet_uint16(packet, TLS_RSA_WITH_AES_256_CBC_SHA256); + tls_packet_uint16(packet, TLS_RSA_WITH_AES_128_CBC_SHA256); + tls_packet_uint16(packet, TLS_RSA_WITH_AES_256_CBC_SHA); + tls_packet_uint16(packet, TLS_RSA_WITH_AES_128_CBC_SHA); +#endif +#ifndef STRICT_TLS + } else { +#ifdef TLS_FORWARD_SECRECY +#ifdef TLS_CLIENT_ECDHE + tls_packet_uint16(packet, TLS_CIPHERS_SIZE(5, 2)); + tls_packet_uint16(packet, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA); + tls_packet_uint16(packet, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA); +#else + tls_packet_uint16(packet, TLS_CIPHERS_SIZE(3, 2)); +#endif + tls_packet_uint16(packet, TLS_DHE_RSA_WITH_AES_256_CBC_SHA); + tls_packet_uint16(packet, TLS_DHE_RSA_WITH_AES_256_CBC_SHA); + tls_packet_uint16(packet, TLS_DHE_RSA_WITH_AES_128_CBC_SHA); +#else + tls_packet_uint16(packet, TLS_CIPHERS_SIZE(0, 2)); +#endif +#ifndef TLS_ROBOT_MITIGATION + tls_packet_uint16(packet, TLS_RSA_WITH_AES_256_CBC_SHA); + tls_packet_uint16(packet, TLS_RSA_WITH_AES_128_CBC_SHA); +#endif + } +#endif + // compression + tls_packet_uint8(packet, 1); + // no compression + tls_packet_uint8(packet, 0); + + if ((context->version == TLS_V12) || (context->version == DTLS_V12) || (context->version == TLS_V13) || (context->version == DTLS_V13)) { + if (context->dtls == 4) { + // use_srtp + extension_len += 9;// 15; + } + + int sni_len = 0; + if (context->sni) + sni_len = strlen(context->sni); + +#ifdef TLS_CLIENT_ECDHE + extension_len += 12; +#endif + if (sni_len) + extension_len += sni_len + 9; +#ifdef WITH_TLS_13 + if ((!context->is_server) && ((context->version == TLS_V13) || (context->version == DTLS_V13))) { +#ifdef TLS_CURVE25519 + extension_len += 70; +#else + // secp256r1 produces 65 bytes export + extension_len += 103; +#endif + } +#endif + if ((context->version == TLS_V12) || (context->version == DTLS_V12)) { + // signature algorithms + extension_len += 6 + 2 * TLS_HASH_ALGO_NUMBER * TLS_SIGN_ALGO_NUMBER; + } + + tls_packet_uint16(packet, extension_len); + + if (sni_len) { + // sni extension + tls_packet_uint16(packet, 0x00); + // sni extension len + tls_packet_uint16(packet, sni_len + 5); + // sni len + tls_packet_uint16(packet, sni_len + 3); + // sni type + tls_packet_uint8(packet, 0); + // sni host len + tls_packet_uint16(packet, sni_len); + tls_packet_append(packet, (unsigned char *)context->sni, sni_len); + } +#ifdef TLS_FORWARD_SECRECY +#ifdef TLS_CLIENT_ECDHE + // supported groups + tls_packet_uint16(packet, 0x0A); + tls_packet_uint16(packet, 8); + // 3 curves x 2 bytes + tls_packet_uint16(packet, 6); + tls_packet_uint16(packet, secp256r1.iana); + tls_packet_uint16(packet, secp384r1.iana); +#ifdef TLS_CURVE25519 + tls_packet_uint16(packet, x25519.iana); +#else + tls_packet_uint16(packet, secp224r1.iana); +#endif +#endif +#endif + if (alpn_len) { + tls_packet_uint16(packet, 0x10); + tls_packet_uint16(packet, alpn_len + 2); + tls_packet_uint16(packet, alpn_len); + + for (i = 0; i < context->alpn_count;i++) { + if (context->alpn[i]) { + int len = strlen(context->alpn[i]); + if (len) { + tls_packet_uint8(packet, len); + tls_packet_append(packet, (unsigned char *)context->alpn[i], len); + } + } + } + } + + if (context->dtls == 4) { + tls_packet_uint16(packet, 0x0E); + tls_packet_uint16(packet, 5); + tls_packet_uint16(packet, 2); + tls_packet_uint16(packet, SRTP_AES128_CM_HMAC_SHA1_80); + tls_packet_uint8(packet, 0); + + /* tls_packet_uint16(packet, 0x0E); + tls_packet_uint16(packet, 11); + tls_packet_uint16(packet, 8); + tls_packet_uint16(packet, SRTP_AEAD_AES_128_GCM); + tls_packet_uint16(packet, SRTP_AEAD_AES_256_GCM); + tls_packet_uint16(packet, SRTP_AES128_CM_HMAC_SHA1_80); + tls_packet_uint16(packet, SRTP_AES128_CM_HMAC_SHA1_32); + tls_packet_uint8(packet, 0); */ + } + + } + } +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + // supported versions + tls_packet_uint16(packet, 0x2B); + if (context->is_server) { + tls_packet_uint16(packet, 2); + if (context->version == TLS_V13) + tls_packet_uint16(packet, context->tls13_version ? context->tls13_version : TLS_V13); + else + tls_packet_uint16(packet, context->version); + } else { + tls_packet_uint16(packet, 5); + tls_packet_uint8(packet, 4); + tls_packet_uint16(packet, TLS_V13); + tls_packet_uint16(packet, 0x7F1C); + } + if (context->connection_status == 4) { + // fallback to the mandatory secp256r1 + tls_packet_uint16(packet, 0x33); + tls_packet_uint16(packet, 2); + tls_packet_uint16(packet, (unsigned short)secp256r1.iana); + } + if (((shared_key_short) && (selected_group)) || (!context->is_server)) { + // key share + tls_packet_uint16(packet, 0x33); + if (context->is_server) { + tls_packet_uint16(packet, shared_key_short + 4); + tls_packet_uint16(packet, (unsigned short)selected_group); + tls_packet_uint16(packet, shared_key_short); + tls_packet_append(packet, (unsigned char *)shared_key, shared_key_short); + } else { +#ifdef TLS_CURVE25519 + // make key + shared_key_short = 32; + tls_packet_uint16(packet, shared_key_short + 6); + tls_packet_uint16(packet, shared_key_short + 4); + + TLS_FREE(context->client_secret); + context->client_secret = (unsigned char *)TLS_MALLOC(32); + if (!context->client_secret) { + DEBUG_PRINT("ERROR IN TLS_MALLOC"); + TLS_FREE(packet); + return NULL; + + } + + static const unsigned char basepoint[32] = {9}; + + tls_random(context->client_secret, 32); + + context->client_secret[0] &= 248; + context->client_secret[31] &= 127; + context->client_secret[31] |= 64; + + curve25519(shared_key, context->client_secret, basepoint); + + tls_packet_uint16(packet, (unsigned short)x25519.iana); + tls_packet_uint16(packet, shared_key_short); + tls_packet_append(packet, (unsigned char *)shared_key, shared_key_short); +#else + // make key + shared_key_short = 65; + tls_packet_uint16(packet, shared_key_short + 6); + tls_packet_uint16(packet, shared_key_short + 4); + + _private_tls_ecc_dhe_create(context); + ltc_ecc_set_type *dp = (ltc_ecc_set_type *)&secp256r1.dp; + + if (ecc_make_key_ex(NULL, find_prng("sprng"), context->ecc_dhe, dp)) { + TLS_FREE(context->ecc_dhe); + context->ecc_dhe = NULL; + DEBUG_PRINT("Error generating ECC key\n"); + TLS_FREE(packet); + return NULL; + } + unsigned char out[TLS_MAX_RSA_KEY]; + unsigned long out_len = shared_key_short; + if (ecc_ansi_x963_export(context->ecc_dhe, out, &out_len)) { + DEBUG_PRINT("Error exporting ECC key\n"); + TLS_FREE(packet); + return NULL; + } + + tls_packet_uint16(packet, (unsigned short)secp256r1.iana); + tls_packet_uint16(packet, out_len); + tls_packet_append(packet, (unsigned char *)out, shared_key_short); +#endif + } + } + } +#endif + if ((context->version == TLS_V12) || (context->version == TLS_V13) || (context->version == DTLS_V13)) { + if (!context->is_server) { + // signature algorithms + tls_packet_uint16(packet, 0x0D); // type + tls_packet_uint16(packet, 2 + 2 * TLS_HASH_ALGO_NUMBER * TLS_SIGN_ALGO_NUMBER); // length + tls_packet_uint16(packet, 2 * TLS_HASH_ALGO_NUMBER * TLS_SIGN_ALGO_NUMBER); // actual length of the list and items themselves further + for (TLSHashAlgorithm hash = md5; !(hash > sha512); ++hash) { + for (TLSSignatureAlgorithm sign = rsa; !(sign > ecdsa); ++sign) { + tls_packet_uint16(packet, ((uint16_t)(hash) << 8) | (sign & 0xFF)); + } + } + } + } + + if ((!packet->broken) && (packet->buf)) { + int remaining = packet->len - start_len; + int payload_pos = 6; + if (context->dtls) + payload_pos = 14; + packet->buf[payload_pos] = remaining / 0x10000; + remaining %= 0x10000; + packet->buf[payload_pos + 1] = remaining / 0x100; + remaining %= 0x100; + packet->buf[payload_pos + 2] = remaining; + if (context->dtls) { + _private_dtls_handshake_copyframesize(packet); + context->dtls_seq ++; + } + } + tls_packet_update(packet); + } + return packet; +} + +struct TLSPacket *tls_certificate_request(struct TLSContext *context) { + if ((!context) || (!context->is_server)) + return NULL; + + unsigned short packet_version = context->version; + struct TLSPacket *packet = tls_create_packet(context, TLS_HANDSHAKE, packet_version, 0); + if (packet) { + // certificate request + tls_packet_uint8(packet, 0x0D); + unsigned char dummy[3]; + tls_packet_append(packet, dummy, 3); + if (context->dtls) + _private_dtls_handshake_data(context, packet, 0); + int start_len = packet->len; +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + // certificate request context + tls_packet_uint8(packet, 0); + // extensions + tls_packet_uint16(packet, 18); + // signature algorithms + tls_packet_uint16(packet, 0x0D); + tls_packet_uint16(packet, 14); + tls_packet_uint16(packet, 12); + // rsa_pkcs1_sha256 + // tls_packet_uint16(packet, 0x0401); + // rsa_pkcs1_sha384 + // tls_packet_uint16(packet, 0x0501); + // rsa_pkcs1_sha512 + // tls_packet_uint16(packet, 0x0601); + + // ecdsa_secp256r1_sha256 + tls_packet_uint16(packet, 0x0403); + // ecdsa_secp384r1_sha384 + tls_packet_uint16(packet, 0x0503); + // ecdsa_secp521r1_sha512 + tls_packet_uint16(packet, 0x0604); + // rsa_pss_rsae_sha256 + tls_packet_uint16(packet, 0x0804); + // rsa_pss_rsae_sha384 + tls_packet_uint16(packet, 0x0805); + // rsa_pss_rsae_sha512 + tls_packet_uint16(packet, 0x0806); + } else +#endif + { +#ifdef TLS_ECDSA_SUPPORTED + tls_packet_uint8(packet, 2); + tls_packet_uint8(packet, rsa_sign); + tls_packet_uint8(packet, ecdsa_sign); +#else + tls_packet_uint8(packet, 1); + tls_packet_uint8(packet, rsa_sign); +#endif + if ((context->version == TLS_V12) || (context->version == DTLS_V12)) { + // 10 pairs of 2 bytes +#ifdef TLS_ECDSA_SUPPORTED + tls_packet_uint16(packet, 14); + // ecdsa_secp256r1_sha256 + tls_packet_uint16(packet, 0x0403); + // // ecdsa_secp384r1_sha384 + tls_packet_uint16(packet, 0x0503); +#else + tls_packet_uint16(packet, 10); +#endif + tls_packet_uint8(packet, sha256); + tls_packet_uint8(packet, rsa); + tls_packet_uint8(packet, sha1); + tls_packet_uint8(packet, rsa); + tls_packet_uint8(packet, sha384); + tls_packet_uint8(packet, rsa); + tls_packet_uint8(packet, sha512); + tls_packet_uint8(packet, rsa); + tls_packet_uint8(packet, md5); + tls_packet_uint8(packet, rsa); + } + // no DistinguishedName yet + tls_packet_uint16(packet, 0); + } + if (!packet->broken) { + int remaining = packet->len - start_len; + int payload_pos = 6; + if (context->dtls) + payload_pos = 14; + packet->buf[payload_pos] = remaining / 0x10000; + remaining %= 0x10000; + packet->buf[payload_pos + 1] = remaining / 0x100; + remaining %= 0x100; + packet->buf[payload_pos + 2] = remaining; + + if (context->dtls) { + _private_dtls_handshake_copyframesize(packet); + context->dtls_seq++; + } + } + tls_packet_update(packet); + } + return packet; +} + +int _private_dtls_build_cookie(struct TLSContext *context) { + if ((!context->dtls_cookie) || (!context->dtls_cookie_len)) { + context->dtls_cookie = (unsigned char *)TLS_MALLOC(DTLS_COOKIE_SIZE); + if (!context->dtls_cookie) + return 0; + +#ifdef WITH_RANDOM_DLTS_COOKIE + if (!tls_random(context->dtls_cookie, DTLS_COOKIE_SIZE)) { + TLS_FREE(context->dtls_cookie); + context->dtls_cookie = NULL; + return 0; + } + context->dtls_cookie_len = DTLS_COOKIE_SIZE; +#else + hmac_state hmac; + hmac_init(&hmac, find_hash("sha256"), dtls_secret, sizeof(dtls_secret)); + hmac_process(&hmac, context->remote_random, TLS_CLIENT_RANDOM_SIZE); + + unsigned long out_size = DTLS_COOKIE_SIZE; + hmac_done(&hmac, context->dtls_cookie, &out_size); + + context->dtls_cookie_len = out_size; +#endif + } + return 1; +} + +struct TLSPacket *tls_build_verify_request(struct TLSContext *context) { + if ((!context->is_server) || (!context->dtls)) + return NULL; + + if ((!context->dtls_cookie) || (!context->dtls_cookie_len)) { + if (!_private_dtls_build_cookie(context)) + return NULL; + } + + unsigned short packet_version = context->version; + struct TLSPacket *packet = tls_create_packet(context, TLS_HANDSHAKE, packet_version, 0); + if (packet) { + // verify request + tls_packet_uint8(packet, 0x03); + // 24-bit length + tls_packet_uint24(packet, context->dtls_cookie_len + 3); + // 16-bit message_sequence + tls_packet_uint16(packet, 0); + // 24-bit fragment_offset + tls_packet_uint24(packet, 0); + // 24-bit fragment_length + tls_packet_uint24(packet, context->dtls_cookie_len + 3); + // server_version + tls_packet_uint16(packet, context->version); + tls_packet_uint8(packet, context->dtls_cookie_len); + tls_packet_append(packet, context->dtls_cookie, context->dtls_cookie_len); + tls_packet_update(packet); + } + return packet; +} + +int _private_dtls_check_packet(struct TLSContext *context, const unsigned char *buf, int buf_len) { + CHECK_SIZE(11, buf_len, TLS_NEED_MORE_DATA) + + unsigned int bytes_to_follow = buf[0] * 0x10000 + buf[1] * 0x100 + buf[2]; + // not used: unsigned short message_seq = ntohs(*(unsigned short *)&buf[3]); + unsigned int fragment_offset = buf[5] * 0x10000 + buf[6] * 0x100 + buf[7]; + unsigned int fragment_length = buf[8] * 0x10000 + buf[9] * 0x100 + buf[10]; + + if ((fragment_offset) || (fragment_length != bytes_to_follow)) { + if ((context->dtls_data->fragment) && (context->dtls_data->fragment->written == bytes_to_follow)) + return bytes_to_follow; + + return TLS_FEATURE_NOT_SUPPORTED; + } + return bytes_to_follow; +} + +void _private_dtls_reset(struct TLSContext *context) { + context->dtls_epoch_local = 0; + context->dtls_epoch_remote = 0; + // context->local_sequence_number = 1; + context->dtls_seq = 0; + _private_tls_destroy_hash(context); + context->connection_status = 0; +} + +int tls_parse_verify_request(struct TLSContext *context, const unsigned char *buf, int buf_len, unsigned int *write_packets) { + *write_packets = 0; + if ((context->connection_status != 0) || (!context->dtls)) { + DEBUG_PRINT("UNEXPECTED VERIFY REQUEST MESSAGE\n"); + return TLS_UNEXPECTED_MESSAGE; + } + int res = 11; + int bytes_to_follow = _private_dtls_check_packet(context, buf, buf_len); + if (bytes_to_follow < 0) + return bytes_to_follow; + + CHECK_SIZE(bytes_to_follow, buf_len - res, TLS_NEED_MORE_DATA) + // not used: unsigned short version = ntohs(*(unsigned short *)&buf[res]); + res += 2; + unsigned char len = buf[res]; + res++; + TLS_FREE(context->dtls_cookie); + context->dtls_cookie_len = 0; + if (len) { + CHECK_SIZE(len, buf_len - res, TLS_NEED_MORE_DATA) + context->dtls_cookie = (unsigned char *)TLS_MALLOC(len); + if (!context->dtls_cookie) + return TLS_NO_MEMORY; + context->dtls_cookie_len = len; + memcpy(context->dtls_cookie, &buf[res], len); + res += len; + *write_packets = 4; + } + + // reset context + _private_dtls_reset(context); + return res; +} + +void _private_dtls_reset_cookie(struct TLSContext *context) { + TLS_FREE(context->dtls_cookie); + context->dtls_cookie = NULL; + context->dtls_cookie_len = 0; +} + +#ifdef WITH_TLS_13 +int _private_tls_parse_key_share(struct TLSContext *context, const unsigned char *buf, int buf_len) { + int i = 0; + struct ECCCurveParameters *curve = 0; + DHKey *dhkey = 0; + int dhe_key_size = 0; + const unsigned char *buffer = NULL; + unsigned char *out2; + unsigned long out_size; + unsigned short key_size = 0; + while (buf_len >= 4) { + unsigned short named_group = ntohs(*(unsigned short *)&buf[i]); + i += 2; + buf_len -= 2; + + key_size = ntohs(*(unsigned short *)&buf[i]); + i += 2; + buf_len -= 2; + + if (key_size > buf_len) + return TLS_BROKEN_PACKET; + + switch (named_group) { + case 0x0017: + curve = &secp256r1; + buffer = &buf[i]; + DEBUG_PRINT("KEY SHARE => secp256r1\n"); + buf_len = 0; + continue; + case 0x0018: + // secp384r1 + curve = &secp384r1; + buffer = &buf[i]; + DEBUG_PRINT("KEY SHARE => secp384r1\n"); + buf_len = 0; + continue; + case 0x0019: + // secp521r1 + break; + case 0x001D: + // x25519 +#ifdef TLS_CURVE25519 + if (key_size != 32) { + DEBUG_PRINT("INVALID x25519 KEY SIZE (%i)\n", key_size); + continue; + } + curve = &x25519; + buffer = &buf[i]; + DEBUG_PRINT("KEY SHARE => x25519\n"); + buf_len = 0; + continue; +#endif + break; + + case 0x001E: + // x448 + break; + case 0x0100: + dhkey = &ffdhe2048; + dhe_key_size = 2048; + break; + case 0x0101: + dhkey = &ffdhe3072; + dhe_key_size = 3072; + break; + case 0x0102: + dhkey = &ffdhe4096; + dhe_key_size = 4096; + break; + case 0x0103: + dhkey = &ffdhe6144; + dhe_key_size = 6144; + break; + case 0x0104: + dhkey = &ffdhe8192; + dhe_key_size = 8192; + break; + } + i += key_size; + buf_len -= key_size; + + if (!context->is_server) + break; + } + tls_init(); + if (curve) { + context->curve = curve; +#ifdef TLS_CURVE25519 + if (curve == &x25519) { + if ((context->is_server) && (!tls_random(context->local_random, TLS_SERVER_RANDOM_SIZE))) + return TLS_GENERIC_ERROR; + unsigned char secret[32]; + static const unsigned char basepoint[32] = {9}; + + if ((context->is_server) || (!context->client_secret)) { + tls_random(secret, 32); + + secret[0] &= 248; + secret[31] &= 127; + secret[31] |= 64; + + // use finished key to store public key + TLS_FREE(context->finished_key); + context->finished_key = (unsigned char *)TLS_MALLOC(32); + if (!context->finished_key) + return TLS_GENERIC_ERROR; + + curve25519(context->finished_key, secret, basepoint); + + TLS_FREE(context->premaster_key); + context->premaster_key = (unsigned char *)TLS_MALLOC(32); + if (!context->premaster_key) + return TLS_GENERIC_ERROR; + + curve25519(context->premaster_key, secret, buffer); + context->premaster_key_len = 32; + } else { + TLS_FREE(context->premaster_key); + context->premaster_key = (unsigned char *)TLS_MALLOC(32); + if (!context->premaster_key) + return TLS_GENERIC_ERROR; + + curve25519(context->premaster_key, context->client_secret, buffer); + context->premaster_key_len = 32; + + TLS_FREE(context->client_secret); + context->client_secret = NULL; + } + DEBUG_DUMP_HEX_LABEL("x25519 KEY", context->premaster_key, context->premaster_key_len); + + return 0; + } +#endif + if (context->is_server) { + _private_tls_ecc_dhe_create(context); + if (ecc_make_key_ex(NULL, find_prng("sprng"), context->ecc_dhe, (ltc_ecc_set_type *)&context->curve->dp)) { + TLS_FREE(context->ecc_dhe); + context->ecc_dhe = NULL; + DEBUG_PRINT("Error generating ECC DHE key\n"); + return TLS_GENERIC_ERROR; + } + } + + ltc_ecc_set_type *dp = (ltc_ecc_set_type *)&context->curve->dp; + + if ((context->is_server) && (!tls_random(context->local_random, TLS_SERVER_RANDOM_SIZE))) + return TLS_GENERIC_ERROR; + + ecc_key client_key; + memset(&client_key, 0, sizeof(client_key)); + if (ecc_ansi_x963_import_ex(buffer, key_size, &client_key, dp)) { + DEBUG_PRINT("Error importing ECC DHE key\n"); + return TLS_GENERIC_ERROR; + } + out2 = (unsigned char *)TLS_MALLOC(key_size); + out_size = key_size; + + int err = ecc_shared_secret(context->ecc_dhe, &client_key, out2, &out_size); + ecc_free(&client_key); + + if (err) { + DEBUG_PRINT("ECC DHE DECRYPT ERROR %i\n", err); + TLS_FREE(out2); + return TLS_GENERIC_ERROR; + } + DEBUG_PRINT("OUT_SIZE: %lu\n", out_size); + DEBUG_DUMP_HEX_LABEL("ECC DHE", out2, out_size); + + TLS_FREE(context->premaster_key); + context->premaster_key = out2; + context->premaster_key_len = out_size; + return 0; + } else + if ((dhkey) && (buffer)) { + _private_tls_dhe_create(context); + if (!tls_random(context->local_random, TLS_SERVER_RANDOM_SIZE)) + return TLS_GENERIC_ERROR; + if (_private_tls_dh_make_key(dhe_key_size / 8, context->dhe, (const char *)dhkey->p, (const char *)dhkey->g, 0, 0)) { + TLS_FREE(context->dhe); + context->dhe = NULL; + DEBUG_PRINT("Error generating DHE key\n"); + return TLS_GENERIC_ERROR; + } + + unsigned int dhe_out_size; + out2 = _private_tls_decrypt_dhe(context, buffer, key_size, &dhe_out_size, 0); + if (!out2) { + DEBUG_PRINT("Error generating DHE shared key\n"); + return TLS_GENERIC_ERROR; + } + + TLS_FREE(context->premaster_key); + context->premaster_key = out2; + context->premaster_key_len = dhe_out_size; + if (context->dhe) + context->dhe->iana = dhkey->iana; + return 0; + } + DEBUG_PRINT("NO COMMON KEY SHARE SUPPORTED\n"); + return TLS_NO_COMMON_CIPHER; +} +#endif + +int tls_parse_hello(struct TLSContext *context, const unsigned char *buf, int buf_len, unsigned int *write_packets, unsigned int *dtls_verified) { + *write_packets = 0; + *dtls_verified = 0; + if ((context->connection_status != 0) && (context->connection_status != 4)) { + // ignore multiple hello on dtls + if (context->dtls) { + DEBUG_PRINT("RETRANSMITTED HELLO MESSAGE RECEIVED\n"); + return 1; + } + DEBUG_PRINT("UNEXPECTED HELLO MESSAGE\n"); + return TLS_UNEXPECTED_MESSAGE; + } + + int res = 0; + int downgraded = 0; + int hello_min_size = context->dtls ? TLS_CLIENT_HELLO_MINSIZE + 8 : TLS_CLIENT_HELLO_MINSIZE; + CHECK_SIZE(hello_min_size, buf_len, TLS_NEED_MORE_DATA) + // big endian + unsigned int bytes_to_follow = buf[0] * 0x10000 + buf[1] * 0x100 + buf[2]; + res += 3; + if (context->dtls) { + int dtls_check = _private_dtls_check_packet(context, buf, buf_len); + if (dtls_check < 0) + return dtls_check; + // 16 bit message seq + 24 bit fragment offset + 24 bit fragment length + res += 8; + } + CHECK_SIZE(bytes_to_follow, buf_len - res, TLS_NEED_MORE_DATA) + + CHECK_SIZE(2, buf_len - res, TLS_NEED_MORE_DATA) + unsigned short version = ntohs(*(unsigned short *)&buf[res]); + unsigned short cipher = 0; + + res += 2; + VERSION_SUPPORTED(version, TLS_NOT_SAFE) + DEBUG_PRINT("VERSION REQUIRED BY REMOTE %x, VERSION NOW %x\n", (int)version, (int)context->version); +#ifdef TLS_LEGACY_SUPPORT + // when no legacy support, don't downgrade +#ifndef TLS_FORCE_LOCAL_VERSION + // downgrade ? + if (context->dtls) { + // for dlts, newer version has lower id (1.0 = FEFF, 1.2 = FEFD) + if (context->version < version) + downgraded = 1; + } else { + if (context->version > version) + downgraded = 1; + } + if (downgraded) { + context->version = version; + if (!context->is_server) + _private_tls_change_hash_type(context); + } +#endif +#endif + memcpy(context->remote_random, &buf[res], TLS_CLIENT_RANDOM_SIZE); + res += TLS_CLIENT_RANDOM_SIZE; + + unsigned char session_len = buf[res++]; + CHECK_SIZE(session_len, buf_len - res, TLS_NEED_MORE_DATA) + if ((session_len) && (session_len <= TLS_MAX_SESSION_ID)) { + memcpy(context->session, &buf[res], session_len); + context->session_size = session_len; + DEBUG_DUMP_HEX_LABEL("REMOTE SESSION ID: ", context->session, context->session_size); + } else + if (!context->dtls) + context->session_size = 0; + res += session_len; + + const unsigned char *cipher_buffer = NULL; + unsigned short cipher_len = 0; + int scsv_set = 0; + if (context->is_server) { + if (context->dtls) { + CHECK_SIZE(1, buf_len - res, TLS_NEED_MORE_DATA) + unsigned char tls_cookie_len = buf[res++]; + if (tls_cookie_len) { + CHECK_SIZE(tls_cookie_len, buf_len - res, TLS_NEED_MORE_DATA) + if ((!context->dtls_cookie_len) || (!context->dtls_cookie)) + _private_dtls_build_cookie(context); + + if ((context->dtls_cookie_len != tls_cookie_len) || (!context->dtls_cookie)) { + *dtls_verified = 2; + // _private_dtls_reset_cookie(context); + DEBUG_PRINT("INVALID DTLS COOKIE\n"); + return TLS_BROKEN_PACKET; + } + if (memcmp(context->dtls_cookie, &buf[res], tls_cookie_len)) { + *dtls_verified = 3; + // _private_dtls_reset_cookie(context); + DEBUG_PRINT("MISMATCH DTLS COOKIE\n"); + return TLS_BROKEN_PACKET; + } + // _private_dtls_reset_cookie(context); + context->dtls_seq ++; + *dtls_verified = 1; + res += tls_cookie_len; + } else { + *write_packets = 2; + return buf_len; + } + } + CHECK_SIZE(2, buf_len - res, TLS_NEED_MORE_DATA) + cipher_len = ntohs(*(unsigned short *)&buf[res]); + res += 2; + CHECK_SIZE(cipher_len, buf_len - res, TLS_NEED_MORE_DATA) + // faster than cipher_len % 2 + if (cipher_len & 1) + return TLS_BROKEN_PACKET; + + cipher_buffer = &buf[res]; + res += cipher_len; + + CHECK_SIZE(1, buf_len - res, TLS_NEED_MORE_DATA) + unsigned char compression_list_size = buf[res++]; + CHECK_SIZE(compression_list_size, buf_len - res, TLS_NEED_MORE_DATA) + + // no compression support + res += compression_list_size; + } else { + CHECK_SIZE(2, buf_len - res, TLS_NEED_MORE_DATA) + cipher = ntohs(*(unsigned short *)&buf[res]); + res += 2; + context->cipher = cipher; +#ifndef WITH_TLS_13 + if (!tls_cipher_supported(context, cipher)) { + context->cipher = 0; + DEBUG_PRINT("NO CIPHER SUPPORTED\n"); + return TLS_NO_COMMON_CIPHER; + } + DEBUG_PRINT("CIPHER: %s\n", tls_cipher_name(context)); +#endif + CHECK_SIZE(1, buf_len - res, TLS_NEED_MORE_DATA) + unsigned char compression = buf[res++]; + if (compression != 0) { + DEBUG_PRINT("COMPRESSION NOT SUPPORTED\n"); + return TLS_COMPRESSION_NOT_SUPPORTED; + } + } + + if (res > 0) { + if (context->is_server) + *write_packets = 2; + if (context->connection_status != 4) + context->connection_status = 1; + } + + + if (res > 2) + res += 2; +#ifdef WITH_TLS_13 + const unsigned char *key_share = NULL; + unsigned short key_size = 0; +#endif + while (buf_len - res >= 4) { + // have extensions + unsigned short extension_type = ntohs(*(unsigned short *)&buf[res]); + res += 2; + unsigned short extension_len = ntohs(*(unsigned short *)&buf[res]); + res += 2; + DEBUG_PRINT("Extension: 0x0%x (%i), len: %i\n", (int)extension_type, (int)extension_type, (int)extension_len); + // SNI extension + CHECK_SIZE(extension_len, buf_len - res, TLS_NEED_MORE_DATA) + if (extension_type == 0x00) { + // unsigned short sni_len = ntohs(*(unsigned short *)&buf[res]); + // unsigned char sni_type = buf[res + 2]; + unsigned short sni_host_len = ntohs(*(unsigned short *)&buf[res + 3]); + CHECK_SIZE(sni_host_len, buf_len - res - 5, TLS_NEED_MORE_DATA) + if (sni_host_len) { + TLS_FREE(context->sni); + context->sni = (char *)TLS_MALLOC(sni_host_len + 1); + if (context->sni) { + memcpy(context->sni, &buf[res + 5], sni_host_len); + context->sni[sni_host_len] = 0; + DEBUG_PRINT("SNI HOST INDICATOR: [%s]\n", context->sni); + } + } + } else +#ifdef TLS_FORWARD_SECRECY + if (extension_type == 0x0A) { + // supported groups + if (buf_len - res > 2) { + unsigned short group_len = ntohs(*(unsigned short *)&buf[res]); + if (buf_len - res >= group_len + 2) { + DEBUG_DUMP_HEX_LABEL("SUPPORTED GROUPS", &buf[res + 2], group_len); + int i; + int selected = 0; + for (i = 0; i < group_len; i += 2) { + unsigned short iana_n = ntohs(*(unsigned short *)&buf[res + 2 + i]); + switch (iana_n) { + case 23: + context->curve = &secp256r1; + selected = 1; + break; + case 24: + context->curve = &secp384r1; + selected = 1; + break; +#ifdef WITH_TLS_13 + // needs different implementation + // case 29: + // context->curve = &x25519; + // selected = 1; + // break; +#endif + // do not use it anymore + // case 25: + // context->curve = &secp521r1; + // selected = 1; + // break; + } + if (selected) { + DEBUG_PRINT("SELECTED CURVE %s\n", context->curve->name); + break; + } + } + } + } + } else +#endif + if ((extension_type == 0x10) && (context->alpn) && (context->alpn_count)) { + if (buf_len - res > 2) { + unsigned short alpn_len = ntohs(*(unsigned short *)&buf[res]); + if ((alpn_len) && (alpn_len <= extension_len - 2)) { + unsigned char *alpn = (unsigned char *)&buf[res + 2]; + int alpn_pos = 0; + while (alpn_pos < alpn_len) { + unsigned char alpn_size = alpn[alpn_pos++]; + if (alpn_size + alpn_pos >= extension_len) + break; + if ((alpn_size) && (tls_alpn_contains(context, (char *)&alpn[alpn_pos], alpn_size))) { + TLS_FREE(context->negotiated_alpn); + context->negotiated_alpn = (char *)TLS_MALLOC(alpn_size + 1); + if (context->negotiated_alpn) { + memcpy(context->negotiated_alpn, &alpn[alpn_pos], alpn_size); + context->negotiated_alpn[alpn_size] = 0; + DEBUG_PRINT("NEGOTIATED ALPN: %s\n", context->negotiated_alpn); + } + break; + } + alpn_pos += alpn_size; + // ServerHello contains just one alpn + if (!context->is_server) + break; + } + } + } + } else + if (extension_type == 0x0D) { + // supported signatures + DEBUG_DUMP_HEX_LABEL("SUPPORTED SIGNATURES", &buf[res], extension_len); + } else + if (extension_type == 0x0B) { + // supported point formats + DEBUG_DUMP_HEX_LABEL("SUPPORTED POINT FORMATS", &buf[res], extension_len); + } else + if ((extension_type == 0x0E) && (context->dtls)) { + // use_srtp + DEBUG_DUMP_HEX_LABEL("USE SRTP", &buf[res], extension_len); + context->dtls = 4; + } else + if ((extension_type == 0x17) && (context->dtls)) { + // extended_master_secret + DEBUG_PRINT("EXTENDED MASTER SECRET"); +#ifdef TLS_DTLS_EXTENDED_MASTER_SECRET + if (context->dtls_data) + context->dtls_data->extended_master_secret = 1; +#endif + } +#ifdef WITH_TLS_13 + else + if (extension_type == 0x2B) { + // supported versions + if ((context->is_server) && (buf[res] == extension_len - 1)) { + if (extension_len > 2) { + DEBUG_DUMP_HEX_LABEL("SUPPORTED VERSIONS", &buf[res], extension_len); + int i; + int limit = (int)buf[res]; + if (limit == extension_len - 1) { + for (i = 1; i < limit; i += 2) { + if ((ntohs(*(unsigned short *)&buf[res + i]) == TLS_V13) || (ntohs(*(unsigned short *)&buf[res + i]) == 0x7F1C)) { + context->version = TLS_V13; + context->tls13_version = ntohs(*(unsigned short *)&buf[res + i]); + DEBUG_PRINT("TLS 1.3 SUPPORTED\n"); + break; + } + } + } + } + } else + if ((!context->is_server) && (extension_len == 2)) { + if ((ntohs(*(unsigned short *)&buf[res]) == TLS_V13) || (ntohs(*(unsigned short *)&buf[res]) == 0x7F1C)) { + context->version = TLS_V13; + context->tls13_version = ntohs(*(unsigned short *)&buf[res]); + DEBUG_PRINT("TLS 1.3 SUPPORTED\n"); + } + } + } else + if (extension_type == 0x2A) { + // early data + DEBUG_DUMP_HEX_LABEL("EXTENSION, EARLY DATA", &buf[res], extension_len); + } else + if (extension_type == 0x29) { + // pre shared key + DEBUG_DUMP_HEX_LABEL("EXTENSION, PRE SHARED KEY", &buf[res], extension_len); + } else + if (extension_type == 0x33) { + // key share + if (context->is_server) { + key_size = ntohs(*(unsigned short *)&buf[res]); + if ((context->is_server) && (key_size > extension_len - 2)) { + DEBUG_PRINT("BROKEN KEY SHARE\n"); + return TLS_BROKEN_PACKET; + } + } else { + key_size = extension_len; + } + DEBUG_DUMP_HEX_LABEL("EXTENSION, KEY SHARE", &buf[res], extension_len); + if (context->is_server) + key_share = &buf[res + 2]; + else + key_share = &buf[res]; + } else + if (extension_type == 0x0D) { + // signature algorithms + DEBUG_DUMP_HEX_LABEL("EXTENSION, SIGNATURE ALGORITHMS", &buf[res], extension_len); + } else + if (extension_type == 0x2D) { + // psk key exchange modes + DEBUG_DUMP_HEX_LABEL("EXTENSION, PSK KEY EXCHANGE MODES", &buf[res], extension_len); + } +#endif + res += extension_len; + } + if (buf_len != res) + return TLS_NEED_MORE_DATA; + if ((context->is_server) && (cipher_buffer) && (cipher_len)) { + int cipher = tls_choose_cipher(context, cipher_buffer, cipher_len, &scsv_set); + if (cipher < 0) { + DEBUG_PRINT("NO COMMON CIPHERS\n"); + return cipher; + } + if ((downgraded) && (scsv_set)) { + DEBUG_PRINT("NO DOWNGRADE (SCSV SET)\n"); + _private_tls_write_packet(tls_build_alert(context, 1, inappropriate_fallback)); + context->critical_error = 1; + return TLS_NOT_SAFE; + } + context->cipher = cipher; + } +#ifdef WITH_TLS_13 + if (!context->is_server) { + if (!tls_cipher_supported(context, cipher)) { + context->cipher = 0; + DEBUG_PRINT("NO CIPHER SUPPORTED\n"); + return TLS_NO_COMMON_CIPHER; + } + DEBUG_PRINT("CIPHER: %s\n", tls_cipher_name(context)); + } + + if ((key_share) && (key_size) && ((context->version == TLS_V13) || (context->version == DTLS_V13))) { + int key_share_err = _private_tls_parse_key_share(context, key_share, key_size); + if (key_share_err) { + // request hello retry + if (context->connection_status != 4) { + *write_packets = 5; + context->hs_messages[1] = 0; + context->connection_status = 4; + return res; + } else + return key_share_err; + } + // we have key share + if (context->is_server) + context->connection_status = 3; + else + context->connection_status = 2; + } +#endif + return res; +} + +int tls_parse_certificate(struct TLSContext *context, const unsigned char *buf, int buf_len, int is_client) { + int res = 0; + CHECK_SIZE(3, buf_len, TLS_NEED_MORE_DATA) + unsigned int size_of_all_certificates = buf[0] * 0x10000 + buf[1] * 0x100 + buf[2]; + + if (size_of_all_certificates <= 4) + return 3 + size_of_all_certificates; + res += 3; + if (context->dtls) { + int dtls_check = _private_dtls_check_packet(context, buf, buf_len); + if (dtls_check < 0) + return dtls_check; + res += 8; + } +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + int context_size = buf[res]; + res++; + // must be 0 + if (context_size) + res += context_size; + size_of_all_certificates --; + } +#endif + + CHECK_SIZE(size_of_all_certificates, buf_len - res, TLS_NEED_MORE_DATA); + int size = size_of_all_certificates; + + int idx = 0; + int valid_certificate = 0; + while (size > 0) { + idx++; + CHECK_SIZE(3, buf_len - res, TLS_NEED_MORE_DATA); + unsigned int certificate_size = buf[res] * 0x10000 + buf[res + 1] * 0x100 + buf[res + 2]; + res += 3; + CHECK_SIZE(certificate_size, buf_len - res, TLS_NEED_MORE_DATA) + // load chain + int certificates_in_chain = 0; + int res2 = res; + unsigned int remaining = certificate_size; + do { + if (remaining <= 3) + break; + certificates_in_chain++; + unsigned int certificate_size2 = buf[res2] * 0x10000 + buf[res2 + 1] * 0x100 + buf[res2 + 2]; + res2 += 3; + remaining -= 3; + if (certificate_size2 > remaining) { + DEBUG_PRINT("Invalid certificate size (%i from %i bytes remaining)\n", certificate_size2, remaining); + break; + } + remaining -= certificate_size2; + + struct TLSCertificate *cert = asn1_parse(context, &buf[res2], certificate_size2, is_client); + if (cert) { + if (certificate_size2) { + cert->bytes = (unsigned char *)TLS_MALLOC(certificate_size2); + if (cert->bytes) { + cert->len = certificate_size2; + memcpy(cert->bytes, &buf[res2], certificate_size2); + } + } + if ((context->dtls_data) && (context->dtls_data->remote_fingerprint)) { + unsigned char hash[32]; + + hash_state state; + + sha256_init(&state); + sha256_process(&state, cert->bytes, cert->len); + sha256_done(&state, hash); + + int i; + char buffer_data[100]; + char *buffer = buffer_data; + int buf_len = sizeof(buffer_data); + buffer[0] = 0; + for (i = 0; i < 32; i++) { + if (buf_len <= 1) + break; + if (i) { + snprintf(buffer, buf_len, ":"); + buffer ++; + buf_len --; + } + if (buf_len <= 2) + break; + snprintf(buffer, buf_len, "%02X", (unsigned int)hash[i]); + buffer += 2; + buf_len -= 2; + } + if (strcmp(buffer_data, context->dtls_data->remote_fingerprint)) { + DEBUG_PRINT("PEER CERTIFICATE FINGERPRINT VALIDATION FAILED, computed %s, expected %s\n", buffer_data, context->dtls_data->remote_fingerprint); + return TLS_UNSUPPORTED_CERTIFICATE; + } + } + // valid certificate + if (is_client) { + valid_certificate = 1; + context->client_certificates = (struct TLSCertificate **)TLS_REALLOC(context->client_certificates, (context->client_certificates_count + 1) * sizeof(struct TLSCertificate *)); + context->client_certificates[context->client_certificates_count] = cert; + context->client_certificates_count++; + } else { + context->certificates = (struct TLSCertificate **)TLS_REALLOC(context->certificates, (context->certificates_count + 1) * sizeof(struct TLSCertificate *)); + context->certificates[context->certificates_count] = cert; + context->certificates_count++; + if ((cert->pk) || (cert->priv)) + valid_certificate = 1; + else + if (!context->is_server) + valid_certificate = 1; + } + } + res2 += certificate_size2; +#ifdef WITH_TLS_13 + // extension + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + if (remaining >= 2) { + // ignore extensions + remaining -= 2; + unsigned short size = ntohs(*(unsigned short *)&buf[res2]); + if ((size) && (size >= remaining)) { + res2 += size; + remaining -= size; + } + res2 += 2; + } + } +#endif + } while (remaining > 0); + if (remaining) { + DEBUG_PRINT("Extra %i bytes after certificate\n", remaining); + } + size -= certificate_size + 3; + res += certificate_size; + } + if (!valid_certificate) + return TLS_UNSUPPORTED_CERTIFICATE; + if (res != buf_len) { + DEBUG_PRINT("Warning: %i bytes read from %i byte buffer\n", (int)res, (int)buf_len); + } + return res; +} + +int _private_tls_parse_dh(const unsigned char *buf, int buf_len, const unsigned char **out, int *out_size) { + int res = 0; + *out = NULL; + *out_size = 0; + CHECK_SIZE(2, buf_len, TLS_NEED_MORE_DATA) + unsigned short size = ntohs(*(unsigned short *)buf); + res += 2; + CHECK_SIZE(size, buf_len - res, TLS_NEED_MORE_DATA) + DEBUG_DUMP_HEX(&buf[res], size); + *out = &buf[res]; + *out_size = size; + res += size; + return res; +} + +int _private_tls_parse_random(struct TLSContext *context, const unsigned char *buf, int buf_len) { + int res = 0; + int ephemeral = tls_cipher_is_ephemeral(context); + unsigned short size; + if (ephemeral == 2) { + CHECK_SIZE(1, buf_len, TLS_NEED_MORE_DATA) + size = buf[0]; + res += 1; + } else { + CHECK_SIZE(2, buf_len, TLS_NEED_MORE_DATA) + size = ntohs(*(unsigned short *)buf); + res += 2; + } + + CHECK_SIZE(size, buf_len - res, TLS_NEED_MORE_DATA) + unsigned int out_len = 0; + unsigned char *random = NULL; + switch (ephemeral) { +#ifdef TLS_FORWARD_SECRECY + case 1: + random = _private_tls_decrypt_dhe(context, &buf[res], size, &out_len, !context->dtls); + break; + case 2: + random = _private_tls_decrypt_ecc_dhe(context, &buf[res], size, &out_len, !context->dtls); + break; +#endif + default: + random = _private_tls_decrypt_rsa(context, &buf[res], size, &out_len); + } + + if ((random) && (out_len > 2)) { + DEBUG_DUMP_HEX_LABEL("PRE MASTER KEY", random, out_len); + TLS_FREE(context->premaster_key); + context->premaster_key = random; + context->premaster_key_len = out_len; + _private_tls_compute_key(context, 48); + } else { + TLS_FREE(random); + return 0; + } + res += size; + return res; +} + +int _private_tls_build_random(struct TLSPacket *packet) { + int res = 0; + unsigned char rand_bytes[48]; + int bytes = 48; + if (!tls_random(rand_bytes, bytes)) + return TLS_GENERIC_ERROR; + + // max supported version + if (packet->context->is_server) + *(unsigned short *)rand_bytes = htons(packet->context->version); + else + if (packet->context->dtls) + *(unsigned short *)rand_bytes = htons(DTLS_V12); + else + *(unsigned short *)rand_bytes = htons(TLS_V12); + //DEBUG_DUMP_HEX_LABEL("PREMASTER KEY", rand_bytes, bytes); + + TLS_FREE(packet->context->premaster_key); + packet->context->premaster_key = (unsigned char *)TLS_MALLOC(bytes); + if (!packet->context->premaster_key) + return TLS_NO_MEMORY; + + packet->context->premaster_key_len = bytes; + memcpy(packet->context->premaster_key, rand_bytes, packet->context->premaster_key_len); + + unsigned int out_len; + unsigned char *random = _private_tls_encrypt_rsa(packet->context, packet->context->premaster_key, packet->context->premaster_key_len, &out_len); + + _private_tls_compute_key(packet->context, bytes); + if ((random) && (out_len > 2)) { + tls_packet_uint24(packet, out_len + 2); + if (packet->context->dtls) + _private_dtls_handshake_data(packet->context, packet, out_len + 2); + tls_packet_uint16(packet, out_len); + tls_packet_append(packet, random, out_len); + } else + res = TLS_GENERIC_ERROR; + TLS_FREE(random); + if (res) + return res; + + return out_len + 2; +} + +const unsigned char *_private_tls_parse_signature(struct TLSContext *context, const unsigned char *buf, int buf_len, int *hash_algorithm, int *sign_algorithm, int *sig_size, int *offset) { + int res = 0; + CHECK_SIZE(2, buf_len, NULL) + *hash_algorithm = _md5_sha1; + *sign_algorithm = rsa_sign; + *sig_size = 0; + if ((context->version == TLS_V12) || (context->version == DTLS_V12) || (context->version == TLS_V13) || (context->version == DTLS_V13)) { + *hash_algorithm = buf[res]; + res++; + *sign_algorithm = buf[res]; + res++; + } + unsigned short size = ntohs(*(unsigned short *)&buf[res]); + res += 2; + CHECK_SIZE(size, buf_len - res, NULL) + DEBUG_DUMP_HEX(&buf[res], size); + *sig_size = size; + *offset = res + size; + return &buf[res]; +} + +int tls_parse_server_key_exchange(struct TLSContext *context, const unsigned char *buf, int buf_len) { + int res = 0; + int dh_res = 0; + CHECK_SIZE(3, buf_len, TLS_NEED_MORE_DATA) + unsigned int size = buf[0] * 0x10000 + buf[1] * 0x100 + buf[2]; + res += 3; + if (context->dtls) { + int dtls_check = _private_dtls_check_packet(context, buf, buf_len); + if (dtls_check < 0) + return dtls_check; + res += 8; + } + const unsigned char *packet_ref = buf + res; + CHECK_SIZE(size, buf_len - res, TLS_NEED_MORE_DATA); + + if (!size) + return res; + + unsigned char has_ds_params = 0; + unsigned int key_size = 0; +#ifdef TLS_FORWARD_SECRECY + const struct ECCCurveParameters *curve = NULL; + const unsigned char *pk_key = NULL; + int ephemeral = tls_cipher_is_ephemeral(context); + if (ephemeral) { + if (ephemeral == 1) { + has_ds_params = 1; + } else { + if (buf[res++] != 3) { + // named curve + // any other method is not supported + return 0; + } + CHECK_SIZE(3, buf_len - res, TLS_NEED_MORE_DATA); + int iana_n = ntohs(*(unsigned short *)&buf[res]); + res += 2; + key_size = buf[res]; + res++; + CHECK_SIZE(key_size, buf_len - res, TLS_NEED_MORE_DATA); + DEBUG_PRINT("IANA CURVE NUMBER: %i\n", iana_n); + switch (iana_n) { + case 19: + curve = &secp192r1; + break; + case 20: + curve = &secp224k1; + break; + case 21: + curve = &secp224r1; + break; + case 22: + curve = &secp256k1; + break; + case 23: + curve = &secp256r1; + break; + case 24: + curve = &secp384r1; + break; + case 25: + curve = &secp521r1; + break; +#ifdef TLS_CURVE25519 + case 29: + curve = &x25519; + break; +#endif + default: + DEBUG_PRINT("UNSUPPORTED CURVE\n"); + return TLS_GENERIC_ERROR; + } + pk_key = &buf[res]; + res += key_size; + context->curve = curve; + } + } +#endif + const unsigned char *dh_p = NULL; + int dh_p_len = 0; + const unsigned char *dh_g = NULL; + int dh_g_len = 0; + const unsigned char *dh_Ys = NULL; + int dh_Ys_len = 0; + if (has_ds_params) { + DEBUG_PRINT(" dh_p: "); + dh_res = _private_tls_parse_dh(&buf[res], buf_len - res, &dh_p, &dh_p_len); + if (dh_res <= 0) + return TLS_BROKEN_PACKET; + res += dh_res; + DEBUG_PRINT("\n"); + + DEBUG_PRINT(" dh_q: "); + dh_res = _private_tls_parse_dh(&buf[res], buf_len - res, &dh_g, &dh_g_len); + if (dh_res <= 0) + return TLS_BROKEN_PACKET; + res += dh_res; + DEBUG_PRINT("\n"); + + DEBUG_PRINT(" dh_Ys: "); + dh_res = _private_tls_parse_dh(&buf[res], buf_len - res, &dh_Ys, &dh_Ys_len); + if (dh_res <= 0) + return TLS_BROKEN_PACKET; + res += dh_res; + DEBUG_PRINT("\n"); + } + int sign_size; + int hash_algorithm; + int sign_algorithm; + int packet_size = res - 3; + if (context->dtls) + packet_size -= 8; + int offset = 0; + DEBUG_PRINT(" SIGNATURE (%i/%i/%i): ", packet_size, dh_res, key_size); + const unsigned char *signature = _private_tls_parse_signature(context, &buf[res], buf_len - res, &hash_algorithm, &sign_algorithm, &sign_size, &offset); + DEBUG_PRINT("\n"); + if ((sign_size <= 0) || (!signature)) + return TLS_BROKEN_PACKET; + res += offset; + // check signature + unsigned int message_len = packet_size + TLS_CLIENT_RANDOM_SIZE + TLS_SERVER_RANDOM_SIZE; + unsigned char *message = (unsigned char *)TLS_MALLOC(message_len); + if (message) { + memcpy(message, context->local_random, TLS_CLIENT_RANDOM_SIZE); + memcpy(message + TLS_CLIENT_RANDOM_SIZE, context->remote_random, TLS_SERVER_RANDOM_SIZE); + memcpy(message + TLS_CLIENT_RANDOM_SIZE + TLS_SERVER_RANDOM_SIZE, packet_ref, packet_size); +#ifdef TLS_CLIENT_ECDSA + if (tls_is_ecdsa(context)) { + if (_private_tls_verify_ecdsa(context, hash_algorithm, signature, sign_size, message, message_len, NULL) != 1) { + // DEBUG_PRINT("ECC Server signature FAILED!\n"); + // TLS_FREE(message); + // return TLS_BROKEN_PACKET; + } + } else +#endif + { + if (_private_tls_verify_rsa(context, hash_algorithm, signature, sign_size, message, message_len) != 1) { + // DEBUG_PRINT("Server signature FAILED!\n"); + // TLS_FREE(message); + // return TLS_BROKEN_PACKET; + } + } + TLS_FREE(message); + } + + if (buf_len - res) { + DEBUG_PRINT("EXTRA %i BYTES AT THE END OF MESSAGE\n", buf_len - res); + DEBUG_DUMP_HEX(&buf[res], buf_len - res); + DEBUG_PRINT("\n"); + } +#ifdef TLS_FORWARD_SECRECY + if (ephemeral == 1) { + _private_tls_dhe_create(context); + DEBUG_DUMP_HEX_LABEL("DHP", dh_p, dh_p_len); + DEBUG_DUMP_HEX_LABEL("DHG", dh_g, dh_g_len); + int dhe_key_size = dh_p_len; + if (dh_g_len > dh_p_len) + dhe_key_size = dh_g_len; + if (_private_tls_dh_make_key(dhe_key_size, context->dhe, (const char *)dh_p, (const char *)dh_g, dh_p_len, dh_g_len)) { + DEBUG_PRINT("ERROR CREATING DHE KEY\n"); + TLS_FREE(context->dhe); + context->dhe = NULL; + return TLS_GENERIC_ERROR; + } + + unsigned int dh_key_size = 0; + unsigned char *key = _private_tls_decrypt_dhe(context, dh_Ys, dh_Ys_len, &dh_key_size, 0); + DEBUG_DUMP_HEX_LABEL("DH COMMON SECRET", key, dh_key_size); + if ((key) && (dh_key_size)) { + TLS_FREE(context->premaster_key); + context->premaster_key = key; + context->premaster_key_len = dh_key_size; + } + } else + if ((ephemeral == 2) && (curve) && (pk_key) && (key_size)) { +#ifdef TLS_CURVE25519 + if (curve == &x25519) { + if (key_size != 32) { + DEBUG_PRINT("INVALID X25519 PUBLIC SIZE"); + return TLS_GENERIC_ERROR; + } + + TLS_FREE(context->client_secret); + context->client_secret = (unsigned char *)TLS_MALLOC(32); + if (!context->client_secret) { + DEBUG_PRINT("ERROR IN TLS_MALLOC"); + return TLS_GENERIC_ERROR; + } + + tls_random(context->client_secret, 32); + + context->client_secret[0] &= 248; + context->client_secret[31] &= 127; + context->client_secret[31] |= 64; + + TLS_FREE(context->premaster_key); + context->premaster_key = (unsigned char *)TLS_MALLOC(32); + if (!context->premaster_key) + return TLS_GENERIC_ERROR; + + curve25519(context->premaster_key, context->client_secret, pk_key); + context->premaster_key_len = 32; + } else +#endif + { + tls_init(); + _private_tls_ecc_dhe_create(context); + + ltc_ecc_set_type *dp = (ltc_ecc_set_type *)&curve->dp; + if (ecc_make_key_ex(NULL, find_prng("sprng"), context->ecc_dhe, dp)) { + TLS_FREE(context->ecc_dhe); + context->ecc_dhe = NULL; + DEBUG_PRINT("Error generating ECC key\n"); + return TLS_GENERIC_ERROR; + } + + TLS_FREE(context->premaster_key); + context->premaster_key_len = 0; + + unsigned int out_len = 0; + context->premaster_key = _private_tls_decrypt_ecc_dhe(context, pk_key, key_size, &out_len, 0); + if (context->premaster_key) + context->premaster_key_len = out_len; + } + } +#endif + return res; +} + +int tls_parse_client_key_exchange(struct TLSContext *context, const unsigned char *buf, int buf_len) { + if ((context->connection_status != 1) && (!context->dtls)) { + DEBUG_PRINT("UNEXPECTED CLIENT KEY EXCHANGE MESSAGE (connections status: %i)\n", (int)context->connection_status); + return TLS_UNEXPECTED_MESSAGE; + } + + int res = 0; + int dh_res = 0; + CHECK_SIZE(3, buf_len, TLS_NEED_MORE_DATA) + + unsigned int size = buf[0] * 0x10000 + buf[1] * 0x100 + buf[2]; + res += 3; + if (context->dtls) { + int dtls_check = _private_dtls_check_packet(context, buf, buf_len); + if (dtls_check < 0) + return dtls_check; + res += 8; + } + + CHECK_SIZE(size, buf_len - res, TLS_NEED_MORE_DATA); + + if (!size) + return res; + + dh_res = _private_tls_parse_random(context, &buf[res], size); + if (dh_res <= 0) { + DEBUG_PRINT("broken key\n"); + return TLS_BROKEN_PACKET; + } + DEBUG_PRINT("\n"); + + res += size; + context->connection_status = 2; + return res; +} + +int tls_parse_server_hello_done(struct TLSContext *context, const unsigned char *buf, int buf_len) { + int res = 0; + CHECK_SIZE(3, buf_len, TLS_NEED_MORE_DATA) + + unsigned int size = buf[0] * 0x10000 + buf[1] * 0x100 + buf[2]; + res += 3; + if (context->dtls) { + int dtls_check = _private_dtls_check_packet(context, buf, buf_len); + if (dtls_check < 0) + return dtls_check; + res += 8; + } + + CHECK_SIZE(size, buf_len - res, TLS_NEED_MORE_DATA); + + res += size; + return res; +} + +int tls_parse_finished(struct TLSContext *context, const unsigned char *buf, int buf_len, unsigned int *write_packets) { + if ((context->connection_status < 2) || (context->connection_status == 0xFF)) { + DEBUG_PRINT("UNEXPECTED FINISHED MESSAGE\n"); + return TLS_UNEXPECTED_MESSAGE; + } + + int res = 0; + *write_packets = 0; + CHECK_SIZE(3, buf_len, TLS_NEED_MORE_DATA) + + unsigned int size = buf[0] * 0x10000 + buf[1] * 0x100 + buf[2]; + res += 3; + if (context->dtls) { + int dtls_check = _private_dtls_check_packet(context, buf, buf_len); + if (dtls_check < 0) + return dtls_check; + res += 8; + } + + if (size < TLS_MIN_FINISHED_OPAQUE_LEN) { + DEBUG_PRINT("Invalid finished pachet size: %i\n", size); + return TLS_BROKEN_PACKET; + } + + CHECK_SIZE(size, buf_len - res, TLS_NEED_MORE_DATA); + + unsigned char hash[TLS_MAX_SHA_SIZE]; + unsigned int hash_len = _private_tls_get_hash(context, hash); + +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + unsigned char hash_out[TLS_MAX_SHA_SIZE]; + unsigned long out_size = TLS_MAX_SHA_SIZE; + if ((!context->remote_finished_key) || (!hash_len)) { + DEBUG_PRINT("NO FINISHED KEY COMPUTED OR NO HANDSHAKE HASH\n"); + return TLS_NOT_VERIFIED; + } + + DEBUG_DUMP_HEX_LABEL("HS HASH", hash, hash_len); + DEBUG_DUMP_HEX_LABEL("HS FINISH", context->finished_key, hash_len); + DEBUG_DUMP_HEX_LABEL("HS REMOTE FINISH", context->remote_finished_key, hash_len); + + out_size = hash_len; + hmac_state hmac; + hmac_init(&hmac, _private_tls_get_hash_idx(context), context->remote_finished_key, hash_len); + hmac_process(&hmac, hash, hash_len); + hmac_done(&hmac, hash_out, &out_size); + + if ((size != out_size) || (memcmp(hash_out, &buf[res], size))) { + DEBUG_PRINT("Finished validation error (sequence number, local: %i, remote: %i)\n", (int)context->local_sequence_number, (int)context->remote_sequence_number); + DEBUG_DUMP_HEX_LABEL("FINISHED OPAQUE", &buf[res], size); + DEBUG_DUMP_HEX_LABEL("VERIFY", hash_out, out_size); + return TLS_NOT_VERIFIED; + } + if (context->is_server) { + context->connection_status = 0xFF; + res += size; + _private_tls13_key(context, 0); + context->local_sequence_number = 0; + context->remote_sequence_number = 0; + return res; + } + } else +#endif + { + // verify + unsigned char *out = (unsigned char *)TLS_MALLOC(size); + if (!out) { + DEBUG_PRINT("Error in TLS_MALLOC (%i bytes)\n", (int)size); + return TLS_NO_MEMORY; + } + + // server verifies client's message + if (context->is_server) + _private_tls_prf(context, out, size, context->master_key, context->master_key_len, (unsigned char *)"client finished", 15, hash, hash_len, NULL, 0); + else + _private_tls_prf(context, out, size, context->master_key, context->master_key_len, (unsigned char *)"server finished", 15, hash, hash_len, NULL, 0); + + if (memcmp(out, &buf[res], size)) { + TLS_FREE(out); + DEBUG_PRINT("Finished validation error (sequence number, local: %i, remote: %i)\n", (int)context->local_sequence_number, (int)context->remote_sequence_number); + DEBUG_DUMP_HEX_LABEL("FINISHED OPAQUE", &buf[res], size); + DEBUG_DUMP_HEX_LABEL("VERIFY", out, size); + return TLS_NOT_VERIFIED; + } +#ifdef TLS_ACCEPT_SECURE_RENEGOTIATION + if (size) { + if (context->is_server) { + TLS_FREE(context->verify_data); + context->verify_data = (unsigned char *)TLS_MALLOC(size); + if (context->verify_data) { + memcpy(context->verify_data, out, size); + context->verify_len = size; + } + } else { + // concatenate client verify and server verify + context->verify_data = (unsigned char *)TLS_REALLOC(context->verify_data, size); + if (context->verify_data) { + memcpy(context->verify_data + context->verify_len, out, size); + context->verify_len += size; + } else + context->verify_len = 0; + } + } +#endif + TLS_FREE(out); + } + if (context->is_server) + *write_packets = 3; + else + context->connection_status = 0xFF; + res += size; + return res; +} + +#ifdef WITH_TLS_13 +int tls_parse_verify_tls13(struct TLSContext *context, const unsigned char *buf, int buf_len) { + CHECK_SIZE(7, buf_len, TLS_NEED_MORE_DATA) + unsigned int size = buf[0] * 0x10000 + buf[1] * 0x100 + buf[2]; + + if (size < 2) + return buf_len; + + unsigned char signing_data[TLS_MAX_HASH_SIZE + 98]; + int signing_data_len; + + // first 64 bytes to 0x20 (32) + memset(signing_data, 0x20, 64); + // context string 33 bytes + if (context->is_server) + memcpy(signing_data + 64, "TLS 1.3, client CertificateVerify", 33); + else + memcpy(signing_data + 64, "TLS 1.3, server CertificateVerify", 33); + // a single 0 byte separator + signing_data[97] = 0; + signing_data_len = 98; + + signing_data_len += _private_tls_get_hash(context, signing_data + 98); + DEBUG_DUMP_HEX_LABEL("signature data", signing_data, signing_data_len); + unsigned short signature = ntohs(*(unsigned short *)&buf[3]); + unsigned short signature_size = ntohs(*(unsigned short *)&buf[5]); + int valid = 0; + CHECK_SIZE(7 + signature_size, buf_len, TLS_NEED_MORE_DATA) + switch (signature) { +#ifdef TLS_ECDSA_SUPPORTED + case 0x0403: + // secp256r1 + sha256 + valid = _private_tls_verify_ecdsa(context, sha256, buf + 7, signature_size, signing_data, signing_data_len, &secp256r1); + break; + case 0x0503: + // secp384r1 + sha384 + valid = _private_tls_verify_ecdsa(context, sha384, buf + 7, signature_size, signing_data, signing_data_len, &secp384r1); + break; + case 0x0603: + // secp521r1 + sha512 + valid = _private_tls_verify_ecdsa(context, sha512, buf + 7, signature_size, signing_data, signing_data_len, &secp521r1); + break; +#endif + case 0x0804: + valid = _private_tls_verify_rsa(context, sha256, buf + 7, signature_size, signing_data, signing_data_len); + break; + default: + DEBUG_PRINT("Unsupported signature: %x\n", (int)signature); + return TLS_UNSUPPORTED_CERTIFICATE; + } + if (valid != 1) { + DEBUG_PRINT("Signature FAILED!\n"); + return TLS_DECRYPTION_FAILED; + } + return buf_len; +} +#endif + +int tls_parse_verify(struct TLSContext *context, const unsigned char *buf, int buf_len) { +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) + return tls_parse_verify_tls13(context, buf, buf_len); +#endif + CHECK_SIZE(7, buf_len, TLS_BAD_CERTIFICATE) + unsigned int bytes_to_follow = buf[0] * 0x10000 + buf[1] * 0x100 + buf[2]; + CHECK_SIZE(bytes_to_follow, buf_len - 3, TLS_BAD_CERTIFICATE) + int res = -1; + + if ((context->version == TLS_V12) || (context->version == DTLS_V12) || (context->version == TLS_V13) || (context->version == DTLS_V13)) { + unsigned int hash = buf[3]; + unsigned int algorithm = buf[4]; +#ifdef TLS_ECDSA_SUPPORTED + if ((algorithm != rsa) && (algorithm != ecdsa)) { + if (context->dtls == 4) { + DEBUG_PRINT("DTLS-SRTP mode, skipping signature check for unsupported signature (%x/%x)\n", algorithm, hash); + context->client_verified = 1; + return 1; + } + return TLS_UNSUPPORTED_CERTIFICATE; + } +#else + if (algorithm != rsa) + return TLS_UNSUPPORTED_CERTIFICATE; +#endif + unsigned short size = ntohs(*(unsigned short *)&buf[5]); + CHECK_SIZE(size, bytes_to_follow - 4, TLS_BAD_CERTIFICATE) + DEBUG_PRINT("ALGORITHM %i/%i (%i)\n", hash, algorithm, (int)size); + DEBUG_DUMP_HEX_LABEL("VERIFY", &buf[7], bytes_to_follow - 7); + + if (algorithm == rsa) + res = _private_tls_verify_rsa(context, hash, &buf[7], size, context->cached_handshake, context->cached_handshake_len); + else + res = _private_tls_verify_ecdsa(context, hash, &buf[7], size, context->cached_handshake, context->cached_handshake_len, NULL); + } else { +#ifdef TLS_LEGACY_SUPPORT + unsigned short size = ntohs(*(unsigned short *)&buf[3]); + CHECK_SIZE(size, bytes_to_follow - 2, TLS_BAD_CERTIFICATE) + res = _private_tls_verify_rsa(context, md5, &buf[5], size, context->cached_handshake, context->cached_handshake_len); +#endif + } + if (context->cached_handshake) { + // not needed anymore + TLS_FREE(context->cached_handshake); + context->cached_handshake = NULL; + context->cached_handshake_len = 0; + } + if (res == 1) { + DEBUG_PRINT("Signature OK\n"); + context->client_verified = 1; + } else { + DEBUG_PRINT("Signature FAILED\n"); + context->client_verified = 0; + } + return 1; +} + +void _private_dtls_reset_handshake(struct TLSContext *context) { + if ((context) && (context->dtls)) { + // reset state + memset(context->hs_messages, 0, sizeof(context->hs_messages)); + context->connection_status = 0; + context->cipher_spec_set = 0; + context->dtls_seq = 0; +#ifdef TLS_LEGACY_SUPPORT + if (context->cached_handshake) { + TLS_FREE(context->cached_handshake); + context->cached_handshake = NULL; + context->cached_handshake_len = 0; + } +#endif + _private_tls_done_hash(context, NULL); + + if (context->is_server) { + if (context->client_certificates) { + int i; + for (i = 0; i < context->client_certificates_count; i++) + tls_destroy_certificate(context->client_certificates[i]); + TLS_FREE(context->client_certificates); + + context->client_certificates_count = 0; + context->client_certificates = NULL; + } + } + + while (context->dtls_data->dtls_handshake_list) { + struct TLSHandshakeList *next = (struct TLSHandshakeList *)context->dtls_data->dtls_handshake_list->next; + if (context->dtls_data->dtls_handshake_list->msg) { + TLS_FREE(context->dtls_data->dtls_handshake_list->msg); + } + TLS_FREE(context->dtls_data->dtls_handshake_list); + context->dtls_data->dtls_handshake_list = next; + } + context->dtls_data->dtls_handshake_list = NULL; + } +} + +void _private_dtls_rehash(struct TLSContext *context, unsigned char msg_type) { + if ((context) && (context->dtls) && (msg_type)) { + // create a new list, delete old one + struct TLSHandshakeList *handshake_list = context->dtls_data->dtls_handshake_list; + + int found = 0; + while (handshake_list) { + struct TLSHandshakeList *next = (struct TLSHandshakeList *)handshake_list->next; + + if ((handshake_list->direction == 0) && (handshake_list->msg[0] == msg_type)) { + found = 1; + context->connection_status = handshake_list->connection_status; + break; + } + + handshake_list = next; + } + + if (!found) { + DEBUG_PRINT("message already cleared\n"); + return; + } + + handshake_list = context->dtls_data->dtls_handshake_list; + + struct TLSHandshakeList *to_delete = handshake_list; + context->dtls_data->dtls_handshake_list = NULL; + + _private_tls_done_hash(context, NULL); + + while (handshake_list) { + struct TLSHandshakeList *next = (struct TLSHandshakeList *)handshake_list->next; + + + if (handshake_list->direction) + context->connection_status = handshake_list->connection_status; + + if ((handshake_list->direction == 0) && (handshake_list->msg[0] == msg_type)) + break; + + _private_tls_update_hash(context, handshake_list->msg, handshake_list->len, handshake_list->direction, handshake_list->connection_status); + handshake_list = next; + } + + handshake_list = to_delete; + while (handshake_list) { + struct TLSHandshakeList *next = (struct TLSHandshakeList *)handshake_list->next; + if (handshake_list->msg) { + TLS_FREE(handshake_list->msg); + } + TLS_FREE(handshake_list); + handshake_list = next; + } + } +} + +int tls_parse_payload(struct TLSContext *context, const unsigned char *buf, int buf_len, tls_validation_function certificate_verify) { + int orig_len = buf_len; + if (context->connection_status == 0xFF) { +#ifndef TLS_ACCEPT_SECURE_RENEGOTIATION + // renegotiation disabled (emit warning alert) + if (context->dtls) + return orig_len; + _private_tls_write_packet(tls_build_alert(context, 0, no_renegotiation)); + return 1; +#endif + } + + unsigned char local_buffer[DTLS_MAX_FRAGMENT_SIZE + 12]; + while ((buf_len >= 4) && (!context->critical_error)) { + int payload_res = 0; + unsigned char update_hash = 1; + CHECK_SIZE(1, buf_len, TLS_NEED_MORE_DATA) + unsigned char type = buf[0]; + unsigned int write_packets = 0; + unsigned int dtls_cookie_verified = 0; + int certificate_verify_alert = no_error; + unsigned int payload_size = buf[1] * 0x10000 + buf[2] * 0x100 + buf[3] + 3; + if (context->dtls) { + payload_size += 8; + if (context->dtls_data->fragment) { + CHECK_SIZE(payload_size - 11, context->dtls_data->fragment->written, TLS_NEED_MORE_DATA) + + local_buffer[0] = type; + + TLS_24_BIT(local_buffer, 1, context->dtls_data->fragment->written); + + local_buffer[4] = buf[4]; + local_buffer[5] = buf[5]; + + local_buffer[6] = 0; + local_buffer[7] = 0; + local_buffer[8] = 0; + + TLS_24_BIT(local_buffer, 9, context->dtls_data->fragment->written); + + memcpy(local_buffer + 12, context->dtls_data->fragment->buffer, context->dtls_data->fragment->written); + + buf = local_buffer; + buf_len = context->dtls_data->fragment->written + 12; + + TLS_FREE(context->dtls_data->fragment->buffer); + TLS_FREE(context->dtls_data->fragment); + context->dtls_data->fragment = 0; + } else { + CHECK_SIZE(payload_size + 1, buf_len, TLS_NEED_MORE_DATA) + } + } else { + CHECK_SIZE(payload_size + 1, buf_len, TLS_NEED_MORE_DATA) + } + switch (type) { + // hello request + case 0x00: + DEBUG_PRINT(" => HELLO REQUEST (RENEGOTIATION?)\n"); + CHECK_HANDSHAKE_STATE(context, 0, 1); + if (context->dtls) + context->dtls_seq = 0; + if (context->is_server) + payload_res = TLS_UNEXPECTED_MESSAGE; + else { + if (context->connection_status == 0xFF) { + // renegotiation +#ifdef TLS_ACCEPT_SECURE_RENEGOTIATION + if (context->critical_error) + payload_res = TLS_UNEXPECTED_MESSAGE; + else { + _private_tls_reset_context(context); + _private_tls_write_packet(tls_build_hello(context, 0)); + return 1; + } +#else + payload_res = TLS_NO_RENEGOTIATION; +#endif + } else + payload_res = TLS_UNEXPECTED_MESSAGE; + } + // no payload + break; + // client hello + case 0x01: + DEBUG_PRINT(" => CLIENT HELLO\n"); + if (context->dtls) { + _private_dtls_reset_handshake(context); + } else { + CHECK_HANDSHAKE_STATE(context, 1, (context->dtls ? 2 : 1)); + } + if ((context->dtls == 4) && (!context->is_server) && (context->connection_status == 0)) { + DEBUG_PRINT("SRTP HANDSHAKE: SWITCHING FROM CLIENT TO SERVER\n"); + context->is_server = 1; + context->certificates = context->client_certificates; + context->certificates_count = context->client_certificates_count; + context->request_client_certificate = 1; + + context->client_certificates = NULL; + context->client_certificates_count = 0; + } + + if (context->is_server) { + payload_res = tls_parse_hello(context, buf + 1, payload_size, &write_packets, &dtls_cookie_verified); + DEBUG_PRINT(" => DTLS COOKIE VERIFIED: %i (%i)\n", dtls_cookie_verified, payload_res); + if ((context->dtls) && (payload_res > 0) && (!dtls_cookie_verified)) { + // wait client hello + context->connection_status = 3; + update_hash = 0; + } + } else + payload_res = TLS_UNEXPECTED_MESSAGE; + break; + // server hello + case 0x02: + DEBUG_PRINT(" => SERVER HELLO\n"); + CHECK_HANDSHAKE_STATE(context, 2, 1); + if (context->is_server) + payload_res = TLS_UNEXPECTED_MESSAGE; + else + payload_res = tls_parse_hello(context, buf + 1, payload_size, &write_packets, &dtls_cookie_verified); + break; + // hello verify request + case 0x03: + DEBUG_PRINT(" => VERIFY REQUEST\n"); + CHECK_HANDSHAKE_STATE(context, 3, 1); + if ((context->dtls) && (!context->is_server)) { + payload_res = tls_parse_verify_request(context, buf + 1, payload_size, &write_packets); + update_hash = 0; + } else + payload_res = TLS_UNEXPECTED_MESSAGE; + break; + // certificate + case 0x0B: + DEBUG_PRINT(" => CERTIFICATE\n"); + CHECK_HANDSHAKE_STATE(context, 4, 1); +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + if (context->connection_status == 2) { + payload_res = tls_parse_certificate(context, buf + 1, payload_size, context->is_server); + if (context->is_server) { + if ((certificate_verify) && (context->client_certificates_count)) + certificate_verify_alert = certificate_verify(context, context->client_certificates, context->client_certificates_count); + // empty certificates are permitted for client + if (payload_res == 0) + payload_res = 1; + } else { + if ((certificate_verify) && (context->certificates_count)) + certificate_verify_alert = certificate_verify(context, context->certificates, context->certificates_count); + } + } else + payload_res = TLS_UNEXPECTED_MESSAGE; + } else +#endif + if (context->connection_status == 1) { + if (context->is_server) { + // client certificate + payload_res = tls_parse_certificate(context, buf + 1, payload_size, 1); + if ((certificate_verify) && (context->client_certificates_count)) + certificate_verify_alert = certificate_verify(context, context->client_certificates, context->client_certificates_count); + // empty certificates are permitted for client + if (payload_res == 0) + payload_res = 1; + } else { + payload_res = tls_parse_certificate(context, buf + 1, payload_size, 0); + if ((certificate_verify) && (context->certificates_count)) + certificate_verify_alert = certificate_verify(context, context->certificates, context->certificates_count); + } + } else { + DEBUG_PRINT("* UNEXPECTED CERTIFICATE (%i)\n", context->connection_status); + payload_res = TLS_UNEXPECTED_MESSAGE; + } + break; + // server key exchange + case 0x0C: + DEBUG_PRINT(" => SERVER KEY EXCHANGE\n"); + CHECK_HANDSHAKE_STATE(context, 5, 1); + if (context->is_server) + payload_res = TLS_UNEXPECTED_MESSAGE; + else + payload_res = tls_parse_server_key_exchange(context, buf + 1, payload_size); + break; + // certificate request + case 0x0D: + DEBUG_PRINT(" => CERTIFICATE REQUEST\n"); + CHECK_HANDSHAKE_STATE(context, 6, 1); + // server to client + if (context->is_server) + payload_res = TLS_UNEXPECTED_MESSAGE; + else + context->client_verified = 2; + break; + // server hello done + case 0x0E: + DEBUG_PRINT(" => SERVER HELLO DONE\n"); + CHECK_HANDSHAKE_STATE(context, 7, 1); + if (context->is_server) { + payload_res = TLS_UNEXPECTED_MESSAGE; + } else { + payload_res = tls_parse_server_hello_done(context, buf + 1, payload_size); + if (payload_res > 0) + write_packets = 1; + } + break; + // certificate verify + case 0x0F: + DEBUG_PRINT(" => CERTIFICATE VERIFY (%i)\n", payload_size); + CHECK_HANDSHAKE_STATE(context, 8, 1); + if (context->connection_status == 2) + payload_res = tls_parse_verify(context, buf + 1, payload_size); + else + payload_res = TLS_UNEXPECTED_MESSAGE; + break; + // client key exchange + case 0x10: + DEBUG_PRINT(" => CLIENT KEY EXCHANGE\n"); + CHECK_HANDSHAKE_STATE(context, 9, 1); + if (context->is_server) { + _private_tls_update_hash(context, buf, payload_size + 1, 0, 0); + payload_res = tls_parse_client_key_exchange(context, buf + 1, payload_size); + update_hash = 0; + } else + payload_res = TLS_UNEXPECTED_MESSAGE; + break; + // finished + case 0x14: + DEBUG_PRINT(" => FINISHED\n"); + if (context->cached_handshake) { + TLS_FREE(context->cached_handshake); + context->cached_handshake = NULL; + context->cached_handshake_len = 0; + } + CHECK_HANDSHAKE_STATE(context, 10, 1); + payload_res = tls_parse_finished(context, buf + 1, payload_size, &write_packets); + if (payload_res > 0) + memset(context->hs_messages, 0, sizeof(context->hs_messages)); + #ifdef WITH_TLS_13 + if ((!context->is_server) && ((context->version == TLS_V13) || (context->version == DTLS_V13))) { + update_hash = 0; + DEBUG_PRINT("<= SENDING FINISHED\n"); + _private_tls_update_hash(context, buf, payload_size + 1, 0, 0xFF); + _private_tls_write_packet(tls_build_finished(context)); + _private_tls13_key(context, 0); + context->connection_status = 0xFF; + context->local_sequence_number = 0; + context->remote_sequence_number = 0; + } +#endif + break; +#ifdef WITH_TLS_13 + case 0x08: + // encrypted extensions ... ignore it for now + break; +#endif + default: + DEBUG_PRINT(" => NOT UNDERSTOOD PAYLOAD TYPE: %x\n", (int)type); + return TLS_NOT_UNDERSTOOD; + } + if ((type != 0x00) && (update_hash) && (payload_res != TLS_UNEXPECTED_MESSAGE)) + _private_tls_update_hash(context, buf, payload_size + 1, 0, 0); + + if (certificate_verify_alert != no_error) { + _private_tls_write_packet(tls_build_alert(context, 1, certificate_verify_alert)); + context->critical_error = 1; + } + + if (payload_res < 0) { + switch (payload_res) { + case TLS_UNEXPECTED_MESSAGE: + if (context->dtls) + return orig_len; + else + _private_tls_write_packet(tls_build_alert(context, 1, unexpected_message)); + break; + case TLS_COMPRESSION_NOT_SUPPORTED: + _private_tls_write_packet(tls_build_alert(context, 1, decompression_failure)); + break; + case TLS_BROKEN_PACKET: + _private_tls_write_packet(tls_build_alert(context, 1, decode_error)); + break; + case TLS_NO_MEMORY: + _private_tls_write_packet(tls_build_alert(context, 1, internal_error)); + break; + case TLS_NOT_VERIFIED: + _private_tls_write_packet(tls_build_alert(context, 1, bad_record_mac)); + break; + case TLS_BAD_CERTIFICATE: + if (context->is_server) { + // bad client certificate, continue + _private_tls_write_packet(tls_build_alert(context, 0, bad_certificate)); + payload_res = 0; + } else + _private_tls_write_packet(tls_build_alert(context, 1, bad_certificate)); + break; + case TLS_UNSUPPORTED_CERTIFICATE: + _private_tls_write_packet(tls_build_alert(context, 1, unsupported_certificate)); + break; + case TLS_NO_COMMON_CIPHER: + _private_tls_write_packet(tls_build_alert(context, 1, insufficient_security)); + break; + case TLS_NOT_UNDERSTOOD: + _private_tls_write_packet(tls_build_alert(context, 1, internal_error)); + break; + case TLS_NO_RENEGOTIATION: + _private_tls_write_packet(tls_build_alert(context, 0, no_renegotiation)); + payload_res = 0; + break; + case TLS_DECRYPTION_FAILED: + _private_tls_write_packet(tls_build_alert(context, 1, decryption_failed_RESERVED)); + break; + } + if (payload_res < 0) + return payload_res; + } + if (certificate_verify_alert != no_error) + payload_res = TLS_BAD_CERTIFICATE; + + // except renegotiation + switch (write_packets) { + case 1: + if (context->client_verified == 2) { + DEBUG_PRINT("<= Building CERTIFICATE \n"); + _private_tls_write_packet(tls_build_certificate(context)); + context->client_verified = 0; + } + // client handshake + DEBUG_PRINT("<= Building KEY EXCHANGE\n"); + _private_tls_write_packet(tls_build_client_key_exchange(context)); + DEBUG_PRINT("<= Building CHANGE CIPHER SPEC\n"); + _private_tls_write_packet(tls_build_change_cipher_spec(context)); + context->cipher_spec_set = 1; + context->local_sequence_number = 0; + DEBUG_PRINT("<= Building CLIENT FINISHED\n"); + _private_tls_write_packet(tls_build_finished(context)); + context->cipher_spec_set = 0; +#ifdef TLS_12_FALSE_START + if ((!context->is_server) && (context->version == TLS_V12)) { + // https://tools.ietf.org/html/rfc7918 + // 5.1. Symmetric Cipher + // Clients MUST NOT use the False Start protocol modification in a + // handshake unless the cipher suite uses a symmetric cipher that is + // considered cryptographically strong. + switch (context->cipher) { + case TLS_RSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_RSA_WITH_AES_256_GCM_SHA384: + case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: + case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384: + case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: + context->false_start = 1; + break; + } + } +#endif + break; + case 2: + // server handshake + if ((context->dtls) && (dtls_cookie_verified == 0)) { + _private_tls_write_packet(tls_build_verify_request(context)); + _private_dtls_reset(context); + } else { + DEBUG_PRINT("<= SENDING SERVER HELLO\n"); +#ifdef WITH_TLS_13 + if (context->connection_status == 3) { + context->connection_status = 2; + _private_tls_write_packet(tls_build_hello(context, 0)); + _private_tls_write_packet(tls_build_change_cipher_spec(context)); + _private_tls13_key(context, 1); + context->cipher_spec_set = 1; + DEBUG_PRINT("<= SENDING ENCRYPTED EXTENSIONS\n"); + _private_tls_write_packet(tls_build_encrypted_extensions(context)); + if (context->request_client_certificate) { + DEBUG_PRINT("<= SENDING CERTIFICATE REQUEST\n"); + _private_tls_write_packet(tls_certificate_request(context)); + } + DEBUG_PRINT("<= SENDING CERTIFICATE\n"); + _private_tls_write_packet(tls_build_certificate(context)); + DEBUG_PRINT("<= SENDING CERTIFICATE VERIFY\n"); + _private_tls_write_packet(tls_build_certificate_verify(context)); + DEBUG_PRINT("<= SENDING FINISHED\n"); + _private_tls_write_packet(tls_build_finished(context)); + // new key + TLS_FREE(context->server_finished_hash); + context->server_finished_hash = (unsigned char *)TLS_MALLOC(_private_tls_mac_length(context)); + if (context->server_finished_hash) + _private_tls_get_hash(context, context->server_finished_hash); + break; + } +#endif + _private_tls_write_packet(tls_build_hello(context, 0)); + DEBUG_PRINT("<= SENDING CERTIFICATE\n"); + _private_tls_write_packet(tls_build_certificate(context)); + int ephemeral_cipher = tls_cipher_is_ephemeral(context); + if (ephemeral_cipher) { + DEBUG_PRINT("<= SENDING EPHEMERAL DH KEY\n"); + _private_tls_write_packet(tls_build_server_key_exchange(context, ephemeral_cipher == 1 ? KEA_dhe_rsa : KEA_ec_diffie_hellman)); + } + if (context->request_client_certificate) { + DEBUG_PRINT("<= SENDING CERTIFICATE REQUEST\n"); + _private_tls_write_packet(tls_certificate_request(context)); + } + DEBUG_PRINT("<= SENDING DONE\n"); + _private_tls_write_packet(tls_build_done(context)); + } + break; + case 3: + // finished + _private_tls_write_packet(tls_build_change_cipher_spec(context)); + _private_tls_write_packet(tls_build_finished(context)); + context->connection_status = 0xFF; + break; + case 4: + // dtls only + context->dtls_seq = 1; + _private_tls_write_packet(tls_build_hello(context, 0)); + break; +#ifdef WITH_TLS_13 + case 5: + // hello retry request + DEBUG_PRINT("<= SENDING HELLO RETRY REQUEST\n"); + _private_tls_write_packet(tls_build_hello(context, 0)); + break; +#endif + } + payload_size ++; + buf += payload_size; + buf_len -= payload_size; + } + return orig_len; +} + +unsigned int _private_tls_hmac_message(unsigned char local, struct TLSContext *context, const unsigned char *buf, int buf_len, const unsigned char *buf2, int buf_len2, unsigned char *out, unsigned int outlen, uint64_t remote_sequence_number) { + hmac_state hash; + int mac_size = outlen; + int hash_idx; + if (mac_size == TLS_SHA1_MAC_SIZE) + hash_idx = find_hash("sha1"); + else + if (mac_size == TLS_SHA384_MAC_SIZE) + hash_idx = find_hash("sha384"); + else + hash_idx = find_hash("sha256"); + + if (hmac_init(&hash, hash_idx, local ? context->crypto.ctx_local_mac.local_mac : context->crypto.ctx_remote_mac.remote_mac, mac_size)) + return 0; + + uint64_t squence_number; + if (context->dtls) + squence_number = htonll(remote_sequence_number); + else + if (local) + squence_number = htonll(context->local_sequence_number); + else + squence_number = htonll(context->remote_sequence_number); + + if (hmac_process(&hash, (unsigned char *)&squence_number, sizeof(uint64_t))) + return 0; + + if (hmac_process(&hash, buf, buf_len)) + return 0; + if ((buf2) && (buf_len2)) { + if (hmac_process(&hash, buf2, buf_len2)) + return 0; + } + unsigned long ref_outlen = outlen; + if (hmac_done(&hash, out, &ref_outlen)) + return 0; + + return (unsigned int)ref_outlen; +} + +int tls_parse_message(struct TLSContext *context, unsigned char *buf, int buf_len, tls_validation_function certificate_verify) { + int res = 5; + if (context->dtls) + res = 13; + int header_size = res; + int payload_res = 0; + + CHECK_SIZE(res, buf_len, TLS_NEED_MORE_DATA) + + unsigned char type = *buf; + + int buf_pos = 1; + + unsigned short version = ntohs(*(unsigned short *)&buf[buf_pos]); + buf_pos += 2; + + uint64_t dtls_sequence_number = 0; + unsigned short dtls_epoch = 0; + if (context->dtls) { + CHECK_SIZE(buf_pos + 8, buf_len, TLS_NEED_MORE_DATA) + dtls_epoch = ntohs(*(unsigned short *)&buf[buf_pos]); + dtls_sequence_number = ntohll(*(uint64_t *)&buf[buf_pos]); + + buf_pos += 8; + } + + VERSION_SUPPORTED(version, TLS_NOT_SAFE) + unsigned short length; + length = ntohs(*(unsigned short *)&buf[buf_pos]); + buf_pos += 2; + + unsigned char *pt = NULL; + const unsigned char *ptr = buf + buf_pos; + + CHECK_SIZE(buf_pos + length, buf_len, TLS_NEED_MORE_DATA) + DEBUG_PRINT("Message type: %0x, length: %i\n", (int)type, (int)length); + if ((context->dtls) && (type == TLS_HANDSHAKE)) { + if (!dtls_epoch) + context->cipher_spec_set = 0; + + DEBUG_PRINT("HANDSHAKE RETRANSMISSION DETECTED\n"); + } + if ((context->cipher_spec_set) && (type != TLS_CHANGE_CIPHER)) { + DEBUG_DUMP_HEX_LABEL("encrypted", &buf[header_size], length); + if (!context->crypto.created) { + DEBUG_PRINT("Encryption context not created\n"); + _private_random_sleep(context, TLS_MAX_ERROR_SLEEP_uS); + return TLS_BROKEN_PACKET; + } + pt = (unsigned char *)TLS_MALLOC(length); + if (!pt) { + DEBUG_PRINT("Error in TLS_MALLOC (%i bytes)\n", (int)length); + _private_random_sleep(context, TLS_MAX_ERROR_SLEEP_uS); + return TLS_NO_MEMORY; + } + + unsigned char aad[16]; + int aad_size = sizeof(aad); + unsigned char *sequence = aad; + + if (context->crypto.created == 2) { + int delta = 8; + int pt_length; + unsigned char iv[TLS_13_AES_GCM_IV_LENGTH]; + gcm_reset(&context->crypto.ctx_remote.aes_gcm_remote); + +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + aad[0] = TLS_APPLICATION_DATA; + aad[1] = 0x03; + aad[2] = 0x03; + *((unsigned short *)(aad + 3)) = htons(buf_len - header_size); + aad_size = 5; + sequence = aad + 5; + if (context->dtls) + *((uint64_t *)sequence) = *(uint64_t *)(buf + 3); + else + *((uint64_t *)sequence) = htonll(context->remote_sequence_number); + memcpy(iv, context->crypto.ctx_remote_mac.remote_iv, TLS_13_AES_GCM_IV_LENGTH); + int i; + int offset = TLS_13_AES_GCM_IV_LENGTH - 8; + for (i = 0; i < 8; i++) + iv[offset + i] = context->crypto.ctx_remote_mac.remote_iv[offset + i] ^ sequence[i]; + pt_length = buf_len - header_size - TLS_GCM_TAG_LEN; + delta = 0; + } else { +#endif + aad_size = 13; + pt_length = length - 8 - TLS_GCM_TAG_LEN; + // build aad and iv + if (context->dtls) + *((uint64_t *)aad) = htonll(dtls_sequence_number); + else + *((uint64_t *)aad) = htonll(context->remote_sequence_number); + aad[8] = buf[0]; + aad[9] = buf[1]; + aad[10] = buf[2]; + + memcpy(iv, context->crypto.ctx_remote_mac.remote_aead_iv, 4); + memcpy(iv + 4, buf + header_size, 8); + *((unsigned short *)(aad + 11)) = htons((unsigned short)pt_length); +#ifdef WITH_TLS_13 + } +#endif + if (pt_length < 0) { + DEBUG_PRINT("Invalid packet length"); + TLS_FREE(pt); + _private_random_sleep(context, TLS_MAX_ERROR_SLEEP_uS); + return TLS_BROKEN_PACKET; + } + DEBUG_DUMP_HEX_LABEL("aad", aad, aad_size); + DEBUG_DUMP_HEX_LABEL("aad iv", iv, 12); + + int res0 = gcm_add_iv(&context->crypto.ctx_remote.aes_gcm_remote, iv, 12); + int res1 = gcm_add_aad(&context->crypto.ctx_remote.aes_gcm_remote, aad, aad_size); + memset(pt, 0, length); + DEBUG_PRINT("PT SIZE: %i\n", pt_length); + int res2 = gcm_process(&context->crypto.ctx_remote.aes_gcm_remote, pt, pt_length, buf + header_size + delta, GCM_DECRYPT); + unsigned char tag[32]; + unsigned long taglen = 32; + int res3 = gcm_done(&context->crypto.ctx_remote.aes_gcm_remote, tag, &taglen); + if ((res0) || (res1) || (res2) || (res3) || (taglen != TLS_GCM_TAG_LEN)) { + DEBUG_PRINT("ERROR: gcm_add_iv: %i, gcm_add_aad: %i, gcm_process: %i, gcm_done: %i\n", res0, res1, res2, res3); + _private_random_sleep(context, TLS_MAX_ERROR_SLEEP_uS); + return TLS_BROKEN_PACKET; + } + DEBUG_DUMP_HEX_LABEL("decrypted", pt, pt_length); + DEBUG_DUMP_HEX_LABEL("tag", tag, taglen); + // check tag + if (memcmp(buf + header_size + delta + pt_length, tag, taglen)) { + DEBUG_PRINT("INTEGRITY CHECK FAILED (msg length %i)\n", pt_length); + DEBUG_DUMP_HEX_LABEL("TAG RECEIVED", buf + header_size + delta + pt_length, taglen); + DEBUG_DUMP_HEX_LABEL("TAG COMPUTED", tag, taglen); + TLS_FREE(pt); + + // silently ignore packet for DTLS + if (context->dtls) + return header_size + length; + + _private_random_sleep(context, TLS_MAX_ERROR_SLEEP_uS); + _private_tls_write_packet(tls_build_alert(context, 1, bad_record_mac)); + return TLS_INTEGRITY_FAILED; + } + ptr = pt; + length = (unsigned short)pt_length; +#ifdef TLS_WITH_CHACHA20_POLY1305 + } else + if (context->crypto.created == 3) { + int pt_length = length - POLY1305_TAGLEN; + unsigned int counter = 1; + unsigned char poly1305_key[POLY1305_KEYLEN]; + unsigned char trail[16]; + unsigned char mac_tag[POLY1305_TAGLEN]; + aad_size = 16; + if (pt_length < 0) { + DEBUG_PRINT("Invalid packet length"); + TLS_FREE(pt); + _private_random_sleep(context, TLS_MAX_ERROR_SLEEP_uS); + return TLS_BROKEN_PACKET; + } +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + aad[0] = TLS_APPLICATION_DATA; + aad[1] = 0x03; + aad[2] = 0x03; + *((unsigned short *)(aad + 3)) = htons(buf_len - header_size); + aad_size = 5; + sequence = aad + 5; + if (context->dtls) + *((uint64_t *)sequence) = *(uint64_t *)(buf + 3); + else + *((uint64_t *)sequence) = htonll(context->remote_sequence_number); + } else { +#endif + if (context->dtls) + *((uint64_t *)aad) = htonll(dtls_sequence_number); + else + *((uint64_t *)aad) = htonll(context->remote_sequence_number); + aad[8] = buf[0]; + aad[9] = buf[1]; + aad[10] = buf[2]; + *((unsigned short *)(aad + 11)) = htons((unsigned short)pt_length); + aad[13] = 0; + aad[14] = 0; + aad[15] = 0; +#ifdef WITH_TLS_13 + } +#endif + + chacha_ivupdate(&context->crypto.ctx_remote.chacha_remote, context->crypto.ctx_remote_mac.remote_aead_iv, sequence, (unsigned char *)&counter); + + chacha_encrypt_bytes(&context->crypto.ctx_remote.chacha_remote, buf + header_size, pt, pt_length); + DEBUG_DUMP_HEX_LABEL("decrypted", pt, pt_length); + ptr = pt; + length = (unsigned short)pt_length; + + chacha20_poly1305_key(&context->crypto.ctx_remote.chacha_remote, poly1305_key); + poly1305_context ctx; + _private_tls_poly1305_init(&ctx, poly1305_key); + _private_tls_poly1305_update(&ctx, aad, aad_size); + static unsigned char zeropad[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + int rem = aad_size % 16; + if (rem) + _private_tls_poly1305_update(&ctx, zeropad, 16 - rem); + _private_tls_poly1305_update(&ctx, buf + header_size, pt_length); + rem = pt_length % 16; + if (rem) + _private_tls_poly1305_update(&ctx, zeropad, 16 - rem); + + _private_tls_U32TO8(&trail[0], aad_size == 5 ? 5 : 13); + *(int *)&trail[4] = 0; + _private_tls_U32TO8(&trail[8], pt_length); + *(int *)&trail[12] = 0; + + _private_tls_poly1305_update(&ctx, trail, 16); + _private_tls_poly1305_finish(&ctx, mac_tag); + if (memcmp(mac_tag, buf + header_size + pt_length, POLY1305_TAGLEN)) { + DEBUG_PRINT("INTEGRITY CHECK FAILED (msg length %i)\n", length); + DEBUG_DUMP_HEX_LABEL("POLY1305 TAG RECEIVED", buf + header_size + pt_length, POLY1305_TAGLEN); + DEBUG_DUMP_HEX_LABEL("POLY1305 TAG COMPUTED", mac_tag, POLY1305_TAGLEN); + TLS_FREE(pt); + + // silently ignore packet for DTLS + if (context->dtls) + return header_size + length; + + _private_random_sleep(context, TLS_MAX_ERROR_SLEEP_uS); + _private_tls_write_packet(tls_build_alert(context, 1, bad_record_mac)); + return TLS_INTEGRITY_FAILED; + } +#endif + } else { + int err = _private_tls_crypto_decrypt(context, buf + header_size, pt, length); + if (err) { + TLS_FREE(pt); + DEBUG_PRINT("Decryption error %i\n", (int)err); + _private_random_sleep(context, TLS_MAX_ERROR_SLEEP_uS); + return TLS_BROKEN_PACKET; + } + unsigned char padding_byte = pt[length - 1]; + unsigned char padding = padding_byte + 1; + + // poodle check + int padding_index = length - padding; + if (padding_index > 0) { + int i; + int limit = length - 1; + for (i = length - padding; i < limit; i++) { + if (pt[i] != padding_byte) { + TLS_FREE(pt); + DEBUG_PRINT("BROKEN PACKET (POODLE ?)\n"); + _private_random_sleep(context, TLS_MAX_ERROR_SLEEP_uS); + _private_tls_write_packet(tls_build_alert(context, 1, decrypt_error)); + return TLS_BROKEN_PACKET; + } + } + } + + unsigned int decrypted_length = length; + if (padding < decrypted_length) + decrypted_length -= padding; + + DEBUG_DUMP_HEX_LABEL("decrypted", pt, decrypted_length); + ptr = pt; +#ifdef TLS_LEGACY_SUPPORT + if ((context->version != TLS_V10) && (decrypted_length > TLS_AES_IV_LENGTH)) { + decrypted_length -= TLS_AES_IV_LENGTH; + ptr += TLS_AES_IV_LENGTH; + } +#else + if (decrypted_length > TLS_AES_IV_LENGTH) { + decrypted_length -= TLS_AES_IV_LENGTH; + ptr += TLS_AES_IV_LENGTH; + } +#endif + length = decrypted_length; + + unsigned int mac_size = _private_tls_mac_length(context); + if ((length < mac_size) || (!mac_size)) { + TLS_FREE(pt); + DEBUG_PRINT("BROKEN PACKET\n"); + _private_random_sleep(context, TLS_MAX_ERROR_SLEEP_uS); + _private_tls_write_packet(tls_build_alert(context, 1, decrypt_error)); + return TLS_BROKEN_PACKET; + } + + length -= mac_size; + + const unsigned char *message_hmac = &ptr[length]; + unsigned char hmac_out[TLS_MAX_MAC_SIZE]; + unsigned char temp_buf[5]; + memcpy(temp_buf, buf, 3); + *(unsigned short *)(temp_buf + 3) = htons(length); + unsigned int hmac_out_len = _private_tls_hmac_message(0, context, temp_buf, 5, ptr, length, hmac_out, mac_size, dtls_sequence_number); + if ((hmac_out_len != mac_size) || (memcmp(message_hmac, hmac_out, mac_size))) { + DEBUG_PRINT("INTEGRITY CHECK FAILED (msg length %i)\n", length); + DEBUG_DUMP_HEX_LABEL("HMAC RECEIVED", message_hmac, mac_size); + DEBUG_DUMP_HEX_LABEL("HMAC COMPUTED", hmac_out, hmac_out_len); + TLS_FREE(pt); + + // silently ignore packet for DTLS + if (context->dtls) + return header_size + length; + + _private_random_sleep(context, TLS_MAX_ERROR_SLEEP_uS); + _private_tls_write_packet(tls_build_alert(context, 1, bad_record_mac)); + + return TLS_INTEGRITY_FAILED; + } + } + } + if (context->dtls) { + context->dtls_epoch_remote = dtls_epoch; + context->remote_sequence_number = dtls_sequence_number & 0xFFFFFFFFFFFFLL; + } else + context->remote_sequence_number ++; + +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + if (/*(context->connection_status == 2) && */(type == TLS_APPLICATION_DATA) && (context->crypto.created)) { + do { + length--; + type = ptr[length]; + } while (!type); + } + } +#endif + switch (type) { + // application data + case TLS_APPLICATION_DATA: + if (context->connection_status != 0xFF) { + DEBUG_PRINT("UNEXPECTED APPLICATION DATA MESSAGE\n"); + payload_res = TLS_UNEXPECTED_MESSAGE; + _private_tls_write_packet(tls_build_alert(context, 1, unexpected_message)); + } else { + DEBUG_PRINT("APPLICATION DATA MESSAGE (TLS VERSION: %x):\n", (int)context->version); + DEBUG_DUMP(ptr, length); + DEBUG_PRINT("\n"); + _private_tls_write_app_data(context, ptr, length); + } + break; + // handshake + case TLS_HANDSHAKE: + DEBUG_PRINT("HANDSHAKE MESSAGE\n"); + payload_res = tls_parse_payload(context, ptr, length, certificate_verify); + break; + // change cipher spec + case TLS_CHANGE_CIPHER: + context->dtls_epoch_remote ++; + if ((context->connection_status != 2) && (!context->dtls)) { +#ifdef WITH_TLS_13 + if (context->connection_status == 4) { + DEBUG_PRINT("IGNORING CHANGE CIPHER SPEC MESSAGE (HELLO RETRY REQUEST)\n"); + break; + } +#endif + DEBUG_PRINT("UNEXPECTED CHANGE CIPHER SPEC MESSAGE (%i)\n", context->connection_status); + _private_tls_write_packet(tls_build_alert(context, 1, unexpected_message)); + payload_res = TLS_UNEXPECTED_MESSAGE; + } else { + DEBUG_PRINT("CHANGE CIPHER SPEC MESSAGE\n"); + context->cipher_spec_set = 1; + // reset sequence numbers + context->remote_sequence_number = 0; + } +#ifdef WITH_TLS_13 + if (!context->is_server) + _private_tls13_key(context, 1); +#endif + break; + // alert + case TLS_ALERT: + DEBUG_PRINT("ALERT MESSAGE\n"); + if (length >= 2) { + DEBUG_DUMP_HEX(ptr, length); + int level = ptr[0]; + int code = ptr[1]; + if (level == TLS_ALERT_CRITICAL) { + context->critical_error = 1; + res = TLS_ERROR_ALERT; + } + context->error_code = code; + } + break; + default: + DEBUG_PRINT("NOT UNDERSTOOD MESSAGE TYPE: %x\n", (int)type); + TLS_FREE(pt); + return TLS_NOT_UNDERSTOOD; + } + TLS_FREE(pt); + + if (payload_res < 0) + return payload_res; + + if (res > 0) + return header_size + length; + + return res; +} + +unsigned int asn1_get_len(const unsigned char *buffer, int buf_len, unsigned int *octets) { + *octets = 0; + + if (buf_len < 1) + return 0; + + unsigned char size = buffer[0]; + int i; + if (size & 0x80) { + *octets = size & 0x7F; + if ((int)*octets > buf_len - 1) + return 0; + // max 32 bits + unsigned int ref_octets = *octets; + if (*octets > 4) + ref_octets = 4; + if ((int)*octets > buf_len -1) + return 0; + unsigned int long_size = 0; + unsigned int coef = 1; + + for (i = ref_octets; i > 0; i--) { + long_size += buffer[i] * coef; + coef *= 0x100; + } + ++*octets; + return long_size; + } + ++*octets; + return size; +} + +void print_index(const unsigned int *fields) { + int i = 0; + while (fields[i]) { + if (i) + DEBUG_PRINT("."); + DEBUG_PRINT("%i", fields[i]); + i++; + } + while (i < 6) { + DEBUG_PRINT(" "); + i++; + } +} + +int _is_field(const unsigned int *fields, const unsigned int *prefix) { + int i = 0; + while (prefix[i]) { + if (fields[i] != prefix[i]) + return 0; + i++; + } + return 1; +} + +int _private_tls_hash_len(int algorithm) { + switch (algorithm) { + case TLS_RSA_SIGN_MD5: + return 16; + case TLS_RSA_SIGN_SHA1: + return 20; + case TLS_RSA_SIGN_SHA256: + case TLS_ECDSA_SIGN_SHA256: + return 32; + case TLS_RSA_SIGN_SHA384: + return 48; + case TLS_RSA_SIGN_SHA512: + return 64; + } + return 0; +} + +unsigned char *_private_tls_compute_hash(int algorithm, const unsigned char *message, unsigned int message_len) { + unsigned char *hash = NULL; + if ((!message) || (!message_len)) + return hash; + int err; + hash_state state; + switch (algorithm) { + case TLS_RSA_SIGN_MD5: + DEBUG_PRINT("SIGN MD5\n"); + hash = (unsigned char *)TLS_MALLOC(16); + if (!hash) + return NULL; + + err = md5_init(&state); + if (!err) { + err = md5_process(&state, message, message_len); + if (!err) + err = md5_done(&state, hash); + } + break; + case TLS_RSA_SIGN_SHA1: + DEBUG_PRINT("SIGN SHA1\n"); + hash = (unsigned char *)TLS_MALLOC(20); + if (!hash) + return NULL; + + err = sha1_init(&state); + if (!err) { + err = sha1_process(&state, message, message_len); + if (!err) + err = sha1_done(&state, hash); + } + break; + case TLS_RSA_SIGN_SHA256: + case TLS_ECDSA_SIGN_SHA256: + DEBUG_PRINT("SIGN SHA256\n"); + hash = (unsigned char *)TLS_MALLOC(32); + if (!hash) + return NULL; + + err = sha256_init(&state); + if (!err) { + err = sha256_process(&state, message, message_len); + if (!err) + err = sha256_done(&state, hash); + } + break; + case TLS_RSA_SIGN_SHA384: + DEBUG_PRINT("SIGN SHA384\n"); + hash = (unsigned char *)TLS_MALLOC(48); + if (!hash) + return NULL; + + err = sha384_init(&state); + if (!err) { + err = sha384_process(&state, message, message_len); + if (!err) + err = sha384_done(&state, hash); + } + break; + case TLS_RSA_SIGN_SHA512: + DEBUG_PRINT("SIGN SHA512\n"); + hash = (unsigned char *)TLS_MALLOC(64); + if (!hash) + return NULL; + + err = sha512_init(&state); + if (!err) { + err = sha512_process(&state, message, message_len); + if (!err) + err = sha512_done(&state, hash); + } + break; + default: + DEBUG_PRINT("UNKNOWN SIGNATURE ALGORITHM\n"); + } + return hash; +} + +int tls_certificate_verify_signature(struct TLSCertificate *cert, struct TLSCertificate *parent) { + if ((!cert) || (!parent) || (!cert->sign_key) || (!cert->fingerprint) || (!cert->sign_len) || (!parent->der_bytes) || (!parent->der_len)) { + DEBUG_PRINT("CANNOT VERIFY SIGNATURE"); + return 0; + } + tls_init(); + int hash_len = _private_tls_hash_len(cert->algorithm); + if (hash_len <= 0) + return 0; + + int hash_index = -1; + switch (cert->algorithm) { + case TLS_RSA_SIGN_MD5: + hash_index = find_hash("md5"); + break; + case TLS_RSA_SIGN_SHA1: + hash_index = find_hash("sha1"); + break; + case TLS_RSA_SIGN_SHA256: + case TLS_ECDSA_SIGN_SHA256: + hash_index = find_hash("sha256"); + break; + case TLS_RSA_SIGN_SHA384: + hash_index = find_hash("sha384"); + break; + case TLS_RSA_SIGN_SHA512: + hash_index = find_hash("sha512"); + break; + default: + DEBUG_PRINT("UNKNOWN SIGNATURE ALGORITHM\n"); + return 0; + } +#ifdef TLS_ECDSA_SUPPORTED + if (cert->algorithm == TLS_ECDSA_SIGN_SHA256) { + ecc_key key; + int err = ecc_import(parent->der_bytes, parent->der_len, &key); + if (err) { + DEBUG_PRINT("Error importing ECC certificate (code: %i)\n", err); + DEBUG_DUMP_HEX_LABEL("CERTIFICATE", parent->der_bytes, parent->der_len); + return 0; + } + int ecc_stat = 0; + unsigned char *signature = cert->sign_key; + int signature_len = cert->sign_len; + if (!signature[0]) { + signature++; + signature_len--; + } + err = ecc_verify_hash(signature, signature_len, cert->fingerprint, hash_len, &ecc_stat, &key); + ecc_free(&key); + if (err) { + DEBUG_PRINT("ECC HASH VERIFY ERROR %i\n", err); + return 0; + } + DEBUG_PRINT("ECC CERTIFICATE VALIDATION: %i\n", ecc_stat); + return ecc_stat; + } +#endif + + rsa_key key; + int err = rsa_import(parent->der_bytes, parent->der_len, &key); + if (err) { + DEBUG_PRINT("Error importing RSA certificate (code: %i)\n", err); + DEBUG_DUMP_HEX_LABEL("CERTIFICATE", parent->der_bytes, parent->der_len); + return 0; + } + int rsa_stat = 0; + unsigned char *signature = cert->sign_key; + int signature_len = cert->sign_len; + if (!signature[0]) { + signature++; + signature_len--; + } + err = rsa_verify_hash_ex(signature, signature_len, cert->fingerprint, hash_len, LTC_PKCS_1_V1_5, hash_index, hash_len, &rsa_stat, &key); + rsa_free(&key); + if (err) { + DEBUG_PRINT("HASH VERIFY ERROR %i\n", err); + return 0; + } + DEBUG_PRINT("CERTIFICATE VALIDATION: %i\n", rsa_stat); + return rsa_stat; +} + +int tls_certificate_chain_is_valid(struct TLSCertificate **certificates, int len) { + if ((!certificates) || (!len)) + return bad_certificate; + + int i; + len--; + + // expired certificate or not yet valid ? + if (tls_certificate_is_valid(certificates[0])) + return bad_certificate; + + // check + for (i = 0; i < len; i++) { + // certificate in chain is expired ? + if (tls_certificate_is_valid(certificates[i+1])) + return bad_certificate; + if (!tls_certificate_verify_signature(certificates[i], certificates[i+1])) + return bad_certificate; + } + return 0; +} + +int tls_certificate_chain_is_valid_root(struct TLSContext *context, struct TLSCertificate **certificates, int len) { + if ((!certificates) || (!len) || (!context->root_certificates) || (!context->root_count)) + return bad_certificate; + int i; + unsigned int j; + for (i = 0; i < len; i++) { + for (j = 0; j < context->root_count; j++) { + // check if root certificate expired + if (tls_certificate_is_valid(context->root_certificates[j])) + continue; + // if any root validates any certificate in the chain, then is root validated + if (tls_certificate_verify_signature(certificates[i], context->root_certificates[j])) + return 0; + } + } + return bad_certificate; +} + +int _private_is_oid(struct _private_OID_chain *ref_chain, const unsigned char *looked_oid, int looked_oid_len) { + while (ref_chain) { + if (ref_chain->oid) { + if (_is_oid2(ref_chain->oid, looked_oid, 16, looked_oid_len)) + return 1; + } + ref_chain = (struct _private_OID_chain *)ref_chain->top; + } + return 0; +} + +int _private_asn1_parse(struct TLSContext *context, struct TLSCertificate *cert, const unsigned char *buffer, unsigned int size, int level, unsigned int *fields, unsigned char *has_key, int client_cert, unsigned char *top_oid, struct _private_OID_chain *chain) { + struct _private_OID_chain local_chain; + local_chain.top = chain; + unsigned int pos = 0; + // X.690 + int idx = 0; + unsigned char oid[16]; + memset(oid, 0, 16); + local_chain.oid = oid; + if (has_key) + *has_key = 0; + unsigned char local_has_key = 0; + const unsigned char *cert_data = NULL; + unsigned int cert_len = 0; + while (pos < size) { + unsigned int start_pos = pos; + CHECK_SIZE(2, size - pos, TLS_NEED_MORE_DATA) + unsigned char first = buffer[pos++]; + unsigned char type = first & 0x1F; + unsigned char constructed = first & 0x20; + unsigned char element_class = first >> 6; + unsigned int octets = 0; + unsigned int temp; + idx++; + if (level <= TLS_ASN1_MAXLEVEL) + fields[level - 1] = idx; + unsigned int length = asn1_get_len((unsigned char *)&buffer[pos], size - pos, &octets); + if ((octets > 4) || (octets > size - pos)) { + DEBUG_PRINT("CANNOT READ CERTIFICATE\n"); + return pos; + } + pos += octets; + CHECK_SIZE(length, size - pos, TLS_NEED_MORE_DATA) + //DEBUG_PRINT("FIRST: %x => %x (%i)\n", (int)first, (int)type, length); + // sequence + //DEBUG_PRINT("%2i: ", level); +#ifdef DEBUG + DEBUG_INDEX(fields); + int i1; + for (i1 = 1; i1 < level; i1++) + DEBUG_PRINT(" "); +#endif + + if ((length) && (constructed)) { + switch (type) { + case 0x03: + DEBUG_PRINT("CONSTRUCTED BITSTREAM\n"); + break; + case 0x10: + DEBUG_PRINT("SEQUENCE\n"); + if ((level == 2) && (idx == 1)) { + cert_len = length + (pos - start_pos); + cert_data = &buffer[start_pos]; + } + // private key on server or public key on client + if ((!cert->version) && (_is_field(fields, priv_der_id))) { + TLS_FREE(cert->der_bytes); + temp = length + (pos - start_pos); + cert->der_bytes = (unsigned char *)TLS_MALLOC(temp); + if (cert->der_bytes) { + memcpy(cert->der_bytes, &buffer[start_pos], temp); + cert->der_len = temp; + } else + cert->der_len = 0; + } + break; + case 0x11: + DEBUG_PRINT("EMBEDDED PDV\n"); + break; + case 0x00: + if (element_class == 0x02) { + DEBUG_PRINT("CONTEXT-SPECIFIC\n"); + break; + } + default: + DEBUG_PRINT("CONSTRUCT TYPE %02X\n", (int)type); + } + local_has_key = 0; + _private_asn1_parse(context, cert, &buffer[pos], length, level + 1, fields, &local_has_key, client_cert, top_oid, &local_chain); + if ((((local_has_key) && (context) && ((!context->is_server) || (client_cert))) || (!context)) && (_is_field(fields, pk_id))) { + TLS_FREE(cert->der_bytes); + temp = length + (pos - start_pos); + cert->der_bytes = (unsigned char *)TLS_MALLOC(temp); + if (cert->der_bytes) { + memcpy(cert->der_bytes, &buffer[start_pos], temp); + cert->der_len = temp; + } else + cert->der_len = 0; + } + } else { + switch (type) { + case 0x00: + // end of content + DEBUG_PRINT("END OF CONTENT\n"); + return pos; + break; + case 0x01: + // boolean + temp = buffer[pos]; + DEBUG_PRINT("BOOLEAN: %i\n", temp); + break; + case 0x02: + // integer + if (_is_field(fields, pk_id)) { + if (has_key) + *has_key = 1; + + if (idx == 1) + tls_certificate_set_key(cert, &buffer[pos], length); + else + if (idx == 2) + tls_certificate_set_exponent(cert, &buffer[pos], length); + } else + if (_is_field(fields, serial_id)) + tls_certificate_set_serial(cert, &buffer[pos], length); + if (_is_field(fields, version_id)) { + if (length == 1) + cert->version = buffer[pos]; +#ifdef TLS_X509_V1_SUPPORT + else + cert->version = 0; + idx++; +#endif + } + if (level >= 2) { + unsigned int fields_temp[3]; + fields_temp[0] = fields[level - 2]; + fields_temp[1] = fields[level - 1]; + fields_temp[2] = 0; + if (_is_field(fields_temp, priv_id)) + tls_certificate_set_priv(cert, &buffer[pos], length); + } + DEBUG_PRINT("INTEGER(%i): ", length); + DEBUG_DUMP_HEX(&buffer[pos], length); + if ((chain) && (length > 2)) { + if (_private_is_oid(chain, san_oid, sizeof(san_oid) - 1)) { + cert->san = (unsigned char **)TLS_REALLOC(cert->san, sizeof(unsigned char *) * (cert->san_length + 1)); + if (cert->san) { + cert->san[cert->san_length] = NULL; + tls_certificate_set_copy(&cert->san[cert->san_length], &buffer[pos], length); + DEBUG_PRINT(" => SUBJECT ALTERNATIVE NAME: %s", cert->san[cert->san_length ]); + cert->san_length++; + } else + cert->san_length = 0; + } + } + DEBUG_PRINT("\n"); + break; + case 0x03: + if (_is_field(fields, pk_id)) { + if (has_key) + *has_key = 1; + } + // bitstream + DEBUG_PRINT("BITSTREAM(%i): ", length); + DEBUG_DUMP_HEX(&buffer[pos], length); + DEBUG_PRINT("\n"); + if (_is_field(fields, sign_id)) { + tls_certificate_set_sign_key(cert, &buffer[pos], length); + } else + if ((cert->ec_algorithm) && (_is_field(fields, pk_id))) { + tls_certificate_set_key(cert, &buffer[pos], length); + } else { + if ((buffer[pos] == 0x00) && (length > 256)) + _private_asn1_parse(context, cert, &buffer[pos]+1, length - 1, level + 1, fields, &local_has_key, client_cert, top_oid, &local_chain); + else + _private_asn1_parse(context, cert, &buffer[pos], length, level + 1, fields, &local_has_key, client_cert, top_oid, &local_chain); +#ifdef TLS_FORWARD_SECRECY + #ifdef TLS_ECDSA_SUPPORTED + if (top_oid) { + if (_is_oid2(top_oid, TLS_EC_prime256v1_OID, sizeof(oid), sizeof(TLS_EC_prime256v1) - 1)) { + cert->ec_algorithm = secp256r1.iana; + } else + if (_is_oid2(top_oid, TLS_EC_secp224r1_OID, sizeof(oid), sizeof(TLS_EC_secp224r1_OID) - 1)) { + cert->ec_algorithm = secp224r1.iana; + } else + if (_is_oid2(top_oid, TLS_EC_secp384r1_OID, sizeof(oid), sizeof(TLS_EC_secp384r1_OID) - 1)) { + cert->ec_algorithm = secp384r1.iana; + } else + if (_is_oid2(top_oid, TLS_EC_secp521r1_OID, sizeof(oid), sizeof(TLS_EC_secp521r1_OID) - 1)) { + cert->ec_algorithm = secp521r1.iana; + } + if ((cert->ec_algorithm) && (!cert->pk)) + tls_certificate_set_key(cert, &buffer[pos], length); + } + #endif +#endif + } + break; + case 0x04: + if ((top_oid) && (_is_field(fields, ecc_priv_id)) && (!cert->priv)) { + DEBUG_PRINT("BINARY STRING(%i): ", length); + DEBUG_DUMP_HEX(&buffer[pos], length); + DEBUG_PRINT("\n"); + tls_certificate_set_priv(cert, &buffer[pos], length); + } else + _private_asn1_parse(context, cert, &buffer[pos], length, level + 1, fields, &local_has_key, client_cert, top_oid, &local_chain); + break; + case 0x05: + DEBUG_PRINT("NULL\n"); + break; + case 0x06: + // object identifier + if (_is_field(fields, pk_id)) { +#ifdef TLS_ECDSA_SUPPORTED + if ((length == 8) || (length == 5)) + tls_certificate_set_algorithm(context, &cert->ec_algorithm, &buffer[pos], length); + else +#endif + tls_certificate_set_algorithm(context, &cert->key_algorithm, &buffer[pos], length); + } + if (_is_field(fields, algorithm_id)) + tls_certificate_set_algorithm(context, &cert->algorithm, &buffer[pos], length); + + DEBUG_PRINT("OBJECT IDENTIFIER(%i): ", length); + DEBUG_DUMP_HEX(&buffer[pos], length); + DEBUG_PRINT("\n"); + // check previous oid + if (_is_oid2(oid, ocsp_oid, 16, sizeof(ocsp_oid) - 1)) + tls_certificate_set_copy(&cert->ocsp, &buffer[pos], length); + + if (length < 16) + memcpy(oid, &buffer[pos], length); + else + memcpy(oid, &buffer[pos], 16); + if (top_oid) + memcpy(top_oid, oid, 16); + break; + case 0x09: + DEBUG_PRINT("REAL NUMBER(%i): ", length); + DEBUG_DUMP_HEX(&buffer[pos], length); + DEBUG_PRINT("\n"); + break; + case 0x17: + // utc time + DEBUG_PRINT("UTC TIME: ["); + DEBUG_DUMP(&buffer[pos], length); + DEBUG_PRINT("]\n"); + + if (_is_field(fields, validity_id)) { + if (idx == 1) + tls_certificate_set_copy_date(&cert->not_before, &buffer[pos], length); + else + tls_certificate_set_copy_date(&cert->not_after, &buffer[pos], length); + } + break; + case 0x18: + // generalized time + DEBUG_PRINT("GENERALIZED TIME: ["); + DEBUG_DUMP(&buffer[pos], length); + DEBUG_PRINT("]\n"); + break; + case 0x13: + // printable string + case 0x0C: + case 0x14: + case 0x15: + case 0x16: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + if (_is_field(fields, issurer_id)) { + if (_is_oid(oid, country_oid, 3)) + tls_certificate_set_copy(&cert->issuer_country, &buffer[pos], length); + else + if (_is_oid(oid, state_oid, 3)) + tls_certificate_set_copy(&cert->issuer_state, &buffer[pos], length); + else + if (_is_oid(oid, location_oid, 3)) + tls_certificate_set_copy(&cert->issuer_location, &buffer[pos], length); + else + if (_is_oid(oid, entity_oid, 3)) + tls_certificate_set_copy(&cert->issuer_entity, &buffer[pos], length); + else + if (_is_oid(oid, subject_oid, 3)) + tls_certificate_set_copy(&cert->issuer_subject, &buffer[pos], length); + } else + if (_is_field(fields, owner_id)) { + if (_is_oid(oid, country_oid, 3)) + tls_certificate_set_copy(&cert->country, &buffer[pos], length); + else + if (_is_oid(oid, state_oid, 3)) + tls_certificate_set_copy(&cert->state, &buffer[pos], length); + else + if (_is_oid(oid, location_oid, 3)) + tls_certificate_set_copy(&cert->location, &buffer[pos], length); + else + if (_is_oid(oid, entity_oid, 3)) + tls_certificate_set_copy(&cert->entity, &buffer[pos], length); + else + if (_is_oid(oid, subject_oid, 3)) + tls_certificate_set_copy(&cert->subject, &buffer[pos], length); + } + DEBUG_PRINT("STR: ["); + DEBUG_DUMP(&buffer[pos], length); + DEBUG_PRINT("]\n"); + break; + case 0x10: + DEBUG_PRINT("EMPTY SEQUENCE\n"); + break; + case 0xA: + DEBUG_PRINT("ENUMERATED(%i): ", length); + DEBUG_DUMP_HEX(&buffer[pos], length); + DEBUG_PRINT("\n"); + break; + default: + DEBUG_PRINT("========> NOT SUPPORTED %x\n", (int)type); + // not supported / needed + break; + } + } + pos += length; + } + if ((level == 2) && (cert->sign_key) && (cert->sign_len) && (cert_len) && (cert_data)) { + TLS_FREE(cert->fingerprint); + cert->fingerprint = _private_tls_compute_hash(cert->algorithm, cert_data, cert_len); +#ifdef DEBUG + if (cert->fingerprint) { + DEBUG_DUMP_HEX_LABEL("FINGERPRINT", cert->fingerprint, _private_tls_hash_len(cert->algorithm)); + } +#endif + } + return pos; +} + +struct TLSCertificate *asn1_parse(struct TLSContext *context, const unsigned char *buffer, unsigned int size, int client_cert) { + unsigned int fields[TLS_ASN1_MAXLEVEL]; + memset(fields, 0, sizeof(int) * TLS_ASN1_MAXLEVEL); + struct TLSCertificate *cert = tls_create_certificate(); + if (cert) { + if (client_cert < 0) { + client_cert = 0; + // private key + unsigned char top_oid[16]; + memset(top_oid, 0, sizeof(top_oid)); + _private_asn1_parse(context, cert, buffer, size, 1, fields, NULL, client_cert, top_oid, NULL); + } else + _private_asn1_parse(context, cert, buffer, size, 1, fields, NULL, client_cert, NULL, NULL); + } + return cert; +} + +int tls_load_certificates(struct TLSContext *context, const unsigned char *pem_buffer, int pem_size) { + if (!context) + return TLS_GENERIC_ERROR; + + unsigned int len; + int idx = 0; + do { + unsigned char *data = tls_pem_decode(pem_buffer, pem_size, idx++, &len); + if ((!data) || (!len)) + break; + struct TLSCertificate *cert = asn1_parse(context, data, len, 0); + if (cert) { + if ((cert->version == 2) +#ifdef TLS_X509_V1_SUPPORT + || (cert->version == 0) +#endif + ) { + TLS_FREE(cert->der_bytes); + cert->der_bytes = data; + cert->der_len = len; + data = NULL; + if (cert->priv) { + DEBUG_PRINT("WARNING - parse error (private key encountered in certificate)\n"); + TLS_FREE(cert->priv); + cert->priv = NULL; + cert->priv_len = 0; + } + if (context->is_server) { + context->certificates = (struct TLSCertificate **)TLS_REALLOC(context->certificates, (context->certificates_count + 1) * sizeof(struct TLSCertificate *)); + context->certificates[context->certificates_count] = cert; + context->certificates_count++; + DEBUG_PRINT("Loaded certificate: %i\n", (int)context->certificates_count); + } else { + context->client_certificates = (struct TLSCertificate **)TLS_REALLOC(context->client_certificates, (context->client_certificates_count + 1) * sizeof(struct TLSCertificate *)); + context->client_certificates[context->client_certificates_count] = cert; + context->client_certificates_count++; + DEBUG_PRINT("Loaded client certificate: %i\n", (int)context->client_certificates_count); + } + } else { + DEBUG_PRINT("WARNING - certificate version error (v%i)\n", (int)cert->version); + tls_destroy_certificate(cert); + } + } + TLS_FREE(data); + } while (1); + + if (context->is_server) + return context->certificates_count; + + return context->client_certificates_count; +} + +int tls_load_private_key(struct TLSContext *context, const unsigned char *pem_buffer, int pem_size) { + if (!context) + return TLS_GENERIC_ERROR; + + unsigned int len; + int idx = 0; + do { + unsigned char *data = tls_pem_decode(pem_buffer, pem_size, idx++, &len); + if ((!data) || (!len)) + break; + struct TLSCertificate *cert = asn1_parse(context, data, len, -1); + if (cert) { + if (!cert->der_len) { + TLS_FREE(cert->der_bytes); + cert->der_bytes = data; + cert->der_len = len; + } else + TLS_FREE(data); + if ((cert) && (cert->priv) && (cert->priv_len)) { +#ifdef TLS_ECDSA_SUPPORTED + if (cert->ec_algorithm) { + DEBUG_PRINT("Loaded ECC private key\n"); + if (context->ec_private_key) + tls_destroy_certificate(context->ec_private_key); + context->ec_private_key = cert; + return 1; + } else +#endif + { + DEBUG_PRINT("Loaded private key\n"); + if (context->private_key) + tls_destroy_certificate(context->private_key); + context->private_key = cert; + return 1; + } + } + tls_destroy_certificate(cert); + } else + TLS_FREE(data); + } while (1); + return 0; +} + +int tls_clear_certificates(struct TLSContext *context) { + unsigned int i; + if ((!context) || (!context->is_server) || (context->is_child)) + return TLS_GENERIC_ERROR; + + if (context->root_certificates) { + for (i = 0; i < context->root_count; i++) + tls_destroy_certificate(context->root_certificates[i]); + } + context->root_certificates = NULL; + context->root_count = 0; + if (context->private_key) + tls_destroy_certificate(context->private_key); + context->private_key = NULL; +#ifdef TLS_ECDSA_SUPPORTED + if (context->ec_private_key) + tls_destroy_certificate(context->ec_private_key); + context->ec_private_key = NULL; +#endif + TLS_FREE(context->certificates); + context->certificates = NULL; + context->certificates_count = 0; + return 0; +} + +#ifdef WITH_TLS_13 +struct TLSPacket *tls_build_certificate_verify(struct TLSContext *context) { + struct TLSPacket *packet = tls_create_packet(context, TLS_HANDSHAKE, context->version, 0); + //certificate verify + tls_packet_uint8(packet, 0x0F); + unsigned int size_offset = packet->len; + tls_packet_uint24(packet, 0); + + unsigned char out[TLS_MAX_RSA_KEY]; +#ifdef TLS_ECDSA_SUPPORTED + unsigned long out_len = TLS_MAX_RSA_KEY; +#endif + + unsigned char signing_data[TLS_MAX_HASH_SIZE + 98]; + int signing_data_len; + + // first 64 bytes to 0x20 (32) + memset(signing_data, 0x20, 64); + // context string 33 bytes + if (context->is_server) + memcpy(signing_data + 64, "TLS 1.3, server CertificateVerify", 33); + else + memcpy(signing_data + 64, "TLS 1.3, client CertificateVerify", 33); + // a single 0 byte separator + signing_data[97] = 0; + signing_data_len = 98; + + signing_data_len += _private_tls_get_hash(context, signing_data + 98); + DEBUG_DUMP_HEX_LABEL("verify data", signing_data, signing_data_len); + int hash_algorithm = sha256; +#ifdef TLS_ECDSA_SUPPORTED + if (tls_is_ecdsa(context)) { + switch (context->ec_private_key->ec_algorithm) { + case 23: + // secp256r1 + sha256 + tls_packet_uint16(packet, 0x0403); + break; + case 24: + // secp384r1 + sha384 + tls_packet_uint16(packet, 0x0503); + hash_algorithm = sha384; + break; + case 25: + // secp521r1 + sha512 + tls_packet_uint16(packet, 0x0603); + hash_algorithm = sha512; + break; + default: + DEBUG_PRINT("UNSUPPORTED CURVE (SIGNING)\n"); + packet->broken = 1; + return packet; + } + } else +#endif + { + tls_packet_uint16(packet, 0x0804); + } + + int packet_size = 2; +#ifdef TLS_ECDSA_SUPPORTED + if (tls_is_ecdsa(context)) { + if (_private_tls_sign_ecdsa(context, hash_algorithm, signing_data, signing_data_len, out, &out_len) == 1) { + DEBUG_PRINT("ECDSA signing OK! (ECDSA, length %lu)\n", out_len); + tls_packet_uint16(packet, out_len); + tls_packet_append(packet, out, out_len); + packet_size += out_len + 2; + } + } else +#endif + if (_private_tls_sign_rsa(context, hash_algorithm, signing_data, signing_data_len, out, &out_len) == 1) { + DEBUG_PRINT("RSA signing OK! (length %lu)\n", out_len); + tls_packet_uint16(packet, out_len); + tls_packet_append(packet, out, out_len); + packet_size += out_len + 2; + } + packet->buf[size_offset] = packet_size / 0x10000; + packet_size %= 0x10000; + packet->buf[size_offset + 1] = packet_size / 0x100; + packet_size %= 0x100; + packet->buf[size_offset + 2] = packet_size; + + tls_packet_update(packet); + return packet; +} +#endif + +struct TLSPacket *tls_build_certificate(struct TLSContext *context) { + int i; + unsigned int all_certificate_size = 0; + int certificates_count; + struct TLSCertificate **certificates; + if (context->is_server) { + certificates_count = context->certificates_count; + certificates = context->certificates; + } else { + certificates_count = context->client_certificates_count; + certificates = context->client_certificates; + } + int delta = 3; +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) + delta = 5; +#endif +#ifdef TLS_ECDSA_SUPPORTED + int is_ecdsa = tls_is_ecdsa(context); + if (is_ecdsa) { + for (i = 0; i < certificates_count; i++) { + struct TLSCertificate *cert = certificates[i]; + if ((cert) && (cert->der_len) && (cert->ec_algorithm)) + all_certificate_size += cert->der_len + delta; + } + if (!all_certificate_size) { + for (i = 0; i < certificates_count; i++) { + struct TLSCertificate *cert = certificates[i]; + if ((cert) && (cert->der_len)) + all_certificate_size += cert->der_len + delta; + } + } + } else { + for (i = 0; i < certificates_count; i++) { + struct TLSCertificate *cert = certificates[i]; + if ((cert) && (cert->der_len) && (!cert->ec_algorithm)) + all_certificate_size += cert->der_len + delta; + } + } +#else + for (i = 0; i < certificates_count; i++) { + struct TLSCertificate *cert = certificates[i]; + if ((cert) && (cert->der_len)) + all_certificate_size += cert->der_len + delta; + } +#endif + if (!all_certificate_size) { + DEBUG_PRINT("NO CERTIFICATE SET\n"); + } + struct TLSPacket *packet = tls_create_packet(context, TLS_HANDSHAKE, context->version, 0); + tls_packet_uint8(packet, 0x0B); + if (all_certificate_size) { +#ifdef WITH_TLS_13 + // context + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + tls_packet_uint24(packet, all_certificate_size + 4); + tls_packet_uint8(packet, 0); + } else +#endif + tls_packet_uint24(packet, all_certificate_size + 3); + + if (context->dtls) + _private_dtls_handshake_data(context, packet, all_certificate_size + 3); + + tls_packet_uint24(packet, all_certificate_size); + for (i = 0; i < certificates_count; i++) { + struct TLSCertificate *cert = certificates[i]; + if ((cert) && (cert->der_len)) { +#ifdef TLS_ECDSA_SUPPORTED + // is RSA certificate ? + if ((is_ecdsa) && (!cert->ec_algorithm)) + continue; + // is ECC certificate ? + if ((!is_ecdsa) && (cert->ec_algorithm)) + continue; +#endif + // 2 times -> one certificate + tls_packet_uint24(packet, cert->der_len); + tls_packet_append(packet, cert->der_bytes, cert->der_len); +#ifdef WITH_TLS_13 + // extension + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) + tls_packet_uint16(packet, 0); +#endif + } + } + } else { + tls_packet_uint24(packet, all_certificate_size); +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) + tls_packet_uint8(packet, 0); +#endif + + if (context->dtls) + _private_dtls_handshake_data(context, packet, all_certificate_size); + } + tls_packet_update(packet); + if (context->dtls) + context->dtls_seq++; + return packet; +} + +#ifdef WITH_TLS_13 +struct TLSPacket *tls_build_encrypted_extensions(struct TLSContext *context) { + struct TLSPacket *packet = tls_create_packet(context, TLS_HANDSHAKE, context->version, 3); + tls_packet_uint8(packet, 0x08); + if (context->negotiated_alpn) { + int alpn_negotiated_len = strlen(context->negotiated_alpn); + int alpn_len = alpn_negotiated_len + 1; + + tls_packet_uint24(packet, alpn_len + 8); + tls_packet_uint16(packet, alpn_len + 6); + tls_packet_uint16(packet, 0x10); + tls_packet_uint16(packet, alpn_len + 2); + tls_packet_uint16(packet, alpn_len); + + tls_packet_uint8(packet, alpn_negotiated_len); + tls_packet_append(packet, (unsigned char *)context->negotiated_alpn, alpn_negotiated_len); + } else { + tls_packet_uint24(packet, 2); + tls_packet_uint16(packet, 0); + } + tls_packet_update(packet); + return packet; +} +#endif + +struct TLSPacket *tls_build_finished(struct TLSContext *context) { + struct TLSPacket *packet = tls_create_packet(context, TLS_HANDSHAKE, context->version, TLS_MIN_FINISHED_OPAQUE_LEN + 64); + tls_packet_uint8(packet, 0x14); +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) + tls_packet_uint24(packet, _private_tls_mac_length(context)); + else +#endif + tls_packet_uint24(packet, TLS_MIN_FINISHED_OPAQUE_LEN); + if (context->dtls) + _private_dtls_handshake_data(context, packet, TLS_MIN_FINISHED_OPAQUE_LEN); + // verify + unsigned char hash[TLS_MAX_HASH_SIZE]; + unsigned long out_size = TLS_MIN_FINISHED_OPAQUE_LEN; +#ifdef WITH_TLS_13 + unsigned char out[TLS_MAX_HASH_SIZE]; +#else + unsigned char out[TLS_MIN_FINISHED_OPAQUE_LEN]; +#endif + unsigned int hash_len; + + // server verifies client's message + if (context->is_server) { +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + hash_len = _private_tls_get_hash(context, hash); + if ((!context->finished_key) || (!hash_len)) { + DEBUG_PRINT("NO FINISHED KEY COMPUTED OR NO HANDSHAKE HASH\n"); + packet->broken = 1; + return packet; + } + + DEBUG_DUMP_HEX_LABEL("HS HASH", hash, hash_len); + DEBUG_DUMP_HEX_LABEL("HS FINISH", context->finished_key, hash_len); + DEBUG_DUMP_HEX_LABEL("HS REMOTE FINISH", context->remote_finished_key, hash_len); + + out_size = hash_len; + hmac_state hmac; + hmac_init(&hmac, _private_tls_get_hash_idx(context), context->finished_key, hash_len); + hmac_process(&hmac, hash, hash_len); + hmac_done(&hmac, out, &out_size); + } else +#endif + { + hash_len = _private_tls_done_hash(context, hash); + _private_tls_prf(context, out, TLS_MIN_FINISHED_OPAQUE_LEN, context->master_key, context->master_key_len, (unsigned char *)"server finished", 15, hash, hash_len, NULL, 0); + _private_tls_destroy_hash(context); + } + } else { +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + hash_len = _private_tls_get_hash(context, hash); + if ((!context->finished_key) || (!hash_len)) { + DEBUG_PRINT("NO FINISHED KEY COMPUTED OR NO HANDSHAKE HASH\n"); + packet->broken = 1; + return packet; + } + DEBUG_DUMP_HEX_LABEL("HS HASH", hash, hash_len); + DEBUG_DUMP_HEX_LABEL("HS FINISH", context->finished_key, hash_len); + DEBUG_DUMP_HEX_LABEL("HS REMOTE FINISH", context->remote_finished_key, hash_len); + + TLS_FREE(context->server_finished_hash); + context->server_finished_hash = (unsigned char *)TLS_MALLOC(hash_len); + if (context->server_finished_hash) + memcpy(context->server_finished_hash, hash, hash_len); + + out_size = hash_len; + hmac_state hmac; + hmac_init(&hmac, _private_tls_get_hash_idx(context), context->finished_key, hash_len); + hmac_process(&hmac, hash, hash_len); + hmac_done(&hmac, out, &out_size); + } else { +#endif + hash_len = _private_tls_get_hash(context, hash); + _private_tls_prf(context, out, TLS_MIN_FINISHED_OPAQUE_LEN, context->master_key, context->master_key_len, (unsigned char *)"client finished", 15, hash, hash_len, NULL, 0); +#ifdef WITH_TLS_13 + } +#endif + } + tls_packet_append(packet, out, out_size); + tls_packet_update(packet); + DEBUG_DUMP_HEX_LABEL("VERIFY DATA", out, out_size); +#ifdef TLS_ACCEPT_SECURE_RENEGOTIATION + if (context->is_server) { + // concatenate client verify and server verify + context->verify_data = (unsigned char *)TLS_REALLOC(context->verify_data, out_size); + if (context->verify_data) { + memcpy(context->verify_data + context->verify_len, out, out_size); + context->verify_len += out_size; + } else + context->verify_len = 0; + } else { + TLS_FREE(context->verify_data); + context->verify_data = (unsigned char *)TLS_MALLOC(out_size); + if (context->verify_data) { + memcpy(context->verify_data, out, out_size); + context->verify_len = out_size; + } + } +#endif + return packet; +} + +struct TLSPacket *tls_build_change_cipher_spec(struct TLSContext *context) { + struct TLSPacket *packet = tls_create_packet(context, TLS_CHANGE_CIPHER, context->version, 64); + tls_packet_uint8(packet, 1); + tls_packet_update(packet); + context->local_sequence_number = 0; + return packet; +} + +struct TLSPacket *tls_build_done(struct TLSContext *context) { + struct TLSPacket *packet = tls_create_packet(context, TLS_HANDSHAKE, context->version, 0); + tls_packet_uint8(packet, 0x0E); + tls_packet_uint24(packet, 0); + if (context->dtls) { + _private_dtls_handshake_data(context, packet, 0); + context->dtls_seq++; + } + tls_packet_update(packet); + return packet; +} + +struct TLSPacket *tls_build_message(struct TLSContext *context, const unsigned char *data, unsigned int len) { + if ((!data) || (!len)) + return 0; + struct TLSPacket *packet = tls_create_packet(context, TLS_APPLICATION_DATA, context->version, len); + tls_packet_append(packet, data, len); + tls_packet_update(packet); + return packet; +} + +int tls_client_connect(struct TLSContext *context) { + if ((context->is_server) || (context->critical_error)) + return TLS_UNEXPECTED_MESSAGE; + + return _private_tls_write_packet(tls_build_hello(context, 0)); +} + +int tls_write(struct TLSContext *context, const unsigned char *data, unsigned int len) { + if (!context) + return TLS_GENERIC_ERROR; +#ifdef TLS_12_FALSE_START + if ((context->connection_status != 0xFF) && ((context->is_server) || (context->version != TLS_V12) || (context->critical_error) || (!context->false_start))) + return TLS_UNEXPECTED_MESSAGE; +#else + if (context->connection_status != 0xFF) + return TLS_UNEXPECTED_MESSAGE; +#endif + if (len > TLS_MAXTLS_APP_SIZE) + len = TLS_MAXTLS_APP_SIZE; + int actually_written = _private_tls_write_packet(tls_build_message(context, data, len)); + if (actually_written <= 0) + return actually_written; + return len; +} + +struct TLSPacket *tls_build_alert(struct TLSContext *context, char critical, unsigned char code) { + struct TLSPacket *packet = tls_create_packet(context, TLS_ALERT, context->version, 0); + tls_packet_uint8(packet, critical ? TLS_ALERT_CRITICAL : TLS_ALERT_WARNING); + if (critical) + context->critical_error = 1; + tls_packet_uint8(packet, code); + tls_packet_update(packet); + return packet; +} + +int _private_tls_read_from_file(const char *fname, void *buf, int max_len) { + FILE *f = fopen(fname, "rb"); + if (f) { + int size = (int)fread(buf, 1, max_len, f); + fclose(f); + return size; + } + return 0; +} + +int tls_connection_status(struct TLSContext *context) { + return context->connection_status; +} + +int tls_consume_stream(struct TLSContext *context, const unsigned char *buf, int buf_len, tls_validation_function certificate_verify) { + if (!context) + return TLS_GENERIC_ERROR; + + if (context->critical_error) + return TLS_BROKEN_CONNECTION; + + if (buf_len <= 0) { + DEBUG_PRINT("tls_consume_stream called with buf_len %i\n", buf_len); + return 0; + } + + if (!buf) { + DEBUG_PRINT("tls_consume_stream called NULL buffer\n"); + context->critical_error = 1; + return TLS_NO_MEMORY; + } + + unsigned int orig_len = context->message_buffer_len; + context->message_buffer_len += buf_len; + context->message_buffer = (unsigned char *)TLS_REALLOC(context->message_buffer, context->message_buffer_len); + if (!context->message_buffer) { + context->message_buffer_len = 0; + return TLS_NO_MEMORY; + } + memcpy(context->message_buffer + orig_len, buf, buf_len); + unsigned int index = 0; + unsigned int tls_buffer_len = context->message_buffer_len; + int err_flag = 0; + + int tls_header_size; + int tls_size_offset; + + if (context->dtls) { + tls_size_offset = 11; + tls_header_size = 13; + } else { + tls_size_offset = 3; + tls_header_size = 5; + } + while (tls_buffer_len >= tls_header_size) { + unsigned int length = ntohs(*(unsigned short *)&context->message_buffer[index + tls_size_offset]) + tls_header_size; + if (length > tls_buffer_len) { + DEBUG_PRINT("NEED DATA: %i/%i\n", length, tls_buffer_len); + break; + } + int parse_message = 1; + int consumed = 0; + if ((context->dtls) && (!context->cipher_spec_set)) { + // check fragmented! + unsigned char *buffer = &context->message_buffer[index]; + if ((buffer[0] == TLS_HANDSHAKE) && (length > 13)) { + buffer += tls_header_size; + + unsigned int data_length = buffer[1] * 0x10000 + buffer[2] * 0x100 + buffer[3]; + unsigned int fragment_offset = buffer[6] * 0x10000 + buffer[7] * 0x100 + buffer[8]; + unsigned int fragment_length = buffer[9] * 0x10000 + buffer[10] * 0x100 + buffer[11]; + + if ((data_length > DTLS_MAX_FRAGMENT_SIZE) || (fragment_offset + fragment_length > data_length)) { + DEBUG_PRINT("INVALID PACKET SIZE: %i, FRAGMENT OFFSET: %i, FRAGMENT LENGTH: %i\n"); + return TLS_BROKEN_PACKET; + } + + if (data_length != fragment_length) { + // fragmented! + if (!context->dtls_data->fragment) { + context->dtls_data->fragment = (struct DTLSFragment *)TLS_MALLOC(sizeof(struct DTLSFragment)); + if (context->dtls_data->fragment) + memset(context->dtls_data->fragment, 0, sizeof(struct DTLSFragment)); + } + + if (!context->dtls_data->fragment) + return TLS_NO_MEMORY; + + char *fragment_buffer = context->dtls_data->fragment->buffer; + + fragment_buffer = (char *)TLS_REALLOC(fragment_buffer, data_length * sizeof(char *)); + if (!fragment_buffer) + return TLS_NO_MEMORY; + + memcpy(fragment_buffer + fragment_offset, &buffer[12], fragment_length); + context->dtls_data->fragment->buffer = fragment_buffer; + context->dtls_data->fragment->len = data_length; + context->dtls_data->fragment->written += fragment_length; + + if (context->dtls_data->fragment->written != context->dtls_data->fragment->len) { + consumed = length; + parse_message = 0; + } + } + } + } + if (parse_message) + consumed = tls_parse_message(context, &context->message_buffer[index], length, certificate_verify); + + DEBUG_PRINT("Consumed %i/%i bytes\n", consumed, tls_buffer_len); + if (consumed < 0) { + if (!context->critical_error) + context->critical_error = 1; + err_flag = consumed; + break; + } + index += length; + tls_buffer_len -= length; + if (context->critical_error) { + err_flag = TLS_BROKEN_CONNECTION; + break; + } + } + if (err_flag) { + DEBUG_PRINT("ERROR IN CONSUME: %i\n", err_flag); + context->message_buffer_len = 0; + TLS_FREE(context->message_buffer); + context->message_buffer = NULL; + return err_flag; + } + if (index) { + context->message_buffer_len -= index; + if (context->message_buffer_len) { + // no realloc here + memmove(context->message_buffer, context->message_buffer + index, context->message_buffer_len); + } else { + TLS_FREE(context->message_buffer); + context->message_buffer = NULL; + } + } + return index; +} + +void tls_close_notify(struct TLSContext *context) { + if ((!context) || (context->critical_error)) + return; + context->critical_error = 1; + DEBUG_PRINT("CLOSE\n"); + _private_tls_write_packet(tls_build_alert(context, 0, close_notify)); +} + +void tls_alert(struct TLSContext *context, unsigned char critical, int code) { + if (!context) + return; + if ((!context->critical_error) && (critical)) + context->critical_error = 1; + DEBUG_PRINT("ALERT\n"); + _private_tls_write_packet(tls_build_alert(context, critical, code)); +} + +int tls_pending(struct TLSContext *context) { + if (!context->message_buffer) + return 0; + return context->message_buffer_len; +} + +void tls_make_exportable(struct TLSContext *context, unsigned char exportable_flag) { + context->exportable = exportable_flag; + if (!exportable_flag) { + // zero the memory + if ((context->exportable_keys) && (context->exportable_size)) + memset(context->exportable_keys, 0, context->exportable_size); + // free the memory, if alocated + TLS_FREE(context->exportable_keys); + context->exportable_size = 0; + } +} + +int tls_export_context(struct TLSContext *context, unsigned char *buffer, unsigned int buf_len, unsigned char small_version) { + // only negotiated AND exportable connections may be exported + if ((!context) || (context->critical_error) || (context->connection_status != 0xFF) || (!context->exportable) || (!context->exportable_keys) || (!context->exportable_size) || (!context->crypto.created)) { + DEBUG_PRINT("CANNOT EXPORT CONTEXT %i\n", (int)context->connection_status); + return 0; + } + + struct TLSPacket *packet = tls_create_packet(NULL, TLS_SERIALIZED_OBJECT, context->version, 0); + // export buffer version + tls_packet_uint8(packet, 0x01); + tls_packet_uint8(packet, context->connection_status); + tls_packet_uint16(packet, context->cipher); + if (context->is_child) + tls_packet_uint8(packet, 2); + else + tls_packet_uint8(packet, context->is_server); + + if (context->crypto.created == 2) { + // aead +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + tls_packet_uint8(packet, TLS_13_AES_GCM_IV_LENGTH); + tls_packet_append(packet, context->crypto.ctx_local_mac.local_iv, TLS_13_AES_GCM_IV_LENGTH); + tls_packet_append(packet, context->crypto.ctx_remote_mac.remote_iv, TLS_13_AES_GCM_IV_LENGTH); + } else { +#endif + tls_packet_uint8(packet, TLS_AES_GCM_IV_LENGTH); + tls_packet_append(packet, context->crypto.ctx_local_mac.local_aead_iv, TLS_AES_GCM_IV_LENGTH); + tls_packet_append(packet, context->crypto.ctx_remote_mac.remote_aead_iv, TLS_AES_GCM_IV_LENGTH); +#ifdef WITH_TLS_13 + } +#endif +#ifdef TLS_WITH_CHACHA20_POLY1305 + } else + if (context->crypto.created == 3) { + // ChaCha20 + tls_packet_uint8(packet, TLS_CHACHA20_IV_LENGTH); + tls_packet_append(packet, context->crypto.ctx_local_mac.local_nonce, TLS_CHACHA20_IV_LENGTH); + tls_packet_append(packet, context->crypto.ctx_remote_mac.remote_nonce, TLS_CHACHA20_IV_LENGTH); +#endif + } else { + unsigned char iv[TLS_AES_IV_LENGTH]; + unsigned long len = TLS_AES_IV_LENGTH; + + memset(iv, 0, TLS_AES_IV_LENGTH); + cbc_getiv(iv, &len, &context->crypto.ctx_local.aes_local); + tls_packet_uint8(packet, TLS_AES_IV_LENGTH); + tls_packet_append(packet, iv, len); + + memset(iv, 0, TLS_AES_IV_LENGTH); + cbc_getiv(iv, &len, &context->crypto.ctx_remote.aes_remote); + tls_packet_append(packet, iv, TLS_AES_IV_LENGTH); + } + + tls_packet_uint8(packet, context->exportable_size); + tls_packet_append(packet, context->exportable_keys, context->exportable_size); + + if (context->crypto.created == 2) { + tls_packet_uint8(packet, 0); +#ifdef TLS_WITH_CHACHA20_POLY1305 + } else + if (context->crypto.created == 3) { + // ChaCha20 + tls_packet_uint8(packet, 0); + unsigned int i; + for (i = 0; i < 16; i++) + tls_packet_uint32(packet, context->crypto.ctx_local.chacha_local.input[i]); + for (i = 0; i < 16; i++) + tls_packet_uint32(packet, context->crypto.ctx_remote.chacha_remote.input[i]); + tls_packet_append(packet, context->crypto.ctx_local.chacha_local.ks, CHACHA_BLOCKLEN); + tls_packet_append(packet, context->crypto.ctx_remote.chacha_remote.ks, CHACHA_BLOCKLEN); +#endif + } else { + unsigned char mac_length = (unsigned char)_private_tls_mac_length(context); + tls_packet_uint8(packet, mac_length); + tls_packet_append(packet, context->crypto.ctx_local_mac.local_mac, mac_length); + tls_packet_append(packet, context->crypto.ctx_remote_mac.remote_mac, mac_length); + } + + if (small_version) { + tls_packet_uint16(packet, 0); + } else { + tls_packet_uint16(packet, context->master_key_len); + tls_packet_append(packet, context->master_key, context->master_key_len); + } + + uint64_t sequence_number = htonll(context->local_sequence_number); + tls_packet_append(packet, (unsigned char *)&sequence_number, sizeof(uint64_t)); + sequence_number = htonll(context->remote_sequence_number); + tls_packet_append(packet, (unsigned char *)&sequence_number, sizeof(uint64_t)); + + tls_packet_uint32(packet, context->tls_buffer_len); + tls_packet_append(packet, context->tls_buffer, context->tls_buffer_len); + + tls_packet_uint32(packet, context->message_buffer_len); + tls_packet_append(packet, context->message_buffer, context->message_buffer_len); + + tls_packet_uint32(packet, context->application_buffer_len); + tls_packet_append(packet, context->application_buffer, context->application_buffer_len); + tls_packet_uint8(packet, context->dtls); + if (context->dtls) { + tls_packet_uint16(packet, context->dtls_epoch_local); + tls_packet_uint16(packet, context->dtls_epoch_remote); + } + tls_packet_update(packet); + unsigned int size = packet->len; + if ((buffer) && (buf_len)) { + if (size > buf_len) { + tls_destroy_packet(packet); + DEBUG_PRINT("EXPORT BUFFER TO SMALL\n"); + return (int)buf_len - (int)size; + } + memcpy(buffer, packet->buf, size); + } + tls_destroy_packet(packet); + return size; +} + +struct TLSContext *tls_import_context(const unsigned char *buffer, unsigned int buf_len) { + if ((!buffer) || (buf_len < 64) || (buffer[0] != TLS_SERIALIZED_OBJECT) || (buffer[5] != 0x01)) { + DEBUG_PRINT("CANNOT IMPORT CONTEXT BUFFER\n"); + return NULL; + } + // create a context object + struct TLSContext *context = tls_create_context(0, TLS_V12); + if (context) { + unsigned char temp[0xFF]; + context->version = ntohs(*(unsigned short *)&buffer[1]); + unsigned short length = ntohs(*(unsigned short *)&buffer[3]); + if (length != buf_len - 5) { + DEBUG_PRINT("INVALID IMPORT BUFFER SIZE\n"); + tls_destroy_context(context); + return NULL; + } + context->connection_status = buffer[6]; + context->cipher = ntohs(*(unsigned short *)&buffer[7]); + unsigned char server = buffer[9]; + if (server == 2) { + context->is_server = 1; + context->is_child = 1; + } else + context->is_server = server; + + unsigned char local_iv[TLS_AES_IV_LENGTH]; + unsigned char remote_iv[TLS_AES_IV_LENGTH]; + unsigned char iv_len = buffer[10]; + if (iv_len > TLS_AES_IV_LENGTH) { + DEBUG_PRINT("INVALID IV LENGTH\n"); + tls_destroy_context(context); + return NULL; + } + + // get the initialization vectors + int buf_pos = 11; + memcpy(local_iv, &buffer[buf_pos], iv_len); + buf_pos += iv_len; + memcpy(remote_iv, &buffer[buf_pos], iv_len); + buf_pos += iv_len; + + unsigned char key_lengths = buffer[buf_pos++]; + TLS_IMPORT_CHECK_SIZE(buf_pos, key_lengths, buf_len) + memcpy(temp, &buffer[buf_pos], key_lengths); + buf_pos += key_lengths; +#ifdef TLS_REEXPORTABLE + context->exportable = 1; + context->exportable_keys = (unsigned char *)TLS_MALLOC(key_lengths); + memcpy(context->exportable_keys, temp, key_lengths); + context->exportable_size = key_lengths; +#else + context->exportable = 0; +#endif + int is_aead = _private_tls_is_aead(context); +#ifdef TLS_WITH_CHACHA20_POLY1305 + if (is_aead == 2) { + // ChaCha20 + if (iv_len > TLS_CHACHA20_IV_LENGTH) + iv_len = TLS_CHACHA20_IV_LENGTH; + memcpy(context->crypto.ctx_local_mac.local_nonce, local_iv, iv_len); + memcpy(context->crypto.ctx_remote_mac.remote_nonce, remote_iv, iv_len); + } else +#endif + if (is_aead) { +#ifdef WITH_TLS_13 + if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + if (iv_len > TLS_13_AES_GCM_IV_LENGTH) + iv_len = TLS_13_AES_GCM_IV_LENGTH; + memcpy(context->crypto.ctx_local_mac.local_iv, local_iv, iv_len); + memcpy(context->crypto.ctx_remote_mac.remote_iv, remote_iv, iv_len); + } else { +#endif + if (iv_len > TLS_AES_GCM_IV_LENGTH) + iv_len = TLS_AES_GCM_IV_LENGTH; + memcpy(context->crypto.ctx_local_mac.local_aead_iv, local_iv, iv_len); + memcpy(context->crypto.ctx_remote_mac.remote_aead_iv, remote_iv, iv_len); +#ifdef WITH_TLS_13 + } +#endif + } + if (context->is_server) { + if (_private_tls_crypto_create(context, key_lengths / 2, temp, local_iv, temp + key_lengths / 2, remote_iv)) { + DEBUG_PRINT("ERROR CREATING KEY CONTEXT\n"); + tls_destroy_context(context); + return NULL; + } + } else { + if (_private_tls_crypto_create(context, key_lengths / 2, temp + key_lengths / 2, remote_iv, temp, local_iv)) { + DEBUG_PRINT("ERROR CREATING KEY CONTEXT (CLIENT)\n"); + tls_destroy_context(context); + return NULL; + } + } + memset(temp, 0, sizeof(temp)); + + unsigned char mac_length = buffer[buf_pos++]; + if (mac_length > TLS_MAX_MAC_SIZE) { + DEBUG_PRINT("INVALID MAC SIZE\n"); + tls_destroy_context(context); + return NULL; + } + + if (mac_length) { + TLS_IMPORT_CHECK_SIZE(buf_pos, mac_length, buf_len) + memcpy(context->crypto.ctx_local_mac.local_mac, &buffer[buf_pos], mac_length); + buf_pos += mac_length; + + TLS_IMPORT_CHECK_SIZE(buf_pos, mac_length, buf_len) + memcpy(context->crypto.ctx_remote_mac.remote_mac, &buffer[buf_pos], mac_length); + buf_pos += mac_length; + } else +#ifdef TLS_WITH_CHACHA20_POLY1305 + if (is_aead == 2) { + // ChaCha20 + unsigned int i; + TLS_IMPORT_CHECK_SIZE(buf_pos, 128 + CHACHA_BLOCKLEN * 2, buf_len) + for (i = 0; i < 16; i++) { + context->crypto.ctx_local.chacha_local.input[i] = ntohl(*(unsigned int *)(buffer + buf_pos)); + buf_pos += sizeof(unsigned int); + } + for (i = 0; i < 16; i++) { + context->crypto.ctx_remote.chacha_remote.input[i] = ntohl(*(unsigned int *)(buffer + buf_pos)); + buf_pos += sizeof(unsigned int); + } + memcpy(context->crypto.ctx_local.chacha_local.ks, buffer + buf_pos, CHACHA_BLOCKLEN); + buf_pos += CHACHA_BLOCKLEN; + memcpy(context->crypto.ctx_remote.chacha_remote.ks, buffer + buf_pos, CHACHA_BLOCKLEN); + buf_pos += CHACHA_BLOCKLEN; + } +#endif + + TLS_IMPORT_CHECK_SIZE(buf_pos, 2, buf_len) + unsigned short master_key_len = ntohs(*(unsigned short *)(buffer + buf_pos)); + buf_pos += 2; + if (master_key_len) { + TLS_IMPORT_CHECK_SIZE(buf_pos, master_key_len, buf_len) + context->master_key = (unsigned char *)TLS_MALLOC(master_key_len); + if (context->master_key) { + memcpy(context->master_key, &buffer[buf_pos], master_key_len); + context->master_key_len = master_key_len; + } + buf_pos += master_key_len; + } + + TLS_IMPORT_CHECK_SIZE(buf_pos, 16, buf_len) + + context->local_sequence_number = ntohll(*(uint64_t *)&buffer[buf_pos]); + buf_pos += 8; + context->remote_sequence_number = ntohll(*(uint64_t *)&buffer[buf_pos]); + buf_pos += 8; + + TLS_IMPORT_CHECK_SIZE(buf_pos, 4, buf_len) + unsigned int tls_buffer_len = ntohl(*(unsigned int *)&buffer[buf_pos]); + buf_pos += 4; + TLS_IMPORT_CHECK_SIZE(buf_pos, tls_buffer_len, buf_len) + if (tls_buffer_len) { + context->tls_buffer = (unsigned char *)TLS_MALLOC(tls_buffer_len); + if (context->tls_buffer) { + memcpy(context->tls_buffer, &buffer[buf_pos], tls_buffer_len); + context->tls_buffer_len = tls_buffer_len; + } + buf_pos += tls_buffer_len; + } + + TLS_IMPORT_CHECK_SIZE(buf_pos, 4, buf_len) + unsigned int message_buffer_len = ntohl(*(unsigned int *)&buffer[buf_pos]); + buf_pos += 4; + TLS_IMPORT_CHECK_SIZE(buf_pos, message_buffer_len, buf_len) + if (message_buffer_len) { + context->message_buffer = (unsigned char *)TLS_MALLOC(message_buffer_len); + if (context->message_buffer) { + memcpy(context->message_buffer, &buffer[buf_pos], message_buffer_len); + context->message_buffer_len = message_buffer_len; + } + buf_pos += message_buffer_len; + } + + TLS_IMPORT_CHECK_SIZE(buf_pos, 4, buf_len) + unsigned int application_buffer_len = ntohl(*(unsigned int *)&buffer[buf_pos]); + buf_pos += 4; + context->cipher_spec_set = 1; + TLS_IMPORT_CHECK_SIZE(buf_pos, application_buffer_len, buf_len) + if (application_buffer_len) { + context->application_buffer = (unsigned char *)TLS_MALLOC(application_buffer_len); + if (context->application_buffer) { + memcpy(context->application_buffer, &buffer[buf_pos], application_buffer_len); + context->application_buffer_len = application_buffer_len; + } + buf_pos += application_buffer_len; + } + TLS_IMPORT_CHECK_SIZE(buf_pos, 1, buf_len) + context->dtls = buffer[buf_pos]; + buf_pos++; + if (context->dtls) { + TLS_IMPORT_CHECK_SIZE(buf_pos, 4, buf_len) + context->dtls_epoch_local = ntohs(*(unsigned short *)&buffer[buf_pos]); + buf_pos += 2; + context->dtls_epoch_remote = ntohs(*(unsigned short *)&buffer[buf_pos]); + } + } + return context; +} + +int tls_is_broken(struct TLSContext *context) { + if ((!context) || (context->critical_error)) + return 1; + return 0; +} + +int tls_request_client_certificate(struct TLSContext *context) { + if ((!context) || (!context->is_server)) + return 0; + + context->request_client_certificate = 1; + return 1; +} + +int tls_client_verified(struct TLSContext *context) { + if ((!context) || (context->critical_error)) + return 0; + + return (context->client_verified == 1); +} + +const char *tls_sni(struct TLSContext *context) { + if (!context) + return NULL; + return context->sni; +} + +int tls_sni_nset(struct TLSContext *context, const char *sni, unsigned int len) +{ + if ((!context) || (context->is_server) || (context->critical_error) || (context->connection_status != 0)) + return 0; + TLS_FREE(context->sni); + context->sni = NULL; + if (sni && len > 0) { + context->sni = (char *)TLS_MALLOC(len + 1); + if (context->sni) { + context->sni[len] = 0; + memcpy(context->sni, sni, len); + return 1; + } + } + return 0; +} + +int tls_sni_set(struct TLSContext *context, const char *sni) { + if (!context || !sni) + return 0; + return tls_sni_nset(context, sni, strlen(sni)); +} + +int tls_srtp_set(struct TLSContext *context) { + if ((!context) || (!context->dtls)) + return TLS_GENERIC_ERROR; + context->dtls = 4; + return 0; +} + +int tls_srtp_key(struct TLSContext *context, unsigned char *buffer) { + if ((!context->master_key) || (!context->master_key_len)) + return TLS_GENERIC_ERROR; + + unsigned char material[(SRTP_MASTER_KEY_KEY_LEN + SRTP_MASTER_KEY_SALT_LEN) * 2]; + + if (context->is_server) + _private_tls_prf(context, material, sizeof(material), context->master_key, context->master_key_len, (unsigned char *)"EXTRACTOR-dtls_srtp", 19, context->remote_random, TLS_SERVER_RANDOM_SIZE, context->local_random, TLS_CLIENT_RANDOM_SIZE); + else + _private_tls_prf(context, material, sizeof(material), context->master_key, context->master_key_len, (unsigned char *)"EXTRACTOR-dtls_srtp", 19, context->local_random, TLS_SERVER_RANDOM_SIZE, context->remote_random, TLS_CLIENT_RANDOM_SIZE); + + if (buffer) + memcpy(buffer, material, sizeof(material)); + + DEBUG_DUMP_HEX_LABEL("USING MASTER KEY", context->master_key, context->master_key_len); + return sizeof(material); +} + +int tls_is_stun(const unsigned char *msg, int len) { + if ((!msg) || (len < 20)) + return 0; + + if ((msg[4] != 0x21) || (msg[5] != 0x12) || (msg[6] != 0xa4) || (msg[7] != 0x42)) + return 0; + + return 1; +} + +uint32_t _private_tls_crc32(const unsigned char *s, int n) { + uint32_t crc = 0xFFFFFFFF; + int i; + int j; + + for (i = 0; i < n; i++) { + char ch = s[i]; + for (j = 0; j < 8; j ++) { + uint32_t b = (ch ^ crc) & 1; + crc >>= 1; + if (b) + crc=crc^0xEDB88320; + ch >>= 1; + } + } + return ~crc; +} + +int tls_stun_parse(unsigned char *msg, int len, char *pwd, int pwd_len, unsigned char is_ipv6, unsigned char *addr, unsigned int port, unsigned char *response_buffer) { + // not a stun message? + if ((!msg) || (len < 20)) { + DEBUG_PRINT("INVALID STUN PACKET\n"); + return TLS_GENERIC_ERROR; + } + + if ((msg[4] != 0x21) || (msg[5] != 0x12) || (msg[6] != 0xa4) || (msg[7] != 0x42)) { + DEBUG_PRINT("INVALID STUN PACKET (INVALID MAGIC COOKIE)\n"); + return TLS_GENERIC_ERROR; + } + + int addr_len = 4; + if (is_ipv6) + addr_len = 16; + + unsigned char *stun_message = msg; + + unsigned short type = ntohs(*(unsigned short *)msg); + int msg_len = ntohs(*(unsigned short *)&msg[2]); + + if (msg_len > len - 20) + return -1; + + const unsigned char *magic_cookie = &msg[4]; + const unsigned char *transaction_id = &msg[8]; + + const unsigned char *attributes = &msg[20]; + + switch (type) { + case 0x0001: + break; + case 0x0101: + // ignore + return 0; + default: + DEBUG_PRINT("UNSUPPORTED MESSAGE TYPE %x\n", (int)type); + return TLS_FEATURE_NOT_SUPPORTED; + } + + msg += 20; + + unsigned char hash[20]; + unsigned long hash_len = 20; + + unsigned char md5_hash[16]; + + hmac_state hmac; + hash_state md5_state; + + memset(hash, 0, sizeof(hash)); + int stun_message_len = 20; + + unsigned char secret[16]; + + char key[0x4CE]; + + unsigned char *username = NULL; + int username_len = 0; + + unsigned char *realm = NULL; + int realm_len = 0; + + unsigned char *nonce = NULL; + int nonce_len = 0; + + char *ptr; + + int validated = 0; + + uint32_t priority = 0; + + while (msg_len >= 4) { + unsigned short attr_type = ntohs(*(unsigned short *)msg); + int attr_len = ntohs(*(unsigned short *)&msg[2]); + msg += 4; + msg_len -= 4; + + if (attr_len > msg_len) + return TLS_GENERIC_ERROR; + DEBUG_PRINT("STUN ATTR 0x%04X\n", (int)attr_type); + unsigned short temp; + switch (attr_type) { + case 0x0001: + // MAPPED-ADDRESS + break; + case 0x0006: + // USERNAME + if (attr_len > 513) + return TLS_BROKEN_PACKET; + + username = msg; + username_len = attr_len; + break; + case 0x0008: + // MESSAGE-INTEGRITY + if ((attr_len != 20) || (!username) || (!username_len)) + return -1; + + tls_init(); + + // HMAC is computed on message of size including MESSAGE-INTEGRITY, but not including fingerprint (or other post-MESSAGE-INTEGRITY extensions) + temp = *(unsigned short *)&stun_message[2]; + *(unsigned short *)&stun_message[2] = htons(stun_message_len + attr_len + 4 - 20); + + if ((realm) && (realm_len > 0)) { + ptr = key; + memcpy(ptr, username, username_len); + ptr += username_len; + + *ptr = ':'; + ptr ++; + + if ((realm) && (realm_len > 0)) { + memcpy(ptr, realm, realm_len); + ptr += username_len; + *ptr = ':'; + ptr ++; + } + + memcpy(ptr, pwd, pwd_len); + ptr += pwd_len; + + *ptr = 0; + + + DEBUG_PRINT("KEY: %s\n", key); + + md5_init(&md5_state); + md5_process(&md5_state, (unsigned char *)key, strlen(key)); + md5_done(&md5_state, md5_hash); + + DEBUG_DUMP_HEX_LABEL("HASH", md5_hash, 16); + + hmac_init(&hmac, find_hash("sha1"), md5_hash, 16); + } else + hmac_init(&hmac, find_hash("sha1"), (unsigned char *)pwd, pwd_len); + + + hmac_process(&hmac, stun_message, stun_message_len); + hmac_done(&hmac, hash, &hash_len); + + *(unsigned short *)&stun_message[2] = temp; + + if (memcmp(msg, hash, 16)) { + DEBUG_PRINT("MESSAGE-INTEGRITY check failed\n"); + return TLS_INTEGRITY_FAILED; + } + validated = 1; + break; + case 0x0009: + // ERROR-CODE + break; + case 0x000A: + // UNKNOWN-ATTRIBUTES + break; + case 0x0014: + // REALM + if (attr_len > 763) + return TLS_BROKEN_PACKET; + realm = msg; + realm_len = attr_len; + break; + case 0x0015: + // NONCE + if (attr_len > 763) + return TLS_BROKEN_PACKET; + nonce = msg; + nonce_len = attr_len; + break; + case 0x0020: + // XOR-MAPPED-ADDRESS + break; + case 0x0024: + // PRIORITY + if (attr_len != 4) + return TLS_BROKEN_PACKET; + uint32_t priority; + memcpy(&priority, msg, sizeof(priority)); + priority = ntohl(priority); + break; + } + + while (attr_len % 4) + attr_len ++; + + msg_len -= attr_len; + msg += attr_len; + stun_message_len += attr_len + 4; + } + if (!validated) + return TLS_GENERIC_ERROR; + + if (response_buffer) { + response_buffer[0] = 0x01; + response_buffer[1] = 0x01; + + // size + response_buffer[2] = 0x00; + response_buffer[3] = 0x00; + + response_buffer[4] = 0x21; + response_buffer[5] = 0x12; + response_buffer[6] = 0xa4; + response_buffer[7] = 0x42; + + // transaction ID + memcpy(response_buffer + 8, stun_message + 8, 12); + + // XOR-MAPPED-ADDRESS + response_buffer[20] = 0x00; + response_buffer[21] = 0x20; + + *(unsigned short *)&response_buffer[22] = htons(addr_len + 4); + + response_buffer[24] = 0x00; + if (is_ipv6) + response_buffer[25] = 0x02; + else + response_buffer[25] = 0x01; + + *(unsigned short *)&response_buffer[26] = htons(port); + + response_buffer[26] ^= response_buffer[4]; + response_buffer[27] ^= response_buffer[5]; + + memcpy(response_buffer + 28, addr, addr_len); + + int i; + for (i = 0; i < addr_len; i ++) + response_buffer[28 + i] ^= response_buffer[4 + i % 4]; + + int buffer_index = 28 + addr_len; + + // padding + while (buffer_index % 4) { + response_buffer[buffer_index] = 0x00; + buffer_index ++; + response_buffer[22] ++; + } + + // must be computed before to be included in hmac!!! + *(unsigned short *)&response_buffer[2] = htons(buffer_index + 4); + + hmac_init(&hmac, find_hash("sha1"), (unsigned char *)pwd, pwd_len); + hmac_process(&hmac, response_buffer, buffer_index); + hmac_done(&hmac, response_buffer + buffer_index + 4, &hash_len); + + // hmac + response_buffer[buffer_index] = 0x00; + response_buffer[buffer_index + 1] = 0x08; + response_buffer[buffer_index + 2] = 0x00; + response_buffer[buffer_index + 3] = 0x14; + + buffer_index += 24; + + response_buffer[buffer_index ++] = 0x80; + response_buffer[buffer_index ++] = 0x28; + response_buffer[buffer_index ++] = 0x00; + response_buffer[buffer_index ++] = 0x04; + + *(unsigned short *)&response_buffer[2] = htons(buffer_index - 16); + + uint32_t fingerprint = _private_tls_crc32(response_buffer, buffer_index - 4) ^ 0x5354554e; + *(uint32_t *)&response_buffer[buffer_index] = htonl(fingerprint); + + buffer_index += 4; + + DEBUG_DUMP_HEX_LABEL("STUN RESPONSE>>>>>>>>", response_buffer, buffer_index); + + return buffer_index; + } + return 0; +} + +int tls_stun_build(unsigned char transaction_id[12], char *username, int username_len, char *pwd, int pwd_len, unsigned char *msg) { + if (!msg) + return 0; + + *(unsigned short *)msg = htons(0x0001); + + msg[4] = 0x21; + msg[5] = 0x12; + msg[6] = 0xa4; + msg[7] = 0x42; + + memcpy(msg + 8, transaction_id, 12); + + unsigned char *ptr = msg + 20; + + int len = 20; + if ((username) && (username_len > 0) && (username_len <= 513)) { + *(unsigned short *)&msg[20] = htons(0x0006); + *(unsigned short *)&msg[22] = htons(username_len); + + len += 4; + + memcpy(msg + len, username, username_len); + len += username_len; + + while (len % 4) + msg[len ++] = 0; + } + + *(unsigned short *)&msg[len] = htons(0x0025); + *(unsigned short *)&msg[len + 2] = htons(0); + + len += 4; + + + *(unsigned short *)&msg[len] = htons(0x0008); + *(unsigned short *)&msg[len + 2] = htons(20); + + len += 24; + + *(unsigned short *)&msg[2] = htons(len - 20); + + tls_init(); + + hmac_state hmac; + unsigned long hash_len = 20; + + hmac_init(&hmac, find_hash("sha1"), (unsigned char *)pwd, pwd_len); + hmac_process(&hmac, msg, len - 24); + hmac_done(&hmac, msg + len - 20, &hash_len); + + msg[len ++] = 0x80; + msg[len ++] = 0x28; + msg[len ++] = 0x00; + msg[len ++] = 0x04; + + *(unsigned short *)&msg[2] = htons(len - 16); + + uint32_t fingerprint = _private_tls_crc32(msg, len - 4) ^ 0x5354554e; + *(uint32_t *)&msg[len] = htonl(fingerprint); + + len += 4; + + return len; +} + +int tls_cert_fingerprint(const char *pem_data, int pem_size, char *buffer, unsigned int buf_len) { + unsigned int len = 0; + if ((!buffer) || (!buf_len)) + return TLS_GENERIC_ERROR; + + unsigned char *data = tls_pem_decode((const unsigned char *)pem_data, pem_size, 0, &len); + if (!data) + return TLS_GENERIC_ERROR; + + unsigned char hash[32]; + + hash_state state; + + sha256_init(&state); + sha256_process(&state, data, len); + sha256_done(&state, hash); + + TLS_FREE(data); + + int i; + buffer[0] = 0; + for (i = 0; i < 32; i++) { + if (buf_len <= 1) + break; + if (i) { + snprintf(buffer, buf_len, ":"); + buffer ++; + buf_len --; + } + if (buf_len <= 2) + break; + snprintf(buffer, buf_len, "%02X", (unsigned int)hash[i]); + buffer += 2; + buf_len -= 2; + } + return 0; +} + +int tls_load_root_certificates(struct TLSContext *context, const unsigned char *pem_buffer, int pem_size) { + if (!context) + return TLS_GENERIC_ERROR; + + unsigned int len; + int idx = 0; + + do { + unsigned char *data = tls_pem_decode(pem_buffer, pem_size, idx++, &len); + if ((!data) || (!len)) + break; + struct TLSCertificate *cert = asn1_parse(NULL, data, len, 0); + if (cert) { + if ((cert->version == 2) +#ifdef TLS_X509_V1_SUPPORT + || (cert->version == 0) +#endif + ) { + if (cert->priv) { + DEBUG_PRINT("WARNING - parse error (private key encountered in certificate)\n"); + TLS_FREE(cert->priv); + cert->priv = NULL; + cert->priv_len = 0; + } + context->root_certificates = (struct TLSCertificate **)TLS_REALLOC(context->root_certificates, (context->root_count + 1) * sizeof(struct TLSCertificate *)); + if (!context->root_certificates) { + context->root_count = 0; + return TLS_GENERIC_ERROR; + } + context->root_certificates[context->root_count] = cert; + context->root_count++; + DEBUG_PRINT("Loaded certificate: %i\n", (int)context->root_count); + } else { + DEBUG_PRINT("WARNING - certificate version error (v%i)\n", (int)cert->version); + tls_destroy_certificate(cert); + } + } + TLS_FREE(data); + } while (1); + return context->root_count; +} + +int tls_default_verify(struct TLSContext *context, struct TLSCertificate **certificate_chain, int len) { + int i; + int err; + + if (certificate_chain) { + for (i = 0; i < len; i++) { + struct TLSCertificate *certificate = certificate_chain[i]; + // check validity date + err = tls_certificate_is_valid(certificate); + if (err) + return err; + } + } + // check if chain is valid + err = tls_certificate_chain_is_valid(certificate_chain, len); + if (err) + return err; + + // check certificate subject + if ((!context->is_server) && (context->sni) && (len > 0) && (certificate_chain)) { + err = tls_certificate_valid_subject(certificate_chain[0], context->sni); + if (err) + return err; + } + + err = tls_certificate_chain_is_valid_root(context, certificate_chain, len); + if (err) + return err; + + DEBUG_PRINT("Certificate OK\n"); + return no_error; +} + +int tls_unmake_ktls(struct TLSContext *context, int socket) { +#ifdef WITH_KTLS + struct tls12_crypto_info_aes_gcm_128 crypto_info; + socklen_t crypt_info_size = sizeof(crypto_info); + if (getsockopt(socket, SOL_TLS, TLS_TX, &crypto_info, &crypt_info_size)) { + DEBUG_PRINT("ERROR IN getsockopt\n"); + return TLS_GENERIC_ERROR; + } + memcpy(&context->local_sequence_number, crypto_info.rec_seq, TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE); + context->local_sequence_number = ntohll(context->local_sequence_number); +#ifdef TLS_RX + crypt_info_size = sizeof(crypto_info); + if (getsockopt(socket, SOL_TLS, TLS_RX, &crypto_info, &crypt_info_size)) { + DEBUG_PRINT("ERROR IN getsockopt\n"); + return TLS_GENERIC_ERROR; + } + memcpy(&context->remote_sequence_number, crypto_info.rec_seq, TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE); + context->remote_sequence_number = ntohll(context->remote_sequence_number); +#endif + return 0; +#endif + DEBUG_PRINT("TLSe COMPILED WITHOUT kTLS SUPPORT\n"); + return TLS_FEATURE_NOT_SUPPORTED; +} + +int tls_make_ktls(struct TLSContext *context, int socket) { + if ((!context) || (context->critical_error) || (context->connection_status != 0xFF) || (!context->crypto.created)) { + DEBUG_PRINT("CANNOT SWITCH TO kTLS\n"); + return TLS_GENERIC_ERROR; + } + if ((!context->exportable) || (!context->exportable_keys)) { + DEBUG_PRINT("KEY MUST BE EXPORTABLE TO BE ABLE TO USE kTLS\n"); + return TLS_GENERIC_ERROR; + } + if ((context->version != TLS_V12) && (context->version != DTLS_V12) && (context->version != TLS_V13) && (context->version != DTLS_V13)) { + DEBUG_PRINT("kTLS IS SUPPORTED ONLY FOR TLS >= 1.2 AND DTLS >= 1.2\n"); + return TLS_FEATURE_NOT_SUPPORTED; + } + switch (context->cipher) { + case TLS_RSA_WITH_AES_128_GCM_SHA256: + case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: + case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: + case TLS_AES_128_GCM_SHA256: + break; + default: + DEBUG_PRINT("CIPHER UNSUPPORTED: kTLS SUPPORTS ONLY AES 128 GCM CIPHERS\n"); + return TLS_FEATURE_NOT_SUPPORTED; + } +#ifdef WITH_KTLS + if (context->exportable_size < TLS_CIPHER_AES_GCM_128_KEY_SIZE * 2) { + DEBUG_PRINT("INVALID KEY SIZE\n"); + return TLS_GENERIC_ERROR; + } + int err; + struct tls12_crypto_info_aes_gcm_128 crypto_info; + crypto_info.info.cipher_type = TLS_CIPHER_AES_GCM_128; + uint64_t local_sequence_number = htonll(context->local_sequence_number); + + if ((context->version == TLS_V12) || (context->version == DTLS_V12)) { + crypto_info.info.version = TLS_1_2_VERSION; + memcpy(crypto_info.iv, &local_sequence_number, TLS_CIPHER_AES_GCM_128_IV_SIZE); + memcpy(crypto_info.rec_seq, &local_sequence_number, TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE); + memcpy(crypto_info.key, context->exportable_keys, TLS_CIPHER_AES_GCM_128_KEY_SIZE); + memcpy(crypto_info.salt, context->crypto.ctx_local_mac.local_aead_iv, TLS_CIPHER_AES_GCM_128_SALT_SIZE); + } else if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + crypto_info.info.version = TLS_1_3_VERSION; + memcpy(crypto_info.iv, context->crypto.ctx_local_mac.local_iv + 4, TLS_CIPHER_AES_GCM_128_IV_SIZE); + memcpy(crypto_info.rec_seq, &local_sequence_number, TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE); + memcpy(crypto_info.key, context->exportable_keys, TLS_CIPHER_AES_GCM_128_KEY_SIZE); + memcpy(crypto_info.salt, context->crypto.ctx_local_mac.local_iv, TLS_CIPHER_AES_GCM_128_SALT_SIZE); + } + + err = setsockopt(socket, SOL_TCP, TCP_ULP, "tls", sizeof("tls")); + if (err) + return err; + +#ifdef TLS_RX + // kernel 4.17 adds TLS_RX support + struct tls12_crypto_info_aes_gcm_128 crypto_info_read; + + crypto_info_read.info.cipher_type = TLS_CIPHER_AES_GCM_128; + + uint64_t remote_sequence_number = htonll(context->remote_sequence_number); + + if ((context->version == TLS_V12) || (context->version == DTLS_V12)) { + crypto_info_read.info.version = TLS_1_2_VERSION; + memcpy(crypto_info_read.iv, &remote_sequence_number, TLS_CIPHER_AES_GCM_128_IV_SIZE); + memcpy(crypto_info_read.rec_seq, &remote_sequence_number, TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE); + memcpy(crypto_info_read.key, context->exportable_keys + TLS_CIPHER_AES_GCM_128_KEY_SIZE, TLS_CIPHER_AES_GCM_128_KEY_SIZE); + memcpy(crypto_info_read.salt, context->crypto.ctx_remote_mac.remote_aead_iv, TLS_CIPHER_AES_GCM_128_SALT_SIZE); + } else if ((context->version == TLS_V13) || (context->version == DTLS_V13)) { + crypto_info_read.info.version = TLS_1_3_VERSION; + memcpy(crypto_info_read.iv, context->crypto.ctx_remote_mac.remote_iv + 4, TLS_CIPHER_AES_GCM_128_IV_SIZE); + memcpy(crypto_info_read.rec_seq, &remote_sequence_number, TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE); + memcpy(crypto_info_read.key, context->exportable_keys + TLS_CIPHER_AES_GCM_128_KEY_SIZE, TLS_CIPHER_AES_GCM_128_KEY_SIZE); + memcpy(crypto_info_read.salt, context->crypto.ctx_remote_mac.remote_iv, TLS_CIPHER_AES_GCM_128_SALT_SIZE); + } + + err = setsockopt(socket, SOL_TLS, TLS_RX, &crypto_info_read, sizeof(crypto_info_read)); + if (err) + return err; +#endif + return setsockopt(socket, SOL_TLS, TLS_TX, &crypto_info, sizeof(crypto_info)); +#else + DEBUG_PRINT("TLSe COMPILED WITHOUT kTLS SUPPORT\n"); + return TLS_FEATURE_NOT_SUPPORTED; +#endif +} + +#ifdef DEBUG +void tls_print_certificate(const char *fname) { + unsigned char buf[0xFFFF]; + char out_buf[0xFFFF]; + int size = _private_tls_read_from_file(fname, buf, 0xFFFF); + if (size > 0) { + int idx = 0; + unsigned int len; + do { + unsigned char *data; + if (buf[0] == '-') { + data = tls_pem_decode(buf, size, idx++, &len); + } else { + data = buf; + len = size; + } + if ((!data) || (!len)) + return; + struct TLSCertificate *cert = asn1_parse(NULL, data, len, -1); + if (data != buf) + TLS_FREE(data); + if (cert) { + fprintf(stderr, "%s", tls_certificate_to_string(cert, out_buf, 0xFFFF)); + tls_destroy_certificate(cert); + } + if (data == buf) + break; + } while (1); + } +} +#endif + +int tls_remote_error(struct TLSContext *context) { + if (!context) + return TLS_GENERIC_ERROR; + + return context->error_code; +} + +struct TLSRTCPeerConnection *tls_peerconnection_context(unsigned char active, tls_validation_function certificate_verify, void *userdata) { + const char pwd_chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_/"; + struct TLSRTCPeerConnection *channel = (struct TLSRTCPeerConnection *)TLS_MALLOC(sizeof(struct TLSRTCPeerConnection)); + if (channel) { + memset(channel, 0, sizeof(struct TLSRTCPeerConnection)); + tls_random(channel->stun_transcation_id, 12); + + unsigned char buffer[32]; + tls_random(buffer, 32); + + int i; + for (i = 0; i < 4; i ++) + channel->local_user[i] = 'A' + buffer[i] % 25; + channel->local_user[4] = 0; + + for (i = 0; i < 24; i ++) + channel->local_pwd[i] = pwd_chars[buffer[i + 4] % (sizeof(pwd_chars) - 1)]; + + channel->local_pwd[24] = 0; + + channel->certificate_verify = certificate_verify; + channel->active = active; + channel->userdata = userdata; + } + + return channel; +} + +struct TLSRTCPeerConnection *tls_peerconnection_duplicate(struct TLSRTCPeerConnection *channel, void *userdata) { + if ((!channel) || (channel->active) || (!channel->context)) + return NULL; + + struct TLSRTCPeerConnection *clone = tls_peerconnection_context(0, channel->certificate_verify, userdata); + clone->context = tls_accept(channel->context); + tls_srtp_set(clone->context); + tls_add_alpn(clone->context, "webrtc"); + + return clone; +} + +struct TLSContext *tls_peerconnection_dtls_context(struct TLSRTCPeerConnection *channel) { + if (!channel) + return NULL; + + return channel->context; +} + +int tls_peerconnection_remote_credentials(struct TLSRTCPeerConnection *channel, char *remote_username, int remote_username_len, char *remote_pwd, int remote_pwd_len, char *remote_fingerprint, int remote_fingerprint_len) { + if (!channel) + return TLS_GENERIC_ERROR; + + if (channel->remote_user) { + TLS_FREE(channel->remote_user); + channel->remote_user = NULL; + channel->remote_user_len = 0; + } + + if (channel->remote_pwd) { + TLS_FREE(channel->remote_pwd); + channel->remote_pwd = NULL; + channel->remote_pwd_len = 0; + } + + if ((remote_username) && (remote_username_len > 0)) { + channel->remote_user = (unsigned char *)TLS_MALLOC(remote_username_len + 1); + if (!channel->remote_user) + return TLS_NO_MEMORY; + + memcpy(channel->remote_user, remote_username, remote_username_len); + channel->remote_user[remote_username_len] = 0; + channel->remote_user_len = remote_username_len; + } + + if ((remote_pwd) && (remote_pwd_len > 0)) { + channel->remote_pwd = (unsigned char *)TLS_MALLOC(remote_pwd_len + 1); + if (!channel->remote_pwd) + return TLS_NO_MEMORY; + + memcpy(channel->remote_pwd, remote_pwd, remote_pwd_len); + channel->remote_pwd[remote_pwd_len] = 0; + channel->remote_pwd_len = remote_pwd_len; + } + + if ((remote_fingerprint) && (remote_fingerprint_len > 0)) { + if (channel->context->dtls_data->remote_fingerprint) + TLS_FREE(channel->context->dtls_data->remote_fingerprint); + + channel->context->dtls_data->remote_fingerprint = (char *)TLS_MALLOC(remote_fingerprint_len + 1); + if (!channel->context->dtls_data->remote_fingerprint) + return TLS_NO_MEMORY; + + memcpy(channel->context->dtls_data->remote_fingerprint, remote_fingerprint, remote_fingerprint_len); + channel->context->dtls_data->remote_fingerprint[remote_fingerprint_len] = 0; + } + + return 0; +} + +const char *tls_peerconnection_local_pwd(struct TLSRTCPeerConnection *channel) { + if (!channel) + return NULL; + + return channel->local_pwd; +} + +const char *tls_peerconnection_local_username(struct TLSRTCPeerConnection *channel) { + if (!channel) + return NULL; + + return channel->local_user; +} + +void *tls_peerconnection_userdata(struct TLSRTCPeerConnection *channel) { + if (!channel) + return NULL; + + return channel->userdata; +} + +int tls_peerconnection_load_keys(struct TLSRTCPeerConnection *channel, const unsigned char *pem_pub_key, int pem_pub_key_size, const unsigned char *pem_priv_key, int pem_priv_key_size) { + if (!channel->context) { + channel->context = tls_create_context(!channel->active, DTLS_V12); + tls_srtp_set(channel->context); + tls_add_alpn(channel->context, "webrtc"); + + if (channel->context->is_server) + channel->context->request_client_certificate = 1; + } + + if (tls_load_certificates(channel->context, pem_pub_key, pem_pub_key_size) < 0) + return TLS_UNSUPPORTED_CERTIFICATE; + + if (tls_load_private_key(channel->context, pem_priv_key, pem_priv_key_size) < 0) + return TLS_UNSUPPORTED_CERTIFICATE; + + return 0; +} + +int _private_tls_peerconnection_buffer_add(struct TLSRTCPeerBuffer **use_buffer, const unsigned char *buf, int len) { + if ((!use_buffer) || (!buf) || (!len)) + return TLS_GENERIC_ERROR; + + struct TLSRTCPeerBuffer *buffer = (struct TLSRTCPeerBuffer *)TLS_MALLOC(sizeof(struct TLSRTCPeerBuffer)); + if (!buffer) + return TLS_NO_MEMORY; + + buffer->buf = (unsigned char *)TLS_MALLOC(len); + if (!buffer->buf) { + TLS_FREE(buffer); + return TLS_NO_MEMORY; + } + + memcpy(buffer->buf, buf, len); + buffer->len = len; + buffer->next = NULL; + + if (*use_buffer) { + struct TLSRTCPeerBuffer *next = *use_buffer; + while ((next) && (next->next)) + next = (struct TLSRTCPeerBuffer *)next->next; + next->next = buffer; + } else + *use_buffer = buffer; + + return len; +} + +int tls_peerconnection_get_write_msg(struct TLSRTCPeerConnection *channel, unsigned char *buf) { + if ((!channel) || (!channel->write_buffer)) + return 0; + + struct TLSRTCPeerBuffer *buffer = channel->write_buffer; + + int len = buffer->len; + + if (!buf) + return len; + + channel->write_buffer = (struct TLSRTCPeerBuffer *)buffer->next; + + memcpy(buf, buffer->buf, buffer->len); + + if (buffer->buf) + TLS_FREE(buffer->buf); + TLS_FREE(buffer); + + return len; +} + +int tls_peerconnection_get_read_msg(struct TLSRTCPeerConnection *channel, unsigned char *buf) { + if ((!channel) || (!channel->read_buffer)) + return 0; + + struct TLSRTCPeerBuffer *buffer = channel->read_buffer; + + int len = buffer->len; + + if (!buf) + return len; + + channel->read_buffer = (struct TLSRTCPeerBuffer *)buffer->next; + + memcpy(buf, buffer->buf, buffer->len); + + if (buffer->buf) + TLS_FREE(buffer->buf); + TLS_FREE(buffer); + + return len; +} + +int tls_peerconnection_connect(struct TLSRTCPeerConnection *channel, tls_peerconnection_write_function write_function) { + if ((!channel) || (!channel->remote_pwd) || (!channel->remote_user)) + return TLS_GENERIC_ERROR; + + unsigned char msg[1024]; + char full_user[1024]; + + snprintf(full_user, sizeof(full_user), "%s:%s", channel->remote_user, channel->local_user); + + int len = tls_stun_build(channel->stun_transcation_id, full_user, strlen(full_user), (char *)channel->remote_pwd, channel->remote_pwd_len, msg); + if (len < 0) + return 0; + + if (!write_function) + return _private_tls_peerconnection_buffer_add(&channel->write_buffer, msg, len); + + return write_function(channel, msg, len); +} + +void _private_dtls_ensure_keys(struct TLSRTCPeerConnection *channel) { +#ifdef TLS_SRTP + if ((channel->remote_state != 3) && (tls_established(channel->context) == 1)) { + DEBUG_PRINT("******** HAVE REMOTE SRTP KEY ***********\n"); + channel->remote_state = 3; + + unsigned char key_buffer[(SRTP_MASTER_KEY_KEY_LEN + SRTP_MASTER_KEY_SALT_LEN) * 2]; + int key_size = tls_srtp_key(channel->context, key_buffer); + + if (key_size > 0) { + DEBUG_DUMP_HEX_LABEL("SRTP KEY", key_buffer, key_size); + + channel->srtp_local = srtp_init(SRTP_AES_CM, SRTP_AUTH_HMAC_SHA1); + channel->srtp_remote = srtp_init(SRTP_AES_CM, SRTP_AUTH_HMAC_SHA1); + + unsigned char *localkey; + unsigned char *remotekey; + unsigned char *localsalt; + unsigned char *remotesalt; + + if (channel->context->is_server) { + remotekey = key_buffer; + localkey = key_buffer + SRTP_MASTER_KEY_KEY_LEN; + remotesalt = key_buffer + SRTP_MASTER_KEY_KEY_LEN + SRTP_MASTER_KEY_KEY_LEN; + localsalt = key_buffer + SRTP_MASTER_KEY_KEY_LEN + SRTP_MASTER_KEY_KEY_LEN + SRTP_MASTER_KEY_SALT_LEN; + } else { + localkey = key_buffer; + remotekey = key_buffer + SRTP_MASTER_KEY_KEY_LEN; + localsalt = key_buffer + SRTP_MASTER_KEY_KEY_LEN + SRTP_MASTER_KEY_KEY_LEN; + remotesalt = key_buffer + SRTP_MASTER_KEY_KEY_LEN + SRTP_MASTER_KEY_KEY_LEN + SRTP_MASTER_KEY_SALT_LEN; + } + + srtp_key(channel->srtp_local, localkey, 16, localsalt, 14, 80); + srtp_key(channel->srtp_remote, remotekey, 16, remotesalt, 14, 80); + } + } +#endif +} + +int tls_peerconnection_iterate(struct TLSRTCPeerConnection *channel, unsigned char *buf, int buf_len, unsigned char *addr, int port, unsigned char is_ipv6, tls_peerconnection_write_function write_function, int *validate_addr) { + if (validate_addr) + *validate_addr = 0; + + if ((!channel) || (!buf) || (buf_len <= 0)) + return 0; + + int err; + struct TLSContext *context = NULL; + if (tls_is_stun(buf, buf_len)) { + DEBUG_PRINT("RECEIVED STUN PACKET\n"); + unsigned char response_buffer[0x8000]; + int len = tls_stun_parse(buf, buf_len, channel->local_pwd, strlen(channel->local_pwd), is_ipv6, addr, port, response_buffer); + + if ((len >= 0) && (validate_addr)) + *validate_addr = 1; + + unsigned short type = ntohs(*(unsigned short *)buf); + + if ((len <= 0) && (type != 0x0101)) + return len; + + if (!channel->remote_state) { + channel->remote_state = 1; + + if (!channel->local_state) + tls_peerconnection_connect(channel, write_function); + } + + if ((type == 0x0101) && (channel->remote_state == 1) && (channel->active)) { + err = tls_client_connect(channel->context); + if (err < 0) + return err; + + context = channel->context; + } + + if (len > 0) { + if (write_function) + err = write_function(channel, response_buffer, len); + else + err = _private_tls_peerconnection_buffer_add(&channel->write_buffer, response_buffer, len); + + if (err <= 0) + return err; + } + context = channel->context; + if (context) { + unsigned int out_buffer_len = 0; + const unsigned char *out_buffer = tls_get_write_buffer(context, &out_buffer_len); + if ((out_buffer) && (out_buffer_len)) { + if (write_function) + err = write_function(channel, out_buffer, out_buffer_len); + else + err = _private_tls_peerconnection_buffer_add(&channel->write_buffer, out_buffer, out_buffer_len); + if (err > 0) + tls_buffer_clear(context); + } + } + + return err; + } + + if ((buf[0] >= 20) && (buf[0] <= 64)) { + DEBUG_PRINT("RECEIVED DTLS PACKET\n"); + if (!channel->remote_state) { + DEBUG_PRINT("NO STUN ASSOCIATION, IGNORED DTLS PACKET\n"); + return 0; + } + if (channel->remote_state == 1) + channel->remote_state = 2; + + err = tls_consume_stream(channel->context, buf, buf_len, channel->certificate_verify); + + unsigned int out_buffer_len = 0; + const unsigned char *out_buffer = tls_get_write_buffer(channel->context, &out_buffer_len); + if ((out_buffer) && (out_buffer_len)) { + if (write_function) + err = write_function(channel, out_buffer, out_buffer_len); + else + err = _private_tls_peerconnection_buffer_add(&channel->write_buffer, out_buffer, out_buffer_len); + if (err > 0) + tls_buffer_clear(channel->context); + } + + if (err < 0) + return err; + + _private_dtls_ensure_keys(channel); + + return 0; + } + + if ((buf[0] >= 128) && (buf[0] <= 191)) { + DEBUG_PRINT("RECEIVED RTP PACKET\n"); +#ifdef TLS_SRTP + if (channel->srtp_remote) { + DEBUG_DUMP_HEX_LABEL("SRTP", buf, buf_len); + if (buf_len > 12) { + unsigned char out[0x4000]; + int out_buffer_len = sizeof(out) - 12; + int len = srtp_decrypt(channel->srtp_remote, 0, buf, 12, buf + 12, buf_len - 12, out + 12, &out_buffer_len); + + if (len >= 0) { + memcpy(out, buf, 12); + DEBUG_DUMP_HEX_LABEL("RTP header", out, 12); + DEBUG_DUMP_HEX_LABEL("RTP payload", out + 12, out_buffer_len); + _private_tls_peerconnection_buffer_add(&channel->read_buffer, out, out_buffer_len + 12); + } + } + } else { + DEBUG_PRINT("DTLS-SRTP HANDSHAKE NOT YET ESTABLISHED\n"); + } +#endif + return 0; + } + return 0; +} + +int tls_peerconnection_status(struct TLSRTCPeerConnection *channel) { + if (!channel) + return -1; + + // 0 not connected + // 1 stun received + // 2 dtls received + // 3 srtp ready + // 4 closed + + int status = channel->remote_state; + if (channel->context->critical_error) + status = 4; + + return status; +} + +void tls_destroy_peerconnection(struct TLSRTCPeerConnection *channel) { + if (!channel) + return; + + if (channel->context) + tls_destroy_context(channel->context); + + if (channel->remote_user) + TLS_FREE(channel->remote_user); + if (channel->remote_pwd) + TLS_FREE(channel->remote_pwd); + +#ifdef TLS_SRTP + if (channel->srtp_local) + srtp_destroy(channel->srtp_local); + if (channel->srtp_remote) + srtp_destroy(channel->srtp_remote); +#endif + + while (channel->write_buffer) { + struct TLSRTCPeerBuffer *next = (struct TLSRTCPeerBuffer *)channel->write_buffer->next;; + if (channel->write_buffer->buf) + TLS_FREE(channel->write_buffer->buf); + TLS_FREE(channel->write_buffer); + channel->write_buffer = next; + } + + while (channel->read_buffer) { + struct TLSRTCPeerBuffer *next = (struct TLSRTCPeerBuffer *)channel->read_buffer->next;; + if (channel->read_buffer->buf) + TLS_FREE(channel->read_buffer->buf); + TLS_FREE(channel->read_buffer); + channel->read_buffer = next; + } + + TLS_FREE(channel); +} + + +#ifdef SSL_COMPATIBLE_INTERFACE + +int SSL_library_init() { + // dummy function + return 1; +} + +void SSL_load_error_strings() { + // dummy function +} + +void OpenSSL_add_all_algorithms() { + // dummy function +} + +void OpenSSL_add_all_ciphers() { + // dummy function +} + +void OpenSSL_add_all_digests() { + // dummy function +} + +void EVP_cleanup() { + // dummy function +} + +int _tls_ssl_private_send_pending(int client_sock, struct TLSContext *context) { + unsigned int out_buffer_len = 0; + const unsigned char *out_buffer = tls_get_write_buffer(context, &out_buffer_len); + unsigned int out_buffer_index = 0; + int send_res = 0; + SOCKET_SEND_CALLBACK write_cb = NULL; + SSLUserData *ssl_data = (SSLUserData *)context->user_data; + if (ssl_data) + write_cb = (SOCKET_SEND_CALLBACK)ssl_data->send; + while ((out_buffer) && (out_buffer_len > 0)) { + int res; + if (write_cb) + res = write_cb(client_sock, (char *)&out_buffer[out_buffer_index], out_buffer_len, 0); + else + res = send(client_sock, (char *)&out_buffer[out_buffer_index], out_buffer_len, 0); + if (res <= 0) { + if ((!write_cb) && (res < 0)) { +#ifdef _WIN32 + if (WSAGetLastError() == WSAEWOULDBLOCK) { + context->tls_buffer_len = out_buffer_len; + memmove(context->tls_buffer, out_buffer + out_buffer_index, out_buffer_len); + return res; + } +#else + if ((errno == EAGAIN) || (errno == EINTR)) { + context->tls_buffer_len = out_buffer_len; + memmove(context->tls_buffer, out_buffer + out_buffer_index, out_buffer_len); + return res; + } +#endif + } + send_res = res; + break; + } + out_buffer_len -= res; + out_buffer_index += res; + send_res += res; + } + tls_buffer_clear(context); + return send_res; +} + +struct TLSContext *SSL_new(struct TLSContext *context) { + return tls_accept(context); +} + +int SSLv3_server_method() { + return 1; +} + +int SSLv3_client_method() { + return 0; +} + +int SSL_CTX_use_certificate_file(struct TLSContext *context, const char *filename, int dummy) { + // max 64k buffer + unsigned char buf[0xFFFF]; + int size = _private_tls_read_from_file(filename, buf, sizeof(buf)); + if (size > 0) + return tls_load_certificates(context, buf, size); + return size; +} + +int SSL_CTX_use_PrivateKey_file(struct TLSContext *context, const char *filename, int dummy) { + unsigned char buf[0xFFFF]; + int size = _private_tls_read_from_file(filename, buf, sizeof(buf)); + if (size > 0) + return tls_load_private_key(context, buf, size); + + return size; +} + +int SSL_CTX_check_private_key(struct TLSContext *context) { + if ((!context) || (((!context->private_key) || (!context->private_key->der_bytes) || (!context->private_key->der_len)) +#ifdef TLS_ECDSA_SUPPORTED + && ((!context->ec_private_key) || (!context->ec_private_key->der_bytes) || (!context->ec_private_key->der_len)) +#endif + )) + return 0; + return 1; +} + +struct TLSContext *SSL_CTX_new(int method) { +#ifdef WITH_TLS_13 + return tls_create_context(method, TLS_V13); +#else + return tls_create_context(method, TLS_V12); +#endif +} + +void SSL_free(struct TLSContext *context) { + if (context) { + TLS_FREE(context->user_data); + tls_destroy_context(context); + } +} + +void SSL_CTX_free(struct TLSContext *context) { + SSL_free(context); +} + +int SSL_get_error(struct TLSContext *context, int ret) { + if (!context) + return TLS_GENERIC_ERROR; + return context->critical_error; +} + +int SSL_set_fd(struct TLSContext *context, int socket) { + if (!context) + return 0; + SSLUserData *ssl_data = (SSLUserData *)context->user_data; + if (!ssl_data) { + ssl_data = (SSLUserData *)TLS_MALLOC(sizeof(SSLUserData)); + if (!ssl_data) + return TLS_NO_MEMORY; + memset(ssl_data, 0, sizeof(SSLUserData)); + context->user_data = ssl_data; + } + ssl_data->fd = socket; + return 1; +} + +void *SSL_set_userdata(struct TLSContext *context, void *data) { + if (!context) + return NULL; + SSLUserData *ssl_data = (SSLUserData *)context->user_data; + if (!ssl_data) { + ssl_data = (SSLUserData *)TLS_MALLOC(sizeof(SSLUserData)); + if (!ssl_data) + return NULL; + memset(ssl_data, 0, sizeof(SSLUserData)); + context->user_data = ssl_data; + } + void *old_data = ssl_data->user_data; + ssl_data->user_data = data; + return old_data; +} + +void *SSL_userdata(struct TLSContext *context) { + if (!context) + return NULL; + SSLUserData *ssl_data = (SSLUserData *)context->user_data; + if (!ssl_data) + return NULL; + + return ssl_data->user_data; +} + +int SSL_CTX_root_ca(struct TLSContext *context, const char *pem_filename) { + if (!context) + return TLS_GENERIC_ERROR; + + int count = TLS_GENERIC_ERROR; + FILE *f = fopen(pem_filename, "rb"); + if (f) { + fseek(f, 0, SEEK_END); + size_t size = (size_t)ftell(f); + fseek(f, 0, SEEK_SET); + if (size) { + unsigned char *buf = (unsigned char *)TLS_MALLOC(size + 1); + if (buf) { + buf[size] = 1; + if (fread(buf, 1, size, f) == size) { + count = tls_load_root_certificates(context, buf, size); + if (count > 0) { + SSLUserData *ssl_data = (SSLUserData *)context->user_data; + if (!ssl_data) { + ssl_data = (SSLUserData *)TLS_MALLOC(sizeof(SSLUserData)); + if (!ssl_data) { + fclose(f); + return TLS_NO_MEMORY; + } + memset(ssl_data, 0, sizeof(SSLUserData)); + context->user_data = ssl_data; + } + if (!ssl_data->certificate_verify) + ssl_data->certificate_verify = tls_default_verify; + } + } + TLS_FREE(buf); + } + } + fclose(f); + } + return count; +} + +void SSL_CTX_set_verify(struct TLSContext *context, int mode, tls_validation_function verify_callback) { + if (!context) + return; + SSLUserData *ssl_data = (SSLUserData *)context->user_data; + if (!ssl_data) { + ssl_data = (SSLUserData *)TLS_MALLOC(sizeof(SSLUserData)); + if (!ssl_data) + return; + memset(ssl_data, 0, sizeof(SSLUserData)); + context->user_data = ssl_data; + } + if (mode == SSL_VERIFY_NONE) + ssl_data->certificate_verify = NULL; + else + ssl_data->certificate_verify = verify_callback; +} + +int _private_tls_safe_read(struct TLSContext *context, void *buffer, int buf_size) { + SSLUserData *ssl_data = (SSLUserData *)context->user_data; + if ((!ssl_data) || (ssl_data->fd < 0)) + return TLS_GENERIC_ERROR; + + SOCKET_RECV_CALLBACK read_cb = (SOCKET_RECV_CALLBACK)ssl_data->recv; + if (read_cb) + return read_cb(ssl_data->fd, (char *)buffer, buf_size, 0); + return recv(ssl_data->fd, (char *)buffer, buf_size, 0); +} + +int SSL_accept(struct TLSContext *context) { + if (!context) + return TLS_GENERIC_ERROR; + SSLUserData *ssl_data = (SSLUserData *)context->user_data; + if ((!ssl_data) || (ssl_data->fd < 0)) + return TLS_GENERIC_ERROR; + if (tls_established(context)) + return 1; + unsigned char client_message[0xFFFF]; + // accept + int read_size = 0; + while ((read_size = _private_tls_safe_read(context, (char *)client_message, sizeof(client_message))) > 0) { + if (tls_consume_stream(context, client_message, read_size, ssl_data->certificate_verify) >= 0) { + int res = _tls_ssl_private_send_pending(ssl_data->fd, context); + if (res < 0) + return res; + } + if (tls_established(context)) + return 1; + } + if (read_size <= 0) + return TLS_BROKEN_CONNECTION; + return 0; +} + +int SSL_connect(struct TLSContext *context) { + if (!context) + return TLS_GENERIC_ERROR; + SSLUserData *ssl_data = (SSLUserData *)context->user_data; + if ((!ssl_data) || (ssl_data->fd < 0) || (context->critical_error)) + return TLS_GENERIC_ERROR; + int res = tls_client_connect(context); + if (res < 0) + return res; + res = _tls_ssl_private_send_pending(ssl_data->fd, context); + if (res < 0) + return res; + + int read_size; + unsigned char client_message[0xFFFF]; + + while ((read_size = _private_tls_safe_read(context, (char *)client_message, sizeof(client_message))) > 0) { + if (tls_consume_stream(context, client_message, read_size, ssl_data->certificate_verify) >= 0) { + res = _tls_ssl_private_send_pending(ssl_data->fd, context); + if (res < 0) + return res; + } + if (tls_established(context)) + return 1; + if (context->critical_error) + return TLS_GENERIC_ERROR; + } + return read_size; +} + +int SSL_shutdown(struct TLSContext *context) { + if (!context) + return TLS_GENERIC_ERROR; + SSLUserData *ssl_data = (SSLUserData *)context->user_data; + if ((!ssl_data) || (ssl_data->fd < 0)) + return TLS_GENERIC_ERROR; + + tls_close_notify(context); + return 0; +} + +int SSL_write(struct TLSContext *context, const void *buf, unsigned int len) { + if (!context) + return TLS_GENERIC_ERROR; + SSLUserData *ssl_data = (SSLUserData *)context->user_data; + if ((!ssl_data) || (ssl_data->fd < 0)) + return TLS_GENERIC_ERROR; + + int written_size = tls_write(context, (const unsigned char *)buf, len); + if (written_size > 0) { + int res = _tls_ssl_private_send_pending(ssl_data->fd, context); + if (res <= 0) + return res; + } + return written_size; +} + +int SSL_read(struct TLSContext *context, void *buf, unsigned int len) { + if (!context) + return TLS_GENERIC_ERROR; + + if (context->application_buffer_len) + return tls_read(context, (unsigned char *)buf, len); + + SSLUserData *ssl_data = (SSLUserData *)context->user_data; + if ((!ssl_data) || (ssl_data->fd < 0) || (context->critical_error)) + return TLS_GENERIC_ERROR; + if (tls_established(context) != 1) + return TLS_GENERIC_ERROR; + + unsigned char client_message[0xFFFF]; + // accept + int read_size; + while ((!context->application_buffer_len) && ((read_size = _private_tls_safe_read(context, (char *)client_message, sizeof(client_message))) > 0)) { + if (tls_consume_stream(context, client_message, read_size, ssl_data->certificate_verify) > 0) + _tls_ssl_private_send_pending(ssl_data->fd, context); + + if ((context->critical_error) && (!context->application_buffer_len)) + return TLS_GENERIC_ERROR; + } + if ((read_size <= 0) && (!context->application_buffer_len)) + return read_size; + + return tls_read(context, (unsigned char *)buf, len); +} + +int SSL_pending(struct TLSContext *context) { + if (!context) + return TLS_GENERIC_ERROR; + return context->application_buffer_len; +} + +int SSL_set_io(struct TLSContext *context, void *recv_cb, void *send_cb) { + if (!context) + return TLS_GENERIC_ERROR; + SSLUserData *ssl_data = (SSLUserData *)context->user_data; + if (!ssl_data) { + ssl_data = (SSLUserData *)TLS_MALLOC(sizeof(SSLUserData)); + if (!ssl_data) + return TLS_NO_MEMORY; + memset(ssl_data, 0, sizeof(SSLUserData)); + context->user_data = ssl_data; + } + ssl_data->recv = recv_cb; + ssl_data->send = send_cb; + return 0; +} +#endif // SSL_COMPATIBLE_INTERFACE + + +#ifdef TLS_SRTP + +struct SRTPContext { + symmetric_CTR aes; + unsigned int salt[4]; + unsigned char mac[TLS_SHA1_MAC_SIZE]; + + symmetric_CTR rtcp_aes; + unsigned int rtcp_salt[4]; + unsigned char rtcp_mac[TLS_SHA1_MAC_SIZE]; + + unsigned int tag_size; + unsigned int roc; + unsigned short seq; + + unsigned char mode; + unsigned char auth_mode; +}; + +struct SRTPContext *srtp_init(unsigned char mode, unsigned char auth_mode) { + struct SRTPContext *context = NULL; + tls_init(); + switch (mode) { + case SRTP_NULL: + break; + case SRTP_AES_CM: + break; + default: + return NULL; + } + + switch (auth_mode) { + case SRTP_AUTH_NULL: + break; + case SRTP_AUTH_HMAC_SHA1: + break; + default: + return NULL; + } + context = (struct SRTPContext *)TLS_MALLOC(sizeof(struct SRTPContext)); + if (context) { + memset(context, 0, sizeof(struct SRTPContext)); + context->mode = mode; + context->auth_mode = auth_mode; + } + return context; +} + +static int _private_tls_srtp_key_derive(const void *key, int keylen, const void *salt, unsigned char label, void *out, int outlen) { + unsigned char iv[16]; + memcpy(iv, salt, 14); + iv[14] = iv[15] = 0; + void *in = TLS_MALLOC(outlen); + if (!in) + return TLS_GENERIC_ERROR; + memset(in, 0, outlen); + + iv[7] ^= label; + + symmetric_CTR aes; + + if (ctr_start(find_cipher("aes"), iv, (const unsigned char *)key, keylen, 0, CTR_COUNTER_BIG_ENDIAN, &aes)) + return TLS_GENERIC_ERROR; + + ctr_encrypt((unsigned char *)in, (unsigned char *)out, outlen, &aes); + TLS_FREE(in); + ctr_done(&aes); + return 0; +} + +int srtp_key(struct SRTPContext *context, const void *key, int keylen, const void *salt, int saltlen, int tag_bits) { + if (!context) + return TLS_GENERIC_ERROR; + if (context->mode == SRTP_AES_CM) { + if ((saltlen < 14) || (keylen < 16)) + return TLS_GENERIC_ERROR; + // key + unsigned char key_buf[16]; + unsigned char iv[16]; + + memset(iv, 0, sizeof(iv)); + + if (_private_tls_srtp_key_derive(key, keylen, salt, 0, key_buf, sizeof(key_buf))) + return TLS_GENERIC_ERROR; + + DEBUG_DUMP_HEX_LABEL("KEY", key_buf, 16) + + if (_private_tls_srtp_key_derive(key, keylen, salt, 1, context->mac, sizeof(context->mac))) + return TLS_GENERIC_ERROR; + + DEBUG_DUMP_HEX_LABEL("AUTH", context->mac, sizeof(context->mac)) + + memset(context->salt, 0, sizeof(context->salt)); + if (_private_tls_srtp_key_derive(key, keylen, salt, 2, context->salt, 14)) + return TLS_GENERIC_ERROR; + + DEBUG_DUMP_HEX_LABEL("SALT", ((unsigned char *)context->salt), 14) + + if (ctr_start(find_cipher("aes"), iv, key_buf, sizeof(key_buf), 0, CTR_COUNTER_BIG_ENDIAN, &context->aes)) + return TLS_GENERIC_ERROR; + + if (_private_tls_srtp_key_derive(key, keylen, salt, 3, key_buf, sizeof(key_buf))) + return TLS_GENERIC_ERROR; + + DEBUG_DUMP_HEX_LABEL("RTCP KEY", key_buf, 16) + + if (_private_tls_srtp_key_derive(key, keylen, salt, 4, context->rtcp_mac, sizeof(context->rtcp_mac))) + return TLS_GENERIC_ERROR; + + DEBUG_DUMP_HEX_LABEL("RTCP AUTH", context->rtcp_mac, sizeof(context->rtcp_mac)) + + memset(context->rtcp_salt, 0, sizeof(context->rtcp_salt)); + if (_private_tls_srtp_key_derive(key, keylen, salt, 5, context->rtcp_salt, 14)) + return TLS_GENERIC_ERROR; + + DEBUG_DUMP_HEX_LABEL("RTCP SALT", ((unsigned char *)context->rtcp_salt), 14) + + memset(iv, 0, sizeof(iv)); + + if (ctr_start(find_cipher("aes"), iv, key_buf, sizeof(key_buf), 0, CTR_COUNTER_BIG_ENDIAN, &context->rtcp_aes)) + return TLS_GENERIC_ERROR; + } + if (context->auth_mode) + context->tag_size = tag_bits / 8; + return 0; +} + +int srtp_inline(struct SRTPContext *context, const char *b64, int tag_bits) { + char out_buffer[1024]; + + if (!b64) + return TLS_GENERIC_ERROR; + + int len = strlen(b64); + if (len >= sizeof(out_buffer)) + len = sizeof(out_buffer); + int size = _private_b64_decode(b64, len, (unsigned char *)out_buffer); + if (size <= 0) + return TLS_GENERIC_ERROR; + switch (context->mode) { + case SRTP_AES_CM: + if (size < 30) + return TLS_BROKEN_PACKET; + return srtp_key(context, out_buffer, 16, out_buffer + 16, 14, tag_bits); + } + return TLS_GENERIC_ERROR; +} + +int srtp_encrypt(struct SRTPContext *context, unsigned char rtcp, const unsigned char *pt_header, int pt_len, const unsigned char *payload, unsigned int payload_len, unsigned char *out, int *out_buffer_len) { + if ((!context) || (!out) || (!out_buffer_len) || (*out_buffer_len < payload_len)) + return TLS_GENERIC_ERROR; + + int out_len = payload_len; + + unsigned short seq = 0; + unsigned int roc = context->roc; + unsigned int ssrc = 0; + + if ((pt_header) && (pt_len >= 12)) { + seq = ntohs(*((unsigned short *)&pt_header[2])); + ssrc = ntohl(*((unsigned long *)&pt_header[8])); + } + + if (seq < context->seq) + roc++; + + unsigned int roc_be = htonl(roc); + if (context->mode) { + if (*out_buffer_len < out_len) + return TLS_NO_MEMORY; + + unsigned int counter[4]; + counter[0] = context->salt[0]; + counter[1] = context->salt[1] ^ htonl (ssrc); + counter[2] = context->salt[2] ^ roc_be; + counter[3] = context->salt[3] ^ htonl (seq << 16); + if (rtcp) { + ctr_setiv((unsigned char *)&counter, 16, &context->rtcp_aes); + if (ctr_encrypt(payload, out, payload_len, &context->rtcp_aes)) + return TLS_GENERIC_ERROR; + } else { + ctr_setiv((unsigned char *)&counter, 16, &context->aes); + if (ctr_encrypt(payload, out, payload_len, &context->aes)) + return TLS_GENERIC_ERROR; + } + } else { + memcpy(out, payload, payload_len); + } + + *out_buffer_len = out_len; + + if (context->auth_mode == SRTP_AUTH_HMAC_SHA1) { + unsigned char digest_out[TLS_SHA1_MAC_SIZE]; + unsigned long dlen = TLS_SHA1_MAC_SIZE; + hmac_state hmac; + int err; + if (rtcp) + err = hmac_init(&hmac, find_hash("sha1"), context->rtcp_mac, 20); + else + err = hmac_init(&hmac, find_hash("sha1"), context->mac, 20); + if (!err) { + if (pt_len) + err = hmac_process(&hmac, pt_header, pt_len); + if (out_len) + err = hmac_process(&hmac, out, payload_len); + err = hmac_process(&hmac, (unsigned char *)&roc_be, 4); + if (!err) + err = hmac_done(&hmac, digest_out, &dlen); + } + if (err) + return TLS_GENERIC_ERROR; + if (dlen > context->tag_size) + dlen = context->tag_size; + + *out_buffer_len += dlen; + memcpy(out + out_len, digest_out, dlen); + } + context->roc = roc; + context->seq = seq; + return 0; +} + +int srtp_decrypt(struct SRTPContext *context, unsigned char rtcp, const unsigned char *pt_header, int pt_len, const unsigned char *payload, unsigned int payload_len, unsigned char *out, int *out_buffer_len) { + if ((!context) || (!out) || (!out_buffer_len) || (*out_buffer_len < payload_len) || (payload_len < context->tag_size) || (!pt_header) || ((pt_len < 12) && (!rtcp)) || ((pt_len < 8) && (rtcp))) + return TLS_GENERIC_ERROR; + + int out_len = payload_len; + + unsigned short seq = ntohs(*((unsigned short *)&pt_header[2])); + unsigned int roc = context->roc; + unsigned int ssrc = rtcp ? ntohl(*((unsigned long *)&pt_header[4])) : ntohl(*((unsigned long *)&pt_header[8])); + + if (seq < context->seq) + roc++; + + unsigned int roc_be = htonl(roc); + if (context->mode) { + unsigned int counter[4]; + counter[0] = context->salt[0]; + counter[1] = context->salt[1] ^ htonl (ssrc); + counter[2] = context->salt[2] ^ roc_be; + if (rtcp) { + uint32_t srtcp_index = ntohl(*(uint32_t *)&payload[payload_len - context->tag_size - 4]) & 0x7FFFFFFF; + counter[3] = context->salt[3] ^ htonl (srtcp_index); + // ((unsigned cscrhar *)payload)[payload_len - context->tag_size - 4] &= 0x7F; + // DEBUG_DUMP_HEX_LABEL("MODIFIED PACKET", payload, payload_len); + ctr_setiv((unsigned char *)&counter, 16, &context->rtcp_aes); + if (payload_len - context->tag_size - 4 < 0) + return TLS_GENERIC_ERROR; + if (ctr_decrypt(payload, out, payload_len - context->tag_size - 4, &context->rtcp_aes)) + return TLS_GENERIC_ERROR; + } else { + counter[3] = context->salt[3] ^ htonl (seq << 16); + ctr_setiv((unsigned char *)&counter, 16, &context->aes); + if (ctr_decrypt(payload, out, payload_len - context->tag_size, &context->aes)) + return TLS_GENERIC_ERROR; + } + + if (context->auth_mode == SRTP_AUTH_HMAC_SHA1) { + unsigned char digest_out[TLS_SHA1_MAC_SIZE]; + unsigned long dlen = TLS_SHA1_MAC_SIZE; + hmac_state hmac; + int err; + if (rtcp) + err = hmac_init(&hmac, find_hash("sha1"), context->rtcp_mac, sizeof(context->rtcp_mac)); + else + err = hmac_init(&hmac, find_hash("sha1"), context->mac, sizeof(context->mac)); + if (!err) { + if (pt_len) + err = hmac_process(&hmac, pt_header, pt_len); + if ((payload_len - context->tag_size) > 0) + err = hmac_process(&hmac, payload, payload_len - context->tag_size); + err = hmac_process(&hmac, (unsigned char *)&roc_be, 4); + if (!err) + err = hmac_done(&hmac, digest_out, &dlen); + } + if (err) + return TLS_GENERIC_ERROR; + if (dlen > context->tag_size) + dlen = context->tag_size; + + if (memcmp(digest_out, payload + payload_len - context->tag_size, dlen)) { + DEBUG_DUMP_HEX_LABEL("SRTP INTEGRITY FAILED (computed)", digest_out, dlen); + DEBUG_DUMP_HEX_LABEL("SRTP INTEGRITY FAILED (expected)", payload + payload_len - context->tag_size, dlen); + return TLS_INTEGRITY_FAILED; + } + } + } else { + memcpy(out, payload, payload_len - context->tag_size); + } + context->seq = seq; + context->roc = roc; + *out_buffer_len = payload_len - context->tag_size; + return 0; +} + +void srtp_destroy(struct SRTPContext *context) { + if (context) { + if (context->mode) { + ctr_done(&context->aes); + ctr_done(&context->rtcp_aes); + } + + TLS_FREE(context); + } +} + +struct SRTPContext *tls_peerconnection_srtp_local(struct TLSRTCPeerConnection *channel) { + if (!channel) + return NULL; + + return channel->srtp_local; +} + +struct SRTPContext *tls_peerconnection_srtp_remote(struct TLSRTCPeerConnection *channel) { + if (!channel) + return NULL; + + return channel->srtp_remote; +} + +int tls_peerconnection_encrypt(struct TLSRTCPeerConnection *channel, unsigned char rtcp, const unsigned char *pt_header, int pt_len, const unsigned char *payload, unsigned int payload_len, unsigned char *out, int *out_buffer_len) { + return srtp_encrypt(channel->srtp_local, rtcp, pt_header, pt_len, payload, payload_len, out, out_buffer_len); +} + +int tls_peerconnection_decrypt(struct TLSRTCPeerConnection *channel, unsigned char rtcp, const unsigned char *pt_header, int pt_len, const unsigned char *payload, unsigned int payload_len, unsigned char *out, int *out_buffer_len) { + return srtp_decrypt(channel->srtp_remote, rtcp, pt_header, pt_len, payload, payload_len, out, out_buffer_len); +} + +#endif // TLS_SRTP + +#endif // TLSE_C + +int main(){} diff --git a/src/tlse/tlse.h b/src/tlse/tlse.h new file mode 100644 index 0000000..8ceaf03 --- /dev/null +++ b/src/tlse/tlse.h @@ -0,0 +1,472 @@ +#ifndef TLSE_H +#define TLSE_H + +// #define DEBUG + +// define TLS_LEGACY_SUPPORT to support TLS 1.1/1.0 (legacy) +// legacy support it will use an additional 272 bytes / context +#ifndef NO_TLS_LEGACY_SUPPORT +#define TLS_LEGACY_SUPPORT +#endif +// SSL_* style blocking APIs +#ifndef NO_SSL_COMPATIBLE_INTERFACE +#define SSL_COMPATIBLE_INTERFACE +#endif +// support ChaCha20/Poly1305 +#if !defined(__BIG_ENDIAN__) && ((!defined(__BYTE_ORDER)) || (__BYTE_ORDER == __LITTLE_ENDIAN)) + // not working on big endian machines + #ifndef NO_TLS_WITH_CHACHA20_POLY1305 + #define TLS_WITH_CHACHA20_POLY1305 + #endif +#endif +#ifndef NO_TLS_13 +#define WITH_TLS_13 +#endif +// support forward secrecy (Diffie-Hellman ephemeral) +#ifndef NO_TLS_FORWARD_SECRECY +#define TLS_FORWARD_SECRECY +#endif +// support client-side ECDHE +#ifndef NO_TLS_CLIENT_ECDHE +#define TLS_CLIENT_ECDHE +#endif +// suport ecdsa +#ifndef NO_TLS_ECDSA_SUPPORTED +#define TLS_ECDSA_SUPPORTED +#endif +// suport ecdsa client-side +#define TLS_CLIENT_ECDSA +// TLS renegotiation is disabled by default (secured or not) +// do not uncomment next line! +// #define TLS_ACCEPT_SECURE_RENEGOTIATION +// basic superficial X509v1 certificate support +#ifndef NO_TLS_X509_V1_SUPPORT +#define TLS_X509_V1_SUPPORT +#endif + +// disable TLS_RSA_WITH_* ciphers +#ifndef NO_TLS_ROBOT_MITIGATION +#define TLS_ROBOT_MITIGATION +#endif + +#define SSL_V30 0x0300 +#define TLS_V10 0x0301 +#define TLS_V11 0x0302 +#define TLS_V12 0x0303 +#define TLS_V13 0x0304 +#define DTLS_V10 0xFEFF +#define DTLS_V12 0xFEFD +#define DTLS_V13 0xFEFC + +#define TLS_NEED_MORE_DATA 0 +#define TLS_GENERIC_ERROR -1 +#define TLS_BROKEN_PACKET -2 +#define TLS_NOT_UNDERSTOOD -3 +#define TLS_NOT_SAFE -4 +#define TLS_NO_COMMON_CIPHER -5 +#define TLS_UNEXPECTED_MESSAGE -6 +#define TLS_CLOSE_CONNECTION -7 +#define TLS_COMPRESSION_NOT_SUPPORTED -8 +#define TLS_NO_MEMORY -9 +#define TLS_NOT_VERIFIED -10 +#define TLS_INTEGRITY_FAILED -11 +#define TLS_ERROR_ALERT -12 +#define TLS_BROKEN_CONNECTION -13 +#define TLS_BAD_CERTIFICATE -14 +#define TLS_UNSUPPORTED_CERTIFICATE -15 +#define TLS_NO_RENEGOTIATION -16 +#define TLS_FEATURE_NOT_SUPPORTED -17 +#define TLS_DECRYPTION_FAILED -20 + +#define TLS_AES_128_GCM_SHA256 0x1301 +#define TLS_AES_256_GCM_SHA384 0x1302 +#define TLS_CHACHA20_POLY1305_SHA256 0x1303 +#define TLS_AES_128_CCM_SHA256 0x1304 +#define TLS_AES_128_CCM_8_SHA256 0x1305 + +#define TLS_RSA_WITH_AES_128_CBC_SHA 0x002F +#define TLS_RSA_WITH_AES_256_CBC_SHA 0x0035 +#define TLS_RSA_WITH_AES_128_CBC_SHA256 0x003C +#define TLS_RSA_WITH_AES_256_CBC_SHA256 0x003D +#define TLS_RSA_WITH_AES_128_GCM_SHA256 0x009C +#define TLS_RSA_WITH_AES_256_GCM_SHA384 0x009D + +// forward secrecy +#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA 0x0033 +#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x0039 +#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 0x0067 +#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 0x006B +#define TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 0x009E +#define TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 0x009F + +#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 0xC013 +#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 0xC014 +#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0xC027 +#define TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0xC02F +#define TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0xC030 + +#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0xC009 +#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0xC00A +#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 0xC023 +#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 0xC024 +#define TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0xC02B +#define TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0xC02C + +#define TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 0xCCA8 +#define TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 0xCCA9 +#define TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 0xCCAA + +#define TLS_FALLBACK_SCSV 0x5600 + +#define TLS_UNSUPPORTED_ALGORITHM 0x00 +#define TLS_RSA_SIGN_RSA 0x01 +#define TLS_RSA_SIGN_MD5 0x04 +#define TLS_RSA_SIGN_SHA1 0x05 +#define TLS_RSA_SIGN_SHA256 0x0B +#define TLS_RSA_SIGN_SHA384 0x0C +#define TLS_RSA_SIGN_SHA512 0x0D +#define TLS_ECDSA_SIGN_SHA256 0x0E + +#define TLS_EC_PUBLIC_KEY 0x11 +#define TLS_EC_prime192v1 0x12 +#define TLS_EC_prime192v2 0x13 +#define TLS_EC_prime192v3 0x14 +#define TLS_EC_prime239v1 0x15 +#define TLS_EC_prime239v2 0x16 +#define TLS_EC_prime239v3 0x17 +#define TLS_EC_prime256v1 0x18 +#define TLS_EC_secp224r1 21 +#define TLS_EC_secp256r1 23 +#define TLS_EC_secp384r1 24 +#define TLS_EC_secp521r1 25 + +#define TLS_ALERT_WARNING 0x01 +#define TLS_ALERT_CRITICAL 0x02 + +#ifdef TLS_ROBOT_MITIGATION + #define TLS_CIPHERS_SIZE(n, mitigated) n * 2 +#else + #define TLS_CIPHERS_SIZE(n, mitigated) (n + mitigated) * 2 +#endif + +#define SRTP_AES128_CM_HMAC_SHA1_80 0x0001 +#define SRTP_AES128_CM_HMAC_SHA1_32 0x0002 +#define SRTP_NULL_HMAC_SHA1_80 0x0005 +#define SRTP_NULL_HMAC_SHA1_32 0x0006 +#define SRTP_AEAD_AES_128_GCM 0x0007 +#define SRTP_AEAD_AES_256_GCM 0x0008 + +#define SRTP_NULL 0 +#define SRTP_AES_CM 1 +#define SRTP_AUTH_NULL 0 +#define SRTP_AUTH_HMAC_SHA1 1 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + close_notify = 0, + unexpected_message = 10, + bad_record_mac = 20, + decryption_failed_RESERVED = 21, + record_overflow = 22, + decompression_failure = 30, + handshake_failure = 40, + no_certificate_RESERVED = 41, + bad_certificate = 42, + unsupported_certificate = 43, + certificate_revoked = 44, + certificate_expired = 45, + certificate_unknown = 46, + illegal_parameter = 47, + unknown_ca = 48, + access_denied = 49, + decode_error = 50, + decrypt_error = 51, + export_restriction_RESERVED = 60, + protocol_version = 70, + insufficient_security = 71, + internal_error = 80, + inappropriate_fallback = 86, + user_canceled = 90, + no_renegotiation = 100, + unsupported_extension = 110, + no_error = 255 +} TLSAlertDescription; + +// forward declarations +struct TLSPacket; +struct TLSCertificate; +struct TLSContext; +struct ECCCurveParameters; +typedef struct TLSContext TLS; +typedef struct TLSCertificate Certificate; +// webrtc datachannel +struct TLSRTCPeerConnection; + +typedef int (*tls_validation_function)(struct TLSContext *context, struct TLSCertificate **certificate_chain, int len); + +/* + Global initialization. Optional, as it will be called automatically; + however, the initialization is not thread-safe, so if you intend to use TLSe + from multiple threads, you'll need to call tls_init() once, from a single thread, + before using the library. + */ +void tls_init(); +unsigned char *tls_pem_decode(const unsigned char *data_in, unsigned int input_length, int cert_index, unsigned int *output_len); +struct TLSCertificate *tls_create_certificate(); +int tls_certificate_valid_subject(struct TLSCertificate *cert, const char *subject); +int tls_certificate_valid_subject_name(const unsigned char *cert_subject, const char *subject); +int tls_certificate_is_valid(struct TLSCertificate *cert); +void tls_certificate_set_copy(unsigned char **member, const unsigned char *val, int len); +void tls_certificate_set_copy_date(unsigned char **member, const unsigned char *val, int len); +void tls_certificate_set_key(struct TLSCertificate *cert, const unsigned char *val, int len); +void tls_certificate_set_priv(struct TLSCertificate *cert, const unsigned char *val, int len); +void tls_certificate_set_sign_key(struct TLSCertificate *cert, const unsigned char *val, int len); +char *tls_certificate_to_string(struct TLSCertificate *cert, char *buffer, int len); +void tls_certificate_set_exponent(struct TLSCertificate *cert, const unsigned char *val, int len); +void tls_certificate_set_serial(struct TLSCertificate *cert, const unsigned char *val, int len); +void tls_certificate_set_algorithm(struct TLSContext *context, unsigned int *algorithm, const unsigned char *val, int len); +void tls_destroy_certificate(struct TLSCertificate *cert); +struct TLSPacket *tls_create_packet(struct TLSContext *context, unsigned char type, unsigned short version, int payload_size_hint); +void tls_destroy_packet(struct TLSPacket *packet); +void tls_packet_update(struct TLSPacket *packet); +int tls_packet_append(struct TLSPacket *packet, const unsigned char *buf, unsigned int len); +int tls_packet_uint8(struct TLSPacket *packet, unsigned char i); +int tls_packet_uint16(struct TLSPacket *packet, unsigned short i); +int tls_packet_uint32(struct TLSPacket *packet, unsigned int i); +int tls_packet_uint24(struct TLSPacket *packet, unsigned int i); +int tls_random(unsigned char *key, int len); + +/* + Get encrypted data to write, if any. Once you've sent all of it, call + tls_buffer_clear(). + */ +const unsigned char *tls_get_write_buffer(struct TLSContext *context, unsigned int *outlen); + +void tls_buffer_clear(struct TLSContext *context); + +/* Returns 1 for established, 0 for not established yet, and -1 for a critical error. */ +int tls_established(struct TLSContext *context); + +/* Discards any unread decrypted data not consumed by tls_read(). */ +void tls_read_clear(struct TLSContext *context); + +/* + Reads any unread decrypted data (see tls_consume_stream). If you don't read all of it, + the remainder will be left in the internal buffers for next tls_read(). Returns -1 for + fatal error, 0 for no more data, or otherwise the number of bytes copied into the buffer + (up to a maximum of the given size). + */ +int tls_read(struct TLSContext *context, unsigned char *buf, unsigned int size); + +struct TLSContext *tls_create_context(unsigned char is_server, unsigned short version); +const struct ECCCurveParameters *tls_set_curve(struct TLSContext *context, const struct ECCCurveParameters *curve); + +/* Create a context for a given client, from a server context. Returns NULL on error. */ +struct TLSContext *tls_accept(struct TLSContext *context); + +int tls_set_default_dhe_pg(struct TLSContext *context, const char *p_hex_str, const char *g_hex_str); +void tls_destroy_context(struct TLSContext *context); +int tls_cipher_supported(struct TLSContext *context, unsigned short cipher); +int tls_cipher_is_fs(struct TLSContext *context, unsigned short cipher); +int tls_choose_cipher(struct TLSContext *context, const unsigned char *buf, int buf_len, int *scsv_set); +int tls_cipher_is_ephemeral(struct TLSContext *context); +const char *tls_cipher_name(struct TLSContext *context); +int tls_is_ecdsa(struct TLSContext *context); +struct TLSPacket *tls_build_client_key_exchange(struct TLSContext *context); +struct TLSPacket *tls_build_server_key_exchange(struct TLSContext *context, int method); +struct TLSPacket *tls_build_hello(struct TLSContext *context, int tls13_downgrade); +struct TLSPacket *tls_certificate_request(struct TLSContext *context); +struct TLSPacket *tls_build_verify_request(struct TLSContext *context); +int tls_parse_hello(struct TLSContext *context, const unsigned char *buf, int buf_len, unsigned int *write_packets, unsigned int *dtls_verified); +int tls_parse_certificate(struct TLSContext *context, const unsigned char *buf, int buf_len, int is_client); +int tls_parse_server_key_exchange(struct TLSContext *context, const unsigned char *buf, int buf_len); +int tls_parse_client_key_exchange(struct TLSContext *context, const unsigned char *buf, int buf_len); +int tls_parse_server_hello_done(struct TLSContext *context, const unsigned char *buf, int buf_len); +int tls_parse_finished(struct TLSContext *context, const unsigned char *buf, int buf_len, unsigned int *write_packets); +int tls_parse_verify(struct TLSContext *context, const unsigned char *buf, int buf_len); +int tls_parse_payload(struct TLSContext *context, const unsigned char *buf, int buf_len, tls_validation_function certificate_verify); +int tls_parse_message(struct TLSContext *context, unsigned char *buf, int buf_len, tls_validation_function certificate_verify); +int tls_certificate_verify_signature(struct TLSCertificate *cert, struct TLSCertificate *parent); +int tls_certificate_chain_is_valid(struct TLSCertificate **certificates, int len); +int tls_certificate_chain_is_valid_root(struct TLSContext *context, struct TLSCertificate **certificates, int len); + +/* + Add a certificate or a certificate chain to the given context, in PEM form. + Returns a negative value (TLS_GENERIC_ERROR etc.) on error, 0 if there were no + certificates in the buffer, or the number of loaded certificates on success. + */ +int tls_load_certificates(struct TLSContext *context, const unsigned char *pem_buffer, int pem_size); + +/* + Add a private key to the given context, in PEM form. Returns a negative value + (TLS_GENERIC_ERROR etc.) on error, 0 if there was no private key in the + buffer, or 1 on success. + */ +int tls_load_private_key(struct TLSContext *context, const unsigned char *pem_buffer, int pem_size); +struct TLSPacket *tls_build_certificate(struct TLSContext *context); +struct TLSPacket *tls_build_finished(struct TLSContext *context); +struct TLSPacket *tls_build_change_cipher_spec(struct TLSContext *context); +struct TLSPacket *tls_build_done(struct TLSContext *context); +struct TLSPacket *tls_build_message(struct TLSContext *context, const unsigned char *data, unsigned int len); +int tls_client_connect(struct TLSContext *context); +int tls_write(struct TLSContext *context, const unsigned char *data, unsigned int len); +struct TLSPacket *tls_build_alert(struct TLSContext *context, char critical, unsigned char code); +int tls_connection_status(struct TLSContext *context); + +/* + Process a given number of input bytes from a socket. If the other side just + presented a certificate and certificate_verify is not NULL, it will be called. + + Returns 0 if there's no data ready yet, a negative value (see + TLS_GENERIC_ERROR etc.) for an error, or a positive value (the number of bytes + used from buf) if one or more complete TLS messages were received. The data + is copied into an internal buffer even if not all of it was consumed, + so you should not re-send it the next time. + + Decrypted data, if any, should be read back with tls_read(). Can change the + status of tls_established(). If the library has anything to send back on the + socket (e.g. as part of the handshake), tls_get_write_buffer() will return + non-NULL. + */ +int tls_consume_stream(struct TLSContext *context, const unsigned char *buf, int buf_len, tls_validation_function certificate_verify); +void tls_close_notify(struct TLSContext *context); +void tls_alert(struct TLSContext *context, unsigned char critical, int code); + +/* Whether tls_consume_stream() has data in its buffer that is not processed yet. */ +int tls_pending(struct TLSContext *context); + +/* + Set the context as serializable or not. Must be called before negotiation. + Exportable contexts use a bit more memory, to be able to hold the keys. + + Note that imported keys are not reexportable unless TLS_REEXPORTABLE is set. + */ +void tls_make_exportable(struct TLSContext *context, unsigned char exportable_flag); + +int tls_export_context(struct TLSContext *context, unsigned char *buffer, unsigned int buf_len, unsigned char small_version); +struct TLSContext *tls_import_context(const unsigned char *buffer, unsigned int buf_len); +int tls_is_broken(struct TLSContext *context); +int tls_request_client_certificate(struct TLSContext *context); +int tls_client_verified(struct TLSContext *context); +const char *tls_sni(struct TLSContext *context); +int tls_sni_set(struct TLSContext *context, const char *sni); +int tls_sni_nset(struct TLSContext *context, const char *sni, unsigned int len); +// set DTLS-SRTP mode for DTLS context +int tls_srtp_set(struct TLSContext *context); +int tls_srtp_key(struct TLSContext *context, unsigned char *buffer); + +int tls_stun_parse(unsigned char *msg, int len, char *pwd, int pwd_len, unsigned char is_ipv6, unsigned char *addr, unsigned int port, unsigned char *response_buffer); +int tls_stun_build(unsigned char transaction_id[12], char *username, int username_len, char *pwd, int pwd_len, unsigned char *msg); +int tls_is_stun(const unsigned char *msg, int len); + +typedef int (*tls_peerconnection_write_function)(struct TLSRTCPeerConnection *channel, const unsigned char *msg, int msg_len); + +struct TLSRTCPeerConnection *tls_peerconnection_context(unsigned char active, tls_validation_function certificate_verify, void *userdata); +struct TLSRTCPeerConnection *tls_peerconnection_duplicate(struct TLSRTCPeerConnection *channel, void *userdata); +struct TLSContext *tls_peerconnection_dtls_context(struct TLSRTCPeerConnection *channel); +int tls_peerconnection_remote_credentials(struct TLSRTCPeerConnection *channel, char *remote_username, int remote_username_len, char *remote_pwd, int remote_pwd_len, char *remote_fingerprint, int remote_fingerprint_len); +const char *tls_peerconnection_local_pwd(struct TLSRTCPeerConnection *channel); +const char *tls_peerconnection_local_username(struct TLSRTCPeerConnection *channel); +void *tls_peerconnection_userdata(struct TLSRTCPeerConnection *channel); +int tls_peerconnection_load_keys(struct TLSRTCPeerConnection *channel, const unsigned char *pem_pub_key, int pem_pub_key_size, const unsigned char *pem_priv_key, int pem_priv_key_size); +int tls_peerconnection_connect(struct TLSRTCPeerConnection *channel, tls_peerconnection_write_function write_function); +int tls_peerconnection_iterate(struct TLSRTCPeerConnection *channel, unsigned char *buf, int buf_len, unsigned char *addr, int port, unsigned char is_ipv6, tls_peerconnection_write_function write_function, int *validate_addr); +int tls_peerconnection_get_write_msg(struct TLSRTCPeerConnection *channel, unsigned char *buf); +int tls_peerconnection_get_read_msg(struct TLSRTCPeerConnection *channel, unsigned char *buf); +int tls_peerconnection_status(struct TLSRTCPeerConnection *channel); +void tls_destroy_peerconnection(struct TLSRTCPeerConnection *channel); + +int tls_cert_fingerprint(const char *pem_data, int len, char *buffer, unsigned int buf_len); +int tls_load_root_certificates(struct TLSContext *context, const unsigned char *pem_buffer, int pem_size); +int tls_default_verify(struct TLSContext *context, struct TLSCertificate **certificate_chain, int len); +void tls_print_certificate(const char *fname); +int tls_add_alpn(struct TLSContext *context, const char *alpn); +int tls_alpn_contains(struct TLSContext *context, const char *alpn, unsigned char alpn_size); +const char *tls_alpn(struct TLSContext *context); +// useful when renewing certificates for servers, without the need to restart the server +int tls_clear_certificates(struct TLSContext *context); +int tls_make_ktls(struct TLSContext *context, int socket); +int tls_unmake_ktls(struct TLSContext *context, int socket); +/* + Creates a new DTLS random cookie secret to be used in HelloVerifyRequest (server-side). + It is recommended to call this function from time to time, to protect against some + DoS attacks. +*/ +void dtls_reset_cookie_secret(); + +int tls_remote_error(struct TLSContext *context); + +#ifdef SSL_COMPATIBLE_INTERFACE + #define SSL_SERVER_RSA_CERT 1 + #define SSL_SERVER_RSA_KEY 2 + typedef struct TLSContext SSL_CTX; + typedef struct TLSContext SSL; + + #define SSL_FILETYPE_PEM 1 + #define SSL_VERIFY_NONE 0 + #define SSL_VERIFY_PEER 1 + #define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 2 + #define SSL_VERIFY_CLIENT_ONCE 3 + + typedef struct { + int fd; + tls_validation_function certificate_verify; + void *recv; + void *send; + void *user_data; + } SSLUserData; + + int SSL_library_init(); + void SSL_load_error_strings(); + void OpenSSL_add_all_algorithms(); + void OpenSSL_add_all_ciphers(); + void OpenSSL_add_all_digests(); + void EVP_cleanup(); + + int SSLv3_server_method(); + int SSLv3_client_method(); + struct TLSContext *SSL_new(struct TLSContext *context); + int SSL_CTX_use_certificate_file(struct TLSContext *context, const char *filename, int dummy); + int SSL_CTX_use_PrivateKey_file(struct TLSContext *context, const char *filename, int dummy); + int SSL_CTX_check_private_key(struct TLSContext *context); + struct TLSContext *SSL_CTX_new(int method); + void SSL_free(struct TLSContext *context); + void SSL_CTX_free(struct TLSContext *context); + int SSL_get_error(struct TLSContext *context, int ret); + int SSL_set_fd(struct TLSContext *context, int socket); + void *SSL_set_userdata(struct TLSContext *context, void *data); + void *SSL_userdata(struct TLSContext *context); + int SSL_CTX_root_ca(struct TLSContext *context, const char *pem_filename); + void SSL_CTX_set_verify(struct TLSContext *context, int mode, tls_validation_function verify_callback); + int SSL_accept(struct TLSContext *context); + int SSL_connect(struct TLSContext *context); + int SSL_shutdown(struct TLSContext *context); + int SSL_write(struct TLSContext *context, const void *buf, unsigned int len); + int SSL_read(struct TLSContext *context, void *buf, unsigned int len); + int SSL_pending(struct TLSContext *context); + int SSL_set_io(struct TLSContext *context, void *recv, void *send); +#endif + +#ifdef TLS_SRTP + struct SRTPContext; + struct SRTPContext *srtp_init(unsigned char mode, unsigned char auth_mode); + int srtp_key(struct SRTPContext *context, const void *key, int keylen, const void *salt, int saltlen, int tag_bits); + int srtp_inline(struct SRTPContext *context, const char *b64, int tag_bits); + int srtp_encrypt(struct SRTPContext *context, unsigned char rtcp, const unsigned char *pt_header, int pt_len, const unsigned char *payload, unsigned int payload_len, unsigned char *out, int *out_buffer_len); + int srtp_decrypt(struct SRTPContext *context, unsigned char rtcp, const unsigned char *pt_header, int pt_len, const unsigned char *payload, unsigned int payload_len, unsigned char *out, int *out_buffer_len); + void srtp_destroy(struct SRTPContext *context); + + struct SRTPContext *tls_peerconnection_srtp_local(struct TLSRTCPeerConnection *channel); + struct SRTPContext *tls_peerconnection_srtp_remote(struct TLSRTCPeerConnection *channel); + int tls_peerconnection_encrypt(struct TLSRTCPeerConnection *channel, unsigned char rtcp, const unsigned char *pt_header, int pt_len, const unsigned char *payload, unsigned int payload_len, unsigned char *out, int *out_buffer_len); + int tls_peerconnection_decrypt(struct TLSRTCPeerConnection *channel, unsigned char rtcp, const unsigned char *pt_header, int pt_len, const unsigned char *payload, unsigned int payload_len, unsigned char *out, int *out_buffer_len); +#endif + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif

T$}#JM#hq|vPIjsi`&iT_ggM}MNi?h>)iawa{nS3qOM!o-+9n6 zuV$UicHsaE89ns_@80R%$um!l7BIbfwR%akgvb#l5!X~7{s`q0^6|UAu+3JT=Q~Sf zWkdTSvMMuuk_rk0KKIK7>Rxf4*zILBZ-dI@PWMF` zwVr85id2LDzwljp>H7NE-xn6IP@S5W)OoaQ#>| z^t}ojxjA{+$CJ7Ke31{1Qk>pB`Q4t=PyeXQKKs}0bI;B09k-(V`L}kzcI$k-ewt6$ z{K=1m&d%L+gZ1HM^ZQk^ufKL(cp%8Qb?T+EH_zukShwzHmF=EY-{)IS;_&oRKNK`^ zb5CM~0k2f?J%+26TZ_V8Z?`$WdyPp*=+!5Sbb@}^O*nFh>uvsoBVT5}KIZ8)jrn}K z>IBU_iF1s<`PiQQah)f5*^8Nr?DNIAynO(M5e`tv+%-Xo_U-`{_4?gl= zR}|1vKD)?_fq_A_#5JNMC9x#cD!C{%u_Tqj$iT=z*T7QOz%0bj!phjx%Fs;Pz`)AD zVA^L3Llh0U`6-!cl?+A(hK9NZX1a#vA%;d)M&?$ArVtHE|B|#A7#J8lUHx3vIVCg! E0PwVL8~^|S literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/cdrom_unmount.png b/Media/Themes/Umami/Icon/devices/cdrom_unmount.png new file mode 100644 index 0000000000000000000000000000000000000000..8965f76c2ff13fe81320244853f0eddd315824d3 GIT binary patch literal 1507 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq~_zr;B5V$ML(UA?O`YEn4_4E<8qMtHK6AMz49y#`1Yx%cPfR!ic zk&D&bl}j#3eu!gq+bqgy5i!v_Bcf?|I?)*T7d6D|BbePdAZ>5KFKU7F@SeV>2W z+6@tsKK3&YPL^bSviWnxsw)gj+5sO9;$lysJ6f|_d(9*51XT0ShSZg zv^Vs-TTMOED}CK;R`jf>ZJZ{i@-z9|4=oUOmb;y3CY@lCVZPCNZiS6*yU(>wzDVnL zclWYR40lRMQ@9aY5V`e1j9G`H{n42huU>t5U(F%z1=?8Xf<#@SV0v zo9~yH@F3>tudlBUot z{l%fH<-udwgteOuR=+!xJkzDRn%m9IZCTv9y){2Sg>PENw?@^)LRad?UY#cII33-e z6TFr>xfPCTjwB@X=r+3;ry1*R48XNrD|s+;Z*nsumno3bj}s z@Ze8tV{aq(b1$#2F{)CJ59|yzn7ze7;){V)?}JLYJoE10yXxWFIk#*vk(I7Dh|?6~ zo_$=`Pbuhz|Lr)I!$k=;j0X2O-Z+WqDR!{BvCsZ08JgP`x4zwP`QqQ2O&2fDzgWL6 zf88^kEw$I9)>O?n|9s*?YqfoQcqEXz55Y#%FR!rRv^_?~nA$n15CW7Yjm{F1Yq<*+c|$g3*3&JeLA6Gm39dZ6%Ud>XjDGRXZsro1_X7EQXH}?w)ceTzQPR}Y?$6;5 z%UpNXFm9YG@MnKW@$S%57mW5(R644$k$wC7JL}{;OHNt6yMFcR+vPj< zM!UXSx3ya~TE9F$^kZgi?caNw)2nyRn|Jx>Dv7(_S2*o2eCG4rExvxfN9cZ^KZ1e& zd;acvvh~QSH%j+zZ_mH~yq!<>*8LkdDjqyI*vwn~?aj}E)7N&bEw%nXd41b`#%M-~ z5~laOM;RCxR7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1y zwlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E3skmxy85}Sb4q9e0G3yw ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/cdwriter_unmount.png b/Media/Themes/Umami/Icon/devices/cdwriter_unmount.png new file mode 100644 index 0000000000000000000000000000000000000000..8965f76c2ff13fe81320244853f0eddd315824d3 GIT binary patch literal 1507 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq zc&~#nqm#z$3I+xSwj^(N7X~o+>Abt1fq~_zr;B5V$ML(UA?O`YEn4_4E<8qMtHK6AMz49y#`1Yx%cPfR!ic zk&D&bl}j#3eu!gq+bqgy5i!v_Bcf?|I?)*T7d6D|BbePdAZ>5KFKU7F@SeV>2W z+6@tsKK3&YPL^bSviWnxsw)gj+5sO9;$lysJ6f|_d(9*51XT0ShSZg zv^Vs-TTMOED}CK;R`jf>ZJZ{i@-z9|4=oUOmb;y3CY@lCVZPCNZiS6*yU(>wzDVnL zclWYR40lRMQ@9aY5V`e1j9G`H{n42huU>t5U(F%z1=?8Xf<#@SV0v zo9~yH@F3>tudlBUot z{l%fH<-udwgteOuR=+!xJkzDRn%m9IZCTv9y){2Sg>PENw?@^)LRad?UY#cII33-e z6TFr>xfPCTjwB@X=r+3;ry1*R48XNrD|s+;Z*nsumno3bj}s z@Ze8tV{aq(b1$#2F{)CJ59|yzn7ze7;){V)?}JLYJoE10yXxWFIk#*vk(I7Dh|?6~ zo_$=`Pbuhz|Lr)I!$k=;j0X2O-Z+WqDR!{BvCsZ08JgP`x4zwP`QqQ2O&2fDzgWL6 zf88^kEw$I9)>O?n|9s*?YqfoQcqEXz55Y#%FR!rRv^_?~nA$n15CW7Yjm{F1Yq<*+c|$g3*3&JeLA6Gm39dZ6%Ud>XjDGRXZsro1_X7EQXH}?w)ceTzQPR}Y?$6;5 z%UpNXFm9YG@MnKW@$S%57mW5(R644$k$wC7JL}{;OHNt6yMFcR+vPj< zM!UXSx3ya~TE9F$^kZgi?caNw)2nyRn|Jx>Dv7(_S2*o2eCG4rExvxfN9cZ^KZ1e& zd;acvvh~QSH%j+zZ_mH~yq!<>*8LkdDjqyI*vwn~?aj}E)7N&bEw%nXd41b`#%M-~ z5~laOM;RCxR7+eVN>UO_QmvAUQWHy38H@~!40H`Fbq&ly3@xmTO|1;gv<(cb3=F1y zwlGA|kei>9nO4bQWMF8hYhb2pXdYr{WMyP-WoQb~p!6?E3skmxy85}Sb4q9e0G3yw ALjV8( literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/chardevice.png b/Media/Themes/Umami/Icon/devices/chardevice.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5ac83f7b903118b6234c0178f0bcd99c66c03a GIT binary patch literal 1119 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_Hl8kyAs)xCPC1*c5-M`E{{3FBS`{_h znVdTWeAI-MULEV@cqij1Q7Y*8!JmWedXx3RR_*Yc9G}@&Xr#>E+GK4yb7Ek6Qb7}2 z)3VDmORk4suf6UXUj9p2*~8(3)5m*zLrc%uK980AbN}!c^Vzd!zwbWbzDg>N>w*O5 z;SZO4dwahhaxCptj&Die$IT@eg2*zk8Yw!QqRZCS#1X_4=OCN}sc>I7HV`g8!8sw}4>XuJ7EZPoI8L={IXxGD~FJ zD)y}KGo+(&RSQO9UF`0YIL30^oEHwGA#P7##O$W)kiL`J-{M( z@X494cExfNyV$?;@7TD>X;zs=SJ4y&-^=$>qTQz}%FD9!)%Tnd?Who2Z|^JPo)X!& zwQP#Q`Ok9mHfLCz-OssI^d7g8XoAP)DXXG=wHOZHnezC_0$WC*<9!xIPj*faf1aGy z;4;O4N${Y=iOqA$cH6EzAo1hLWATr1#~$#WJY#Y#@=En4KP#5{eHH5^&LlLsacHgV zdRA!cH;E-(-G8$d>kC14N0UVf7PHQ(xdujL=URTM%gue;ylR!5$VBh>>wzM7@7=mp z^?eZ=j{&QS=cF@x|2}SQHsS5t+@E#n&#&&C|NUD7 zk4IzEy{89$FsL2SF$fR6`sUBopAVLlescQ!}R`{{807y^DA6S{MEJ z{cyW|&GyfwcjqwY@ZQ_&;mBjdc;-rWa$@4crP#`JRo>tC?+=>=%ee->z1tc-DK-5&c--_Pk3jEJ#tHn9fmg20xw^H+fVW@q#r5|2 z`%0pp&-=%EhxzitTlLcQ%vb+(rEAF0|P4qgK3{F3>g?05E^pxQ!>*k8H@}J4RsC7bPdfz42`Ue%&iPf zAsUqaC227*Fi3)I2+mI{DNig)WhgH%*UQYyE>2D?NY%?PN}v7CMv8%ffx*+&&t;uc GLK6TX>Ew3+ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/computer.png b/Media/Themes/Umami/Icon/devices/computer.png new file mode 100644 index 0000000000000000000000000000000000000000..2b73dada771072f676d2003ff47a1a52b327addb GIT binary patch literal 1215 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7}%1$-CY>| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_b39!fLp+Xeof?}F<0^8zKKCCT9lyHF{NvJIBGkcv|SFWw>BxTdWv?vINY@~Kwd{l(5bt_f6>;jx{LI4 z<(F=0dUDu&>aL~oh1qBBRhPeiBP(CVn`!n^O@yDvxcuFjpL2iC|Jm^WX3ExcCr_T# z=zDy~O~&$hmV3XPuN9M;nwno!_HkF0`w9+QuF1<-7CkxgsV@JiL-yNfcK*E?mqKRz z*M9q=;G+Y%4|Oq z({FZndl{6NI4%ioiR9+^Q<6FF=1j|9zpBDZFS7{iry!4T)H;#Hvdboq<%4eJX zbCzh|#?(RQ6@ZIgUN#Kz|BLYIfL1Oy9% z3=ZloHC1}To2~ET>l>@TfN6*#6;IN7dF%-vgA z+L3j&==%1vI!`~%=i%Xb^xJNG{yFj2k$;1ezcgN*q!U$ro}bq?X_x$~g^9Yxn=k*U zYgm!Wz;gSgH!+LXo$;VrTFEQT9!mfsJij@xR@lHCP=597970!6X0JE~jwguhZA#=iW89wT;cc z?P}t`ZH?jejdiy#RM*9S)0f&^;3{#VX)Xf;gKCLuL`h0wNvc(HQEFmIDua=Mk%6v( zrLKWlh@pj*v8k1znYMv}m4U&u&lZL#8glbfGSey| zgW!U_%O^81FmM)lL>4nJ@LmUDMkkHg6$}i_Hl8kyAs)xCPC1*c5-M`E{{3FBS`{_h znVdTWeAI-MULEV@cqij1Q7Y*8!JmWedXx3RR_*Yc9G}@&Xr#>E+GK4yb7Ek6Qb7}2 z)3VDmORk4suf6UXUj9p2*~8(3)5m*zLrc%uK980AbN}!c^Vzd!zwbWbzDg>N>w*O5 z;SZO4dwahhaxCptj&Die$IT@eg2*zk8Yw!QqRZCS#1X_4=OCN}sc>I7HV`g8!8sw}4>XuJ7EZPoI8L={IXxGD~FJ zD)y}KGo+(&RSQO9UF`0YIL30^oEHwGA#P7##O$W)kiL`J-{M( z@X494cExfNyV$?;@7TD>X;zs=SJ4y&-^=$>qTQz}%FD9!)%Tnd?Who2Z|^JPo)X!& zwQP#Q`Ok9mHfLCz-OssI^d7g8XoAP)DXXG=wHOZHnezC_0$WC*<9!xIPj*faf1aGy z;4;O4N${Y=iOqA$cH6EzAo1hLWATr1#~$#WJY#Y#@=En4KP#5{eHH5^&LlLsacHgV zdRA!cH;E-(-G8$d>kC14N0UVf7PHQ(xdujL=URTM%gue;ylR!5$VBh>>wzM7@7=mp z^?eZ=j{&QS=cF@x|2}SQHsS5t+@E#n&#&&C|NUD7 zk4IzEy{89$FsL2SF$fR6`sUBopAVLlescQ!}R`{{807y^DA6S{MEJ z{cyW|&GyfwcjqwY@ZQ_&;mBjdc;-rWa$@4crP#`JRo>tC?+=>=%ee->z1tc-DK-5&c--_Pk3jEJ#tHn9fmg20xw^H+fVW@q#r5|2 z`%0pp&-=%EhxzitTlLcQ%vb+(rEAF0|P4qgK3{F3>g?05E^pxQ!>*k8H@}J4RsC7bPdfz42`Ue%&iPf zAsUqaC227*Fi3)I2+mI{DNig)WhgH%*UQYyE>2D?NY%?PN}v7CMv8%ffx*+&&t;uc GLK6TX>Ew3+ literal 0 HcmV?d00001 diff --git a/Media/Themes/Umami/Icon/devices/drive-cdrom.png b/Media/Themes/Umami/Icon/devices/drive-cdrom.png new file mode 100644 index 0000000000000000000000000000000000000000..cbf6f96e655c00cc6c637ced7e3cc5d784d7ed0d GIT binary patch literal 1176 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4rT@hhU+WOo?>8NU`coMb!1@J*w6hZk(Ggg zK_S^A$d`ekN{xY`p@o6r7Xt%B!wUw6QUeBtR|yOZRx=nF#0%!^3bbKhVBjq9h%9Dc z;JpsQj7}P}D;O9Ue+2l1xH2Gtyn^h!g6!;^%+T=Q=$NRyg6z=nV2B``%+ATo%Fam3 zNJ&cvq4dlYh?cCZjI8X8BS#OHSCsDGzklu8HI-H6%a<>^aN$CBPUgWw2Xk_>PMkP# z`t<1s4<0;!{yaA?J2yWoFFz-*AiJO_uc$b`sJNiGw6MIgw7R;ox~8(WuDZUluA#BM zxwWCEx3jOmcgoaBQ>IOvI&I2~S<`0Co-up&%-M5i&Yd@V{(^bSS1etza{0QIIdI^>p+kp` z96562=;0$rj~qL8?8J!^Cr_R@dFteuGpEm-Idk^x*>mU4oj-r}{Dt!uE?l^L`SR7P zSFc^WcJ2C=8#k`szH{r&ojZ5$-o1D4-u?Uc9z1;T@ZrNpj~+dK{OIxH$B&;pe)9P7 zlP8a!JbC=&$&)8fpFDl?y#~WquV24@^XB!NH*em) zef#d+yZ7(ky?_7y!-o$aKYsl5>C@-WpFV&7{O#Mf@87@w`t|Gg@85s^{Q3L$@4tWl zy1TWz85kHeN`m}?85o&aB@N6i9bCe~(#x9rr_Y!(Z~n%u+wVVm^5*@A&p&_v`2*7O zZ|A{J{}~t<7?Zr+U8Zs*R5dd&Fs6IDIEHAPPfj?%T(RXMgTBig*XoB&l?n#+j4V1= z+B^zo`Odcx<^1Afn%p`g#eQ$?qbVmRt2?Ty`E7Z`=G}2rWLrsDdHMG*U%!0wpTWVx zS(Cu|_Sd0j)24m9HtpNCZ++jseOveLWrBAE?=t^&tJmkR$4q*Gn-4?;n4zcyn`cb9H%pH?G*SWzC+Lvy)7e(Im%^D#z0;