diff --git a/boot/bootsect/floppy.asm b/boot/bootsect/floppy.asm index 0b3e15f..4933b5d 100644 --- a/boot/bootsect/floppy.asm +++ b/boot/bootsect/floppy.asm @@ -109,8 +109,8 @@ _start: include '../common/bios.inc' include '../common/fat12.inc' -msg_error db "ERROR: ", 0 -msg_not_found db " not found", CR, LF, 0 +msg_error db "ERROR: ", 0 +msg_not_found db " not found", CR, LF, 0 kernel_file db "VMSTUPIDSYS", 0 stage1_file db "STPDLDR SYS", 0 diff --git a/boot/common/bios.inc b/boot/common/bios.inc index 9f62486..8143232 100644 --- a/boot/common/bios.inc +++ b/boot/common/bios.inc @@ -1,6 +1,5 @@ ;; File: bios.inc - ;; Function: bios_print ;; ;; Parameters: diff --git a/boot/efi/bootia32.asm b/boot/efi/bootia32.asm index e27a37a..3499dc8 100644 --- a/boot/efi/bootia32.asm +++ b/boot/efi/bootia32.asm @@ -48,6 +48,8 @@ efimain: section '.data' data readable writeable hello_msg du 'StupidOS EFI Bootloader', 13, 10, 0 + + ; Search path: / /boot /boot/efi kernel_file du 'vmstupid.sys', 0 handle dd ? diff --git a/boot/intro.txt b/boot/intro.txt index 61014dd..fdeee1b 100644 --- a/boot/intro.txt +++ b/boot/intro.txt @@ -2,6 +2,20 @@ File: Introduction About: Legacy +> +> +------------+ +> | bootsector |---+ +> +------------+ | +-------------+ +--------------+ +> +------>| stpdldr.sys |------>| vmstupid.sys | +> +-----------+ | +-------------+ +--------------+ +> | multiboot |----+ +> +-----------+ +> About: UEFI +> +> +--------------+ +--------------+ +> | BOOTIA32.EFI |----->| vmstupid.sys | +> +--------------+ +--------------+ +> diff --git a/boot/loader/loader.asm b/boot/loader/loader.asm index d6127d8..c3e94d4 100644 --- a/boot/loader/loader.asm +++ b/boot/loader/loader.asm @@ -18,6 +18,7 @@ _start: je multiboot use16 + align 2 ; ========================================================================= ; real mode code @@ -28,19 +29,34 @@ _start: mov si, msg_stage2 call bios_print + ; enable A20 line call a20_enable jc .error_a20 - ; detect memory + ; fetch memory map from bios call memory_get_map jc .error_memory + ; video information call video_setup + xchg bx, bx - ;cli - ;lgdt [gdt_ptr] - ;jmp 0x8:common32 - ;jmp $ + ; load GDT and enter Protected-Mode + lgdt [gdt_ptr] + + ; enable protected mode + mov eax, cr0 + or al, 1 + mov cr0, eax + + ; reload ds, es, fs, gs, ss + mov ax, 0x10 + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + mov ss, ax + jmp 0x8:common32 .error_memory: mov si, msg_error_memory @@ -59,23 +75,26 @@ _start: include 'video.inc' include 'gdt.inc' -msg_stage2 db "StupidOS Bootloader (Stage 1)", CR, LF, 0 +msg_stage2 db "StupidOS Loader", CR, LF, 0 msg_error_a20 db "ERROR: can't enable a20 line", CR, LF, 0 msg_error_memory db "ERROR: can't detect available memory", CR, LF, 0 - ;; -bi_screen_width: dw 0 -bi_screen_height: dw 0 - use32 ; ========================================================================= ; protected mode code ; ========================================================================= multiboot: + ; https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#Machine-state + + ; get screen information + + ; get memory map + + ; get kernel from module common32: - ;mov bx, 0x0f01 - ;mov word [eax], bx + mov dword [0xb8000], 0x07690748 + ; paging ; identity map first 1MB ; map kernel to 0xC0000000 @@ -86,13 +105,12 @@ hang: _edata: +boot_structure: + align 4096 boot_page_directory: rb 4096 -boot_0_page_table: - rb 4096 - boot_768_page_table: rb 4096 diff --git a/docs/config/Menu.txt b/docs/config/Menu.txt index 0b8f0dd..d562f35 100644 --- a/docs/config/Menu.txt +++ b/docs/config/Menu.txt @@ -1,4 +1,4 @@ -Format: 1.51 +Format: 1.52 Title: StupidOS @@ -17,6 +17,11 @@ Timestamp: Updated yyyy/mm/dd # yyyy - Four digit year. 2006 is "2006" # year - Four digit year. 2006 is "2006" +# These are indexes you deleted, so Natural Docs will not add them again +# unless you remove them from this line. + +Don't Index: Macros, Variables, Classes + # -------------------------------------------------------------------------- # @@ -45,7 +50,7 @@ File: FAQ (docs/faq.txt) Group: BootLoader { - File: Introduction (boot/intro.txt) + File: Introduction (boot/intro.txt) Group: BootSector { @@ -57,15 +62,15 @@ Group: BootLoader { File: loader.asm (boot/loader/loader.asm) } # Group: Loader - Group: Common { + Group: Common { File: bios.inc (boot/common/bios.inc) } # Group: Common - Group: EFI { File: bootia32.asm (boot/efi/bootia32.asm) + File: uefi.inc (boot/efi/uefi.inc) } # Group: EFI } # Group: BootLoader @@ -84,6 +89,16 @@ Group: Lib { Group: Crypto { + Group: chacha20 { + + File: chacha20.asm (lib/crypto/chacha20/chacha20.asm) + } # Group: chacha20 + + Group: Dilithium { + + File: ntt.asm (lib/crypto/dilithium/ntt.asm) + } # Group: Dilithium + Group: SHA2 { File: sha256.asm (lib/crypto/sha2/sha256.asm) diff --git a/kernel/mm/mm.inc b/kernel/mm/mm.inc index 71b67d5..8cc72e4 100644 --- a/kernel/mm/mm.inc +++ b/kernel/mm/mm.inc @@ -3,9 +3,4 @@ free_block_head dd 0x0 mm_init: ret - - -kernel_page_directory: - dd 0x1000 dup 0x0 -kernel_page_table: - dd 0x1000 dup 0x0 \ No newline at end of file + \ No newline at end of file diff --git a/kernel/vfs.inc b/kernel/vfs.inc new file mode 100644 index 0000000..96a4f92 --- /dev/null +++ b/kernel/vfs.inc @@ -0,0 +1,4 @@ +vfs_init: + ret + + diff --git a/lib/crypto/Makefile b/lib/crypto/Makefile index 2f10d43..5898b0f 100644 --- a/lib/crypto/Makefile +++ b/lib/crypto/Makefile @@ -2,7 +2,10 @@ TARGET = libcrypto.a OBJS = sha2/sha256.o sha2/sha512.o \ chacha20/chacha20.o INCS = sha2/sha2.h \ - chacha20/chacha20.h + chacha20/chacha20.h \ + dilithium/dilithium.h \ + falcon/falcon.h \ + keccak/keccak.h ASMS = sha2/sha2.inc \ chacha20/chacha20.inc diff --git a/lib/crypto/chacha20/chacha20.asm b/lib/crypto/chacha20/chacha20.asm index c4e78c4..717a1c6 100644 --- a/lib/crypto/chacha20/chacha20.asm +++ b/lib/crypto/chacha20/chacha20.asm @@ -1,3 +1,5 @@ + ;; File: chacha20.asm + ; https://en.wikipedia.org/wiki/Salsa20#ChaCha_variant ; https://datatracker.ietf.org/doc/html/rfc7539 ; https://cr.yp.to/chacha/chacha-20080120.pdf diff --git a/lib/crypto/chacha20/chacha20.h b/lib/crypto/chacha20/chacha20.h index eba6ee2..3b12c78 100644 --- a/lib/crypto/chacha20/chacha20.h +++ b/lib/crypto/chacha20/chacha20.h @@ -3,7 +3,7 @@ # include -# define CHACHA20_KEY_BYTES 32 +# define CHACHA20_KEY_BYTES 32 # define CHACHA20_NONCE_BYTES 12 # define CHACHA20_BLOCK_BYTES 64 diff --git a/lib/crypto/dilithium/dilithium.h b/lib/crypto/dilithium/dilithium.h new file mode 100644 index 0000000..29419b4 --- /dev/null +++ b/lib/crypto/dilithium/dilithium.h @@ -0,0 +1,13 @@ +#ifndef CRYPTO_DILITHIUM_H +# define CRYPTO_DILITHIUM_H 1 + +# define DILITHIUM2_PUBLICKEY_BYTES 1312 +# define DILITHIUM2_PRIVATEKEY_BYTES 2560 + +# define DILITHIUM3_PUBLICKEY_BYTES 1952 +# define DILITHIUM3_PRIVATEKEY_BYTES 4032 + +# define DILITHIUM5_PUBLICKEY_BYTES 2592 +# define DILITHIUM5_PRIVATEKEY_BYTES 4896 + +#endif /* !CRYPTO_DILITHIUM_H */ diff --git a/lib/crypto/dilithium/ntt.asm b/lib/crypto/dilithium/ntt.asm new file mode 100644 index 0000000..547be56 --- /dev/null +++ b/lib/crypto/dilithium/ntt.asm @@ -0,0 +1,40 @@ + ;; File: ntt.asm + + format COFF + use32 + + section '.data' data + ;; Constant: zetas +zetas: + dd 0, 25847, -2608894, -518909, 237124, -777960, -876248, 466468, + dd 1826347, 2353451, -359251, -2091905, 3119733, -2884855, 3111497, 2680103, + dd 2725464, 1024112, -1079900, 3585928, -549488, -1119584, 2619752, -2108549, + dd -2118186, -3859737, -1399561, -3277672, 1757237, -19422, 4010497, 280005, + dd 2706023, 95776, 3077325, 3530437, -1661693, -3592148, -2537516, 3915439, + dd -3861115, -3043716, 3574422, -2867647, 3539968, -300467, 2348700, -539299, + dd -1699267, -1643818, 3505694, -3821735, 3507263, -2140649, -1600420, 3699596, + dd 811944, 531354, 954230, 3881043, 3900724, -2556880, 2071892, -2797779, + dd -3930395, -1528703, -3677745, -3041255, -1452451, 3475950, 2176455, -1585221, + dd -1257611, 1939314, -4083598, -1000202, -3190144, -3157330, -3632928, 126922, + dd 3412210, -983419, 2147896, 2715295, -2967645, -3693493, -411027, -2477047, + dd -671102, -1228525, -22981, -1308169, -381987, 1349076, 1852771, -1430430, + dd -3343383, 264944, 508951, 3097992, 44288, -1100098, 904516, 3958618, + dd -3724342, -8578, 1653064, -3249728, 2389356, -210977, 759969, -1316856, + dd 189548, -3553272, 3159746, -1851402, -2409325, -177440, 1315589, 1341330, + dd 1285669, -1584928, -812732, -1439742, -3019102, -3881060, -3628969, 3839961, + dd 2091667, 3407706, 2316500, 3817976, -3342478, 2244091, -2446433, -3562462, + dd 266997, 2434439, -1235728, 3513181, -3520352, -3759364, -1197226, -3193378, + dd 900702, 1859098, 909542, 819034, 495491, -1613174, -43260, -522500, + dd -655327, -3122442, 2031748, 3207046, -3556995, -525098, -768622, -3595838, + dd 342297, 286988, -2437823, 4108315, 3437287, -3342277, 1735879, 203044, + dd 2842341, 2691481, -2590150, 1265009, 4055324, 1247620, 2486353, 1595974, + dd -3767016, 1250494, 2635921, -3548272, -2994039, 1869119, 1903435, -1050970, + dd -1333058, 1237275, -3318210, -1430225, -451100, 1312455, 3306115, -1962642, + dd -1279661, 1917081, -2546312, -1374803, 1500165, 777191, 2235880, 3406031, + dd -542412, -2831860, -1671176, -1846953, -2584293, -3724270, 594136, -3776993, + dd -2013608, 2432395, 2454455, -164721, 1957272, 3369112, 185531, -1207385, + dd -3183426, 162844, 1616392, 3014001, 810149, 1652634, -3694233, -1799107, + dd -3038916, 3523897, 3866901, 269760, 2213111, -975884, 1717735, 472078, + dd -426683, 1723600, -1803090, 1910376, -1667432, -1104333, -260646, -3833893, + dd -2939036, -2235985, -420899, -2286327, 183443, -976891, 1612842, -3545687, + dd -554416, 3919660, -48306, -1362209, 3937738, 1400424, -846154, 1976782 diff --git a/lib/crypto/falcon/falcon.h b/lib/crypto/falcon/falcon.h new file mode 100644 index 0000000..2070dba --- /dev/null +++ b/lib/crypto/falcon/falcon.h @@ -0,0 +1,10 @@ +#ifndef CRYPTO_FALCON_H +# define CRYPTO_FALCON_H 1 + +# define FALCON512_PUBLICKEY_BYTES 897 +# define FALCON512_PRIVATEKEY_BYTES 1281 + +# define FALCON1024_PUBLICKEY_BYTES 1793 +# define FALCON1024_PRIVATEKEY_BYTES 2305 + +#endif /* !CRYPTO_FALCON_H */ diff --git a/lib/crypto/keccak/keccak.h b/lib/crypto/keccak/keccak.h new file mode 100644 index 0000000..1027c7e --- /dev/null +++ b/lib/crypto/keccak/keccak.h @@ -0,0 +1,6 @@ +#ifndef CRYPTO_KECCAK_H +# define CRYPTO_KECCAK_H 1 + + + +#endif /* !CRYPTO_KECCAK_H */ diff --git a/lib/lzp/lzp.asm b/lib/lzp/lzp.asm index 4254334..62754bc 100644 --- a/lib/lzp/lzp.asm +++ b/lib/lzp/lzp.asm @@ -1,5 +1,4 @@ ;; File: lzp.asm - ; Lempel-Ziv + Prediction (a fast, efficient, and memory-use ; conservative compression algorithm) @@ -9,10 +8,11 @@ ;; https://hugi.scene.org/online/coding/hugi%2012%20-%20colzp.htm - include 'lzp.inc' +LZP_HASH_ORDER = 16 +LZP_HASH_SIZE = (1 shl LZP_HASH_ORDER) - LZP_HASH_ORDER = 16 - LZP_HASH_SIZE = (1 shl LZP_HASH_ORDER) + public lzp_compress + public lzp_decompress ; hash(h, x) (h = (h << 4) ^ x) diff --git a/lib/lzp/lzp.inc b/lib/lzp/lzp.inc index 6a78c14..7ecc0fa 100644 --- a/lib/lzp/lzp.inc +++ b/lib/lzp/lzp.inc @@ -1,2 +1,2 @@ - public lzp_compress - public lzp_decompress + extrn lzp_compress + extrn lzp_decompress diff --git a/tests/Makefile b/tests/Makefile new file mode 100644 index 0000000..4118235 --- /dev/null +++ b/tests/Makefile @@ -0,0 +1,4 @@ +TOPGOALS = all clean install + +.PHONY: $(TOPGOALS) +$(TOPGOALS): diff --git a/tools/coff-ld.c b/tools/coff-ld.c index 1e72e20..76b4771 100644 --- a/tools/coff-ld.c +++ b/tools/coff-ld.c @@ -7,6 +7,7 @@ static char *outfile = "a.out"; typedef struct section { + } Section; @@ -45,6 +46,7 @@ main(int argc, char **argv) SCNHDR shdr; uint8_t *buffer; SYM entry; + RELOC reloc; int idx; prg_name = argv[0];