HeroBrine1st
Пользователи-
Публикации
134 -
Зарегистрирован
-
Посещение
-
Победитель дней
21
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя HeroBrine1st
-
Залил крупное обновление. Одно из изменений, которое может сломать ваши программы: В функции textEncrypt требуется не сама соль, а длина ее. По умолчанию 4, как и у функции textDecrypt, т.е. от второго аргумента смело избавляйтесь Но вроде-бы если сунуть туда вместо длины саму соль, оно длину соли посчитает и сунет за длину, так что программы должны работать нормально. Сменил тяжелый тест простоты Ферма на +- быстрый алгоритм Тест Миллера — Рабина. Даже если оптимизации не добавило (субьективно добавило), этот алгоритм используется в настоящей криптографии, а значит переход сделан точно не зря). Для дешифровки и подписи используется китайская теорема об остатках. Это повышает скорость в 4 раза. (В 8 раз, на самом деле, но возведение в степень по модулю дорого обходится:C) Так же 128-битный (например) ключ будет реально 128-битным. Ранее генерировалось 2 числа по 128 бит, итого ключ 256 бит, сейчас делю на 2 длину и получаются ключи в 128 бит. По этой причине минимальный размер ключа теперь 32 бита. Если у вас ключ 16-ти битный, не беспокойтесь: из-за бага он был 32-битным , лучше беспокойтесь о безопасности)) Сейчас обновлю документацию, но особых изменений в методах нет.
- 72 ответа
-
- 1
-
-
- цифровая подпись
- шифрование
- (и ещё 1 )
-
Шарил по форумам (в поисках эффективной организации поиска простых чисел), внезапно обнаружил: Так что моя реализация полностью оправдана, хоть и немного костыльна.
- 72 ответа
-
- цифровая подпись
- шифрование
- (и ещё 1 )
-
Похоже, да. Но я провел тестирование на слишком малых числах, возможно на больших числах появляются проблемы. В любом случае. такой алгоритм должен быть на широкую публику (я имею ввиду описание), ибо.. он очень простой. Но его нет, так что похоже он на больших числах не работает, либо через алгоритм Эвклида быстрее. Нужно тестирование и бенчмаркинг. Но, кажется, это не такая уж и задача. Для меня сейчас главное - оптимизировать поиск больших простых чисел, вот это действительно увеличит скорость. А возможно, просто на больших phi он очень долго возводит. Те же 64 бита - там числа порядка 10^30
- 72 ответа
-
- цифровая подпись
- шифрование
- (и ещё 1 )
-
Разобрался с алгоритмом Евклида. Генерация ключей происходит реально быстро, и с первого раза (цикл в коде - ну не знаю, можно и убрать). Основное время занимает генерация простых чисел, что неудивительно - с увеличением диапазона их количество в нем все падает и падает. Тест ферма берет некое число a в степень p-1 (p - проверяемое число), а вычисление степени, тем более на таких огромных числах - это невероятно сложное вычисление. Даже по модулю. Поиграюсь с тестами простоты, найду самый быстрый и выпущу еще одно обновление. А дальше - только избавляться от костылей вроде subNum - я решил не ждать Zer0Galaxy и не нагружать его работой, а накостылить целые числа на основе натуральных (и не переделывать алгоритм под натуральные - я не нашел даже описания алгоритма на натуральных числах), тем более, что нужно всего 3 операции - умножение, сложение и вычитание. Обновление уже на гитхабе, можно скачивать. Охх, знали бы вы, как у меня бомбило при поиске ошибки в алгоритме Евклида. А оно просто возвращало отрицательное число, и нужно было модуль прибавить к нему.
- 72 ответа
-
- цифровая подпись
- шифрование
- (и ещё 1 )
-
Хотел сегодня провести сногсшибательное обновление с полной оптимизацией всего и вся. Не вышло. Собственно, появилась оптимизация теста ферма, при первом непрохождении числа возвращает false. Это ускоряет тест для составных чисел (не всех) в 8 раз, но оставляет точность теста нетронутой. Так же после создания ключа он проверяется шифрованием какого-нибудь простого числа (оно само выбирается). Из нереализованного, но закомментированного: расширенный алгоритм евклида :C Прошу помочь с оптимизацией и фиксом уже его (xD), ибо например 64-битный ключ мне так и не удалось на нем сделать - постоянно отбраковывает ключ (с 8ю битами с раза 2-3 делает). Хотя ускоряет создание ключа реально сильно. https://github.com/HeroBrine1st/RSA/blob/master/RSA/RSAB.lua UPD: я почти разобрался с этим алгоритмом евклида и понял, что какого-то хрена алгоритм обрезает число до семи знаков)) Вот и вся проблема UPD2: Выход за пределы натуральных чисел - вычитание большего из меньшего. Передлываю алгоритм под натуральные числа.
- 72 ответа
-
- 1
-
-
- цифровая подпись
- шифрование
- (и ещё 1 )
-
Да) Я использовал твои наработки с сети фейстеля, когда там строка в 4 символа в число преобразовывалась.
- 72 ответа
-
- цифровая подпись
- шифрование
- (и ещё 1 )
-
Еще одно большое обновление. Добавлено то, что сказал выше + работа с текстом. С hpm одна большая проблема - пекейдж просто не добавляется. Опять же, требуется помощь с оптимизацией. Подробности мелким шрифтом в шапке внизу. (вкратце - нужно оптимизировать поиск экспонент).
- 72 ответа
-
- цифровая подпись
- шифрование
- (и ещё 1 )
-
Собственно, поддержка ООП. Когда Zer0Galaxy выложит metaint на npm,я это добавлю в npm и в шапку темы (просто не хочу у себя ее выкладывать, все же большую часть работы он сделал) https://github.com/HeroBrine1st/RSA/tree/master/RSA require("RSA") - все как обычно. RSA(filepath or bitlen) - импортирует или создает класс RSA. Методы класса - save - сохраняет, sign - подписывает число, verify(num:number, cryptedNumber: number) - проверяет подпись, encrypt - шифрует, decrypt - расшифровывает. Наличие публичного ключа в файле ключа обязательно. Для обратной совместимости - require("RSA/RSAB")
- 72 ответа
-
- цифровая подпись
- шифрование
- (и ещё 1 )
-
Я пока не готов это сделать. Я переведу эту библиотеку на ООП, тогда выложу на hpm. Предложенный выше алгоритм еще имеет кучу недостатков и не готов к полноценному использованию. Но это уже огромный шаг вперед - библиотека адекватно работает с огромными ключами)
- 72 ответа
-
- цифровая подпись
- шифрование
- (и ещё 1 )
-
Пришло большое обновление. В сотрудничестве с Zer0Galaxy (не буду тегать второй раз) мы доделали библиотеку metaint и RSA. Добавлена поддержка кастомной длины ключа.
- 72 ответа
-
- цифровая подпись
- шифрование
- (и ещё 1 )
-
В канале Experimental появились эти QR коды. Удалите файл /TabletOS/Settings.bin и переустановите систему с каналом Experimental, затем пройдите Setup Wizard и найдите в настройках уведомление "Добро пожаловать в графическую оболочку TabletOS" (это и есть те самые инструкции для юзера). Слова перед "кликабельно" вроде как кликаются. Вроде как, потому что не знаешь, как работать с этой луа, например у меня сегодня один и тот же код в разных функциях давал разный результат)) отличие было в цвете текста. Пока это в канале Experimental, могу послушать рекомендации по изменению вида этого QR-кода, ибо я не знаю. как убрать эту черную область (черный на зеленый не сменить - считыватель не видит тогда код) Использовал костыль от ECS (unicode.find из ECSAPI), либу qr кодов с гугла и braile bicycle с этого форума, модифицировав под даблбуфер. (Спасибо всем, что почти ничего не пришлось писать самому ) + свайпы таки могут появиться, я решил просто убрать анимацию, что позволит В РАЗЫ уменьшить количество кода. Что забыл сказать при обновлении вчера. Все необновившиеся до 1.0.6 потеряют доступ к обновлениям перед обновлением 1.0.7. Связано оно с тем, что в системе обновлений есть автоматическая подчистка файлов, которых уже нет в файллисте, а я как раз в 1.0.7 удаляю /lib/TabletOSGraphics.lua и переделываю ее в папку - будет несовместимость. Переустановить систему, к сожалению, не поможет :C Надеюсь с помощью installerScript исправить это
-
Если юзер хочет перейти по ссылке, но ему лень списывать, он на нее нажимает и сканирует QR-код, получает ссылку и переходит по ней. Ну у меня не исчерпывает, у меня вон на сервисе_нейм подписчиков штук 40 пришло без пиара за месяцев 3. Да и кодят для удовольствия вообще-то) Я щас доделываю саму концепцию оболочки (где-то в 2019м, мб раньше), выпущу 2.0 и начну клепать прожки Ээ, это может конечно доставить несовместимостей, но попробовать стоит. Тем более, что в оболочке весь ввод от одной функции зависит. UPD: не будет несовместимостей, я же при добавлении детектора малой памяти заодно все проги на перерисовку экрана раз в 0.5сек переписал
-
Еще одно обновление. Удалил из TODO свайпы - слишком сложно и бесполезно. Добавил в TODO QR-коды для ссылок - очень просто (нашел либу и научился ей пользоваться) и полезно - с сервиса_нейм ко мне в соцсеть_нейм и в мессенджер_нейм будут (надеюсь) быстрее перетекать юзеры и писать багрепорты, которые я сам не обнаруживаю. Фиксы: Ассоциации файлов не работали вообще Теперь "низкий уровень свободной памяти" - 64 килобайта. При меньших значениях возникали проблемы. Всплывающие окна теперь располагаются правильно. Добавлено: Подсказки пользователю о некоторых аспектах работы с системой (решил перевести все на нормальный фреймворк вместо однотипных кусков кода по всей оболочке). Кнопка "Продолжить" у поля ввода. Кнопка удаления уведомления, а так же при клике по самому уведомлению оно откроется полностью. У файлов в "Все программы" появилось контекстное меню. Изменения: Полный рефакторинг системы обновлений. Внимание: вам придет два обновления. Одно обновление обновит оболочку, а второе - инициализирует систему обновлений.
-
package.preload - таблица с функциями, возвращающими библиотеку. Используется самой опеносью, что бы закинуть туда библиотек в незагруженном формате и загрузить одну из них - тогда все зависимости загрузятся сами и не надо будет танцевать с бубном. Если изменить на loaded, надо еще заменить все после "=" на просто api.
-
Неплохо бы найти способ так же делать в либе
-
Обновил библиотеку. Появился longpoll и запросы к API теперь асинхронные. Однако вылетает ошибка, скорее всего из-за блокировок (тем не менее, телеграм без прокси у меня работает прекрасно). Если у вас даже с впн выпадает ошибка - напишите. + появилась поддержка веб-прокси, надо раскомментировать 7ю строку и вставить url, + переписать функцию encode (ради одной функции тащить web.lua от ECS не очень хотелось), если сайт использует другой вариант кодирования URL.
-
Сделал промисы наиболее похожими на настоящие. Нет только методов resolve и reject у самой либы (по-моему, особо не нужно). UPD: уже есть + даже если на уже выполненный промис добавить обработчик, он выполнится, если соблюдены его условия. Надеюсь, без дубликатов других промисов и нареканий.
- 5 ответов
-
- promise
- moonscript
-
(и ещё 1 )
Теги:
-
Чейнинг тут есть. Тут другая сторона медали - нельзя на один промис навешать 2 обработчика, только последовательно, друг за дружкой.
- 5 ответов
-
- promise
- moonscript
-
(и ещё 1 )
Теги:
-
thread.waitForAny({promise.thread}) local result = table.unpack(promise.result) Я уже начал юзать эту либу (в который раз убеждаюсь, что ничего по приколу делать не могу) и дорабатываю ее, так что возможно эти 2 строки кода появятся в либке)
- 5 ответов
-
- promise
- moonscript
-
(и ещё 1 )
Теги:
-
Для создания асихнронных библиотек по типу vk-fast-longpoll у nodejs. pastebin get 4Lh9ALEY /lib/Promise.lua Методы библиотеки: all(iterable: table) - создает промис, который ждет завершения всех переданных промисов (в виде таблицы) и в resolve шлет таблицу со всеми их значениями. Если хоть один завершится с ошибкой, вызовет reject с этой ошибкой race(iterable: table) - создает промис, который ждет первого завершения любого промиса, и проксифицирует его результат на себя (т.е. ошибку или результат перекидывает через себя, не обрабатывая) resolve(value:any) - создает промис, который успешно завершился с параметром value reject(value:any) - создает промис, который завершился с ошибкой value Магия ООП начинается с магии метатаблиц - вызывайте библиотеку как функцию. Просто Promise(...). Аргумент один - функция, принимающая 2 аргумента - resolve и reject. Если промис завершает работу успешно, он вызывает функцию resolve с одним (!) аргументом, а та передает его обработчикам. Если с ошибкой - вызывает reject, либо он вызывается автоматически при синхронной ошибке (attempt to call a nil value, error(...) и все подобное). Возвращает класс. У него 3 метода: next(onResolve:function,onReject:function): self: object (__name=Promise) - аналог then в NodeJS. catch(onReject): self: object (__name=Promise) - думаю понятно. await - ждет завершения промиса и возвращает его результат. Поддерживается чейнинг, но паралельные обработчики не добавить, и я не знаю, как это исправить :C Если во время чейнинга из обработчика вернуть промис, библиотека будет ждать его завершения и передаст результат в следующий обработчик. Если на уже выполненный промис навесить обработчик, он выполнится синхронно. На выполняющийся - асинхронно после завершения. Обьяснил возможно непонятно, обьяснение на learn.javascript.ru. Примеры кода: local Promise = require("Promise") local p = Promise(function(resolve,reject) print(123) os.sleep(5) print(234) resolve(5) end) --123 p:next(function(result) print(result) return 8 end) os.sleep(5) --234 --5 print(p.result) --8 a=Promise(function(a,b) os.sleep(5) a(1) end) b=Promise(function(a,b) os.sleep(1) a(2) end) c = Promise.all({a,b}) c:onResolve(function(values) print(serialization.serialize(values)) end) d = Promise.race({a,b}) d:onResolve(function(values) print(values) end) os.sleep(10) --2 --{2,1} Чистый исходный код на MoonScript Если туда не засовывать os.sleep, то промис заблокирует остальные потоки, как и если в основную программу не вставить os.sleep, она заблокирует промис. Учтите.
- 5 ответов
-
- promise
- moonscript
-
(и ещё 1 )
Теги:
-
Обновление завез. Фиксы: Пимпочка скроллбара неправильно отображалась (окно с прокруткой сразу после отрисовки отображало пимпочку, несоотвествующую реальным размерам показанного контента) Юникод в поле ввода теперь поддерживается полноценно Папка рабочего стола изменена в связи с грамматической ошибкой (Desctop -> Desktop) Добавлено: Горячие клавиши. Клик + delete - файл удаляется, клик + ctrl + e - редактирование, клик+ctrl+e+delete - перезапись файла. Иконка батарейки в статусбаре - . (К сожалению, пока является статичным элементом) Техническое: файл настроек автоматически обновляется Изменено: Техническое: очистка кода в SetupWizard Техническое: частичный рефакторинг TabletOSGraphics. P.s. стараюсь выпускать обновления в первую субботу каждого месяца. До этого все изменения накапливаются в канале Experimental. В инсталлере этот канал есть, можете смотреть). Но там обычно немного нестабильно.
-
string.find возвращает 2 величины - начало искомой подстроки и конец. Т.е. ты можешь получить начало слова и его конец, а затем обрезать с помощью unicode.sub(строка_для_обрезки,начало,конец). string.sub лучше для строк с юникодом не использовать. Пример кода - https://ideone.com/tEZHqh Что делает код выше со строкой str: 1.Ищет в строке подстроку "badWord" и получает положение ее начала и конца с помощью string.find(строка_в_которой_ищем,строка_которую_ищем) 2. Обрезает строку до первой буквы слова с помощью string.sub(строка_для_обрезки,начало,конец) 3. Обрезает строку от последней буквы слова с помощью string.sub(строка_для_обрезки,начало) (конец можно опустить - тогда он станет равен -1, т.е. до самого конца строки) 4. Конкатекует две строки, получая строку без слова badWord В данном случае надо будет делать это в цикле, пока string.find не вернет nil, и переходить к следующему "запрещенному" слову. P.s. возможно много информации. Отвечаю кратко - тебе нужен string.sub (s, i [, j]), где s - строка для обрезки, i - начало, j - конец. UPD: Не подумав написал. Можно использовать string.gsub(строка_из_которой_удалить,слово_которое_удалить,на_что_заменить), хотя при некоторой доработке можно с помощью алгоритма выше сделать складывание "запрещенных" слов в отдельную строку/таблицу, чего gsub не позволяет.
-
Точняк, ступил) спасибо
-
Поддерживаться-то поддерживается, но уместить в одну строку я его не смогу. Увеличить кол-во строк не могу - в андроиде такого нету (да, статусбар я срисовал именно оттуда ), да и некрасиво будет. Было бы 4х8 субпикселей в шрифте брайля - было бы проще.
-
Перенесите эту тему в чулан пожалуйста)
