Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Чт ноя 15, 2018 8:06 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
СообщениеДобавлено: Чт июл 05, 2018 4:59 pm 
Не в сети

Зарегистрирован: Пн дек 05, 2016 11:04 am
Сообщения: 117
Kolibri TLS library --- GitHub repository

If you just want to get this RNG (not interested about how I got it by myself),
just scroll down to " 3) Include this RNG to your project " part of this message!

1) Extract the RNG from TLS Library
Спойлер: Показать
[*] Download three files from this repository:
Код:
hmac.inc  PRF.inc  SHA256.INC
and put them inside a new TLS-Library-RNG subdirectory of your project

[*] Open hmac.inc, you will see this code at lines 41-42
Код:
b = 64 ; block_size
l = 32 ; output length for SHA256
prf function will generate ( b + 3 * l ) random bytes, but only if ( b >= l ) - if this condition is not valid, your project will crash with exception 0E (page fault)

For example, if you want to generate 68 random bytes, you could change these values to
Код:
b = 32 ; block_size
l = 12 ; output length for SHA256
, because ( 32 + 3 * 12 ) = ( 32 + 36 ) = 68

[*] Open SHA256.INC and remove (or comment with ";") these six lines:
Код:
Line  4 || iglobal
Line  5 || align 4
Line 26 || eng
Line 28 || uglobal
Line 29 || align 4
Line 34 || eng
, because if you don't remove these six lines - you will get the errors like undefined symbol 'sha256_start_digest'

2) Get entropy for PRNG and create the interface to it

[*] Copy the source code of get_entropy function from the first post of this thread - (rus) Functions-"sources of entropy" for a quality RNG
(code hidden under a spoiler, click "Show") and put it to a new ./TLS-Library-RNG/entropy.inc file with your functions

Also, you may need to add this code to the end of get_entropy function (before the popa)
Код:
    mov esi, entropy
    mov ebx, ENTROPY_SIZE
    call replace_00_with_ff
, and declare replace_00_with_ff function with this code:
Спойлер: Показать
Код:
; replace_00_with_ff:
; replace 00 with ff in a memory area
;
; IN:    ESI - pointer to a memory area
;        EBX - size of a memory area

replace_00_with_ff:

    push eax ecx

    xor ecx, ecx

    .cycle_replace_00_with_ff:

        cmp byte[esi], 0
        jne .not_00
        mov byte[esi], 0xff

    .not_00:

        inc esi
        inc ecx
        cmp ecx, ebx
        jb .cycle_replace_00_with_ff

    pop ecx eax

    ret

[*] For convenience, to the same entropy.inc file we could add fill_random_buffer interface function:
Спойлер: Показать
Код:
; Prepare, then call a Pseudo Random function based on HMAC

fill_random_buffer:

    pusha

    call get_entropy
    xor ebx, ebx
    xor edx, edx
    xor eax, eax
    xor esi, esi
    stdcall prf, entropy, ENTROPY_SIZE+1, random_buffer

    popa

    ret
+1 at the ENTROPY_SIZE+1 is because the real size of entropy is +1 because of a null character

Also add there convert_random_buffer_to_ascii function - it could convert a part of random buffer to ASCII chars:
Спойлер: Показать
Код:
; convert_random_buffer_to_ascii:
; convert a part of random buffer to ASCII chars
;
; IN:       ECX = size of a part of random buffer which will be converted

convert_random_buffer_to_ascii:

    push esi edx ebx eax

    cmp ecx, 1
    jb .wrong_part_size
    cmp ecx, RANDOM_BUFFER_SIZE
    ja .wrong_part_size

    xor eax, eax
    xor ebx, ebx

    mov esi, random_buffer
    mov edx, 95

  .cycle_conversion:

    mov al, byte[esi]

    cmp al, 95
    jb .skip_division

    div dl
    mov al, ah

  .skip_division:

    add al, 32
    mov byte[esi], al

    inc ebx
    inc esi

    cmp ebx, ecx
    jne .cycle_conversion

  .wrong_part_size:

    pop eax ebx edx esi

    ret


3) Include this RNG to your project

[*] Add this code to your main project file, e.g. to example.asm :
Код:
include "./TLS-Library-RNG/hmac.inc"
include "./TLS-Library-RNG/PRF.inc"
include "./TLS-Library-RNG/SHA256.INC"
include "./TLS-Library-RNG/entropy.inc"
Код:
RANDOM_BUFFER_SIZE = b + 3 * l ; 'b' and 'l' are defined at hmac.inc
                               ; currently, b = 32 and l = 12, so:
                               ;         RANDOM_BUFFER_SIZE = (b + 3 * l) = (32 + 3 * 12) = 68
RANDOM_BUFFER_SIZE_TO_CONVERT = 65; call convert_random_buffer_to_ascii to convert 65 random_bytes to ASCII
                               ; ^ should be smaller than or equal to RANDOM_BUFFER_SIZE
random_buffer        db RANDOM_BUFFER_SIZE dup(0)
Код:
ENTROPY_SIZE = 56 ; check if there are any updates for ENTROPY_SIZE at this "sources of entropy" thread
entropy        db ENTROPY_SIZE dup(255), 0 ; http://board.kolibrios.org/viewtopic.php?f=2&t=3735
                                           ; ( code hidden under a spoiler, click "Show" )


4) Usage of PRNG

Код:
        push    ecx
        call    fill_random_buffer
        mov     ecx, RANDOM_BUFFER_SIZE_TO_CONVERT
        call    convert_random_buffer_to_ascii
        pop     ecx

5) Attached files (with SHA256 checksums)

Prepared TLS-Library-RNG_with_example is attached below to save your time!
Код:
b8d8c04dca25107a17ecbbc800cf4a2dfa923873e3a7bcf247aeb342b9c49ecc  ./entropy.inc
c2d36b18a460e664eec63d5373a3419f5a659379405dc942b1563dacea8f2303  ./example.asm
2a781b30ce74031e2aa37cf8d97a3a60fdf1630f04ef963023e5d20935a3015a  ./TLS-Library-RNG_with_example.zip
0ede9e511fc10f05a11b992808a893b315604b25bbccbd10759202788013cec3  ./TLS-Library-RNG.zip
Includes TLS-Library-RNG directory with four files, and example.asm which can't be compiled separately but you could borrow its' elements


Вложения:
Комментарий к файлу: SHA256 = 2a781b30ce74031e2aa37cf8d97a3a60fdf1630f04ef963023e5d20935a3015a
TLS-Library-RNG_with_example.zip [6.61 КБ]
11 скачиваний
Комментарий к файлу: SHA256 = 0ede9e511fc10f05a11b992808a893b315604b25bbccbd10759202788013cec3
TLS-Library-RNG.zip [5.93 КБ]
12 скачиваний
Комментарий к файлу: SHA256 = c2d36b18a460e664eec63d5373a3419f5a659379405dc942b1563dacea8f2303
example.asm [1.22 КБ]
11 скачиваний
Комментарий к файлу: SHA256 = b8d8c04dca25107a17ecbbc800cf4a2dfa923873e3a7bcf247aeb342b9c49ecc
entropy.inc [2.19 КБ]
11 скачиваний


Последний раз редактировалось floppy121 Пт июл 13, 2018 8:01 pm, всего редактировалось 29 раз.
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB